From 6f4f58e30050e4ac5df5b9afd0bbe2c30e77a0a2 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 11 Oct 2023 21:27:36 +0200 Subject: [PATCH 001/105] Version 2.0.0-beta initial commit --- .eslintrc.json | 31 - .gitignore | 26 +- dependencies.txt | 8 - modules/core/__init__.py | 3 - modules/core/actions/__init__.py | 3 - modules/core/actions/event_listener.py | 46 - modules/core/actions/routines/__init__.py | 22 - .../core/actions/routines/abstract_routine.py | 76 - modules/core/actions/routines/barrier.py | 19 - modules/core/actions/routines/condition.py | 39 - .../core/actions/routines/debug_message.py | 18 - .../actions/routines/helpers/conditions.py | 67 - .../actions/routines/helpers/conversions.py | 47 - .../actions/routines/helpers/evaluation.py | 32 - .../core/actions/routines/payload_modifier.py | 49 - .../core/actions/routines/perform_workflow.py | 24 - modules/core/actions/routines/send_event.py | 34 - modules/core/actions/workflow.py | 27 - modules/core/data_manager.py | 11 - modules/core/database/__init__.py | 1 - modules/core/database/database.py | 377 - modules/core/event_manager.py | 148 - modules/core/handler_manager.py | 287 - modules/core/helpers/__init__.py | 2 - modules/core/helpers/event.py | 32 - modules/core/helpers/message.py | 11 - modules/handlers/__init__.py | 20 - modules/handlers/abstract_handler.py | 139 - modules/handlers/bms_serial_handler.py | 112 - .../must_pv_ph_inverter_modbus_handler.py | 159 - modules/handlers/serial_handler.py | 139 - modules/logging/__init__.py | 0 modules/logging/logger.py | 26 - modules/settings/__init__.py | 57 - modules/settings/defaults.py | 24 - modules/tools/__init__.py | 1 - modules/tools/modules_registrator.py | 13 - modules/tools/tools.py | 150 - modules/web_server/__init__.py | 0 modules/web_server/flask_web_server.py | 850 -- modules/web_server/src/Actions.ts | 32 - modules/web_server/src/Application.ts | 77 - modules/web_server/src/Inspector.ts | 408 - modules/web_server/src/main.ts | 3 - modules/web_server/src/utils/DateTime.ts | 19 - modules/web_server/src/utils/ElementTools.ts | 14 - modules/web_server/src/utils/URLTools.ts | 27 - modules/web_server/src/widgets/BigChart.ts | 129 - .../web_server/src/widgets/ChartPreview.ts | 104 - modules/web_server/src/widgets/Dialog.ts | 46 - modules/web_server/src/widgets/GifLoader.ts | 57 - modules/web_server/src/widgets/Menu.ts | 66 - .../web_server/src/widgets/Notifications.ts | 92 - modules/web_server/src/widgets/Page.ts | 76 - .../web_server/static/GifLoader.js/LICENSE | 674 -- .../web_server/static/GifLoader.js/README.md | 41 - .../static/GifLoader.js/example.html | 16 - .../static/GifLoader.js/src/css/GifLoader.css | 38 - .../GifLoader.js/src/css/GifLoader.css.map | 1 - .../GifLoader.js/src/css/GifLoader.sass | 33 - .../GifLoader.js/src/images/hex-loader.gif | Bin 399788 -> 0 bytes .../static/images/icons/actions.png | Bin 33010 -> 0 bytes .../web_server/static/images/icons/arrow.png | Bin 6101 -> 0 bytes .../web_server/static/images/icons/ban.png | Bin 11066 -> 0 bytes .../web_server/static/images/icons/close.png | Bin 21184 -> 0 bytes .../static/images/icons/close_thin.png | Bin 20515 -> 0 bytes .../web_server/static/images/icons/data.png | Bin 19682 -> 0 bytes .../static/images/icons/details.png | Bin 27369 -> 0 bytes .../web_server/static/images/icons/empty.png | Bin 11101 -> 0 bytes .../static/images/icons/handlers.png | Bin 13639 -> 0 bytes .../static/images/icons/info_blue.png | Bin 42249 -> 0 bytes .../static/images/icons/inspect.png | Bin 9814 -> 0 bytes .../static/images/icons/inspector.png | Bin 4145 -> 0 bytes .../web_server/static/images/icons/menu.png | Bin 955 -> 0 bytes .../static/images/icons/overview.png | Bin 10352 -> 0 bytes .../web_server/static/images/icons/plus.png | Bin 12514 -> 0 bytes .../static/images/icons/plus_bold.png | Bin 10956 -> 0 bytes .../web_server/static/images/icons/save.png | Bin 7407 -> 0 bytes .../static/images/icons/settings.png | Bin 23624 -> 0 bytes .../static/images/icons/success.png | Bin 45386 -> 0 bytes .../web_server/static/images/icons/trash.png | Bin 31200 -> 0 bytes .../static/images/icons/trash_white.png | Bin 31116 -> 0 bytes .../static/images/icons/types/bms_serial.png | Bin 10218 -> 0 bytes .../static/images/icons/types/default.png | Bin 20997 -> 0 bytes .../static/images/icons/types/inverter.png | Bin 883 -> 0 bytes .../static/images/icons/types/serial.png | Bin 36749 -> 0 bytes .../static/images/icons/warning.png | Bin 55916 -> 0 bytes .../static/images/icons/workflow.png | Bin 7687 -> 0 bytes .../web_server/static/images/touch-icon.png | Bin 1079 -> 0 bytes modules/web_server/static/styles/main.css | 1163 -- modules/web_server/static/styles/main.css.map | 1 - .../components/block_info/block_info.html | 12 - .../components/block_info/block_info.sass | 22 - .../block_info_item/block_info_item.html | 6 - .../block_info_item/block_info_item.sass | 31 - .../components/block_ladder/block_ladder.sass | 39 - .../block_ladder_item/block_ladder_item.sass | 19 - .../components/block_list/block_list.sass | 26 - .../block_list_item/block_list_item.html | 24 - .../block_list_item/block_list_item.sass | 75 - .../block_small_chart/block_small_chart.sass | 12 - .../templates/components/button/button.html | 8 - .../templates/components/button/button.sass | 72 - .../checkbox_list/checkbox_list.sass | 1 - .../checkbox_list_item.html | 21 - .../checkbox_list_item.sass | 35 - .../templates/components/defaults.sass | 63 - .../templates/components/dialog/dialog.html | 6 - .../templates/components/dialog/dialog.sass | 52 - .../components/dialog/dialog_container.html | 5 - .../templates/components/fonts.sass | 44 - .../templates/components/form/form.sass | 16 - .../components/input_text/input_text.sass | 15 - .../inspector-chart-view.sass | 91 - .../web_server/templates/components/main.sass | 42 - .../templates/components/navbar/navbar.html | 21 - .../templates/components/navbar/navbar.sass | 43 - .../components/navbar/navbar_button.sass | 12 - .../navbar/navbar_item/navbar_item.html | 7 - .../navbar/navbar_item/navbar_item.sass | 36 - .../notification_item/notification_item.sass | 86 - .../notifications/notifications.html | 12 - .../notifications/notifications.sass | 47 - .../templates/components/table/table.sass | 156 - .../templates/components/variables.sass | 43 - .../components/workflow/workflow.sass | 52 - .../workflow/workflow_item/workflow_item.sass | 72 - .../dialogs/add_new_event_listener.html | 40 - .../templates/dialogs/add_new_handler.html | 36 - .../templates/dialogs/add_new_routine.html | 53 - .../dialogs/choose_handler_type.html | 27 - .../dialogs/choose_routine_type.html | 30 - .../dialogs/edit_event_listener.html | 41 - .../templates/dialogs/edit_handler.html | 37 - .../templates/dialogs/edit_routine.html | 51 - .../dialogs/json_attributes_to_store.html | 22 - .../web_server/templates/layouts/default.html | 45 - .../web_server/templates/pages/actions.html | 61 - modules/web_server/templates/pages/data.html | 29 - .../web_server/templates/pages/details.html | 14 - .../web_server/templates/pages/handlers.html | 16 - .../web_server/templates/pages/inspector.html | 118 - .../web_server/templates/pages/overview.html | 68 - .../web_server/templates/partials/navbar.html | 0 .../templates/partials/notifications.html | 8 - package.json | 41 - requirements.txt | 8 - run.py | 86 - sass-lint.yml | 15 - settings.py | 101 - src/client/.eslintrc.json | 25 + src/client/.prettierrc | 9 + src/client/.stylelintrc.json | 6 + src/client/next-env.d.ts | 5 + src/client/next.config.ts | 35 + src/client/package-lock.json | 9942 +++++++++++++++++ src/client/package.json | 46 + src/client/pages/_app.tsx | 32 + src/client/pages/dashboard.tsx | 39 + src/client/pages/handlers.tsx | 95 + src/client/pages/index.tsx | 13 + src/client/pages/inspector.tsx | 15 + src/client/pages/internal-server-error.tsx | 5 + .../client/public}/fonts/Cantarell-Bold.otf | Bin .../public}/fonts/Cantarell-ExtraBold.otf | Bin .../client/public}/fonts/Cantarell-Light.otf | Bin .../public}/fonts/Cantarell-Regular.otf | Bin .../client/public}/fonts/Cantarell-Thin.otf | Bin .../public}/fonts/IndieFlower-Regular.ttf | Bin .../client/public}/fonts/RobotoMono-Bold.ttf | Bin .../public}/fonts/RobotoMono-Medium.ttf | Bin .../public}/fonts/RobotoMono-Regular.ttf | Bin src/client/public/icons/cosmic/air.svg | 3 + .../public/icons/cosmic/battery-medium.svg | 3 + .../public/icons/cosmic/branch-horizontal.svg | 3 + .../public/icons/cosmic/chart-square.svg | 3 + src/client/public/icons/cosmic/grid-mixed.svg | 5 + src/client/public/icons/cosmic/processor.svg | 3 + src/client/public/icons/cosmic/sun.svg | 3 + .../client/public/icons/custom}/http.png | Bin .../client/public/icons/custom/logo.png | Bin src/client/public/images/chart.png | Bin 0 -> 2432 bytes src/client/src/bridge/endpoints.ts | 6 + src/client/src/bridge/hooks.ts | 17 + src/client/src/bridge/index.ts | 1 + src/client/src/bridge/models/HandlerModel.ts | 32 + .../src/bridge/models/NewHandlerModel.ts | 6 + src/client/src/bridge/models/index.ts | 2 + src/client/src/bridge/models/utils.ts | 11 + .../src/bridge/modules/availableHandlers.ts | 9 + src/client/src/bridge/modules/handlers.ts | 21 + src/client/src/bridge/modules/index.ts | 2 + src/client/src/bridge/utils.ts | 39 + .../BooleanSwitcher/BooleanSwitcher.tsx | 18 + .../src/components/BooleanSwitcher/index.ts | 1 + src/client/src/components/Button/Button.scss | 73 + src/client/src/components/Button/Button.tsx | 54 + src/client/src/components/Button/index.ts | 1 + src/client/src/components/Button/mixins.scss | 7 + src/client/src/components/Card/Card.scss | 33 + src/client/src/components/Card/Card.tsx | 43 + .../Card/components/CardBody/CardBody.scss | 3 + .../Card/components/CardBody/CardBody.tsx | 20 + .../Card/components/CardBody/index.ts | 1 + .../components/CardHeader/CardHeader.scss | 17 + .../Card/components/CardHeader/CardHeader.tsx | 25 + .../Card/components/CardHeader/index.ts | 1 + .../src/components/Card/components/index.ts | 2 + src/client/src/components/Card/index.ts | 2 + src/client/src/components/Card/mixins.scss | 11 + .../src/components/FlexLayout/FlexLayout.scss | 13 + .../src/components/FlexLayout/FlexLayout.tsx | 50 + src/client/src/components/FlexLayout/index.ts | 1 + src/client/src/components/Header/Header.scss | 3 + src/client/src/components/Header/Header.tsx | 31 + src/client/src/components/Header/index.ts | 1 + src/client/src/components/Icon/Icon.scss | 30 + src/client/src/components/Icon/Icon.tsx | 47 + src/client/src/components/Icon/enums.ts | 55 + src/client/src/components/Icon/index.ts | 2 + src/client/src/components/Input/Input.scss | 36 + src/client/src/components/Input/Input.tsx | 51 + src/client/src/components/Input/index.ts | 1 + src/client/src/components/Input/mixins.scss | 14 + .../InputRenderer/InputRenderer.scss | 5 + .../InputRenderer/InputRenderer.tsx | 28 + .../src/components/InputRenderer/index.ts | 1 + .../src/components/LinkButton/LinkButton.tsx | 36 + src/client/src/components/LinkButton/index.ts | 1 + src/client/src/components/Loc/Loc.tsx | 14 + src/client/src/components/Loc/index.ts | 1 + src/client/src/components/Loc/utils.ts | 29 + src/client/src/components/Menu/Menu.scss | 25 + src/client/src/components/Menu/Menu.tsx | 24 + .../Menu/components/MenuItem/MenuItem.scss | 47 + .../Menu/components/MenuItem/MenuItem.tsx | 36 + .../Menu/components/MenuItem/index.ts | 1 + .../components/MenuSection/MenuSection.scss | 18 + .../components/MenuSection/MenuSection.tsx | 24 + .../Menu/components/MenuSection/index.ts | 1 + .../src/components/Menu/components/index.ts | 2 + src/client/src/components/Menu/index.ts | 2 + src/client/src/components/Navbar/Navbar.scss | 23 + src/client/src/components/Navbar/Navbar.tsx | 21 + .../components/NavbarItem/NavbarItem.scss | 19 + .../components/NavbarItem/NavbarItem.tsx | 35 + .../Navbar/components/NavbarItem/index.ts | 1 + .../components/NavbarLogo/NavbarLogo.scss | 3 + .../components/NavbarLogo/NavbarLogo.tsx | 18 + .../Navbar/components/NavbarLogo/index.ts | 1 + .../NavbarSection/NavbarSection.tsx | 18 + .../Navbar/components/NavbarSection/index.ts | 1 + .../components/NavbarUser/NavbarUser.scss | 20 + .../components/NavbarUser/NavbarUser.tsx | 28 + .../Navbar/components/NavbarUser/index.ts | 1 + .../src/components/Navbar/components/index.ts | 4 + src/client/src/components/Navbar/index.ts | 2 + .../src/components/Separator/Separator.scss | 7 + .../src/components/Separator/Separator.tsx | 17 + src/client/src/components/Separator/index.ts | 1 + .../AttributeWidget/AttributeWidget.scss | 37 + .../AttributeWidget/AttributeWidget.tsx | 29 + .../Widget/AttributeWidget/index.ts | 1 + src/client/src/components/Widget/Widget.scss | 1 + src/client/src/components/Widget/index.ts | 1 + src/client/src/components/components.scss | 11 + src/client/src/components/index.ts | 13 + .../layouts/NavbarLayout/NavbarLayout.scss | 15 + .../src/layouts/NavbarLayout/NavbarLayout.tsx | 36 + src/client/src/layouts/NavbarLayout/index.ts | 1 + src/client/src/layouts/index.ts | 1 + src/client/src/layouts/layouts.scss | 1 + src/client/src/partials/Handler/Handler.scss | 96 + src/client/src/partials/Handler/Handler.tsx | 68 + src/client/src/partials/Handler/index.ts | 1 + .../src/partials/NewHandler/NewHandler.scss | 17 + .../src/partials/NewHandler/NewHandler.tsx | 115 + src/client/src/partials/NewHandler/index.ts | 2 + .../NewHandler/newHandlerConfigSlice.ts | 38 + src/client/src/partials/index.ts | 2 + src/client/src/partials/partials.scss | 2 + src/client/src/store/StoreInit.tsx | 17 + src/client/src/store/index.ts | 2 + src/client/src/store/settingsSlice.ts | 43 + src/client/src/store/store.ts | 20 + src/client/src/types.ts | 66 + src/client/src/utils.ts | 191 + src/client/styles/fonts.scss | 53 + src/client/styles/main.scss | 18 + src/client/styles/mixins.scss | 27 + src/client/styles/variables.scss | 34 + src/client/tsconfig.json | 26 + src/server/Pipfile | 16 + src/server/Pipfile.lock | 345 + src/server/config.py | 14 + src/server/main.py | 45 + {modules => src/server/modules}/__init__.py | 0 src/server/modules/attribute_manager.py | 79 + src/server/modules/blueprints/__init__.py | 3 + src/server/modules/blueprints/enums.py | 4 + src/server/modules/blueprints/handlers.py | 98 + src/server/modules/database/__init__.py | 9 + src/server/modules/handler_manager.py | 82 + src/server/modules/handlers/__init__.py | 11 + .../modules/handlers/abstract_handler.py | 149 + .../server/modules}/handlers/http_handler.py | 64 +- src/server/modules/logging/__init__.py | 1 + src/server/modules/logging/logger.py | 39 + .../server/modules/models}/__init__.py | 0 src/server/modules/models/attribute.py | 36 + src/server/modules/models/data_stat.py | 36 + src/server/modules/models/data_unit.py | 29 + src/server/modules/models/handler.py | 34 + src/server/modules/models/logging_message.py | 23 + src/server/modules/tools.py | 93 + src/server/modules/utils/__init__.py | 1 + src/server/modules/utils/color_print.py | 14 + tsconfig.json | 19 - webpack.config.ts | 34 - 319 files changed, 13779 insertions(+), 8600 deletions(-) delete mode 100644 .eslintrc.json delete mode 100644 dependencies.txt delete mode 100644 modules/core/__init__.py delete mode 100644 modules/core/actions/__init__.py delete mode 100644 modules/core/actions/event_listener.py delete mode 100644 modules/core/actions/routines/__init__.py delete mode 100644 modules/core/actions/routines/abstract_routine.py delete mode 100644 modules/core/actions/routines/barrier.py delete mode 100644 modules/core/actions/routines/condition.py delete mode 100644 modules/core/actions/routines/debug_message.py delete mode 100644 modules/core/actions/routines/helpers/conditions.py delete mode 100644 modules/core/actions/routines/helpers/conversions.py delete mode 100644 modules/core/actions/routines/helpers/evaluation.py delete mode 100644 modules/core/actions/routines/payload_modifier.py delete mode 100644 modules/core/actions/routines/perform_workflow.py delete mode 100644 modules/core/actions/routines/send_event.py delete mode 100644 modules/core/actions/workflow.py delete mode 100644 modules/core/data_manager.py delete mode 100644 modules/core/database/__init__.py delete mode 100644 modules/core/database/database.py delete mode 100644 modules/core/event_manager.py delete mode 100644 modules/core/handler_manager.py delete mode 100644 modules/core/helpers/__init__.py delete mode 100644 modules/core/helpers/event.py delete mode 100644 modules/core/helpers/message.py delete mode 100644 modules/handlers/__init__.py delete mode 100644 modules/handlers/abstract_handler.py delete mode 100644 modules/handlers/bms_serial_handler.py delete mode 100644 modules/handlers/must_pv_ph_inverter_modbus_handler.py delete mode 100644 modules/handlers/serial_handler.py delete mode 100644 modules/logging/__init__.py delete mode 100644 modules/logging/logger.py delete mode 100644 modules/settings/__init__.py delete mode 100644 modules/settings/defaults.py delete mode 100644 modules/tools/__init__.py delete mode 100644 modules/tools/modules_registrator.py delete mode 100644 modules/tools/tools.py delete mode 100644 modules/web_server/__init__.py delete mode 100644 modules/web_server/flask_web_server.py delete mode 100644 modules/web_server/src/Actions.ts delete mode 100644 modules/web_server/src/Application.ts delete mode 100644 modules/web_server/src/Inspector.ts delete mode 100644 modules/web_server/src/main.ts delete mode 100644 modules/web_server/src/utils/DateTime.ts delete mode 100644 modules/web_server/src/utils/ElementTools.ts delete mode 100644 modules/web_server/src/utils/URLTools.ts delete mode 100644 modules/web_server/src/widgets/BigChart.ts delete mode 100644 modules/web_server/src/widgets/ChartPreview.ts delete mode 100644 modules/web_server/src/widgets/Dialog.ts delete mode 100644 modules/web_server/src/widgets/GifLoader.ts delete mode 100644 modules/web_server/src/widgets/Menu.ts delete mode 100644 modules/web_server/src/widgets/Notifications.ts delete mode 100644 modules/web_server/src/widgets/Page.ts delete mode 100644 modules/web_server/static/GifLoader.js/LICENSE delete mode 100644 modules/web_server/static/GifLoader.js/README.md delete mode 100644 modules/web_server/static/GifLoader.js/example.html delete mode 100644 modules/web_server/static/GifLoader.js/src/css/GifLoader.css delete mode 100644 modules/web_server/static/GifLoader.js/src/css/GifLoader.css.map delete mode 100644 modules/web_server/static/GifLoader.js/src/css/GifLoader.sass delete mode 100644 modules/web_server/static/GifLoader.js/src/images/hex-loader.gif delete mode 100644 modules/web_server/static/images/icons/actions.png delete mode 100644 modules/web_server/static/images/icons/arrow.png delete mode 100644 modules/web_server/static/images/icons/ban.png delete mode 100644 modules/web_server/static/images/icons/close.png delete mode 100644 modules/web_server/static/images/icons/close_thin.png delete mode 100644 modules/web_server/static/images/icons/data.png delete mode 100644 modules/web_server/static/images/icons/details.png delete mode 100644 modules/web_server/static/images/icons/empty.png delete mode 100644 modules/web_server/static/images/icons/handlers.png delete mode 100644 modules/web_server/static/images/icons/info_blue.png delete mode 100644 modules/web_server/static/images/icons/inspect.png delete mode 100644 modules/web_server/static/images/icons/inspector.png delete mode 100644 modules/web_server/static/images/icons/menu.png delete mode 100644 modules/web_server/static/images/icons/overview.png delete mode 100644 modules/web_server/static/images/icons/plus.png delete mode 100644 modules/web_server/static/images/icons/plus_bold.png delete mode 100644 modules/web_server/static/images/icons/save.png delete mode 100644 modules/web_server/static/images/icons/settings.png delete mode 100644 modules/web_server/static/images/icons/success.png delete mode 100644 modules/web_server/static/images/icons/trash.png delete mode 100644 modules/web_server/static/images/icons/trash_white.png delete mode 100644 modules/web_server/static/images/icons/types/bms_serial.png delete mode 100644 modules/web_server/static/images/icons/types/default.png delete mode 100644 modules/web_server/static/images/icons/types/inverter.png delete mode 100644 modules/web_server/static/images/icons/types/serial.png delete mode 100644 modules/web_server/static/images/icons/warning.png delete mode 100644 modules/web_server/static/images/icons/workflow.png delete mode 100644 modules/web_server/static/images/touch-icon.png delete mode 100644 modules/web_server/static/styles/main.css delete mode 100644 modules/web_server/static/styles/main.css.map delete mode 100644 modules/web_server/templates/components/block_info/block_info.html delete mode 100644 modules/web_server/templates/components/block_info/block_info.sass delete mode 100644 modules/web_server/templates/components/block_info/block_info_item/block_info_item.html delete mode 100644 modules/web_server/templates/components/block_info/block_info_item/block_info_item.sass delete mode 100644 modules/web_server/templates/components/block_ladder/block_ladder.sass delete mode 100644 modules/web_server/templates/components/block_ladder/block_ladder_item/block_ladder_item.sass delete mode 100644 modules/web_server/templates/components/block_list/block_list.sass delete mode 100644 modules/web_server/templates/components/block_list/block_list_item/block_list_item.html delete mode 100644 modules/web_server/templates/components/block_list/block_list_item/block_list_item.sass delete mode 100644 modules/web_server/templates/components/block_small_chart/block_small_chart.sass delete mode 100644 modules/web_server/templates/components/button/button.html delete mode 100644 modules/web_server/templates/components/button/button.sass delete mode 100644 modules/web_server/templates/components/checkbox_list/checkbox_list.sass delete mode 100644 modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.html delete mode 100644 modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.sass delete mode 100644 modules/web_server/templates/components/defaults.sass delete mode 100644 modules/web_server/templates/components/dialog/dialog.html delete mode 100644 modules/web_server/templates/components/dialog/dialog.sass delete mode 100644 modules/web_server/templates/components/dialog/dialog_container.html delete mode 100644 modules/web_server/templates/components/fonts.sass delete mode 100644 modules/web_server/templates/components/form/form.sass delete mode 100644 modules/web_server/templates/components/input_text/input_text.sass delete mode 100644 modules/web_server/templates/components/inspector-chart-view/inspector-chart-view.sass delete mode 100644 modules/web_server/templates/components/main.sass delete mode 100644 modules/web_server/templates/components/navbar/navbar.html delete mode 100644 modules/web_server/templates/components/navbar/navbar.sass delete mode 100644 modules/web_server/templates/components/navbar/navbar_button.sass delete mode 100644 modules/web_server/templates/components/navbar/navbar_item/navbar_item.html delete mode 100644 modules/web_server/templates/components/navbar/navbar_item/navbar_item.sass delete mode 100644 modules/web_server/templates/components/notifications/notification_item/notification_item.sass delete mode 100644 modules/web_server/templates/components/notifications/notifications.html delete mode 100644 modules/web_server/templates/components/notifications/notifications.sass delete mode 100644 modules/web_server/templates/components/table/table.sass delete mode 100644 modules/web_server/templates/components/variables.sass delete mode 100644 modules/web_server/templates/components/workflow/workflow.sass delete mode 100644 modules/web_server/templates/components/workflow/workflow_item/workflow_item.sass delete mode 100644 modules/web_server/templates/dialogs/add_new_event_listener.html delete mode 100644 modules/web_server/templates/dialogs/add_new_handler.html delete mode 100644 modules/web_server/templates/dialogs/add_new_routine.html delete mode 100644 modules/web_server/templates/dialogs/choose_handler_type.html delete mode 100644 modules/web_server/templates/dialogs/choose_routine_type.html delete mode 100644 modules/web_server/templates/dialogs/edit_event_listener.html delete mode 100644 modules/web_server/templates/dialogs/edit_handler.html delete mode 100644 modules/web_server/templates/dialogs/edit_routine.html delete mode 100644 modules/web_server/templates/dialogs/json_attributes_to_store.html delete mode 100644 modules/web_server/templates/layouts/default.html delete mode 100644 modules/web_server/templates/pages/actions.html delete mode 100644 modules/web_server/templates/pages/data.html delete mode 100644 modules/web_server/templates/pages/details.html delete mode 100644 modules/web_server/templates/pages/handlers.html delete mode 100644 modules/web_server/templates/pages/inspector.html delete mode 100644 modules/web_server/templates/pages/overview.html delete mode 100644 modules/web_server/templates/partials/navbar.html delete mode 100644 modules/web_server/templates/partials/notifications.html delete mode 100644 package.json delete mode 100644 requirements.txt delete mode 100755 run.py delete mode 100644 sass-lint.yml delete mode 100644 settings.py create mode 100644 src/client/.eslintrc.json create mode 100644 src/client/.prettierrc create mode 100644 src/client/.stylelintrc.json create mode 100644 src/client/next-env.d.ts create mode 100644 src/client/next.config.ts create mode 100644 src/client/package-lock.json create mode 100644 src/client/package.json create mode 100644 src/client/pages/_app.tsx create mode 100644 src/client/pages/dashboard.tsx create mode 100644 src/client/pages/handlers.tsx create mode 100644 src/client/pages/index.tsx create mode 100644 src/client/pages/inspector.tsx create mode 100644 src/client/pages/internal-server-error.tsx rename {modules/web_server/static => src/client/public}/fonts/Cantarell-Bold.otf (100%) rename {modules/web_server/static => src/client/public}/fonts/Cantarell-ExtraBold.otf (100%) rename {modules/web_server/static => src/client/public}/fonts/Cantarell-Light.otf (100%) rename {modules/web_server/static => src/client/public}/fonts/Cantarell-Regular.otf (100%) rename {modules/web_server/static => src/client/public}/fonts/Cantarell-Thin.otf (100%) rename {modules/web_server/static => src/client/public}/fonts/IndieFlower-Regular.ttf (100%) rename {modules/web_server/static => src/client/public}/fonts/RobotoMono-Bold.ttf (100%) rename {modules/web_server/static => src/client/public}/fonts/RobotoMono-Medium.ttf (100%) rename {modules/web_server/static => src/client/public}/fonts/RobotoMono-Regular.ttf (100%) create mode 100644 src/client/public/icons/cosmic/air.svg create mode 100644 src/client/public/icons/cosmic/battery-medium.svg create mode 100644 src/client/public/icons/cosmic/branch-horizontal.svg create mode 100644 src/client/public/icons/cosmic/chart-square.svg create mode 100644 src/client/public/icons/cosmic/grid-mixed.svg create mode 100644 src/client/public/icons/cosmic/processor.svg create mode 100644 src/client/public/icons/cosmic/sun.svg rename {modules/web_server/static/images/icons/types => src/client/public/icons/custom}/http.png (100%) rename modules/web_server/static/images/favicon.png => src/client/public/icons/custom/logo.png (100%) create mode 100644 src/client/public/images/chart.png create mode 100644 src/client/src/bridge/endpoints.ts create mode 100644 src/client/src/bridge/hooks.ts create mode 100644 src/client/src/bridge/index.ts create mode 100644 src/client/src/bridge/models/HandlerModel.ts create mode 100644 src/client/src/bridge/models/NewHandlerModel.ts create mode 100644 src/client/src/bridge/models/index.ts create mode 100644 src/client/src/bridge/models/utils.ts create mode 100644 src/client/src/bridge/modules/availableHandlers.ts create mode 100644 src/client/src/bridge/modules/handlers.ts create mode 100644 src/client/src/bridge/modules/index.ts create mode 100644 src/client/src/bridge/utils.ts create mode 100644 src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx create mode 100644 src/client/src/components/BooleanSwitcher/index.ts create mode 100644 src/client/src/components/Button/Button.scss create mode 100644 src/client/src/components/Button/Button.tsx create mode 100644 src/client/src/components/Button/index.ts create mode 100644 src/client/src/components/Button/mixins.scss create mode 100644 src/client/src/components/Card/Card.scss create mode 100644 src/client/src/components/Card/Card.tsx create mode 100644 src/client/src/components/Card/components/CardBody/CardBody.scss create mode 100644 src/client/src/components/Card/components/CardBody/CardBody.tsx create mode 100644 src/client/src/components/Card/components/CardBody/index.ts create mode 100644 src/client/src/components/Card/components/CardHeader/CardHeader.scss create mode 100644 src/client/src/components/Card/components/CardHeader/CardHeader.tsx create mode 100644 src/client/src/components/Card/components/CardHeader/index.ts create mode 100644 src/client/src/components/Card/components/index.ts create mode 100644 src/client/src/components/Card/index.ts create mode 100644 src/client/src/components/Card/mixins.scss create mode 100644 src/client/src/components/FlexLayout/FlexLayout.scss create mode 100644 src/client/src/components/FlexLayout/FlexLayout.tsx create mode 100644 src/client/src/components/FlexLayout/index.ts create mode 100644 src/client/src/components/Header/Header.scss create mode 100644 src/client/src/components/Header/Header.tsx create mode 100644 src/client/src/components/Header/index.ts create mode 100644 src/client/src/components/Icon/Icon.scss create mode 100644 src/client/src/components/Icon/Icon.tsx create mode 100644 src/client/src/components/Icon/enums.ts create mode 100644 src/client/src/components/Icon/index.ts create mode 100644 src/client/src/components/Input/Input.scss create mode 100644 src/client/src/components/Input/Input.tsx create mode 100644 src/client/src/components/Input/index.ts create mode 100644 src/client/src/components/Input/mixins.scss create mode 100644 src/client/src/components/InputRenderer/InputRenderer.scss create mode 100644 src/client/src/components/InputRenderer/InputRenderer.tsx create mode 100644 src/client/src/components/InputRenderer/index.ts create mode 100644 src/client/src/components/LinkButton/LinkButton.tsx create mode 100644 src/client/src/components/LinkButton/index.ts create mode 100644 src/client/src/components/Loc/Loc.tsx create mode 100644 src/client/src/components/Loc/index.ts create mode 100644 src/client/src/components/Loc/utils.ts create mode 100644 src/client/src/components/Menu/Menu.scss create mode 100644 src/client/src/components/Menu/Menu.tsx create mode 100644 src/client/src/components/Menu/components/MenuItem/MenuItem.scss create mode 100644 src/client/src/components/Menu/components/MenuItem/MenuItem.tsx create mode 100644 src/client/src/components/Menu/components/MenuItem/index.ts create mode 100644 src/client/src/components/Menu/components/MenuSection/MenuSection.scss create mode 100644 src/client/src/components/Menu/components/MenuSection/MenuSection.tsx create mode 100644 src/client/src/components/Menu/components/MenuSection/index.ts create mode 100644 src/client/src/components/Menu/components/index.ts create mode 100644 src/client/src/components/Menu/index.ts create mode 100644 src/client/src/components/Navbar/Navbar.scss create mode 100644 src/client/src/components/Navbar/Navbar.tsx create mode 100644 src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss create mode 100644 src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx create mode 100644 src/client/src/components/Navbar/components/NavbarItem/index.ts create mode 100644 src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss create mode 100644 src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx create mode 100644 src/client/src/components/Navbar/components/NavbarLogo/index.ts create mode 100644 src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx create mode 100644 src/client/src/components/Navbar/components/NavbarSection/index.ts create mode 100644 src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss create mode 100644 src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx create mode 100644 src/client/src/components/Navbar/components/NavbarUser/index.ts create mode 100644 src/client/src/components/Navbar/components/index.ts create mode 100644 src/client/src/components/Navbar/index.ts create mode 100644 src/client/src/components/Separator/Separator.scss create mode 100644 src/client/src/components/Separator/Separator.tsx create mode 100644 src/client/src/components/Separator/index.ts create mode 100644 src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss create mode 100644 src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx create mode 100644 src/client/src/components/Widget/AttributeWidget/index.ts create mode 100644 src/client/src/components/Widget/Widget.scss create mode 100644 src/client/src/components/Widget/index.ts create mode 100644 src/client/src/components/components.scss create mode 100644 src/client/src/components/index.ts create mode 100644 src/client/src/layouts/NavbarLayout/NavbarLayout.scss create mode 100644 src/client/src/layouts/NavbarLayout/NavbarLayout.tsx create mode 100644 src/client/src/layouts/NavbarLayout/index.ts create mode 100644 src/client/src/layouts/index.ts create mode 100644 src/client/src/layouts/layouts.scss create mode 100644 src/client/src/partials/Handler/Handler.scss create mode 100644 src/client/src/partials/Handler/Handler.tsx create mode 100644 src/client/src/partials/Handler/index.ts create mode 100644 src/client/src/partials/NewHandler/NewHandler.scss create mode 100644 src/client/src/partials/NewHandler/NewHandler.tsx create mode 100644 src/client/src/partials/NewHandler/index.ts create mode 100644 src/client/src/partials/NewHandler/newHandlerConfigSlice.ts create mode 100644 src/client/src/partials/index.ts create mode 100644 src/client/src/partials/partials.scss create mode 100644 src/client/src/store/StoreInit.tsx create mode 100644 src/client/src/store/index.ts create mode 100644 src/client/src/store/settingsSlice.ts create mode 100644 src/client/src/store/store.ts create mode 100644 src/client/src/types.ts create mode 100644 src/client/src/utils.ts create mode 100644 src/client/styles/fonts.scss create mode 100644 src/client/styles/main.scss create mode 100644 src/client/styles/mixins.scss create mode 100644 src/client/styles/variables.scss create mode 100644 src/client/tsconfig.json create mode 100644 src/server/Pipfile create mode 100644 src/server/Pipfile.lock create mode 100644 src/server/config.py create mode 100755 src/server/main.py rename {modules => src/server/modules}/__init__.py (100%) create mode 100644 src/server/modules/attribute_manager.py create mode 100644 src/server/modules/blueprints/__init__.py create mode 100644 src/server/modules/blueprints/enums.py create mode 100644 src/server/modules/blueprints/handlers.py create mode 100644 src/server/modules/database/__init__.py create mode 100644 src/server/modules/handler_manager.py create mode 100644 src/server/modules/handlers/__init__.py create mode 100644 src/server/modules/handlers/abstract_handler.py rename {modules => src/server/modules}/handlers/http_handler.py (69%) create mode 100644 src/server/modules/logging/__init__.py create mode 100644 src/server/modules/logging/logger.py rename {modules/core/actions/routines/helpers => src/server/modules/models}/__init__.py (100%) create mode 100644 src/server/modules/models/attribute.py create mode 100644 src/server/modules/models/data_stat.py create mode 100644 src/server/modules/models/data_unit.py create mode 100644 src/server/modules/models/handler.py create mode 100644 src/server/modules/models/logging_message.py create mode 100644 src/server/modules/tools.py create mode 100644 src/server/modules/utils/__init__.py create mode 100644 src/server/modules/utils/color_print.py delete mode 100644 tsconfig.json delete mode 100644 webpack.config.ts diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 2f0c23e..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "env": { - "browser": true, - "commonjs": true, - "es2021": true - }, - "extends": [ - "standard", - "eslint:recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "indent": ["error", 4], - "no-use-before-define": ["error"], - "object-curly-spacing": ["error", "always"], - "semi": ["off"], - "@typescript-eslint/semi": ["error"], - "space-before-function-paren": ["error", "never"], - "quotes": ["error", "double"], - - "@typescript-eslint/no-explicit-any": ["off"], - "@typescript-eslint/ban-ts-comment": ["off"] - } -} diff --git a/.gitignore b/.gitignore index 5d5ad7c..f24ba0c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,26 @@ -# JetBrains +# JetBrains IDE .idea/ # Python __pycache__/ +*.pyc # Node.js node_modules -package-lock.json +*config.js -# Build -modules/web_server/static/js -modules/web_server/static/styles/*.css -modules/web_server/static/styles/*.css.map -!modules/web_server/static/styles/main.css -!modules/web_server/static/styles/main.css.map +# Next.js +.next/ # Logs *.log* -# Configs -*.json - -# SASS -.sass-cache/ - # Database *.sqlite* +# Environment +*.env* + # Nohup nohup.out - -# Static symlink -/static + diff --git a/dependencies.txt b/dependencies.txt deleted file mode 100644 index 26ced93..0000000 --- a/dependencies.txt +++ /dev/null @@ -1,8 +0,0 @@ -python3-eventlet -python3-flask -python3-flask-socketio -python3-minimalmodbus -python3-pony -python3-requests -python3-serial -python3-simplejson diff --git a/modules/core/__init__.py b/modules/core/__init__.py deleted file mode 100644 index f85d100..0000000 --- a/modules/core/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from modules.core.data_manager import * -from modules.core.event_manager import * -from modules.core.handler_manager import * diff --git a/modules/core/actions/__init__.py b/modules/core/actions/__init__.py deleted file mode 100644 index f2f1247..0000000 --- a/modules/core/actions/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from modules.core.actions.event_listener import * -from modules.core.actions.routines import * -from modules.core.actions.workflow import * diff --git a/modules/core/actions/event_listener.py b/modules/core/actions/event_listener.py deleted file mode 100644 index 37cde5c..0000000 --- a/modules/core/actions/event_listener.py +++ /dev/null @@ -1,46 +0,0 @@ -class EventListener: - """Class for binding workflows to specific events""" - - def __init__(self, handler_id, event_label): - self.id = 0 - self.handler_id = handler_id - self.label = event_label - self.workflow = None - self.data_listener_status = False - - def get_id(self): - return self.id - - def set_id(self, listener_id): - self.id = listener_id - - def get_handler_id(self): - return self.handler_id - - def set_handler_id(self, handler_id): - self.handler_id = handler_id - - def get_label(self): - return self.label - - def set_label(self, label): - self.label = label - - def set_workflow(self, workflow): - self.workflow = workflow - - def delete_workflow(self): - self.workflow = None - - def get_data_listener_status(self): - return self.data_listener_status - - def set_data_listener_status(self, status): - self.data_listener_status = status - - def trigger(self, payload=None): - if payload is None: - payload = [] - - if self.workflow: - self.workflow.perform(payload) diff --git a/modules/core/actions/routines/__init__.py b/modules/core/actions/routines/__init__.py deleted file mode 100644 index 2145bc1..0000000 --- a/modules/core/actions/routines/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -from .barrier import Barrier -from .condition import Condition -from .debug_message import DebugMessage -from .payload_modifier import PayloadModifier -from .perform_workflow import PerformWorkflow -from .send_event import SendEvent - -available_routines = [ - Condition, - SendEvent, - PayloadModifier, - PerformWorkflow, - Barrier, - DebugMessage, -] - - -def get_routine_class(routine_type): - for routine in available_routines: - if routine.type == routine_type: - return routine - return False diff --git a/modules/core/actions/routines/abstract_routine.py b/modules/core/actions/routines/abstract_routine.py deleted file mode 100644 index e51a345..0000000 --- a/modules/core/actions/routines/abstract_routine.py +++ /dev/null @@ -1,76 +0,0 @@ -class AbstractRoutine: - """Abstract class which specifies methods each routine class should implement.""" - - # Each routine class should have the following variables configured: - - type = "" - """Type of the routine""" - - name = "Routine" - """Name of the routine""" - - description = "" - """Description of the routine""" - - config_fields = {} - """Dictionary of arguments required for initialization from GUI""" - - # Each routine class should implement the following methods: - - def perform(self, payload): - """Perform the routine on payload and return True if workflow should continue.""" - pass - - def get_description(self): - """Returns description of the routine displayed in GUI.""" - return self.description - - # Default attributes and methods of each routine instance: - - settings = {} - """Dictionary containing handler configuration. - It is serialized as a JSON to the database.""" - - workflow = None - """Workflow parent""" - - position = 0 - """Position in workflow""" - - id = 0 - - def __init__(self, settings, manager): - self.settings = settings - self.manager = manager - - def update_config(self, new_config): - """Update routine configuration accordingly.""" - if "configuration" not in self.settings: - self.settings["configuration"] = {} - for attribute in new_config: - self.settings["configuration"][attribute] = new_config[attribute] - - def get_config(self): - """Returns configuration form values""" - if "configuration" in self.settings: - return self.settings["configuration"] - return {} - - def config(self, attribute): - """Returns single configuration form value""" - if "configuration" in self.settings and attribute in self.get_config(): - return self.get_config()[attribute] - return None - - def get_name(self): - """Returns name of the routine displayed in GUI.""" - return self.name - - def set_id(self, database_id): - self.id = database_id - - def set_position(self, position): - self.position = position - - def set_workflow(self, workflow): - self.workflow = workflow diff --git a/modules/core/actions/routines/barrier.py b/modules/core/actions/routines/barrier.py deleted file mode 100644 index 64a4df0..0000000 --- a/modules/core/actions/routines/barrier.py +++ /dev/null @@ -1,19 +0,0 @@ -from .abstract_routine import AbstractRoutine -from .helpers.conditions import check_condition - - -class Barrier(AbstractRoutine): - """Routine for stopping workflow on condition""" - - type = "barrier" - name = "Barrier" - config_fields = { - "condition": ["condition", "Stop workflow if"], - } - - def perform(self, payload): - condition = self.config("condition") - return not check_condition(condition, payload, self.manager) - - def get_description(self): - return self.config("condition") diff --git a/modules/core/actions/routines/condition.py b/modules/core/actions/routines/condition.py deleted file mode 100644 index d25d7a8..0000000 --- a/modules/core/actions/routines/condition.py +++ /dev/null @@ -1,39 +0,0 @@ -from .abstract_routine import AbstractRoutine -from .helpers.conditions import check_condition - - -class Condition(AbstractRoutine): - """Routine for testing condition and performing one of two branches""" - - type = "condition" - name = "Condition" - config_fields = { - "condition": ["condition", "Condition"], - "if-workflow": ["workflowInstance", "If true"], - "else-workflow": ["workflowInstance", "Else"], - "once-in-row": ["bool", "Trigger each branch once in a row", False], - } - last_state = None - - def perform(self, payload): - state = check_condition(self.config("condition"), payload, self.manager) - if not self.config("once-in-row") or state != self.last_state: - self.last_state = state - if state: - workflow = self.get_if_workflow() - if workflow: - workflow.perform(payload) - else: - workflow = self.get_else_workflow() - if workflow: - workflow.perform(payload) - return True - - def get_if_workflow(self): - return self.manager.event_manager.get_workflow(self.config("if-workflow")) - - def get_else_workflow(self): - return self.manager.event_manager.get_workflow(self.config("else-workflow")) - - def get_description(self): - return self.get_config()["condition"] diff --git a/modules/core/actions/routines/debug_message.py b/modules/core/actions/routines/debug_message.py deleted file mode 100644 index 0e44366..0000000 --- a/modules/core/actions/routines/debug_message.py +++ /dev/null @@ -1,18 +0,0 @@ -from .abstract_routine import AbstractRoutine - - -class DebugMessage(AbstractRoutine): - """Routine for printing user message into terminal""" - - type = "debug_message" - name = "Debug message" - config_fields = { - "message": ["string", "Message to print into terminal"], - } - - def perform(self, payload): - print(self.config("message")) - return True - - def get_description(self): - return f"\"{self.config('message')}\"" diff --git a/modules/core/actions/routines/helpers/conditions.py b/modules/core/actions/routines/helpers/conditions.py deleted file mode 100644 index 7b9f0ac..0000000 --- a/modules/core/actions/routines/helpers/conditions.py +++ /dev/null @@ -1,67 +0,0 @@ -from modules.core.actions.routines.helpers.conversions import replace_variables -from modules.core.actions.routines.helpers.evaluation import eval_expr - - -def parse_condition(condition, payload, manager): - if "==" in condition: - operator = "==" - elif ">=" in condition: - operator = ">=" - elif "<=" in condition: - operator = "<=" - elif ">" in condition: - operator = ">" - elif "<" in condition: - operator = "<" - elif "<>" in condition or "!=" in condition: - operator = "!=" - else: - operator = "??" - - split = condition.split(f"{operator}") - left = split[0] - left = replace_variables(left, payload, manager) - - right = None - if len(split) > 1: - right = split[1] - right = replace_variables(right, payload, manager) - - return operator, left, right - - -def check_condition(condition, payload, manager): - functions = { - "??": lambda le, ri: le, - ">=": lambda le, ri: le >= ri, - "<=": lambda le, ri: le <= ri, - ">": lambda le, ri: le > ri, - "<": lambda le, ri: le < ri, - "==": lambda le, ri: le == ri, - "!=": lambda le, ri: le != ri, - } - - operator, left, right = parse_condition(condition, payload, manager) - - try: - if right and right[0] == '"' and right[-1] == '"': - right = right[1:-1] - elif right: - right = right.replace(" ", "") - right = eval_expr(right) - if left[0] == '"' and left[-1] == '"': - left = left[1:-1] - else: - left = left.replace(" ", "") - left = eval_expr(left) - except SyntaxError as error: - print(error) - return False - except TypeError as error: - print(error) - return False - - if operator in functions: - return functions[operator](left, right) - - return False diff --git a/modules/core/actions/routines/helpers/conversions.py b/modules/core/actions/routines/helpers/conversions.py deleted file mode 100644 index 87bdd07..0000000 --- a/modules/core/actions/routines/helpers/conversions.py +++ /dev/null @@ -1,47 +0,0 @@ -import re - -from modules.tools import get_nested_attribute - - -def is_int(element): - try: - int(element) - return True - except ValueError: - return False - - -def is_float(element): - try: - float(element) - return True - except ValueError: - return False - - -def replace_variables(string, payload, manager): - result = string - search = re.findall(r"(\bpayload\.[0-9]*\b)", string) - if search: - for group in search: - _, payload_index = group.split(".") - payload_index = int(payload_index) - if payload_index < len(payload): - result = result.replace(group, str(payload[payload_index])) - else: - result = result.replace(group, "None") - - search = re.findall(r"(\bhandler\.[0-9]*\.[A-Z,a-z/]*\b)", string) - if search: - for group in search: - try: - _, handler_id, attribute = group.split(".") - handler_id = int(handler_id) - if handler_id in manager.last_messages: - json = manager.last_messages[handler_id][1] - result = result.replace( - group, str(get_nested_attribute(json, attribute)) - ) - except Exception as error: - print(error) - return result diff --git a/modules/core/actions/routines/helpers/evaluation.py b/modules/core/actions/routines/helpers/evaluation.py deleted file mode 100644 index 33e4fe5..0000000 --- a/modules/core/actions/routines/helpers/evaluation.py +++ /dev/null @@ -1,32 +0,0 @@ -import ast -import operator as op - -operators = { - ast.Add: op.add, - ast.Sub: op.sub, - ast.Mult: op.mul, - ast.Div: op.truediv, - ast.Pow: op.pow, - ast.BitXor: op.xor, - ast.USub: op.neg, - ast.Mod: op.mod, -} - - -def __get_op(_type): - return operators[_type] - - -def __eval(node): - if isinstance(node, ast.Num): - return node.n - elif isinstance(node, ast.BinOp): - return __get_op(type(node.op))(__eval(node.left), __eval(node.right)) - elif isinstance(node, ast.UnaryOp): - return __get_op(type(node.op))(__eval(node.operand)) - else: - raise TypeError(node) - - -def eval_expr(expr): - return __eval(ast.parse(expr, mode="eval").__getattribute__("body")) diff --git a/modules/core/actions/routines/payload_modifier.py b/modules/core/actions/routines/payload_modifier.py deleted file mode 100644 index 298fe42..0000000 --- a/modules/core/actions/routines/payload_modifier.py +++ /dev/null @@ -1,49 +0,0 @@ -from .abstract_routine import AbstractRoutine -from .helpers.conversions import replace_variables -from .helpers.evaluation import eval_expr - - -class PayloadModifier(AbstractRoutine): - """Routine for modifying workflow payload""" - - type = "payload_modifier" - name = "Payload modifier" - config_fields = { - "configuration": ["configuration", "Payload configuration"], - } - - def parse_configuration(self, payload): - rows = self.config("configuration").splitlines() - - for row in rows: - parts = row.split(" = ") - right = " = ".join(parts[1:]) - index = int(parts[0]) - - right = replace_variables(right, payload, self.manager) - - if right[0] == '"' and right[-1] == '"': - value = right[1:-1] - else: - try: - value = eval_expr(right) - except SyntaxError as error: - print(error) - return False - except TypeError as error: - print(error) - return False - - if value is not None: - while len(payload) <= index: - payload.append(None) - payload[index] = value - - return True - - def perform(self, payload): - return self.parse_configuration(payload) - - def get_description(self): - config = self.config("configuration") - return config.splitlines()[0] if config else "Empty" diff --git a/modules/core/actions/routines/perform_workflow.py b/modules/core/actions/routines/perform_workflow.py deleted file mode 100644 index 97563a7..0000000 --- a/modules/core/actions/routines/perform_workflow.py +++ /dev/null @@ -1,24 +0,0 @@ -from .abstract_routine import AbstractRoutine - - -class PerformWorkflow(AbstractRoutine): - """Routine for performing workflow""" - - type = "perform_workflow" - name = "Workflow" - config_fields = { - "workflow": ["workflowInstance", "Target workflow"], - } - - def perform(self, payload): - self.get_workflow().perform(payload) - return True - - def get_workflow(self): - return self.manager.event_manager.get_workflow(self.config("workflow")) - - def get_event_name(self): - return self.config("event_label") - - def get_description(self): - return f"Perform workflow {self.get_workflow().id}" diff --git a/modules/core/actions/routines/send_event.py b/modules/core/actions/routines/send_event.py deleted file mode 100644 index 8a51fb1..0000000 --- a/modules/core/actions/routines/send_event.py +++ /dev/null @@ -1,34 +0,0 @@ -from modules.core.helpers import create_event -from .abstract_routine import AbstractRoutine - - -class SendEvent(AbstractRoutine): - """Routine for sending events to handlers""" - - type = "send_event" - name = "Send event" - config_fields = { - "handler": ["handlerInstance", "Target handler"], - "event-label": ["string", "Event label"], - "unique-payload": ["bool", "Send only if payload changes", False], - } - last_payload = None - - def perform(self, payload): - event = create_event(self.config("event-label"), payload) - if not self.config("unique-payload") or self.last_payload != payload: - if self.get_handler(): - self.last_payload = payload - self.manager.send_message(self.config("handler"), event) - else: - return False - return True - - def get_handler(self): - return self.manager.get_handler(self.config("handler")) - - def get_description(self): - if self.get_handler(): - return f"{self.get_handler().get_name()} - \"{self.config('event-label')}\"" - else: - return "Please update routine configuration" diff --git a/modules/core/actions/workflow.py b/modules/core/actions/workflow.py deleted file mode 100644 index fa59ab9..0000000 --- a/modules/core/actions/workflow.py +++ /dev/null @@ -1,27 +0,0 @@ -class Workflow: - """Class representing workflow object""" - - def __init__(self, event_manager): - self.id = 0 - self.routines = [] - self.event_manager = event_manager - - def get_id(self): - return self.id - - def set_id(self, workflow_id): - self.id = workflow_id - - def add_routine(self, routine): - self.routines.append(routine) - - def perform(self, payload=None): - if payload is None: - payload = [] - - for routine in self.routines: - self.event_manager.routine_log.append([routine.id, payload.copy()]) - result = routine.perform(payload) - if not result: - return False - return True diff --git a/modules/core/data_manager.py b/modules/core/data_manager.py deleted file mode 100644 index 8908855..0000000 --- a/modules/core/data_manager.py +++ /dev/null @@ -1,11 +0,0 @@ -class DataManager: - """Handles data processing. It is a subpart of DeviceManager""" - - def __init__(self, database): - self.database = database - - def add_data_unit(self, label, data, handler): - self.database.add_data_unit(label, float(data), handler) - - def add_event_unit(self, event, handler, incoming=True): - self.database.add_event_unit(event, handler, incoming) diff --git a/modules/core/database/__init__.py b/modules/core/database/__init__.py deleted file mode 100644 index 71e5e7e..0000000 --- a/modules/core/database/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from modules.core.database.database import * diff --git a/modules/core/database/database.py b/modules/core/database/database.py deleted file mode 100644 index 511f961..0000000 --- a/modules/core/database/database.py +++ /dev/null @@ -1,377 +0,0 @@ -import settings - -from datetime import datetime, timedelta -from pony import orm - -from modules import settings -from modules.core.actions.routines.abstract_routine import AbstractRoutine -from modules.handlers.abstract_handler import AbstractHandler -from modules.logging.logger import logger - -db = orm.Database() - - -class Handler(db.Entity): - """Database entity representing handler configuration""" - - type = orm.Required(str) - settings = orm.Required(orm.Json) - data = orm.Set("DataUnit") - events = orm.Set("EventUnit") - - -class DataUnit(db.Entity): - """Database entity representing data""" - - handler = orm.Required(Handler) - label = orm.Required(str, index=True) - value = orm.Required(float) - datetime = orm.Required(datetime, index=True) - - -class EventUnit(db.Entity): - """Database entity for storing events""" - - handler = orm.Required(Handler) - label = orm.Required(str, index=True) - payload = orm.Optional(orm.Json) - incoming = orm.Required(bool, index=True) - datetime = orm.Required(datetime, index=True) - - -class EventListener(db.Entity): - """Database entity representing event listener""" - - handler_id = orm.Required(int) - label = orm.Required(str) - workflow_id = orm.Optional(int) - data_listener_status = orm.Optional(bool) - - -class Workflow(db.Entity): - """Database entity representing workflow""" - - -class Routine(db.Entity): - """Database entity representing routine""" - - type = orm.Required(str) - workflow = orm.Required(int) - position = orm.Required(int) - settings = orm.Required(orm.Json) - - -class ChartView(db.Entity): - """Database entity for saving user defined charts""" - - label = orm.Required(str) - settings = orm.Required(orm.Json) - - -def reset(): - delete_tables() - create_tables() - - -def delete_tables(): - db.drop_all_tables(with_all_data=True) - - -def create_tables(): - db.create_tables() - - -class Database: - """Class representing database instance""" - - def __init__(self): - log = logger("Database") - - if settings.DB_TYPE == "sqlite": - db.bind("sqlite", filename=settings.DB_SQLITE_FILE, create_db=True) - elif settings.DB_TYPE == "mysql": - db.bind( - "mysql", - host=settings.DB_HOST, - db=settings.DB_DATABASE, - user=settings.DB_USER, - passwd=settings.DB_PASSWORD, - ) - else: - error_text = f"Unsupported database type '{settings.DB_TYPE}' in settings." - log.error(error_text) - print(error_text) - quit() - db.generate_mapping(create_tables=True) - - log.info("Database initialized") - - ################### - # HANDLER queries # - ################### - - @orm.db_session - def add_handler(self, handler: AbstractHandler, handler_id=0): - return Handler( - id=handler_id if handler_id else None, - type=handler.type, - settings=handler.settings, - ) - - @orm.db_session - def get_handlers(self): - return Handler.select(lambda d: d)[:] - - @orm.db_session - def get_handler_by_id(self, handler_id): - return Handler.select(lambda d: d.id == handler_id)[:][0] - - @orm.db_session - def update_handler_settings(self, handler_id, handler_settings): - handler = self.get_handler_by_id(handler_id) - handler.settings = handler_settings - - @orm.db_session - def delete_handler(self, handler_id): - handler = self.get_handler_by_id(handler_id) - handler.delete() - - ################ - # DATA queries # - ################ - - @orm.db_session - def add_data_unit(self, label, value, handler: Handler): - if settings.DB_DATA_READONLY: - return False - return DataUnit( - label=label, value=value, handler=handler, datetime=datetime.now() - ) - - @orm.db_session - def add_event_unit(self, event, handler, incoming=True): - if settings.DB_DATA_READONLY: - return False - return EventUnit( - label=event.get_label(), - payload=event.get_payload(), - handler=handler, - incoming=incoming, - datetime=datetime.now(), - ) - - @orm.db_session - def get_all_stored_attributes(self, handler_id): - return orm.select(d.label for d in DataUnit if d.handler.id == handler_id)[:] - - @orm.db_session - def get_handler_attribute_data( - self, - handler_id, - attribute, - datetime_from: datetime, - datetime_to: datetime, - *_, - smartround=0, - ): - result = orm.select( - (d.datetime, d.value) - for d in DataUnit - if d.handler.id == handler_id - and d.label == attribute - and d.datetime >= datetime_from - and d.datetime <= datetime_to - )[:] - - if smartround: - ratio = len(result) / smartround - index = 0 - if ratio > 1: - rounded_result = [] - while int(index) < len(result): - sublist = result[int(index) : int(index + ratio)] - rounded_result.append(_smartround_avg(*sublist)) - index += ratio - result = rounded_result[:smartround] - - return result - - @orm.db_session - def get_handler_attribute_dates(self, handler_id, attribute): - return DataUnit.select( - lambda d: d.handler.id == handler_id and d.label == attribute - ) - - @orm.db_session - def get_handler_stored_events(self, handler_id): - return EventUnit.select(lambda e: e.handler.id == handler_id)[:] - - @orm.db_session - def get_handler_stored_events_in_names(self, handler_id): - return orm.select( - e.label - for e in EventUnit - if e.handler.id == handler_id - and e.incoming - and e.datetime >= datetime.now() - )[:] - - @orm.db_session - def get_handler_stored_events_out_names(self, handler_id): - return orm.select( - e.label - for e in EventUnit - if e.handler.id == handler_id - and not e.incoming - and e.datetime >= datetime.now() - timedelta(days=1) - )[:] - - @orm.db_session - def get_handler_stored_event_data( - self, - handler_id, - event, - incoming, - datetime_from: datetime, - datetime_to: datetime, - ): - return orm.select( - (e.datetime, e.payload) - for e in EventUnit - if e.handler.id == handler_id - and e.label == event - and e.incoming == incoming - and e.datetime >= datetime_from - and e.datetime <= datetime_to - )[:] - - ###################### - # CHART VIEW queries # - ###################### - - @orm.db_session - def add_chart_view(self, label, view_settings): - return ChartView( - label=label, - settings=view_settings, - ) - - @orm.db_session - def get_chart_views(self): - return ChartView.select(lambda v: v)[:] - - @orm.db_session - def get_chart_view_by_id(self, view_id): - return ChartView.select(lambda v: v.id == view_id)[:][0] - - @orm.db_session - def update_chart_view(self, view_id, label, view_settings): - view = self.get_chart_view_by_id(view_id) - view.label = label - view.settings = view_settings - - @orm.db_session - def delete_chart_view(self, view_id): - view = self.get_chart_view_by_id(view_id) - view.delete() - - ################### - # ACTIONS queries # - ################### - - @orm.db_session - def add_event_listener(self, event_listener): - return EventListener( - handler_id=event_listener.get_handler_id(), - label=event_listener.get_label(), - workflow_id=event_listener.workflow.get_id() - if event_listener.workflow - else None, - data_listener_status=event_listener.get_data_listener_status(), - ) - - @orm.db_session - def update_event_listener(self, event_listener): - listener = self.get_event_listener_by_id(event_listener.get_id()) - listener.handler_id = event_listener.get_handler_id() - listener.label = event_listener.get_label() - listener.workflow_id = ( - event_listener.workflow.get_id() if event_listener.workflow else None - ) - listener.data_listener_status = event_listener.get_data_listener_status() - - @orm.db_session - def get_event_listeners(self): - return EventListener.select(lambda l: l)[:] - - @orm.db_session - def get_event_listener_by_id(self, listener_id): - return EventListener.select(lambda l: l.id == listener_id)[:][0] - - @orm.db_session - def delete_event_listener(self, listener_id): - listener = self.get_event_listener_by_id(listener_id) - listener.delete() - - @orm.db_session - def add_workflow(self, workflow_id=0): - return Workflow( - id=workflow_id if workflow_id else None, - ) - - @orm.db_session - def get_workflows(self): - return Workflow.select(lambda w: w)[:] - - @orm.db_session - def get_workflow_by_id(self, workflow_id): - return Workflow.select(lambda w: w.id == workflow_id)[:][0] - - @orm.db_session - def delete_workflow(self, workflow_id): - workflow = self.get_workflow_by_id(workflow_id) - workflow.delete() - - @orm.db_session - def add_routine(self, routine: AbstractRoutine, routine_id=0): - return Routine( - id=routine_id if routine_id else None, - type=routine.type, - settings=routine.settings, - workflow=routine.workflow.get_id(), - position=routine.position, - ) - - @orm.db_session - def update_routine(self, routine: AbstractRoutine): - db_routine = self.get_routine_by_id(routine.id) - db_routine.type = routine.type - db_routine.settings = routine.settings - db_routine.workflow = routine.workflow.id - db_routine.position = routine.position - - @orm.db_session - def get_routines(self): - return Routine.select(lambda r: r)[:] - - @orm.db_session - def get_routines_for_workflow(self, workflow_id): - result = Routine.select(lambda r: r.workflow == workflow_id)[:] - result.sort(key=lambda r: r.position) - return result - - @orm.db_session - def get_routine_by_id(self, routine_id): - return Routine.select(lambda r: r.id == routine_id)[:][0] - - @orm.db_session - def delete_routine(self, routine_id): - routine = self.get_routine_by_id(routine_id) - routine.delete() - - def exit(self): - pass - - -def _smartround_avg(*items): - return items[-1][0], round(sum(map(lambda x: x[1], items)) / len(items), 1) diff --git a/modules/core/event_manager.py b/modules/core/event_manager.py deleted file mode 100644 index 4096b33..0000000 --- a/modules/core/event_manager.py +++ /dev/null @@ -1,148 +0,0 @@ -from modules.core.actions import EventListener, get_routine_class -from modules.core.actions.workflow import Workflow -from modules.tools import get_nested_attribute - - -class EventManager: - """Handles event processing and workflows. It is a subpart of DeviceManager""" - - def __init__(self, database, manager): - self.database = database - self.manager = manager - self.event_listeners = [] - self.workflows = {} - self.routine_log = [] - - db_workflows = database.get_workflows() - db_listeners = database.get_event_listeners() - - for workflow in db_workflows: - new_workflow = Workflow(self) - new_workflow.set_id(workflow.id) - self.workflows[workflow.id] = new_workflow - - for workflow_id in self.workflows: - routines = database.get_routines_for_workflow(workflow_id) - for routine in routines: - routine_class = get_routine_class(routine.type) - routine_instance = routine_class(routine.settings, manager) - routine_instance.set_id(routine.id) - routine_instance.set_position(routine.position) - routine_instance.set_workflow(self.get_workflow(routine.workflow)) - self.workflows[workflow_id].add_routine(routine_instance) - - for listener in db_listeners: - new_listener = EventListener(listener.handler_id, listener.label) - new_listener.set_id(listener.id) - if listener.workflow_id in self.workflows: - new_listener.set_workflow(self.workflows[listener.workflow_id]) - new_listener.set_data_listener_status(listener.data_listener_status) - self.add_event_listener(new_listener) - - def add_event_listener(self, event_listener: EventListener): - if not self.contains_event_listener(event_listener): - self.event_listeners.append(event_listener) - return event_listener - return False - - def get_event_listener(self, listener_id): - for listener in self.event_listeners: - if listener.id == listener_id: - return listener - return None - - def get_event_listeners(self): - return self.event_listeners - - def contains_event_listener(self, event_listener: EventListener): - return list( - filter( - lambda e: e.get_label() == event_listener.get_label() - and e.get_handler_id() == event_listener.get_handler_id(), - self.event_listeners, - ) - ) - - def delete_event_listener(self, event_listener: EventListener): - self.event_listeners = list( - filter( - lambda e: e.get_label() != event_listener.get_label() - and e.get_handler_id() == event_listener.get_handler_id(), - self.event_listeners, - ) - ) - - def trigger_event(self, handler_id, event, data_event=False): - payload = event.get_payload().copy() - for listener in self.event_listeners: - if listener.get_handler_id() == handler_id: - labels = listener.get_label().split(";") - if ( - labels[0] == event.get_label() - and data_event == listener.get_data_listener_status() - ) or (not data_event and event.get_label() in labels): - self.routine_log = [] - if data_event: - all_attributes = listener.get_label().split(";") - for attribute in all_attributes: - payload.append( - get_nested_attribute( - self.manager.last_messages[handler_id][1], attribute - ) - ) - listener.trigger(payload) - self.manager.data_manager.add_event_unit(event, handler_id) - - def add_workflow(self, workflow: Workflow): - self.workflows[workflow.id] = workflow - - def get_workflow(self, workflow_id): - if workflow_id in self.workflows: - return self.workflows[workflow_id] - return None - - def get_workflows(self): - return self.workflows.values() - - def delete_workflow(self, workflow_id): - self.workflows.pop(workflow_id) - - def get_routine(self, routine_id): - for workflow in self.get_workflows(): - for routine in workflow.routines: - if routine.id == routine_id: - return routine - return None - - def move_routine(self, workflow_id, routine_id, index): - routines = self.get_workflow(workflow_id).routines - routine_index = 0 - for routine in routines: - if routine.id == routine_id: - break - routine_index += 1 - - routines[routine_index].position += index - routines[routine_index + index].position -= index - self.database.update_routine(routines[routine_index]) - self.database.update_routine(routines[routine_index + index]) - routines.sort(key=lambda r: r.position) - self.manager.add_changed("actions") - - def delete_routine(self, routine_id): - for workflow in self.get_workflows(): - for routine in workflow.routines: - if routine.id == routine_id: - workflow.routines.remove(routine) - self.database.delete_routine(routine_id) - self.manager.add_changed("actions") - - for i in range(len(workflow.routines)): - workflow.routines[i].position = i - self.database.update_routine(workflow.routines[i]) - - def get_storage_events_names(self, handler_id): - return { - "in": self.database.get_handler_stored_events_in_names(handler_id), - "out": self.database.get_handler_stored_events_out_names(handler_id), - } diff --git a/modules/core/handler_manager.py b/modules/core/handler_manager.py deleted file mode 100644 index c8060e5..0000000 --- a/modules/core/handler_manager.py +++ /dev/null @@ -1,287 +0,0 @@ -from threading import Thread -from time import localtime, sleep, strftime - -from modules import tools -from modules.core import ( - DataManager, - EventManager, - Workflow, - get_routine_class, - EventListener, -) -from modules.core.helpers import EventMessage, create_event -from modules.handlers import * -from modules.logging.logger import logger -from modules.tools import get_nested_attribute - - -class HandlerManager: - """Handles registration and communication of handlers""" - - def _handler_watcher(self): - sleep(2) - while self.active: - for handler_id in self.registered_handlers: - handler = self.registered_handlers[handler_id] - if handler.ready_to_read(): - message = handler.read_message() - self.process_message(handler_id, message) - - sleep(0.01) - - def __init__(self, database): - self.database = database - self.data_manager = DataManager(database) - self.registered_handlers = {} - self.last_messages = {} - self.message_queue = [] - self.message_queue_index = 0 - self.active = True - self.changed = [ - "overview", - "inspector", - "actions", - "data", - "handlers", - "details", - ] - - self.log = logger(f"Handler manager") - - handlers = database.get_handlers() - - self.log.info(f"Loaded {len(handlers)} handlers from database") - - for handler in handlers: - handler_class = get_handler_class(handler.type) - handler_instance = handler_class(handler.settings) - self.register_handler(handler.id, handler_instance) - - self.event_manager = EventManager(database, self) - - self.thread = Thread(target=self._handler_watcher) - self.thread.start() - - def delete_all(self): - for handler in self.registered_handlers.values(): - handler.exit() - self.registered_handlers = {} - self.event_manager.event_listeners = [] - self.event_manager.workflows = {} - self.last_messages = {} - self.message_queue = [] - - def register_handler(self, handler_id, handler): - self.registered_handlers[handler_id] = handler - for p in ["overview", "handlers"]: - self.add_changed(p) - - def get_handler(self, handler_id): - if handler_id in self.registered_handlers: - return self.registered_handlers[handler_id] - return None - - def get_handlers(self): - return self.registered_handlers - - def delete_handler(self, handler_id): - self.registered_handlers.pop(handler_id) - for p in ["overview", "handlers"]: - self.add_changed(p) - - def export_config(self): - result = { - "handlers": {}, - "chart-views": [], - "event-listeners": [], - "workflows": {}, - } - - db_handlers = self.database.get_handlers() - for db_handler in db_handlers: - handler_dict = { - "type": db_handler.type, - "settings": db_handler.settings, - } - result["handlers"][db_handler.id] = handler_dict - - db_views = self.database.get_chart_views() - for db_view in db_views: - chart_view = { - "label": db_view.label, - "settings": db_view.settings, - } - result["chart-views"].append(chart_view) - - db_event_listeners = self.database.get_event_listeners() - for db_listener in db_event_listeners: - event_listener = { - "handler-id": db_listener.handler_id, - "event-name": db_listener.label, - "workflow-id": db_listener.workflow_id, - "data-listener": db_listener.data_listener_status, - } - result["event-listeners"].append(event_listener) - - db_workflows = self.database.get_workflows() - for db_workflow in db_workflows: - db_routines = self.database.get_routines_for_workflow(db_workflow.id) - routines = [] - for db_routine in db_routines: - routine = { - "type": db_routine.type, - "settings": db_routine.settings, - } - routines.append(routine) - result["workflows"][db_workflow.id] = {"routines": routines} - - return result - - def import_config(self, json): - handlers = json["handlers"] - for handler_id in handlers: - handler = handlers[handler_id] - handler_id = int(handler_id) - handler_class = get_handler_class(handler["type"]) - handler_instance = handler_class(handler["settings"]) - self.database.add_handler(handler_instance, handler_id) - self.register_handler(handler_id, handler_instance) - - for chart_view in json["chart-views"]: - self.database.add_chart_view(chart_view["label"], chart_view["settings"]) - - workflows = json["workflows"] - for workflow_id in workflows: - workflow = workflows[workflow_id] - workflow_id = int(workflow_id) - db_workflow = self.database.add_workflow(workflow_id) - new_workflow = Workflow(self.event_manager) - new_workflow.set_id(db_workflow.id) - self.event_manager.add_workflow(new_workflow) - - for routine in workflow["routines"]: - routine_class = get_routine_class(routine["type"]) - target_workflow = self.event_manager.get_workflow(workflow_id) - routine_settings = routine["settings"] - new_routine = routine_class(routine_settings, self) - new_routine.workflow = target_workflow - new_routine.position = len(target_workflow.routines) - target_workflow.add_routine(new_routine) - database_routine = self.database.add_routine(new_routine) - new_routine.set_id(database_routine.id) - - for event_listener in json["event-listeners"]: - handler_id = event_listener["handler-id"] - listener = EventListener(handler_id, event_listener["event-name"]) - workflow_id = event_listener["workflow-id"] - if workflow_id: - workflow_id = int(workflow_id) - listener.set_workflow(self.event_manager.get_workflow(workflow_id)) - data_listener_status = ( - event_listener["data-listener"] - if "data-listener" in event_listener - else False - ) - listener.set_data_listener_status(data_listener_status) - db_listener = self.database.add_event_listener(listener) - listener.set_id(db_listener.id) - - print("Configuration successfully imported.") - - def add_changed(self, value): - if value not in self.changed: - self.changed.append(value) - - def process_message(self, handler_id, message): - message_type = "text" - - if isinstance(message, dict): - if EventMessage(message).is_valid(): - message_type = "event" - else: - message_type = "json" - - if isinstance(message, list): - if len(message) > 0 and isinstance(message[0], dict): - message = message[0] - message_type = "json" - - self.last_messages[handler_id] = strftime("%H:%M:%S", localtime()), message - - self.message_queue.append( - { - "type": message_type, - "handler_id": handler_id, - "handler": self.get_handler(handler_id), - "time": strftime("%H:%M:%S", localtime()), - "data": message, - "incoming": True, - } - ) - - self.add_changed("overview") - - if message_type == "event": - # Save event to database - event = EventMessage(message) - self.event_manager.trigger_event(handler_id, event) - - elif message_type == "json": - linearized_attributes = [] - tools.linearize_json(message, linearized_attributes) - - for attributes_row in linearized_attributes: - result = get_nested_attribute(message, attributes_row) - - if ( - attributes_row - in self.get_handler(handler_id).get_storage_attributes() - ): - self.data_manager.add_data_unit(attributes_row, result, handler_id) - - self.event_manager.trigger_event( - handler_id, create_event(attributes_row, []), True - ) - - else: - # print("TEXT:", message) - pass - - while len(self.message_queue) > 50: - self.message_queue.pop(0) - - def _send_message_agent(self, handler_id, message): - handler = self.get_handler(handler_id) - status = handler.send_message(message) - - if status: - message_type = "event" if isinstance(message, EventMessage) else "json" - - self.message_queue.append( - { - "type": message_type, - "handler_id": handler_id, - "handler": handler, - "time": strftime("%H:%M:%S", localtime()), - "data": message.json(), - "incoming": False, - "routine_log": self.event_manager.routine_log.copy(), - "queue_index": self.message_queue_index, - } - ) - self.add_changed("overview") - - self.message_queue_index += 1 - - if message_type == "event": - self.data_manager.add_event_unit(message, handler_id, False) - - def send_message(self, handler_id, message): - thread = Thread(target=self._send_message_agent, args=(handler_id, message)) - thread.start() - - def exit(self): - for handler in self.registered_handlers: - self.registered_handlers[handler].exit() - self.active = False - self.log.info(f"Terminating") diff --git a/modules/core/helpers/__init__.py b/modules/core/helpers/__init__.py deleted file mode 100644 index 1274031..0000000 --- a/modules/core/helpers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from modules.core.helpers.event import * -from modules.core.helpers.message import * diff --git a/modules/core/helpers/event.py b/modules/core/helpers/event.py deleted file mode 100644 index fe9f309..0000000 --- a/modules/core/helpers/event.py +++ /dev/null @@ -1,32 +0,0 @@ -from modules.core.helpers.message import Message - - -def create_event(label, payload): - message = { - "type": "event", - "label": label, - "payload": payload, - } - return EventMessage(message) - - -class EventMessage(Message): - """Class representing event message received or sent to handlers""" - - def __init__(self, json): - super().__init__(json) - - def is_valid(self): - json = self.json() - return ( - "type" in json - and json["type"] == "event" - and "label" in json - and "payload" in json - ) - - def get_label(self): - return self.json()["label"] - - def get_payload(self): - return self.json()["payload"] diff --git a/modules/core/helpers/message.py b/modules/core/helpers/message.py deleted file mode 100644 index ad98738..0000000 --- a/modules/core/helpers/message.py +++ /dev/null @@ -1,11 +0,0 @@ -class Message: - """Class representing message received or sent to handlers""" - - def __init__(self, json): - self._json = json - - def text(self): - return str(self._json) - - def json(self): - return self._json diff --git a/modules/handlers/__init__.py b/modules/handlers/__init__.py deleted file mode 100644 index e3f0df8..0000000 --- a/modules/handlers/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from modules.handlers.serial_handler import SerialHandler -from modules.handlers.http_handler import HttpHandler -from modules.handlers.bms_serial_handler import BmsSerialHandler -from modules.handlers.must_pv_ph_inverter_modbus_handler import ( - MustPVPHInverterModbusHandler, -) - -loaded_handlers = [ - SerialHandler, - HttpHandler, - BmsSerialHandler, - MustPVPHInverterModbusHandler, -] - - -def get_handler_class(handler_type): - for handler in loaded_handlers: - if handler.type == handler_type: - return handler - return False diff --git a/modules/handlers/abstract_handler.py b/modules/handlers/abstract_handler.py deleted file mode 100644 index 0eae7e0..0000000 --- a/modules/handlers/abstract_handler.py +++ /dev/null @@ -1,139 +0,0 @@ -from time import sleep - -from modules.tools import get_current_seconds - - -class AbstractHandler: - """Abstract class which specifies methods each handler class should implement.""" - - # Each handler class should have the following variables configured: - - type = "" - """Type of the handler""" - - name = "Unknown" - """Name of the handler""" - - icon = "default" - """Iconname of handler displayed in GUI""" - - config_fields = {} - """Configuration form definition for initialization from GUI""" - - # Each handler class should implement the following methods: - - def get_description(self): - """Returns description of the handler displayed in GUI.""" - return f"{self.type} handler" - - def send_message(self, message): - """Send a message to the target.""" - pass - - def is_connected(self): - """Returns True if the target is connected and can communicate.""" - return False - - def exit(self): - """Signal to disconnect from target and exit all threads.""" - pass - - # Default attributes and methods of each handler instance: - - settings = {} - """Dictionary containing handler configuration. - It is serialized as a JSON to the database.""" - - changed = [] - """Contains appropriate string if there is a need to refresh GUI. - Use add_changed() to append here.""" - - def __init__(self, settings): - self.settings = settings - self.message_queue = [] - self._first_tick = True - self._current_seconds = get_current_seconds() - self._last_seconds = 0 - - def update_config(self, new_config): - """Update handler configuration accordingly.""" - if "configuration" not in self.settings: - self.settings["configuration"] = {} - for attribute in new_config: - self.settings["configuration"][attribute] = new_config[attribute] - self.add_changed("handlers") - - def get_config(self): - """Returns configuration form values""" - if "configuration" in self.settings: - return self.settings["configuration"] - return {} - - def config(self, attribute): - """Returns single configuration form value""" - if "configuration" in self.settings and attribute in self.get_config(): - return self.get_config()[attribute] - return None - - def add_changed(self, value): - """ - Add appropriate string if there is a need to refresh GUI. - ["overview", "inspector", "actions", "data", "handlers", "details"] - """ - if value not in self.changed: - self.changed.append(value) - - def add_storage_attribute(self, attribute): - if "storage-attributes" not in self.settings: - self.settings["storage-attributes"] = [] - if attribute not in self.settings["storage-attributes"]: - self.settings["storage-attributes"].append(attribute) - - def get_storage_attributes(self): - if "storage-attributes" in self.settings: - return self.settings["storage-attributes"] - return [] - - def clear_storage_attributes(self): - self.settings["storage-attributes"] = [] - - def set_label(self, label): - self.settings["label"] = label - - def get_name(self): - """Returns the standardized name of the handler for GUI.""" - if "label" in self.settings and self.settings["label"]: - return self.settings["label"] - return self.name - - def add_message(self, message): - """Appends message to the message queue.""" - self.message_queue.append(message) - - def ready_to_read(self): - """Returns True if there is a message ready to read.""" - return len(self.message_queue) > 0 - - def read_message(self): - """Returns the oldest message from the message queue.""" - if self.ready_to_read(): - return self.message_queue.pop(0) - return None - - def first_tick(self): - """Returns True only when called for the first time.""" - result = self._first_tick - self._first_tick = False - return result - - def wait_for_interval(self, interval): - """Wait until current seconds % interval equals 0.""" - self._current_seconds = get_current_seconds() - while ( - self._current_seconds % interval != 0 - or self._current_seconds == self._last_seconds - ): - self._current_seconds = get_current_seconds() - sleep(0.1) - - self._last_seconds = self._current_seconds diff --git a/modules/handlers/bms_serial_handler.py b/modules/handlers/bms_serial_handler.py deleted file mode 100644 index 0f5f6d5..0000000 --- a/modules/handlers/bms_serial_handler.py +++ /dev/null @@ -1,112 +0,0 @@ -from serial import SerialException -from .serial_handler import SerialHandler - - -def _byte(array, index): - return array[index] * 256 + array[index + 1] - - -class BmsSerialHandler(SerialHandler): - """Class for handling Jiabaida Battery Management System V4 connected to serial port.""" - - type = "bms_serial" - icon = type - name = "Jiabaida BMS V4" - config_fields = { - "port": ["string", "Device port (e.g., /dev/ttyUSB0)"], - "interval": ["int", "Fetching interval in seconds", 10], - "timeout": ["float", "Timeout in seconds", 0.1], - "auto-reconnect": ["bool", "Auto reconnect", True], - "trim-echo": ["bool", "Trim echoed messages", False], - } - - def _read_block(self, query): - self.connection.flushInput() - self.connection.flushOutput() - self.connection.write(query) - data = [] - length = 0 - - # TODO: Auto detect echoed messages and trim them automatically. - incoming_length = 11 - if not self.config("trim-echo"): - incoming_length = 4 - for i in range(0, incoming_length): - byte = int.from_bytes(self.connection.read(), "big") - if i == incoming_length - 2: - if byte != 0: - break - if i == incoming_length - 1: - length = byte - - for i in range(0, length): - data.append(int.from_bytes(self.connection.read(), "big")) - - for i in range(0, 3): - self.connection.read() - - return data - - def _read_message(self): - if not self.first_tick(): - self.wait_for_interval(self.config("interval")) - - d1 = self._read_block(b"\xDD\xA5\x03\x00\xFF\xFD\x77") - d2 = self._read_block(b"\xDD\xA5\x04\x00\xFF\xFC\x77") - - if not d1 or not d2: - raise SerialException("Missing some block of data") - - current = ( - _byte(d1, 2) / 100 - if _byte(d1, 2) < 2**15 - else (_byte(d1, 2) - 2**16) / 100 - ) or 0 - - json = { - "voltage": _byte(d1, 0) / 100, - "current": current, - "capacity": _byte(d1, 4) * 10, - "nominal-capacity": _byte(d1, 6) * 10, - "cycles": _byte(d1, 8), - "percentages": d1[19], - "mos-state": d1[20], - "temperatures": { - # TODO: Number of temps is provided in data too, do this in loop. - "1": (_byte(d1, 23) - 2731) / 10, - "2": (_byte(d1, 25) - 2731) / 10, - }, - "cells": {}, - "protection-bits": bin(_byte(d1, 16))[2:].zfill(16), - } - - cell_count = d1[21] - balancing = bin(_byte(d1, 14))[2:].zfill(16) + bin(_byte(d1, 12))[2:].zfill(16) - - for i in range(0, cell_count): - json["cells"][f"{i+1}"] = { - "voltage": _byte(d2, i * 2) / 1000, - "balancing": int(balancing[31 - i]), - } - - return json - - def send_message(self, message): - if self.is_connected(): - try: - mos_template = "DD 5A E1 02 00 ## ?? ?? 77" - label = message.get_label() - if "mos-state" in label: - bits = label.split("-")[2] - text = mos_template - if bits not in ["00", "01", "10", "11"]: - return False - text = text.replace("##", hex(3 - int(bits, 2))[2:].zfill(2)) - current_bytes = bytes.fromhex(text[6:-9]) - byte_sum = sum(current_bytes) - text = text.replace("?? ??", hex(256 * 256 - byte_sum)[2:]) - self.connection.write(bytes.fromhex(text)) - # TODO: Read answer from device and detect return state. - return True - except SerialException: - pass diff --git a/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/modules/handlers/must_pv_ph_inverter_modbus_handler.py deleted file mode 100644 index 8b1d80e..0000000 --- a/modules/handlers/must_pv_ph_inverter_modbus_handler.py +++ /dev/null @@ -1,159 +0,0 @@ -from minimalmodbus import Instrument, NoResponseError, InvalidResponseError -from os import path -from serial import SerialException -from threading import Thread -from time import sleep - -from modules.logging.logger import logger -from .abstract_handler import AbstractHandler - - -class MustPVPHInverterModbusHandler(AbstractHandler): - """Class for handling MUST PV/PH solar system inverters.""" - - type = "must_pv_ph_modbus" - icon = "inverter" - name = "MUST PV/PH solar inverter" - config_fields = { - "port": ["string", "Device port (e.g., /dev/ttyUSB0)"], - "slave-address": ["int", "Device slave address", 4], - "interval": ["int", "Fetching interval in seconds", 10], - "timeout": ["float", "Timeout in seconds", 0.1], - "auto-reconnect": ["bool", "Auto reconnect", True], - } - - registers = { - "charger": { - "pv-voltage": [15205, 1], - "battery-voltage": [15206, 1], - "current": [15207, 1], - "power": [15208, 0], - }, - "inverter": { - "battery-voltage": [25205, 1], - "power": [25213, 0], - "power-grid": [25214, 0], - "power-load": [25215, 0], - }, - } - - def _read_message(self): - if not self.first_tick(): - self.wait_for_interval(self.config("interval")) - - result = {"charger": {}, "inverter": {}} - - for section_type in self.registers.keys(): - for key, data in self.registers[section_type].items(): - result[section_type][key] = self.connection.read_register( - data[0], data[1] - ) - sleep(0.05) - - return result - - def _message_watcher(self): - self.log.debug("Starting message watcher") - while self.active: - if path.exists(self.connection.serial.port): - try: - message = self._read_message() - if message: - self.add_message(message) - except SerialException as error: - self._handle_error(error, "Failed to read from device") - break - except UnicodeDecodeError as error: - self.log.warning(error) - sleep(0.1) - except NoResponseError as error: - self._handle_error(error, "Communication error") - break - except InvalidResponseError as error: - self._handle_error(error, "Invalid response error") - break - else: - self.log.info("Lost connection with device") - self.connection.serial.close() - self.add_changed("handlers") - if self.config("auto-reconnect"): - Thread(target=self._reconnect_watcher).start() - else: - self.suspended = True - break - self.log.debug("Stopping message watcher") - - def _handle_error(self, error, message): - # print(error) - self.log.warning(message) - self.log.error(error) - self.success = False - self.add_changed("handlers") - Thread(target=self._reconnect_watcher).start() - - def _reconnect_watcher(self): - self.log.debug("Starting reconnect watcher") - while self.active: - if path.exists(self.connection.serial.port): - if self._reconnect(): - Thread(target=self._message_watcher).start() - break - sleep(1) - self.log.debug("Stopping reconnect watcher") - - def _reconnect(self): - try: - self.connection.serial.open() - self.log.info("Established connection with device") - self.add_changed("handlers") - return True - except SerialException: - if path.exists(self.connection.serial.port): - self.log.warning("Failed to establish connection - Permission denied") - else: - self.log.warning( - "Failed to establish connection - Device does not exist" - ) - self.connection.serial.close() - return False - except NoResponseError: - return False - except InvalidResponseError: - return False - - def __init__(self, settings): - super().__init__(settings) - self.log = logger( - f"SerialDevice {self.config('port')}:{self.config('slave-address')}" - ) - - self.connection = Instrument(self.config("port"), self.config("slave-address")) - self.connection.serial.timeout = self.config("timeout") - - self.active = True - self.suspended = False - self.add_changed("handlers") - - Thread(target=self._reconnect_watcher).start() - - def update_config(self, new_config): - super().update_config(new_config) - - # TODO: Semaphore may be required - - self.connection.serial.close() - self.connection.serial.port = self.config("port") - self.connection.serial.timeout = self.config("timeout") - self.connection.address = self.config("slave-address") - self.connection.serial.close() - - if self.suspended: - Thread(target=self._reconnect_watcher).start() - - self.add_changed("handlers") - - def get_description(self): - return self.connection.serial.port - - def is_connected(self): - return self.connection.serial.is_open diff --git a/modules/handlers/serial_handler.py b/modules/handlers/serial_handler.py deleted file mode 100644 index 323ebe8..0000000 --- a/modules/handlers/serial_handler.py +++ /dev/null @@ -1,139 +0,0 @@ -from json import loads -from json.decoder import JSONDecodeError -from os import path -from serial import Serial, SerialException -from threading import Thread -from time import sleep - -from modules.logging.logger import logger -from .abstract_handler import AbstractHandler - - -class SerialHandler(AbstractHandler): - """Class for handling devices connected to serial port.""" - - def _read_message(self): - data = self.connection.readline() - if data: - try: - # Try load as a JSON - data_json = loads(data) - return data_json - except JSONDecodeError: - # If this fails, decode as a plain text - data = bytes.decode(data) - data = data.replace("\n", "") - return data - - def _message_watcher(self): - self.log.debug("Starting message watcher") - while self.active: - if path.exists(self.connection.port): - try: - message = self._read_message() - if message: - self.add_message(message) - except SerialException: - self.log.warning("Failed to read from device") - self._reconnect() - sleep(0.1) - except UnicodeDecodeError as error: - self.log.warning(error) - sleep(0.1) - else: - self.log.info("Lost connection with device") - self.connection.close() - self.add_changed("handlers") - if self.config("auto-reconnect"): - Thread(target=self._reconnect_watcher).start() - else: - self.suspended = True - break - self.log.debug("Stopping message watcher") - - def _reconnect_watcher(self): - self.log.debug("Starting reconnect watcher") - while self.active: - if path.exists(self.connection.port): - if self._reconnect(): - Thread(target=self._message_watcher).start() - break - sleep(1) - self.log.debug("Stopping reconnect watcher") - - def _reconnect(self): - try: - self.connection.open() - self.log.info("Established connection with device") - self.add_changed("handlers") - return True - except SerialException: - if path.exists(self.connection.port): - self.log.warning("Failed to establish connection - Permission denied") - else: - self.log.warning( - "Failed to establish connection - Device does not exist" - ) - self.connection.close() - return False - - type = "serial" - icon = type - name = "Serial device" - config_fields = { - "port": ["string", "Device port (e.g., /dev/ttyUSB0)"], - "baudrate": ["int", "Baudrate", 9600], - "timeout": ["float", "Timeout in seconds", 0.1], - "auto-reconnect": ["bool", "Auto reconnect", True], - } - - def __init__(self, settings): - super().__init__(settings) - self.log = logger(f"SerialDevice {self.config('port')}") - - self.connection = Serial() - self.connection.port = self.config("port") - self.connection.baudrate = self.config("baudrate") or 9600 - self.connection.timeout = self.config("timeout") - - self.active = True - self.suspended = False - self.add_changed("handlers") - - Thread(target=self._reconnect_watcher).start() - - def update_config(self, new_config): - super().update_config(new_config) - - # TODO: Semaphore may be required - - self.connection.close() - self.connection.port = self.config("port") - self.connection.baudrate = self.config("baudrate") or 9600 - self.connection.timeout = self.config("timeout") - self.connection.close() - - if self.suspended: - Thread(target=self._reconnect_watcher).start() - - self.add_changed("handlers") - - def get_description(self): - return self.connection.port - - def send_message(self, message): - if self.is_connected(): - try: - self.connection.write(bytes(message.text(), "utf-8")) - return True - except SerialException: - pass - - def is_connected(self): - return self.connection.is_open - - def exit(self): - self.active = False - if self.connection: - self.log.info("Closing connection") - self.connection.close() diff --git a/modules/logging/__init__.py b/modules/logging/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/modules/logging/logger.py b/modules/logging/logger.py deleted file mode 100644 index 4aed1db..0000000 --- a/modules/logging/logger.py +++ /dev/null @@ -1,26 +0,0 @@ -import logging -import logging.handlers - -from modules import settings - - -def logger(name=None): - formatter = logging.Formatter( - "%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - ) - - handler = logging.handlers.RotatingFileHandler( - filename=settings.LOG_FILE, - mode="a", - maxBytes=settings.LOG_FILE_MAX_BYTES, - backupCount=settings.LOG_FILE_BACKUP_COUNT, - ) - - handler.setFormatter(formatter) - - logger_object = logging.getLogger(name) - logger_object.setLevel(settings.LOG_LEVEL) - logger_object.addHandler(handler) - - return logger_object diff --git a/modules/settings/__init__.py b/modules/settings/__init__.py deleted file mode 100644 index 4974c59..0000000 --- a/modules/settings/__init__.py +++ /dev/null @@ -1,57 +0,0 @@ -from importlib.util import module_from_spec, spec_from_file_location -from os import getenv, path - -from .defaults import * - - -def load_settings(filename): - spec = spec_from_file_location("settings", filename) - settings_var = module_from_spec(spec) - spec.loader.exec_module(settings_var) - return settings_var - - -def import_settings(): - home = getenv("HOME") - - module_path = home + "/.config/contwatch/settings.py" - - if path.isfile(module_path): - info.append(f"Settings file: {module_path}") - return load_settings(module_path) - - module_path = path.abspath(REAL_PATH + "/../../settings.py") - - if path.isfile(module_path): - info.append(f"Settings file: {module_path}") - return load_settings(module_path) - - return - - -def print_info(): - print("\n".join(info) + "\n") - - -info = [] - -REAL_PATH = path.dirname(path.realpath(__file__)) - -# Read user settings - -user_settings = import_settings() -if user_settings: - globals().update(user_settings.__dict__) -else: - info.append("Settings file: Not found. Using default settings.") - -# Tweaks -if not path.isabs(DB_SQLITE_FILE): - DB_SQLITE_FILE = path.abspath(REAL_PATH + "/../../" + DB_SQLITE_FILE) - -info.append(f"Database type: {DB_TYPE}") -if DB_TYPE == "sqlite": - info.append(f"Database file: {DB_SQLITE_FILE}") -info.append(f"Log file: {LOG_FILE}") -info.append(f"Web server: http://{WEB_SERVER_ADDRESS}:{WEB_SERVER_PORT}") -info.append(f"Async cache: {CACHING_ASYNC}") diff --git a/modules/settings/defaults.py b/modules/settings/defaults.py deleted file mode 100644 index 84761f6..0000000 --- a/modules/settings/defaults.py +++ /dev/null @@ -1,24 +0,0 @@ -# DO NOT EDIT this file! Use settings.py instead. -# This file contains default values of ContWatch configuration settings. - -LOG_FILE = "contwatch.log" -LOG_FILE_MAX_BYTES = 51200 -LOG_FILE_BACKUP_COUNT = 5 -LOG_LEVEL = "DEBUG" - -DB_TYPE = "sqlite" -DB_SQLITE_FILE = "database.sqlite" -DB_HOST = "" -DB_USER = "" -DB_PASSWORD = "" -DB_DATABASE = "contwatch" -DB_DATA_READONLY = False - -WEB_SERVER = True -WEB_SERVER_ADDRESS = "0.0.0.0" -WEB_SERVER_PORT = 80 -WEB_SERVER_DEBUG = False -WEB_SERVER_ORIGINS = "*" - -CACHING_INTERVAL = 10 -CACHING_ASYNC = False diff --git a/modules/tools/__init__.py b/modules/tools/__init__.py deleted file mode 100644 index a537967..0000000 --- a/modules/tools/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from modules.tools.tools import * diff --git a/modules/tools/modules_registrator.py b/modules/tools/modules_registrator.py deleted file mode 100644 index b36262c..0000000 --- a/modules/tools/modules_registrator.py +++ /dev/null @@ -1,13 +0,0 @@ -class ModulesRegistrator: - """Handles modules registration""" - - def __init__(self): - self.registered_modules = [] - - def add(self, *modules): - for module in modules: - self.registered_modules.append(module) - - def exit(self): - for module in self.registered_modules: - module.exit() diff --git a/modules/tools/tools.py b/modules/tools/tools.py deleted file mode 100644 index 03b2157..0000000 --- a/modules/tools/tools.py +++ /dev/null @@ -1,150 +0,0 @@ -from datetime import datetime -from os import path -from platform import processor -from subprocess import run -from sys import getsizeof -from time import time -from json import load - -from modules import settings - - -def cpu_model(): - try: - command = "LC_ALL=c lscpu | grep 'Model name'" - output = run(command, shell=True, capture_output=True) - if output.stderr: - return processor() - else: - return " ".join(output.stdout.decode().split()[2:]) - except Exception: - return processor() - - -def distribution(): - try: - command = "cat /etc/os-release | grep PRETTY_NAME" - if path.isfile("/etc/redhat-release"): - file = open("/etc/redhat-release") - output = file.readline() - return output.replace("\n", "") - else: - output = run(command, shell=True, capture_output=True) - if output.stderr: - return "Unknown" - else: - return output.stdout.decode().split('"')[1] - except Exception: - return "Unknown" - - -def get_update_datetime(): - """Returns date of last update based currently on .git/FETCH_HEAD""" - file_path = settings.REAL_PATH + "/../../.git/FETCH_HEAD" - if path.isfile(file_path): - file_datetime = datetime.fromtimestamp(path.getctime(file_path)) - return file_datetime.strftime("%Y-%m-%d") - else: - return "Unknown" - - -def get_size(obj, seen=None): - """Recursively finds size of objects""" - size = getsizeof(obj) - if seen is None: - seen = set() - obj_id = id(obj) - if obj_id in seen: - return 0 - # Important mark as seen *before* entering recursion to gracefully handle self-referential objects - seen.add(obj_id) - if isinstance(obj, dict): - size += sum([get_size(v, seen) for v in obj.values()]) - size += sum([get_size(k, seen) for k in obj.keys()]) - elif hasattr(obj, "__dict__"): - size += get_size(obj.__dict__, seen) - elif hasattr(obj, "__iter__") and not isinstance(obj, (str, bytes, bytearray)): - size += sum([get_size(i, seen) for i in obj]) - return size - - -def parse_config(http_form, handler_class): - config = {} - - for field in http_form: - field_new = field[1:-1] - if field_new in handler_class.config_fields: - field_type = handler_class.config_fields[field_new][0] - field_data = http_form[field] - value = field_data - if field_type in ["int", "handlerInstance", "workflowInstance"]: - value = int(field_data) - elif field_type == "float": - value = float(field_data) - elif field_type == "bool": - value = bool(field_data) - config[field_new] = value - - for field in handler_class.config_fields: - if len(handler_class.config_fields[field]) > 2 and field not in config: - config[field] = handler_class.config_fields[field][2] - - if handler_class.config_fields[field][0] == "bool": - if f"_{field}_" not in http_form: - config[field] = False - - return config - - -def json_error(error, message): - response = { - "error": error, - "message": message, - } - return response, error - - -def json_notif(code, status, title, message): - response = { - "status": status, - "title": title, - "message": message, - } - return response, code - - -def linearize_json(input_json, result, current_branch=()): - for attribute in input_json: - if isinstance(input_json[attribute], dict): - new_branch = list(current_branch) - new_branch.append(attribute) - linearize_json(input_json[attribute], result, new_branch) - else: - branch = list(current_branch) - branch.append(attribute) - result.append("/".join(branch)) - - -def get_nested_attribute(json, attributes_row): - attributes = attributes_row.split("/") - attributes.reverse() - result = json - while attributes: - attribute = attributes.pop() - if attribute in result: - result = result[attribute] - else: - return - return result - - -def get_current_seconds(): - return int(time()) - - -def get_version(): - """Returns version of the application based on package.json""" - real_path = path.dirname(path.realpath(__file__)) - with open(f"{real_path}/../../package.json") as json_file: - data = load(json_file) - return data["version"] diff --git a/modules/web_server/__init__.py b/modules/web_server/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/modules/web_server/flask_web_server.py b/modules/web_server/flask_web_server.py deleted file mode 100644 index bd48974..0000000 --- a/modules/web_server/flask_web_server.py +++ /dev/null @@ -1,850 +0,0 @@ -from modules import settings, tools -from modules.core import HandlerManager, database -from modules.core.actions import * -from modules.handlers import * -from modules.tools import get_nested_attribute, get_version - -from datetime import datetime, timedelta -from flask import Flask, redirect, render_template, request -from flask_socketio import SocketIO -from time import sleep -from threading import Thread - -import platform - - -class FlaskWebServer: - def __init__(self, _manager: HandlerManager, _database): - self.app = Flask(__name__) - self.host = settings.WEB_SERVER_ADDRESS - self.port = settings.WEB_SERVER_PORT - self.manager = _manager - self.database = _database - self.start_datetime = datetime.now() - self.app.config["JSON_SORT_KEYS"] = False - self.app.config["JSONIFY_PRETTYPRINT_REGULAR"] = True - self.sio = SocketIO( - self.app, - async_mode="eventlet", - cors_allowed_origins=f"{settings.WEB_SERVER_ORIGINS}", - ) - self.connections = 0 - self.active = True - self.site_config = {} # TODO: Store JSON in file or database - self.cache = {} - - ########### - # SOCKETS # - ########### - - def emit_notification(notification_type, value): - self.sio.emit(notification_type, value, namespace="/") - - @self.sio.on("connect") - def connect(): - self.connections += 1 - emit_notification("content-change-notification", "details") - - @self.sio.on("disconnect") - def disconnect(): - self.connections -= 1 - emit_notification("content-change-notification", "details") - - ######### - # VIEWS # - ######### - - @self.app.route("/") - def index(): - return redirect("overview") - - @self.app.route("/index") - def index_redirect(): - return redirect("overview") - - @self.app.route("/") - def page(page_name): - return render_template( - "layouts/default.html", manager=self.manager, page=page_name - ) - - @self.app.route("/<_>", methods=["POST"]) - def not_found(_): - return "Not found" - - @self.app.route("/overview", methods=["POST"]) - def overview(): - messages = self.manager.message_queue.copy() - messages.reverse() - return render_template( - "pages/overview.html", manager=self.manager, messages=messages - ) - - @self.app.route("/inspector", methods=["POST"]) - def inspector(): - return render_template( - "pages/inspector.html", - manager=self.manager, - views=self.database.get_chart_views(), - ) - - @self.app.route("/actions", methods=["POST"]) - def actions(): - routine_log = [] - for attribute in request.json: - if attribute == "action-routine-log": - for message in self.manager.message_queue: - if message["type"] == "event" and not message["incoming"]: - if message["queue_index"] == int(request.json[attribute]): - log = message["routine_log"] - routine_log = log - break - return render_template( - "pages/actions.html", manager=self.manager, routine_log=routine_log - ) - - @self.app.route("/handlers", methods=["POST"]) - def handlers(): - return render_template( - "pages/handlers.html", handlers=self.manager.get_handlers() - ) - - @self.app.route("/data", methods=["POST"]) - def data(): - for attribute in request.json: - self.site_config[attribute] = request.json[attribute] - - attributes = {} - ghost_attributes = {} - - for handler_id in self.manager.registered_handlers: - storage_attributes = self.manager.registered_handlers[ - handler_id - ].get_storage_attributes() - attributes[handler_id] = storage_attributes - ghost_attributes[handler_id] = [] - - return render_template( - "pages/data.html", - site_config=self.site_config, - manager=self.manager, - attributes=attributes, - ghost_attributes=ghost_attributes, - ) - - @self.app.route("/details", methods=["POST"]) - def details(): - dictionary = { - "Host device": { - "Name": platform.node(), - "Kernel": platform.release(), - "Architecture": f"{platform.architecture()[0]}{', ' if platform.architecture()[1] else ''}{platform.architecture()[1]}", - "Machine": platform.machine(), - "Processor": tools.cpu_model(), - "Python version": platform.python_version(), - "Distribution": tools.distribution(), - }, - "ContWatch instance": { - "Git fetch": tools.get_update_datetime(), - "Uptime": hr_datetime( - (datetime.now() - self.start_datetime).total_seconds() - ), - "Handlers": len(self.manager.get_handlers()), - "Connections": self.connections, - "Database": settings.DB_TYPE, - "Cache size": hr_filesize(tools.get_size(self.cache)), - "Version": get_version(), - }, - } - return render_template("pages/details.html", data=dictionary) - - ####### - # API # - ####### - - @self.app.route("/api") - def api(): - return tools.json_error(400, "Specify your API request") - - def parse_query(query): - query = query.split(",") - data_map = {} - for entry in query: - specifier = entry.split("-") - d_id = int(specifier[0]) - if len(specifier) == 2: - if d_id not in data_map: - data_map[d_id] = [] - data_map[d_id].append(specifier[1]) - else: - data_map[d_id] = [] - return data_map - - def build_chart_data(data_map, datetime_from, datetime_to, smartround): - response = {} - for handler_id in data_map: - attributes = ( - data_map[handler_id] - if data_map[handler_id] - else self.database.get_all_stored_attributes(handler_id) - ) - - chart_data = {} - - for attribute in attributes: - chart_data[attribute] = {"timestamps": [], "values": []} - result = self.database.get_handler_attribute_data( - handler_id, - attribute, - datetime_from, - datetime_to, - smartround=smartround, - ) - for entry in result: - entry_time = entry[0] - chart_data[attribute]["timestamps"].append( - int(entry_time.timestamp()) - ) - chart_data[attribute]["values"].append(entry[1]) - - response[handler_id] = chart_data - return response - - def build_chart_event_data( - handler_id, event, event_type, datetime_from, datetime_to - ): - response = {} - chart_data = {event: {"timestamps": [], "payload": []}} - result = self.database.get_handler_stored_event_data( - handler_id, - event, - True if event_type == "in" else False, - datetime_from, - datetime_to, - ) - for entry in result: - entry_time = entry[0] - chart_data[event]["timestamps"].append(int(entry_time.timestamp())) - chart_data[event]["payload"].append(entry[1]) - - response[handler_id] = chart_data - - return response - - @self.app.route("/api/charts") - def api_charts(): - handler_id = ( - request.args["handler_id"] if "handler_id" in request.args else "" - ) - raw_query = request.args["query"] if "query" in request.args else "" - date_from = request.args["date_from"] if "date_from" in request.args else "" - date_to = request.args["date_to"] if "date_to" in request.args else "" - smartround = ( - request.args["smartround"] if "smartround" in request.args else 0 - ) - cache = request.args["cache"] if "cache" in request.args else False - - datetime_from = datetime.min - datetime_to = datetime.now() - - data_map = {} - - if handler_id: - try: - handler_id = int(handler_id) - data_map[handler_id] = [] - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'handler_id' has to be an integer." - ) - elif raw_query: - try: - data_map = parse_query(raw_query) - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'query' cannot be successfully parsed" - ) - else: - return tools.json_error( - 400, - "Either 'handler_id' or 'query' has to be provided as an argument.", - ) - - if date_from: - try: - datetime_from = datetime.strptime(date_from, "%Y-%m-%d") - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'date_from' is not in '%Y-%m-%d' format." - ) - - if date_to: - try: - datetime_to = datetime.strptime(date_to, "%Y-%m-%d") - datetime_to += timedelta(days=1) - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'date_to' is not in '%Y-%m-%d' format." - ) - - if smartround: - try: - smartround = int(smartround) - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'smartround' has to be an integer." - ) - - if settings.CACHING_INTERVAL and cache: - if raw_query in self.cache: - try: - for entry in self.cache[raw_query]: - if entry["s"] == smartround and entry["f"] == datetime_from: - delta = datetime.now() - entry["c"] - if settings.CACHING_ASYNC: - return entry["r"] - if ( - delta.total_seconds() / 60 - < settings.CACHING_INTERVAL - ): - return entry["r"] - except RuntimeError: - print("An error occurred during cache refreshing") - - response = build_chart_data( - data_map, datetime_from, datetime_to, smartround - ) - - if settings.CACHING_INTERVAL and cache: - if raw_query not in self.cache: - self.cache[raw_query] = [] - self.cache[raw_query].append( - { - "c": datetime.now(), - "r": response, - "f": datetime_from, - "t": datetime_to, - "s": smartround, - } - ) - - return response - - @self.app.route("/api/events") - def api_events(): - handler_id = ( - request.args["handler_id"] if "handler_id" in request.args else "" - ) - event_name = request.args["name"] if "name" in request.args else "" - event_type = request.args["type"] if "type" in request.args else "" - date_from = request.args["date_from"] if "date_from" in request.args else "" - date_to = request.args["date_to"] if "date_to" in request.args else "" - - datetime_from = datetime.min - datetime_to = datetime.now() - - if handler_id: - try: - handler_id = int(handler_id) - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'handler_id' has to be an integer." - ) - else: - return tools.json_error( - 400, "Argument 'handler_id' has to be provided as an argument." - ) - - if date_from: - try: - datetime_from = datetime.strptime(date_from, "%Y-%m-%d") - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'date_from' is not in '%Y-%m-%d' format." - ) - - if date_to: - try: - datetime_to = datetime.strptime(date_to, "%Y-%m-%d") - datetime_to += timedelta(days=1) - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'date_to' is not in '%Y-%m-%d' format." - ) - - return build_chart_event_data( - handler_id, event_name, event_type, datetime_from, datetime_to - ) - - @self.app.route("/api/data") - def api_data(): - handler_id = ( - request.args["handler_id"] if "handler_id" in request.args else "" - ) - - if handler_id: - try: - handler_id = int(handler_id) - except Exception as e: - print(e) - return tools.json_error( - 400, "Argument 'handler_id' has to be an integer." - ) - else: - return tools.json_error( - 400, "Argument 'handler_id' has to be provided as an argument." - ) - - return self.manager.last_messages[handler_id][1] - - ######### - # FORMS # - ######### - - @self.app.route("/dialog/", methods=["POST"]) - def dialog(dialog_name): - template_name = f"dialogs/{dialog_name}.html" - - if "add_new_handler" == dialog_name: - handler_type = request.json["handler_type"] - for handler in loaded_handlers: - if handler.type == handler_type: - fields = handler.config_fields - return render_template( - template_name, fields=fields, handler=handler - ) - - if "edit_handler" == dialog_name: - handler_id = int(request.json["handler_id"]) - handler = self.manager.get_handler(handler_id) - return render_template(template_name, id=handler_id, handler=handler) - - if "edit_event_listener" == dialog_name: - listener_id = int(request.json["listener_id"]) - return render_template( - template_name, - handlers=self.manager.get_handlers(), - listener=self.manager.event_manager.get_event_listener(listener_id), - workflows=self.manager.event_manager.get_workflows(), - ) - - if "json_attributes_to_store" == dialog_name: - handler_id = int(request.json["handler_id"]) - handler = self.manager.get_handler(handler_id) - if handler_id in self.manager.last_messages: - json = self.manager.last_messages[handler_id][1] - else: - json = {} - - attrs = [] - if isinstance(json, dict): - tools.linearize_json(json, attrs) - - attributes = {} - - for attributes_row in attrs: - result = get_nested_attribute(json, attributes_row) - - try: - float(result) - attributes[attributes_row] = result - except TypeError: - pass - except ValueError: - pass - - return render_template( - template_name, - id=handler_id, - handler=handler, - attributes=attributes, - ) - - if "add_new_routine" == dialog_name: - routine_type = request.json["routine_type"] - target_workflow = self.manager.event_manager.get_workflow( - int(request.json["target_workflow"]) - ) - for routine in available_routines: - if routine.type == routine_type: - fields = routine.config_fields - return render_template( - template_name, - fields=fields, - routine=routine, - workflow=target_workflow, - handlers=self.manager.get_handlers(), - workflows=self.manager.event_manager.get_workflows(), - ) - - if "edit_routine" == dialog_name: - routine_id = request.json["routine_id"] - routine = self.manager.event_manager.get_routine(int(routine_id)) - return render_template( - template_name, - routine=routine, - handlers=self.manager.get_handlers(), - workflows=self.manager.event_manager.get_workflows(), - ) - - if "choose_routine_type" in dialog_name: - target_workflow = request.json["target_workflow"] - return render_template( - template_name, - available_routines=available_routines, - target_workflow=target_workflow, - ) - - return render_template( - template_name, - loaded_handlers=loaded_handlers, - handlers=self.manager.get_handlers(), - workflows=self.manager.event_manager.get_workflows(), - ) - - @self.app.route("/add_new_handler", methods=["POST"]) - def add_new_handler(): - handler_class = get_handler_class(request.form["handler_type"]) - handler_label = request.form["handler_label"] - config = tools.parse_config(request.form, handler_class) - handler_settings = {"configuration": config} - new_handler = handler_class(handler_settings) - new_handler.set_label(handler_label) - database_handler = self.database.add_handler(new_handler) - self.manager.register_handler(database_handler.id, new_handler) - return {"status": "ok"} - - @self.app.route("/edit_handler/", methods=["POST"]) - def edit_handler(handler_id): - handler_class = get_handler_class(request.form["handler_type"]) - handler_label = request.form["handler_label"] - config = tools.parse_config(request.form, handler_class) - handler = self.manager.get_handler(handler_id) - Thread(target=lambda: handler.update_config(config)).start() - handler.set_label(handler_label) - self.database.update_handler_settings(handler_id, handler.settings) - self.manager.add_changed("handlers") - return {"status": "ok"} - - @self.app.route("/delete_handler/", methods=["POST"]) - def delete_handler(handler_id): - self.database.delete_handler(handler_id) - handler = self.manager.get_handler(handler_id) - handler.exit() - self.manager.delete_handler(handler_id) - return {"status": "ok"} - - @self.app.route( - "/edit_json_attributes_to_store/", methods=["POST"] - ) - def edit_json_attributes_to_store(handler_id): - handler = self.manager.get_handler(handler_id) - handler.clear_storage_attributes() - for attribute in request.form: - handler.add_storage_attribute(attribute) - self.database.update_handler_settings(handler_id, handler.settings) - self.manager.add_changed("data") - return {"status": "ok"} - - @self.app.route("/save_chart_view", methods=["POST"]) - def save_chart_view(): - view_id = request.json["view_id"] - if not request.json["label"]: - return {"status": False, "error": "View label cannot be empty"}, 400 - if view_id >= 0: - self.database.update_chart_view( - view_id, request.json["label"], request.json["settings"] - ) - else: - view_id = self.database.add_chart_view( - request.json["label"], request.json["settings"] - ).id - self.manager.add_changed("inspector") - return {"status": True, "view_id": view_id} - - @self.app.route("/delete_chart_view/", methods=["POST"]) - def delete_chart_view(view_id): - self.database.delete_chart_view(view_id) - self.manager.add_changed("inspector") - return {"status": True, "view_id": view_id} - - @self.app.route("/add_new_event_listener", methods=["POST"]) - def add_new_event_listener(): - label = request.form["listener_label"] - if not label: - return tools.json_notif( - 400, "error", "Empty name", f"Event name cannot be empty." - ) - handler_id = int(request.form["listener_handler"]) - listener = EventListener(handler_id, label) - if self.manager.event_manager.add_event_listener(listener): - workflow_id = request.form["listener_workflow"] - if workflow_id: - workflow_id = int(workflow_id) - listener.set_workflow( - self.manager.event_manager.get_workflow(workflow_id) - ) - data_listener_status = ( - bool(request.form["data_listener"]) - if "data_listener" in request.form - else False - ) - listener.set_data_listener_status(data_listener_status) - db_listener = self.database.add_event_listener(listener) - listener.set_id(db_listener.id) - self.manager.add_changed("actions") - return {"status": "ok"} - return tools.json_notif( - 400, - "error", - "Listener exists", - f'Event listener for event "{label}" already exists.', - ) - - @self.app.route("/edit_event_listener/", methods=["POST"]) - def edit_event_listener(listener_id): - listener = self.manager.event_manager.get_event_listener(listener_id) - listener_label = request.form["listener_label"] - if not listener_label: - return tools.json_notif( - 400, - "error", - "Saving failed", - f"Event label or attribute name cannot be empty.", - ) - listener.set_label(listener_label) - handler_id = int(request.form["listener_handler"]) - listener.set_handler_id(handler_id) - workflow_id = request.form["listener_workflow"] - if workflow_id: - workflow_id = int(workflow_id) - listener.set_workflow( - self.manager.event_manager.get_workflow(workflow_id) - ) - else: - listener.delete_workflow() - data_listener_status = ( - bool(request.form["data_listener"]) - if "data_listener" in request.form - else False - ) - listener.set_data_listener_status(data_listener_status) - self.database.update_event_listener(listener) - self.manager.add_changed("actions") - return {"status": "ok"} - - @self.app.route("/delete_event_listener/", methods=["POST"]) - def delete_event_listener(listener_id): - self.database.delete_event_listener(listener_id) - listener = self.manager.event_manager.get_event_listener(listener_id) - self.manager.event_manager.delete_event_listener(listener) - self.manager.add_changed("actions") - return {"status": "ok"} - - @self.app.route("/add_new_workflow/", methods=["POST"]) - def add_new_workflow(listener_id): - listener = self.manager.event_manager.get_event_listener(listener_id) - - if listener and listener.workflow: - return tools.json_notif( - 400, - "error", - "Workflow error", - f"Event listener already has associated workflow.", - ) - - db_workflow = self.database.add_workflow() - new_workflow = Workflow(self.manager.event_manager) - new_workflow.set_id(db_workflow.id) - - self.manager.event_manager.add_workflow(new_workflow) - - if listener: - listener.set_workflow(new_workflow) - self.database.update_event_listener(listener) - - self.manager.add_changed("actions") - return {"status": "ok"} - - @self.app.route("/delete_workflow/", methods=["DELETE"]) - def delete_workflow(workflow_id): - workflow_instance = self.manager.event_manager.get_workflow(workflow_id) - for routine in workflow_instance.routines.copy(): - self.manager.event_manager.delete_routine(routine.id) - - listeners = self.manager.event_manager.get_event_listeners() - - for listener in listeners: - if listener.workflow and listener.workflow.id == workflow_id: - listener.delete_workflow() - - for workflow_instance in self.manager.event_manager.get_workflows(): - for routine in workflow_instance.routines.copy(): - if ( - routine.type == "perform_workflow" - and routine.get_config()["workflow"] == workflow_id - ): - self.manager.event_manager.delete_routine(routine.id) - - self.manager.event_manager.delete_workflow(workflow_id) - self.database.delete_workflow(workflow_id) - self.manager.add_changed("actions") - return {"status": "ok"} - - @self.app.route("/add_new_routine", methods=["POST"]) - def add_new_routine(): - routine_class = get_routine_class(request.form["routine_type"]) - config = tools.parse_config(request.form, routine_class) - workflow_id = int(request.form["workflow_id"]) - target_workflow = self.manager.event_manager.get_workflow(workflow_id) - routine_settings = {"configuration": config} - new_routine = routine_class(routine_settings, self.manager) - new_routine.workflow = target_workflow - new_routine.position = len(target_workflow.routines) - target_workflow.add_routine(new_routine) - database_routine = self.database.add_routine(new_routine) - new_routine.set_id(database_routine.id) - - self.manager.add_changed("actions") - return {"status": "ok"} - - @self.app.route("/edit_routine/", methods=["POST"]) - def edit_routine(routine_id): - routine = self.manager.event_manager.get_routine(routine_id) - routine_class = get_routine_class(routine.type) - config = tools.parse_config(request.form, routine_class) - routine.update_config(config) - self.database.update_routine(routine) - self.manager.add_changed("actions") - return {"status": "ok"} - - @self.app.route("/move_routine", methods=["POST"]) - def move_routine(): - self.manager.event_manager.move_routine( - request.json["workflow_id"], - request.json["routine_id"], - request.json["index"], - ) - return {"status": "ok"} - - @self.app.route("/delete_routine/", methods=["POST"]) - def delete_routine(routine_id): - self.manager.event_manager.delete_routine(routine_id) - return {"status": "ok"} - - @self.app.route("/delete_all_tables", methods=["DELETE"]) - def delete_all_tables(): - database.reset() - self.manager.delete_all() - self.cache = {} - return {"status": "ok"} - - ################# - # JINJA FILTERS # - ################# - - @self.app.template_filter("hr_filesize") - def hr_filesize(filesize): - units = ["B", "kB", "MB", "GB", "TB"] - i = 0 - while filesize > 100: - filesize /= 1000 - i += 1 - value = f"{filesize:.2f}".rstrip("0").rstrip(".") - return f"{value} {units[i]}" - - @self.app.template_filter("hr_datetime") - def hr_datetime(seconds): - time_data = {} - time_data["day"], remaining = divmod(seconds, 86_400) - time_data["hour"], remaining = divmod(remaining, 3_600) - time_data["minute"], time_data["second"] = divmod(remaining, 60) - - time_parts = [] - - for name, value in time_data.items(): - if value > 0: - time_parts.append( - f"{round(value)} {name}{'s' if value > 1 else ''}" - ) - - if time_parts: - return " ".join(time_parts[:2]) - else: - return "below 1 second" - - ######### - # OTHER # - ######### - - def content_change_watcher(): - while self.active: - if self.connections > 0: - pages = [] - for handler in self.manager.get_handlers().values(): - while handler.changed: - page_name = handler.changed.pop() - if page_name not in pages: - pages.append(page_name) - - while self.manager.changed: - page_name = self.manager.changed.pop() - if page_name not in pages: - pages.append(page_name) - - for page_name in pages: - emit_notification("content-change-notification", page_name) - - sleep(0.1) - - Thread(target=content_change_watcher).start() - - def cache_refresher(): - while self.active: - now = datetime.now() - for query in self.cache: - for entry in self.cache[query]: - if ( - entry["t"].day == now.day - and entry["t"].month == now.month - and entry["t"].year == now.year - ): - if settings.WEB_SERVER_DEBUG: - print("Rebuilding cache") - entry["r"] = build_chart_data( - parse_query(query), entry["f"], now, entry["s"] - ) - if settings.WEB_SERVER_DEBUG: - print("Rebuilding cache [done]") - else: - self.cache[query].remove(entry) - sleep(settings.CACHING_INTERVAL * 60) - - if settings.CACHING_INTERVAL and settings.CACHING_ASYNC: - refresher = Thread(target=cache_refresher) - refresher.daemon = True - refresher.start() - - self.serverThread = Thread(target=self.run) - self.serverThread.start() - self.serverThread.join() - - def run(self): - self.sio.run( - self.app, - self.host, - self.port, - debug=settings.WEB_SERVER_DEBUG, - use_reloader=False, - ) - - def exit(self): - self.active = False diff --git a/modules/web_server/src/Actions.ts b/modules/web_server/src/Actions.ts deleted file mode 100644 index c6c4735..0000000 --- a/modules/web_server/src/Actions.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { del, post } from "./utils/URLTools"; - -export class Actions { - createNewWorkflow(listenerId: number): void { - post(`/add_new_workflow/${listenerId}`, (request) => { - console.log(request.response); - }); - } - - deleteWorkflow(workflowId: number): void { - del(`/delete_workflow/${workflowId}`, (request) => { - console.log(request.response); - }); - } - - moveRoutine(workflowId: number, routineId: number, index: number): void { - post("/move_routine", (request) => { - console.log(request.response); - }, { workflow_id: workflowId, routine_id: routineId, index: index }, "JSON"); - } - - stopPropagation(className: string): void { - const elements = document.getElementsByClassName(className); - for (let i = 0; i <= elements.length; i++) { - if (elements[i]) { - elements[i].addEventListener("click", (evt) => { - evt.stopPropagation(); - }); - } - } - } -} diff --git a/modules/web_server/src/Application.ts b/modules/web_server/src/Application.ts deleted file mode 100644 index b0395a8..0000000 --- a/modules/web_server/src/Application.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Menu } from "./widgets/Menu"; -import { Notifications } from "./widgets/Notifications"; -import { Dialog } from "./widgets/Dialog"; -import { Inspector } from "./Inspector"; -import { GifLoader } from "./widgets/GifLoader"; -import { Actions } from "./Actions"; -import { del } from "./utils/URLTools"; - -export class Application { - private readonly colors: string[]; - private sockets: any; // Js class - private loader: GifLoader; - private menu: Menu; - private notifications: Notifications; - private dialog: Dialog; - private inspector: Inspector; - private actions: Actions; - private connection = true; - - constructor() { - // @ts-ignore - // eslint-disable-next-line no-undef - this.sockets = io(); - this.colors = ["#7233ff", "#299bec", "#65c44c", "#fd8f64", "#ffcd41"]; - - this.loader = new GifLoader(); - this.loader.gifSrc = "static/GifLoader.js/src/images/hex-loader.gif"; - this.loader.show(); - - this.menu = new Menu("menu", this.colors); - this.notifications = new Notifications("notifications"); - this.dialog = new Dialog("dialog-container"); - this.inspector = new Inspector("inspector-chart-view", this.colors); - this.actions = new Actions(); - - this.bindSockets(); - } - - bindSockets(): void { - this.sockets.on("content-change-notification", (pageName: string) => { - if (this.menu.page.currentPage === pageName) { - this.menu.page.refresh(); - } - }); - - // this.sockets.on("gui-notification", (payload: Record) => { - // console.log(payload); - // (window as any).app.notifications.addNotification(payload.title, payload.message, payload.status); - // }); - - this.sockets.on("connect", () => { - if (!this.connection) { - (window as any).app.notifications.addNotification( - "Server connected", - "Reconnected to the server", - "success"); - } - this.connection = true; - }); - - this.sockets.on("disconnect", () => { - (window as any).app.notifications.addNotification( - "Server disconnected", - "Lost connection to the server", - "warning"); - this.connection = false; - }); - } - - deleteAllTables(): void { - if (!confirm("All settings and data will be permanently deleted. Continue?")) { - return; - } - - del("/delete_all_tables", () => { /* */ }); - } -} diff --git a/modules/web_server/src/Inspector.ts b/modules/web_server/src/Inspector.ts deleted file mode 100644 index b0f72d6..0000000 --- a/modules/web_server/src/Inspector.ts +++ /dev/null @@ -1,408 +0,0 @@ -import { BigChart } from "./widgets/BigChart"; -import { dateISO, dateISOString } from "./utils/DateTime"; -import { get } from "./utils/URLTools"; -import { addModifier, removeModifier } from "./utils/ElementTools"; - -export class Inspector { - private readonly colors: string[]; - private readonly inspectorElementId: string; - private currentViewId = -1; - private bigChart: BigChart; - private displayedCharts: { [name: string]: string[] } = {}; - private displayedEvents: { [name: string]: string[] } = {}; - private displayedEventsCount = 0; - private dateSelector: HTMLInputElement; - private configPanel: HTMLElement; - - constructor(id: string, colors: string[]) { - this.colors = colors; - this.inspectorElementId = id; - } - - get element(): HTMLElement { - return document.getElementById(this.inspectorElementId); - } - - get canvas(): HTMLCanvasElement { - return this.element.querySelector("canvas"); - } - - initialize(): void { - this.clearChart(); - this.dateSelector = (document.getElementById("date-select") as HTMLInputElement); - this.dateSelector.value = dateISOString(); - this.configPanel = document.getElementById("inspector-config-panel"); - } - - clearChart(): void { - if (this.bigChart) { - this.bigChart.destroy(); - this.clearCheckboxes(); - } - this.bigChart = new BigChart(this.canvas, this.colors); - this.element.addEventListener("transitionend", (): void => { - this.bigChart.chart.resize(1, 1); - this.bigChart.chart.resize(); - }); - } - - open(viewId: number, label: string): void { - this.currentViewId = viewId; - ( document.getElementById("view-label")).value = label; - this.show(); - this.initialize(); - } - - openEmpty(): void { - this.open(-1, ""); - } - - clearCheckboxes(): void { - const checkboxes = document.getElementsByClassName("inspector-data-checkbox"); - - for (let i = 0; i < checkboxes.length; i++) { - ( checkboxes[i]).checked = false; - removeModifier(checkboxes[i].parentElement, "checked"); - } - } - - addChart(handler: string, attribute: string, date?: string): void { - if (!this.displayedCharts[handler]) { - this.displayedCharts[handler] = []; - } - - if (this.displayedCharts[handler].indexOf(attribute) === -1) { - this.displayedCharts[handler].push(attribute); - } else { - return; - } - - let query; - if (attribute) { - query = `${handler}-${attribute}`; - } else { - query = handler; - } - - let dateFrom = dateISOString(); - - if (typeof date !== "undefined") { - dateFrom = date; - } - - const currentView = this.currentViewId; - - const url = `/api/charts?query=${query}&date_from=${dateFrom}&date_to=${dateFrom}`; - get(url, (request) => { - if (request.readyState === 4) { - if (currentView !== this.currentViewId) { - return; - } - - const data = JSON.parse(request.responseText); - - for (const handler in data) { - for (const line in data[handler]) { - if (!data[handler][line].timestamps.length) { - break; - } else { - if (dateISO(new Date(data[handler][line].timestamps.slice(0, 1) * 1000)) !== this.dateSelector.value) { - break; - } - } - const datasetData = []; - - for (let j = 0; j < data[handler][line].timestamps.length; j++) { - datasetData.push({ - x: data[handler][line].timestamps[j] * 1000, - y: data[handler][line].values[j] - }); - } - const dataset = { - handler: handler, - event: false, - label: line, - borderColor: this.colors[(this.bigChart.chart.data.datasets.length) % 5], - data: datasetData - }; - - this.bigChart.chart.data.datasets.push(dataset); - - const checkbox = ( document.getElementById(`${handler}-${line}`)); - checkbox.checked = true; - addModifier(checkbox.parentElement, "checked"); - - this.bigChart.sort(); - this.bigChart.recolor(); - this.bigChart.chart.update(); - this.bigChart.chart.resetZoom(); - } - } - } - }); - } - - removeChart(handler: string, attribute: string): void { - let index = this.displayedCharts[handler].indexOf(attribute); - this.displayedCharts[handler].splice(index, 1); - - for (const id in this.bigChart.chart.data.datasets) { - const dataset = this.bigChart.chart.data.datasets[id]; - if (dataset.handler === handler && dataset.label === attribute && !dataset.event) { - index = this.bigChart.chart.data.datasets.indexOf(dataset); - this.bigChart.chart.data.datasets.splice(index, 1); - this.bigChart.recolor(); - this.bigChart.chart.update(); - } - } - } - - toggleChart(handler: string, attribute: string): void { - const status = ( document.getElementById(`${handler}-${attribute}`)).checked; - - if (status) { - this.addChart(handler, attribute, this.dateSelector.value); - } else { - this.removeChart(handler, attribute); - } - } - - refreshChart() { - this.clearChart(); - - const charts = this.displayedCharts; - this.displayedCharts = {}; - - for (const handler in charts) { - for (const attribute in charts[handler]) { - this.addChart(handler, charts[handler][attribute], this.dateSelector.value); - } - } - - const events = this.displayedEvents; - this.displayedEvents = {}; - this.displayedEventsCount = 0; - - for (const record in events) { - const handler = record.split("::")[0]; - const eventType = record.split("::")[1]; - for (const event in events[record]) { - this.addEvent(handler, events[record][event], (eventType === "in") ? "in" : "out", this.dateSelector.value); - } - } - } - - addEvent(handler: string, event: string, type: "in" | "out", date?: string): void { - if (!this.displayedEvents[`${handler}::${type}`]) { - this.displayedEvents[`${handler}::${type}`] = []; - } - - if (this.displayedEvents[`${handler}::${type}`].indexOf(event) === -1) { - this.displayedEvents[`${handler}::${type}`].push(event); - } else { - return; - } - - let dateFrom = dateISOString(); - - if (typeof date !== "undefined") { - dateFrom = date; - } - - const currentView = this.currentViewId; - - const url = `/api/events?handler_id=${handler}&name=${event}&type=${type}&date_from=${dateFrom}&date_to=${dateFrom}`; - get(url, (request) => { - if (request.readyState === 4) { - if (currentView !== this.currentViewId) { - return; - } - - const data = JSON.parse(request.responseText); - - for (const handler in data) { - for (const line in data[handler]) { - if (!data[handler][line].timestamps.length) { - break; - } else { - if (dateISO(new Date(data[handler][line].timestamps.slice(-1) * 1000)) !== this.dateSelector.value) { - break; - } - } - const datasetData = []; - - for (let j = 0; j < data[handler][line].timestamps.length; j++) { - datasetData.push({ - x: data[handler][line].timestamps[j] * 1000, - y: event, - payload: data[handler][line].payload[j] - }); - } - const dataset = { - handler: handler, - label: line, - event: true, - eventType: type, - borderColor: "gold", - data: datasetData, - yAxisID: "y2", - pointStyle: "circle", - showLine: false, - pointRadius: 3, - pointHoverRadius: 6 - }; - - this.displayedEventsCount++; - - if (!this.bigChart.chart.options.scales.y2) { - this.bigChart.chart.options.scales.y2 = { - type: "category", - labels: [], - offset: true, - position: "left", - stack: "main", - stackWeight: 0.3, - stepped: true, - grid: { - borderColor: "red" - } - }; - } - - this.bigChart.chart.options.scales.y2.labels.push(event); - - this.bigChart.chart.data.datasets.push(dataset); - - const checkbox = ( document.getElementById(`${handler}-${line}-${type}`)); - checkbox.checked = true; - addModifier(checkbox.parentElement, "checked"); - - this.bigChart.sort(); - this.bigChart.recolor(); - this.bigChart.chart.update(); - } - } - } - }); - } - - removeEvent(handler: string, event: string, type: string): void { - let index = this.displayedEvents[`${handler}::${type}`].indexOf(event); - this.displayedEvents[`${handler}::${type}`].splice(index, 1); - - for (const id in this.bigChart.chart.data.datasets) { - const dataset = this.bigChart.chart.data.datasets[id]; - if (dataset.handler === handler && dataset.label === event && dataset.event && dataset.eventType === type) { - this.displayedEventsCount--; - if (!this.displayedEventsCount) { - delete this.bigChart.chart.options.scales.y2; - } else { - index = this.bigChart.chart.options.scales.y2.labels.indexOf(event); - this.bigChart.chart.options.scales.y2.labels.splice(index, 1); - } - index = this.bigChart.chart.data.datasets.indexOf(dataset); - this.bigChart.chart.data.datasets.splice(index, 1); - this.bigChart.recolor(); - this.bigChart.chart.update(); - } - } - } - - toggleEvent(handler: string, event: string, type: "in" | "out"): void { - const status = ( document.getElementById(`${handler}-${event}-${type}`)).checked; - - if (status) { - this.addEvent(handler, event, type, this.dateSelector.value); - } else { - this.removeEvent(handler, event, type); - } - } - - saveView(): void { - const data: { [name: string]: string | number | { [name: string]: [name: string]}} = {}; - - data.view_id = this.currentViewId; - data.label = ( document.getElementById("view-label")).value; - - const settings: { [name: string]: [name: string]} = {}; - const checkboxes = document.getElementsByClassName("inspector-data-checkbox"); - - for (let i = 0; i < checkboxes.length; i++) { - const checkbox: HTMLInputElement = checkboxes[i]; - if (checkbox.checked) { - const handler = checkbox.dataset.handler; - const attribute = checkbox.dataset.attribute; - if (settings[handler] === undefined) { - settings[handler] = [attribute]; - } else { - settings[handler].push(attribute); - } - } - } - - data.settings = settings; - - const request = new XMLHttpRequest(); - request.open("POST", "/save_chart_view"); - request.setRequestHeader("Content-Type", "application/json"); - request.onload = (): void => { - const data = JSON.parse(request.responseText); - - if (data.status) { - this.currentViewId = data.view_id; - } else { - alert(data.error); - } - - this.displayedCharts = {}; - this.displayedEvents = {}; - this.displayedEventsCount = 0; - }; - - request.send(JSON.stringify(data)); - } - - deleteView(): void { - if (!confirm("Are you sure you want to delete this view?")) { - return; - } - - if (this.currentViewId > -1) { - const request = new XMLHttpRequest(); - request.onload = (): void => { - const data = JSON.parse(request.responseText); - if (!data.status) { - alert(data.error); - } - this.displayedCharts = {}; - }; - request.open("POST", `/delete_chart_view/${this.currentViewId}`); - request.send(); - } else { - this.hide(); - } - } - - changDate(): void { - this.refreshChart(); - } - - show(): void { - removeModifier(this.element, "hidden"); - } - - hide(): void { - addModifier(this.element, "hidden"); - this.displayedCharts = {}; - this.displayedEvents = {}; - this.displayedEventsCount = 0; - } - - showConfigPanel(): void { - this.configPanel.style.display = "unset"; - } - - hideConfigPanel(): void { - this.configPanel.style.display = "none"; - } -} diff --git a/modules/web_server/src/main.ts b/modules/web_server/src/main.ts deleted file mode 100644 index 76f396a..0000000 --- a/modules/web_server/src/main.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Application } from "./Application"; - -(window as any).app = new Application(); diff --git a/modules/web_server/src/utils/DateTime.ts b/modules/web_server/src/utils/DateTime.ts deleted file mode 100644 index bc4dcc2..0000000 --- a/modules/web_server/src/utils/DateTime.ts +++ /dev/null @@ -1,19 +0,0 @@ -export function dateISO(date: Date): string { - return date.toLocaleString("sv").slice(0, 10); -} - -export function dateISOString(dateString?: string): string { - let date = new Date(); - - if (typeof dateString !== "undefined") { - date = new Date(dateString); - } - - return dateISO(date); -} - -export function dateDaysOffset(date: Date, days: number): Date { - const result = new Date(date); - result.setDate(result.getDate() + days); - return result; -} diff --git a/modules/web_server/src/utils/ElementTools.ts b/modules/web_server/src/utils/ElementTools.ts deleted file mode 100644 index 44f7e32..0000000 --- a/modules/web_server/src/utils/ElementTools.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function addModifier(element: HTMLElement, modifier: string): HTMLElement { - const className = element.classList[0]; - const newClass = `${className}--${modifier}`; - if (!element.classList.contains(newClass)) { - element.classList.add(newClass); - } - return element; -} - -export function removeModifier(element: HTMLElement, modifier: string): HTMLElement { - const className = element.classList[0]; - element.classList.remove(`${className}--${modifier}`); - return element; -} diff --git a/modules/web_server/src/utils/URLTools.ts b/modules/web_server/src/utils/URLTools.ts deleted file mode 100644 index 8ffd187..0000000 --- a/modules/web_server/src/utils/URLTools.ts +++ /dev/null @@ -1,27 +0,0 @@ -export function get(url: string, callback: (request: XMLHttpRequest) => void) { - req(url, "GET", callback); -} - -export function post(url: string, callback: (request: XMLHttpRequest) => void, data: Record | FormData = {}, header: "" | "JSON" = "") { - req(url, "POST", callback, data, header); -} - -export function del(url: string, callback: (request: XMLHttpRequest) => void) { - req(url, "DELETE", callback); -} - -export function req(url: string, method: "GET" | "POST" | "DELETE", callback: (request: XMLHttpRequest) => void, data: Record | FormData = {}, header: "" | "JSON" = "") { - const request = new XMLHttpRequest(); - request.onload = () => { - callback(request); - }; - request.open(method, url); - switch (header) { - case "": - request.send(data as FormData); - break; - case "JSON": - request.setRequestHeader("Content-Type", "application/json"); - request.send(JSON.stringify(data)); - } -} diff --git a/modules/web_server/src/widgets/BigChart.ts b/modules/web_server/src/widgets/BigChart.ts deleted file mode 100644 index c2ee89f..0000000 --- a/modules/web_server/src/widgets/BigChart.ts +++ /dev/null @@ -1,129 +0,0 @@ -export class BigChart { - private readonly colors: string[]; - private readonly element: HTMLElement; - private _chart: any; - - constructor(element: HTMLElement, colors: string[]) { - this.colors = colors; - this.element = element; - this.create(); - } - - get chart(): any { - return this._chart; - } - - create(): void { - // @ts-ignore - // eslint-disable-next-line no-undef - this._chart = new Chart(this.element, { // Chart.js library - type: "line", - data: { - datasets: [] - }, - options: { - animation: false, - interaction: { - mode: "nearest", - intersect: false, - axis: "x" - }, - layout: { - padding: 20 - }, - scales: { - x: { - type: "time", - time: { - unit: "hour" - }, - beginAtZero: true - }, - y: { - beginAtZero: true, - stack: "main" - } - }, - plugins: { - zoom: { - zoom: { - wheel: { - enabled: true - }, - pinch: { - enabled: true - }, - mode: "x" - }, - pan: { - enabled: true, - mode: "x" - }, - limits: { - x: { - min: "original", - max: "original" - } - } - }, - tooltip: { - position: "nearest", - callbacks: { - label: function(context: any) { - let label = context.dataset.label || ""; - - if (label) { - label += ": "; - } - if (context.raw.payload) { - label += JSON.stringify(context.raw.payload); - } else { - label += context.parsed.y; - } - return label; - } - } - } - }, - pointRadius: 0, - borderWidth: 1, - spanGaps: 30000000, - responsive: true, - maintainAspectRatio: false - }, - plugins: [{ - id: "toolbarHider", - afterEvent: (chart: any, evt: any, opts: any) => { - const { left, right, bottom, top } = chart.chartArea; - const e = evt.event; - const status = e.x >= left && e.x <= right && e.y <= bottom && e.y >= top; - if (status !== chart.options.plugins.tooltip.enabled) { - chart.options.plugins.tooltip.enabled = status; - chart.update(); - } - } - }] - }); - - this.element.addEventListener("mouseup", (event) => { - if (event.button === 1 || event.button === 2) { - this.chart.resetZoom(); - } - }); - } - - destroy(): void { - this.chart.destroy(); - } - - sort(): void { - this.chart.data.datasets.sort((a: any, b: any) => a.label.localeCompare(b.label)); - } - - recolor(): void { - for (const id in this.chart.data.datasets) { - const dataset = this.chart.data.datasets[id]; - dataset.borderColor = this.colors[parseInt(id) % 5]; - } - } -} diff --git a/modules/web_server/src/widgets/ChartPreview.ts b/modules/web_server/src/widgets/ChartPreview.ts deleted file mode 100644 index a5688ba..0000000 --- a/modules/web_server/src/widgets/ChartPreview.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { dateISOString } from "../utils/DateTime"; -import { get } from "../utils/URLTools"; - -export class ChartPreview { - private readonly colors: string[]; - private element: HTMLElement; - private readonly smartround: number; - private readonly _chart: any; - - constructor(element: HTMLElement, smartround: number, colors: string[]) { - this.colors = colors; - this.element = element; - this.smartround = smartround; - - // @ts-ignore - // eslint-disable-next-line no-undef - this._chart = new Chart(element, { // Chart.js library - type: "line", - data: {}, - options: { - animation: false, - events: [], - scales: { - x: { - type: "time", - time: { - unit: "hour" - }, - display: false, - beginAtZero: true - }, - y: { - display: false - } - }, - plugins: { - legend: { - display: false - }, - tooltip: { - enabled: false, - position: "nearest" - } - }, - pointRadius: 0, - borderWidth: 2, - spanGaps: 30000000, - responsive: true, - maintainAspectRatio: false - } - }); - } - - get chart(): any { - return this._chart; - } - - load(): void { - let query = this.element.dataset.query; - - if (query.slice(-1) === ",") { - query = query.slice(0, -1); - } - - const url = `/api/charts?query=${query}&date_from=${dateISOString()}&smartround=${this.smartround}&cache=yes`; - get(url, (request) => { - if (request.readyState === 4) { - const data = JSON.parse(request.responseText); - - let colorIndex = 0; - - for (const handler in data) { - for (const line in data[handler]) { - if (line.substring(0, 3) === "in:" || line.substring(0, 4) === "out:") { - continue; - } - - const datasetData = []; - - for (let j = 0; j < data[handler][line].timestamps.length; j++) { - datasetData.push({ - x: data[handler][line].timestamps[j] * 1000, - y: data[handler][line].values[j] - }); - } - - this.chart.data.datasets.push({ - label: line, - borderColor: this.colors[colorIndex], - data: datasetData - }); - - this.chart.update(); - - colorIndex = (colorIndex + 1) % 5; - } - } - - this.chart.resize(1, 1); - this.chart.resize(); - } - }); - } -} diff --git a/modules/web_server/src/widgets/Dialog.ts b/modules/web_server/src/widgets/Dialog.ts deleted file mode 100644 index 5de4743..0000000 --- a/modules/web_server/src/widgets/Dialog.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { post } from "../utils/URLTools"; -import { addModifier, removeModifier } from "../utils/ElementTools"; - -export class Dialog { - private readonly element: HTMLElement; - private readonly dialog: HTMLElement; - - constructor(id: string) { - this.element = document.getElementById(id); - this.dialog = this.element.getElementsByTagName("dialog")[0]; - - this.dialog.addEventListener("click", (e) => { - e.stopPropagation(); - }); - } - - load(dialogName: string, data: Record = {}): void { - post(`/dialog/${dialogName}`, (request) => { - this.dialog.innerHTML = request.responseText; - this.show(); - }, data, "JSON"); - } - - show(): void { - this.dialog.scrollTo(0, 0); - removeModifier(this.element, "hidden"); - } - - send(url:string): void { - post(url, (request) => { - this.hide(); - const json = JSON.parse(request.response); - if (json.status === "error") { - (window as any).app.notifications.addNotification(json.title ? json.title : "Error", json.message, "error"); - } - }, new FormData(this.form())); - } - - hide(): void { - addModifier(this.element, "hidden"); - } - - form(): HTMLFormElement { - return this.element.querySelector("form"); - } -} diff --git a/modules/web_server/src/widgets/GifLoader.ts b/modules/web_server/src/widgets/GifLoader.ts deleted file mode 100644 index 0e26bf3..0000000 --- a/modules/web_server/src/widgets/GifLoader.ts +++ /dev/null @@ -1,57 +0,0 @@ -export class GifLoader { - private _autoHide: boolean; - private readonly _element: HTMLElement; - private readonly _gifElement: HTMLImageElement; - - get autoHide(): boolean { - return this._autoHide; - } - - set autoHide(state: boolean) { - this._autoHide = state; - } - - get gifSrc(): string { - return this._gifElement.src; - } - - set gifSrc(src: string) { - this._gifElement.src = src; - } - - constructor() { - this.autoHide = true; - - this._element = document.createElement("div"); - this._element.id = "loader"; - this._element.classList.add("loader_hidden"); - - this._gifElement = document.createElement("img"); - this.gifSrc = "src/images/hex-loader.gif"; - this._gifElement.alt = "Loading..."; - - this._element.appendChild(this._gifElement); - document.body.appendChild(this._element); - document.body.classList.add("preload"); - - window.addEventListener("load", () => { - this._doAutoHide(); - }); - } - - show(): void { - document.body.classList.add("preload"); - this._element.classList.remove("loader_hidden"); - } - - hide(): void { - document.body.classList.remove("preload"); - this._element.classList.add("loader_hidden"); - } - - _doAutoHide(): void { - if (this.autoHide) { - this.hide(); - } - } -} diff --git a/modules/web_server/src/widgets/Menu.ts b/modules/web_server/src/widgets/Menu.ts deleted file mode 100644 index 7d5cb48..0000000 --- a/modules/web_server/src/widgets/Menu.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Page } from "./Page"; -import { addModifier, removeModifier } from "../utils/ElementTools"; - -export class Menu { - private element: HTMLElement; - private readonly _page: Page; - private buttons: HTMLCollectionOf; - - constructor(id: string, colors: string[]) { - this.element = document.getElementById(id); - this._page = new Page("content-container", colors); - this.buttons = document.getElementsByClassName("navbar-item"); - - this.bindEventListeners(); - } - - get page(): Page { - return this._page; - } - - bindEventListeners(): void { - for (let i = 0; i < this.buttons.length; i++) { - this.buttons[i].addEventListener("click", (event) => { - this.click( event.currentTarget); - }); - } - } - - buttonFocus(button: HTMLElement): void { - addModifier(button, "active"); - } - - selectPage(name: string, callback: () => void = () => { /* */ }): void { - const button = document.getElementById(`menu-item-${name}`); - this.click(button, callback); - } - - click(button: HTMLElement, callback: () => void = () => { /* */ }): void { - if (window.innerWidth < 900) { - (window as any).app.loader.show(); - } - const pageName = button.id.split("-")[2]; - this.page.load(pageName, callback); - this.scrollUp(); - this.page.scrollUp(); - this.hide(); - - for (let i = 0; i < this.buttons.length; i++) { - removeModifier( this.buttons[i], "active"); - } - - this.buttonFocus(button); - } - - hide(): void { - removeModifier(this.element, "visible"); - } - - show(): void { - addModifier(this.element, "visible"); - } - - scrollUp(): void { - this.element.scrollTo(0, 0); - } -} diff --git a/modules/web_server/src/widgets/Notifications.ts b/modules/web_server/src/widgets/Notifications.ts deleted file mode 100644 index 1a18845..0000000 --- a/modules/web_server/src/widgets/Notifications.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { addModifier, removeModifier } from "../utils/ElementTools"; - -export class Notifications { - private element: HTMLElement; - private notifications: HTMLElement; - private button: HTMLElement; - - constructor(id: string) { - this.element = document.getElementById(`${id}-wrapper`); - this.notifications = document.getElementById(`${id}-items`); - this.button = document.getElementById(`${id}-button`); - document.addEventListener("click", () => { - this.hide(); - }); - - this.button.addEventListener("click", (e) => { - e.stopPropagation(); - }); - - this.element.addEventListener("click", (e) => { - e.stopPropagation(); - }); - } - - show(): void { - addModifier(this.element, "visible"); - } - - hide(): void { - removeModifier(this.element, "visible"); - } - - addNotification(titleText: string, messageText: string, type: string): void { - const notif = document.createElement("div"); - const baseClass = "notification-item"; - notif.classList.add(baseClass); - addModifier(notif, type); - addModifier(notif, "active"); - - const icon = document.createElement("div"); - icon.classList.add(`${baseClass}__icon`); - addModifier(icon, type); - - const title = document.createElement("h3"); - title.classList.add(`${baseClass}__title`); - title.innerHTML = titleText; - - const description = document.createElement("p"); - description.classList.add(`${baseClass}__description`); - description.innerHTML = messageText; - - const close = document.createElement("span"); - close.classList.add(`${baseClass}__close-button`); - close.addEventListener("click", () => { - this.closeNotification(notif); - }); - - notif.appendChild(icon); - notif.appendChild(title); - notif.appendChild(description); - notif.appendChild(close); - - this.notifications.prepend(notif); - - setTimeout(() => { - removeModifier(notif, "active"); - }, 3000); - - this.updateNotificationCount(); - } - - closeNotification(notification: HTMLElement): void { - addModifier(notification, "removed"); - removeModifier(notification, "active"); - setTimeout(() => { - notification.remove(); - this.updateNotificationCount(); - }, 300); - } - - updateNotificationCount(): void { - const count = this.notifications.childElementCount; - this.button.innerHTML = count ? `${count}` : ""; - - if (count > 0) { - addModifier(this.button, "active"); - } else { - removeModifier(this.button, "active"); - this.hide(); - } - } -} diff --git a/modules/web_server/src/widgets/Page.ts b/modules/web_server/src/widgets/Page.ts deleted file mode 100644 index 3a53e7b..0000000 --- a/modules/web_server/src/widgets/Page.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { ChartPreview } from "./ChartPreview"; -import { post } from "../utils/URLTools"; - -export class Page { - private readonly colors: string[]; - private element: HTMLElement; - private readonly chartElements: HTMLCollectionOf; - private _currentPage: string; - private readonly config: Record; - private savedCharts: any; - - constructor(id: string, colors: string[]) { - this.element = document.getElementById(id); - this.chartElements = document.getElementsByClassName("chart"); - this.config = {}; - this.savedCharts = []; - this.colors = colors; - } - - get currentPage(): string { - return this._currentPage; - } - - set currentPage(pageName: string) { - this._currentPage = pageName; - } - - private setContent(content: string): void { - this.element.innerHTML = content; - } - - setConfigArgument(name: string, value: string | number | boolean): void { - this.config[name] = value; - } - - load(pageName: string, callback: () => void = () => { /* */ }): void { - this.currentPage = pageName; - - post(`/${pageName}`, (request) => { - this.setContent(request.responseText); - this.setConfigArgument("action-routine-log", undefined); - window.history.replaceState(pageName, pageName, `/${pageName}`); - if (document.getElementById(pageName).onload) { - document.getElementById(pageName).onload(undefined); - } - callback(); - (window as any).app.loader.hide(); - }, this.config, "JSON"); - } - - refresh(): void { - this.load(this.currentPage); - } - - scrollUp(): void { - this.element.scrollTo(0, 0); - } - - displayCharts(smartround: number): void { - this.destroyCharts(); - - for (let i = 0; i < this.chartElements.length; i++) { - const element = this.chartElements[i]; - - const myChart = new ChartPreview(element, smartround, this.colors); - this.savedCharts.push(myChart); - myChart.load(); - } - } - - destroyCharts(): void { - for (let i = 0; i < this.savedCharts.length; i++) { - this.savedCharts[i].chart.destroy(); - } - } -} diff --git a/modules/web_server/static/GifLoader.js/LICENSE b/modules/web_server/static/GifLoader.js/LICENSE deleted file mode 100644 index f288702..0000000 --- a/modules/web_server/static/GifLoader.js/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/modules/web_server/static/GifLoader.js/README.md b/modules/web_server/static/GifLoader.js/README.md deleted file mode 100644 index 62b3b16..0000000 --- a/modules/web_server/static/GifLoader.js/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# GifLoader.js - -Simple library in pure JavaScript to display an automatic loader component while the HTML page is loading. - -![Loader](src/images/hex-loader.gif) - -### Usage - -Include `loader.css` and `loader.js` files in your HTML: - -```html - - -``` - -Everything is automatic, just create new class instance in HTML ``: - -```html - -``` - -Loader constructor takes two arguments: `new Loader(imageUrl, autoHide)` - -In the first argument, you can specify your own image. In the second argument, -you can set if loader should automatically hide when the page is fully loaded. - -You can hide loader manually: - -```html - -``` \ No newline at end of file diff --git a/modules/web_server/static/GifLoader.js/example.html b/modules/web_server/static/GifLoader.js/example.html deleted file mode 100644 index 80417a3..0000000 --- a/modules/web_server/static/GifLoader.js/example.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - Title - - - - - wallpaper - - - - \ No newline at end of file diff --git a/modules/web_server/static/GifLoader.js/src/css/GifLoader.css b/modules/web_server/static/GifLoader.js/src/css/GifLoader.css deleted file mode 100644 index f7f3c80..0000000 --- a/modules/web_server/static/GifLoader.js/src/css/GifLoader.css +++ /dev/null @@ -1,38 +0,0 @@ -.preload, .preload * { - overflow: hidden; - transition: none !important; - -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; -} - -#loader { - position: fixed; - display: flex; - width: 100vw; - height: 100vh; - top: 0; - left: 0; - background: white; - z-index: 5000; - overflow: hidden; - transition: opacity 0.8s cubic-bezier(0.62, 1.71, 1, 1.64), margin-top 0.3s step-start; - transition-timing-function: cubic-bezier(0.62, 1.71, 1, 1.64), steps(1, start); - opacity: 1; -} -#loader img { - margin: auto; - max-width: 100px; - transition: transform 0.2s cubic-bezier(0.5, -0.7, 0.6, 1); -} - -.loader_hidden { - opacity: 0 !important; - margin-top: -1000%; - transition-timing-function: cubic-bezier(0.62, 1.71, 1, 1.64), step-end !important; -} -.loader_hidden img { - transform: scale(0); -} - -/*# sourceMappingURL=GifLoader.css.map */ diff --git a/modules/web_server/static/GifLoader.js/src/css/GifLoader.css.map b/modules/web_server/static/GifLoader.js/src/css/GifLoader.css.map deleted file mode 100644 index 6d52ada..0000000 --- a/modules/web_server/static/GifLoader.js/src/css/GifLoader.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["GifLoader.sass"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAEJ;EACE;EACA;EACA;;AAEA;EACE","file":"GifLoader.css"} \ No newline at end of file diff --git a/modules/web_server/static/GifLoader.js/src/css/GifLoader.sass b/modules/web_server/static/GifLoader.js/src/css/GifLoader.sass deleted file mode 100644 index ba8b0fc..0000000 --- a/modules/web_server/static/GifLoader.js/src/css/GifLoader.sass +++ /dev/null @@ -1,33 +0,0 @@ -.preload, .preload * - transition: none !important - overflow: hidden - -webkit-transition: none !important - -moz-transition: none !important - -o-transition: none !important - -#loader - display: flex - position: fixed - top: 0 - left: 0 - width: 100vw - height: 100vh - transition: opacity 0.8s cubic-bezier(0.62, 1.71, 1, 1.64), margin-top 0.3s step-start - transition-timing-function: cubic-bezier(0.62, 1.71, 1, 1.64), steps(1, start) - background: #fff - opacity: 1 - overflow: hidden - z-index: 5000 - - img - max-width: 100px - margin: auto - transition: transform 0.2s cubic-bezier(.5,-.7,.6,1) - -.loader_hidden - margin-top: -1000% - transition-timing-function: cubic-bezier(0.62, 1.71, 1, 1.64), step-end !important - opacity: 0 !important - - img - transform: scale(0) diff --git a/modules/web_server/static/GifLoader.js/src/images/hex-loader.gif b/modules/web_server/static/GifLoader.js/src/images/hex-loader.gif deleted file mode 100644 index 54f4649c0f82aa7a2408aeeb6663fbce0dc96c5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399788 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 RCEt!Uj1zC6q8~Hl{{fVN-(dg% diff --git a/modules/web_server/static/images/icons/actions.png b/modules/web_server/static/images/icons/actions.png deleted file mode 100644 index d72a6fd27f2f620a7c4dc75ae353384f8ce0965b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33010 zcmeFYWmH_MfocXwzSg1dWgcMt9o2$BGS;10pvf)fHHxCFbr@80K} zy~lU|oH4%pZ}%8IdaYSiPgOm$=3Hxyt`(!MDu;neiV6S#FcjpaH30zF*F#tUGW_e0 zsVliF0Kin^r>*ayY2giYadWn|b$|jrd|jYGsE@5R0N}G){@&J$yxlG01wvp7i=CYn zc254gXZ+S%qimgY)4rAMle||oGaiccIyH9ko0sdtr6;6rzqkX<`VUu{!rhu`8;D{& zFZaBgOIvdff1bv>OrMTCZ+AK3vq0Z>4>=6)1F*g~1e^Uh_9uQ!e{n1R-1Thv{757c zxY70GRy^exI3Im=`TRxw<%@dDlv#KKTKp8`e%9#em}cVgzN?$6CGc4wu<`o(a|8d& zpO+}Z`FP+EhyexXWos|W>I~Ax%+~4pVb{L_6rjH)!oiaY-Oq;%IW@1Vo+}2 zQ@eNTLqSd@aW&_{{&8^^)&A4K1AXiChdjvJLA_@yc8%}9Cx6Rob4Xe|>@#%h{pi)N zC(~TE2q&9-=<2hK9!+c>!?GUV@oyZo+t8i=L-&NaWOw2!cfrJ-DRNQsM6Be~dK&cV zWGLTz>jPn1w&WJoi`UB)+$}SK`1G)3X1Fwh zYW=NAvy8j((mf`p{{<)!fJWg9Ie1_|lG-pMGLLQZwC1F4f~_-*7EIr&HNXgsabTS` z{~`_$|M+WCuLzPJ zWq{vVB)H<6z}$pWrh!dfV4}=jUCRY?ZT;szq-$R5Tf^)fzdk=uGLTCim8Gc(UboCm zwS})H{Hn-vZomG#_WQ2U&TRb8+V9|xcH8y~Cm+%`^@Hn38y5cr#sCFI4Y>)?2~p~N z7I3krD|j#2%B&0pKji$D)wO~o8`ysi(~T!kX3+22_CI|esH@F#`(ntiH>Y-N{j!wd zZulj*&8@p(tx(r7E^^VRQH{_}Gm!S-?qM$S6Lr(WX~)C!_Ip$x6EWf$M9&bJ#in%< zMY9fr_I;kF@^GD7)He-qW1sNWNce8OyjSRx4w{4l>?=>KbiKeIKdyd=!6DG4|NQyR z%Q>GQx!&H!rHSrWUef+A{cCNQZ}w3g9!&;74B1w0|J$f>3MpH3M4sPPfXgP#?Ss$m z2K*G=#1d{8m?m|CW+r-xe-W?le z+gAp$Q4ns2*SCLaJFJ;-A&DAJ8b8EKCLKW2I$WaWWF=_qTZOAifIpWV#9j!}`&A%w zBc8D*y?Z^cD=+|!9C4l+uvs)amt70X%O{X^nru_OthGw!z%`Yr_4z4a?!JJnddSrr zJmliJ(y8`kZUS#*K>sjmenY_ZARsSk_;xhBNj9i(cKEbw5x>SPi@}jvUyxzblR@h{ zZ;i`nTX8pClTl6wc1Q%eQQZK=FjW&{1|j_(0TwaXnGa<3t+Sq^^}5ZnU0J4!>9YQP zu91tOc5MB+fzePqq6QTb4*33MH2fxe3^Q&(=#=f3rRdrRXZ0e<5&k!+?q}NanyJ66 zXnU_dsAXDbr0q~Ty2j~PGDO|;{oM55^u+J0ogWXc^GJdqmQX+xr1EKb`g8rlZA(+q z%gpExYRWtGi{3`8IQVw5N&%nmegy??-~OIBLutJbP#%SKnbbGA)XP4foc(5U=~fri z?S3_`m=gKLUqoq)w#%xfZU&=bf)(b>-WJYS_o1MS6@|xII!9bC?f#pm(LQe0Bjqy> zJEN`h=E^wMAD0BaOq> z0nr$x)GtLY4eO$U%Bruf*M6I2>*dIsctHC2z*8>-V-Kzc7VYQ54KLig2>b&)@O6Hh zCwt=uNz;^Ko#(yDF369Z_X1^yt7+k&#B6a~TX*nUdBxh45bqYUJPzl>NBKsW_$-Z( zHC7Es4FJ0@jcSsw>Fi6RJC%R=@~z+UBm&F87FNyg`M~su;^w!s>~ljR#S}Zf-%X2a z1zU@$(~LCUYxdfCJh%AS7nDxA+?a0d-mL-QK&vJ*Y)<%?cfJ>PAp^=3>pwep!&i3< z*6CWlwwQ`=bsbzvg$Wxtzd=nAikIu4#Xr-40VtVpQdP=XrHRGYIfZ0hMReJ0HrDlN zt5yl}RTP%PQAun;osu=jBOT!l3(fb*X8B+pGvQrjyG|3y%{87##7U8BUnU=f4gxf` zpV=KQsLlJ|hx6?9T8T5e%W{P>DEQXlTqsY^jNnpkOd6ooDTtH&Argi~7*5#crYiCh zzQvqHOBVJ{L;e9A(&t?@&Vo3pUVTcj#?s6xC$;$X1}J3`K912x@GMP_?TZniSAw?V?7n)}f{f(`G_Z^9zlT>DXB_oS_R+%)-^zdKs`3qbb2_?M90jlduKdK|Yx} zU#_~tbCt*6t_&TNsA;Lou=q4hz0aCS#oI?ii{F=8$#gw|ywUWd5un-eA)yVlF~|0p z@DsMmRakkwX*ju#zADu$aV_%eNS99vM{-AK6M|J#D#K1ZJVl=~4>Gg)8T;FcN6JHX z*ur-L?=Jcf)sHi4%n^!g8Oi+y=^{CMMv;U4yH2VI==w5Mc7o+(hf24Z#E~sYJ7QJ} z-~{molVb!zl6$A4|M=7pQWa*2+GrwW3B!o+|0Bdx~Om7XV*su z1Ix|yJr9R7nRk{7!F4IM%z_?0#W=d!FcP168P{Dj9+_Z_n~+J!BU8?Z`{vVri^BaR zc7WgmIE@my4-|%iD3zl6BcP7k%~hU@2J*X#c4V9n8A#pQ%hV_DZs3hzv^&C&>!JIl zFm2q8z=~d7)pF?9ubdnuoGvub3jAzj5kE1uH^xUg_PcNP5`?#%e16>PE>%NWB zBCgm|W?9Q?`0lG-+mG|a(|yT6ijEePL#{Cq1*ga+?W5xqKY~{v%mL?c4tp- z!&VN@vlRJaP!-oaeko$IB5|mVtFcG zppmL?{HnOnv%M1Uc|yR*R=6WsXNV+AaqMyHRUw#-IL@PfZ1@)EyJHaHypjEYeHp(( z5m^IDfbLxf9ETgxxIo=w=&?zX#+u)Kc1`QG5_64atn&AgJ-mOcNkD@h1W-jFX|Oq2 zBJ|n?mDVAiBvuT#BKvEEXa*2OyvU=Rx_&ip=L8WXp}=RulOO3Hg{ob`{n&@Dq0Wpk zqFA-7niU|9h@;ai!_*6m&=7v|N*~Vr1k(j{N$0;OH?yWss9bS4m!t1dv1LNNp3Xgq{uDT! z$Zdl-dCHZsCpsbV*~iij^qc$rP)2r03T~tC2xbPT(Mz8s`!kXU6W)(f0d7(Q<)0tp z<2+0oWTgQWS6M1l`s63lJpFLBf48Y1R#Q;41qZlmkX((ohO(;9kS5h zMt`K^NF9n6V8>4mvUT^CL8%Q4eE!RF}gqV$R*SD z^393=;TTv~FWFmUQ7hOc(9vn*z?pYhj2G^gCT10U2$y4P@@m4CMp~W)-HG2gHFYVH zhm0aS%jTHk!bV0JY$3){&< zjav(Lg}!QfQbe@! z)LG(S;FLt4QR8#+z`OG36M=~Fm7)jBB|EIL#?`rziS;Z*;w;{xEH%JfqN{j#>YP~D zHH(t|5_W*?AU#6LI2c!!UM9Uzm1;SVf z<6sVloFmest8X5@A*$3k#4Q03KyEnFprh+V)sT?DOAxHdjOZKQ?8#KOY1VqEk>(2m zQ%85{nP)U8qfCHG2Tok8!<^pZP-enOx-q@ss8gow&6#-DF`F|&++%8xw60B3{gJtB zSEd*tLm%?3ymkcD7QYVS^6rhPhTZU5s+9)=I~vG52V}La3Ur6BqMculc<%ES4rWWUsR(#grH^ zW+WeRKHZ*KM{IPnLLw&0Hgs!-8{UsXswNgI3`WC9b%$@ua>ZSo+1qRf_5Sx2w(yNc zV5hj`k@@qeOkLL_)gMAmKfmbY2$^PcVnfYu6odj))zJ|^&UdL7R>%MzXeTxDR4A%% z3+!!{gmHh~<0b-EH)X{4Y)+rA)*$XryDl0!*f`j>}dN00l2y_ewuQG?EZQO?G^!86eGmxamK7g1Bjs2z|3m^-AI95jl9#Pd(W8yR|n^&)bvsPW-E$^z@N>J z8ha_Gx7T&~$6`?~J5>O!`LoV~LK%_9T2H@r4DJ;7nf%xh|n(iP)6-V{FY{W#iy zB*c@-S)xq#a}wKB7cZ5tiQlun(9s!?38y-&lv2rH&#^Xf~cz48F(t2j{Zq&Khg0!fKOPLVQMg}w!`#U*F+yhwl z9d{UFEtHK^Jkq$b(b?|^a44?kt%)BMfRY`+_9n`M|B%)h%if^Cm?4E zA!fAW+0kWRv_Eu~{DhID5r`?3BE75jGaVWNV9teMs`tz!;l$XlUK?#YdT>5pYvD+u z_p$7eHivkpPv2xGlwt5Ln3l%74j^XxP`c9bNT~(!akwOUN>~4!y4miF#RcII_J2qi z(=2NzYim}ZGG>I>GJ8bmeSloKz^||L7{K!pI-~>&M2Z-j)^e7*m{^{C9GTq1EVyX; zs2n!I!R3vmqdMXULLKafM?zFs1i_w&D`T>yx6s8gqqq54F%Jy2^n)GE`L-dmxc9L*;4Ytej zZ7u3VI6|b-YNjn0gy_7cgmh$Z;aTVC9#lHxNAoA2ijYEJ&RZY;0OILOJdcfKprc6Y zR$3(suPiFESMP!lJf=SDG>rkpdo-;Z#WXdtV?WC#gSygpkVFJG}zS#iD8ADrVXkRqlJ^!dV#IKR#TSe+C@Dh7K)aPXY`mhWd@AE zGsY(6z&PK#WR1YRr9q9PWltRVf=1v1BYZ|%i^`dK%N6)*4A z&pW}_@X2hfYrR0;if?*-nI6Hj4SlDpCQ)$q7__oF-=p1VCyQbiiD%&k_*dVBEK)X% zMKiKcMjqAf1x`dn*Z`$ArRkiq!_l%(;|Ew&v^S32o%R`--!kxUh*})>ZQU;ZYBY^2 zBOs0pT@u~2XdjEJXv-7EFwZCNRrO1ab?$~qWY!vU@O2|RlWX=1-=WUN<%7wooTa)s<}T=AXRVkjb``ZO*Sv63 zN1L7qbs!#1qow*bY=CPP53L)S{G;am6fP;;uQ5EN(jxeZF(xuWJgr}CO@dJp2VOci zlF=oKQ>iQ6g}%gQ>8aYE>Bn(}$Vh4nQgG4aW3sI?gn?o6?55eUIHMq|BWGOvbZhp7 z*fRhEg=D?%2qK;VHBp1cxjeKcKMw?ijG^N{ZIN{(1Un0STT?s9lqm`oRLCvg5NO z9KEP!3&sXREEU^ii&{U_IYd0K00kFujn@Ojv^k)s%x{Vrt4W14hKfp2>!>9LgJWq| zxE<_<=|n@(F6(b3kuZa0OO|)n2}{0Le85FdZL#f3D8;d>GA~S0%kH|g>9|8!zQ@;RgOBDSme6qyHa>0#+>wlW31*Uj76?sHlG!c}1I1Mb zq*dB;uKJC(2+x&ODi}i|`dEwYl+(eKM8LZsis4B+Tm5<&?Nplow2LZZMc!+vyvbED zTGKOb3=#AC3jrBrt%M8t!oE&PurXY56(7(2a@qkZXXlVBm1E*aNS6N+{b%)6vw5=* z4enJx=JaOFka14uKbM#Vat0_Q@ovSn-5$$ck zb~%GsZfN4#UDXi~@xw)IK0*A83L6o96_ozCnc4tTfLiT~p@-PRNwnt(MS!OMmHUEB zql8PRyuPL#qqf_bubxcI>4R_MfsPaaWxrC@Hg)u`u=R19oC5ncW-B@ zht&Y~QU9mN#UHT*yMUV}_E>cDt54!jb?Pn@BcTU$EW$ff52&+H4{-#fGGjD-y1LG{ z&mRKi{UaQUVKCE{a~F52F#S{t;d@z6)Sm~)N)rwA9qL2Udc8}uD=NG`i!b}}&W;jD&g#vH*Cw?Dwv%4nkfRX&fl`Gx$MIpxv)qdI z66?Gt!s`os9$dP*1=YBVw&jumjQFQCjE3&`HU5l6VlV31Qo~RD1;i*=lT{L$d6!E$ zohtY|5Kj%lY#jn${qv+YNH6>OoB23I(k1|@J2jY;R!_=eQM~>LnLGW9jcJQ_w*rUO zLb6dU6Cniy^)gh3VF;6HK5Kv!cdvQuem5E|jqRe(1z3Yd9JMn5k*SS#lPwP9BA|^! zPo&kF#>{aNQf;dKMYy25<{|7)w~WH;fZQplLzeRfT(8!l2-#b{Tq4s`Kl7n&Y4B01 zqmcQ6)IVGUu1+vY+wQ$(rCta$}O>L8ZaCTTCDG&Mt2)AXL;OMuc0)|<&qUfSW7VaFoSt|huH3|UkPXO#UBaO3-V|(R6PpceZ-g04wz`Z zy=2Df9>i7d=?eEwyh%^yl^PwwsHflMr8gU&I&k;TzJwHIEE zB>}=0h;~{O#D8jYhYo4O%4p~LjHxAe@RTqI$d#jj;M zsgYfBiIfajg{U(8To+0!O=u|Wt{tK|M#qv;2=knR7Zc7qGr`uBm@H;!ti$Lic&ZFz zsteNRUck;I1s6*%AZUMt&6%+NH9cs=lZI|Z z#1z&!MV5VDem)v{SMv$(q{{(Qmv>~sDYx!j02nqS=slS} z7VuNL>6^u4wdlR@8*&R#{JFK`&BmIcVUXjtq7MHTglmJ`^$HqZ}6H>^+^j>(s{7xyEwJ@$LF?dlk`b)JlYJGHj@ODO}2LiEFKnS~Cg<&$5 zooZ<3j!r5W(5rcPELYWgFSaxJ-c1vf3h= zTzyV`mXhKN4|zBVAELiOd1A~;t*Y;Xdiv^g4bupEh;B6{k^-)pqX$$UmT<>$)WbNYsn7Iev>OKwfNOiYBik zv7G?iyJ&Z;ac098@ol1r7=RFJN?P9V@Espbjs=+esFs<#r4!ZnK}7}UNoLUAyr_xuDenys|m z`~LIjWF-#FMK8IBFf3BrYJ(-$6Fvay?5+PnQ+5p*C*y3f35C6O|HU z40_?Ko-{m?1V65r;))oCqKPkg?{d%id|ELBOJ(QH0SG$hBIE=x0_aVAFXAS=_k^B4 zwdZE_q;+!CJFRh_bbC$TX{snJ*U6{WoZHzZ5uh|{*SxVayfLf@n>mDQ&?AvvKn(hG zqCgM|Tf!)nrjPt-;z1?7q(>q^l0E#)PAVuBp7L25yPC~WVX<~iY@i(1GXx1)mjM3{ zE9O)Yp}S)}7H-c;jTy!bB148n@VaM!jo>>{*l2lA9_pk9y#_!uw)nz=oHh}kJ=%A8 zEBW=V+5yu3HOhRTKdlXvP!}b-vZ}ff!#ZsD#_(8cn(t=zN#k-^&=Z3R83bR^)j~4O zpT#-XMGOYH7kH+Qxe%yULKjeAcw(z{Fk%~)ZwS?OsVmCr?L0uPv0;nWQ{(k8T z+Nvv9>5(OS>Z?&CRoqqu0!eYzP%0INf>rk$gPweg5r*NTB`PDQ8>==Wk1;;z;ujAV z_1g)@VS1#1-c<5$n;6L`!)BUzb|f%_RTTG@!)B=PzD<)%t*5OWJ5e64GSIo$TxY9m z$~7OZEJcLZ$|1#0`y%UE5*R{+J?N!7oJ~r^(IO?3_MY?Zji@d~@ARLPNj))APNu*J z7Bed@>eQ6aqT{)pKQAO(s*kaz;WG^88AP!#=Zam4qbD6!$B-M** z6GH^Pn2%<8Fuz#1+CC4+35~jX8h;!&K4>s00&(eUrP=m;ih>`Hwt}{tNx8& zU~P<<@8XGbtr{QQO_ws=@UwYo&LjL-BlN=2J?)EKbu7*{&aIgoFF8?~t>n#DFP8il zE{cZTM*8#cuM56H%hF`F4EXCpT`HW&nCmsU4uN?)dif+)$);)VpSFYzS-nrqRQtgm z*H7EFNwl;=8YE~%SQ$$ku<{YgNZe{n7vT;M+FUbTcB1o(94uwllET=6hWJ1+@7`Ji znA);S;N)gwTUp=pC9?{Yj1If4aUT4n8dXK`gjJxxB~xxpaUMWcpm8lqVaKUM@{uH$ zHs5Gj?&*H;Sb&87<%bo2$q9W1JyJAHOT3WMcBf(Q9Zctgg?B^lDHhE>1Stb((jQN)KjA7osxH003$W z=GXsX;kNqchk)V86FVJ6G~y^A>+|y{6^45T(fRoehCdC--PN);f$FwHhZqY&H#bJ~ zN{&b@M6Ij$U>6RG`!k6me{IE) zS0AB9N)t-Wfh}X?FT`$p=e_`5kkog4TUl@>DeFS!S)@|_Ec@9FPHna(o;O_1nwDT@DV(|HT=J@uB*w#zO z+h8Pkx`ai^%PYv4nDT69v@&~`93rcog(+U_@pTm2_7W>R6QJ|`@K|(6GVuD-`a@$$ zwtDY<9`k|OiGo|{rgDTcFHAPZz^FRf@orb?WNA?|*H1k7oKXB>scn;Ky;D!7_t~BT zat!Z=rp3O7kRl5{-y`Sd#$2t;xOx9Hs(}sRx35aCyKK$n+3q3I-4#W#It?b9j^EOg znpd}}jP=#faY2#`0j)p^)Lz>RR(C|s4d1}Z$~a!H@Hm3!3FBKdk#J$9=rm~ubinYT zNDb5&HAo-lN2?R>uMNsW71O?DlIj%_NWNc)44x;5be(g(dhZGbj~2DRe0$SqxvK-R z_(}RHZ=od*QJ*GPIE1*idL?dJI{ZAQ)`U3~gN5+=_evG2;Isqw^};sEsbs}M80LDH zJCTZ;K#uHck=kUBb|QKds-UTWZzTWjj!-WVezYvdJsy^|9BNk$#%nW{&8?vh@f5u07{^ zZtRRN- zlAM(^6_HcGW>(C6+esucl9JV``O9){-9K`qMf02f$IJ>la?`BHrdlL$44pN2KHdA; zS@R1PZ(2@A-_F;ARG68au9wihv9S;dBA3kVq{rQpM-iR02PZ{!2QfG;K&!O`a|N+U zv45;a;m&mhzg1A7t}*Be7Dav%h#aodeOf~&Ua5v0!An2$$Qt*MY^kkYjqT)rG0uZa zs%G1)nVVNfWci$ElVfVLt~YKmmC7vOxTP#>1UD{(ol1FCc$AD-#!3&WZg?~wQ)b{a z)MS8DRC}}7$Vzd)YB#8=m!SLMM`7c%sQ;~r(D9e_`PuaH>9n6)%)Wa`?s)?!IkH?? zW6fO`jHv8OqS`%jdCk8{OTXg4sbV7y5poeS`NvMc{-oq~GFB`x-$)>Uy?A3^+pKQ` z>}05?-^H2`^g0)>28OZJ6k44ldxI+VcWtmHT^HN3p@<8?#t?-W6}c6m zUgGcUG?`QX+f#?5LV59@M?US<7)D&JmycRVn^7DJ5iB~f&52so4VtIV#)!0lfuAC1 z^6q^cPhs3H>j{+hFyUFHcuMX^`XoTW$#Wni^-`#+KA7dC8|KuiaW*n+Obq~lp|O>c zQdf|Y`me6d*Iv!{`N@rn{p$FU-O`Pk^D?g3QNVfxqBrf@5kT$e#&-)$Dw?eHU|Oa@ z{xg*;3nAopNn3D?0uSGRY?%{skUuB&3%&&ZMp#qmYcXCAC8QR7FN zpFJbjO6dnj-grtaUi@z5o$xr$3GO;a`?#vEK$1J^@Y?)JYWv#cs;{Cf1aWp`x3F@y zgtGfMy1X{Q0sz8dJ}wpzd#DG{5^7`XBm(-~(G3FHT8V)4cvU!6T%@3HZRP#kpjv*a z+7Lf`h@cfnOcYhvN9Yy65$a(9^l@}>au@Ou0sW0D^m_c)Fb4?uw~B|o2uNQ=9Vq4O z1_ko4^RRQW$@tiMae+ipfx>Q9)&-)BFYT4-9FjJH*Y_#lzOw3HTSLg{8BnhX@GtDhK{o ze2y+ED*p}de-JLz% zAW#`EsFMfHzd~3+{@dQg)6L=UbgUp8PzR{vtE&5}SMa~Nlv7Yq|8I-GD6p}0botxr zmF$1h^su%5AF}=}w!b8Qr}M9YyqfBBpioXI7y{)3bMbQh3xt}R?Q2z9 zIQ(l=e?eKjLRkn1fT5h6d~9GaKQ|i>m`~s}8XoW~D3=9~H9tQOH#g7UP*xBjS!Xv# zi`VJ2b+oX7a=19z{4My4a3KkG1rZPzJLmt5s5@AASic&GfRt^WJbnI0pl$02)$*|T zi%l>e503yhA0Iat4-X$7FZh3ybfIqUua)>0CYY0*OW<$GU(+J=n#?P)7Jt?0E5P65 zuek_Gxj`*FoZYmYogG9#e}x46%kuB?1`7XUQsiyjUp0LHs`!7_ycX2;A7}qq0uHu+ zi-5qt%T~w&@((BO7G6-Rza72W{X+zKYvE)AeO=%GEU5n)xBb6N78f@kmo+DZhmD)p z(wdEjpNF5#f{)vZjTa2I<_GhFxw*mo|BmkNZ0+G~;RcnkdCl}So7V#RI~yS5-&8XF zySDdR=wCc>zOHRfE;cZaHkeC@lUs!T2?rIMU9;Q1{2k?Hje#YNu0 z9ROgb`RfbgQ!eK9I*8<wR$CFGd`Tzg`0SeL*+CHnN`JN#<3#&uH$I4)I zDeo*`LI^S=y*yfUG$Smc-(a7;>G4k+>TG&k{K+=XJNfHyuAsP+#Bozr_co{G18#n~%M}XfJDw8GY9UF|2dNrk)lo34k z14Q{Spy)k4ZZnnY1+P8V_(E=63hZ`Y-^rmjXH(sUUY}SYtpKJt$9RgsfUq4S7wIVCaVHQWcb}B@@B|!UIOO^>0%}!D;!3SJH<&VDoXW%@ZxHZ>$ks`+k61k9 z&wWPQyRP^02K`76`lHIGP=xh9yhtnvK$Nhn1dYg@6a$0mrHAm~T<~`av~QL;B*}&F zJ8U`>`_LUxAuSL|AL>b@aup<_Yhw&jILxXJ-4QxwRjZCt%AfN(A7|_cn!1(ZQ zJ1g)D_$9{*7Skt#Q z(dKLSM}Pq;-vfUPnRxISw-GA&#I~yFlfiv7eWb46Hq0evH%|K2IiPjIUHlpdY&-;8 zdyBrlvc;mGdt@6*d8mfBH3YC!`BUpI(u(c8d;f-@*`q@xFd6eTOwl@P8eMu z2I2h}0>rXBp9#p|1Pbn0xN zrs41|a7g!H1M%2Pm3133`ppHRcQT~UjO2bUhF=+>5MarI#YO)E78$|laW>mI$8nEJ zUVB?GC`Bs*haL`jFH0UTj zRFr$=XE=R}J?A16jQgD67%;#))-2VhASRv1)vic`gM&+FEDj9dFQ$iGFzAuTD@I(M z3CrLiS|x*XL1I5tlR?s*ULU9kWvdziMSjD$r^Y&ajE)p1_jVC;rDw-*!01eBpMPkE z9lN|x+qYlMTL?nLG#9CC8eJTmGCfdEtkpUU5iS6S>#_khz6 z(0<`V0A3Jm*jDa{S$aeaav5?gu!is(;E&NgU%CW*Nc)I%VW`r_^m+%a*Y%?C#5BzR z-l}A>M`n4__i;}|FhZE|MV6KOg5QON85|aBi7w87h)=%X-h=)~(uS=NFwz~tp+Y2% zb)!!D=aL$Qei7X`j;L)$=@8ZDKmkE=y$7#XbZWT=?k-W(iV*@J92ZNhY+q!(2cH2J zT~Obog8^v!R8#thxg%U>$X?TtVi{mS++N{;hbp%Qbc?!dE@l5$mfi^5g_=dzYnH?6 zvA*w_UYA;Cuy5vc-#}XEVe$kKIw1rAE*2VpYi>E(lP14IQI87&%mh7^W1>|%?Tqv^ zM;{_My%M28_i}9@u7f9qSRhNT=9;HIN-PfE|DG+Q&2tXf@@15DU*h9kD#tohz2~>V zELT1uzC*lq7h@NOYPV}Xvt_HL#*n;Tz1p&(VqSBRx%!?~v=1J&<^Tbp-XQSno7TS-oO*b(|Xy_3vKJ$woE3Z^AqUdkr^)b9L zVsYw=hDlB4Y-I4+R|Ml>v@zlyoVs*w-e)${2ILNdLEX81nR1%$#qBP+jtx=#BGzw190S1XXB(9i4jr86q+!@8b!z8`VvO86JGG|;w9?W}B z-3tcbYpHw^i}OEvXfb`!OQ1nV#2&`~smO^gz6Dj~b#!8KTdBSNgTswpMZy$tEUilJ zCjQ(C?rUis)UWcb5bg7lYO658sSs>n?89DYbluv=^@sc3S-=q$a}<$4?XJZTX0} zms%evvCk#d%qG80mOAK+=)widKhxjRKo2+4OB`aR9#$Przv{uAr@MpJVnc{h;rYp& zfmb{6hH!#UsnwxhM3_f^=zb6Y&)gh4TVcX$0q2?V*0~>Jo=bZzoU?LOi(@2`y~jg- z%ZMg8K|h`%U$z;4M09|Aqrj4S6$6;)zSYgc?O20z^PcDU4eyDcoSf`XSO?o8;-ujW~G$2ZJpv76-Lwi&_xL0r5qEf6%%jOPe( z`S;Z*TgdFYY=NNJOqc+4I%1nWXEj9g@xY4}+Yv7Sq>65nJLLI{`C9pSB_w}u&7)E! z(g7*CWV@4S0}<##DW$x&@~-@Ixq&rkn#5zv^gI;?x$Gj>mcIkN=kuE!ZrJ?34Icd8 z#DLhC16qmurWV17AkV(j3{VeaLyoE6 za4d(g8D%B?69gAqe08mRd~vd?^$g$WF|x#i-jCGg)BOU5z8 zi^wV;)UDE%!{9dovn#u^gkw8eUU!?Ys^;l!YXHV!{X)m5Q3!s<+c~Z)uf1ulJO@Hc`!H*cfuLIqxWo#? z!uNUA>g}Dfc!hc#syj6Hykt$<&lJR4EMFMrqW5EaA5L#?j0-9o#}WI28a+RK>evh< zaJ)}it-SLKMr(}p>O8VX`yr3zS_*@lzDHyB;VC%eazyAVf>NfJS;!?RuE4Dzu+Ynv4C>Qk zErZ{%kkD#T1U;P2YTfPqm|B){8|d~iWxc|y?RrTF;8AEv3JR!AeCjICp2$fQ-uOLX z$@*P?IbhJ)v8r$3swAIAs>_Tkdt=zP@L;0oo%3bL&4jm36WhpA*ZGp;?8zObKQ(UZ zFrCA$J9JF=zCjx=ym@2hK%S{x!g`F7%wQxfuN=8K<(+oQb=Nl-!dSPgN2I&R)dWqg z*yl|VN0jFcE-ChO9}OqtSfHZhtX5aDBOhm@j3ItTSi5}9u?+iTIkHEF;Pr!lOX>JGX-B6i@Rd zxoPlLMR-6t31%KmawpT~94MjP z4V^Rkq6sb#X-}pRPgxO_rA{Oqk+|&zRUZW&QN6Fml~$1Q)wqD{>=P(_p)$-x*vu=4wtCq22n!?Rv#EfiMqH$zRgS|=*#>F7FPQX zQXn|?Wiluee=uRkh`qz&4vn+Y!CCf|-r;FcZhG8$gVr`xOq`0pa(YjxZ97Bo1B=4_ zhkaH&YVKdUwa|X>@@Vp9#MIUL8^NJs!&{4_GNHNnDWCUkIwh_~<-ous%jBGk_q6a@ zk5L$7BA^GDhM zv$Qd56=L2d$1HI2t${{uzy_b(rVUM_6LTio268TNo2pQ>Ap7;1?VfcMI@-aQiPss8 zyx_`D7Brtxr~9R32dudari8&R?B5JWpj3Jq+RcE6Bx%A_;L->s&I(KZKo@eo&FGj) zE6~WMwVLzK<^`vL@2r7*Q%o&AvZhf%2A8Bs>22wtR*kTeGbzhR4!B<3gJ=``#A8Z$ z3YQ>dTsj}}($+fjdVAIghmPWwk%SIZ`x)an@b$o=#FSuRf^o74m|A$9g3xIh2NMuG zf9dj*M{Y-Xiwqx#5tHT|00G=<9!6NY7sdY0jo&s*`h2IWO8X7HpNt&$TgH7pm#A<4 zaGS~zFCcWa?$Y7<#XZsFcnO$HI2~3k>YIbi>(+|z?9*{4lizS%_bB#ycg47eCXg`t zD#ND1i+f@j?4eN44EE0~FnYGx*(l-^-pW(RU1JoHFNAr-s%O}2-rHNZm3$SXUwljP zQivz7Y(z`$VZ=&vFU^VLXB6fNxMrtTdA&}s?TaXX^Q6tw=f9KFZmnoYGOc2kl1YLA zEcxW-x^+Z-&ZCzmGy=lH^bz|7`)xQpacu~mqT+<_ zs5#T-gw-bPa%+U~?hqd!UvQ5Dm%)#b>@oyiGu$CVqRC=Bdu+`#-?som_in~N9PISh z5wM9*@!Swy>yHqLLwX$R1#C9_7@rwro@Yu@GDa{p10|xrDmcyoKE)vg28eZflzl!F$n6L6IFQ??`ac0) zHlfMsH=-jw=tU_FH^^WzQ<%+Ke;7e3dtoHc`@D}6p{ZJFi2;aWHXVIOPzDV)ZLR5b z;V03S9t_8h7umquOlA@J-ZlY&mdx{U`u{h+qPr3+44^EVDCt9j=F*uwF9!20PKA;* z=TfdB(dL_H@G|eSj682<0|I4PLpl79ebi9rC-Q17e==ZiFPs4)HGriV@36m^5Vf-p^4<%LvM6qR_8i(I#NeJ`VV zp1q#n5YFTqA4l^)qq`yNRg4DkvCpSV*3#JBy8{G5)Z=wdp@d5xF@vwTik(Va&SM>Z z^=WtZXn2WhVl#m9Y;tYbS%sPOV%~@9Jj(!| zF!~`kveoH4KooO0h2UZ#?NsqI0D-1~l0Wq1Rv6~sxBq<@&IaGe9|rLUgPhF+1YQob z{Gl!Nwnftgpm*S?dXTf4XDklQ9E1&vykxDxKneGUyC$Pkv2Ej5~s^Vn;4?)WS${!M$LCJbHhpCj{S-$k~ z8nse<$t#j1cFVssGmZR#7S!)kJOj8BdIprN+Pu9+HM8kvAq2{^kn4S3lrO{xexZg? z#lCyS^QE1)b2WNQD)tz_rGX{u0&ZDu)2;HMEvso72woeolC!ti_x-;w;DdjMVsJ6X z0HhHs158(h-b_<=1nEegCLut~hPji+Y+<$wUj}I3-|AlBh zem0sv4E>AI1&}hN1)Q#n`9NuuKc)F9&^^@EoXR$>44=S?z%KtS4Edy}oFZia0s{k1 z)(4v9Up3&1Q=uWtXsmBqP{AtRF{(cVarB*8vyCS(sl}2HoFX;v=2bV!%zDT9hR{6 z2%}V4?DhH5| z_0+X`KuzFly4djSSzN$WY+dUr(1LF@cNU*z)XB2I>gWEA#zy~arMAlbM+Q(6Qb-LX zA@6CB$mO=kACmc;_b4gUv@s808O``p>rF<|biVahz0;^4C{0Qs8Gt}576*`yFl9p- z)+W+Ynhlh(@f|kPm0y*Oy#awT%%hRUTl__RWocKV8h@2!mzK_j*Ki8+R3T#kg9Ay% z`&cdi5L0ZGKUCvqo|Qy9X9d_pJAT!8i|Sl$?fYzoOdd7r2QDZ)16UKtQdMpE*~%WY zz*$UpWYNhw`m@-+(Ex$cETo~f8|2c++RfRfR`7nTp}{{hfK(gTe7gsWtd;+Tkj#4y ztvRd9Lf(-Qb{%V`U@sl4UqE#LiHx!QiC3}0Bmh)CING;ARPTf`f$SZRHPo0AIH6Fpyl8dZ-iz{I_(@h`X;4t994B!vy2abmJ%(w3QB2b^-T{OhBfXi8? zf05AV^h#zeRWx0GJ@r+@(u}1Qivqtha5L2p&j3mVuw3<@R>~iMr(HF|+>XWEjrPgG z-jKxzZI`dZFe~3c!7BC!J_D%m_eAyI22d%0lOvB=+!t=*x&zfhJisbi=TEdx4eL%VJ634WR1*I|PCBLw5)T0D07T zaPvLZ^(RtDbA8>}d|u&trLEMrDE^|Vri*{inU*dJ?!%;j8$ce(D*x{cphDozQD2Fb z@`u45C_5d;HT;hB`+z7yEi?4U1N8Y;=zfxJ7 z1$?LNC=tbIOP@N2^#L~kRgkTPK!Rrgc~(wZJpdgGJ9*uuXuxmQ*WBCRo7_a6w&y{$0APDk_F_jOxsgermt8S{X9$1(e7Xu zpnbqzeTKzlEeCk){Zm*#LoF8YjmD?G*U|;Nn^_ZZ132ZN0h|=DSO3VmOU;K~9z0DU zg&!%e!2)znuQj%Grb?I>a06)nw*e?l2-vI7wKR{q%#$2c;(ZMxKRT$0yYE~X1Ap;+}Wc%bhmb^EhtFWdZhSGmJS4d%Z`9sK|fP{B#}rxI?;)alp&GCfSi%p7~%_h0=__meDVpiiuo*H z0o%wTo9w?sQp-R`qSnJP^rMc&*UQ&z01YThn#JQ5VZxz|{M{^K43I=J$&{frZD~tu zN)Sh!PdCdqC@=u8)&dfQ2oW~0kcG@=GwGxs9EP%GWV3JJi%T780D5=Ym!zhoS>Lje zgVB;h4r#KP-xvo#3Z*DTY3kF4wzQ)RijYr+&Fd5xKy{Bjc7&zOW;UzXNg8Q?huj-n zVY>ryvByJThvf#KHv>>y&cF53a)`b&$Y86$&-+)8l%gCJsYORR(ca_rh3k6D0A}(r zKeL8ST9f+XAkIU301C${%g0@G*V-9uhXEYJ5YkB>|L4G;_irbzOg)-%9z99)VCz>v zDS-{ta`}VqWE7Lx;|kFqngJxTo06V3fPUjY8)PLTiXD{K`oy`^RNLLv69p3K#F<-0(q|A%ifknZtQePGnV6R)K%*(7Q;r(V@g76mbxz*1nRQJb7KSbLnOOi{xjVv zf1r=Y<-bY8uJ~Qrv+;A>NTq^x9z0vCY={c3f5=(xd@O-p9yfrA8m_rZ`%}BucE=k7 z(1AZ(`u$I^e8Lcg4gdfk07*naR2JQCOn%pk2GGg1iS|;@ML@aG!GnTbi$8Iz0hIEz z{PUPI)cULLwt@F*F6{*D)jSERB?EB30i+oN(1O><^ki!(YPhrnW3J~894Q;}KoGm~ zBsYP2o?bC7yx~#1R@8gi7=Se>?}ZE?-KEdf882fGKPzt<0JL-|r(w?-K#CVKfE<@T zm$wV4{hy|dySr_8_SP=tG~aVkP%=bmV*pX2nTO?{#|PRni{NGe`JT%FJYfLtEY=Wm z{Q~M^VLV$j&82O%;puC+bo3?Sxj68I0k|`soIzAXk& z#>A>s2H^gZ2JY-xSyLuz8K?1)TA)5=B-OdZmUHWu@telAwD~3j@Rk82nGC=&1IVK{ zd1`<1tY9py>1TP7jw8SS7it|<3EN@-rA?#;Cj)RN;w{)ly@HMEupYF6&p44AG;XPx zp?Pyvo-Nb1CB#Ia6-e+x2H;MsPqtuB+EeNu-5Z69@Eo=IOv{%vgA0^i?c|YRLj#m@ zYgl*;amE0mg%yLRM>(Tjp)%-CE7n*ZQqO2#s3ZImSOdU|24K1XP8mStSi2mQ@GDKZ z(b8p5zi_V&Tj_tcf&CO$#)S7WfOwMuIA;K%V=pCAs2rZ7F0(BPEMf2Vn>m9)mgE8dWtsk(RSFi`Fb@zm0ce#0BpMc?{C>xdE2Id58kx@o zYVux;_nO9o?d@SEhn)d60OdskP)5s9!HQ}+or|)Z_(c?K=TdsdFgf@u7b5fRVJ6px z{Q$-QEHeOeww-eZP>q^W#K=-Gh3Y&LRX=kjXOV7ObPDen127qYF@Pe_&r`*Tu4i)? zMW6xIB5XTg|dT-{KGe*;3t}MA6Z5IrMEbfT{buJ zUVhVjhkdu048RKHd!Y;9LRymDcm`>m}DrppV~|<(s%MAE*lrNoxlh$YraGJ z6DCqEG645Kv{==uA{;u#f~$zgI=7)x?_rP8nyUPG1v(myr4Nr&%~Vupo{?o z!T_+&0Ft@=w&+AQg9hAPXcb;z6=%>(WjNNjk(j3~kJrgCu*3kAge@v;p$|#Qg;fEi z3>z(4k)B6m)mSmc+m-Sx9p)Mv%k~z9LhVu;)n0{ih5TU-@^cyP!*0MN9=G_S!q$E+ zeAf|>Gl+ zJl8lGA<|v{kgZ)C*k5YNB$M%<1#F{ZF}5%t8(+BgMf-TJX|h5d*jCYJ)-y`La(3N^gg1#rIsB(s#BQbv+oCydovj@dYm9{yVqpkO-x zwxEVWKHHVs#GgO~Ml-{M^#C&BJ+ZN}F;mE94?E-wCb5t_^2v7r+hP9Fa8R}4J?hCG zzHcrz-0-P zfE4_3Krj)O&_u&^%Q214O~wCs6YeSGZF~1i=FIZy)0oV%h+@v<+LN9-{vAMm+ruDdEI~I8t;^cFQ)>% zVz|WTHVM7}A?nkDmb9QcUlPXbkFMpK$lhnm!&BEdoj z?|H^I&HX18Am01CEy^Hz4 zy6>vgvvis3k+_~Q%9j>EBNjzHgqFwY{G?)khTl1XV55qX#@Y{Ya2wXqP~}?~%D>Q5 zH=E%oDoYAH2|s2dV-FmkUMu)X+<^4Te{F@s@A9dlIlJz6oP^U z^oe?^GmalPBNko+Mh0H~S>%RD^T2*Ui(SvkA{7eFr{I+4YfAdm0>0#5QP)%m@hxXd zEVu6#cmr5pP;z^9;9mR|OG}Nf*1S5sDbsv5`+U#>UT1XF%Y#FF6@!RN&@AuSD><`*LzR%^PbLliSwle2=_2H>R*rJbLkbOe+>6n0dI{4usm=to)laE@o-c` z`%#$CpARJDOAClFEQSrf@qEhp#cxYdT#mtS1qSe20AKw-)?I2R?B#v!Pdt$K{Fw!i zPe10xU;!U;QL!x`k%mV9Y*2(0Yz*M5H?_DE@R|+JJeY~%!?6GbIh@0a7%bpDh85ES zI=Qyeq@CDYkO6E8;H$^eQmhQ&8Mch1^kcdtzv4#=NaxHLX655}lWU9Ko&q-;^%p2V zs0N_8-r_6XYs+(=!NL)>eOWGK8)wH*>{Bs@>x2u6_R~ootlnomB5W)$fJ_a=E!~e^ zR-QMY;8P3BULFfgSiu0nhowW;a2DAyT;e%ynoxvd0|He7x9O)a{8CWY1mLFtzJ45S zEEQ1>ci8mgC7H-8l<}bjETL;mF17Mvm%&6b zZF}|+tfsf$@&E<1=pWN19^vk5k5}L#iNQwwha14+KoT(2$^zVP!ERfJmMSutxt!!L z6HxFu!()1-2YBFyW7HcFsG^~cqZjepkOBixumuSq0r4@dB`+*^-y_Y|H)zj7=F&zI z{9^+O-sY~DUgvHeoqeo-zsa8qtBVO?^ZN%ffX#t402prZ_0qZ8W+oNwna?)vq=A%` zIN{Jgp0$9{ycE;p-^z1^*N8mDEv_>GbW3Gz=>~GoUANZ5UE>^RI#VlkuVZub*Sa3uV_?k0f zYKr%`?8w3|0+T#=fR_%u$>oO{z(}4CBn?YwZDsg(;p-6J#uT`AB9pzOF^5n2lCUd| zS~*mzC74Cqm@e@lLk_n9slhrk0sz3JymzPpv}2yn3m_j2ZPg-+L$?xZG?fb1hdeg0 zfEStRo_s(cm3f>P(?upQ_@D&{+{BYc`#^+~SgP1R2&iD2|IVQ)YA3+*!Lsch46+0o zFo+p!VuG}i71>GUA_MtQ;tsTMGWQ$p1CY-)wV&kzZ%k%4Nr9vylL{)^ z+DnRJxz<9Vy0Mrsyp9V}LVN#u91nBSn%7vzaObBI6|Ci)7*|;K=OYpX;31>@{rK_kCD)-td@`uGOhefI&SM^D zr4Dbhln&zXv9}7A(mlow>Un%ZBAsI#Pw*2yKZM`?sa6{n1aue>y786OuP(5NlYGF< z)7(Lhvwgt>$Xh;r5fZew&{ zb5v`wn<^^r$T5K64g&(bWPNlin8-FTEHkiG8SL~#vjJ&ffTD2>jJz@VhVkfhWS7$vD!CX ztIz4HB2GSl#50X9M!_*5pIU5IM`i%!U=JAqrsW(R`ymx<=k%D$T)7Fo`PktPaG2gP zoFQNUu#de5`@07WAPq9u8(>;W@QRM$Rs?cGn z!RLV{<~*wE2=13*3OD&IsUnmeyh7p|PkA>#w$FZlI}|LT?@OOkv^_ zk8rDRcpA$k4o?YIV?H&EmZL&5epQ8K0L@`}php3q8x3`Q-QxLLxWh-YEEn^#sG*MC zUcqM0vgsTKzhN(HYg1?j020qC>IRygIh>|zoLdxMaISBddYXUl6z9&@5NO4Zlr)Mi zCRTIep+!%%uzg^nQg zm4MTuc!$JneHL&I-}{EEd$}2BEnpVCeKWse7hXSn^ybKgKQjY93INr)B1vb^p2au5 zG0R68iG$UH6nw>Cvo^38*mL9*>X8PJ&)UF~^cFEkp>W9R^UmB<9}L%RydDwzOjJUxcDIlM~)S|$iv10iiqh)c9}x|pz|%m z5|`6SXGGl};SwJ4NzjIPhk;I}jY_zeH%!nL39qSt8tCB=#daM#<2;5%wAH!PML;o< zXMM8yD$E6Z=IGL(I6k7U(f4t%h3ZF++J*{=%_W8@(zPe9!t?YX*B5NX^C8_FO=$AD zfbUG$9tX?*nRSK=3C+oYCu%GG^!HuwgRf}E9$zq)#3!8Q=#*fX?q;9haqy`sjJbcL z02SB~aH3kX#GZs!pgdDK#TTq)a5{^e>j(&>@Dt6A&X0;RYVUC~0AOdJi-W-syW|fF zcF}>Se8F1^GidB+7LdW2tT8%23KkW%-M{cbsBZ&I(-_`YwuY^Oe>1=rU4c~QQP)um z*vVOJHd-&bstb*E>Bx@(C20<4kY|4yD^Q*BoazGxchcfu!6`>N0!^4h8Kd`qpuL)3 zR0DwRR16?R+iA>h9wsZF1p-ZjMG!9uosa&;qVjE?JweP`l|tE7p2?x4mcdU)3$ zkCXVtji*iul%zW^QOUF1I$A$CM84t;h8z7;N@Wx`1IXZ$fRJ;IJLM0G_L+Q4Z7yV^ zN4dS2mz~Q3A}HaCfS+~&Fz)DezK+#P3&tMn*N&``<|fQXacedcsKdGZt) zF%kOts19Rvc>7o%nWHD5rP=NKQPg>ymY$dDfd>_U7W|8=JUBaWANQAaY_0Qf-b`W^ z?E)+R2xU}yG#S8N-yayBMt?jZ|AK`=Y8ls($_Qq7jOYI{D$TKjk=}wFx;R+7)M<=8 z)@YtO<~OGkvrs;!rZcm=_j&?Qhb!qrD-V5zF6Zq>xWhTlsxqIN0hGVciJw$71^|-6 zb|0^)zMe74!|e*x;TpQp(i0uEduHZW3z7Tv7sN0HgVjB6qTpNQ0oatnzOQ0RIe6ZiLIEZlC>B#uo~@f|JcoX93W4sHm9h$o)Pbf6t4Q->syh$o(e>!Rf;)tg*)k!85MJjQmkVQJ_>?57MY$b<$!i32q|LE+bkgm9aC!_9eWYhN0^Xcto zCLj9pQD8Q@UBMeMaxE1lQ~ZS&M0F;JkYoNSDn3M%43%)y{O=J5%Z3d?l#Gyw1OXWm z`w1VS1i}EmljDB=)$zX?v}CbwRs-yz zFddBYl)pZWzD^v)a^Tr3upsJZcQZ~>MN({0mvb!h z{CR=jnM(1xvVci{(T-J7{(28y#jz|vF>@!K+3veWSy9x?rl0A*U?hbl6BI&!5C_B%VE572qhl03eEOo<1&2Xv%M94nSivU6Pr!iSpMU z;+`+0hjY)~oOwRl_`Z#*MJ;k4Dh5m5t`DS`PN|!XQnk@bCZ|SysO+8G-JMd-J^OM_ zC&xF9F`?)yyNmouEJ0Rjc6odg#WLEOfk3Ta(j=yFR+PVdGfz2{p|xcJoXZqnbQFb( zrFLZ$@rR3?0c68oKJ+*>Etn-{EI{X%G>2|cmf==B&Pb<50v2*Pe9e%e_MBaf@f2D9 z#WWUa=7S9qGmHi3{rpHsK8Uhy!ZOUcwSmnMqM=R5r5k9s`1zY?wVoaKvclH=`Le-g`7Ss3qO^eJlI*Ajw2~~3MDY$uw3C=~ zeN|a~yfqdeNRo^zHZxiBsnn2=_&Enim5ouh%`9|rKICHXDN`{&9c>EuTf5F}AX$@Uo9W~y_nT!|nTM47$Vi7k?Nzs=3s$pf?$ z2a{skBOplUmXCIzUS67|w@tC#FjYiH3<1 zGRfj6StkFL(q6OyDVRWeR90Ec$TJRG!27O^+I(s205{c;IGH1U!#Bkpbrz(Ftk#s+ zO_GbHgjZ}p3RcivDYG@T&HX}sC*RJkJ7MQbTqB1_sV6zUvw$C@loTf{25LS%Ia}V7 zK9b~S8xRCZk%2N%>)cR8ZWJDNZY&_dl^fx5rJWT}2|LJ+xM;==fDC$?*n3k(%<0?N2sO zu9B7#?{q#O2%@BkTxoMRFf9Fq8=ZUWnzGGRk(wc8oeqR2#gEu&OfeT@j;Osji$Z zV=BmH;!o_BhDZ8qPXwvss)`6#+uGK5xMbj~wWC=;cb80n|0{MDV*ZLLc#}E!5oK9I zr^6|p5@HxDTy>aaTU+l|-xcqiz-$^jWdZHr3$Ad%q|AI?QqCIyfMcUFx>1rD43vY; zUxsga%VkGMHMcbq>$s+6=1|ia4K8FXyu%}ob8x*C7qP$q6wK#!pISfy-mZB7DMOme z-u@Tbkn7BhfItdM9U2w6npdoOYm3rH1#h$1sL_$$aEfjBs^_}5Z^j%P+CZ%!gHze& zz^#|^#t@4xWnKRl@4L+a6fENjqechN z%AVVFcVh+sa0Z`U6z5nLu!JEtPYFK7GV3}$7LFhzh=PvR_S|NgdnN&oL@!>) zIScrNJ8it-PVWE1!pm7`0IgsjeSLAly0_5Mw$QKcS`LQsI3dR@U^H*rbh8Nk*wfIR z1^^1?GSw*3W>mngy18!N^D&CMP@9~xfXi8E%dMs`+uAt~s~3?7L)d9FX)BV6x9LvR zUCqP&jH=GX&fGgf9~%Y(cX6rJ;|&%YfPy_-5|}fvgJuBk-u0I%6^2AcFFoT)s#M(fC%KWKqsq{7)vd{YW(zB6dA6FPv+K7{Exl3bD za1qb@ba$v55Y~A4D|EMw&m&eG;B-v}@F&A{b!znOCC}y(qfDD{qAeBrs(FZ! zQp}=(?ODJmP1n6t-xQ-Z15hyAu~Qs^h7u&%a2Ib4>y}}Goi&358qiG3rAPCu;_LNz0YT57xImJAU_ zd5)RCXu&T1k3FAuDeTmchh@`JtK-VXXun4bk8)F&*}CoVI!My83h;F%=yqK@D#~8ZpGKpa zp?@h*bI)?qjBoTVmVORyrj+HE-NX(0$^z9hs)}4BhJ7 zuc7yUCYj3n1^^1yFu)WF(TWb*8?lzB`RT$0UEKhIXD!b#B3#I7I|f~BIaK0Rn8wRS zr5d4or=Fsc#~B*HJEBMa7c#)|%f7^vcWt4?rjgw*IX9k#v@}Z9gdFOsEgHK3aqObB z=UIB0e_0*yQi^q!pHQ@dmS2Xu`^fy=}dFL-*C+m*FZ z{WV=Ie#YH2vgXtu*K`5)JIyY7kz=%~sT~_=J)-7JpYU`WcM0vSlmCO3%RiSs_Q@YR z50+Fgms^ciHKB{XOAB=K4Nng+YOadCa9BeG`g4Z{i<)iciYq%$mPNsHyk)ei1wFMk zTu0yVqH25~K&G~RtV zCzI`*3>{7G1WK`#dL{-99K{|^XQ?_=_)v}u=tURJyDa~rsS{)WE-`@peXA8zG%;x4 zDAMS_O3KlgMl`1xEo`ZOu$yLVc26a7CH3fTldS$6D#fn>a&P4CaMfP zf-E|*xH8*~0a#`MRarm{6Ilixz;4>I)*I6D$UM7(Ewo^ni7f-yV=axnB7eNI&_=;- zPUbTcUk0wm_q1TUclNS*Xr-M(<anG^O87Uon7x7quEgC8 zRS|FPWcT2{dw~JGLrD{F1};JlSMr|s8+a2t>BAf^ipisucLXXh zgXSjk3|xQ}oa6KnUjZ2dIK;PhauSnF>=`(YX|(jJ{PFI7dxZ+qm)p&8A_fj3pa0TR zg}qzC(&NQ9MbVk5W}kq8BS@z&-ziVeNqM~DPCelVPGqBrMFZQhg=Tzvg2$(%eNcW| zAce8?F{Q)}Yz(?DxR7-3hnx>;?kUKiAO9lX#HE2vJ^yRzX?_)okI&vyyXeHVWS9sxh#HyP&Z#QRzu!rp zubvaA%ygQYRe}al1kZ1r%@%)$j?YiuRj6&WWfZw4o(+nHJnp2G+T!;wM*zNz<=F|< zm`F#H2N)Fb+rNSyY^cNz-@mE~N{bTDK;9wVM7P0lkk7w(o4jC1BNU7_ReTZV18OnR z#J9mQF^$^1wmL5;$zq_AVgWdZ52$3~+@KJoF`P-Wq;r5?ITWP!RVes|nmkCvM7zNe zUxz2D$!DhrO8x;efC3Y^Gnad4!W0wp1_!W^cHBHVLoqXOdI+f91O0fKIwtl5k8Rw} zTS1jVfG5TT6c2JesYU~VMGmiW6XD>>AmB6O0%drG^Ud^NATfhsYzVdl%+eSH>hdus z872aS-?@Z^D)7Z)LM9RvtfL*Lvfk7Z3QVtmAWd0d2eIIreZ1 zb(yI0P4a8H0EeM8dmx1idBzM2`V=`l!K3UkL2nG;SR(>u8O~^u3>Usagr|6f?Iz$& z7vMOK_+=VTQ=NOvYC#|2F=}&*k-y0Rik=5RMK0rEGePKiJjD}iGNEn^AQ}@W#lN`E zoIdPPgn5)_*=oYv7(kSmO(#g=8g8SSVZ&3{&67M$x(RV(0M_IJL-{wY3>Tij8lGVc z5fj|UhZzJcl1nN+e}~reWR_vW<(SL)G~iifK0oY{%37o?7G&T!{97ZmyxrOQEnNT(c zV7Co~D91w#Ce`rhhzsxI9qwbdGE26M0XUWkKnksSnpPwjK5RoCi@B8rCh3nAW)Lt& z|5Til!ED-7kK5R5mJe%3gza2IUE1^gIY#~_18`L?5Kl9%L7{whe^n#UQ#-(eP0utl%3a^1TUAV*ozE!~6%}B!+P&Ee-2O zK?d{rigB!ketc&5Fb3eud?1xe8Ni8DH+<|zgf-0JUA~49yk__?1`q%v2vM66^rkjt z14~0bf3b@9_>e5bgrYHkAlg7YH5twTs!=vDt&ziSR`V|7$PDtaT*d$l{(6NaI@ zYns~_fWa}XKv9}c zV*mz@;5n{4^gk0xA(fJ(l0qp`NTdV_#8HBH5=cJqb0rScf)KJ0vI&z%E)jBwkVO`m oWRXD@*<_IU&qAmsbo_w-2TYj91}N>~CjbBd07*qoM6N<$g1GK6-2eap diff --git a/modules/web_server/static/images/icons/arrow.png b/modules/web_server/static/images/icons/arrow.png deleted file mode 100644 index 14b8970fb70aa400ed2e420f2a3f435e36880e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6101 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 diff --git a/modules/web_server/static/images/icons/ban.png b/modules/web_server/static/images/icons/ban.png deleted file mode 100644 index 0ff666e8a678ebfac276cdcb2057ed2e45c16bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11066 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 diff --git a/modules/web_server/static/images/icons/close.png b/modules/web_server/static/images/icons/close.png deleted file mode 100644 index 0d7ac3eedd24c9bbe5edc4c69fecc395868f120d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21184 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 diff --git a/modules/web_server/static/images/icons/data.png b/modules/web_server/static/images/icons/data.png deleted file mode 100644 index e42536ca39d03f8a0744011f02f8daeaede8a786..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19682 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 diff --git a/modules/web_server/static/images/icons/details.png b/modules/web_server/static/images/icons/details.png deleted file mode 100644 index 5f0022cdd570cce243f65101216df82ca0b0a59e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27369 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

w-7d`%h&ya7fKnmscO=vL&ea(x7s=~J$ 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 I>H7G806=QYYXATM diff --git a/modules/web_server/static/images/icons/empty.png b/modules/web_server/static/images/icons/empty.png deleted file mode 100644 index 01411a1ac448a9567af8ada24021d8983066cf7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11101 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 Yu?eWfYre>LdjLR9Nn5c}{$bev0#+2sFaQ7m diff --git a/modules/web_server/static/images/icons/info_blue.png b/modules/web_server/static/images/icons/info_blue.png deleted file mode 100644 index 921f545a1c84c4b36edeb1b09439b481bdac8e2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42249 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 D$t^dq diff --git a/modules/web_server/static/images/icons/inspect.png b/modules/web_server/static/images/icons/inspect.png deleted file mode 100644 index 49a0ad22ad4774dd910960a9220ba6e1dd7f590d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9814 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 Xx7HkIvcmhk7~q+jw(56fo5=qIw4|gL diff --git a/modules/web_server/static/images/icons/inspector.png b/modules/web_server/static/images/icons/inspector.png deleted file mode 100644 index b84abc53195e81188e5f2d5a10dbbbe4e909313c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4145 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 Jvd$@?2>@X!kYE4+ diff --git a/modules/web_server/static/images/icons/overview.png b/modules/web_server/static/images/icons/overview.png deleted file mode 100644 index 438d41d9e7980867694188b11105d58f99b442a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10352 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 G>Hh#|eLxBT diff --git a/modules/web_server/static/images/icons/save.png b/modules/web_server/static/images/icons/save.png deleted file mode 100644 index ec688ecfb2f2794e62483579379cbd5fe910df6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7407 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 diff --git a/modules/web_server/static/images/icons/settings.png b/modules/web_server/static/images/icons/settings.png deleted file mode 100644 index 0d64cfc1edc041b04a753d45119a3d153fb1b163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23624 zcmeFZXJ3RBsREmm#R4D?Y5Lyxl zNC_nrv4M*86s3tB5-Dp*EV$4;v!3UF_I|O?`2^<$zuaw(Ip&ySwrgC23?~OG$*l@o zAqbMRv9@rAAR#9IPh1#0d3Z{o5c~*-nAw{_P)n}FKW9b2y=s89vpobQ9e|+ZD-g5+ z9wjeA5UdA596ty`--00dsM~bxaqvRW-`2_k`kkKp;y$?B5@qcf3x2^@;BPJ5d<M)8~$Ei`~RQ0WEqcR$0 z1gfr+2$f28-D13&dB#?*s%BWD34Fr=7qV4R;}}IjqXoBecCLp5KPYs z?YF=Q?QfrzoP2G_L|bOSOq>GAl7VvC>xyzR(Cs?N%ZINUys~6-t)DAsYymxp^ zoJA5}m3YMW9RSf=Tg-uI)7de)w8?Nffp)1E?_4fhbx`?1y8WYsLMvIey{bQnG$#vT}|qzB~4=Lx_x$wE#}C#-GTo6=Cf$ zsOz4ej4wnv86Fu(k!_5tcVZ}d)*Pl4gh3h#;IjqMz5wK&oAZ++K$H>?r7;~6X*|-2 z$j53M`g*r+LC9VuD`-qJWnrpZ%z>j$hINEW>%%??)OJMvSxFSOqO>7puO3bavmt@O z*B8;}(Si%dz&9Eavuiab0MBO`ml>qeAkfH!3+f`Hk z|4U$*tN*9{yu{X?@8v?tog{*){&V%5CoBQzJQxf9cFgGiF>)|4^7C{5{iwx;CD3ay z0nAK&>ZuO(GACQe-d)9IDxM+GKaX7{_Zg-WbAnP%1Q_(JC-qf#gDzS`aiRG)>Z1D|g$0@JJ?Imz-GX>i8oc40eU!HCdNx_XI`Ak4Ipg0K z2z+h_==r~I!I19e45)fP7!kr0ywys7(STf8?dgtzlv}qbDZ-XmM#i6mo(raez-s!&!N$oec3b)uXgNu896ADkT zhRTS#u6-XbM-a8!sU1@~Xr~#2KLVX-Gq`t+rxGK@vRy=)SGH|D?jyD+H2+oBP#gZM zb8AGM&a}f!xXN<CT1|t%!V~ znb6w`U&={uxB3H~x?lXT)kb9d=AlJ5OyJN$)uYkn;wZ2CyGpW^a9t|>RXXsRK(7&*#&TZxY< zB{*>~+83)H@ic~Nb`UAHiw+6S6L&?JpYhAh z+-wan`P0sQvKriioPT$racY%-zUsnpR?_^}Kqo3I)h!y<<+j*93Rb1E~ zov!HdH?cUF)O_G?--gG<^miJZg0hBp?aA!u4Et!Y!Z+~eb>!UWYO64bv!iPm?^c(U z6imuJ;eWQ!smS=?8{|i)u7tS8;=j;3Rbfr{>xw=&#?bAIzVz53aTWBKa~FS)DeN2>7LMJC6{FGg~u1kgUYlr7Eg7#=%m`!IB~*KZO^ zcTmu%gf3hARjHA{iaX7-n)|z|Wwy5DUi&-lYoT4tMbx9UvD~;eop%YPTPf)M#WFmj zX%1%j;X{pS;e;C}IuO$LsD`c=zMyrcUD@n yK}VXvdqLpwj5ENwjSg>fd}k5yca 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

I%^kS!R{H6a(H4u#=vmQ$s-U=~oy1kOJYZ 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 diff --git a/modules/web_server/static/images/icons/success.png b/modules/web_server/static/images/icons/success.png deleted file mode 100644 index daca0beb466259904cde089c9f0d11d0d55f6479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45386 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 NTuz)i&N)U+{y$MgkvsqZ diff --git a/modules/web_server/static/images/icons/trash.png b/modules/web_server/static/images/icons/trash.png deleted file mode 100644 index 0cec57b0fada5f1757cad1a8a856751b13354444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31200 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�BKG^o$Dx~b1WBaEK12FFGS4fi+ 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

@2&xkmWJEP zuLhEKHLSa$a^bcP<^gQoqOkD~!u=Y7DF->loL(B5(M}1Gb3)U9U#ik&E%F+~A^P`m zTUB;_+LR-CC|L9Ll-j2D0gJWHnF8>^-&SP3l=Q4NhLf9^Q)=d|ECo1vh^+5Jt6YXS zU>v4+LA`V{7Utu%fe>87a*Ejzq{ZlT54^+dMB+$reXi5+|PFd;93n?NnXGMypux+L{vCEktPlTm!~T`2BAU+Mct`d@_Y`}`c9Xh6pox};R3 zZp7D}{%1bEY$4{nH#@59DLjk)Mh?;xXxiH%WPDJF!*C-1ezC_aLErC(upnr0h;x_4ZSgAKPQ`N2szL!gCdgwZ); zyORxd>PEEV-7Tn{+=xdaD-z`&nr}lbN#pQc3CNZ1fg^_y5e{`vrpY`%5^TeXdht`} zpcwsiK=>t|Z76>J_q*V^sa3e5EjQSH2Es2V0t?~50gVTgvOlc;pg&6?kGf!RR{S4~ zj%S3}Hq% z(LU67hV62YigVZr;RuyW+DB{dLq*jDHO@$lO76hx#eW{P`QdzAdx9SaHfq!v*bs*F4d7 z+)NmCZpT@kJ*L@rPGCpP%)<>|+CguP&>k;iAA8W8qpp~r6<~7jKz-oKJyit#4ichC zwWP!L?wWQve|tE&#I0?J$$bjnCdK-$(+f001N)#j*nc&FLIr(Mnt1_!61?qq#iGsH ze$-{D2oa+Kr`zYl&a~e<<(d=(yJtsk_NhO39HS{U#y<{Wuq@(dKEC(%BCH0>cs;5n zAF~}E!~>@(rDE^gqy%y-_%C*6$aA4WdaM1bd?3K!pqYZW2_hNwh*=sVHK2_9{)EnK zX^P%*!=+Ni{Ion9ENu$*SWg#2O&`CWW$k^KUK&U*^EVDN5=Q+>t(COfZ?@}h`|!@C z$mIofYxpj4Pn%baXEZfhUm

SWv%r`P$1jG7cDLa|$zlX_DI?^-f5auc$!o-(wEi z`MwENhebv7_;#RlzMvPivn1*L)*G|x@{Ll^##d{ThF&GdxQW3}8dXF^zQ=C8(V?N! z&{63{mbV%7o^1Djtd63jnJrHIVn5F>%#}h!|9=0bUN#wJ{kCi|{+G{rF}mQEzrU94 zyLfh>Z2S$iB{oj-v&WT|i}!z@q%0rsN1frxjlKI$8TY<`UNSkoYzN!@bY6%iX^xeyN2`|HXj)OR2;HFLL>dq;c5P zUgB1L3U%b3%p`6`#VcQ*n>hMJ)NCQ))+G86+oL0@Z8QEDs=ioM9G<43(wZ_s@^^(7 zZgWj||JeIBxX{zC)gS7z=5g7ETlA;awR19Z^ao(Uj%xe-V*29G3^*&|`PboVPGKW= zgfOGbiw@jRWAzeV9AXobLC##+AtEA97#UKIn|QGJ)BXrt{JCv$e%W+bmK&g1wYTe9 z#7j*sI5tD%xk{tpg1NLVw@S^YQ^-#JFh(cp%B!an1BM<)Z_D-=$!Nhz&vK2$f@=W}`9q_(-^lYPhRNw3;M4eMM$7QbH;c)isPGTd z{$O$z#s1c8k)*EB=$oHSIZkQK7TgoV{ny)QrpgQsdjo&3P z{M-l}9R??e)!}91buJ`QP#@Uy{k>)5oF-O*y2N=;;%C$%PtvBz=Zo4#GK6^QTX*-N oxV^ljkD;4`+^x>;M1& diff --git a/modules/web_server/static/images/icons/trash_white.png b/modules/web_server/static/images/icons/trash_white.png deleted file mode 100644 index b2c040cbae16afe4d6275f8ed318a46106a1c334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31116 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 z 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 LOLXb+3%C9srm2VK diff --git a/modules/web_server/static/images/icons/types/bms_serial.png b/modules/web_server/static/images/icons/types/bms_serial.png deleted file mode 100644 index 9d26fd2fd304fc2db9caf4f53d7a01e3ad595cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10218 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 diff --git a/modules/web_server/static/images/icons/types/inverter.png b/modules/web_server/static/images/icons/types/inverter.png deleted file mode 100644 index 0b5bfb68b125d404a4b86ba09cb4674ae7ac00ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmV-(1C0EMP)d`W)$1Ooz_0Ns11s_31I0U@bB)k@QsRaKlI05n`m;m^Ga2lyi*sJe?n{R>( z$_q(2D#}HyH$exyNSS5NB{EGBz;F{39L;6Db9!d}7G%HYntXwm2}P+u+-4MBW3Fkb=)jV36=La9Ev>m>3F-_VI|a zI9r9~MH~%uFiYHUlrMrR7P7!>1O+F( zcic}WZB_8MpV-xiJ*Oa!*q2~$JAs*dt3S6S?m6GI8ruyO^e52kV6Be1&wC*g+F~HX z2^{L{32i#RZSM2H5Rz~3{oDGxpi?lO!0ibTFL146u?Ng=(A6;*ATEIK`AScN@&<*Z zwOuj5^bgQia6?lR8h_5EKR47h>e+FlrnTsI)3A(y(2bk-O$zQ?wDyV}BZlCuMEs-HwXE)o|l7hbeKVd95 zS61$=3Q={@u5`F>KZ*^xy1RaA(<^ge>@DM({V=ooB-pHT%Gi@bgE3 z-?;{3Dk1{?r*iwPxg2gT4%zAw;uLTwBy3;MK`bmR%+TB4C)jge;6cNHAg`4Ejh|uI zQf<o1Mc```Uc|$P9CDdK(Zra?Ie&YlXoA^}K`?2dWIePVfC_&+q;Bw&-RRcG+1C z87DJx*ZF0w^J7X_oH?BrLNg_%*Y0Xt6rL|`_;>cDFVh#;&Hl{zlUrAoez$y{!}jkA zjrzaUJTzk7HZoB;&^sA*X!5MK

^#&rjVBiM}tB4p_Qz5c)TK*MdxHg%;6k0hb; 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 diff --git a/modules/web_server/static/images/icons/warning.png b/modules/web_server/static/images/icons/warning.png deleted file mode 100644 index 726dc2fa87ceb27100402b8f58fb79ecc74f34f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55916 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 diff --git a/modules/web_server/static/images/icons/workflow.png b/modules/web_server/static/images/icons/workflow.png deleted file mode 100644 index f45e3c32459e720b9a723ab9c5eb72bc5ce718ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7687 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 diff --git a/modules/web_server/static/images/touch-icon.png b/modules/web_server/static/images/touch-icon.png deleted file mode 100644 index 569be78be34eb27ea2b656e7a8dde9d1a2c6ca6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%U;1OBOzz|mh!i)^ZYqkId zB}-f*N`mv#O3D+9QW?t2%k?tzvWt@w3sUv+i_&Mmvyoz8U_RpM;uumf=k1+?osS(v zTmvf$M540So{;HlE;NV>mzpQRv&jDL_c;tp*qgksx^3TjEuDGNKVN=^XB-SIoU}oA zm$Se5ZD*T!B`Uk>kjDM`Z@;Y>9cD0)jBfnUKe+BojotRg7R%B z8@bEIdY_jw704VfoA>++&%OuMXNy=H3>XIzZMYrv+Sqnc&i(H%ITv4xx-5KY4ugUZ z>FAA}ZNqDu`RCtS^u3h)qr~)~UFP`4xz8(YroEv+3^1Nlh?=BZe6A> w@QjNgk%@Hl_&>`RZ=D&BSxDDPylwv(-?AEJ7B>0p1!j5%Pgg&ebxsLQ0Ac -

{{ title }}

-
- {%- for item in data -%} - {{ block_info_item(item, data[item]) }} - {%- endfor -%} -
- -{%- endmacro %} diff --git a/modules/web_server/templates/components/block_info/block_info.sass b/modules/web_server/templates/components/block_info/block_info.sass deleted file mode 100644 index 642cfc8..0000000 --- a/modules/web_server/templates/components/block_info/block_info.sass +++ /dev/null @@ -1,22 +0,0 @@ -.block-info - @extend %tile - width: calc(50% - 20px) - margin-top: 20px - margin-right: 0 - padding: 20px 25px - - &:nth-child(2n) - margin-left: 40px - - &__title - margin-top: 0 - margin-bottom: 8px - font-size: 22px - - @media (max-width: 1300px) - width: 100% - - &:nth-child(2n) - margin-left: 0 - -@import 'block_info_item/block_info_item' diff --git a/modules/web_server/templates/components/block_info/block_info_item/block_info_item.html b/modules/web_server/templates/components/block_info/block_info_item/block_info_item.html deleted file mode 100644 index 7ceb7b7..0000000 --- a/modules/web_server/templates/components/block_info/block_info_item/block_info_item.html +++ /dev/null @@ -1,6 +0,0 @@ -{%- macro block_info_item(title, description) -%} -
-

{{ title }}

-

{{ description }}

-
-{%- endmacro -%} diff --git a/modules/web_server/templates/components/block_info/block_info_item/block_info_item.sass b/modules/web_server/templates/components/block_info/block_info_item/block_info_item.sass deleted file mode 100644 index eae639c..0000000 --- a/modules/web_server/templates/components/block_info/block_info_item/block_info_item.sass +++ /dev/null @@ -1,31 +0,0 @@ -.block-info-item - display: inline-block - width: 50% - vertical-align: top - box-sizing: border-box - - &:nth-child(2n+1) - padding-right: 10px - - &:nth-child(2n) - padding-left: 10px - - &__title - margin-top: 0 - margin-bottom: 3px - padding-top: 15px - color: unset - font-size: 17px - font-weight: bold - line-height: 1.2 - - &__description - margin: 6px 0 0 - color: $grey-777 - - @media (max-width: 550px) - width: 100% - - &:nth-child(n) - padding-right: 0 - padding-left: 0 diff --git a/modules/web_server/templates/components/block_ladder/block_ladder.sass b/modules/web_server/templates/components/block_ladder/block_ladder.sass deleted file mode 100644 index 6a39fce..0000000 --- a/modules/web_server/templates/components/block_ladder/block_ladder.sass +++ /dev/null @@ -1,39 +0,0 @@ -.block-ladder - @extend %tile - position: relative - flex: 0 0 calc(25% - 19px) - max-height: 280px - margin-top: 20px - margin-right: 25px - padding-bottom: 15px - padding-left: 20px - overflow: auto - - &:nth-child(4n) - margin-right: 0 - - &__title - margin-right: 50px - - &__corner-button - display: block - position: absolute - top: 19px - right: 20px - width: 25px - cursor: pointer - opacity: .6 - - @media (max-width: 1300px) - flex: 0 0 calc(50% - 13px) - - &:nth-child(2n) - margin-right: 0 - - @media (max-width: 550px) - flex: 0 0 100% - max-height: unset - margin-right: 0 - - -@import 'block_ladder_item/block_ladder_item' diff --git a/modules/web_server/templates/components/block_ladder/block_ladder_item/block_ladder_item.sass b/modules/web_server/templates/components/block_ladder/block_ladder_item/block_ladder_item.sass deleted file mode 100644 index 1277c67..0000000 --- a/modules/web_server/templates/components/block_ladder/block_ladder_item/block_ladder_item.sass +++ /dev/null @@ -1,19 +0,0 @@ -.block-ladder-item - display: inline-block - width: calc(100% - 20px) - margin-bottom: 6px - padding: 5px 8px - //border: solid 1px $info-fg - border: 0 - //border-left: solid 3px $info-fg - border-radius: 10px - font-size: 14px - font-weight: bold - text-align: left - cursor: pointer - opacity: .5 - - &:hover - background: $info-bg - color: $grey-444 - opacity: 1 diff --git a/modules/web_server/templates/components/block_list/block_list.sass b/modules/web_server/templates/components/block_list/block_list.sass deleted file mode 100644 index 60deecf..0000000 --- a/modules/web_server/templates/components/block_list/block_list.sass +++ /dev/null @@ -1,26 +0,0 @@ -.block-list - &__add-button - @extend %tile - width: 69px - min-width: auto - max-width: unset - height: 69px - margin-top: 20px - margin-right: 20px - border-radius: 100% - background-image: url('/static/images/icons/plus.png') - background-repeat: no-repeat - background-position: center - background-size: 60% - cursor: pointer - opacity: .8 - - &:hover - transform: scale(1.03) - - @media (max-width: 550px) - display: block - width: 69px - margin: 20px auto - -@import 'block_list_item/block_list_item' diff --git a/modules/web_server/templates/components/block_list/block_list_item/block_list_item.html b/modules/web_server/templates/components/block_list/block_list_item/block_list_item.html deleted file mode 100644 index cecea94..0000000 --- a/modules/web_server/templates/components/block_list/block_list_item/block_list_item.html +++ /dev/null @@ -1,24 +0,0 @@ -{%- macro block_list_item(title, description="", icon="", index="", modifier="", onclick="", number="") -%} -
- - {% if icon %} - {{ title }} icon - {% endif %} - -
{{ title }}{% if index %} {{ index }}{% endif %}
- -

- {{ description }} -

- - {% if number %} - {{ number }} - {% endif %} - -
-{%- endmacro -%} diff --git a/modules/web_server/templates/components/block_list/block_list_item/block_list_item.sass b/modules/web_server/templates/components/block_list/block_list_item/block_list_item.sass deleted file mode 100644 index 89eec6d..0000000 --- a/modules/web_server/templates/components/block_list/block_list_item/block_list_item.sass +++ /dev/null @@ -1,75 +0,0 @@ -.block-list-item - @extend %tile - position: relative - min-width: 190px - max-width: 280px - margin-top: 20px - margin-right: 20px - padding: 15px - cursor: pointer - overflow: hidden - - &:hover - transform: scale(1.03) - - &--green - border-left: solid 5px $green - - &--red - border-left: solid 5px $red - - &--with-icon - padding-left: 58px - - &--with-number - padding-right: 55px - - &__icon - position: absolute - left: 13px - width: 38px - opacity: .6 - - &__title - margin-right: 5px - margin-bottom: 0 - color: $grey-555 - font-size: 15px - font-weight: bolder - line-height: 1.2 - white-space: nowrap - - &--number - @extend %small-id - min-width: 20px - margin-left: 3px - font-size: 12px - line-height: 19px - - &__description - height: 18px - margin-top: 2px - margin-bottom: 0 - font-size: 14px - white-space: nowrap - - &__number - position: absolute - top: 21px - right: 17px - min-width: 17px - padding: 4px - border: solid 1px $silver-ccc - border-radius: 5px - background: $green-light - font-weight: bold - line-height: 17px - text-align: center - - &--white-edge - @extend %white-edge - - @media (max-width: 550px) - width: 100% - max-width: unset - margin-left: 0 diff --git a/modules/web_server/templates/components/block_small_chart/block_small_chart.sass b/modules/web_server/templates/components/block_small_chart/block_small_chart.sass deleted file mode 100644 index 3093be2..0000000 --- a/modules/web_server/templates/components/block_small_chart/block_small_chart.sass +++ /dev/null @@ -1,12 +0,0 @@ -.block-small-chart - @extend .block-info - min-height: 210px - cursor: pointer - - &__title - @extend .block-info__title - - &__chart - max-height: 100px - margin-top: 30px - margin-bottom: 10px diff --git a/modules/web_server/templates/components/button/button.html b/modules/web_server/templates/components/button/button.html deleted file mode 100644 index 70893dd..0000000 --- a/modules/web_server/templates/components/button/button.html +++ /dev/null @@ -1,8 +0,0 @@ -{% macro button(text, onclick="", icon="", modifiers=[]) -%} -
- {%- if icon -%} - {{ icon }} icon - {%- endif -%} - {{ text }} -
-{%- endmacro %} diff --git a/modules/web_server/templates/components/button/button.sass b/modules/web_server/templates/components/button/button.sass deleted file mode 100644 index ad25f3c..0000000 --- a/modules/web_server/templates/components/button/button.sass +++ /dev/null @@ -1,72 +0,0 @@ -.button - $button: & - display: inline-block - margin-top: 10px - margin-right: 10px - margin-bottom: 17px - padding: 8px 15px - border: 0 - border-radius: 20px - background: $white-fff - color: $grey-555 - font-size: 16px - font-weight: bold - line-height: 24px - box-shadow: 1px 1px 3px $shadow - - cursor: pointer - - &:hover - background: $white-main - box-shadow: 1px 1px 3px $shadow - - &__icon - width: 17px - margin-top: 4px - margin-right: 8px - opacity: .7 - vertical-align: top - - &--small - min-width: 50px - margin-top: 0 - margin-bottom: 0 - padding: 5px 13px - border-radius: 5px - background: $blue - color: $white-fff - font-size: 14px - text-align: center - - &:hover - background: $blue - opacity: .9 - - #{$button}__icon - width: 14px - margin-top: 5px - opacity: 1 - - &--red - background-color: $red - - &:hover - background-color: $red - - &--form - display: block - margin-bottom: 5px - padding: 10px - border-radius: 5px - background-color: $white-blue - box-shadow: unset - cursor: pointer - - &:hover - background-color: $info-bg - box-shadow: unset - - #{$button}__icon - width: 25px - margin-top: 0 - opacity: .65 diff --git a/modules/web_server/templates/components/checkbox_list/checkbox_list.sass b/modules/web_server/templates/components/checkbox_list/checkbox_list.sass deleted file mode 100644 index 13ca7da..0000000 --- a/modules/web_server/templates/components/checkbox_list/checkbox_list.sass +++ /dev/null @@ -1 +0,0 @@ -@import 'checkbox_list_item/checkbox_list_item' diff --git a/modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.html b/modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.html deleted file mode 100644 index 709f15c..0000000 --- a/modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.html +++ /dev/null @@ -1,21 +0,0 @@ -{%- macro checkbox_list_item(attribute, title="", checked="", data="", name="") -%} - -{%- endmacro -%} diff --git a/modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.sass b/modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.sass deleted file mode 100644 index d3d8ec0..0000000 --- a/modules/web_server/templates/components/checkbox_list/checkbox_list_item/checkbox_list_item.sass +++ /dev/null @@ -1,35 +0,0 @@ -.checkbox-list-item - $this: & - display: block - margin-bottom: 5px - padding: 10px - border-radius: 5px - background-color: $white-blue - cursor: pointer - - &:hover - box-shadow: inset 0 0 0 2px $info-bg - - &__input - $size: 20px - width: $size - height: $size - margin-right: 12px - - &--checked - background-color: $info-bg - box-shadow: unset - - %text - position: relative - top: 3px - vertical-align: super - - &__text - @extend %text - - &__data - @extend %text - margin-right: 10px - float: right - color: $blue diff --git a/modules/web_server/templates/components/defaults.sass b/modules/web_server/templates/components/defaults.sass deleted file mode 100644 index e95f82e..0000000 --- a/modules/web_server/templates/components/defaults.sass +++ /dev/null @@ -1,63 +0,0 @@ -@import 'fonts' -@import 'variables' - - -body - position: relative - height: 100vh - min-height: 100vh - margin: 0 - padding-left: 325px - background-color: $white-bg - color: $grey-555 - font-family: $font1 - - @media (max-width: 900px) - padding-left: 0 - - -%tile - display: inline-block - transition: transform ease-in-out 50ms - border-radius: 15px - background-color: $white-fff - box-shadow: 2px 2px 3px $shadow - vertical-align: top - box-sizing: border-box - -%white-edge - &::before - position: absolute - top: 0 - right: 0 - width: 0 - height: 100% - background: $white-fff - box-shadow: 0 0 15px 20px $white-fff - content: '' - -%small-id - display: inline-block - position: relative - min-width: 20px - padding: 0 4px - border-radius: 6px - background-color: $silver-aaa - color: $white-fff - text-align: center - vertical-align: top - box-sizing: border-box - -a - outline: none - text-decoration: none - - &:hover - text-decoration: underline - -img - image-rendering: -webkit-optimize-contrast - -hr - border: 0 - border-bottom: 1px solid $silver-ccc diff --git a/modules/web_server/templates/components/dialog/dialog.html b/modules/web_server/templates/components/dialog/dialog.html deleted file mode 100644 index e6f9116..0000000 --- a/modules/web_server/templates/components/dialog/dialog.html +++ /dev/null @@ -1,6 +0,0 @@ -

- {% block dialog_title %}{% endblock %} -

-
- {% block dialog_form %}{% endblock %} -
diff --git a/modules/web_server/templates/components/dialog/dialog.sass b/modules/web_server/templates/components/dialog/dialog.sass deleted file mode 100644 index ceb4a40..0000000 --- a/modules/web_server/templates/components/dialog/dialog.sass +++ /dev/null @@ -1,52 +0,0 @@ -.dialog - $this: & - - &__container - display: flex - position: fixed - top: 0 - left: 0 - width: 100% - height: 100% - transition: opacity .2s cubic-bezier(.62, 1.71, 1, 1.64), margin-top .2s step-start - transition-timing-function: cubic-bezier(.62, 1.71, 1, 1.64), steps(1, start) - background-color: $black-03 - z-index: 100 - - &--hidden - margin-top: -1000% - transition-timing-function: cubic-bezier(.62, 1.71, 1, 1.64), step-end - opacity: 0 - - #{$this}__window - transform: scale(0) - opacity: 0 - - &__window - position: relative - width: 600px - min-height: 400px - max-height: calc(100% - 100px) - padding: 25px 30px - transition: .2s cubic-bezier(.5, -.7, .6, 1) - border: 0 - border-radius: 20px - background-color: $white-fff - color: $grey-555 - overflow: auto - box-sizing: border-box - - &__title - margin-top: 0 - color: $grey-555 - font-size: 22px - font-weight: bold - - &--number - @extend %small-id - top: 3px - min-width: 22px - margin-left: 3px - padding: 0 7px 0 8px - font-size: 14px - line-height: 22px diff --git a/modules/web_server/templates/components/dialog/dialog_container.html b/modules/web_server/templates/components/dialog/dialog_container.html deleted file mode 100644 index b944a66..0000000 --- a/modules/web_server/templates/components/dialog/dialog_container.html +++ /dev/null @@ -1,5 +0,0 @@ -
- - {% include "components/dialog/dialog.html" %} - -
diff --git a/modules/web_server/templates/components/fonts.sass b/modules/web_server/templates/components/fonts.sass deleted file mode 100644 index 0a10b3f..0000000 --- a/modules/web_server/templates/components/fonts.sass +++ /dev/null @@ -1,44 +0,0 @@ -@font-face - font-family: Cantarell - font-weight: 200 - src: url('/static/fonts/Cantarell-Thin.otf') format('opentype') - -@font-face - font-family: Cantarell - font-weight: 300 - src: url('/static/fonts/Cantarell-Light.otf') format('opentype') - -@font-face - font-family: Cantarell - src: url('/static/fonts/Cantarell-Regular.otf') format('opentype') - -@font-face - font-family: Cantarell - font-weight: bold - src: url('/static/fonts/Cantarell-Bold.otf') format('opentype') - -@font-face - font-family: Cantarell - font-weight: 900 - src: url('/static/fonts/Cantarell-ExtraBold.otf') format('opentype') - -@font-face - font-family: IndieFlower - src: url('/static/fonts/IndieFlower-Regular.ttf') format('truetype') - -@font-face - font-family: 'Roboto Mono' - src: url('/static/fonts/RobotoMono-Regular.ttf') format('truetype') - -@font-face - font-family: 'Roboto Mono' - font-weight: 700 - src: url('/static/fonts/RobotoMono-Medium.ttf') format('truetype') - -@font-face - font-family: 'Roboto Mono' - font-weight: 900 - src: url('/static/fonts/RobotoMono-Bold.ttf') format('truetype') - -$font1: Cantarell, Verdana, sans-serif -$font2: 'Roboto Mono', monospace diff --git a/modules/web_server/templates/components/form/form.sass b/modules/web_server/templates/components/form/form.sass deleted file mode 100644 index 070daa7..0000000 --- a/modules/web_server/templates/components/form/form.sass +++ /dev/null @@ -1,16 +0,0 @@ -.form-group - margin-bottom: 20px - - &__title - display: block - margin-bottom: 5px - color: $blue - font-size: 13px - font-weight: bold - text-transform: uppercase - opacity: .7 - - &__textarea - min-height: 50px - max-height: 150px - resize: vertical diff --git a/modules/web_server/templates/components/input_text/input_text.sass b/modules/web_server/templates/components/input_text/input_text.sass deleted file mode 100644 index 8f8d745..0000000 --- a/modules/web_server/templates/components/input_text/input_text.sass +++ /dev/null @@ -1,15 +0,0 @@ -.input-text - width: 100% - padding: 7px 10px - border: solid 2px $info-bg - border-radius: 5px - outline: none - background-color: $white-fff - color: $grey-555 - font-size: 16px - box-sizing: border-box - - &:focus - border-color: $blue - background-color: $white-blue - color: $grey-444 diff --git a/modules/web_server/templates/components/inspector-chart-view/inspector-chart-view.sass b/modules/web_server/templates/components/inspector-chart-view/inspector-chart-view.sass deleted file mode 100644 index 7fa28ff..0000000 --- a/modules/web_server/templates/components/inspector-chart-view/inspector-chart-view.sass +++ /dev/null @@ -1,91 +0,0 @@ -.inspector-chart-view - position: fixed - top: 0 - left: 0 - width: calc(100% - 50px) - height: calc(100% - 50px) - margin: 25px - transition: .4s cubic-bezier(.5, -.7, .6, 1) - border-radius: 20px - background: $white-fff - box-shadow: 0 0 0 7000px $black-01 - z-index: 150 - - @media (max-width: 900px) - width: 100% - height: 100% - margin: 0 - border-radius: 0 - box-shadow: none - - - &--hidden - margin-top: -1000% - transform: scale(0) - transition-timing-function: cubic-bezier(.62, 1.71, 1, 1.64), step-end - opacity: 0 - - &__close-button - position: absolute - top: 15px - right: 25px - width: 25px - cursor: pointer - opacity: .6 - - &:hover - opacity: 1 - - &__settings-button - position: absolute - top: 15px - left: 25px - width: 25px - cursor: pointer - opacity: .6 - - &:hover - opacity: 1 - - &__chart - height: 100% - -.inspector-config-panel - display: none - position: absolute - width: 330px - max-height: 100% - padding: 30px 20px 15px - transition: ease-in-out 100ms - border-radius: 20px - background: $white-fff - box-shadow: 0 0 5px $silver-ccc - overflow: auto - box-sizing: border-box - - @media (max-width: 900px) - top: 0 - left: 0 - width: 100% - height: 100% - padding: 40px 20px 20px - border-radius: 0 - - - &__close-button - position: absolute - top: 15px - right: 25px - width: 20px - cursor: pointer - opacity: .6 - - &:hover - opacity: 1 - - @media (max-width: 900px) - width: 25px - - - &__section-title - font-size: 20px diff --git a/modules/web_server/templates/components/main.sass b/modules/web_server/templates/components/main.sass deleted file mode 100644 index f2e0a68..0000000 --- a/modules/web_server/templates/components/main.sass +++ /dev/null @@ -1,42 +0,0 @@ -@import 'defaults' - -@import 'navbar/navbar' -@import 'notifications/notifications' -@import 'block_info/block_info' -@import 'block_list/block_list' -@import 'button/button' -@import 'table/table' -@import 'dialog/dialog' -@import 'checkbox_list/checkbox_list' -@import 'form/form' -@import 'input_text/input_text' -@import 'block_ladder/block_ladder' -@import 'workflow/workflow' -@import 'block_small_chart/block_small_chart' -@import 'inspector-chart-view/inspector-chart-view' - - -.content-container - height: 100% - padding: 20px 35px - overflow: auto - box-sizing: border-box - - &__title - margin: 7px 0 - font-size: 22px - - &--with-margin - margin-top: 30px - - &__smaller-title - margin-bottom: 0 - font-size: 17px - - @media (max-width: 900px) - padding: 20px - - -.flex-wrap-container - display: flex - flex-wrap: wrap diff --git a/modules/web_server/templates/components/navbar/navbar.html b/modules/web_server/templates/components/navbar/navbar.html deleted file mode 100644 index 74592ce..0000000 --- a/modules/web_server/templates/components/navbar/navbar.html +++ /dev/null @@ -1,21 +0,0 @@ -{% from 'components/navbar/navbar_item/navbar_item.html' import navbar_item %} - -Menu icon - - \ No newline at end of file diff --git a/modules/web_server/templates/components/navbar/navbar.sass b/modules/web_server/templates/components/navbar/navbar.sass deleted file mode 100644 index bba8143..0000000 --- a/modules/web_server/templates/components/navbar/navbar.sass +++ /dev/null @@ -1,43 +0,0 @@ -.navbar - position: fixed - top: 0 - left: 0 - width: 325px - height: 100% - padding: 20px - background-color: $white-main - overflow: auto - z-index: 100 - box-sizing: border-box - - &__title - margin: 0 0 40px - padding-left: 10px - font-size: 30px - - &--smaller - margin-bottom: 0 - color: $silver-999 - font-size: 14px - letter-spacing: 1px - text-transform: uppercase - - &__logo - width: 27px - margin-bottom: -3px - margin-left: 3px - opacity: .7 - - &__items - margin-top: 8px - padding-left: 0 - - @media (max-width: 900px) - display: none - width: 100% - - &--visible - display: unset - -@import 'navbar_button' -@import 'navbar_item/navbar_item' diff --git a/modules/web_server/templates/components/navbar/navbar_button.sass b/modules/web_server/templates/components/navbar/navbar_button.sass deleted file mode 100644 index 8c089d0..0000000 --- a/modules/web_server/templates/components/navbar/navbar_button.sass +++ /dev/null @@ -1,12 +0,0 @@ -.navbar-button - display: none - position: fixed - top: 22px - right: 18px - width: 38px - cursor: pointer - opacity: .6 - z-index: 1 - - @media (max-width: 900px) - display: block diff --git a/modules/web_server/templates/components/navbar/navbar_item/navbar_item.html b/modules/web_server/templates/components/navbar/navbar_item/navbar_item.html deleted file mode 100644 index 3a9e1ad..0000000 --- a/modules/web_server/templates/components/navbar/navbar_item/navbar_item.html +++ /dev/null @@ -1,7 +0,0 @@ -{% macro navbar_item(title, description, id) -%} - -{%- endmacro %} diff --git a/modules/web_server/templates/components/navbar/navbar_item/navbar_item.sass b/modules/web_server/templates/components/navbar/navbar_item/navbar_item.sass deleted file mode 100644 index 5ac8e71..0000000 --- a/modules/web_server/templates/components/navbar/navbar_item/navbar_item.sass +++ /dev/null @@ -1,36 +0,0 @@ -.navbar-item - display: block - height: 70px - padding: 10px - transition: background-color ease-in-out 200ms - border-radius: 10px - cursor: pointer - box-sizing: border-box - - &:hover - box-shadow: 0 0 0 2px inset $white-bg - - &--active - background-color: $white-bg - - &__icon - width: 50px - margin-right: 10px - padding: 8px - float: left - border-radius: 25% - box-sizing: border-box - - @each $bind in $bindings - &--#{nth($bind, 1)} - background-color: #{nth($bind, 2)} - - - &__title - margin: 4px 0 0 - font-size: 16px - font-weight: 600 - - &__description - margin: 3px 0 0 - font-size: 13px diff --git a/modules/web_server/templates/components/notifications/notification_item/notification_item.sass b/modules/web_server/templates/components/notifications/notification_item/notification_item.sass deleted file mode 100644 index 514427d..0000000 --- a/modules/web_server/templates/components/notifications/notification_item/notification_item.sass +++ /dev/null @@ -1,86 +0,0 @@ -.notification-item - position: relative - left: 0 - margin: 15px - padding: 0 10px - transition: ease-in-out 200ms - transition-property: opacity, left - border-radius: 7px - background: $info-bg - color: $info-fg - opacity: 1 - - $this: & - - &__icon - width: 35px - height: 35px - margin-top: 15px - margin-right: 10px - margin-left: 5px - float: left - background-image: url('/static/images/icons/info_blue.png') - background-position: center - background-size: cover - opacity: .5 - - &--error - background-image: url('/static/images/icons/ban.png') - - &--warning - background-image: url('/static/images/icons/warning.png') - - &--success - background-image: url('/static/images/icons/success.png') - - &--error - background: $error-bg - color: $error-fg - - &--warning - background: $warning-bg - color: $warning-fg - - &--success - background: $success-bg - color: $success-fg - - &__title - display: block - margin-bottom: 3px - padding-top: 10px - font-size: 16px - font-weight: bold - - &__description - margin-top: 0 - padding-bottom: 11px - padding-left: 50px - font-size: 14px - line-height: 20px - - &__close-button - position: absolute - top: 15px - right: 15px - width: 11px - height: 11px - transition: opacity 200ms ease-in-out - background-image: url('/static/images/icons/close.png') - background-position: center - background-size: cover - cursor: pointer - opacity: .1 - - &:hover - transform: scale(1.1) - - &:hover - #{$this}__close-button - opacity: .6 - - &--active - left: -325px - - &--removed - opacity: 0 diff --git a/modules/web_server/templates/components/notifications/notifications.html b/modules/web_server/templates/components/notifications/notifications.html deleted file mode 100644 index 99a71b0..0000000 --- a/modules/web_server/templates/components/notifications/notifications.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
-
-
-
-
- info - error - error - error -
-
diff --git a/modules/web_server/templates/components/notifications/notifications.sass b/modules/web_server/templates/components/notifications/notifications.sass deleted file mode 100644 index 66c15e3..0000000 --- a/modules/web_server/templates/components/notifications/notifications.sass +++ /dev/null @@ -1,47 +0,0 @@ -.notifications - &__button - display: none - position: fixed - top: 24px - right: 26px - width: 34px - height: 34px - border: solid 3px $grey-555 - border-radius: 20px - font-size: 20px - font-weight: bold - line-height: 27px - text-align: center - cursor: pointer - z-index: 1 - box-sizing: border-box - - &--active - display: unset - background: $grey-555 - color: $white-bg - - @media (max-width: 900px) - right: 70px - - - &__wrapper - position: fixed - top: 0 - right: -325px - width: 325px - height: 100% - transition: right ease-in-out 200ms - background: $white-main - z-index: 2 - - &--visible - right: 0 - - .notification-item--active - left: 0 - - &__resources - display: none - -@import 'notification_item/notification_item' diff --git a/modules/web_server/templates/components/table/table.sass b/modules/web_server/templates/components/table/table.sass deleted file mode 100644 index 1b4deb6..0000000 --- a/modules/web_server/templates/components/table/table.sass +++ /dev/null @@ -1,156 +0,0 @@ -.table - @extend %tile - display: inline-table - width: 100% - margin-top: 20px - font-size: 15px - border-collapse: collapse - overflow: hidden - - &__row - - &--header - box-shadow: 0 0 8px $white-eee - - &:nth-child(2n+3) - background: $white-blue - - &__cell - padding: 10px 0 - text-align: left - box-sizing: border-box - - &--title - padding: 12px 0 - font-size: 12px - font-weight: 800 - letter-spacing: 1px - text-transform: uppercase - - // Custom elements - - &--status - width: 140px - padding-left: 22px - font-size: 12px - text-transform: uppercase - - &-in - color: $green - font-weight: bold - - &-out - color: $blue - font-weight: bold - - &--type - width: 80px - - &-span - display: inline-block - width: 60px - border-radius: 3px - background: $blue - color: $white-fff - font-size: 12px - font-weight: bold - line-height: 23px - text-align: center - text-transform: uppercase - - &-json - background: $orange - - &-event - background: $purple - - &-text - background: $grey-777 - - &--time - width: 90px - - &--handler - min-width: 250px - - &-title - font-weight: bold - - &-icon - width: 30px - margin-top: -14px - margin-bottom: -10px - opacity: .6 - - &-id - @extend %small-id - margin-left: 4px - background-color: $silver-ccc - font-size: 12px - font-weight: bold - line-height: 19px - - &--data - $data: & - max-width: calc(100vw - 950px) - - &-content - position: relative - top: -2px - font-family: $font2 - font-size: 12px - white-space: nowrap - - &-event - top: unset - color: $purple - font-weight: 900 - - &:hover - #{$data}-content - white-space: normal - - &__inspect-button - width: 20px - margin-top: -7px - margin-bottom: -5px - margin-left: 6px - cursor: pointer - opacity: .6 - filter: sepia(100%) saturate(100) hue-rotate(-150deg) brightness(1) - - &:hover - opacity: .8 - - @media (max-width: 1300px) - display: block - position: relative - - &__body - display: block - - &__row - display: block - position: relative - width: 100% - max-width: 100% - - &--header - display: none - - &__cell - &--status - width: auto - padding-right: 20px - - &--handler - display: block - margin-left: 15px - padding: 0 - - &--data - max-width: 100% - padding: 20px 20px 10px - - &-content - display: block diff --git a/modules/web_server/templates/components/variables.sass b/modules/web_server/templates/components/variables.sass deleted file mode 100644 index 36b5945..0000000 --- a/modules/web_server/templates/components/variables.sass +++ /dev/null @@ -1,43 +0,0 @@ -// Colors schemes - -$white-main: #f9fafc -$white-blue: #f8f9ff -$white-bg: #f1f0f6 -$green-light: #cfffc3 - -$white-fff: #fff -$white-eee: #eee -$white-ddd: #ddd -$silver-ccc: #ccc -$silver-aaa: #aaa -$silver-999: #999 -$grey-777: #777 -$grey-555: #555 -$grey-444: #444 - -$black-01: rgba(0, 0, 0, .1) -$black-03: rgba(0, 0, 0, .3) - -$purple: #7233ff -$blue: #299bec -$green: #65c44c -$orange: #f5a65b -$salmon: #fd8f64 -$red: #ff6f6f -$yellow: #ffcd41 - -$shadow: $white-ddd - -// Notifications - -$info-bg: #d8e6ff -$info-fg: #35657b -$error-bg: #ecc8c5 -$error-fg: #ab1b19 -$warning-bg: #fbeebd -$warning-fg: #b57c1c -$success-bg: #d6f0cb -$success-fg: #407729 - - -$bindings: [['overview', $purple], ['inspector', $blue], ['actions', $green], ['data', $orange], ['handlers', $salmon], ['details' $yellow]] diff --git a/modules/web_server/templates/components/workflow/workflow.sass b/modules/web_server/templates/components/workflow/workflow.sass deleted file mode 100644 index 86ab0b6..0000000 --- a/modules/web_server/templates/components/workflow/workflow.sass +++ /dev/null @@ -1,52 +0,0 @@ -@import 'workflow_item/workflow_item' - -.workflow - position: relative - padding-right: 40px - padding-bottom: 15px - border-bottom: solid 1px $white-ddd - - &:last-child - border-bottom: unset - - %box - display: inline-block - width: 40px - height: 40px - margin-top: 15px - margin-left: 5px - padding: 5px - border-radius: 10px - vertical-align: middle - box-sizing: border-box - - &__id - @extend %box - margin-top: 15px - margin-right: 5px - border: solid 1px $silver-ccc - font-size: 18px - font-weight: bold - line-height: 27px - text-align: center - - &__add-item - @extend %box - border: solid 1px $silver-ccc - background-color: $white-fff - cursor: pointer - opacity: .5 - - &:hover - opacity: .9 - - &__delete-item - @extend %box - position: absolute - top: 5px - right: 0 - cursor: pointer - opacity: .5 - - &:hover - opacity: .9 diff --git a/modules/web_server/templates/components/workflow/workflow_item/workflow_item.sass b/modules/web_server/templates/components/workflow/workflow_item/workflow_item.sass deleted file mode 100644 index e388de1..0000000 --- a/modules/web_server/templates/components/workflow/workflow_item/workflow_item.sass +++ /dev/null @@ -1,72 +0,0 @@ -.workflow-item - @extend %white-edge - $this: & - display: inline-block - position: relative - max-width: 250px - height: 51px - margin: 15px 5px 0 - padding: 2px 20px 0 - border-radius: 10px - background: $white-fff - text-align: center - box-shadow: 2px 2px 3px $white-ddd - cursor: pointer - overflow: hidden - - vertical-align: middle - - &:hover - #{$this}__arrow - display: flex - - &__arrow - display: none - position: absolute - top: 0 - width: 28px - height: 100% - cursor: pointer - overflow: hidden - - img - height: 15px - margin: auto - - &:hover - img - filter: brightness(.8) - - &--left - left: 0 - - &--right - right: 0 - - img - transform: scaleX(-1) - - &--active - border: solid 2px $green - - &__log-index - display: inline-block - min-width: 12px - height: 21px - margin-right: 5px - padding: 0 5px 0 6px - border-radius: 11px - background: $green - color: $white-fff - line-height: 19px - text-align: center - vertical-align: middle - - &__name - margin: 4px 7px 2px - font-weight: bold - - &__description - margin: 1px 7px 0 - font-size: 13px - white-space: nowrap diff --git a/modules/web_server/templates/dialogs/add_new_event_listener.html b/modules/web_server/templates/dialogs/add_new_event_listener.html deleted file mode 100644 index 53df83e..0000000 --- a/modules/web_server/templates/dialogs/add_new_event_listener.html +++ /dev/null @@ -1,40 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} -{% from "components/checkbox_list/checkbox_list_item/checkbox_list_item.html" import checkbox_list_item %} - -{% block dialog_title %} -Add new event listener -{% endblock %} - -{% block dialog_form %} -
- - -
- -
- - -
- -
- - -
- -
-{{ checkbox_list_item("data_listener", "Listen for JSON attributes instead of events") }} -
- -{{ button("Save", "window.app.dialog.send('/add_new_event_listener')", "save.png", ["small"]) }} -{% endblock %} diff --git a/modules/web_server/templates/dialogs/add_new_handler.html b/modules/web_server/templates/dialogs/add_new_handler.html deleted file mode 100644 index dacedf9..0000000 --- a/modules/web_server/templates/dialogs/add_new_handler.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} -{% from "components/checkbox_list/checkbox_list_item/checkbox_list_item.html" import checkbox_list_item %} - -{% block dialog_title %} -Add new {{ handler.name }} -{% endblock %} - -{% block dialog_form %} - - -
- - -
- -{% for field in fields %} -
- {% if fields[field].0 == "string" %} - - - {% elif fields[field].0 == "int" %} - - - {% elif fields[field].0 == "float" %} - - - {% elif fields[field].0 == "bool" %} - {{ checkbox_list_item(field, fields[field].1, fields[field].2, "", "_" + field + "_") }} - {% endif %} -
-{% endfor %} - -{{ button("Save", "window.app.dialog.send('/add_new_handler')", "save.png", ["small"]) }} -{% endblock %} diff --git a/modules/web_server/templates/dialogs/add_new_routine.html b/modules/web_server/templates/dialogs/add_new_routine.html deleted file mode 100644 index d94e7ed..0000000 --- a/modules/web_server/templates/dialogs/add_new_routine.html +++ /dev/null @@ -1,53 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} -{% from "components/checkbox_list/checkbox_list_item/checkbox_list_item.html" import checkbox_list_item %} - -{% block dialog_title %} -{{ routine.name }} - New routine -{% endblock %} - -{% block dialog_form %} - - - -{% for field in routine.config_fields %} -
- {% if routine.config_fields[field].0 == "string" %} - - - {% elif routine.config_fields[field].0 == "int" %} - - - {% elif routine.config_fields[field].0 == "float" %} - - - {% elif routine.config_fields[field].0 == "bool" %} - {{ checkbox_list_item(field, routine.config_fields[field].1, routine.config_fields[field].2, "", "_" + field + "_") }} - {% elif routine.config_fields[field].0 == "handlerInstance" %} - - - {% elif routine.config_fields[field].0 == "workflowInstance" %} - - - {% elif routine.config_fields[field].0 == "condition" %} - - - {% elif routine.config_fields[field].0 == "configuration" %} - - - {% endif %} -
-{% endfor %} - -{{ button("Save", "window.app.dialog.send('/add_new_routine')", "save.png", ["small"]) }} -{% endblock %} diff --git a/modules/web_server/templates/dialogs/choose_handler_type.html b/modules/web_server/templates/dialogs/choose_handler_type.html deleted file mode 100644 index 0d90189..0000000 --- a/modules/web_server/templates/dialogs/choose_handler_type.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} - -{% block dialog_title %} -Choose handler type -{% endblock %} - -{% block dialog_form %} -
-

Available handlers

-
- {% for handler in loaded_handlers -%} - {{ button( - handler.name, - "window.app.dialog.load('add_new_handler', {'handler_type': '" + handler.type + "'})", - "types/" + handler.icon + ".png", - ["form"] - ) }} -{#
#} -{# Handler icon#} -{#

{{ handler.name }}

#} -{#
#} - {%- endfor %} -
-
-{% endblock %} diff --git a/modules/web_server/templates/dialogs/choose_routine_type.html b/modules/web_server/templates/dialogs/choose_routine_type.html deleted file mode 100644 index 8f8da61..0000000 --- a/modules/web_server/templates/dialogs/choose_routine_type.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} - -{% block dialog_title %} -Choose new routine -{% endblock %} - -{% block dialog_form %} -
-

Available routines

-
- {%- for routine in available_routines -%} - {{ button( - routine.name, - "window.app.dialog.load('add_new_routine', { - 'routine_type': '" + routine.type + "', 'target_workflow': '" + target_workflow + "' - })", - none, - ["form"] - ) }} -{#
#} -{#

{{ routine.name }}

#} -{#
#} - {%- endfor -%} -
-
-{% endblock %} diff --git a/modules/web_server/templates/dialogs/edit_event_listener.html b/modules/web_server/templates/dialogs/edit_event_listener.html deleted file mode 100644 index 1c78a0b..0000000 --- a/modules/web_server/templates/dialogs/edit_event_listener.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} -{% from "components/checkbox_list/checkbox_list_item/checkbox_list_item.html" import checkbox_list_item %} - -{% block dialog_title %} -Edit event listener -{% endblock %} - -{% block dialog_form %} -
- - -
- -
- - -
- -
- - -
- -
-{{ checkbox_list_item("data_listener", "Listen for JSON attributes instead of events", listener.get_data_listener_status(), "", "") }} -
- -{{ button("Save changes", "window.app.dialog.send('/edit_event_listener/" + listener.id|string + "')", "save.png", ["small"]) }} -{{ button("Delete listener", "window.app.dialog.send('/delete_event_listener/" + listener.id|string + "')", "trash_white.png", ["small", "red"]) }} -{% endblock %} diff --git a/modules/web_server/templates/dialogs/edit_handler.html b/modules/web_server/templates/dialogs/edit_handler.html deleted file mode 100644 index 1e0f402..0000000 --- a/modules/web_server/templates/dialogs/edit_handler.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} -{% from "components/checkbox_list/checkbox_list_item/checkbox_list_item.html" import checkbox_list_item %} - -{% block dialog_title %} -{{ handler.get_name() }} {{ id }} -{% endblock %} - -{% block dialog_form %} - - -
- - -
- -{% for field in handler.config_fields %} -
- {% if handler.config_fields[field].0 == "string" %} - - - {% elif handler.config_fields[field].0 == "int" %} - - - {% elif handler.config_fields[field].0 == "float" %} - - - {% elif handler.config_fields[field].0 == "bool" %} - {{ checkbox_list_item(field, handler.config_fields[field].1, handler.get_config()[field], "", "_" + field + "_") }} - {% endif %} -
-{% endfor %} - -{{ button("Save changes", "window.app.dialog.send('/edit_handler/" + id|string + "')", "save.png", ["small"]) }} -{{ button("Delete handler", "window.app.dialog.send('/delete_handler/" + id|string + "')", "trash_white.png", ["small", "red"]) }} -{% endblock %} diff --git a/modules/web_server/templates/dialogs/edit_routine.html b/modules/web_server/templates/dialogs/edit_routine.html deleted file mode 100644 index 98d7186..0000000 --- a/modules/web_server/templates/dialogs/edit_routine.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} -{% from "components/checkbox_list/checkbox_list_item/checkbox_list_item.html" import checkbox_list_item %} - -{% block dialog_title %} -{{ routine.get_name() }} {{ routine.id }} -{% endblock %} - -{% block dialog_form %} -{% for field in routine.config_fields %} -
- {% if routine.config_fields[field].0 == "string" %} - - - {% elif routine.config_fields[field].0 == "int" %} - - - {% elif routine.config_fields[field].0 == "float" %} - - - {% elif routine.config_fields[field].0 == "bool" %} - {{ checkbox_list_item(field, routine.config_fields[field].1, routine.get_config()[field], "", "_" + field + "_") }} - {% elif routine.config_fields[field].0 == "handlerInstance" %} - - - {% elif routine.config_fields[field].0 == "workflowInstance" %} - - - {% elif routine.config_fields[field].0 == "condition" %} - - - {% elif routine.config_fields[field].0 == "configuration" %} - - - {% endif %} -
-{% endfor %} - -{{ button("Save changes", "window.app.dialog.send('/edit_routine/" + routine.id|string + "')", "save.png", ["small"]) }} -{{ button("Delete routine", "window.app.dialog.send('/delete_routine/" + routine.id|string + "')", "trash_white.png", ["small", "red"]) }} -{% endblock %} diff --git a/modules/web_server/templates/dialogs/json_attributes_to_store.html b/modules/web_server/templates/dialogs/json_attributes_to_store.html deleted file mode 100644 index 2fef1b2..0000000 --- a/modules/web_server/templates/dialogs/json_attributes_to_store.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "components/dialog/dialog.html" %} - -{% from "components/button/button.html" import button %} -{% from "components/checkbox_list/checkbox_list_item/checkbox_list_item.html" import checkbox_list_item %} - -{% block dialog_title %} -{{ handler.get_name() }} {{ id }} -{% endblock %} - -{% block dialog_form %} -
-{% if not attributes %} -

There are no data to save from this handler.

-{% else %} -

Attributes to store

-{% endif %} -{% for attribute in attributes %} - {{ checkbox_list_item(attribute, "", attribute in handler.get_storage_attributes(), attributes[attribute]) }} -{% endfor %} -
-{{ button("Save", "window.app.dialog.send('/edit_json_attributes_to_store/" + id|string + "')", "save.png", ["small"]) }} -{% endblock %} diff --git a/modules/web_server/templates/layouts/default.html b/modules/web_server/templates/layouts/default.html deleted file mode 100644 index ab3e250..0000000 --- a/modules/web_server/templates/layouts/default.html +++ /dev/null @@ -1,45 +0,0 @@ - - -{% with url="" %} - - {% block title %}ContWatch{% endblock %} - - - - - - - - - - - - - - - - - - - - - - - - - - -{% include "components/navbar/navbar.html" %} -{% include "components/notifications/notifications.html" %} -
- {% include "components/dialog/dialog_container.html" %} - - - - -{% endwith %} - diff --git a/modules/web_server/templates/pages/actions.html b/modules/web_server/templates/pages/actions.html deleted file mode 100644 index f429e86..0000000 --- a/modules/web_server/templates/pages/actions.html +++ /dev/null @@ -1,61 +0,0 @@ -{% from 'components/block_list/block_list_item/block_list_item.html' import block_list_item %} -{% from 'components/button/button.html' import button %} - -

Event listeners

-
-
-
- {%- for listener in manager.event_manager.event_listeners -%} - {{ block_list_item( - manager.get_handler(listener.get_handler_id()).get_name(), - listener.label, - "types/" + manager.get_handler(listener.get_handler_id()).icon + ".png", - listener.get_handler_id(), - '', - "window.app.dialog.load('edit_event_listener', {'listener_id': '" + listener.id|string + "'})", - listener.workflow.id - ) }} - {%- endfor -%} -
-
-
-

Workflows

- {% if manager.event_manager.workflows %} -
- {% for workflow in manager.event_manager.workflows %} -
-
{{ workflow }}
- {% for routine in manager.event_manager.workflows[workflow].routines %} -
- {% if loop.index != 1 %} -
- Left arrow -
- {% endif %} -
{% for log in routine_log %}{% if log[0] == routine.id %}{{ loop.index }} {% endif %}{% endfor %}{{ routine.get_name() }}
-
{{ routine.get_description() }}
- {% if loop.index != manager.event_manager.workflows[workflow].routines | length %} -
- Left arrow -
- {% endif %} -
- {% endfor %} - Plus icon - Delete icon -
- {% endfor %} -
- {% endif %} - {{ button("New workflow", "window.app.actions.createNewWorkflow(0)", "plus_bold.png") }} -
diff --git a/modules/web_server/templates/pages/data.html b/modules/web_server/templates/pages/data.html deleted file mode 100644 index 58effb2..0000000 --- a/modules/web_server/templates/pages/data.html +++ /dev/null @@ -1,29 +0,0 @@ -

Data stored in the database

-
diff --git a/modules/web_server/templates/pages/details.html b/modules/web_server/templates/pages/details.html deleted file mode 100644 index a6960c6..0000000 --- a/modules/web_server/templates/pages/details.html +++ /dev/null @@ -1,14 +0,0 @@ -{% from 'components/block_info/block_info.html' import info_block %} -{% from 'components/button/button.html' import button %} - -

Advanced information

-
- {%- for category in data -%} - {{ info_block(category, data[category]) }} - {%- endfor -%} -
-


-

Options

-
- {{ button("Clear all database tables", "window.app.deleteAllTables()", "trash.png") }} -
diff --git a/modules/web_server/templates/pages/handlers.html b/modules/web_server/templates/pages/handlers.html deleted file mode 100644 index 4c3016e..0000000 --- a/modules/web_server/templates/pages/handlers.html +++ /dev/null @@ -1,16 +0,0 @@ -{% from 'components/block_list/block_list_item/block_list_item.html' import block_list_item %} - -

List of configured handlers

-
- {%- for handler in handlers -%} - {{ block_list_item( - handlers[handler].get_name(), - handlers[handler].get_description(), - "types/" + handlers[handler].icon + ".png", - handler, - 'green' if handlers[handler].is_connected() else 'red', - "window.app.dialog.load('edit_handler', {'handler_id': '" + handler|string + "'})" - ) }} - {%- endfor -%} -
-
diff --git a/modules/web_server/templates/pages/inspector.html b/modules/web_server/templates/pages/inspector.html deleted file mode 100644 index cbc0e27..0000000 --- a/modules/web_server/templates/pages/inspector.html +++ /dev/null @@ -1,118 +0,0 @@ -{% from 'components/button/button.html' import button %} - -

Inspector

-
- {{ button("New chart", "window.app.inspector.openEmpty()", "plus_bold.png") }} - {% if views %} -

Saved views

- {% endif %} - {% for view in views -%} -
-

{{ view.label }}

- -
- {%- endfor %} -
-
- Settings icon - Close icon -
-
- Close icon -
-
- - -
-

Chart data

- {% for handler in manager.get_handlers() %} -
- {% if manager.get_handlers()[handler].get_storage_attributes() %} -

{{ manager.get_handlers()[handler].get_name() }}

- {% for attribute in manager.get_handlers()[handler].get_storage_attributes() %} - - {% endfor %} - {% endif %} -
- {% endfor %} -

Events

- {% for handler in manager.get_handlers() %} -
- {% set event_names = manager.event_manager.get_storage_events_names(handler) %} - {% if event_names["in"] or event_names["out"] %} -

{{ manager.get_handlers()[handler].get_name() }}

- {% for event in event_names["in"] %} - - {% endfor %} - {% for event in event_names["out"] %} - - {% endfor %} - {% endif %} -
- {% endfor %} -
-
-
- - -
- {{ button("Save", "window.app.inspector.saveView()", "save.png", ["small"]) }} - {{ button("Delete", "window.app.inspector.deleteView()", "trash_white.png", ["small", "red"]) }} -
- -
-
diff --git a/modules/web_server/templates/pages/overview.html b/modules/web_server/templates/pages/overview.html deleted file mode 100644 index 7c77d3d..0000000 --- a/modules/web_server/templates/pages/overview.html +++ /dev/null @@ -1,68 +0,0 @@ -

Overview

-
- - - {% if messages %} - - - - - - - - {% else %} -


Nothing to display

- {% endif %} - {% for message in messages -%} - - - - - - - - {% endfor %} - -
StatusTypeTimeHandlerData
- {% if message.incoming %} - Incoming - {% else %} - Outgoing - {% if message.type == "event" %} - Eye icon - {% endif %} - {% endif %} - - {{ message.type }} - - {{ message.time }} - - - {% if message.handler %} - handler icon - {{ message.handler.get_name() }} - {% else %} - Deleted handler - {% endif %} - - {{ message.handler_id }} - - - {%- if message.type == "event" -%} - {{ message.data.label }}: - {% if "routine_log" in message %} - {{ message.routine_log[-1][1] }} - {% else %} - {{ message.data.payload }} - {% endif %} - {%- else -%} - {{ message.data }} - {%- endif -%} - -
-
diff --git a/modules/web_server/templates/partials/navbar.html b/modules/web_server/templates/partials/navbar.html deleted file mode 100644 index e69de29..0000000 diff --git a/modules/web_server/templates/partials/notifications.html b/modules/web_server/templates/partials/notifications.html deleted file mode 100644 index ddc89f5..0000000 --- a/modules/web_server/templates/partials/notifications.html +++ /dev/null @@ -1,8 +0,0 @@ -
- -
- info - error - error - error -
diff --git a/package.json b/package.json deleted file mode 100644 index 198dced..0000000 --- a/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "contwatch", - "version": "1.1.0", - "type": "module", - "description": "Scalable system for IoT automatization", - "repository": { - "type": "git", - "url": "git+https://github.com/BlueManCZ/contwatch.git" - }, - "author": "Ivo Šmerek", - "bugs": { - "url": "https://github.com/BlueManCZ/contwatch/issues" - }, - "scripts": { - "start": "npm run build; ./run.py", - "build": "node --loader ts-node/esm $(npm bin)/webpack", - "sass-lint": "$(npm bin)/sass-lint -c sass-lint.yml 'modules/web_server/templates/components/**/*.sass' -v", - "sass-lint:fix": "node_modules/sass-lint-auto-fix/dist/index.js --config-sass-lint sass-lint.yml" - }, - "homepage": "https://github.com/BlueManCZ/contwatch#readme", - "devDependencies": { - "@babel/preset-env": "^7.18.10", - "@babel/preset-typescript": "^7.18.6", - "@typescript-eslint/eslint-plugin": "^5.6.0", - "@typescript-eslint/parser": "^5.6.0", - "babel": "^6.23.0", - "babel-loader": "^8.2.5", - "eslint": "^7.32.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.2.0", - "sass-lint": "^1.13.1", - "sass-lint-auto-fix": "^0.21.2", - "ts-loader": "^9.2.6", - "ts-node": "^10.9.1", - "typescript": "^4.5.3", - "webpack": "^5.74.0", - "webpack-cli": "^4.10.0" - } -} diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 5f34921..0000000 --- a/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -eventlet -flask -flask-socketio -minimalmodbus -pony -pyserial -requests -simplejson diff --git a/run.py b/run.py deleted file mode 100755 index 800ab95..0000000 --- a/run.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python3 - -from eventlet import monkey_patch - -monkey_patch() - -from modules import settings -from modules.logging.logger import logger -from modules.core import HandlerManager, database -from modules.web_server.flask_web_server import FlaskWebServer -from modules.tools.modules_registrator import ModulesRegistrator - -from json import dumps, load -from optparse import OptionParser -from signal import signal, SIGINT - - -registered_modules = ModulesRegistrator() - - -def _quit_handler(_, __): - """Handler for exit signal.""" - print("\nSIGINT signal detected. Exiting") - _quit() - - -def _quit(): - registered_modules.exit() - quit() - - -if __name__ == "__main__": - signal(SIGINT, _quit_handler) - - parser = OptionParser() - - parser.add_option( - "-e", - "--export-config", - action="store_true", - dest="export_config", - default=False, - help="export configuration in JSON format", - ) - - parser.add_option( - "-i", - "--import-config", - dest="import_config", - help="import configuration from JSON_FILE", - metavar="JSON_FILE", - ) - - (options, args) = parser.parse_args() - - log = logger("Main") - log.info("Starting application") - - # Initialize main modules - db = database.Database() - manager = HandlerManager(db) - - # Register modules for SIGINT handler - registered_modules.add(db, manager) - - if options.export_config: - data = manager.export_config() - print(dumps(data, indent=4, ensure_ascii=False)) - _quit() - - if options.import_config: - manager.delete_all() - database.delete_tables() - database.create_tables() - file = open(options.import_config, "r") - manager.import_config(load(file)) - _quit() - - settings.print_info() - - if settings.WEB_SERVER: - web = FlaskWebServer(manager, db) - registered_modules.add(web) - - # Wait for the manager thread to end - manager.thread.join() diff --git a/sass-lint.yml b/sass-lint.yml deleted file mode 100644 index d27141d..0000000 --- a/sass-lint.yml +++ /dev/null @@ -1,15 +0,0 @@ -rules: - property-sort-order: - - 1 - - order: 'smacss' - class-name-format: - - 1 - - convention: 'hyphenatedbem' - quotes: - - 1 - - style: 'single' - placeholder-in-extend: - - 0 - nesting-depth: - - 1 - - max-depth: 3 diff --git a/settings.py b/settings.py deleted file mode 100644 index b5c9cfa..0000000 --- a/settings.py +++ /dev/null @@ -1,101 +0,0 @@ -# ContWatch configuration settings file - -# File lookup takes place in the following order: -# 1) ~/.config/contwatch/settings.py -# 2) project-root/settings.py - - -# ----| LOGGING |---- - -# Absolute or relative path to log file -# Relative path is relative to the project root. -# Default: "contwatch.log" -LOG_FILE = "contwatch.log" - -# Maximum log file size in bytes -# Default: 51200 -LOG_FILE_MAX_BYTES = 51200 - -# Number of maximum backup log files -# Default: 5 -LOG_FILE_BACKUP_COUNT = 5 - -# Logging level -# For more information see: https://docs.python.org/3/library/logging.html#logging-levels -# Default: "DEBUG" -LOG_LEVEL = "DEBUG" - - -# ----| DATABASE |---- - -# Database type -# Currently available types: sqlite, mysql -# Default: "sqlite" -DB_TYPE = "sqlite" - -# Absolute or relative path to database file -# Relative path is relative to the project root. -# Default: "database.sqlite" -DB_SQLITE_FILE = "database.sqlite" - -# Database host address -# An empty string means localhost address. -# Default: "" -DB_HOST = "" - -# Database user -# An empty string means the current user will be used. -# Default: "" -DB_USER = "" - -# Database password -# Default: "" -DB_PASSWORD = "" - -# Database name -# Default: "contwatch" -DB_DATABASE = "contwatch" - -# Do not save incoming data to the database -# Default: False -DB_DATA_READONLY = False - - -# ----| WEB SERVER |---- - -# Enable or disable web server module. -# Default: True -WEB_SERVER = True - -# Web server address -# Default: "0.0.0.0" -WEB_SERVER_ADDRESS = "0.0.0.0" - -# Web server port -# Default: 80 -WEB_SERVER_PORT = 80 - -# Enable debug mode for web server. Do not use it in a production deployment. -# Default: False -WEB_SERVER_DEBUG = False - -# Specify which origins are allowed to connect to Flask-SocketIO server. -# This value is passed as it is to the `cors_allowed_origins` parameter of flask_socketio.SocketIO server. -# For more information search for `cors_allowed_origins` on https://flask-socketio.readthedocs.io/en/latest/api.html -# Default: "*" -WEB_SERVER_ORIGINS = "*" - - -# ----| CACHING | ---- - -# Caching interval in minutes -# Cache is stored in RAM. -# 0 means caching is disabled. -# Default: 10 -CACHING_INTERVAL = 10 - -# Asynchronous caching -# Cache data will be refreshed asynchronously every CACHING_INTERVAL minutes. -# With async caching enabled you can get better response time on slower hardware. -# Default: False -CACHING_ASYNC = False diff --git a/src/client/.eslintrc.json b/src/client/.eslintrc.json new file mode 100644 index 0000000..3288856 --- /dev/null +++ b/src/client/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "extends": "next/core-web-vitals", + "plugins": [ + "simple-import-sort", + "unused-imports", + "import" + ], + "ignorePatterns": ["**/*.ts"], + "rules": { +// "indent": "off", +// "@typescript-eslint/indent": "error", + + "import/no-duplicates": "error", + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error", + + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "off", + "unused-imports/no-unused-imports": "error" +// "unused-imports/no-unused-vars": [ +// "warn", +// { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } +// ] + } +} diff --git a/src/client/.prettierrc b/src/client/.prettierrc new file mode 100644 index 0000000..22df8e5 --- /dev/null +++ b/src/client/.prettierrc @@ -0,0 +1,9 @@ +printWidth: 110 +tabWidth: 4 +singleQuote: false +semi: true +useTabs: false +trailingComma: "all" +proseWrap: "always" +bracketSpacing: true +jsxBracketSameLine: false diff --git a/src/client/.stylelintrc.json b/src/client/.stylelintrc.json new file mode 100644 index 0000000..4448120 --- /dev/null +++ b/src/client/.stylelintrc.json @@ -0,0 +1,6 @@ +{ + "extends": [ + "stylelint-config-standard-scss", + "stylelint-config-prettier-scss" + ] +} diff --git a/src/client/next-env.d.ts b/src/client/next-env.d.ts new file mode 100644 index 0000000..4f11a03 --- /dev/null +++ b/src/client/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/client/next.config.ts b/src/client/next.config.ts new file mode 100644 index 0000000..1901061 --- /dev/null +++ b/src/client/next.config.ts @@ -0,0 +1,35 @@ +const HOST = process.env.NEXT_PUBLIC_API_SERVER_HOST ?? "localhost"; +const PORT = process.env.NEXT_PUBLIC_API_SERVER_PORT ?? "8000"; +const PROTOCOL = process.env.NEXT_PUBLIC_API_SERVER_PROTOCOL ?? "http"; + +const API_SERVER_ROUTES = ["media", "api"]; + +// noinspection JSUnusedGlobalSymbols +export const nextConfig = { + reactStrictMode: true, + swcMinify: true, + images: { + remotePatterns: [ + { + protocol: PROTOCOL, + hostname: HOST, + port: PORT, + pathname: "/media/**", + }, + ], + }, + async rewrites() { + return [ + ...API_SERVER_ROUTES.map((route) => ({ + source: `/${route}/:path*`, + destination: `${PROTOCOL}://${HOST}:${PORT}/${route}/:path*`, + })), + { + source: "/public/:path*", + destination: "/:path*", + }, + ]; + }, +}; + +module.exports = nextConfig; diff --git a/src/client/package-lock.json b/src/client/package-lock.json new file mode 100644 index 0000000..83e3332 --- /dev/null +++ b/src/client/package-lock.json @@ -0,0 +1,9942 @@ +{ + "name": "next-app", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "next-app", + "version": "0.1.0", + "dependencies": { + "@reduxjs/toolkit": "^1.9.7", + "next": "^13.5.4", + "next-redux-wrapper": "^8.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.69.2", + "swr": "^2.2.4" + }, + "devDependencies": { + "@types/node": "20.8.4", + "@types/react": "18.2.28", + "@types/react-dom": "18.2.13", + "eslint": "8.51.0", + "eslint-config-next": "^13.5.4", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-unused-imports": "^3.0.0", + "husky": "^8.0.3", + "lint-staged": "^14.0.1", + "prettier": "3.0.3", + "stylelint": "^15.10.3", + "stylelint-config-prettier-scss": "^1.0.0", + "stylelint-config-standard-scss": "^11.0.0", + "typescript": "5.2.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true + }, + "node_modules/@babel/code-frame/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==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", + "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", + "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "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==", + "dev": true, + "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.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "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/js": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.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==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@next/env": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", + "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz", + "integrity": "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", + "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", + "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", + "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", + "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", + "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", + "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", + "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", + "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", + "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", + "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "peer": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "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==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.8.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", + "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "dev": true, + "dependencies": { + "undici-types": "~5.25.1" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.2.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.28.tgz", + "integrity": "sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.13", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.13.tgz", + "integrity": "sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "peer": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", + "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", + "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", + "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", + "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", + "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.5", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "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==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001547", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", + "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/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "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" + }, + "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/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-functions-list": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", + "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "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==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "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==", + "dev": true, + "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/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "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-next": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz", + "integrity": "sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.5.4", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/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==", + "dev": true, + "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-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==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", + "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-unused-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz", + "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.0.0", + "eslint": "^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", + "dev": true, + "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/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "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.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": 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==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "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/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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "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==", + "dev": true, + "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/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "peer": true, + "dependencies": { + "react-is": "^16.7.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==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "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/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, + "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==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "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==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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==", + "dev": true, + "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/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==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "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==", + "dev": true, + "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/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", + "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", + "dev": true + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", + "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "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==", + "dev": true + }, + "node_modules/next": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", + "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", + "dependencies": { + "@next/env": "13.5.4", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=16.14.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "13.5.4", + "@next/swc-darwin-x64": "13.5.4", + "@next/swc-linux-arm64-gnu": "13.5.4", + "@next/swc-linux-arm64-musl": "13.5.4", + "@next/swc-linux-x64-gnu": "13.5.4", + "@next/swc-linux-x64-musl": "13.5.4", + "@next/swc-win32-arm64-msvc": "13.5.4", + "@next/swc-win32-ia32-msvc": "13.5.4", + "@next/swc-win32-x64-msvc": "13.5.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-redux-wrapper": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-8.1.0.tgz", + "integrity": "sha512-2hIau0hcI6uQszOtrvAFqgc0NkZegKYhBB7ZAKiG3jk7zfuQb4E7OV9jfxViqqojh3SEHdnFfPkN9KErttUKuw==", + "peerDependencies": { + "next": ">=9", + "react": "*", + "react-redux": "*" + } + }, + "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==", + "dev": true, + "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/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "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.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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/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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "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/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "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": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "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.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.69.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.2.tgz", + "integrity": "sha512-48lDtG/9OuSQZ9oNmJMUXI2QdCakAWrAGjpX/Fy6j4Og8dEAyE598x5GqCqnHkwV7+I5w8DJpqjm581q5HNh3w==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "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==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "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==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/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==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylelint": { + "version": "15.10.3", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz", + "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==", + "dev": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.0", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.28.0", + "mathml-tag-names": "^2.1.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.27", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-prettier-scss": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier-scss/-/stylelint-config-prettier-scss-1.0.0.tgz", + "integrity": "sha512-Gr2qLiyvJGKeDk0E/+awNTrZB/UtNVPLqCDOr07na/sLekZwm26Br6yYIeBYz3ulsEcQgs5j+2IIMXCC+wsaQA==", + "dev": true, + "bin": { + "stylelint-config-prettier-scss": "bin/check.js", + "stylelint-config-prettier-scss-check": "bin/check.js" + }, + "engines": { + "node": "14.* || 16.* || >= 18" + }, + "peerDependencies": { + "stylelint": ">=15.0.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint-config-recommended-scss": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.0.0.tgz", + "integrity": "sha512-7AmMIsHTsuwUQm7I+DD5BGeIgCvqYZ4BpeYJJpb1cUXQwrJAKjA+GBotFZgUEGP8lAM+wmd91ovzOi8xfAyWEw==", + "dev": true, + "dependencies": { + "postcss-scss": "^4.0.7", + "stylelint-config-recommended": "^13.0.0", + "stylelint-scss": "^5.1.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^15.10.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-config-standard": { + "version": "34.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", + "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", + "dev": true, + "dependencies": { + "stylelint-config-recommended": "^13.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint-config-standard-scss": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.0.0.tgz", + "integrity": "sha512-fGE79NBOLg09a9afqGH/guJulRULCaQWWv4cv1v2bMX92B+fGb0y56WqIguwvFcliPmmUXiAhKrrnXilIeXoHA==", + "dev": true, + "dependencies": { + "stylelint-config-recommended-scss": "^13.0.0", + "stylelint-config-standard": "^34.0.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^15.10.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-scss": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.2.1.tgz", + "integrity": "sha512-ZoTJUM85/qqpQHfEppjW/St//8s6p9Qsg8deWlYlr56F9iUgC9vXeIDQvH4odkRRJLTLFQzYMALSOFCQ3MDkgw==", + "dev": true, + "dependencies": { + "known-css-properties": "^0.28.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "stylelint": "^14.5.1 || ^15.0.0" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/stylelint/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/stylelint/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/swr": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.4.tgz", + "integrity": "sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/table/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/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==", + "dev": true + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true + }, + "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/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "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==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true, + "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/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "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==", + "dev": true, + "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.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "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.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@csstools/css-parser-algorithms": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", + "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "dev": true, + "requires": {} + }, + "@csstools/css-tokenizer": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", + "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "dev": true + }, + "@csstools/media-query-list-parser": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "dev": true, + "requires": {} + }, + "@csstools/selector-specificity": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "requires": {} + }, + "@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==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "requires": { + "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" + } + }, + "@eslint/js": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@next/env": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", + "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" + }, + "@next/eslint-plugin-next": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz", + "integrity": "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==", + "dev": true, + "requires": { + "glob": "7.1.7" + } + }, + "@next/swc-darwin-arm64": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", + "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", + "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", + "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", + "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", + "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", + "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", + "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", + "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", + "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", + "optional": true + }, + "@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==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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==", + "dev": true + }, + "@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==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@reduxjs/toolkit": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", + "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", + "requires": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + } + }, + "@rushstack/eslint-patch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", + "dev": true + }, + "@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "peer": true, + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", + "dev": true + }, + "@types/node": { + "version": "20.8.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", + "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "dev": true, + "requires": { + "undici-types": "~5.25.1" + } + }, + "@types/normalize-package-data": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/react": { + "version": "18.2.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.28.tgz", + "integrity": "sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.2.13", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.13.tgz", + "integrity": "sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==", + "devOptional": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "peer": true + }, + "@typescript-eslint/parser": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", + "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", + "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" + } + }, + "@typescript-eslint/types": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", + "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", + "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", + "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.7.5", + "eslint-visitor-keys": "^3.4.1" + } + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "requires": { + "type-fest": "^1.0.2" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + } + }, + "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==", + "dev": true + }, + "array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "axe-core": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", + "dev": true + }, + "axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "requires": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001547", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + } + }, + "client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "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==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "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==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "requires": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-functions-list": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", + "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "dev": true + }, + "css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "requires": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "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==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + } + }, + "es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "requires": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "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==", + "dev": true + }, + "eslint": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "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" + } + }, + "eslint-config-next": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz", + "integrity": "sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "13.5.4", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + } + }, + "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==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + } + }, + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", + "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-unused-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz", + "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "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==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "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==", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "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==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "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==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "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==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "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==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "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" + } + }, + "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==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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==" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "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" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "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==", + "dev": true + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "peer": true, + "requires": { + "react-is": "^16.7.0" + } + }, + "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==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "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==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "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" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + } + }, + "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==", + "dev": true + }, + "known-css-properties": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", + "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "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==", + "dev": true + }, + "lint-staged": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", + "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "dev": true, + "requires": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + } + } + }, + "listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "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==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dev": true, + "requires": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "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==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "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==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", + "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", + "requires": { + "@next/env": "13.5.4", + "@next/swc-darwin-arm64": "13.5.4", + "@next/swc-darwin-x64": "13.5.4", + "@next/swc-linux-arm64-gnu": "13.5.4", + "@next/swc-linux-arm64-musl": "13.5.4", + "@next/swc-linux-x64-gnu": "13.5.4", + "@next/swc-linux-x64-musl": "13.5.4", + "@next/swc-win32-arm64-msvc": "13.5.4", + "@next/swc-win32-ia32-msvc": "13.5.4", + "@next/swc-win32-x64-msvc": "13.5.4", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + } + }, + "next-redux-wrapper": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-8.1.0.tgz", + "integrity": "sha512-2hIau0hcI6uQszOtrvAFqgc0NkZegKYhBB7ZAKiG3jk7zfuQb4E7OV9jfxViqqojh3SEHdnFfPkN9KErttUKuw==", + "requires": {} + }, + "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==", + "dev": true, + "requires": { + "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": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "requires": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "@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" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "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==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "requires": {} + }, + "postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "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==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "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==" + }, + "react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "peer": true, + "requires": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + } + } + }, + "read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "requires": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "requires": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + } + }, + "redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "requires": {} + }, + "reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } + }, + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + } + }, + "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==", + "dev": true + }, + "reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "sass": { + "version": "1.69.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.2.tgz", + "integrity": "sha512-48lDtG/9OuSQZ9oNmJMUXI2QdCakAWrAGjpX/Fy6j4Og8dEAyE598x5GqCqnHkwV7+I5w8DJpqjm581q5HNh3w==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "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==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + } + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, + "string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "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==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "requires": { + "min-indent": "^1.0.1" + } + }, + "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==", + "dev": true + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, + "styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "requires": { + "client-only": "0.0.1" + } + }, + "stylelint": { + "version": "15.10.3", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz", + "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==", + "dev": true, + "requires": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.0", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.28.0", + "mathml-tag-names": "^2.1.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.27", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "stylelint-config-prettier-scss": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier-scss/-/stylelint-config-prettier-scss-1.0.0.tgz", + "integrity": "sha512-Gr2qLiyvJGKeDk0E/+awNTrZB/UtNVPLqCDOr07na/sLekZwm26Br6yYIeBYz3ulsEcQgs5j+2IIMXCC+wsaQA==", + "dev": true, + "requires": {} + }, + "stylelint-config-recommended": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "dev": true, + "requires": {} + }, + "stylelint-config-recommended-scss": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.0.0.tgz", + "integrity": "sha512-7AmMIsHTsuwUQm7I+DD5BGeIgCvqYZ4BpeYJJpb1cUXQwrJAKjA+GBotFZgUEGP8lAM+wmd91ovzOi8xfAyWEw==", + "dev": true, + "requires": { + "postcss-scss": "^4.0.7", + "stylelint-config-recommended": "^13.0.0", + "stylelint-scss": "^5.1.0" + } + }, + "stylelint-config-standard": { + "version": "34.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", + "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^13.0.0" + } + }, + "stylelint-config-standard-scss": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.0.0.tgz", + "integrity": "sha512-fGE79NBOLg09a9afqGH/guJulRULCaQWWv4cv1v2bMX92B+fGb0y56WqIguwvFcliPmmUXiAhKrrnXilIeXoHA==", + "dev": true, + "requires": { + "stylelint-config-recommended-scss": "^13.0.0", + "stylelint-config-standard": "^34.0.0" + } + }, + "stylelint-scss": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.2.1.tgz", + "integrity": "sha512-ZoTJUM85/qqpQHfEppjW/St//8s6p9Qsg8deWlYlr56F9iUgC9vXeIDQvH4odkRRJLTLFQzYMALSOFCQ3MDkgw==", + "dev": true, + "requires": { + "known-css-properties": "^0.28.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" + } + }, + "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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "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==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "swr": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.4.tgz", + "integrity": "sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==", + "requires": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + } + }, + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true + }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "requires": {} + }, + "tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "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==", + "dev": true + }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "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-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "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.1", + "which-typed-array": "^1.1.9" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + } + } +} diff --git a/src/client/package.json b/src/client/package.json new file mode 100644 index 0000000..3cabfc2 --- /dev/null +++ b/src/client/package.json @@ -0,0 +1,46 @@ +{ + "name": "next-app", + "version": "0.1.0", + "private": true, + "scripts": { + "build:config": "tsc next.config.ts --skipLibCheck --module commonjs --target esnext --esModuleInterop true --allowSyntheticDefaultImports true --moduleResolution node", + "dev": "npm run build:config; next dev", + "build": "npm run build:config; next build", + "start": "next start", + "lint": "next lint", + "precommit": "lint-staged", + "fmt": "prettier --write './**/*.js'" + }, + "dependencies": { + "@reduxjs/toolkit": "^1.9.7", + "next": "^13.5.4", + "next-redux-wrapper": "^8.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.69.2", + "swr": "^2.2.4" + }, + "devDependencies": { + "@types/node": "20.8.4", + "@types/react": "18.2.28", + "@types/react-dom": "18.2.13", + "eslint": "8.51.0", + "eslint-config-next": "^13.5.4", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-unused-imports": "^3.0.0", + "husky": "^8.0.3", + "lint-staged": "^14.0.1", + "prettier": "3.0.3", + "stylelint": "^15.10.3", + "stylelint-config-prettier-scss": "^1.0.0", + "stylelint-config-standard-scss": "^11.0.0", + "typescript": "5.2.2" + }, + "lint-staged": { + "*.js": [ + "prettier --write", + "git add" + ] + } +} diff --git a/src/client/pages/_app.tsx b/src/client/pages/_app.tsx new file mode 100644 index 0000000..9fecb89 --- /dev/null +++ b/src/client/pages/_app.tsx @@ -0,0 +1,32 @@ +import "../styles/main.scss"; + +import type { AppProps } from "next/app"; +import { Provider } from "react-redux"; + +import { StoreInit, wrapper } from "../src/store"; + +function MyApp({ Component, ...rest }: AppProps) { + const { store, props } = wrapper.useWrappedStore(rest); + const { pageProps } = props; + + if (!process.env.NEXT_PUBLIC_API_SERVER_HOST) { + return ( +
+

API server host address or port not set

+

+ Use NEXT_PUBLIC_API_SERVER_HOST and NEXT_PUBLIC_API_SERVER_PORT{" "} + variables in .env.local file. +

+
+ ); + } + + return ( + + + + + ); +} + +export default MyApp; diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx new file mode 100644 index 0000000..22411b3 --- /dev/null +++ b/src/client/pages/dashboard.tsx @@ -0,0 +1,39 @@ +import { FlexLayout, Header, HeaderSize, Loc, ThemedIconName } from "../src/components"; +import { AttributeWidget } from "../src/components/Widget"; +import { NavbarLayout } from "../src/layouts"; +import { GLOBAL_LOC_KEYS } from "../src/utils"; + +export const Dashboard = () => { + return ( + +
+ {GLOBAL_LOC_KEYS.DASHBOARD} +
+ + + + + +
+ ); +}; + +export default Dashboard; diff --git a/src/client/pages/handlers.tsx b/src/client/pages/handlers.tsx new file mode 100644 index 0000000..38bda81 --- /dev/null +++ b/src/client/pages/handlers.tsx @@ -0,0 +1,95 @@ +import { useState } from "react"; + +import { useAvailableHandlers, useHandlers } from "../src/bridge"; +import { getStatusColor } from "../src/bridge/models/utils"; +import { + CustomIconName, + FlexLayout, + Menu, + MenuItem, + MenuSection, + Separator, + SeparatorVariant, + ThemedIconName, +} from "../src/components"; +import { NavbarLayout } from "../src/layouts"; +import { Handler, NewHandler } from "../src/partials"; + +export const Handlers = () => { + const { data: handlers } = useHandlers(); + const { data: availableHandlers } = useAvailableHandlers(); + + const [newHandlerSectionVisible, setNewHandlerSectionVisible] = useState(false); + const [newHandlerType, setNewHandlerType] = useState(null); + const [currentHandlerId, setCurrentHandlerId] = useState(null); + + const newHandler = availableHandlers?.find((handler) => handler.type === newHandlerType); + + const showHandlerInfo = (handlerId: number) => { + setCurrentHandlerId(handlerId); + setNewHandlerType(null); + }; + + const showNewHandler = (handlerType: string) => { + setCurrentHandlerId(null); + setNewHandlerType(handlerType); + }; + + return ( + + + + + {handlers?.map((handler) => ( + showHandlerInfo(handler.id)} + active={currentHandlerId === handler.id} + /> + ))} + + {!newHandlerSectionVisible && ( + setNewHandlerSectionVisible(true)} + /> + )} + + {newHandlerSectionVisible && ( + + {availableHandlers?.map((handler) => ( + showNewHandler(handler.type)} + /> + ))} + + { + setNewHandlerType(null); + setNewHandlerSectionVisible(false); + }} + /> + + )} + + + {newHandler && } + {currentHandlerId && } + + + + ); +}; + +export default Handlers; diff --git a/src/client/pages/index.tsx b/src/client/pages/index.tsx new file mode 100644 index 0000000..68b62fa --- /dev/null +++ b/src/client/pages/index.tsx @@ -0,0 +1,13 @@ +import { NextPage } from "next"; +import router from "next/router"; +import { useEffect } from "react"; + +const Index: NextPage = () => { + useEffect(() => { + router.push("/dashboard"); + }, []); + + return <>; +}; + +export default Index; diff --git a/src/client/pages/inspector.tsx b/src/client/pages/inspector.tsx new file mode 100644 index 0000000..9c2a00b --- /dev/null +++ b/src/client/pages/inspector.tsx @@ -0,0 +1,15 @@ +import { Header, HeaderSize, Loc } from "../src/components"; +import { NavbarLayout } from "../src/layouts"; +import { GLOBAL_LOC_KEYS } from "../src/utils"; + +export const App = () => { + return ( + +
+ {GLOBAL_LOC_KEYS.INSPECTOR} +
+
+ ); +}; + +export default App; diff --git a/src/client/pages/internal-server-error.tsx b/src/client/pages/internal-server-error.tsx new file mode 100644 index 0000000..85887b3 --- /dev/null +++ b/src/client/pages/internal-server-error.tsx @@ -0,0 +1,5 @@ +const InternalServerError = () => { + return

Internal Server Error

; +}; + +export default InternalServerError; diff --git a/modules/web_server/static/fonts/Cantarell-Bold.otf b/src/client/public/fonts/Cantarell-Bold.otf similarity index 100% rename from modules/web_server/static/fonts/Cantarell-Bold.otf rename to src/client/public/fonts/Cantarell-Bold.otf diff --git a/modules/web_server/static/fonts/Cantarell-ExtraBold.otf b/src/client/public/fonts/Cantarell-ExtraBold.otf similarity index 100% rename from modules/web_server/static/fonts/Cantarell-ExtraBold.otf rename to src/client/public/fonts/Cantarell-ExtraBold.otf diff --git a/modules/web_server/static/fonts/Cantarell-Light.otf b/src/client/public/fonts/Cantarell-Light.otf similarity index 100% rename from modules/web_server/static/fonts/Cantarell-Light.otf rename to src/client/public/fonts/Cantarell-Light.otf diff --git a/modules/web_server/static/fonts/Cantarell-Regular.otf b/src/client/public/fonts/Cantarell-Regular.otf similarity index 100% rename from modules/web_server/static/fonts/Cantarell-Regular.otf rename to src/client/public/fonts/Cantarell-Regular.otf diff --git a/modules/web_server/static/fonts/Cantarell-Thin.otf b/src/client/public/fonts/Cantarell-Thin.otf similarity index 100% rename from modules/web_server/static/fonts/Cantarell-Thin.otf rename to src/client/public/fonts/Cantarell-Thin.otf diff --git a/modules/web_server/static/fonts/IndieFlower-Regular.ttf b/src/client/public/fonts/IndieFlower-Regular.ttf similarity index 100% rename from modules/web_server/static/fonts/IndieFlower-Regular.ttf rename to src/client/public/fonts/IndieFlower-Regular.ttf diff --git a/modules/web_server/static/fonts/RobotoMono-Bold.ttf b/src/client/public/fonts/RobotoMono-Bold.ttf similarity index 100% rename from modules/web_server/static/fonts/RobotoMono-Bold.ttf rename to src/client/public/fonts/RobotoMono-Bold.ttf diff --git a/modules/web_server/static/fonts/RobotoMono-Medium.ttf b/src/client/public/fonts/RobotoMono-Medium.ttf similarity index 100% rename from modules/web_server/static/fonts/RobotoMono-Medium.ttf rename to src/client/public/fonts/RobotoMono-Medium.ttf diff --git a/modules/web_server/static/fonts/RobotoMono-Regular.ttf b/src/client/public/fonts/RobotoMono-Regular.ttf similarity index 100% rename from modules/web_server/static/fonts/RobotoMono-Regular.ttf rename to src/client/public/fonts/RobotoMono-Regular.ttf diff --git a/src/client/public/icons/cosmic/air.svg b/src/client/public/icons/cosmic/air.svg new file mode 100644 index 0000000..421bf24 --- /dev/null +++ b/src/client/public/icons/cosmic/air.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/battery-medium.svg b/src/client/public/icons/cosmic/battery-medium.svg new file mode 100644 index 0000000..7815fe0 --- /dev/null +++ b/src/client/public/icons/cosmic/battery-medium.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/branch-horizontal.svg b/src/client/public/icons/cosmic/branch-horizontal.svg new file mode 100644 index 0000000..b1bed09 --- /dev/null +++ b/src/client/public/icons/cosmic/branch-horizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/chart-square.svg b/src/client/public/icons/cosmic/chart-square.svg new file mode 100644 index 0000000..983790d --- /dev/null +++ b/src/client/public/icons/cosmic/chart-square.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/grid-mixed.svg b/src/client/public/icons/cosmic/grid-mixed.svg new file mode 100644 index 0000000..fa49f35 --- /dev/null +++ b/src/client/public/icons/cosmic/grid-mixed.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/client/public/icons/cosmic/processor.svg b/src/client/public/icons/cosmic/processor.svg new file mode 100644 index 0000000..db86ddd --- /dev/null +++ b/src/client/public/icons/cosmic/processor.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/sun.svg b/src/client/public/icons/cosmic/sun.svg new file mode 100644 index 0000000..731c47b --- /dev/null +++ b/src/client/public/icons/cosmic/sun.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/web_server/static/images/icons/types/http.png b/src/client/public/icons/custom/http.png similarity index 100% rename from modules/web_server/static/images/icons/types/http.png rename to src/client/public/icons/custom/http.png diff --git a/modules/web_server/static/images/favicon.png b/src/client/public/icons/custom/logo.png similarity index 100% rename from modules/web_server/static/images/favicon.png rename to src/client/public/icons/custom/logo.png diff --git a/src/client/public/images/chart.png b/src/client/public/images/chart.png new file mode 100644 index 0000000000000000000000000000000000000000..f8378ec44dbd671529450e0337b2ed2bfebd7a05 GIT binary patch literal 2432 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 NY^)qnPb@rQ{{t<5iKzep literal 0 HcmV?d00001 diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts new file mode 100644 index 0000000..c0e02e1 --- /dev/null +++ b/src/client/src/bridge/endpoints.ts @@ -0,0 +1,6 @@ +export enum Endpoint { + addHandler = "core/add-handler", + availableHandlers = "core/available-handlers", + handlers = "core/handlers", +} +export const getApiEndpoint = (endpoint: Endpoint) => `/api/${endpoint}`; diff --git a/src/client/src/bridge/hooks.ts b/src/client/src/bridge/hooks.ts new file mode 100644 index 0000000..af6e62f --- /dev/null +++ b/src/client/src/bridge/hooks.ts @@ -0,0 +1,17 @@ +import { useEffect, useState } from "react"; + +export const useQuery = (text: string, offset: number = 1) => { + const [queryString, setQueryString] = useState(""); + + useEffect(() => { + if (text.length > offset) { + setQueryString(text); + } else if (text.length === 0) { + setQueryString(""); + } else if (!queryString.startsWith(text)) { + setQueryString(""); + } + }, [text, queryString, offset]); + + return queryString; +}; diff --git a/src/client/src/bridge/index.ts b/src/client/src/bridge/index.ts new file mode 100644 index 0000000..49d8f6a --- /dev/null +++ b/src/client/src/bridge/index.ts @@ -0,0 +1 @@ +export * from "./modules"; diff --git a/src/client/src/bridge/models/HandlerModel.ts b/src/client/src/bridge/models/HandlerModel.ts new file mode 100644 index 0000000..ca6b838 --- /dev/null +++ b/src/client/src/bridge/models/HandlerModel.ts @@ -0,0 +1,32 @@ +import { CustomIconName } from "../../components"; + +export enum HandlerStatus { + DISCONNECTED, + CONNECTED, + DISABLED, +} + +export type HandlerConfig = Record; + +export interface HandlerOptions { + label?: string; + config: HandlerConfig; +} + +export interface HandlerAttribute { + id: number; + name: string; + value: string | number; +} + +export interface HandlerModel { + id: number; + type: string; + name: string; + icon: CustomIconName; + description: string; + status?: HandlerStatus; + options?: HandlerOptions; + configFields?: Record; + attributes?: HandlerAttribute[]; +} diff --git a/src/client/src/bridge/models/NewHandlerModel.ts b/src/client/src/bridge/models/NewHandlerModel.ts new file mode 100644 index 0000000..771380a --- /dev/null +++ b/src/client/src/bridge/models/NewHandlerModel.ts @@ -0,0 +1,6 @@ +import { HandlerOptions } from "./HandlerModel"; + +export interface NewHandlerModel { + type: string; + options: HandlerOptions; +} diff --git a/src/client/src/bridge/models/index.ts b/src/client/src/bridge/models/index.ts new file mode 100644 index 0000000..b79d13c --- /dev/null +++ b/src/client/src/bridge/models/index.ts @@ -0,0 +1,2 @@ +export * from "./HandlerModel"; +export * from "./NewHandlerModel"; diff --git a/src/client/src/bridge/models/utils.ts b/src/client/src/bridge/models/utils.ts new file mode 100644 index 0000000..a703513 --- /dev/null +++ b/src/client/src/bridge/models/utils.ts @@ -0,0 +1,11 @@ +import { HandlerStatus } from "./HandlerModel"; + +export const getStatusColor = (handlerStatus: HandlerStatus = HandlerStatus.DISCONNECTED) => { + const colors = ["red", "green", "gray"]; + return colors[handlerStatus]; +}; + +export const getStatusText = (handlerStatus: HandlerStatus = HandlerStatus.DISCONNECTED) => { + const texts = ["disconnected", "connected", "disabled"]; + return texts[handlerStatus]; +}; diff --git a/src/client/src/bridge/modules/availableHandlers.ts b/src/client/src/bridge/modules/availableHandlers.ts new file mode 100644 index 0000000..362ad0a --- /dev/null +++ b/src/client/src/bridge/modules/availableHandlers.ts @@ -0,0 +1,9 @@ +import useSWR from "swr"; + +import { Endpoint, getApiEndpoint } from "../endpoints"; +import { HandlerModel } from "../models"; +import { getJson } from "../utils"; + +export const useAvailableHandlers = () => { + return useSWR(getApiEndpoint(Endpoint.availableHandlers), getJson); +}; diff --git a/src/client/src/bridge/modules/handlers.ts b/src/client/src/bridge/modules/handlers.ts new file mode 100644 index 0000000..2086f3e --- /dev/null +++ b/src/client/src/bridge/modules/handlers.ts @@ -0,0 +1,21 @@ +import useSWR from "swr"; + +import { Endpoint, getApiEndpoint } from "../endpoints"; +import { HandlerModel, NewHandlerModel } from "../models"; +import { getJson, postJson } from "../utils"; + +export const useHandlers = () => { + return useSWR(getApiEndpoint(Endpoint.handlers), getJson); +}; + +export const useHandler = (handlerId: number) => { + return useSWR(`${getApiEndpoint(Endpoint.handlers)}/${handlerId}`, getJson); +}; + +export const addHandler = ( + handler: NewHandlerModel, + onSuccess?: () => void, + onError?: (error: any) => void, +) => { + return postJson(getApiEndpoint(Endpoint.addHandler), handler, onSuccess, onError); +}; diff --git a/src/client/src/bridge/modules/index.ts b/src/client/src/bridge/modules/index.ts new file mode 100644 index 0000000..3017d24 --- /dev/null +++ b/src/client/src/bridge/modules/index.ts @@ -0,0 +1,2 @@ +export * from "./availableHandlers"; +export * from "./handlers"; diff --git a/src/client/src/bridge/utils.ts b/src/client/src/bridge/utils.ts new file mode 100644 index 0000000..2f01b6d --- /dev/null +++ b/src/client/src/bridge/utils.ts @@ -0,0 +1,39 @@ +export const getJsonFetcher = (key: string) => + fetch(key, { + credentials: "include", + headers: { + "Content-Type": "application/json", + }, + }); + +export const getJson = (key: string) => getJsonFetcher(key).then((response) => response.json()); + +export const getArray = (key: string) => + getJsonFetcher(key).then((response) => Object.values(response.json())); + +export const postJsonFetcher = (key: string, payload: object) => + fetch(key, { + method: "POST", + credentials: "include", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }); + +export const postJson = ( + key: string, + payload: any, + onSuccess?: () => void, + onError?: (error: any) => void, +) => { + postJsonFetcher(key, payload) + .then((response) => { + if (response.status === 201) { + onSuccess?.(); + } + }) + .catch((error) => { + onError?.(error); + }); +}; diff --git a/src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx b/src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx new file mode 100644 index 0000000..a70c18e --- /dev/null +++ b/src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx @@ -0,0 +1,18 @@ +import { FC, ReactElement, useState } from "react"; + +export type BooleanSwitcherChildrenProps = { + turnOn: () => void; + turnOff: () => void; + value: boolean; +}; + +export type BooleanSwitcherProps = { + children: (props: BooleanSwitcherChildrenProps) => ReactElement; +}; + +export const BooleanSwitcher: FC = ({ children }) => { + const [value, setValue] = useState(false); + const turnOn = () => setValue(true); + const turnOff = () => setValue(false); + return children({ turnOn, turnOff, value }); +}; diff --git a/src/client/src/components/BooleanSwitcher/index.ts b/src/client/src/components/BooleanSwitcher/index.ts new file mode 100644 index 0000000..05758de --- /dev/null +++ b/src/client/src/components/BooleanSwitcher/index.ts @@ -0,0 +1 @@ +export * from "./BooleanSwitcher"; diff --git a/src/client/src/components/Button/Button.scss b/src/client/src/components/Button/Button.scss new file mode 100644 index 0000000..084c781 --- /dev/null +++ b/src/client/src/components/Button/Button.scss @@ -0,0 +1,73 @@ +@import "./mixins"; + +.button { + background: none; + font-family: $font-cantarell; + cursor: pointer; + border: none; + + &--expand { + width: 100%; + } + + &--grow { + flex-grow: 1; + } + + &--variant { + &-none { + padding: 0; + text-align: left; + } + + &-default { + @include button-theme; + + background: $primary-action; + color: $primary-text-light; + display: flex; + align-items: center; + + &:hover { + @include active-shadow; + + filter: brightness(1.1); + } + } + + &-outline { + @include button-theme; + + box-shadow: inset 0 0 0 2px $blue; + color: $blue; + + &:hover { + box-shadow: inset 0 0 0 2px $blue, 0 0 10px $grey-bbb; + } + } + + &-navbar { + text-transform: unset; + font-weight: normal; + font-size: 15px; + background: unset; + color: $grey-333; + text-align: left; + display: flex; + align-items: center; + gap: 12px; + padding: 13px; + border-radius: 10px; + + &:hover { + background: $grey-eee; + } + } + } + + &--variant-navbar#{&}--active { + @include active; + + font-weight: bold; + } +} diff --git a/src/client/src/components/Button/Button.tsx b/src/client/src/components/Button/Button.tsx new file mode 100644 index 0000000..29af4d4 --- /dev/null +++ b/src/client/src/components/Button/Button.tsx @@ -0,0 +1,54 @@ +import { FunctionComponent, MouseEvent, ReactNode } from "react"; + +import { bemClassNames } from "../../utils"; +import { Icon, IconVariant, ThemedIconName } from "../Icon"; + +export enum ButtonVariant { + default = "default", + outline = "outline", + navbar = "navbar", + menu = "menu", + none = "none", +} + +export enum ButtonType { + submit = "submit", + button = "button", +} + +export type ButtonProps = { + type?: ButtonType; + variant?: ButtonVariant; + expand?: boolean; + grow?: boolean; + active?: boolean; + icon?: ThemedIconName; + onClick?: (e: MouseEvent) => void; + children?: ReactNode; +}; + +const classNames = bemClassNames("button"); + +export const Button: FunctionComponent = ({ + type = ButtonType.submit, + variant = ButtonVariant.default, + expand = false, + grow = false, + active = false, + icon, + onClick, + children, +}) => { + return ( + + ); +}; diff --git a/src/client/src/components/Button/index.ts b/src/client/src/components/Button/index.ts new file mode 100644 index 0000000..e22c29a --- /dev/null +++ b/src/client/src/components/Button/index.ts @@ -0,0 +1 @@ +export * from "./Button"; diff --git a/src/client/src/components/Button/mixins.scss b/src/client/src/components/Button/mixins.scss new file mode 100644 index 0000000..3a92aa2 --- /dev/null +++ b/src/client/src/components/Button/mixins.scss @@ -0,0 +1,7 @@ +@mixin button-theme { + font-weight: bold; + font-size: 13px; + text-transform: uppercase; + border-radius: 7px; + padding: 10px 15px; +} diff --git a/src/client/src/components/Card/Card.scss b/src/client/src/components/Card/Card.scss new file mode 100644 index 0000000..b08dbfa --- /dev/null +++ b/src/client/src/components/Card/Card.scss @@ -0,0 +1,33 @@ +@import "./mixins"; + +@import "./components/CardBody/CardBody"; +@import "./components/CardHeader/CardHeader"; + +.card { + @include card; + + &--fullwidth { + width: 100%; + } + + &--overflow { + &-auto { + overflow: auto; + } + } + + &--variant { + &-clickable { + cursor: pointer; + + &:hover { + box-shadow: 2px 2px 5px $grey-ccc; + } + } + } + + &--variant-clickable#{&}--active { + background: $purple; + color: white; + } +} diff --git a/src/client/src/components/Card/Card.tsx b/src/client/src/components/Card/Card.tsx new file mode 100644 index 0000000..342d3c9 --- /dev/null +++ b/src/client/src/components/Card/Card.tsx @@ -0,0 +1,43 @@ +import { Property } from "csstype"; +import { FunctionComponent, MouseEventHandler, ReactNode } from "react"; + +import { bemClassNames } from "../../utils"; +import { FlexLayout } from "../FlexLayout"; + +const bem = bemClassNames("card"); + +export enum CardVariant { + default = "default", + clickable = "clickable", +} + +export type CardProps = { + className?: string; + fullwidth?: boolean; + overflow?: Property.Overflow; + gap?: Property.Gap; + variant?: CardVariant; + active?: boolean; + children: ReactNode; + onClick?: MouseEventHandler; +}; + +export const Card: FunctionComponent = ({ + className, + fullwidth = false, + overflow, + gap = "20px", + variant = CardVariant.default, + active = false, + children, + onClick, +}) => { + let resultClassName = bem({ fullwidth, overflow, variant, active }); + if (className) resultClassName += " " + className; + + return ( + + {children} + + ); +}; diff --git a/src/client/src/components/Card/components/CardBody/CardBody.scss b/src/client/src/components/Card/components/CardBody/CardBody.scss new file mode 100644 index 0000000..1bc8fa1 --- /dev/null +++ b/src/client/src/components/Card/components/CardBody/CardBody.scss @@ -0,0 +1,3 @@ +.card-body { + @include card-item; +} diff --git a/src/client/src/components/Card/components/CardBody/CardBody.tsx b/src/client/src/components/Card/components/CardBody/CardBody.tsx new file mode 100644 index 0000000..ce04008 --- /dev/null +++ b/src/client/src/components/Card/components/CardBody/CardBody.tsx @@ -0,0 +1,20 @@ +import { Property } from "csstype"; +import { FunctionComponent, ReactNode } from "react"; + +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; + +export type CardBodyProps = { + gap?: Property.Gap; + children: ReactNode; +}; + +const classNames = bemClassNames("card-body"); + +export const CardBody: FunctionComponent = ({ gap = "20px", children }) => { + return ( + + {children} + + ); +}; diff --git a/src/client/src/components/Card/components/CardBody/index.ts b/src/client/src/components/Card/components/CardBody/index.ts new file mode 100644 index 0000000..3eda2d6 --- /dev/null +++ b/src/client/src/components/Card/components/CardBody/index.ts @@ -0,0 +1 @@ +export * from "./CardBody"; diff --git a/src/client/src/components/Card/components/CardHeader/CardHeader.scss b/src/client/src/components/Card/components/CardHeader/CardHeader.scss new file mode 100644 index 0000000..084112f --- /dev/null +++ b/src/client/src/components/Card/components/CardHeader/CardHeader.scss @@ -0,0 +1,17 @@ +.card-header { + @include card-item; + + align-items: center; + + &__title { + font-weight: bold; + font-size: 18px; + } + + &__subtitle { + font-weight: normal; + font-size: 14px; + color: $grey-555; + margin-top: 2px; + } +} diff --git a/src/client/src/components/Card/components/CardHeader/CardHeader.tsx b/src/client/src/components/Card/components/CardHeader/CardHeader.tsx new file mode 100644 index 0000000..6f8b64e --- /dev/null +++ b/src/client/src/components/Card/components/CardHeader/CardHeader.tsx @@ -0,0 +1,25 @@ +import { FunctionComponent } from "react"; + +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; +import { CustomIconName, Icon, IconVariant, ThemedIconName } from "../../../Icon"; + +export type CardHeaderProps = { + title: string; + icon?: ThemedIconName | CustomIconName; + subtitle?: string; +}; + +const classNames = bemClassNames("card-header"); + +export const CardHeader: FunctionComponent = ({ title, icon, subtitle }) => { + return ( + + {icon && } + + {title &&
{title}
} + {subtitle &&
{subtitle}
} +
+
+ ); +}; diff --git a/src/client/src/components/Card/components/CardHeader/index.ts b/src/client/src/components/Card/components/CardHeader/index.ts new file mode 100644 index 0000000..0f559d4 --- /dev/null +++ b/src/client/src/components/Card/components/CardHeader/index.ts @@ -0,0 +1 @@ +export * from "./CardHeader"; diff --git a/src/client/src/components/Card/components/index.ts b/src/client/src/components/Card/components/index.ts new file mode 100644 index 0000000..898a306 --- /dev/null +++ b/src/client/src/components/Card/components/index.ts @@ -0,0 +1,2 @@ +export * from "./CardBody"; +export * from "./CardHeader"; diff --git a/src/client/src/components/Card/index.ts b/src/client/src/components/Card/index.ts new file mode 100644 index 0000000..1ac82d6 --- /dev/null +++ b/src/client/src/components/Card/index.ts @@ -0,0 +1,2 @@ +export * from "./Card"; +export * from "./components"; diff --git a/src/client/src/components/Card/mixins.scss b/src/client/src/components/Card/mixins.scss new file mode 100644 index 0000000..2fc3605 --- /dev/null +++ b/src/client/src/components/Card/mixins.scss @@ -0,0 +1,11 @@ +@mixin card-item { + padding: 30px; + + &:first-child { + padding-bottom: 0; + } + + &:only-child { + padding-bottom: 30px; + } +} diff --git a/src/client/src/components/FlexLayout/FlexLayout.scss b/src/client/src/components/FlexLayout/FlexLayout.scss new file mode 100644 index 0000000..a824568 --- /dev/null +++ b/src/client/src/components/FlexLayout/FlexLayout.scss @@ -0,0 +1,13 @@ +.flex-layout { + display: flex; + + &--direction { + &-row { + flex-direction: row; + } + + &-column { + flex-direction: column; + } + } +} diff --git a/src/client/src/components/FlexLayout/FlexLayout.tsx b/src/client/src/components/FlexLayout/FlexLayout.tsx new file mode 100644 index 0000000..efc4b95 --- /dev/null +++ b/src/client/src/components/FlexLayout/FlexLayout.tsx @@ -0,0 +1,50 @@ +import { Property } from "csstype"; +import { FunctionComponent, ReactNode } from "react"; + +import { InteractiveProps } from "../../types"; +import { bemClassNames } from "../../utils"; + +const bem = bemClassNames("flex-layout"); + +export type FlexLayoutProps = InteractiveProps & { + justifyContent?: Property.JustifyContent; + alignItems?: Property.AlignItems; + direction?: Property.FlexDirection; + wrap?: Property.FlexWrap; + gap?: Property.Gap; + grow?: boolean; + className?: string; + children: ReactNode; +}; + +export const FlexLayout: FunctionComponent = ({ + justifyContent = "unset", + alignItems, + direction = "row", + wrap, + gap, + grow, + className, + children, + onClick, + onWheel, + onMouseDown, + onMouseUp, + onMouseEnter, + onMouseLeave, +}) => { + let resultClassName = bem(); + if (className) resultClassName += " " + className; + + const flexGrow = grow ? "1" : undefined; + + return ( +
+ {children} +
+ ); +}; diff --git a/src/client/src/components/FlexLayout/index.ts b/src/client/src/components/FlexLayout/index.ts new file mode 100644 index 0000000..81c94ac --- /dev/null +++ b/src/client/src/components/FlexLayout/index.ts @@ -0,0 +1 @@ +export * from "./FlexLayout"; diff --git a/src/client/src/components/Header/Header.scss b/src/client/src/components/Header/Header.scss new file mode 100644 index 0000000..9bb965c --- /dev/null +++ b/src/client/src/components/Header/Header.scss @@ -0,0 +1,3 @@ +.header { + color: $primary-text; +} diff --git a/src/client/src/components/Header/Header.tsx b/src/client/src/components/Header/Header.tsx new file mode 100644 index 0000000..1d2fad9 --- /dev/null +++ b/src/client/src/components/Header/Header.tsx @@ -0,0 +1,31 @@ +import { FC, ReactNode } from "react"; + +import { bemClassNames } from "../../utils"; + +export enum HeaderSize { + h1 = "h1", + h2 = "h2", + h3 = "h3", + h4 = "h4", +} + +export type HeaderProps = { + children?: ReactNode; + size?: HeaderSize; +}; + +const classNames = bemClassNames("header"); + +export const Header: FC = ({ children, size = HeaderSize.h1 }) => { + const className = classNames({ size: size }); + switch (size) { + case HeaderSize.h1: + return

{children}

; + case HeaderSize.h2: + return

{children}

; + case HeaderSize.h3: + return

{children}

; + case HeaderSize.h4: + return

{children}

; + } +}; diff --git a/src/client/src/components/Header/index.ts b/src/client/src/components/Header/index.ts new file mode 100644 index 0000000..9e08a64 --- /dev/null +++ b/src/client/src/components/Header/index.ts @@ -0,0 +1 @@ +export * from "./Header"; diff --git a/src/client/src/components/Icon/Icon.scss b/src/client/src/components/Icon/Icon.scss new file mode 100644 index 0000000..3b994c2 --- /dev/null +++ b/src/client/src/components/Icon/Icon.scss @@ -0,0 +1,30 @@ +.icon { + filter: grayscale(1); + opacity: 0.7; + transition: ease-in-out 200ms; + width: 24px; + height: 24px; + + &--invert { + opacity: 1; + filter: grayscale(1) invert(1); + } + + &--clickable { + cursor: pointer; + } + + &--variant { + &-circle { + background: $primary-text-light; + padding: 7px; + border-radius: 100%; + } + + &-button { + width: 22px; + height: 22px; + margin-right: 5px; + } + } +} diff --git a/src/client/src/components/Icon/Icon.tsx b/src/client/src/components/Icon/Icon.tsx new file mode 100644 index 0000000..998c595 --- /dev/null +++ b/src/client/src/components/Icon/Icon.tsx @@ -0,0 +1,47 @@ +import Image from "next/image"; +import { FunctionComponent, MouseEventHandler } from "react"; +import { useSelector } from "react-redux"; + +import { selectIconThemeState } from "../../store/settingsSlice"; +import { bemClassNames } from "../../utils"; +import { getIcon, IconName } from "./enums"; + +export enum IconVariant { + circle = "circle", + default = "default", + navbar = "navbar", + button = "button", +} + +export type IconProps = { + icon: IconName; + theme?: string; + variant?: IconVariant; + size?: number; + invert?: boolean; + onClick?: MouseEventHandler; +}; + +const classNames = bemClassNames("icon"); + +export const Icon: FunctionComponent = ({ + icon, + theme, + size = 30, + variant = IconVariant.default, + invert = false, + onClick, +}) => { + const iconTheme = useSelector(selectIconThemeState); + + return ( + {`${icon} + ); +}; diff --git a/src/client/src/components/Icon/enums.ts b/src/client/src/components/Icon/enums.ts new file mode 100644 index 0000000..5e3b41e --- /dev/null +++ b/src/client/src/components/Icon/enums.ts @@ -0,0 +1,55 @@ +export const getIcon = (icon: IconName, theme: string = "cosmic") => { + if (Object.values(CustomIconName).includes(icon as CustomIconName)) { + return `/icons/custom/${icon}.png`; + } + return `/icons/${theme}/${icon}.svg`; +}; + +export enum ThemedIconName { + air = "air", + arrowCircleLeft = "arrow-circle-left", + arrowCircleRight = "arrow-circle-right", + arrowLeft = "arrow-left", + arrowRight = "arrow-right", + basket = "basket", + batteryMedium = "battery-medium", + box = "cart-3", + branchHorizontal = "branch-horizontal", + calendar = "calendar", + cam = "cam", + capsule = "capsule", + cart = "cart-4", + cast = "cast", + chartSquare = "chart-square", + cloud = "cloud", + coin = "coin", + copy = "copy", + cross = "cross", + crossSmall = "cross-small", + globe = "globe-1", + gridMixed = "grid-mixed", + headphones = "headphones", + home = "home-1", + laptop = "laptop", + location = "location-2", + logout = "logout", + music = "music", + plus = "plus", + plusSmall = "plus-small", + plusCircle = "plus-circle", + power = "power", + print = "print", + processor = "processor", + settings = "settings", + sun = "sun", + smartphone = "smartphone", + user = "user-1", + wallet = "wallet", +} + +export enum CustomIconName { + http = "http", + logo = "logo", +} + +export type IconName = ThemedIconName | CustomIconName; diff --git a/src/client/src/components/Icon/index.ts b/src/client/src/components/Icon/index.ts new file mode 100644 index 0000000..f3a7d8a --- /dev/null +++ b/src/client/src/components/Icon/index.ts @@ -0,0 +1,2 @@ +export * from "./enums"; +export * from "./Icon"; diff --git a/src/client/src/components/Input/Input.scss b/src/client/src/components/Input/Input.scss new file mode 100644 index 0000000..a6ab5b9 --- /dev/null +++ b/src/client/src/components/Input/Input.scss @@ -0,0 +1,36 @@ +@import "./mixins"; + +.input-wrapper { + $this: &; + + background: $primary-text-light; + display: block; + padding: 9px 10px 10px; + border-radius: 7px; + + &__title { + text-transform: uppercase; + color: $blue; + font-weight: 700; + font-size: 12px; + margin-bottom: 3px; + display: inline-block; + transition: all 100ms ease-in-out; + opacity: 0.6; + } + + &__input-element, + &__select-element { + @extend %input; + } + + &:focus-within { + box-shadow: inset 0 0 0 1px $blue; + + #{$this}__title, + #{$this}__input-element, + #{$this}__select-element { + opacity: 1; + } + } +} diff --git a/src/client/src/components/Input/Input.tsx b/src/client/src/components/Input/Input.tsx new file mode 100644 index 0000000..ab680f4 --- /dev/null +++ b/src/client/src/components/Input/Input.tsx @@ -0,0 +1,51 @@ +import { FC, HTMLInputTypeAttribute, MutableRefObject, useState } from "react"; + +import { bemClassNames } from "../../utils"; + +const classNames = bemClassNames("input-wrapper"); + +export type InputProps = { + locKey?: number; + type?: HTMLInputTypeAttribute | "pick"; + placeholder?: string; + value?: string; + name?: string; + innerRef?: MutableRefObject; + min?: number; + step?: number; + onValueChange?: (value: string) => void; + onDateChange?: (date: Date | null) => void; +}; + +export const Input: FC = ({ + type = "text", + placeholder = "", + value = "", + name, + innerRef, + min, + step, + onValueChange, + onDateChange, +}) => { + const [valueState, setValueState] = useState(value); + + return ( +
+ { + setValueState(e.target.value); + if (type === "datetime-local") { + onDateChange?.(e.target.valueAsDate); + } else { + onValueChange?.(e.target.value); + } + }} + {...{ type, placeholder, name, min, step }} + /> +
+ ); +}; diff --git a/src/client/src/components/Input/index.ts b/src/client/src/components/Input/index.ts new file mode 100644 index 0000000..be66d76 --- /dev/null +++ b/src/client/src/components/Input/index.ts @@ -0,0 +1 @@ +export * from "./Input"; diff --git a/src/client/src/components/Input/mixins.scss b/src/client/src/components/Input/mixins.scss new file mode 100644 index 0000000..bbeabde --- /dev/null +++ b/src/client/src/components/Input/mixins.scss @@ -0,0 +1,14 @@ +%input { + width: 100%; + box-sizing: border-box; + background: transparent; + border: none; + font-size: 15px; + font-weight: 600; + color: $blue; + font-family: $font-cantarell; + outline: none; + padding: 0; + opacity: 0.7; + transition: all 100ms ease-in-out; +} diff --git a/src/client/src/components/InputRenderer/InputRenderer.scss b/src/client/src/components/InputRenderer/InputRenderer.scss new file mode 100644 index 0000000..892b5a9 --- /dev/null +++ b/src/client/src/components/InputRenderer/InputRenderer.scss @@ -0,0 +1,5 @@ +.input-renderer { + &__label { + @include subtitle; + } +} diff --git a/src/client/src/components/InputRenderer/InputRenderer.tsx b/src/client/src/components/InputRenderer/InputRenderer.tsx new file mode 100644 index 0000000..be386e5 --- /dev/null +++ b/src/client/src/components/InputRenderer/InputRenderer.tsx @@ -0,0 +1,28 @@ +import { FC } from "react"; + +import { bemClassNames } from "../../utils"; +import { FlexLayout } from "../FlexLayout"; +import { Input } from "../Input"; + +const bem = bemClassNames("input-renderer"); + +export type InputRendererProps = { + name: string; + type: string; + title: string; + value?: string; + onValueChange?: (value: string) => void; +}; + +export const InputRenderer: FC = ({ name, type, title, value, onValueChange }) => { + return ( + + + {type === "string" && } + {type === "float" && } + {type === "int" && } + + ); +}; diff --git a/src/client/src/components/InputRenderer/index.ts b/src/client/src/components/InputRenderer/index.ts new file mode 100644 index 0000000..9aed710 --- /dev/null +++ b/src/client/src/components/InputRenderer/index.ts @@ -0,0 +1 @@ +export * from "./InputRenderer"; diff --git a/src/client/src/components/LinkButton/LinkButton.tsx b/src/client/src/components/LinkButton/LinkButton.tsx new file mode 100644 index 0000000..645986c --- /dev/null +++ b/src/client/src/components/LinkButton/LinkButton.tsx @@ -0,0 +1,36 @@ +import { useRouter } from "next/router"; +import { FunctionComponent } from "react"; + +import { Button, ButtonProps, ButtonType, ButtonVariant } from "../Button"; + +export type LinkButtonProps = Omit & { + href?: string; +}; + +export const LinkButton: FunctionComponent = ({ + variant = ButtonVariant.default, + expand, + grow, + href, + active, + icon, + children, +}) => { + const router = useRouter(); + + return ( + + ); +}; diff --git a/src/client/src/components/LinkButton/index.ts b/src/client/src/components/LinkButton/index.ts new file mode 100644 index 0000000..6287dc8 --- /dev/null +++ b/src/client/src/components/LinkButton/index.ts @@ -0,0 +1 @@ +export * from "./LinkButton"; diff --git a/src/client/src/components/Loc/Loc.tsx b/src/client/src/components/Loc/Loc.tsx new file mode 100644 index 0000000..b2ab52b --- /dev/null +++ b/src/client/src/components/Loc/Loc.tsx @@ -0,0 +1,14 @@ +import { FC } from "react"; +import { useSelector } from "react-redux"; + +import { selectLocaleState } from "../../store/settingsSlice"; +import { translate } from "./utils"; + +export type LocProps = { + children: number; +}; + +export const Loc: FC = ({ children }) => { + const locale = useSelector(selectLocaleState); + return <>{translate(children, locale)}; +}; diff --git a/src/client/src/components/Loc/index.ts b/src/client/src/components/Loc/index.ts new file mode 100644 index 0000000..b26982d --- /dev/null +++ b/src/client/src/components/Loc/index.ts @@ -0,0 +1 @@ +export * from "./Loc"; diff --git a/src/client/src/components/Loc/utils.ts b/src/client/src/components/Loc/utils.ts new file mode 100644 index 0000000..0a55719 --- /dev/null +++ b/src/client/src/components/Loc/utils.ts @@ -0,0 +1,29 @@ +import { locDatabase } from "../../utils"; + +export const getLocale = () => { + let locale = navigator.language; + if (locale === "cs") { + locale += "-CZ"; + } + return locale; +}; + +export enum supportedLocales { + en_US = "en-US", + cs_CZ = "cs-CZ", +} + +export enum localeNames { + "en-US" = "English", + "cs-CZ" = "Čeština", +} + +export const translate = (locKey: number, locale?: supportedLocales) => { + const targetLocale = locale ?? getLocale(); + const loadedTranslation = locDatabase[locKey]; + if (loadedTranslation) { + return loadedTranslation[targetLocale] ?? loadedTranslation["en-US"]; + } else { + return "???"; + } +}; diff --git a/src/client/src/components/Menu/Menu.scss b/src/client/src/components/Menu/Menu.scss new file mode 100644 index 0000000..ab2d16a --- /dev/null +++ b/src/client/src/components/Menu/Menu.scss @@ -0,0 +1,25 @@ +@import "./components/MenuItem/MenuItem"; +@import "./components/MenuSection/MenuSection"; + +.menu { + background: $white; + max-width: 350px; + padding: 30px; + height: 100vh; + box-sizing: border-box; + + &__header { + margin-bottom: 30px; + } + + &__title { + margin: 0; + font-size: 23px; + } + + &__description { + margin: 0; + font-size: 14px; + font-weight: normal; + } +} diff --git a/src/client/src/components/Menu/Menu.tsx b/src/client/src/components/Menu/Menu.tsx new file mode 100644 index 0000000..56b523a --- /dev/null +++ b/src/client/src/components/Menu/Menu.tsx @@ -0,0 +1,24 @@ +import { FC, ReactNode } from "react"; + +import { bemClassNames } from "../../utils"; +import { FlexLayout } from "../FlexLayout"; + +const bem = bemClassNames("menu"); + +export type MenuComponentProps = { + title: string; + description: string; + children?: ReactNode; +}; + +export const Menu: FC = ({ title, description, children }) => { + return ( + +
+

{title}

+

{description}

+
+ {children} +
+ ); +}; diff --git a/src/client/src/components/Menu/components/MenuItem/MenuItem.scss b/src/client/src/components/Menu/components/MenuItem/MenuItem.scss new file mode 100644 index 0000000..3afad5e --- /dev/null +++ b/src/client/src/components/Menu/components/MenuItem/MenuItem.scss @@ -0,0 +1,47 @@ +.menu-item { + background: $primary-text-light; + border-radius: 10px; + padding: 12px 15px; + align-items: center; + cursor: pointer; + + &:hover { + background: $grey-eee; + } + + &__title { + font-weight: bold; + font-size: 15px; + } + + &__description { + font-size: 13px; + } + + &__color-flag { + width: 8px; + height: 100%; + border-radius: 10px; + box-sizing: border-box; + + &--color { + &-green { + background: #80dc60; + } + + &-red { + background: #dc6860; + } + } + } + + &--active { + @include active; + + color: white; + + &:hover { + background: $blue; + } + } +} diff --git a/src/client/src/components/Menu/components/MenuItem/MenuItem.tsx b/src/client/src/components/Menu/components/MenuItem/MenuItem.tsx new file mode 100644 index 0000000..b279a99 --- /dev/null +++ b/src/client/src/components/Menu/components/MenuItem/MenuItem.tsx @@ -0,0 +1,36 @@ +import { FC } from "react"; + +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; +import { Icon, IconName } from "../../../Icon"; + +const bem = bemClassNames("menu-item"); + +export type AbstractComponentProps = { + title: string; + description?: string; + active?: boolean; + icon?: IconName; + colorFlag?: string; + onClick?: () => void; +}; + +export const MenuItem: FC = ({ + title, + description, + icon, + colorFlag, + active, + onClick, +}) => { + return ( + + {icon && } + +
{title}
+ {description &&
{description}
} +
+
+ + ); +}; diff --git a/src/client/src/components/Menu/components/MenuItem/index.ts b/src/client/src/components/Menu/components/MenuItem/index.ts new file mode 100644 index 0000000..3df96e8 --- /dev/null +++ b/src/client/src/components/Menu/components/MenuItem/index.ts @@ -0,0 +1 @@ +export * from "./MenuItem"; diff --git a/src/client/src/components/Menu/components/MenuSection/MenuSection.scss b/src/client/src/components/Menu/components/MenuSection/MenuSection.scss new file mode 100644 index 0000000..da1512a --- /dev/null +++ b/src/client/src/components/Menu/components/MenuSection/MenuSection.scss @@ -0,0 +1,18 @@ +.menu-section { + margin-top: 20px; + + &__header { + margin-bottom: 10px; + } + + &__title { + margin: 0; + font-size: 18px; + } + + &__description { + margin: 0; + font-size: 14px; + font-weight: normal; + } +} diff --git a/src/client/src/components/Menu/components/MenuSection/MenuSection.tsx b/src/client/src/components/Menu/components/MenuSection/MenuSection.tsx new file mode 100644 index 0000000..3e76b83 --- /dev/null +++ b/src/client/src/components/Menu/components/MenuSection/MenuSection.tsx @@ -0,0 +1,24 @@ +import { FC, ReactNode } from "react"; + +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; + +const bem = bemClassNames("menu-section"); + +export type MenuSectionProps = { + title: string; + description: string; + children?: ReactNode; +}; + +export const MenuSection: FC = ({ title, description, children }) => { + return ( + +
+

{title}

+

{description}

+
+ {children} +
+ ); +}; diff --git a/src/client/src/components/Menu/components/MenuSection/index.ts b/src/client/src/components/Menu/components/MenuSection/index.ts new file mode 100644 index 0000000..7bb2647 --- /dev/null +++ b/src/client/src/components/Menu/components/MenuSection/index.ts @@ -0,0 +1 @@ +export * from "./MenuSection"; diff --git a/src/client/src/components/Menu/components/index.ts b/src/client/src/components/Menu/components/index.ts new file mode 100644 index 0000000..cdb49b2 --- /dev/null +++ b/src/client/src/components/Menu/components/index.ts @@ -0,0 +1,2 @@ +export * from "./MenuItem"; +export * from "./MenuSection"; diff --git a/src/client/src/components/Menu/index.ts b/src/client/src/components/Menu/index.ts new file mode 100644 index 0000000..114fc23 --- /dev/null +++ b/src/client/src/components/Menu/index.ts @@ -0,0 +1,2 @@ +export * from "./components"; +export * from "./Menu"; diff --git a/src/client/src/components/Navbar/Navbar.scss b/src/client/src/components/Navbar/Navbar.scss new file mode 100644 index 0000000..4ad1bd5 --- /dev/null +++ b/src/client/src/components/Navbar/Navbar.scss @@ -0,0 +1,23 @@ +@import "./components/NavbarItem/NavbarItem"; +@import "./components/NavbarLogo/NavbarLogo"; +@import "./components/NavbarUser/NavbarUser"; + +.navbar { + background: $white; + min-width: $navbar-max-width; + height: 100vh; + + &__header { + height: 150px; + } + + &__items { + height: 100%; + flex-grow: 1; + } + + &--collapsed { + min-width: $navbar-width-collapsed; + transition: ease-in-out 200ms; + } +} diff --git a/src/client/src/components/Navbar/Navbar.tsx b/src/client/src/components/Navbar/Navbar.tsx new file mode 100644 index 0000000..cd0aa5d --- /dev/null +++ b/src/client/src/components/Navbar/Navbar.tsx @@ -0,0 +1,21 @@ +import { FunctionComponent, ReactNode } from "react"; + +import { User } from "../../types"; +import { bemClassNames } from "../../utils"; +import { FlexLayout } from "../"; + +export type NavbarProps = { + collapsed?: boolean; + user?: User; + children: ReactNode; +}; + +const classNames = bemClassNames("navbar"); + +export const Navbar: FunctionComponent = ({ children }) => { + return ( + + {children} + + ); +}; diff --git a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss new file mode 100644 index 0000000..a5145cc --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss @@ -0,0 +1,19 @@ +.navbar-item { + margin: 5px 0 0; + padding: 13px 15px; + background: $white; + border-radius: 10px; + font-weight: bold; + width: 70%; + cursor: pointer; + + &:hover { + background: $primary-background; + opacity: 0.8; + } + + &--active { + background: $primary-background; + opacity: 1 !important; + } +} diff --git a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx new file mode 100644 index 0000000..010db87 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx @@ -0,0 +1,35 @@ +import { useRouter } from "next/router"; +import { FC } from "react"; +import { useSelector } from "react-redux"; + +import { selectNavbarCollapsedState } from "../../../../store/settingsSlice"; +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; +import { Icon, ThemedIconName } from "../../../Icon"; +import { Loc } from "../../../Loc"; + +const bem = bemClassNames("navbar-item"); + +export type NavbarItemProps = { + locKey: number; + icon: ThemedIconName; + href: string; +}; + +export const NavbarItem: FC = ({ locKey, icon, href }) => { + const navbarCollapsed = useSelector(selectNavbarCollapsedState); + const router = useRouter(); + return ( + { + if (href) router.push(href); + }} + alignItems="center" + gap="16px" + > + + {!navbarCollapsed && {locKey}} + + ); +}; diff --git a/src/client/src/components/Navbar/components/NavbarItem/index.ts b/src/client/src/components/Navbar/components/NavbarItem/index.ts new file mode 100644 index 0000000..4cde3a3 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarItem/index.ts @@ -0,0 +1 @@ +export * from "./NavbarItem"; diff --git a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss new file mode 100644 index 0000000..8156d56 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss @@ -0,0 +1,3 @@ +.navbar-logo { + margin: 25px auto; +} diff --git a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx new file mode 100644 index 0000000..f344249 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx @@ -0,0 +1,18 @@ +import { FC } from "react"; + +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; +import { CustomIconName, Icon } from "../../../Icon"; + +export type NavbarLogoProps = { +}; + +const classNames = bemClassNames("navbar-logo"); + +export const NavbarLogo: FC = () => { + return ( + + + + ); +}; diff --git a/src/client/src/components/Navbar/components/NavbarLogo/index.ts b/src/client/src/components/Navbar/components/NavbarLogo/index.ts new file mode 100644 index 0000000..31b96e6 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarLogo/index.ts @@ -0,0 +1 @@ +export * from "./NavbarLogo"; diff --git a/src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx b/src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx new file mode 100644 index 0000000..2bcefa4 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx @@ -0,0 +1,18 @@ +import { FC, ReactNode } from "react"; + +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; + +const bem = bemClassNames("navbar-section"); + +export type NavbarSectionProps = { + children: ReactNode; +}; + +export const NavbarSection: FC = ({ children }) => { + return ( + + {children} + + ); +}; diff --git a/src/client/src/components/Navbar/components/NavbarSection/index.ts b/src/client/src/components/Navbar/components/NavbarSection/index.ts new file mode 100644 index 0000000..89894f5 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarSection/index.ts @@ -0,0 +1 @@ +export * from "./NavbarSection"; diff --git a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss new file mode 100644 index 0000000..22e643d --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss @@ -0,0 +1,20 @@ +.navbar-user { + $border: solid 1px $primary-text-light; + + margin: 5px 15px 5px 20px; + gap: 12px; + border-top: $border; + //border-bottom: $border; + padding: 20px 0; + + &__name { + font-weight: bold; + font-size: 14px; + color: $grey-333; + } + + &__email { + font-size: 12px; + color: $grey-555; + } +} diff --git a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx new file mode 100644 index 0000000..fea4a58 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx @@ -0,0 +1,28 @@ +import { FunctionComponent } from "react"; + +import { bemClassNames } from "../../../../utils"; +import { FlexLayout } from "../../../FlexLayout"; +import { Icon, IconVariant, ThemedIconName } from "../../../Icon"; + +export type NavbarUserProps = { + userName: string; + email: string; + picture?: string; + collapsed: boolean; +}; + +const classNames = bemClassNames("navbar-user"); + +export const NavbarUser: FunctionComponent = ({ userName, email, collapsed }) => { + return ( + + + {!collapsed && ( + +
{userName}
+
{email}
+
+ )} +
+ ); +}; diff --git a/src/client/src/components/Navbar/components/NavbarUser/index.ts b/src/client/src/components/Navbar/components/NavbarUser/index.ts new file mode 100644 index 0000000..ec4b499 --- /dev/null +++ b/src/client/src/components/Navbar/components/NavbarUser/index.ts @@ -0,0 +1 @@ +export * from "./NavbarUser"; diff --git a/src/client/src/components/Navbar/components/index.ts b/src/client/src/components/Navbar/components/index.ts new file mode 100644 index 0000000..7a9592b --- /dev/null +++ b/src/client/src/components/Navbar/components/index.ts @@ -0,0 +1,4 @@ +export * from "./NavbarItem"; +export * from "./NavbarLogo"; +export * from "./NavbarSection"; +export * from "./NavbarUser"; diff --git a/src/client/src/components/Navbar/index.ts b/src/client/src/components/Navbar/index.ts new file mode 100644 index 0000000..07f2783 --- /dev/null +++ b/src/client/src/components/Navbar/index.ts @@ -0,0 +1,2 @@ +export * from "./components"; +export * from "./Navbar"; diff --git a/src/client/src/components/Separator/Separator.scss b/src/client/src/components/Separator/Separator.scss new file mode 100644 index 0000000..676151d --- /dev/null +++ b/src/client/src/components/Separator/Separator.scss @@ -0,0 +1,7 @@ +.separator { + &--variant { + &-menu { + height: 0; + } + } +} diff --git a/src/client/src/components/Separator/Separator.tsx b/src/client/src/components/Separator/Separator.tsx new file mode 100644 index 0000000..59ca96a --- /dev/null +++ b/src/client/src/components/Separator/Separator.tsx @@ -0,0 +1,17 @@ +import { FC } from "react"; + +import { bemClassNames } from "../../utils"; + +const bem = bemClassNames("separator"); + +export enum SeparatorVariant { + menu = "menu", +} + +export type SeparatorProps = { + variant: SeparatorVariant; +}; + +export const Separator: FC = ({ variant }) => { + return
; +}; diff --git a/src/client/src/components/Separator/index.ts b/src/client/src/components/Separator/index.ts new file mode 100644 index 0000000..4060cb5 --- /dev/null +++ b/src/client/src/components/Separator/index.ts @@ -0,0 +1 @@ +export * from "./Separator"; diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss new file mode 100644 index 0000000..8664f48 --- /dev/null +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss @@ -0,0 +1,37 @@ +.attribute-widget { + background: $white; + padding: 10px 12px; + border-radius: 10px; + display: flex; + gap: 10px; + align-items: center; + flex-grow: 1; + flex-wrap: wrap; + max-width: 400px; + + &__text-body { + flex-grow: 1; + } + + &__title { + font-weight: bold; + } + + &__description { + font-size: 13px; + } + + &__value { + background: $primary-background; + font-weight: bold; + font-size: 21px; + padding: 5px 15px; + border-radius: 10px; + white-space: nowrap; + } + + &__unit { + font-weight: normal; + font-size: 18px; + } +} diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx new file mode 100644 index 0000000..9efd170 --- /dev/null +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx @@ -0,0 +1,29 @@ +import { FC } from "react"; + +import { bemClassNames } from "../../../utils"; +import { Icon, ThemedIconName } from "../../Icon"; + +const bem = bemClassNames("attribute-widget"); + +export type AttributeWidgetProps = { + title: string; + description: string; + value: string | number | boolean; + unit: string; + icon: ThemedIconName; +}; + +export const AttributeWidget: FC = ({ title, description, value, unit, icon }) => { + return ( +
+ +
+
{title}
+
{description}
+
+
+ {value} {unit} +
+
+ ); +}; diff --git a/src/client/src/components/Widget/AttributeWidget/index.ts b/src/client/src/components/Widget/AttributeWidget/index.ts new file mode 100644 index 0000000..1404dd0 --- /dev/null +++ b/src/client/src/components/Widget/AttributeWidget/index.ts @@ -0,0 +1 @@ +export * from "./AttributeWidget"; diff --git a/src/client/src/components/Widget/Widget.scss b/src/client/src/components/Widget/Widget.scss new file mode 100644 index 0000000..430d9c2 --- /dev/null +++ b/src/client/src/components/Widget/Widget.scss @@ -0,0 +1 @@ +@import "./AttributeWidget/AttributeWidget"; diff --git a/src/client/src/components/Widget/index.ts b/src/client/src/components/Widget/index.ts new file mode 100644 index 0000000..1404dd0 --- /dev/null +++ b/src/client/src/components/Widget/index.ts @@ -0,0 +1 @@ +export * from "./AttributeWidget"; diff --git a/src/client/src/components/components.scss b/src/client/src/components/components.scss new file mode 100644 index 0000000..a1ba5b7 --- /dev/null +++ b/src/client/src/components/components.scss @@ -0,0 +1,11 @@ +@import "Button/Button"; +@import "Card/Card"; +@import "FlexLayout/FlexLayout"; +@import "Header/Header"; +@import "Icon/Icon"; +@import "Input/Input"; +@import "InputRenderer/InputRenderer"; +@import "Menu/Menu"; +@import "Navbar/Navbar"; +@import "Separator/Separator"; +@import "Widget/Widget"; diff --git a/src/client/src/components/index.ts b/src/client/src/components/index.ts new file mode 100644 index 0000000..18b4dba --- /dev/null +++ b/src/client/src/components/index.ts @@ -0,0 +1,13 @@ +export * from "./BooleanSwitcher"; +export * from "./Button"; +export * from "./Card"; +export * from "./FlexLayout"; +export * from "./Header"; +export * from "./Icon"; +export * from "./Input"; +export * from "./InputRenderer"; +export * from "./LinkButton"; +export * from "./Loc"; +export * from "./Menu"; +export * from "./Navbar"; +export * from "./Separator"; diff --git a/src/client/src/layouts/NavbarLayout/NavbarLayout.scss b/src/client/src/layouts/NavbarLayout/NavbarLayout.scss new file mode 100644 index 0000000..6faa105 --- /dev/null +++ b/src/client/src/layouts/NavbarLayout/NavbarLayout.scss @@ -0,0 +1,15 @@ +.navbar-layout { + position: relative; + display: flex; + max-height: 100vh; + + &__content { + position: relative; + box-sizing: border-box; + flex-grow: 1; + max-height: 100%; + overflow: auto; + z-index: 0; + padding: 0 40px; + } +} diff --git a/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx b/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx new file mode 100644 index 0000000..047f1cc --- /dev/null +++ b/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx @@ -0,0 +1,36 @@ +import { FunctionComponent, ReactNode } from "react"; + +import { FlexLayout, Navbar, NavbarItem, NavbarLogo, NavbarSection,ThemedIconName } from "../../components"; +import { bemClassNames, GLOBAL_LOC_KEYS } from "../../utils"; + +const bem = bemClassNames("navbar-layout"); + +const navbarItems = [ + { locKey: GLOBAL_LOC_KEYS.DASHBOARD, href: "/dashboard", icon: ThemedIconName.gridMixed }, + { locKey: GLOBAL_LOC_KEYS.INSPECTOR, href: "/inspector", icon: ThemedIconName.chartSquare }, + { locKey: GLOBAL_LOC_KEYS.HANDLERS, href: "/handlers", icon: ThemedIconName.processor }, +]; + +export type NavbarLayoutProps = { + children: ReactNode; +}; + +export const NavbarLayout: FunctionComponent = ({ children }) => { + return ( + + + + + + + {navbarItems.map((item) => ( + + ))} + + + + {children} + + + ); +}; diff --git a/src/client/src/layouts/NavbarLayout/index.ts b/src/client/src/layouts/NavbarLayout/index.ts new file mode 100644 index 0000000..3a74c2b --- /dev/null +++ b/src/client/src/layouts/NavbarLayout/index.ts @@ -0,0 +1 @@ +export * from "./NavbarLayout"; diff --git a/src/client/src/layouts/index.ts b/src/client/src/layouts/index.ts new file mode 100644 index 0000000..3a74c2b --- /dev/null +++ b/src/client/src/layouts/index.ts @@ -0,0 +1 @@ +export * from "./NavbarLayout"; diff --git a/src/client/src/layouts/layouts.scss b/src/client/src/layouts/layouts.scss new file mode 100644 index 0000000..72098ba --- /dev/null +++ b/src/client/src/layouts/layouts.scss @@ -0,0 +1 @@ +@import "./NavbarLayout/NavbarLayout"; diff --git a/src/client/src/partials/Handler/Handler.scss b/src/client/src/partials/Handler/Handler.scss new file mode 100644 index 0000000..03e6afe --- /dev/null +++ b/src/client/src/partials/Handler/Handler.scss @@ -0,0 +1,96 @@ +.handler { + min-width: 400px; + + &__header { + } + + &__texts { + flex-grow: 1; + } + + &__icon { + //@include active-shadow; + + display: flex; + padding: 10px; + border-radius: 100%; + + &--color { + &-red { + background: $primary-disconnected; + } + + &-green { + background: $primary-connected; + } + } + } + + &__title { + margin: 0; + } + + &__description { + margin: 0; + font-size: 14px; + } + + &__status-button { + padding: 10px; + border-radius: 10px; + + &-title { + color: $white; + font-weight: bold; + text-transform: uppercase; + font-size: 15px; + } + + &-description { + color: $white; + font-size: 12px; + padding: 0 10px; + } + + &--color { + &-red { + background: $primary-disconnected; + } + + &-green { + background: $primary-connected; + } + } + } + + &__subtitle { + @include subtitle; + } + + &__attribute { + padding: 10px; + background: $primary-text-light; + border-radius: 10px; + flex-grow: 1; + + &:hover { + cursor: pointer; + background: $grey-eee; + } + + &-name { + font-weight: bold; + margin-right: 6px; + flex-grow: 1; + } + + &-value { + background: $blue; + color: $white; + font-weight: bold; + border-radius: 6px; + font-size: 14px; + padding: 2px 6px; + } + } +} diff --git a/src/client/src/partials/Handler/Handler.tsx b/src/client/src/partials/Handler/Handler.tsx new file mode 100644 index 0000000..1653df3 --- /dev/null +++ b/src/client/src/partials/Handler/Handler.tsx @@ -0,0 +1,68 @@ +import { FC } from "react"; + +import { useHandler } from "../../bridge"; +import { getStatusColor } from "../../bridge/models/utils"; +import { Button, ButtonVariant, Card, CardBody, FlexLayout, Icon, ThemedIconName } from "../../components"; +import { bemClassNames } from "../../utils"; + +const bem = bemClassNames("handler"); + +export type HandlerProps = { + id: number; +}; + +export const Handler: FC = ({ id }) => { + const { data: handler } = useHandler(id); + + return ( + + {handler && ( + + +
+ +
+ +

{handler.name}

+

{handler.description}

+
+ {/**/} + {/* */} + {/* {getStatusText(handler.status)}*/} + {/* */} + {/* */} + {/* {`Click to ${*/} + {/* handler.status === HandlerStatus.DISABLED ? "enable" : "disable"*/} + {/* } handler`}*/} + {/* */} + {/*
*/} + + + + {handler.attributes && handler.attributes.length > 0 && ( + <> +

Stored attributes:

+ + {handler.attributes?.map((attribute) => ( + + {attribute.name} + {attribute.value} + + ))} + + + )} +
+
+ )} +
+ ); +}; diff --git a/src/client/src/partials/Handler/index.ts b/src/client/src/partials/Handler/index.ts new file mode 100644 index 0000000..70bcf3f --- /dev/null +++ b/src/client/src/partials/Handler/index.ts @@ -0,0 +1 @@ +export * from "./Handler"; diff --git a/src/client/src/partials/NewHandler/NewHandler.scss b/src/client/src/partials/NewHandler/NewHandler.scss new file mode 100644 index 0000000..9a402e8 --- /dev/null +++ b/src/client/src/partials/NewHandler/NewHandler.scss @@ -0,0 +1,17 @@ +.new-handler { + &__icon { + @include active; + + display: flex; + padding: 10px; + border-radius: 10px; + } + + &__description { + @include subtitle; + } + + &__title { + margin: 0; + } +} diff --git a/src/client/src/partials/NewHandler/NewHandler.tsx b/src/client/src/partials/NewHandler/NewHandler.tsx new file mode 100644 index 0000000..f31320e --- /dev/null +++ b/src/client/src/partials/NewHandler/NewHandler.tsx @@ -0,0 +1,115 @@ +import { FC, useCallback, useEffect } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { useSWRConfig } from "swr"; + +import { addHandler } from "../../bridge"; +import { Endpoint, getApiEndpoint } from "../../bridge/endpoints"; +import { HandlerModel } from "../../bridge/models"; +import { Button, Card, CardBody, FlexLayout, Icon, InputRenderer, ThemedIconName } from "../../components"; +import { bemClassNames } from "../../utils"; +import { + resetNewHandler, + selectConfig, + selectLabel, + setConfigField, + setLabel, +} from "./newHandlerConfigSlice"; + +const bem = bemClassNames("new-handler"); + +export const NewHandler: FC = ({ type, name, icon, configFields }) => { + const dispatch = useDispatch(); + const newHandlerConfig = useSelector(selectConfig); + const newHandlerLAbel = useSelector(selectLabel); + const { mutate } = useSWRConfig(); + + const clearNewHandler = useCallback(() => { + dispatch(resetNewHandler()); + }, [dispatch]); + + // useEffect(() => { + // console.log("Hey, input mounted"); + // if (configFields) { + // for (const field of Object.keys(configFields)) { + // dispatch( + // setNewHandlerConfigField({ + // fieldName: field, + // fieldValue: configFields[field][2], + // }), + // ); + // } + // } + // }, [configFields, dispatch]); + useEffect(() => { + clearNewHandler(); + }, [clearNewHandler, dispatch]); + return ( + + + + +
+ +
+ +

Create new handler for

+

{name}

+
+
+ + { + console.log(value); + dispatch(setLabel(value)); + }} + /> + {configFields && + Object.keys(configFields).map((field) => ( + { + console.log(value); + dispatch( + setConfigField({ + fieldName: field, + fieldValue: value, + }), + ); + }} + /> + ))} + + +
+
+
+ ); +}; diff --git a/src/client/src/partials/NewHandler/index.ts b/src/client/src/partials/NewHandler/index.ts new file mode 100644 index 0000000..00d4df9 --- /dev/null +++ b/src/client/src/partials/NewHandler/index.ts @@ -0,0 +1,2 @@ +export * from "./NewHandler"; +export * from "./newHandlerConfigSlice"; diff --git a/src/client/src/partials/NewHandler/newHandlerConfigSlice.ts b/src/client/src/partials/NewHandler/newHandlerConfigSlice.ts new file mode 100644 index 0000000..5498b38 --- /dev/null +++ b/src/client/src/partials/NewHandler/newHandlerConfigSlice.ts @@ -0,0 +1,38 @@ +import { createSlice } from "@reduxjs/toolkit"; + +import { AppState } from "../../store"; + +export interface newHandlerConfigState { + config: Record; + label: string | undefined; +} + +const initialState: newHandlerConfigState = { + config: {}, + label: undefined, +}; + +export const newHandlerConfigSlice = createSlice({ + name: "newHandlerConfig", + initialState, + reducers: { + setConfigField(state, action) { + state.config[action.payload.fieldName] = action.payload.fieldValue; + }, + resetNewHandler(state) { + state.config = {}; + state.label = undefined; + }, + setLabel(state, action) { + state.label = action.payload; + }, + }, +}); + +export const { setConfigField, resetNewHandler, setLabel } = newHandlerConfigSlice.actions; + +export const selectConfig = (state: AppState) => state.newHandlerConfig.config; + +export const selectLabel = (state: AppState) => state.newHandlerConfig.label; + +export default newHandlerConfigSlice.reducer; diff --git a/src/client/src/partials/index.ts b/src/client/src/partials/index.ts new file mode 100644 index 0000000..0325120 --- /dev/null +++ b/src/client/src/partials/index.ts @@ -0,0 +1,2 @@ +export * from "./Handler"; +export * from "./NewHandler"; diff --git a/src/client/src/partials/partials.scss b/src/client/src/partials/partials.scss new file mode 100644 index 0000000..6d6b8e5 --- /dev/null +++ b/src/client/src/partials/partials.scss @@ -0,0 +1,2 @@ +@import "./Handler/Handler"; +@import "./NewHandler/NewHandler"; diff --git a/src/client/src/store/StoreInit.tsx b/src/client/src/store/StoreInit.tsx new file mode 100644 index 0000000..0ea0849 --- /dev/null +++ b/src/client/src/store/StoreInit.tsx @@ -0,0 +1,17 @@ +import { FC, useEffect } from "react"; +import { useDispatch } from "react-redux"; + +import { getLocale } from "../components/Loc/utils"; +import { setLocaleState } from "./settingsSlice"; + +export type StoreInitProps = {}; + +export const StoreInit: FC = ({}) => { + const dispatch = useDispatch(); + + useEffect(() => { + dispatch(setLocaleState(getLocale())); + }, [dispatch]); + + return <>; +}; diff --git a/src/client/src/store/index.ts b/src/client/src/store/index.ts new file mode 100644 index 0000000..d9d80d1 --- /dev/null +++ b/src/client/src/store/index.ts @@ -0,0 +1,2 @@ +export * from "./store"; +export * from "./StoreInit"; diff --git a/src/client/src/store/settingsSlice.ts b/src/client/src/store/settingsSlice.ts new file mode 100644 index 0000000..c4ab98a --- /dev/null +++ b/src/client/src/store/settingsSlice.ts @@ -0,0 +1,43 @@ +import { createSlice } from "@reduxjs/toolkit"; + +import { supportedLocales } from "../components/Loc/utils"; +import { AppState } from "./store"; + +// Type for the state +export interface SettingsState { + navbarCollapsedState: boolean; + iconThemeState: string; + localeState: supportedLocales; +} + +// Initial state +const initialState: SettingsState = { + navbarCollapsedState: false, + iconThemeState: "cosmic", + localeState: supportedLocales.en_US, +}; + +// Actual Slice +export const settingsSlice = createSlice({ + name: "settings", + initialState, + reducers: { + setNavbarCollapsedState(state, action) { + state.navbarCollapsedState = action.payload; + }, + setIconThemeState(state, action) { + state.iconThemeState = action.payload; + }, + setLocaleState(state, action) { + state.localeState = action.payload; + }, + }, +}); + +export const { setNavbarCollapsedState, setIconThemeState, setLocaleState } = settingsSlice.actions; + +export const selectNavbarCollapsedState = (state: AppState) => state.settings.navbarCollapsedState; +export const selectIconThemeState = (state: AppState) => state.settings.iconThemeState; +export const selectLocaleState = (state: AppState) => state.settings.localeState; + +export default settingsSlice.reducer; diff --git a/src/client/src/store/store.ts b/src/client/src/store/store.ts new file mode 100644 index 0000000..8665d4f --- /dev/null +++ b/src/client/src/store/store.ts @@ -0,0 +1,20 @@ +import { Action, configureStore, ThunkAction } from "@reduxjs/toolkit"; +import { createWrapper } from "next-redux-wrapper"; + +import { newHandlerConfigSlice } from "../partials"; +import { settingsSlice } from "./settingsSlice"; + +const makeStore = () => + configureStore({ + reducer: { + [newHandlerConfigSlice.name]: newHandlerConfigSlice.reducer, + [settingsSlice.name]: settingsSlice.reducer, + }, + devTools: true, + }); + +export type AppStore = ReturnType; +export type AppState = ReturnType; +export type AppThunk = ThunkAction; + +export const wrapper = createWrapper(makeStore); diff --git a/src/client/src/types.ts b/src/client/src/types.ts new file mode 100644 index 0000000..03179cb --- /dev/null +++ b/src/client/src/types.ts @@ -0,0 +1,66 @@ +import { KeyboardEventHandler, MouseEventHandler, WheelEventHandler } from "react"; + +export interface Household { + id: number; + name: string; +} + +export interface User { + id: number; + email: string; + name: string; + logged_in: boolean; + households: Household[]; +} + +export type InteractiveProps = { + onClick?: MouseEventHandler; + onWheel?: WheelEventHandler; + onMouseDown?: MouseEventHandler; + onMouseUp?: MouseEventHandler; + onMouseEnter?: MouseEventHandler; + onMouseLeave?: MouseEventHandler; + onKeyDown?: KeyboardEventHandler; +}; + +export interface Category { + id: number; + name: string; + iconName: string; +} + +export interface Product { + id: number; + name: string; + category: Category; + lastPrice?: number; +} + +export interface Vendor { + id: number; + name: string; + description: string; +} + +export enum Key { + "ArrowUp" = "ArrowUp", + "ArrowDown" = "ArrowDown", + "Enter" = "Enter", +} + +export type ExpenseItem = { + id: number; + product: Product; + amount: number; + price: number; + added: Date; + sharedWith?: Household | null; +}; + +export type Expense = { + id: number; + vendor: Vendor; + items: ExpenseItem[]; + date: number; + userId?: number; +}; diff --git a/src/client/src/utils.ts b/src/client/src/utils.ts new file mode 100644 index 0000000..83beba7 --- /dev/null +++ b/src/client/src/utils.ts @@ -0,0 +1,191 @@ +import { KeyboardEvent, KeyboardEventHandler, WheelEvent, WheelEventHandler } from "react"; + +import { Key } from "./types"; + +export const bemClassNames = (blockClassName: string) => { + return (classNameOrModifiers: string | Object = "", modifiers: Object = {}) => { + let elementClassName; + if (typeof classNameOrModifiers === "object") { + modifiers = classNameOrModifiers; + elementClassName = ""; + } else { + elementClassName = classNameOrModifiers; + } + let className = blockClassName; + if (elementClassName) { + className += "__" + elementClassName; + } + let resultClassNames = className; + for (const modifier of Object.keys(modifiers)) { + const key = modifier as keyof typeof modifiers; + if (!modifiers[key]) { + continue; + } + let newClassName = ""; + if (typeof modifiers[key] === "boolean") { + if (modifiers[key] as unknown as boolean) { + newClassName = `${className}--${modifier}`; + } + } else if (typeof modifiers[key] === "string") { + newClassName = `${className}--${modifier}-${modifiers[key]}`; + } else { + newClassName = `${className}--${modifier}`; + } + if (newClassName) { + resultClassNames += " " + newClassName; + } + } + return resultClassNames; + }; +}; + +export const capitalize = (word: string) => { + return word.charAt(0).toUpperCase() + word.slice(1); +}; + +export const wheelHandler = (onScrollUp?: WheelEventHandler, onScrollDown?: WheelEventHandler) => { + return (e: WheelEvent) => { + if (e.deltaY < 0) { + return onScrollUp?.(e); + } else { + return onScrollDown?.(e); + } + }; +}; + +export const arrowHandler = (onArrowUp?: KeyboardEventHandler, onArrowDown?: KeyboardEventHandler) => { + return (e: KeyboardEvent) => { + switch (e.code) { + case Key.ArrowUp: + return onArrowUp?.(e); + case Key.ArrowDown: + return onArrowDown?.(e); + } + }; +}; + +export const locDatabase: Record> = { + 1: { + "en-US": "Login", + "cs-CZ": "Přihlásit", + }, + 2: { + "en-US": "Logout", + "cs-CZ": "Odhlásit", + }, + 3: { + "en-US": "Dashboard", + "cs-CZ": "Přehled", + }, + 4: { + "en-US": "Handlers", + "cs-CZ": "Zařízení", + }, + 5: { + "en-US": "Inspector", + "cs-CZ": "Průzkumník", + }, + 6: { + "en-US": "Settings", + "cs-CZ": "Nastavení", + }, + 7: { + "en-US": "Welcome", + "cs-CZ": "Vítejte", + }, + 8: { + "en-US": "Sign in to continue", + "cs-CZ": "Pro pokračování se přihlaste", + }, + 9: { + "en-US": "Name", + "cs-CZ": "Jméno", + }, + 10: { + "en-US": "Username", + "cs-CZ": "Uživatel", + }, + 11: { + "en-US": "Email", + "cs-CZ": "E-mail", + }, + 12: { + "en-US": "Password", + "cs-CZ": "Heslo", + }, + 13: { + "en-US": "Don't have an account?", + "cs-CZ": "Nemáte účet?", + }, + 14: { + "en-US": "Create one.", + "cs-CZ": "Vytvořte si ho.", + }, + 15: { + "en-US": "Create new account", + "cs-CZ": "Vytvořte si nový účet", + }, + 16: { + "en-US": "Register", + "cs-CZ": "Registrovat", + }, + 17: { + "en-US": "Already have an account?", + "cs-CZ": "Máte účet?", + }, + 18: { + "en-US": "Sign in.", + "cs-CZ": "Přihlaste se.", + }, + 19: { + "en-US": "Product name", + "cs-CZ": "Název produktu", + }, + 20: { + "en-US": "Search products", + "cs-CZ": "Vyhledat produkt", + }, + 21: { + "en-US": "Product price", + "cs-CZ": "Cena produktu", + }, + 22: { + "en-US": "Category", + "cs-CZ": "Kategorie", + }, + 23: { + "en-US": "Vendor", + "cs-CZ": "Prodejce", + }, + 24: { + "en-US": "Expense date", + "cs-CZ": "Datum nákupu", + }, + 25: { + "en-US": "Share selected items with", + "cs-CZ": "Sdílet označené položky s", + }, + 26: { + "en-US": "Household name", + "cs-CZ": "Jméno domácnosti", + }, +}; + +export const enum GLOBAL_LOC_KEYS { + LOGIN = 1, + LOGOUT, + DASHBOARD, + HANDLERS, + INSPECTOR, + SETTINGS, + WELCOME, + NAME = 9, + USERNAME, + EMAIL, + PASSWORD, + DONT_HAVE_AN_ACCOUNT, + CREATE_ONE, + PRODUCT_NAME = 19, + PRODUCT_PRICE = 21, + CATEGORY, +} diff --git a/src/client/styles/fonts.scss b/src/client/styles/fonts.scss new file mode 100644 index 0000000..bac27fc --- /dev/null +++ b/src/client/styles/fonts.scss @@ -0,0 +1,53 @@ +@font-face { + font-family: Cantarell; + font-weight: 200; + src: url("/public/fonts/Cantarell-Thin.otf") format("opentype"); +} + +@font-face { + font-family: Cantarell; + font-weight: 300; + src: url("/public/fonts/Cantarell-Light.otf") format("opentype"); +} + +@font-face { + font-family: Cantarell; + src: url("/public/fonts/Cantarell-Regular.otf") format("opentype"); +} + +@font-face { + font-family: Cantarell; + font-weight: bold; + src: url("/public/fonts/Cantarell-Bold.otf") format("opentype"); +} + +@font-face { + font-family: Cantarell; + font-weight: 900; + src: url("/public/fonts/Cantarell-ExtraBold.otf") format("opentype"); +} + +@font-face { + font-family: IndieFlower; + src: url("/public/fonts/IndieFlower-Regular.ttf") format("truetype"); +} + +@font-face { + font-family: "Roboto Mono"; + src: url("/public/fonts/RobotoMono-Regular.ttf") format("truetype"); +} + +@font-face { + font-family: "Roboto Mono"; + font-weight: 700; + src: url("/public/fonts/RobotoMono-Medium.ttf") format("truetype"); +} + +@font-face { + font-family: "Roboto Mono"; + font-weight: 900; + src: url("/public/fonts/RobotoMono-Bold.ttf") format("truetype"); +} + +$font-cantarell: "Cantarell", "Verdana", sans-serif; +$font2: "Roboto Mono", monospace; diff --git a/src/client/styles/main.scss b/src/client/styles/main.scss new file mode 100644 index 0000000..752fb41 --- /dev/null +++ b/src/client/styles/main.scss @@ -0,0 +1,18 @@ +@import "variables"; +@import "fonts"; +@import "mixins"; + +@import "../src/components/components"; +@import "../src/layouts/layouts"; +@import "../src/partials/partials"; + +body { + margin: 0; + background: #f5f6fa; + color: $primary-text; + font-family: $font-cantarell; +} + +.content { + padding: 30px; +} diff --git a/src/client/styles/mixins.scss b/src/client/styles/mixins.scss new file mode 100644 index 0000000..f0ff4fc --- /dev/null +++ b/src/client/styles/mixins.scss @@ -0,0 +1,27 @@ +@mixin card { + background: $white; + border-radius: 15px; + transition: ease-in-out 200ms; + color: $grey-333; + + // box-shadow: 2px 2px 5px $grey-ddd; +} + +@mixin active-shadow { + box-shadow: 0 0 10px $grey-bbb; +} + +@mixin active { + @include active-shadow; + + background: $blue; +} + +@mixin subtitle { + color: $grey-999; + font-size: 13px; + font-weight: bold; + text-transform: uppercase; + margin: 0; + letter-spacing: 0.5px; +} diff --git a/src/client/styles/variables.scss b/src/client/styles/variables.scss new file mode 100644 index 0000000..e9bac94 --- /dev/null +++ b/src/client/styles/variables.scss @@ -0,0 +1,34 @@ +// Color palette + +$white: #fff; +$blue: #3c81e9; +$grey-blue: #426395; +$dark-blue: #333c62; +$purple: #601f99; +$green: #6ca758; +$red: #a75858; + +// Greyscale + +$grey-eee: #eee; +$grey-ddd: #ddd; +$grey-ccc: #ccc; +$grey-bbb: #bbb; +$grey-999: #999; +$grey-777: #777; +$grey-555: #555; +$grey-444: #444; +$grey-333: #333; + +// Primary colors + +$primary-text: $grey-444; +$primary-action: $grey-blue; +$primary-text-light: #f8f8f8; +$primary-background: #f5f6fa; +$primary-connected: $green; +$primary-disconnected: $red; + +// Navbar width +$navbar-max-width: 300px; +$navbar-width-collapsed: 75px; diff --git a/src/client/tsconfig.json b/src/client/tsconfig.json new file mode 100644 index 0000000..a08ae6a --- /dev/null +++ b/src/client/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/src/server/Pipfile b/src/server/Pipfile new file mode 100644 index 0000000..3d9f327 --- /dev/null +++ b/src/server/Pipfile @@ -0,0 +1,16 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +flask = "*" +flask-cors = "*" +pony = "*" +simplejson = "*" +requests = "*" + +[dev-packages] + +[requires] +python_version = "3.11" diff --git a/src/server/Pipfile.lock b/src/server/Pipfile.lock new file mode 100644 index 0000000..bbd21fc --- /dev/null +++ b/src/server/Pipfile.lock @@ -0,0 +1,345 @@ +{ + "_meta": { + "hash": { + "sha256": "c91153d43415b75dbb19cb9b728a76cfd51cad7da4874284ed19f7e7cbe3ae49" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + ], + "markers": "python_version >= '3.6'", + "version": "==2022.12.7" + }, + "charset-normalizer": { + "hashes": [ + "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b", + "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42", + "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d", + "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b", + "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a", + "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59", + "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154", + "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1", + "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c", + "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a", + "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d", + "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6", + "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b", + "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b", + "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783", + "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5", + "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918", + "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555", + "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639", + "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786", + "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e", + "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed", + "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820", + "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8", + "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3", + "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541", + "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14", + "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be", + "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e", + "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76", + "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b", + "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c", + "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b", + "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3", + "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc", + "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6", + "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59", + "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4", + "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d", + "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d", + "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3", + "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a", + "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea", + "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6", + "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e", + "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603", + "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24", + "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a", + "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58", + "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678", + "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a", + "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c", + "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6", + "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18", + "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174", + "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317", + "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f", + "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc", + "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837", + "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41", + "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c", + "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579", + "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753", + "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8", + "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291", + "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087", + "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866", + "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3", + "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d", + "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1", + "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca", + "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e", + "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db", + "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72", + "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d", + "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc", + "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539", + "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d", + "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af", + "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b", + "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602", + "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f", + "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478", + "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c", + "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e", + "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479", + "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7", + "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8" + ], + "version": "==3.0.1" + }, + "click": { + "hashes": [ + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.3" + }, + "flask": { + "hashes": [ + "sha256:7eb373984bf1c770023fce9db164ed0c3353cd0b53f130f4693da0ca756a2e6d", + "sha256:c0bec9477df1cb867e5a67c9e1ab758de9cb4a3e52dd70681f59fa40a62b3f2d" + ], + "index": "pypi", + "version": "==2.2.3" + }, + "flask-cors": { + "hashes": [ + "sha256:74efc975af1194fc7891ff5cd85b0f7478be4f7f59fe158102e91abb72bb4438", + "sha256:b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de" + ], + "index": "pypi", + "version": "==3.0.10" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "itsdangerous": { + "hashes": [ + "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", + "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.2" + }, + "jinja2": { + "hashes": [ + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.2" + }, + "markupsafe": { + "hashes": [ + "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", + "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", + "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", + "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", + "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", + "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", + "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", + "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", + "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", + "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", + "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", + "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", + "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", + "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", + "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", + "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", + "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", + "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", + "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", + "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", + "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", + "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", + "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", + "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", + "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", + "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", + "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", + "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", + "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", + "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", + "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", + "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", + "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", + "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", + "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", + "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", + "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", + "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", + "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", + "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", + "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", + "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", + "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", + "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", + "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", + "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", + "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", + "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", + "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", + "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.2" + }, + "pony": { + "hashes": [ + "sha256:5f45fc67587f4520c560a57148cc573b097d42f82f5cb200d72c957b5708198d", + "sha256:608a1c1d662983bad2590e650f2bbc1cd6ed48558894ad8f50da4739ff98f614" + ], + "index": "pypi", + "version": "==0.7.16" + }, + "requests": { + "hashes": [ + "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", + "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" + ], + "index": "pypi", + "version": "==2.28.2" + }, + "simplejson": { + "hashes": [ + "sha256:04a4b9a297cccbc9e1d66fe652fbffd55b36d6579c43132e821d315957302194", + "sha256:063db62a9251e61ea0c17e49c3e7bed465bfcc5359655abcb8c0bc6130a4e0d4", + "sha256:070ab073ce72f1624107dfd6d095c87ac32aafe7ba54a5c5055a3dd83cb06e51", + "sha256:099bbd3b5b4ea83159a980348cd481a34984dee5fe1b9fac31a9137158f46960", + "sha256:0baf8c60efef74944ed4adb034d14bcf737731576f0e4c3c56fb875ea256af69", + "sha256:0e7c3fae6c9540064e06a653780b4f263675cd69ca6841345029fee3e27e9bb5", + "sha256:141782a0a25c1792627575b37b4951583358ccc7137623aa45947f8425ee8d96", + "sha256:14b35fb90083218e59df5dba733c7086655f2938f3fcabe36ad849623941d660", + "sha256:169c2c7446ef33439c304a6aa5b7b5a2dbc938c9c2dd882dd3f2553f9518ebf6", + "sha256:16cc750d19852fa5ebafd55da86fa357f87991e07b4e2afb37a5975dfdde0153", + "sha256:1907d49d70c75530976119c13785db91168d2599288debaca7d25da9cd2f3747", + "sha256:1b79e2607ac5ba98381c2e068727acc1e4dd385a6d216914c0613f8f568a06a5", + "sha256:1e49c84df6e71e3c23169d3df481565dd607cbee4aa1e0af15c493cccad7c745", + "sha256:23fce984045804194f513a2739dcd82be350198470d5ade5058da019a48cf3f8", + "sha256:24823364fee93bab141621b3a2e10612e31be7ca58788bf9b2cd2b1ce37ab07d", + "sha256:290bbcdcbb37af3f7e43378f592ab7a9168fca640da6af63d42cdb535f96bbf2", + "sha256:2a1b3222bc8f6ac91b5ebe3263111c7dc4dc4b01c52f0153f5bb1f3ef3bf0023", + "sha256:2b0f6de11f5ce4b80f51bc49d08b898602e190547f8efe4e44af8ae3cda7779d", + "sha256:2be75f4cb9951efeb2616e16f944ee4f9a09768475a3f5c40a6ac4dc5ee68dfd", + "sha256:2c7ee643ee93684bf76196e2d84a2090c6df8f01737a016e869b579593827b6e", + "sha256:37bdef13412c0bc338db2993a38f3911d5bd2a0ba8d00b3bc66d1063edd7c33e", + "sha256:3bab9ea49ff477c926c5787f79ec47cf51c7ffb15c9d8dd0f09e728807d44f4b", + "sha256:44d6c52d4f5c0c087a6e88a92bf9f94234321d21be32c6471ba39856e304bbe3", + "sha256:4b8d4d958c5ab3489d1174917a7fad82da642560c39ce559a624e63deaaa36b1", + "sha256:4de9fed1166aeedee44150fa83bc059aca6b612940281f8b5a39374781f16196", + "sha256:502d86fbfe914263642479b87ed61af3b27b9e039df77acd2416cfccfc892e68", + "sha256:508342d7227ed66beecfbba7a38b46e1a713faeb034216f43f03ec5c175e0622", + "sha256:50f4b6d52f3a2d1cffd11834a1fe7f9516f0e3f20cbe78027aa88ff990fad7d6", + "sha256:52465a5578cfc2c5e374a574df14dfb75e04c6cb6a100b7abc8bf6c89bea8f5e", + "sha256:55aa983575b0aef143845f5bfbb35075475eccaebf7d4b30f4037a2fe8414666", + "sha256:55df3dfd8777bf134e1078d2f195352432a77f23ccb90b92b08218123d56adc9", + "sha256:56f186d44a9f625b5e5d9ba4b9551e263604000a7df60cb373b3e789ca603b2a", + "sha256:5780e3929435a8d39671537174f8ce0ccafb4f6e0c748ffe139916ffbdca39d3", + "sha256:59a629240cfbc5b4f390a8578dca74ae77ab617de971862acb946822d2eb1b11", + "sha256:5b009342e712026ffabe8a471d5b4a4ff2a038687387e74eae601574c04dae33", + "sha256:62628ea5df8c830d00a7417d5ecd949a1b24a8d0a5063a2a77f7ec7522110a0f", + "sha256:694332fd6fd10fe8868c2508583220d1a1a7be9ff049dab5bd6b9aedfb9edc50", + "sha256:6a49665169c18f27a0fc10935466332ee7406ee14ced8dc0a1b4d465547299aa", + "sha256:6b997739fdbc9b7030ff490fc8e5f8c144b8ec80f3605eff643983672bb8cfde", + "sha256:6bd81d10cb3384f64242316da8a2b2f88618776bc1ef38bcc79f1afe8ad36616", + "sha256:6c4c56c5abb82e22877b913186e5c0fd7d9eef0c930719e28fa451d3f11defb4", + "sha256:6fe1173b4146641c872bafa6f9a21f3a2012f502d54fbb523a76e6320024fae9", + "sha256:75eb555dc349d0cbe2c95ea2be665b306c6ac6d5b64e3a3920af9b805ecdb5f7", + "sha256:7c26fe63755ecc59c502ddde8e58ce8b765bf4fdd3f5858d2b7c8ab28bc2a9c8", + "sha256:7e73d9d6af3c29b60a92e28b3144d951110f59a3d05fc402c3f6c5248b883400", + "sha256:7ff65b475091084e5bdb7f26e9c555956be7355b573ce494fa96f9f8e34541ac", + "sha256:8209c40279ed9b2cd5fbe2d617a29a074e90ea97fce7c07a0128a01cb3e8afc5", + "sha256:88f59a07873dc1f06fd9e6712dd71286f1b297a066ad2fd9110ad080d3cb011c", + "sha256:96ade36640734b54176c4765d00a60767bd7fae5b7a5b3574accc055ac18e34c", + "sha256:9cf299fbb7d476676dfea372a3262654af98694bd1df35b060ce0fe1b68087f1", + "sha256:a2960b95f3ba822d077d1afa7e1fea9799cfb2990028cf010e666f64195ecb5a", + "sha256:a80bd9a3db88a76a401155c64e3499376c702307c2206cb381cc2a8dd9cc4f1f", + "sha256:aad323e92cb1bd3b1db6f57c007dca964d13c52247ad844203ce381e94066601", + "sha256:ab5bdf0b8d07f7fd603b2d0c1982412cd9f8ade997088ddced251f7e656c7fd4", + "sha256:b0352428b35da859a98770949e7353866ae65463026f1c8e4c89a6395d4b5fd7", + "sha256:b2c4e8b65987f3c6529149495d28e23efe213e94dc3659176c4ab22d18a9ee4a", + "sha256:bcd9eac304a133ee4af58e68c5ded4c5ba663d3ee4602e8613359b776a1f8c8f", + "sha256:c3b696770b504f881f271f97b94a687487ec1ef20bfbd5f20d92bbab7a85952d", + "sha256:c4514675f6571da8190fea52a110bca686fa844972e8b2b3bc07ace9e632ee4f", + "sha256:c98fddc374468158778a8afb3fd7296412a2b2fc34cebba64212ac3e018e7382", + "sha256:cde5a3ff5e0bd5d6da676314dfae86c9e99bff77bca03d30223c9718a58f9e83", + "sha256:cf7168b2046db0eceb83d8ed2ee31c0847ce18b2d8baf3e93de9560f3921a8c3", + "sha256:d774782159347d66563cd7ac18b9dd37010438a825160cde4818caa18110a746", + "sha256:d990ea42ba908cb57a3df97d283aa26c1822f10a0a60e250b54ee21cd08c48d0", + "sha256:e762e9d8556fa9f3a99f8a278eeba50a35b5f554b82deeb282ddbdd85816e638", + "sha256:e8a4750e8db92109e6f1f7783a7faae4254d6d5dc28a41ff7eff7d2265f0586b", + "sha256:eb81cfef0c0039010f0212f4e5eb6909641b8a54c761584054ac97fd7bd0c21a", + "sha256:ebb53837c5ffcb6100646018565d3f1afed6f4b185b14b2c9cbccf874fe40157", + "sha256:efa70fd9b6c7b57b048ecadb909683acd535cddebc5b22f3c05ba3b369739caf", + "sha256:f73bae5e315adf7bc8cb7f0a13a1e9e33bead42e8ce174be83ac9ecc2513c86a", + "sha256:f89f078114cacedb9a3392615cc099cf02a51efa7507f90e2006bf7ec38c880d", + "sha256:f9f72d2b539512f382a48cc9ad6cea2d3a572e71e92c40e03d2140041eeaa233", + "sha256:fc8df5831b645e96a318ea51a66ce6e2bb869eebc3fa9a860bbf67aecd270055" + ], + "index": "pypi", + "version": "==3.18.3" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "urllib3": { + "hashes": [ + "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", + "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.14" + }, + "werkzeug": { + "hashes": [ + "sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe", + "sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612" + ], + "markers": "python_version >= '3.7'", + "version": "==2.2.3" + } + }, + "develop": {} +} diff --git a/src/server/config.py b/src/server/config.py new file mode 100644 index 0000000..1f85278 --- /dev/null +++ b/src/server/config.py @@ -0,0 +1,14 @@ +# from os import environ + + +class ApplicationConfig: + """Class for application configuration""" + + # SECRET_KEY = environ.get("SECRET_KEY") + SECRET_KEY = "asdfasfasdf4564asdf" + SESSION_TYPE = "redis" + SESSION_PERMANENT = False + SESSION_USE_SIGNER = True + # SESSION_COOKIE_SECURE = True + SESSION_COOKIE_SAMESITE = "Lax" + JSON_SORT_KEYS = False diff --git a/src/server/main.py b/src/server/main.py new file mode 100755 index 0000000..c13832c --- /dev/null +++ b/src/server/main.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +from signal import signal, SIGINT +from flask import Flask +from flask_cors import CORS + +from config import ApplicationConfig +from modules.blueprints import blueprints +from modules.database import init_database +from modules.handler_manager import HandlerManager +from modules.tools import BlueprintInit, ModulesRegistrator + +registered_modules = ModulesRegistrator() + + +def _quit_handler(_, __): + """Handler for exit signal.""" + print("\nSIGINT signal detected. Exiting") + _quit() + + +def _quit(): + registered_modules.exit() + quit() + + +if __name__ == "__main__": + signal(SIGINT, _quit_handler) + + app = Flask(__name__) + app.config.from_object(ApplicationConfig) + cors = CORS(app, supports_credentials=True) + + # Database initialization + init_database() + # HandlerManager initialization + manager = HandlerManager() + registered_modules.add(manager) + + # Blueprints registration + for blueprint in blueprints: + app.register_blueprint( + blueprint(BlueprintInit(manager)), url_prefix="/api/core" + ) + app.run(host="0.0.0.0", debug=True, use_reloader=False) diff --git a/modules/__init__.py b/src/server/modules/__init__.py similarity index 100% rename from modules/__init__.py rename to src/server/modules/__init__.py diff --git a/src/server/modules/attribute_manager.py b/src/server/modules/attribute_manager.py new file mode 100644 index 0000000..7dca9b3 --- /dev/null +++ b/src/server/modules/attribute_manager.py @@ -0,0 +1,79 @@ +from datetime import datetime +from pony import orm + +from modules.models import data_unit as data_unit_model +from modules.models import data_stat as data_stat_model +from modules.models import attribute as attribute_model + + +class AttributeManager: + """Handles work with attributes and data""" + + def __init__(self, db_instance): + self.id = db_instance.id + self.handler_id = db_instance.handler.id + self.name = db_instance.name + + self.value = None + self.last_datetime = None + + self.stats = { + "max": None, + "min": None, + } + + self.stat_predicates = { + "max": lambda value: value > self.stats["max"], + "min": lambda value: value < self.stats["min"], + } + + def get_id(self): + return self.id + + def get_name(self): + return self.name + + def get_current_value(self): + return self.value + + def get_instance(self): + return attribute_model.get_by_id(self.id) + + def check_value_change(self, value): + return value != self.value + + @orm.db_session + def add_data_unit(self, value): + if self.check_value_change(value): + if self.value: + print("Value changed") + data_unit_model.add( + self.handler_id, self.id, self.value, self.last_datetime + ) + self.value = value + data_unit_model.add(self.handler_id, self.id, value, datetime.now()) + self.check_and_add_stat_units(value) + else: + print("Value didn't change") + self.last_datetime = datetime.now() + + def check_and_add_stat_units(self, value): + now = datetime.now() + for predicate_name, stat_predicate in self.stat_predicates.items(): + if not self.stats[predicate_name]: + db_stat = data_stat_model.get_by_type_and_date( + self.handler_id, self.id, predicate_name, now.date() + ) + self.stats[predicate_name] = db_stat.value if db_stat else None + + if self.stats[predicate_name] and stat_predicate(value): + print("Updating", predicate_name, "stat in DB") + db_stat = data_stat_model.get_by_type_and_date( + self.handler_id, self.id, predicate_name, now.date() + ) + self.stats[predicate_name] = db_stat.value if db_stat else None + db_stat.time = now.time() + db_stat.value = value + elif not self.stats[predicate_name]: + print("Writing", predicate_name, "stat to DB") + data_stat_model.add(self.handler_id, self.id, predicate_name, value) diff --git a/src/server/modules/blueprints/__init__.py b/src/server/modules/blueprints/__init__.py new file mode 100644 index 0000000..805a70d --- /dev/null +++ b/src/server/modules/blueprints/__init__.py @@ -0,0 +1,3 @@ +from .handlers import handlers_blueprint + +blueprints = [handlers_blueprint] diff --git a/src/server/modules/blueprints/enums.py b/src/server/modules/blueprints/enums.py new file mode 100644 index 0000000..08e2813 --- /dev/null +++ b/src/server/modules/blueprints/enums.py @@ -0,0 +1,4 @@ +class StatusCode: + OK = 200 + CREATED = 201 + NOT_FOUND = 404 diff --git a/src/server/modules/blueprints/handlers.py b/src/server/modules/blueprints/handlers.py new file mode 100644 index 0000000..05cd71c --- /dev/null +++ b/src/server/modules/blueprints/handlers.py @@ -0,0 +1,98 @@ +from flask import Blueprint, request +from pony import orm + +from modules.blueprints.enums import StatusCode +from modules.models import handler as handler_model +from modules.models import attribute as attribute_model +from modules.handlers import get_handler_class, available_handlers +from modules.tools import this_name, BlueprintInit, parse_config + + +def handlers_blueprint(_init: BlueprintInit): + blueprint = Blueprint(this_name(), __name__) + + @blueprint.route("/available-handlers") + def get_available_handlers(): + return [ + { + "type": handler.type, + "name": handler.name, + "icon": handler.icon, + "configFields": handler.config_fields, + } + for handler in available_handlers + ], StatusCode.OK + + @blueprint.route("/handlers") + @orm.db_session + def handlers(): + return [ + { + "id": h_id, + "type": handler.type, + "name": handler.get_name(), + "icon": handler.icon, + "description": handler.get_description(), + "status": 1 if handler.is_connected() else 0, + } + for h_id, handler in _init.manager.registered_handlers.items() + ], StatusCode.OK + + @blueprint.route("/handlers/", methods=["GET"]) + def handler_info(handler_id): + handler = _init.manager.registered_handlers.get(handler_id, None) + if handler: + return { + "id": handler.get_id(), + "type": handler.type, + "name": handler.get_name(), + "icon": handler.icon, + "description": handler.get_description(), + "status": 1 if handler.is_connected() else 0, + "options": handler.get_options(), + "attributes": [ + { + "id": attribute_manager.get_id(), + "name": attribute_name, + "value": attribute_manager.get_current_value(), + } + for attribute_name, attribute_manager in _init.manager.registered_attributes.get( + handler_id, {} + ).items() + ], + "availableAttributes": [ + { + "name": attribute_name, + "value": attribute_value, + } + for attribute_name, attribute_value in _init.manager.last_messages.get(handler_id, {}).items() + ], + }, StatusCode.OK + return {"status": "not found"}, StatusCode.NOT_FOUND + + @blueprint.route("/add-handler", methods=["POST"]) + @orm.db_session + def add_handler(): + handler_class = get_handler_class(request.json["type"]) + options: dict = request.json["options"] + options["config"] = parse_config(options.get("config", {}), handler_class) + handler = handler_class(options) + handler_db = handler_model.add(handler) + handler_db.flush() + handler.set_id(handler_db.id) + _init.manager.register_handler(handler) + return {"status": "ok"}, StatusCode.CREATED + + @blueprint.route("/add-handler-attribute", methods=["POST"]) + @orm.db_session + def add_handler_attribute(): + handler_id = request.json["handler_id"] + handler = handler_model.get_by_id(handler_id) + if handler: + attribute = request.json["attribute"] + db_attribute = attribute_model.modify(handler, attribute) + handler.attributes.add(db_attribute) + return {"status": "ok"}, StatusCode.CREATED + return {"status": "not found"}, StatusCode.NOT_FOUND + + return blueprint diff --git a/src/server/modules/database/__init__.py b/src/server/modules/database/__init__.py new file mode 100644 index 0000000..dbc92f5 --- /dev/null +++ b/src/server/modules/database/__init__.py @@ -0,0 +1,9 @@ +from pony import orm + +db = orm.Database() + + +def init_database(): + """Initializes database""" + db.bind(provider="sqlite", filename="database.sqlite", create_db=True) + db.generate_mapping(create_tables=True) diff --git a/src/server/modules/handler_manager.py b/src/server/modules/handler_manager.py new file mode 100644 index 0000000..a02592d --- /dev/null +++ b/src/server/modules/handler_manager.py @@ -0,0 +1,82 @@ +from threading import Thread +from time import sleep +from pony import orm + +from modules.attribute_manager import AttributeManager +from modules.handlers import get_handler_class +from modules.handlers.abstract_handler import AbstractHandler +from modules.logging import Logger +from modules.models import handler as handler_model +from modules.tools import linearize + + +class HandlerManager: + """Handles registration and communication of handlers""" + + def _handler_watcher(self): + sleep(2) + while self.active: + for h_id, handler in self.registered_handlers.items(): + if handler.ready_to_read(): + message = handler.read_message() + self.process_message(h_id, message) + sleep(0.01) + + def __init__(self): + self.active = True + self.log = Logger("HandlerManager") + + # Dictionary for handler instances + self.registered_handlers: dict = {} + # Dictionary for last received messages from handlers + self.last_messages: dict = {} + # Dictionary for attribute instances + self.registered_attributes = {} + + self.initialize_handlers() + + self.thread = Thread(target=self._handler_watcher) + self.thread.start() + + @orm.db_session + def initialize_handlers(self): + db_handlers = handler_model.get_all() + self.log.info(f"Loaded {len(db_handlers)} handlers from database") + for db_handler in db_handlers: + handler = get_handler_class(db_handler.type)(db_handler.options) + handler.set_id(db_handler.id) + self.register_handler(handler) + for db_attribute in db_handler.attributes: + self.register_attribute(db_attribute) + + def register_handler(self, handler): + """Add handler instance to the dictionary""" + handler_id = handler.get_id() + self.registered_handlers[handler_id] = handler + + def register_attribute(self, db_attribute): + """Add attribute instance to the dictionary""" + handler_id = db_attribute.handler.id + if handler_id not in self.registered_attributes: + self.registered_attributes[handler_id] = {} + self.registered_attributes[handler_id][db_attribute.name] = AttributeManager( + db_attribute + ) + + def process_message(self, handler_id: AbstractHandler, message): + linearized_json = linearize(message) + self.last_messages[handler_id] = linearized_json + print(linearized_json) + + for attribute in self.registered_attributes.get(handler_id, []): + print(attribute, linearized_json[attribute]) + if attribute in linearized_json: + self.registered_attributes.get(handler_id).get(attribute).add_data_unit( + linearized_json.get(attribute) + ) + + def exit(self): + for handler in self.registered_handlers: + self.registered_handlers[handler].exit() + self.active = False + self.log.debug(f"Terminating") diff --git a/src/server/modules/handlers/__init__.py b/src/server/modules/handlers/__init__.py new file mode 100644 index 0000000..6bdeacc --- /dev/null +++ b/src/server/modules/handlers/__init__.py @@ -0,0 +1,11 @@ +from .abstract_handler import AbstractHandler +from .http_handler import HttpHandler + +available_handlers = [HttpHandler] + + +def get_handler_class(handler_type): + for handler in available_handlers: + if handler.type == handler_type: + return handler + return None diff --git a/src/server/modules/handlers/abstract_handler.py b/src/server/modules/handlers/abstract_handler.py new file mode 100644 index 0000000..a26978d --- /dev/null +++ b/src/server/modules/handlers/abstract_handler.py @@ -0,0 +1,149 @@ +from time import sleep + +from modules.tools import get_current_seconds + + +class AbstractHandler: + """Abstract class which specifies methods each handler class should implement.""" + + # Each handler class should have the following variables configured: + + type = "" + """Type of the handler""" + + name = "Unknown" + """Name of the handler""" + + icon = "default" + """Iconname of handler displayed in GUI""" + + config_fields = {} + """Configuration form definition for initialization from GUI""" + + # Each handler class can and should implement the following methods: + + def get_name(self): + """Returns the standardized name of the handler for GUI.""" + return self.get_option("label", self.name) + + def get_description(self): + """Returns description of the handler displayed in GUI.""" + return f"{self.type} handler" + + def send_message(self, message): + """Send a message to the target.""" + pass + + def is_connected(self): + """Returns True if the target is connected and can communicate.""" + return False + + def exit(self): + """Signal to disconnect from target and exit all threads.""" + self.active = False + + # Default attributes and methods of each handler instance: + + options = {} + """Dictionary containing handler settings options. + It is serialized as a JSON to the database.""" + + # changed = [] + # """Contains appropriate string if there is a need to refresh GUI. + # Use add_changed() to append here.""" + + def __init__(self, options): + self.active = False + self.options = options or {} + self.message_queue = [] + self._id = None + self._first_tick = True + self._current_seconds = get_current_seconds() + self._last_seconds = 0 + + def get_options(self): + return self.options + + def get_option(self, attribute, default=None): + """Returns single setting option attribute value""" + return self.get_options().get(attribute, default) + + def set_option(self, attribute, value): + """Sets single setting option attribute value""" + self.get_options()[attribute] = value + + def get_config(self): + """Returns configuration form values""" + return self.get_option("config", {}) + + def set_config(self, new_config): + """Update handler configuration accordingly.""" + if "config" not in self.get_options(): + self.set_option("config", {}) + for attribute in new_config: + self.get_option("config")[attribute] = new_config[attribute] + # self.add_changed("handlers") + + def get_config_option(self, attribute): + """Returns single form configuration option value""" + return self.get_config().get(attribute, None) + + # def add_changed(self, value): + # """ + # Add appropriate string if there is a need to refresh GUI. + # ["overview", "inspector", "actions", "data", "handlers", "details"] + # """ + # if value not in self.changed: + # self.changed.append(value) + + # def add_storage_attribute(self, attribute): + # if "storage-attributes" not in self.settings: + # self.settings["storage-attributes"] = [] + # if attribute not in self.settings["storage-attributes"]: + # self.settings["storage-attributes"].append(attribute) + + # def get_storage_attributes(self): + # if "storage-attributes" in self.settings: + # return self.settings["storage-attributes"] + # return [] + # + # def clear_storage_attributes(self): + # self.settings["storage-attributes"] = [] + + # def set_label(self, label): + # self.set_option("label", label) + + def add_message(self, message): + """Appends message to the message queue.""" + self.message_queue.append(message) + + def ready_to_read(self): + """Returns True if there is a message ready to read.""" + return len(self.message_queue) > 0 + + def read_message(self): + """Returns the oldest message from the message queue.""" + if self.ready_to_read(): + return self.message_queue.pop(0) + return None + + def first_tick(self) -> bool: + """Returns True only when called for the first time.""" + result = self._first_tick + self._first_tick = False + return result + + def wait_for_interval(self, interval): + """Wait until current seconds % interval equals 0.""" + self._current_seconds = get_current_seconds() + while self.active and (self._current_seconds % interval != 0 or self._current_seconds == self._last_seconds): + self._current_seconds = get_current_seconds() + sleep(0.1) + + self._last_seconds = self._current_seconds + + def get_id(self) -> int: + return self._id + + def set_id(self, db_id: int): + self._id = db_id diff --git a/modules/handlers/http_handler.py b/src/server/modules/handlers/http_handler.py similarity index 69% rename from modules/handlers/http_handler.py rename to src/server/modules/handlers/http_handler.py index cd36cf9..e62ef53 100644 --- a/modules/handlers/http_handler.py +++ b/src/server/modules/handlers/http_handler.py @@ -1,6 +1,3 @@ -from .abstract_handler import AbstractHandler -from modules.logging.logger import logger - from simplejson import JSONDecodeError from requests import get from requests.exceptions import ConnectionError, ReadTimeout, MissingSchema @@ -8,37 +5,38 @@ from threading import Thread from time import sleep +from modules.logging import Logger +from .abstract_handler import AbstractHandler + class HttpHandler(AbstractHandler): """Class for handling HTTP targets.""" def _fetcher(self): - self.log.debug("Starting HTTP data fetcher") + self.log.debug("Starting data fetcher") self.success = False - self.add_changed("handlers") + # self.add_changed("handlers") while self.active: response = None if self.success: - self.wait_for_interval(self.config("interval")) + self.wait_for_interval(self.get_config_option("interval")) try: - response = get(self.get_url(), timeout=self.config("timeout")) + response = get(self.get_url(), timeout=self.get_config_option("timeout")) if response.status_code == 200: - message = response.text - if self.config("json"): - message = response.json() - self.add_message(message) + self.add_message(response.json()) if not self.success: - self.add_changed("handlers") + pass + # self.add_changed("handlers") self.success = True elif response.status_code == 404: - message = response.text - if self.config("json"): - message = response.json() + # message = response.text + # if self.get_config_option("json"): + message = response.json() print(response.url, message) self.success = True else: self.success = False - self.add_changed("handlers") + # self.add_changed("handlers") Thread(target=self._reconnect_watcher).start() break except ConnectionError as error: @@ -52,9 +50,6 @@ def _fetcher(self): break except JSONDecodeError as error: self._handle_error(error, "Json decode error") - self.log.error(error) - if response: - self.log.debug(response.text) break except SSLError as error: self._handle_error(error, "SSL error") @@ -66,12 +61,12 @@ def _reconnect_watcher(self): self.log.debug("Starting reconnect watcher") while self.active: try: - response = get(self.get_url(), timeout=self.config("timeout")) + response = get(self.get_url(), timeout=self.get_config_option("timeout")) if response.status_code == 200: - if self.config("json"): - response.json() + # if self.get_config_option("json"): + response.json() Thread(target=self._fetcher).start() - self.add_changed("handlers") + # self.add_changed("handlers") break except ConnectionError: pass @@ -87,11 +82,9 @@ def _reconnect_watcher(self): self.log.debug("Stopping reconnect watcher") def _handle_error(self, error, message): - # print(error) - self.log.warning(message) - self.log.error(error) self.success = False - self.add_changed("handlers") + self.log.error(message, {"error": error}) + # self.add_changed("handlers") Thread(target=self._reconnect_watcher).start() type = "http" @@ -101,19 +94,19 @@ def _handle_error(self, error, message): "url": ["string", "URL address"], "interval": ["int", "Fetching interval in seconds", 10], "timeout": ["float", "Timeout in seconds", 3], - "json": ["bool", "Parse as a JSON", False], + # "json": ["bool", "Parse as a JSON", False], } def __init__(self, settings): super().__init__(settings) - self.log = logger(f"Plaintext fetcher {self.get_url()}") + self.log = Logger(f"{self.name} {self.get_url()}") self.success = False self.active = True - self.add_changed("handlers") + # self.add_changed("handlers") Thread(target=self._fetcher).start() def get_url(self): - url = self.config("url") + url = self.get_config_option("url") if "http://" not in url and "https://" not in url: return "http://" + url return url @@ -133,10 +126,8 @@ def send_message(self, message): args[f"arg{index}"] = arg index += 1 base_url = self.get_base_url() - target = ( - f"{base_url}{'/' if base_url[-1] != '/' else ''}{message.get_label()}" - ) - response = get(target, params=args, timeout=self.config("timeout")) + target = f"{base_url}{'/' if base_url[-1] != '/' else ''}{message.get_label()}" + response = get(target, params=args, timeout=self.get_config_option("timeout")) # TODO: Maybe use response.ok instead? if response.status_code: return True @@ -149,6 +140,3 @@ def send_message(self, message): def is_connected(self): return self.success - - def exit(self): - self.active = False diff --git a/src/server/modules/logging/__init__.py b/src/server/modules/logging/__init__.py new file mode 100644 index 0000000..92a2f16 --- /dev/null +++ b/src/server/modules/logging/__init__.py @@ -0,0 +1 @@ +from .logger import Logger diff --git a/src/server/modules/logging/logger.py b/src/server/modules/logging/logger.py new file mode 100644 index 0000000..8b37025 --- /dev/null +++ b/src/server/modules/logging/logger.py @@ -0,0 +1,39 @@ +from modules.utils import color_print, Color + + +class LoggingLevel: + DEBUG = "debug" + INFO = "info" + WARNING = "warning" + ERROR = "error" + CRITICAL = "critical" + + +class Logger: + """Class for application-wide logging""" + + level_colors = { + LoggingLevel.DEBUG: Color.PINK, + LoggingLevel.INFO: Color.GREEN, + LoggingLevel.WARNING: Color.ORANGE, + LoggingLevel.ERROR: Color.RED, + LoggingLevel.CRITICAL: Color.BOLD + Color.RED, + } + + def __init__(self, source: str): + self.source = source + self.info = self._generic_msg(LoggingLevel.INFO) + self.debug = self._generic_msg(LoggingLevel.DEBUG) + self.warning = self._generic_msg(LoggingLevel.WARNING) + self.error = self._generic_msg(LoggingLevel.ERROR) + self.critical = self._generic_msg(LoggingLevel.CRITICAL) + + def _generic_msg(self, level: str): + def function(message: str, payload: dict = None): + color = self.level_colors[level] + color_print(f"[{level.upper()}] {self.source}: {message}", color) + if payload: + for title, payload in payload.items(): + color_print(f"payload.{title}: {payload}", Color.GREY) + + return function diff --git a/modules/core/actions/routines/helpers/__init__.py b/src/server/modules/models/__init__.py similarity index 100% rename from modules/core/actions/routines/helpers/__init__.py rename to src/server/modules/models/__init__.py diff --git a/src/server/modules/models/attribute.py b/src/server/modules/models/attribute.py new file mode 100644 index 0000000..195b870 --- /dev/null +++ b/src/server/modules/models/attribute.py @@ -0,0 +1,36 @@ +from pony import orm + +from modules.database import db + + +class Attribute(db.Entity): + """Database entity representing data attribute""" + + name = orm.Required(str, index=True) + handler = orm.Required("Handler") + # stats_to_store = orm.Set(str) + data_units = orm.Set("DataUnit") + data_stats = orm.Set("DataStat") + enabled = orm.Required(bool) + + # def to_json(self): + # return {} + + +def get_by_id(a_id) -> Attribute | None: + """Returns attribute by id""" + return Attribute.get(id=a_id) + + +def get_by_handler_and_name(handler, name) -> Attribute | None: + """Returns attribute by handler and name""" + return Attribute.get(handler=handler, name=name) + + +def modify(handler, name, enabled=True) -> Attribute: + """Adds or modifies DataAttribute in database""" + existing_attribute = get_by_handler_and_name(handler, name) + if existing_attribute: + existing_attribute.enabled = enabled + return existing_attribute + return Attribute(handler=handler, name=name, enabled=enabled) diff --git a/src/server/modules/models/data_stat.py b/src/server/modules/models/data_stat.py new file mode 100644 index 0000000..3c466ab --- /dev/null +++ b/src/server/modules/models/data_stat.py @@ -0,0 +1,36 @@ +from pony import orm +from datetime import date, datetime, time + +from modules.database import db + + +class DataStat(db.Entity): + """Database entity representing data statistics""" + + handler = orm.Required("Handler") + attribute = orm.Required("Attribute", index=True) + type = orm.Required(str) + value = orm.Required(float) + date = orm.Required(date, index=True) + time = orm.Required(time) + + # def to_json(self): + # return {} + + +def add(handler, attribute, stat_type, value) -> DataStat: + """Adds DataStat to database""" + now = datetime.now() + return DataStat( + handler=handler, + attribute=attribute, + type=stat_type, + value=value, + date=now.date(), + time=now.time(), + ) + + +def get_by_type_and_date(handler, attribute, stat_type, stat_date) -> DataStat | None: + """Return DataStat by handler, attribute and date""" + return DataStat.get(handler=handler, attribute=attribute, type=stat_type, date=stat_date) diff --git a/src/server/modules/models/data_unit.py b/src/server/modules/models/data_unit.py new file mode 100644 index 0000000..1613982 --- /dev/null +++ b/src/server/modules/models/data_unit.py @@ -0,0 +1,29 @@ +from pony import orm +from datetime import date, datetime, time + +from modules.database import db + + +class DataUnit(db.Entity): + """Database entity representing data""" + + handler = orm.Required("Handler") + # name = orm.Required(str, index=True) + attribute = orm.Required("Attribute", index=True) + value = orm.Required(float) + date = orm.Required(date, index=True) + time = orm.Required(time) + + # def to_json(self): + # return {} + + +def add(handler, attribute, value, timestamp) -> DataUnit: + """Adds DataUnit to database""" + return DataUnit( + handler=handler, + attribute=attribute, + value=value, + date=timestamp.date(), + time=timestamp.time(), + ) diff --git a/src/server/modules/models/handler.py b/src/server/modules/models/handler.py new file mode 100644 index 0000000..947f771 --- /dev/null +++ b/src/server/modules/models/handler.py @@ -0,0 +1,34 @@ +from pony import orm + +from modules.database import db +from modules.handlers.abstract_handler import AbstractHandler +from modules.models.attribute import Attribute +from modules.models.data_unit import DataUnit +from modules.models.data_stat import DataStat + + +class Handler(db.Entity): + """Database entity representing handler configuration""" + + type = orm.Required(str) + options = orm.Required(orm.Json) + enabled = orm.Required(bool) + data = orm.Set(DataUnit) + stats = orm.Set(DataStat) + attributes = orm.Set(Attribute) + # events = orm.Set("EventUnit") + + +def get_all() -> list[Handler]: + """Returns all handlers""" + return Handler.select() + + +def add(handler: AbstractHandler, h_id=0) -> Handler: + """Adds handler to database""" + return Handler(id=h_id if h_id else None, type=handler.type, options=handler.options, enabled=True) + + +def get_by_id(h_id) -> Handler | None: + """Returns handler by id""" + return Handler.get(id=h_id) diff --git a/src/server/modules/models/logging_message.py b/src/server/modules/models/logging_message.py new file mode 100644 index 0000000..e93daa3 --- /dev/null +++ b/src/server/modules/models/logging_message.py @@ -0,0 +1,23 @@ +from pony import orm +from datetime import date, datetime, time + +from modules.database import db + + +class LoggingMessage(db.Entity): + """Logging message entity""" + + source = orm.Required(str) + level = orm.Required(int) + message = orm.Required(str) + payload = orm.Optional(orm.Json) + date = orm.Required(date, index=True) + time = orm.Required(time) + + +def add(source, level, message, payload) -> LoggingMessage: + """Adds message to database""" + now = datetime.now() + return LoggingMessage( + source=source, level=level, message=message, payload=payload, date=now.date(), time=now.time() + ) diff --git a/src/server/modules/tools.py b/src/server/modules/tools.py new file mode 100644 index 0000000..52e14e0 --- /dev/null +++ b/src/server/modules/tools.py @@ -0,0 +1,93 @@ +import inspect + +from time import time + + +class BlueprintInit: + def __init__(self, manager): + self._manager = manager + + @property + def manager(self): + return self._manager + + +def this_name(): + """Returns the name of the function that called this function""" + return inspect.stack()[1].function + + +def get_current_seconds(): + """Returns result of time() as integer""" + return int(time()) + + +def linearize(input_json, result=None, current_branch=()): + if result is None: + result = {} + for attribute in input_json: + if isinstance(input_json[attribute], dict): + new_branch = list(current_branch) + new_branch.append(attribute) + linearize(input_json[attribute], result, new_branch) + else: + branch = list(current_branch) + branch.append(attribute) + result["/".join(branch)] = input_json[attribute] + return result + + +def get_nested_attribute(json, attributes_row): + attributes = attributes_row.split("/") + attributes.reverse() + result = json + while attributes: + attribute = attributes.pop() + if attribute in result: + result = result[attribute] + else: + return + return result + + +class ModulesRegistrator: + """Handles modules registration and their exit on shutdown""" + + def __init__(self): + self.registered_modules = [] + + def add(self, *modules): + for module in modules: + self.registered_modules.append(module) + + def exit(self): + for module in self.registered_modules: + module.exit() + + +def parse_config(config, handler_class): + parsed_config = {} + + for field in config: + if field in handler_class.config_fields: + field_type = handler_class.config_fields[field][0] + value = config[field] + # if not value: + # continue + if field_type in ["int", "handlerInstance", "workflowInstance"]: + value = int(value) + elif field_type == "float": + value = float(value) + elif field_type == "bool": + value = bool(value) + parsed_config[field] = value + + for field in handler_class.config_fields: + if len(handler_class.config_fields[field]) > 2 and field not in parsed_config: + parsed_config[field] = handler_class.config_fields[field][2] + + if handler_class.config_fields[field][0] == "bool": + if f"_{field}_" not in config: + parsed_config[field] = False + + return parsed_config diff --git a/src/server/modules/utils/__init__.py b/src/server/modules/utils/__init__.py new file mode 100644 index 0000000..2c34b4e --- /dev/null +++ b/src/server/modules/utils/__init__.py @@ -0,0 +1 @@ +from .color_print import color_print, Color diff --git a/src/server/modules/utils/color_print.py b/src/server/modules/utils/color_print.py new file mode 100644 index 0000000..c02dfba --- /dev/null +++ b/src/server/modules/utils/color_print.py @@ -0,0 +1,14 @@ +class Color: + GREY = "\033[90m" + RED = "\033[91m" + GREEN = "\033[92m" + ORANGE = "\033[93m" + BLUE = "\033[94m" + PINK = "\033[95m" + END = "\033[0m" + BOLD = "\033[1m" + UNDERLINE = "\033[4m" + + +def color_print(message: str | dict, color: str = Color.END): + print(color + str(message) + Color.END) diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index fb6f57f..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "module": "es2022", - "target": "es6", - "noImplicitAny": true, - "removeComments": true, - "preserveConstEnums": true, - "esModuleInterop": true, - "sourceMap": true, - "moduleResolution": "Node", - "outDir": "modules/web_server/static/js" - }, - "include": [ - "modules/web_server/src/*" - ], - "exclude": [ - "webpack.config.ts" - ] -} diff --git a/webpack.config.ts b/webpack.config.ts deleted file mode 100644 index 919febe..0000000 --- a/webpack.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -import path from "path"; -import { fileURLToPath } from 'url'; -import { Configuration } from "webpack"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const config: Configuration = { - entry: "./modules/web_server/src/main.ts", - mode: "development", - module: { - rules: [ - { - test: /\.tsx?$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - options: { - presets: ["@babel/preset-env", "@babel/preset-typescript"], - }, - }, - } - ] - }, - resolve: { - extensions: [".tsx", ".ts", ".js"] - }, - output: { - path: path.resolve(__dirname, "modules/web_server/static/js"), - filename: "bundle.js", - } -}; - -export default config; \ No newline at end of file From 024a5aff16f5fcdc5de51006129a453a571ed668 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sun, 22 Oct 2023 20:32:04 +0200 Subject: [PATCH 002/105] Add widgets --- src/client/.eslintrc.json | 19 +- src/client/package-lock.json | 851 +++++++++++++++++- src/client/package.json | 3 + src/client/pages/dashboard.tsx | 35 +- .../public/icons/cosmic/cross-small.svg | 3 + src/client/public/icons/cosmic/plus-small.svg | 3 + src/client/src/bridge/endpoints.ts | 5 +- src/client/src/bridge/models/WidgetModel.ts | 11 + .../src/bridge/modules/availableHandlers.ts | 9 - src/client/src/bridge/modules/handlers.ts | 4 + src/client/src/bridge/modules/index.ts | 2 +- src/client/src/bridge/modules/widgets.ts | 9 + .../components/NavbarLogo/NavbarLogo.tsx | 3 +- .../AttributeWidget/AttributeWidget.tsx | 4 +- .../src/layouts/NavbarLayout/NavbarLayout.tsx | 4 +- src/server/Pipfile | 1 + src/server/Pipfile.lock | 601 ++++++++----- src/server/main.py | 4 +- src/server/modules/blueprints/__init__.py | 8 +- src/server/modules/blueprints/attributes.py | 26 + src/server/modules/blueprints/handlers.py | 4 +- src/server/modules/blueprints/widgets.py | 30 + src/server/modules/models/attribute.py | 3 +- src/server/modules/models/handler.py | 9 +- src/server/modules/models/widget_tile.py | 22 + 25 files changed, 1315 insertions(+), 358 deletions(-) create mode 100644 src/client/public/icons/cosmic/cross-small.svg create mode 100644 src/client/public/icons/cosmic/plus-small.svg create mode 100644 src/client/src/bridge/models/WidgetModel.ts delete mode 100644 src/client/src/bridge/modules/availableHandlers.ts create mode 100644 src/client/src/bridge/modules/widgets.ts create mode 100644 src/server/modules/blueprints/attributes.py create mode 100644 src/server/modules/blueprints/widgets.py create mode 100644 src/server/modules/models/widget_tile.py diff --git a/src/client/.eslintrc.json b/src/client/.eslintrc.json index 3288856..dedcb0d 100644 --- a/src/client/.eslintrc.json +++ b/src/client/.eslintrc.json @@ -1,25 +1,16 @@ { "extends": "next/core-web-vitals", "plugins": [ - "simple-import-sort", + "import", "unused-imports", - "import" + "simple-import-sort", + "prettier" ], - "ignorePatterns": ["**/*.ts"], "rules": { -// "indent": "off", -// "@typescript-eslint/indent": "error", - "import/no-duplicates": "error", "simple-import-sort/imports": "error", "simple-import-sort/exports": "error", - - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": "off", - "unused-imports/no-unused-imports": "error" -// "unused-imports/no-unused-vars": [ -// "warn", -// { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } -// ] + "unused-imports/no-unused-imports": "error", + "prettier/prettier": "error" } } diff --git a/src/client/package-lock.json b/src/client/package-lock.json index 83e3332..f79d409 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -20,9 +20,12 @@ "@types/node": "20.8.4", "@types/react": "18.2.28", "@types/react-dom": "18.2.13", + "@typescript-eslint/eslint-plugin": "^6.8.0", + "@typescript-eslint/parser": "^6.8.0", "eslint": "8.51.0", "eslint-config-next": "^13.5.4", "eslint-plugin-import": "^2.28.1", + "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", "husky": "^8.0.3", @@ -591,6 +594,26 @@ "node": ">= 8" } }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@reduxjs/toolkit": { "version": "1.9.7", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", @@ -638,6 +661,12 @@ "hoist-non-react-statics": "^3.3.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -694,22 +723,63 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "dev": true + }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", "peer": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", + "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/type-utils": "6.8.0", + "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", - "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", + "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4" }, "engines": { @@ -729,13 +799,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", - "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", + "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5" + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -745,10 +815,37 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", + "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/utils": "6.8.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", - "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", + "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -759,13 +856,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", - "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", + "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -785,13 +882,38 @@ } } }, + "node_modules/@typescript-eslint/utils": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", + "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", - "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", + "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/types": "6.8.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1116,6 +1238,15 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1124,6 +1255,18 @@ "node": ">=8" } }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1145,6 +1288,21 @@ "node": ">=8" } }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -1527,6 +1685,40 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", @@ -1541,6 +1733,18 @@ "node": ">= 0.4" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -2003,6 +2207,35 @@ "semver": "bin/semver.js" } }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-plugin-react": { "version": "7.33.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", @@ -2244,6 +2477,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -2992,6 +3231,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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", @@ -3050,6 +3304,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -3249,6 +3521,33 @@ "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==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/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==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -3980,6 +4279,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -4251,6 +4568,18 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -4640,6 +4969,110 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "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/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5335,6 +5768,22 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/table": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", @@ -5434,6 +5883,18 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5609,6 +6070,15 @@ "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", "dev": true }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6209,6 +6679,20 @@ "fastq": "^1.6.0" } }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + } + }, "@reduxjs/toolkit": { "version": "1.9.7", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", @@ -6244,6 +6728,12 @@ "hoist-non-react-statics": "^3.3.0" } }, + "@types/json-schema": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "dev": true + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -6300,49 +6790,86 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "@types/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "dev": true + }, "@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", "peer": true }, + "@typescript-eslint/eslint-plugin": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", + "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/type-utils": "6.8.0", + "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, "@typescript-eslint/parser": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", - "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", + "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", - "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", + "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "dev": true, "requires": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5" + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", + "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/utils": "6.8.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", - "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", + "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", - "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", + "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "dev": true, "requires": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6350,13 +6877,28 @@ "ts-api-utils": "^1.0.1" } }, + "@typescript-eslint/utils": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", + "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "semver": "^7.5.4" + } + }, "@typescript-eslint/visitor-keys": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", - "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", + "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "dev": true, "requires": { - "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/types": "6.8.0", "eslint-visitor-keys": "^3.4.1" } }, @@ -6589,11 +7131,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6612,6 +7169,15 @@ "fill-range": "^7.0.1" } }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "requires": { + "run-applescript": "^5.0.0" + } + }, "busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -6866,6 +7432,28 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, "define-data-property": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", @@ -6877,6 +7465,12 @@ "has-property-descriptors": "^1.0.0" } }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, "define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -7251,6 +7845,16 @@ } } }, + "eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, "eslint-plugin-react": { "version": "7.33.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", @@ -7418,6 +8022,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -7955,6 +8565,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -7992,6 +8608,15 @@ "is-extglob": "^2.1.1" } }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + } + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -8119,6 +8744,23 @@ "get-intrinsic": "^1.1.1" } }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + } + } + }, "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -8643,6 +9285,18 @@ "mimic-fn": "^4.0.0" } }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -8806,6 +9460,15 @@ "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -9062,6 +9725,76 @@ "glob": "^7.1.3" } }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "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" + } + }, + "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==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "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==", + "dev": true + } + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -9546,6 +10279,16 @@ "use-sync-external-store": "^1.2.0" } }, + "synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + } + }, "table": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", @@ -9625,6 +10368,12 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -9749,6 +10498,12 @@ "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", "dev": true }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/src/client/package.json b/src/client/package.json index 3cabfc2..a518a80 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -24,9 +24,12 @@ "@types/node": "20.8.4", "@types/react": "18.2.28", "@types/react-dom": "18.2.13", + "@typescript-eslint/eslint-plugin": "^6.8.0", + "@typescript-eslint/parser": "^6.8.0", "eslint": "8.51.0", "eslint-config-next": "^13.5.4", "eslint-plugin-import": "^2.28.1", + "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", "husky": "^8.0.3", diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx index 22411b3..f6142d6 100644 --- a/src/client/pages/dashboard.tsx +++ b/src/client/pages/dashboard.tsx @@ -1,36 +1,27 @@ -import { FlexLayout, Header, HeaderSize, Loc, ThemedIconName } from "../src/components"; +import { useWidgets } from "../src/bridge"; +import { FlexLayout, Header, HeaderSize, Loc } from "../src/components"; import { AttributeWidget } from "../src/components/Widget"; import { NavbarLayout } from "../src/layouts"; import { GLOBAL_LOC_KEYS } from "../src/utils"; export const Dashboard = () => { + const { data: widgets } = useWidgets(); return (
{GLOBAL_LOC_KEYS.DASHBOARD}
- - - + {widgets?.map((widget) => ( + + ))}
); diff --git a/src/client/public/icons/cosmic/cross-small.svg b/src/client/public/icons/cosmic/cross-small.svg new file mode 100644 index 0000000..86c18d6 --- /dev/null +++ b/src/client/public/icons/cosmic/cross-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/plus-small.svg b/src/client/public/icons/cosmic/plus-small.svg new file mode 100644 index 0000000..7fe358f --- /dev/null +++ b/src/client/public/icons/cosmic/plus-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts index c0e02e1..b6936bf 100644 --- a/src/client/src/bridge/endpoints.ts +++ b/src/client/src/bridge/endpoints.ts @@ -1,6 +1,7 @@ export enum Endpoint { - addHandler = "core/add-handler", - availableHandlers = "core/available-handlers", + addHandler = "core/handlers/add-handler", + availableHandlers = "core/handlers/available-handlers", handlers = "core/handlers", + widgets = "core/widgets", } export const getApiEndpoint = (endpoint: Endpoint) => `/api/${endpoint}`; diff --git a/src/client/src/bridge/models/WidgetModel.ts b/src/client/src/bridge/models/WidgetModel.ts new file mode 100644 index 0000000..64ded30 --- /dev/null +++ b/src/client/src/bridge/models/WidgetModel.ts @@ -0,0 +1,11 @@ +import { IconName } from "../../components"; + +export interface WidgetModel { + id: number; + name: string; + handler: number; + icon: IconName; + attribute: string; + unit: string; + value: string | number | boolean; +} diff --git a/src/client/src/bridge/modules/availableHandlers.ts b/src/client/src/bridge/modules/availableHandlers.ts deleted file mode 100644 index 362ad0a..0000000 --- a/src/client/src/bridge/modules/availableHandlers.ts +++ /dev/null @@ -1,9 +0,0 @@ -import useSWR from "swr"; - -import { Endpoint, getApiEndpoint } from "../endpoints"; -import { HandlerModel } from "../models"; -import { getJson } from "../utils"; - -export const useAvailableHandlers = () => { - return useSWR(getApiEndpoint(Endpoint.availableHandlers), getJson); -}; diff --git a/src/client/src/bridge/modules/handlers.ts b/src/client/src/bridge/modules/handlers.ts index 2086f3e..61cdda2 100644 --- a/src/client/src/bridge/modules/handlers.ts +++ b/src/client/src/bridge/modules/handlers.ts @@ -19,3 +19,7 @@ export const addHandler = ( ) => { return postJson(getApiEndpoint(Endpoint.addHandler), handler, onSuccess, onError); }; + +export const useAvailableHandlers = () => { + return useSWR(getApiEndpoint(Endpoint.availableHandlers), getJson); +}; diff --git a/src/client/src/bridge/modules/index.ts b/src/client/src/bridge/modules/index.ts index 3017d24..e20fd02 100644 --- a/src/client/src/bridge/modules/index.ts +++ b/src/client/src/bridge/modules/index.ts @@ -1,2 +1,2 @@ -export * from "./availableHandlers"; export * from "./handlers"; +export * from "./widgets"; diff --git a/src/client/src/bridge/modules/widgets.ts b/src/client/src/bridge/modules/widgets.ts new file mode 100644 index 0000000..9b0a499 --- /dev/null +++ b/src/client/src/bridge/modules/widgets.ts @@ -0,0 +1,9 @@ +import useSWR from "swr"; + +import { Endpoint, getApiEndpoint } from "../endpoints"; +import { WidgetModel } from "../models/WidgetModel"; +import { getJson } from "../utils"; + +export const useWidgets = () => { + return useSWR(getApiEndpoint(Endpoint.widgets), getJson); +}; diff --git a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx index f344249..7e60838 100644 --- a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx +++ b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx @@ -4,8 +4,7 @@ import { bemClassNames } from "../../../../utils"; import { FlexLayout } from "../../../FlexLayout"; import { CustomIconName, Icon } from "../../../Icon"; -export type NavbarLogoProps = { -}; +export type NavbarLogoProps = {}; const classNames = bemClassNames("navbar-logo"); diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx index 9efd170..7152bd9 100644 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx @@ -1,7 +1,7 @@ import { FC } from "react"; import { bemClassNames } from "../../../utils"; -import { Icon, ThemedIconName } from "../../Icon"; +import { Icon, IconName } from "../../Icon"; const bem = bemClassNames("attribute-widget"); @@ -10,7 +10,7 @@ export type AttributeWidgetProps = { description: string; value: string | number | boolean; unit: string; - icon: ThemedIconName; + icon: IconName; }; export const AttributeWidget: FC = ({ title, description, value, unit, icon }) => { diff --git a/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx b/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx index 047f1cc..ce0238c 100644 --- a/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx +++ b/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx @@ -1,6 +1,6 @@ import { FunctionComponent, ReactNode } from "react"; -import { FlexLayout, Navbar, NavbarItem, NavbarLogo, NavbarSection,ThemedIconName } from "../../components"; +import { FlexLayout, Navbar, NavbarItem, NavbarLogo, NavbarSection, ThemedIconName } from "../../components"; import { bemClassNames, GLOBAL_LOC_KEYS } from "../../utils"; const bem = bemClassNames("navbar-layout"); @@ -20,7 +20,7 @@ export const NavbarLayout: FunctionComponent = ({ children }) - + {navbarItems.map((item) => ( diff --git a/src/server/Pipfile b/src/server/Pipfile index 3d9f327..063e845 100644 --- a/src/server/Pipfile +++ b/src/server/Pipfile @@ -11,6 +11,7 @@ simplejson = "*" requests = "*" [dev-packages] +black = "*" [requires] python_version = "3.11" diff --git a/src/server/Pipfile.lock b/src/server/Pipfile.lock index bbd21fc..4b51132 100644 --- a/src/server/Pipfile.lock +++ b/src/server/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "c91153d43415b75dbb19cb9b728a76cfd51cad7da4874284ed19f7e7cbe3ae49" + "sha256": "c843ce922bb729dc7bb736824d496dd47064568745a90b037aac0f59561fab07" }, "pipfile-spec": 6, "requires": { @@ -16,130 +16,141 @@ ] }, "default": { + "blinker": { + "hashes": [ + "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d", + "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa" + ], + "markers": "python_version >= '3.7'", + "version": "==1.6.3" + }, "certifi": { "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2022.12.7" + "version": "==2023.7.22" }, "charset-normalizer": { "hashes": [ - "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b", - "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42", - "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d", - "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b", - "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a", - "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59", - "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154", - "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1", - "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c", - "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a", - "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d", - "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6", - "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b", - "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b", - "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783", - "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5", - "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918", - "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555", - "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639", - "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786", - "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e", - "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed", - "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820", - "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8", - "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3", - "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541", - "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14", - "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be", - "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e", - "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76", - "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b", - "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c", - "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b", - "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3", - "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc", - "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6", - "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59", - "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4", - "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d", - "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d", - "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3", - "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a", - "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea", - "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6", - "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e", - "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603", - "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24", - "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a", - "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58", - "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678", - "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a", - "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c", - "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6", - "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18", - "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174", - "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317", - "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f", - "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc", - "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837", - "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41", - "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c", - "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579", - "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753", - "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8", - "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291", - "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087", - "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866", - "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3", - "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d", - "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1", - "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca", - "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e", - "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db", - "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72", - "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d", - "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc", - "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539", - "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d", - "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af", - "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b", - "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602", - "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f", - "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478", - "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c", - "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e", - "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479", - "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7", - "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8" + "sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5", + "sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93", + "sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a", + "sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d", + "sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c", + "sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1", + "sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58", + "sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2", + "sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557", + "sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147", + "sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041", + "sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2", + "sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2", + "sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7", + "sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296", + "sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690", + "sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67", + "sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57", + "sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597", + "sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846", + "sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b", + "sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97", + "sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c", + "sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62", + "sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa", + "sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f", + "sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e", + "sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821", + "sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3", + "sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4", + "sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb", + "sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727", + "sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514", + "sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d", + "sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761", + "sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55", + "sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f", + "sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c", + "sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034", + "sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6", + "sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae", + "sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1", + "sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14", + "sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1", + "sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228", + "sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708", + "sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48", + "sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f", + "sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5", + "sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f", + "sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4", + "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8", + "sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff", + "sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61", + "sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b", + "sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97", + "sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b", + "sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605", + "sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728", + "sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d", + "sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c", + "sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf", + "sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673", + "sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1", + "sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b", + "sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41", + "sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8", + "sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f", + "sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4", + "sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008", + "sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9", + "sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5", + "sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f", + "sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e", + "sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273", + "sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45", + "sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e", + "sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656", + "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e", + "sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c", + "sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2", + "sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72", + "sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056", + "sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397", + "sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42", + "sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd", + "sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3", + "sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213", + "sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf", + "sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67" ], - "version": "==3.0.1" + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.1" }, "click": { "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], "markers": "python_version >= '3.7'", - "version": "==8.1.3" + "version": "==8.1.7" }, "flask": { "hashes": [ - "sha256:7eb373984bf1c770023fce9db164ed0c3353cd0b53f130f4693da0ca756a2e6d", - "sha256:c0bec9477df1cb867e5a67c9e1ab758de9cb4a3e52dd70681f59fa40a62b3f2d" + "sha256:21128f47e4e3b9d597a3e8521a329bf56909b690fcc3fa3e477725aa81367638", + "sha256:cfadcdb638b609361d29ec22360d6070a77d7463dcb3ab08d2c2f2f168845f58" ], "index": "pypi", - "version": "==2.2.3" + "version": "==3.0.0" }, "flask-cors": { "hashes": [ - "sha256:74efc975af1194fc7891ff5cd85b0f7478be4f7f59fe158102e91abb72bb4438", - "sha256:b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de" + "sha256:bc3492bfd6368d27cfe79c7821df5a8a319e1a6d5eab277a3794be19bdc51783", + "sha256:f268522fcb2f73e2ecdde1ef45e2fd5c71cc48fe03cffb4b441c6d1b40684eb0" ], "index": "pypi", - "version": "==3.0.10" + "version": "==4.0.0" }, "idna": { "hashes": [ @@ -167,179 +178,271 @@ }, "markupsafe": { "hashes": [ - "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", - "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", - "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", - "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", - "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", - "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", - "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", - "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", - "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", - "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", - "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", - "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", - "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", - "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", - "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", - "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", - "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", - "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", - "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", - "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", - "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", - "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", - "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", - "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", - "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", - "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", - "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", - "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", - "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", - "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", - "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", - "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", - "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", - "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", - "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", - "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", - "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", - "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", - "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", - "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", - "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", - "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", - "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", - "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", - "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", - "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", - "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", - "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", - "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", - "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" ], "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "version": "==2.1.3" }, "pony": { "hashes": [ - "sha256:5f45fc67587f4520c560a57148cc573b097d42f82f5cb200d72c957b5708198d", - "sha256:608a1c1d662983bad2590e650f2bbc1cd6ed48558894ad8f50da4739ff98f614" + "sha256:b72172d57abd5e0846cd8d71231572da20f526327bf0d33348a9276f624d8aa7", + "sha256:c37e9b44f975d147b79cf56925b16b0e40b2b47ba5958d0c01579f37a5a24f7c" ], "index": "pypi", - "version": "==0.7.16" + "version": "==0.7.17" }, "requests": { "hashes": [ - "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", - "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], "index": "pypi", - "version": "==2.28.2" + "version": "==2.31.0" }, "simplejson": { "hashes": [ - "sha256:04a4b9a297cccbc9e1d66fe652fbffd55b36d6579c43132e821d315957302194", - "sha256:063db62a9251e61ea0c17e49c3e7bed465bfcc5359655abcb8c0bc6130a4e0d4", - "sha256:070ab073ce72f1624107dfd6d095c87ac32aafe7ba54a5c5055a3dd83cb06e51", - "sha256:099bbd3b5b4ea83159a980348cd481a34984dee5fe1b9fac31a9137158f46960", - "sha256:0baf8c60efef74944ed4adb034d14bcf737731576f0e4c3c56fb875ea256af69", - "sha256:0e7c3fae6c9540064e06a653780b4f263675cd69ca6841345029fee3e27e9bb5", - "sha256:141782a0a25c1792627575b37b4951583358ccc7137623aa45947f8425ee8d96", - "sha256:14b35fb90083218e59df5dba733c7086655f2938f3fcabe36ad849623941d660", - "sha256:169c2c7446ef33439c304a6aa5b7b5a2dbc938c9c2dd882dd3f2553f9518ebf6", - "sha256:16cc750d19852fa5ebafd55da86fa357f87991e07b4e2afb37a5975dfdde0153", - "sha256:1907d49d70c75530976119c13785db91168d2599288debaca7d25da9cd2f3747", - "sha256:1b79e2607ac5ba98381c2e068727acc1e4dd385a6d216914c0613f8f568a06a5", - "sha256:1e49c84df6e71e3c23169d3df481565dd607cbee4aa1e0af15c493cccad7c745", - "sha256:23fce984045804194f513a2739dcd82be350198470d5ade5058da019a48cf3f8", - "sha256:24823364fee93bab141621b3a2e10612e31be7ca58788bf9b2cd2b1ce37ab07d", - "sha256:290bbcdcbb37af3f7e43378f592ab7a9168fca640da6af63d42cdb535f96bbf2", - "sha256:2a1b3222bc8f6ac91b5ebe3263111c7dc4dc4b01c52f0153f5bb1f3ef3bf0023", - "sha256:2b0f6de11f5ce4b80f51bc49d08b898602e190547f8efe4e44af8ae3cda7779d", - "sha256:2be75f4cb9951efeb2616e16f944ee4f9a09768475a3f5c40a6ac4dc5ee68dfd", - "sha256:2c7ee643ee93684bf76196e2d84a2090c6df8f01737a016e869b579593827b6e", - "sha256:37bdef13412c0bc338db2993a38f3911d5bd2a0ba8d00b3bc66d1063edd7c33e", - "sha256:3bab9ea49ff477c926c5787f79ec47cf51c7ffb15c9d8dd0f09e728807d44f4b", - "sha256:44d6c52d4f5c0c087a6e88a92bf9f94234321d21be32c6471ba39856e304bbe3", - "sha256:4b8d4d958c5ab3489d1174917a7fad82da642560c39ce559a624e63deaaa36b1", - "sha256:4de9fed1166aeedee44150fa83bc059aca6b612940281f8b5a39374781f16196", - "sha256:502d86fbfe914263642479b87ed61af3b27b9e039df77acd2416cfccfc892e68", - "sha256:508342d7227ed66beecfbba7a38b46e1a713faeb034216f43f03ec5c175e0622", - "sha256:50f4b6d52f3a2d1cffd11834a1fe7f9516f0e3f20cbe78027aa88ff990fad7d6", - "sha256:52465a5578cfc2c5e374a574df14dfb75e04c6cb6a100b7abc8bf6c89bea8f5e", - "sha256:55aa983575b0aef143845f5bfbb35075475eccaebf7d4b30f4037a2fe8414666", - "sha256:55df3dfd8777bf134e1078d2f195352432a77f23ccb90b92b08218123d56adc9", - "sha256:56f186d44a9f625b5e5d9ba4b9551e263604000a7df60cb373b3e789ca603b2a", - "sha256:5780e3929435a8d39671537174f8ce0ccafb4f6e0c748ffe139916ffbdca39d3", - "sha256:59a629240cfbc5b4f390a8578dca74ae77ab617de971862acb946822d2eb1b11", - "sha256:5b009342e712026ffabe8a471d5b4a4ff2a038687387e74eae601574c04dae33", - "sha256:62628ea5df8c830d00a7417d5ecd949a1b24a8d0a5063a2a77f7ec7522110a0f", - "sha256:694332fd6fd10fe8868c2508583220d1a1a7be9ff049dab5bd6b9aedfb9edc50", - "sha256:6a49665169c18f27a0fc10935466332ee7406ee14ced8dc0a1b4d465547299aa", - "sha256:6b997739fdbc9b7030ff490fc8e5f8c144b8ec80f3605eff643983672bb8cfde", - "sha256:6bd81d10cb3384f64242316da8a2b2f88618776bc1ef38bcc79f1afe8ad36616", - "sha256:6c4c56c5abb82e22877b913186e5c0fd7d9eef0c930719e28fa451d3f11defb4", - "sha256:6fe1173b4146641c872bafa6f9a21f3a2012f502d54fbb523a76e6320024fae9", - "sha256:75eb555dc349d0cbe2c95ea2be665b306c6ac6d5b64e3a3920af9b805ecdb5f7", - "sha256:7c26fe63755ecc59c502ddde8e58ce8b765bf4fdd3f5858d2b7c8ab28bc2a9c8", - "sha256:7e73d9d6af3c29b60a92e28b3144d951110f59a3d05fc402c3f6c5248b883400", - "sha256:7ff65b475091084e5bdb7f26e9c555956be7355b573ce494fa96f9f8e34541ac", - "sha256:8209c40279ed9b2cd5fbe2d617a29a074e90ea97fce7c07a0128a01cb3e8afc5", - "sha256:88f59a07873dc1f06fd9e6712dd71286f1b297a066ad2fd9110ad080d3cb011c", - "sha256:96ade36640734b54176c4765d00a60767bd7fae5b7a5b3574accc055ac18e34c", - "sha256:9cf299fbb7d476676dfea372a3262654af98694bd1df35b060ce0fe1b68087f1", - "sha256:a2960b95f3ba822d077d1afa7e1fea9799cfb2990028cf010e666f64195ecb5a", - "sha256:a80bd9a3db88a76a401155c64e3499376c702307c2206cb381cc2a8dd9cc4f1f", - "sha256:aad323e92cb1bd3b1db6f57c007dca964d13c52247ad844203ce381e94066601", - "sha256:ab5bdf0b8d07f7fd603b2d0c1982412cd9f8ade997088ddced251f7e656c7fd4", - "sha256:b0352428b35da859a98770949e7353866ae65463026f1c8e4c89a6395d4b5fd7", - "sha256:b2c4e8b65987f3c6529149495d28e23efe213e94dc3659176c4ab22d18a9ee4a", - "sha256:bcd9eac304a133ee4af58e68c5ded4c5ba663d3ee4602e8613359b776a1f8c8f", - "sha256:c3b696770b504f881f271f97b94a687487ec1ef20bfbd5f20d92bbab7a85952d", - "sha256:c4514675f6571da8190fea52a110bca686fa844972e8b2b3bc07ace9e632ee4f", - "sha256:c98fddc374468158778a8afb3fd7296412a2b2fc34cebba64212ac3e018e7382", - "sha256:cde5a3ff5e0bd5d6da676314dfae86c9e99bff77bca03d30223c9718a58f9e83", - "sha256:cf7168b2046db0eceb83d8ed2ee31c0847ce18b2d8baf3e93de9560f3921a8c3", - "sha256:d774782159347d66563cd7ac18b9dd37010438a825160cde4818caa18110a746", - "sha256:d990ea42ba908cb57a3df97d283aa26c1822f10a0a60e250b54ee21cd08c48d0", - "sha256:e762e9d8556fa9f3a99f8a278eeba50a35b5f554b82deeb282ddbdd85816e638", - "sha256:e8a4750e8db92109e6f1f7783a7faae4254d6d5dc28a41ff7eff7d2265f0586b", - "sha256:eb81cfef0c0039010f0212f4e5eb6909641b8a54c761584054ac97fd7bd0c21a", - "sha256:ebb53837c5ffcb6100646018565d3f1afed6f4b185b14b2c9cbccf874fe40157", - "sha256:efa70fd9b6c7b57b048ecadb909683acd535cddebc5b22f3c05ba3b369739caf", - "sha256:f73bae5e315adf7bc8cb7f0a13a1e9e33bead42e8ce174be83ac9ecc2513c86a", - "sha256:f89f078114cacedb9a3392615cc099cf02a51efa7507f90e2006bf7ec38c880d", - "sha256:f9f72d2b539512f382a48cc9ad6cea2d3a572e71e92c40e03d2140041eeaa233", - "sha256:fc8df5831b645e96a318ea51a66ce6e2bb869eebc3fa9a860bbf67aecd270055" + "sha256:0405984f3ec1d3f8777c4adc33eac7ab7a3e629f3b1c05fdded63acc7cf01137", + "sha256:0436a70d8eb42bea4fe1a1c32d371d9bb3b62c637969cb33970ad624d5a3336a", + "sha256:061e81ea2d62671fa9dea2c2bfbc1eec2617ae7651e366c7b4a2baf0a8c72cae", + "sha256:064300a4ea17d1cd9ea1706aa0590dcb3be81112aac30233823ee494f02cb78a", + "sha256:08889f2f597ae965284d7b52a5c3928653a9406d88c93e3161180f0abc2433ba", + "sha256:0a48679310e1dd5c9f03481799311a65d343748fe86850b7fb41df4e2c00c087", + "sha256:0b0a3eb6dd39cce23801a50c01a0976971498da49bc8a0590ce311492b82c44b", + "sha256:0d2d5119b1d7a1ed286b8af37357116072fc96700bce3bec5bb81b2e7057ab41", + "sha256:0d551dc931638e2102b8549836a1632e6e7cf620af3d093a7456aa642bff601d", + "sha256:1018bd0d70ce85f165185d2227c71e3b1e446186f9fa9f971b69eee223e1e3cd", + "sha256:11c39fbc4280d7420684494373b7c5904fa72a2b48ef543a56c2d412999c9e5d", + "sha256:11cc3afd8160d44582543838b7e4f9aa5e97865322844b75d51bf4e0e413bb3e", + "sha256:1537b3dd62d8aae644f3518c407aa8469e3fd0f179cdf86c5992792713ed717a", + "sha256:16ca9c90da4b1f50f089e14485db8c20cbfff2d55424062791a7392b5a9b3ff9", + "sha256:176a1b524a3bd3314ed47029a86d02d5a95cc0bee15bd3063a1e1ec62b947de6", + "sha256:18955c1da6fc39d957adfa346f75226246b6569e096ac9e40f67d102278c3bcb", + "sha256:1bb5b50dc6dd671eb46a605a3e2eb98deb4a9af787a08fcdddabe5d824bb9664", + "sha256:1c768e7584c45094dca4b334af361e43b0aaa4844c04945ac7d43379eeda9bc2", + "sha256:1dd4f692304854352c3e396e9b5f0a9c9e666868dd0bdc784e2ac4c93092d87b", + "sha256:25785d038281cd106c0d91a68b9930049b6464288cea59ba95b35ee37c2d23a5", + "sha256:287e39ba24e141b046812c880f4619d0ca9e617235d74abc27267194fc0c7835", + "sha256:2c1467d939932901a97ba4f979e8f2642415fcf02ea12f53a4e3206c9c03bc17", + "sha256:2c433a412e96afb9a3ce36fa96c8e61a757af53e9c9192c97392f72871e18e69", + "sha256:2d022b14d7758bfb98405672953fe5c202ea8a9ccf9f6713c5bd0718eba286fd", + "sha256:2f98d918f7f3aaf4b91f2b08c0c92b1774aea113334f7cde4fe40e777114dbe6", + "sha256:2fc697be37585eded0c8581c4788fcfac0e3f84ca635b73a5bf360e28c8ea1a2", + "sha256:3194cd0d2c959062b94094c0a9f8780ffd38417a5322450a0db0ca1a23e7fbd2", + "sha256:332c848f02d71a649272b3f1feccacb7e4f7e6de4a2e6dc70a32645326f3d428", + "sha256:346820ae96aa90c7d52653539a57766f10f33dd4be609206c001432b59ddf89f", + "sha256:3471e95110dcaf901db16063b2e40fb394f8a9e99b3fe9ee3acc6f6ef72183a2", + "sha256:3848427b65e31bea2c11f521b6fc7a3145d6e501a1038529da2391aff5970f2f", + "sha256:39b6d79f5cbfa3eb63a869639cfacf7c41d753c64f7801efc72692c1b2637ac7", + "sha256:3e74355cb47e0cd399ead3477e29e2f50e1540952c22fb3504dda0184fc9819f", + "sha256:3f39bb1f6e620f3e158c8b2eaf1b3e3e54408baca96a02fe891794705e788637", + "sha256:40847f617287a38623507d08cbcb75d51cf9d4f9551dd6321df40215128325a3", + "sha256:4280e460e51f86ad76dc456acdbfa9513bdf329556ffc8c49e0200878ca57816", + "sha256:445a96543948c011a3a47c8e0f9d61e9785df2544ea5be5ab3bc2be4bd8a2565", + "sha256:4969d974d9db826a2c07671273e6b27bc48e940738d768fa8f33b577f0978378", + "sha256:49aaf4546f6023c44d7e7136be84a03a4237f0b2b5fb2b17c3e3770a758fc1a0", + "sha256:49e0e3faf3070abdf71a5c80a97c1afc059b4f45a5aa62de0c2ca0444b51669b", + "sha256:49f9da0d6cd17b600a178439d7d2d57c5ef01f816b1e0e875e8e8b3b42db2693", + "sha256:4a8c3cc4f9dfc33220246760358c8265dad6e1104f25f0077bbca692d616d358", + "sha256:4d36081c0b1c12ea0ed62c202046dca11438bee48dd5240b7c8de8da62c620e9", + "sha256:4edcd0bf70087b244ba77038db23cd98a1ace2f91b4a3ecef22036314d77ac23", + "sha256:554313db34d63eac3b3f42986aa9efddd1a481169c12b7be1e7512edebff8eaf", + "sha256:5675e9d8eeef0aa06093c1ff898413ade042d73dc920a03e8cea2fb68f62445a", + "sha256:60848ab779195b72382841fc3fa4f71698a98d9589b0a081a9399904487b5832", + "sha256:66e5dc13bfb17cd6ee764fc96ccafd6e405daa846a42baab81f4c60e15650414", + "sha256:6779105d2fcb7fcf794a6a2a233787f6bbd4731227333a072d8513b252ed374f", + "sha256:6ad331349b0b9ca6da86064a3599c425c7a21cd41616e175ddba0866da32df48", + "sha256:6f0a0b41dd05eefab547576bed0cf066595f3b20b083956b1405a6f17d1be6ad", + "sha256:73a8a4653f2e809049999d63530180d7b5a344b23a793502413ad1ecea9a0290", + "sha256:778331444917108fa8441f59af45886270d33ce8a23bfc4f9b192c0b2ecef1b3", + "sha256:7cb98be113911cb0ad09e5523d0e2a926c09a465c9abb0784c9269efe4f95917", + "sha256:7d74beca677623481810c7052926365d5f07393c72cbf62d6cce29991b676402", + "sha256:7f2398361508c560d0bf1773af19e9fe644e218f2a814a02210ac2c97ad70db0", + "sha256:8434dcdd347459f9fd9c526117c01fe7ca7b016b6008dddc3c13471098f4f0dc", + "sha256:8a390e56a7963e3946ff2049ee1eb218380e87c8a0e7608f7f8790ba19390867", + "sha256:92c4a4a2b1f4846cd4364855cbac83efc48ff5a7d7c06ba014c792dd96483f6f", + "sha256:9300aee2a8b5992d0f4293d88deb59c218989833e3396c824b69ba330d04a589", + "sha256:9453419ea2ab9b21d925d0fd7e3a132a178a191881fab4169b6f96e118cc25bb", + "sha256:9652e59c022e62a5b58a6f9948b104e5bb96d3b06940c6482588176f40f4914b", + "sha256:972a7833d4a1fcf7a711c939e315721a88b988553fc770a5b6a5a64bd6ebeba3", + "sha256:9c1a4393242e321e344213a90a1e3bf35d2f624aa8b8f6174d43e3c6b0e8f6eb", + "sha256:9e038c615b3906df4c3be8db16b3e24821d26c55177638ea47b3f8f73615111c", + "sha256:9e4c166f743bb42c5fcc60760fb1c3623e8fda94f6619534217b083e08644b46", + "sha256:9eb117db8d7ed733a7317c4215c35993b815bf6aeab67523f1f11e108c040672", + "sha256:9eb442a2442ce417801c912df68e1f6ccfcd41577ae7274953ab3ad24ef7d82c", + "sha256:a3cd18e03b0ee54ea4319cdcce48357719ea487b53f92a469ba8ca8e39df285e", + "sha256:a8617625369d2d03766413bff9e64310feafc9fc4f0ad2b902136f1a5cd8c6b0", + "sha256:a970a2e6d5281d56cacf3dc82081c95c1f4da5a559e52469287457811db6a79b", + "sha256:aad7405c033d32c751d98d3a65801e2797ae77fac284a539f6c3a3e13005edc4", + "sha256:adcb3332979cbc941b8fff07181f06d2b608625edc0a4d8bc3ffc0be414ad0c4", + "sha256:af9c7e6669c4d0ad7362f79cb2ab6784d71147503e62b57e3d95c4a0f222c01c", + "sha256:b01fda3e95d07a6148702a641e5e293b6da7863f8bc9b967f62db9461330562c", + "sha256:b8d940fd28eb34a7084877747a60873956893e377f15a32ad445fe66c972c3b8", + "sha256:bccb3e88ec26ffa90f72229f983d3a5d1155e41a1171190fa723d4135523585b", + "sha256:bcedf4cae0d47839fee7de344f96b5694ca53c786f28b5f773d4f0b265a159eb", + "sha256:be893258d5b68dd3a8cba8deb35dc6411db844a9d35268a8d3793b9d9a256f80", + "sha256:c0521e0f07cb56415fdb3aae0bbd8701eb31a9dfef47bb57206075a0584ab2a2", + "sha256:c594642d6b13d225e10df5c16ee15b3398e21a35ecd6aee824f107a625690374", + "sha256:c87c22bd6a987aca976e3d3e23806d17f65426191db36d40da4ae16a6a494cbc", + "sha256:c9ac1c2678abf9270e7228133e5b77c6c3c930ad33a3c1dfbdd76ff2c33b7b50", + "sha256:d0e5ffc763678d48ecc8da836f2ae2dd1b6eb2d27a48671066f91694e575173c", + "sha256:d0f402e787e6e7ee7876c8b05e2fe6464820d9f35ba3f172e95b5f8b699f6c7f", + "sha256:d222a9ed082cd9f38b58923775152003765016342a12f08f8c123bf893461f28", + "sha256:d94245caa3c61f760c4ce4953cfa76e7739b6f2cbfc94cc46fff6c050c2390c5", + "sha256:de9a2792612ec6def556d1dc621fd6b2073aff015d64fba9f3e53349ad292734", + "sha256:e2f5a398b5e77bb01b23d92872255e1bcb3c0c719a3be40b8df146570fe7781a", + "sha256:e8dd53a8706b15bc0e34f00e6150fbefb35d2fd9235d095b4f83b3c5ed4fa11d", + "sha256:e9eb3cff1b7d71aa50c89a0536f469cb8d6dcdd585d8f14fb8500d822f3bdee4", + "sha256:ed628c1431100b0b65387419551e822987396bee3c088a15d68446d92f554e0c", + "sha256:ef7938a78447174e2616be223f496ddccdbf7854f7bf2ce716dbccd958cc7d13", + "sha256:f1c70249b15e4ce1a7d5340c97670a95f305ca79f376887759b43bb33288c973", + "sha256:f3c7363a8cb8c5238878ec96c5eb0fc5ca2cb11fc0c7d2379863d342c6ee367a", + "sha256:fbbcc6b0639aa09b9649f36f1bcb347b19403fe44109948392fbb5ea69e48c3e", + "sha256:febffa5b1eda6622d44b245b0685aff6fb555ce0ed734e2d7b1c3acd018a2cff", + "sha256:ff836cd4041e16003549449cc0a5e372f6b6f871eb89007ab0ee18fb2800fded" ], "index": "pypi", - "version": "==3.18.3" + "version": "==3.19.2" }, - "six": { + "urllib3": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", + "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" + "markers": "python_version >= '3.7'", + "version": "==2.0.7" }, - "urllib3": { + "werkzeug": { "hashes": [ - "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", - "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0", + "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.14" + "markers": "python_version >= '3.8'", + "version": "==3.0.0" + } + }, + "develop": { + "black": { + "hashes": [ + "sha256:0e232f24a337fed7a82c1185ae46c56c4a6167fb0fe37411b43e876892c76699", + "sha256:30b78ac9b54cf87bcb9910ee3d499d2bc893afd52495066c49d9ee6b21eee06e", + "sha256:31946ec6f9c54ed7ba431c38bc81d758970dd734b96b8e8c2b17a367d7908171", + "sha256:31b9f87b277a68d0e99d2905edae08807c007973eaa609da5f0c62def6b7c0bd", + "sha256:47c4510f70ec2e8f9135ba490811c071419c115e46f143e4dce2ac45afdcf4c9", + "sha256:481167c60cd3e6b1cb8ef2aac0f76165843a374346aeeaa9d86765fe0dd0318b", + "sha256:6901631b937acbee93c75537e74f69463adaf34379a04eef32425b88aca88a23", + "sha256:76baba9281e5e5b230c9b7f83a96daf67a95e919c2dfc240d9e6295eab7b9204", + "sha256:7fb5fc36bb65160df21498d5a3dd330af8b6401be3f25af60c6ebfe23753f747", + "sha256:960c21555be135c4b37b7018d63d6248bdae8514e5c55b71e994ad37407f45b8", + "sha256:a3c2ddb35f71976a4cfeca558848c2f2f89abc86b06e8dd89b5a65c1e6c0f22a", + "sha256:c870bee76ad5f7a5ea7bd01dc646028d05568d33b0b09b7ecfc8ec0da3f3f39c", + "sha256:d3d9129ce05b0829730323bdcb00f928a448a124af5acf90aa94d9aba6969604", + "sha256:db451a3363b1e765c172c3fd86213a4ce63fb8524c938ebd82919bf2a6e28c6a", + "sha256:e223b731a0e025f8ef427dd79d8cd69c167da807f5710add30cdf131f13dd62e", + "sha256:f20ff03f3fdd2fd4460b4f631663813e57dc277e37fb216463f3b907aa5a9bdd", + "sha256:f74892b4b836e5162aa0452393112a574dac85e13902c57dfbaaf388e4eda37c", + "sha256:f8dc7d50d94063cdfd13c82368afd8588bac4ce360e4224ac399e769d6704e98" + ], + "index": "pypi", + "version": "==23.10.0" }, - "werkzeug": { + "click": { "hashes": [ - "sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe", - "sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], "markers": "python_version >= '3.7'", - "version": "==2.2.3" + "version": "==8.1.7" + }, + "mypy-extensions": { + "hashes": [ + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.0" + }, + "packaging": { + "hashes": [ + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + ], + "markers": "python_version >= '3.7'", + "version": "==23.2" + }, + "pathspec": { + "hashes": [ + "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", + "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" + ], + "markers": "python_version >= '3.7'", + "version": "==0.11.2" + }, + "platformdirs": { + "hashes": [ + "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3", + "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e" + ], + "markers": "python_version >= '3.7'", + "version": "==3.11.0" } - }, - "develop": {} + } } diff --git a/src/server/main.py b/src/server/main.py index c13832c..2b60fbc 100755 --- a/src/server/main.py +++ b/src/server/main.py @@ -38,8 +38,8 @@ def _quit(): registered_modules.add(manager) # Blueprints registration - for blueprint in blueprints: + for name, blueprint in blueprints.items(): app.register_blueprint( - blueprint(BlueprintInit(manager)), url_prefix="/api/core" + blueprint(BlueprintInit(manager)), url_prefix=f"/api/core/{name}" ) app.run(host="0.0.0.0", debug=True, use_reloader=False) diff --git a/src/server/modules/blueprints/__init__.py b/src/server/modules/blueprints/__init__.py index 805a70d..bf77f95 100644 --- a/src/server/modules/blueprints/__init__.py +++ b/src/server/modules/blueprints/__init__.py @@ -1,3 +1,9 @@ +from .attributes import attributes_blueprint from .handlers import handlers_blueprint +from .widgets import widgets_blueprint -blueprints = [handlers_blueprint] +blueprints = { + "attributes": attributes_blueprint, + "handlers": handlers_blueprint, + "widgets": widgets_blueprint, +} diff --git a/src/server/modules/blueprints/attributes.py b/src/server/modules/blueprints/attributes.py new file mode 100644 index 0000000..ead8c03 --- /dev/null +++ b/src/server/modules/blueprints/attributes.py @@ -0,0 +1,26 @@ +from flask import Blueprint +from pony import orm + +from modules.blueprints.enums import StatusCode +from modules.models.attribute import Attribute +from modules.tools import BlueprintInit, this_name + + +def attributes_blueprint(_init: BlueprintInit): + blueprint = Blueprint(this_name(), __name__) + + @blueprint.route("/") + @orm.db_session + def attributes(): + return [ + { + "id": attribute.id, + "name": attribute.name, + "handler": attribute.handler.id, + "enabled": attribute.enabled, + "unit": attribute.unit, + } + for attribute in Attribute.select() + ], StatusCode.OK + + return blueprint diff --git a/src/server/modules/blueprints/handlers.py b/src/server/modules/blueprints/handlers.py index 05cd71c..cff7f36 100644 --- a/src/server/modules/blueprints/handlers.py +++ b/src/server/modules/blueprints/handlers.py @@ -23,7 +23,7 @@ def get_available_handlers(): for handler in available_handlers ], StatusCode.OK - @blueprint.route("/handlers") + @blueprint.route("/") @orm.db_session def handlers(): return [ @@ -38,7 +38,7 @@ def handlers(): for h_id, handler in _init.manager.registered_handlers.items() ], StatusCode.OK - @blueprint.route("/handlers/", methods=["GET"]) + @blueprint.route("/", methods=["GET"]) def handler_info(handler_id): handler = _init.manager.registered_handlers.get(handler_id, None) if handler: diff --git a/src/server/modules/blueprints/widgets.py b/src/server/modules/blueprints/widgets.py new file mode 100644 index 0000000..3746a87 --- /dev/null +++ b/src/server/modules/blueprints/widgets.py @@ -0,0 +1,30 @@ +from flask import Blueprint +from pony import orm + +from modules.blueprints.enums import StatusCode +from modules.models.widget_tile import WidgetTile +from modules.tools import BlueprintInit, this_name + + +def widgets_blueprint(_init: BlueprintInit): + blueprint = Blueprint(this_name(), __name__) + + @blueprint.route("/") + @orm.db_session + def widget_tiles(): + return [ + { + "id": tile.id, + "name": tile.name, + "handler": tile.handler.id, + "icon": tile.icon, + "attribute": tile.attribute.name, + "unit": tile.attribute.unit, + "value": _init.manager.registered_attributes.get(tile.handler.id, {}) + .get(tile.attribute.name, {}) + .get_current_value(), + } + for tile in WidgetTile.select() + ], StatusCode.OK + + return blueprint diff --git a/src/server/modules/models/attribute.py b/src/server/modules/models/attribute.py index 195b870..40a19c8 100644 --- a/src/server/modules/models/attribute.py +++ b/src/server/modules/models/attribute.py @@ -8,10 +8,11 @@ class Attribute(db.Entity): name = orm.Required(str, index=True) handler = orm.Required("Handler") - # stats_to_store = orm.Set(str) data_units = orm.Set("DataUnit") data_stats = orm.Set("DataStat") + widgets = orm.Set("WidgetTile") enabled = orm.Required(bool) + unit = orm.Optional(str) # def to_json(self): # return {} diff --git a/src/server/modules/models/handler.py b/src/server/modules/models/handler.py index 947f771..461aaa4 100644 --- a/src/server/modules/models/handler.py +++ b/src/server/modules/models/handler.py @@ -5,6 +5,7 @@ from modules.models.attribute import Attribute from modules.models.data_unit import DataUnit from modules.models.data_stat import DataStat +from modules.models.widget_tile import WidgetTile class Handler(db.Entity): @@ -16,6 +17,7 @@ class Handler(db.Entity): data = orm.Set(DataUnit) stats = orm.Set(DataStat) attributes = orm.Set(Attribute) + widgets = orm.Set(WidgetTile) # events = orm.Set("EventUnit") @@ -26,7 +28,12 @@ def get_all() -> list[Handler]: def add(handler: AbstractHandler, h_id=0) -> Handler: """Adds handler to database""" - return Handler(id=h_id if h_id else None, type=handler.type, options=handler.options, enabled=True) + return Handler( + id=h_id if h_id else None, + type=handler.type, + options=handler.options, + enabled=True, + ) def get_by_id(h_id) -> Handler | None: diff --git a/src/server/modules/models/widget_tile.py b/src/server/modules/models/widget_tile.py new file mode 100644 index 0000000..c2a8b3b --- /dev/null +++ b/src/server/modules/models/widget_tile.py @@ -0,0 +1,22 @@ +from pony import orm + +from modules.database import db + + +class WidgetTile(db.Entity): + """Database entity representing widget tile""" + + name = orm.Optional(str, index=True) + handler = orm.Required("Handler") + icon = orm.Optional(str) + attribute = orm.Required("Attribute") + + +def get_by_id(w_id) -> WidgetTile | None: + """Returns widget tile by id""" + return WidgetTile.get(id=w_id) + + +def get_all() -> list[WidgetTile]: + """Returns all widget tiles""" + return list(WidgetTile.select()) From 5b99c33cb5da3a684b89d4aa7a0057748ce6ae0e Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Mon, 23 Oct 2023 22:16:31 +0200 Subject: [PATCH 003/105] Add switch widgets --- src/client/pages/dashboard.tsx | 24 +++++-- src/client/public/icons/cosmic/lightbulb.svg | 3 + src/client/src/bridge/endpoints.ts | 3 +- .../src/bridge/models/WidgetSwitchModel.ts | 11 ++++ .../{WidgetModel.ts => WidgetTileModel.ts} | 3 +- src/client/src/bridge/models/index.ts | 2 + src/client/src/bridge/modules/widgets.ts | 10 ++- .../AttributeWidget/AttributeWidget.tsx | 4 +- .../Widget/SwitchWidget/SwitchWidget.scss | 65 +++++++++++++++++++ .../Widget/SwitchWidget/SwitchWidget.tsx | 26 ++++++++ .../components/Widget/SwitchWidget/index.ts | 1 + src/client/src/components/Widget/Widget.scss | 1 + src/client/src/components/Widget/index.ts | 1 + .../src/layouts/NavbarLayout/NavbarLayout.tsx | 2 +- src/server/modules/blueprints/widgets.py | 43 ++++++++++-- src/server/modules/models/action.py | 12 ++++ src/server/modules/models/attribute.py | 3 +- src/server/modules/models/handler.py | 1 - src/server/modules/models/widget_switch.py | 15 +++++ src/server/modules/models/widget_tile.py | 1 - 20 files changed, 209 insertions(+), 22 deletions(-) create mode 100644 src/client/public/icons/cosmic/lightbulb.svg create mode 100644 src/client/src/bridge/models/WidgetSwitchModel.ts rename src/client/src/bridge/models/{WidgetModel.ts => WidgetTileModel.ts} (77%) create mode 100644 src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss create mode 100644 src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx create mode 100644 src/client/src/components/Widget/SwitchWidget/index.ts create mode 100644 src/server/modules/models/action.py create mode 100644 src/server/modules/models/widget_switch.py diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx index f6142d6..6018c63 100644 --- a/src/client/pages/dashboard.tsx +++ b/src/client/pages/dashboard.tsx @@ -1,25 +1,37 @@ -import { useWidgets } from "../src/bridge"; +import { useWidgetSwitches, useWidgetTiles } from "../src/bridge"; import { FlexLayout, Header, HeaderSize, Loc } from "../src/components"; -import { AttributeWidget } from "../src/components/Widget"; +import { AttributeWidget, SwitchWidget } from "../src/components/Widget"; import { NavbarLayout } from "../src/layouts"; import { GLOBAL_LOC_KEYS } from "../src/utils"; export const Dashboard = () => { - const { data: widgets } = useWidgets(); + const { data: tiles } = useWidgetTiles(); + const { data: switches } = useWidgetSwitches(); return (
{GLOBAL_LOC_KEYS.DASHBOARD}
- {widgets?.map((widget) => ( + {tiles?.map((widget) => ( + ))} + + + {switches?.map((widget) => ( + ))} diff --git a/src/client/public/icons/cosmic/lightbulb.svg b/src/client/public/icons/cosmic/lightbulb.svg new file mode 100644 index 0000000..672962f --- /dev/null +++ b/src/client/public/icons/cosmic/lightbulb.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts index b6936bf..d2ca5e8 100644 --- a/src/client/src/bridge/endpoints.ts +++ b/src/client/src/bridge/endpoints.ts @@ -2,6 +2,7 @@ export enum Endpoint { addHandler = "core/handlers/add-handler", availableHandlers = "core/handlers/available-handlers", handlers = "core/handlers", - widgets = "core/widgets", + widgetTiles = "core/widgets/tiles", + widgetSwitches = "core/widgets/switches", } export const getApiEndpoint = (endpoint: Endpoint) => `/api/${endpoint}`; diff --git a/src/client/src/bridge/models/WidgetSwitchModel.ts b/src/client/src/bridge/models/WidgetSwitchModel.ts new file mode 100644 index 0000000..72488e6 --- /dev/null +++ b/src/client/src/bridge/models/WidgetSwitchModel.ts @@ -0,0 +1,11 @@ +import { IconName } from "../../components"; + +export interface WidgetSwitchModel { + id: number; + name: string; + description: string; + handler: number; + icon: IconName; + attribute: string; + active: boolean; +} diff --git a/src/client/src/bridge/models/WidgetModel.ts b/src/client/src/bridge/models/WidgetTileModel.ts similarity index 77% rename from src/client/src/bridge/models/WidgetModel.ts rename to src/client/src/bridge/models/WidgetTileModel.ts index 64ded30..f4e9738 100644 --- a/src/client/src/bridge/models/WidgetModel.ts +++ b/src/client/src/bridge/models/WidgetTileModel.ts @@ -1,8 +1,9 @@ import { IconName } from "../../components"; -export interface WidgetModel { +export interface WidgetTileModel { id: number; name: string; + description: string; handler: number; icon: IconName; attribute: string; diff --git a/src/client/src/bridge/models/index.ts b/src/client/src/bridge/models/index.ts index b79d13c..acd113c 100644 --- a/src/client/src/bridge/models/index.ts +++ b/src/client/src/bridge/models/index.ts @@ -1,2 +1,4 @@ export * from "./HandlerModel"; export * from "./NewHandlerModel"; +export * from "./WidgetSwitchModel"; +export * from "./WidgetTileModel"; diff --git a/src/client/src/bridge/modules/widgets.ts b/src/client/src/bridge/modules/widgets.ts index 9b0a499..84d884a 100644 --- a/src/client/src/bridge/modules/widgets.ts +++ b/src/client/src/bridge/modules/widgets.ts @@ -1,9 +1,13 @@ import useSWR from "swr"; import { Endpoint, getApiEndpoint } from "../endpoints"; -import { WidgetModel } from "../models/WidgetModel"; +import { WidgetSwitchModel, WidgetTileModel } from "../models"; import { getJson } from "../utils"; -export const useWidgets = () => { - return useSWR(getApiEndpoint(Endpoint.widgets), getJson); +export const useWidgetSwitches = () => { + return useSWR(getApiEndpoint(Endpoint.widgetSwitches), getJson); +}; + +export const useWidgetTiles = () => { + return useSWR(getApiEndpoint(Endpoint.widgetTiles), getJson); }; diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx index 7152bd9..575011d 100644 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx @@ -8,9 +8,9 @@ const bem = bemClassNames("attribute-widget"); export type AttributeWidgetProps = { title: string; description: string; - value: string | number | boolean; - unit: string; icon: IconName; + unit: string; + value: string | number | boolean; }; export const AttributeWidget: FC = ({ title, description, value, unit, icon }) => { diff --git a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss new file mode 100644 index 0000000..701576f --- /dev/null +++ b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss @@ -0,0 +1,65 @@ +.switch-widget { + background: $white; + padding: 10px 12px; + border-radius: 10px; + display: flex; + gap: 10px; + align-items: center; + flex-grow: 1; + flex-wrap: wrap; + max-width: 400px; + cursor: pointer; + transition: all 0.2s ease-in-out; + + &__text-body { + flex-grow: 1; + } + + &__title { + font-weight: bold; + } + + &__description { + font-size: 13px; + } + + $this: &; + + &__toggle { + width: 60px; + height: 33px; + background: $primary-background; + border-radius: 50px; + position: relative; + transition: all 0.2s ease-in-out; + + &::after { + content: ''; + display: block; + position: relative; + width: 25px; + height: 25px; + top: 4px; + left: 4px; + background: $grey-ddd; + border-radius: 50%; + transition: all 0.2s ease-in-out; + } + } + + &--active { + background: #5278FF; + color: $white; + + #{$this} { + &__toggle { + background: #333C62; + } + + &__toggle::after { + background: $white; + left: 30px; + } + } + } +} diff --git a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx new file mode 100644 index 0000000..3ed836e --- /dev/null +++ b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx @@ -0,0 +1,26 @@ +import { FC } from "react"; + +import { bemClassNames } from "../../../utils"; +import { Icon, IconName } from "../../Icon"; + +const bem = bemClassNames("switch-widget"); + +export type SwitchWidget = { + title: string; + description: string; + icon: IconName; + active: boolean; +}; + +export const SwitchWidget: FC = ({ title, description, active, icon }) => { + return ( +
+ +
+
{title}
+
{description}
+
+
+
+ ); +}; diff --git a/src/client/src/components/Widget/SwitchWidget/index.ts b/src/client/src/components/Widget/SwitchWidget/index.ts new file mode 100644 index 0000000..6903088 --- /dev/null +++ b/src/client/src/components/Widget/SwitchWidget/index.ts @@ -0,0 +1 @@ +export * from "./SwitchWidget"; diff --git a/src/client/src/components/Widget/Widget.scss b/src/client/src/components/Widget/Widget.scss index 430d9c2..7d7d33f 100644 --- a/src/client/src/components/Widget/Widget.scss +++ b/src/client/src/components/Widget/Widget.scss @@ -1 +1,2 @@ @import "./AttributeWidget/AttributeWidget"; +@import "./SwitchWidget/SwitchWidget"; diff --git a/src/client/src/components/Widget/index.ts b/src/client/src/components/Widget/index.ts index 1404dd0..e751a46 100644 --- a/src/client/src/components/Widget/index.ts +++ b/src/client/src/components/Widget/index.ts @@ -1 +1,2 @@ export * from "./AttributeWidget"; +export * from "./SwitchWidget"; diff --git a/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx b/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx index ce0238c..34303df 100644 --- a/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx +++ b/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx @@ -28,7 +28,7 @@ export const NavbarLayout: FunctionComponent = ({ children }) ))} - + {children} diff --git a/src/server/modules/blueprints/widgets.py b/src/server/modules/blueprints/widgets.py index 3746a87..42c4bb7 100644 --- a/src/server/modules/blueprints/widgets.py +++ b/src/server/modules/blueprints/widgets.py @@ -2,6 +2,7 @@ from pony import orm from modules.blueprints.enums import StatusCode +from modules.models.widget_switch import WidgetSwitch from modules.models.widget_tile import WidgetTile from modules.tools import BlueprintInit, this_name @@ -9,22 +10,54 @@ def widgets_blueprint(_init: BlueprintInit): blueprint = Blueprint(this_name(), __name__) - @blueprint.route("/") + def get_handler(widget): + return _init.manager.registered_handlers.get(widget.attribute.handler.id, None) + + def get_attribute(widget): + return _init.manager.registered_attributes.get(widget.attribute.handler.id, {}).get(widget.attribute.name) + + def evaluate_attribute(widget): + return ( + ( + get_attribute(widget).get_current_value() == widget.attribute_compare + if widget.attribute_compare + else bool(get_attribute(widget).get_current_value()) + ) + if get_attribute(widget) + else False + ) + + @blueprint.route("/tiles") @orm.db_session def widget_tiles(): return [ { "id": tile.id, "name": tile.name, - "handler": tile.handler.id, + "description": get_handler(tile).get_name(), + "handler": tile.attribute.handler.id, "icon": tile.icon, "attribute": tile.attribute.name, "unit": tile.attribute.unit, - "value": _init.manager.registered_attributes.get(tile.handler.id, {}) - .get(tile.attribute.name, {}) - .get_current_value(), + "value": get_attribute(tile).get_current_value() if get_attribute(tile) else None, } for tile in WidgetTile.select() ], StatusCode.OK + @blueprint.route("/switches") + @orm.db_session + def widget_switches(): + return [ + { + "id": switch.id, + "name": switch.name, + "description": get_handler(switch).get_name(), + "handler": switch.attribute.handler.id, + "icon": switch.icon, + "attribute": switch.attribute.name, + "active": evaluate_attribute(switch), + } + for switch in WidgetSwitch.select() + ], StatusCode.OK + return blueprint diff --git a/src/server/modules/models/action.py b/src/server/modules/models/action.py new file mode 100644 index 0000000..2bc4c6f --- /dev/null +++ b/src/server/modules/models/action.py @@ -0,0 +1,12 @@ +from pony import orm + +from modules.database import db + + +class Action(db.Entity): + """Database entity representing action configuration""" + + name = orm.Required(str, index=True) + message = orm.Required(str) + widget_switches_on = orm.Set("WidgetSwitch", reverse="action_on") + widget_switches_off = orm.Set("WidgetSwitch", reverse="action_off") diff --git a/src/server/modules/models/attribute.py b/src/server/modules/models/attribute.py index 40a19c8..86edde5 100644 --- a/src/server/modules/models/attribute.py +++ b/src/server/modules/models/attribute.py @@ -10,7 +10,8 @@ class Attribute(db.Entity): handler = orm.Required("Handler") data_units = orm.Set("DataUnit") data_stats = orm.Set("DataStat") - widgets = orm.Set("WidgetTile") + widget_tiles = orm.Set("WidgetTile") + widget_switches = orm.Set("WidgetSwitch") enabled = orm.Required(bool) unit = orm.Optional(str) diff --git a/src/server/modules/models/handler.py b/src/server/modules/models/handler.py index 461aaa4..c299ad9 100644 --- a/src/server/modules/models/handler.py +++ b/src/server/modules/models/handler.py @@ -17,7 +17,6 @@ class Handler(db.Entity): data = orm.Set(DataUnit) stats = orm.Set(DataStat) attributes = orm.Set(Attribute) - widgets = orm.Set(WidgetTile) # events = orm.Set("EventUnit") diff --git a/src/server/modules/models/widget_switch.py b/src/server/modules/models/widget_switch.py new file mode 100644 index 0000000..cb51e25 --- /dev/null +++ b/src/server/modules/models/widget_switch.py @@ -0,0 +1,15 @@ +from pony import orm + +from modules.database import db +from modules.models.action import Action + + +class WidgetSwitch(db.Entity): + """Database entity representing widget switch""" + + name = orm.Optional(str, index=True) + icon = orm.Optional(str) + attribute = orm.Required("Attribute") + attribute_compare = orm.Optional(str, nullable=True) + action_on = orm.Optional(Action) + action_off = orm.Optional(Action) diff --git a/src/server/modules/models/widget_tile.py b/src/server/modules/models/widget_tile.py index c2a8b3b..818b6d0 100644 --- a/src/server/modules/models/widget_tile.py +++ b/src/server/modules/models/widget_tile.py @@ -7,7 +7,6 @@ class WidgetTile(db.Entity): """Database entity representing widget tile""" name = orm.Optional(str, index=True) - handler = orm.Required("Handler") icon = orm.Optional(str) attribute = orm.Required("Attribute") From 66c578970c0db7784b2178b1a94a75803364a5f1 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Tue, 24 Oct 2023 21:24:47 +0200 Subject: [PATCH 004/105] Implement switch widgets logic --- src/client/pages/dashboard.tsx | 3 ++ src/client/src/bridge/endpoints.ts | 1 + src/client/src/bridge/models/Widget.ts | 11 ++++++++ .../src/bridge/models/WidgetSwitchModel.ts | 10 ++----- .../src/bridge/models/WidgetTileModel.ts | 10 ++----- src/client/src/bridge/modules/widgets.ts | 16 ++++++++++- src/client/src/bridge/utils.ts | 2 +- .../AttributeWidget/AttributeWidget.scss | 14 ++++++++++ .../AttributeWidget/AttributeWidget.tsx | 20 +++++++++---- .../Widget/SwitchWidget/SwitchWidget.tsx | 17 +++++++++-- src/server/main.py | 4 +-- src/server/modules/attribute_manager.py | 23 +++++++-------- src/server/modules/blueprints/handlers.py | 2 +- src/server/modules/blueprints/widgets.py | 25 ++++++++++++++++- src/server/modules/handler_manager.py | 8 ++---- src/server/modules/handlers/http_handler.py | 28 ++++++++++++++++--- 16 files changed, 141 insertions(+), 53 deletions(-) create mode 100644 src/client/src/bridge/models/Widget.ts diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx index 6018c63..c03c529 100644 --- a/src/client/pages/dashboard.tsx +++ b/src/client/pages/dashboard.tsx @@ -19,6 +19,7 @@ export const Dashboard = () => { title={widget.name} description={widget.description} icon={widget.icon} + status={widget.status} unit={widget.unit} value={widget.value} /> @@ -28,9 +29,11 @@ export const Dashboard = () => { {switches?.map((widget) => ( ))} diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts index d2ca5e8..604c65b 100644 --- a/src/client/src/bridge/endpoints.ts +++ b/src/client/src/bridge/endpoints.ts @@ -4,5 +4,6 @@ export enum Endpoint { handlers = "core/handlers", widgetTiles = "core/widgets/tiles", widgetSwitches = "core/widgets/switches", + widgetSwitchToggle = "core/widgets/switches/toggle", } export const getApiEndpoint = (endpoint: Endpoint) => `/api/${endpoint}`; diff --git a/src/client/src/bridge/models/Widget.ts b/src/client/src/bridge/models/Widget.ts new file mode 100644 index 0000000..24c2eef --- /dev/null +++ b/src/client/src/bridge/models/Widget.ts @@ -0,0 +1,11 @@ +import { IconName } from "../../components"; + +export interface Widget { + id: number; + name: string; + description: string; + handler: number; + status: number; + icon: IconName; + attribute: string; +} diff --git a/src/client/src/bridge/models/WidgetSwitchModel.ts b/src/client/src/bridge/models/WidgetSwitchModel.ts index 72488e6..6649722 100644 --- a/src/client/src/bridge/models/WidgetSwitchModel.ts +++ b/src/client/src/bridge/models/WidgetSwitchModel.ts @@ -1,11 +1,5 @@ -import { IconName } from "../../components"; +import { Widget } from "./Widget"; -export interface WidgetSwitchModel { - id: number; - name: string; - description: string; - handler: number; - icon: IconName; - attribute: string; +export interface WidgetSwitchModel extends Widget { active: boolean; } diff --git a/src/client/src/bridge/models/WidgetTileModel.ts b/src/client/src/bridge/models/WidgetTileModel.ts index f4e9738..136a7c9 100644 --- a/src/client/src/bridge/models/WidgetTileModel.ts +++ b/src/client/src/bridge/models/WidgetTileModel.ts @@ -1,12 +1,6 @@ -import { IconName } from "../../components"; +import { Widget } from "./Widget"; -export interface WidgetTileModel { - id: number; - name: string; - description: string; - handler: number; - icon: IconName; - attribute: string; +export interface WidgetTileModel extends Widget { unit: string; value: string | number | boolean; } diff --git a/src/client/src/bridge/modules/widgets.ts b/src/client/src/bridge/modules/widgets.ts index 84d884a..8570ddd 100644 --- a/src/client/src/bridge/modules/widgets.ts +++ b/src/client/src/bridge/modules/widgets.ts @@ -2,7 +2,7 @@ import useSWR from "swr"; import { Endpoint, getApiEndpoint } from "../endpoints"; import { WidgetSwitchModel, WidgetTileModel } from "../models"; -import { getJson } from "../utils"; +import { getJson, postJson } from "../utils"; export const useWidgetSwitches = () => { return useSWR(getApiEndpoint(Endpoint.widgetSwitches), getJson); @@ -11,3 +11,17 @@ export const useWidgetSwitches = () => { export const useWidgetTiles = () => { return useSWR(getApiEndpoint(Endpoint.widgetTiles), getJson); }; + +export const toggleWidgetSwitch = ( + widgetId: number, + value: boolean, + onSuccess?: () => void, + onError?: (error: any) => void, +) => { + return postJson( + getApiEndpoint(Endpoint.widgetSwitchToggle) + `/${widgetId}`, + { value }, + onSuccess, + onError, + ); +}; diff --git a/src/client/src/bridge/utils.ts b/src/client/src/bridge/utils.ts index 2f01b6d..dbbac51 100644 --- a/src/client/src/bridge/utils.ts +++ b/src/client/src/bridge/utils.ts @@ -29,7 +29,7 @@ export const postJson = ( ) => { postJsonFetcher(key, payload) .then((response) => { - if (response.status === 201) { + if (response.ok) { onSuccess?.(); } }) diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss index 8664f48..14bdb4d 100644 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss @@ -9,6 +9,8 @@ flex-wrap: wrap; max-width: 400px; + $this: &; + &__text-body { flex-grow: 1; } @@ -34,4 +36,16 @@ font-weight: normal; font-size: 18px; } + + &--disabled { + color: $grey-999; + + .icon { + opacity: 0.3; + } + + #{$this}__value { + display: none; + } + } } diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx index 575011d..9a3ef52 100644 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx @@ -9,21 +9,31 @@ export type AttributeWidgetProps = { title: string; description: string; icon: IconName; + status: number; unit: string; value: string | number | boolean; }; -export const AttributeWidget: FC = ({ title, description, value, unit, icon }) => { +export const AttributeWidget: FC = ({ + title, + description, + icon, + status, + unit, + value, +}) => { return ( -
+
{title}
{description}
-
- {value} {unit} -
+ {value && ( +
+ {value} {unit} +
+ )}
); }; diff --git a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx index 3ed836e..bd5b8c5 100644 --- a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx +++ b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx @@ -1,20 +1,33 @@ import { FC } from "react"; +import { useSWRConfig } from "swr"; +import { toggleWidgetSwitch } from "../../../bridge"; +import { Endpoint, getApiEndpoint } from "../../../bridge/endpoints"; import { bemClassNames } from "../../../utils"; import { Icon, IconName } from "../../Icon"; const bem = bemClassNames("switch-widget"); export type SwitchWidget = { + id: number; title: string; description: string; icon: IconName; + status: number; active: boolean; }; -export const SwitchWidget: FC = ({ title, description, active, icon }) => { +export const SwitchWidget: FC = ({ id, title, description, icon, status, active }) => { + const { mutate } = useSWRConfig(); + + const toggleSwitch = (active: boolean) => { + toggleWidgetSwitch(id, active, () => { + mutate(getApiEndpoint(Endpoint.widgetSwitches)); + }); + }; + return ( -
+
toggleSwitch(!active)}>
{title}
diff --git a/src/server/main.py b/src/server/main.py index 2b60fbc..eb60f1e 100755 --- a/src/server/main.py +++ b/src/server/main.py @@ -39,7 +39,5 @@ def _quit(): # Blueprints registration for name, blueprint in blueprints.items(): - app.register_blueprint( - blueprint(BlueprintInit(manager)), url_prefix=f"/api/core/{name}" - ) + app.register_blueprint(blueprint(BlueprintInit(manager)), url_prefix=f"/api/core/{name}") app.run(host="0.0.0.0", debug=True, use_reloader=False) diff --git a/src/server/modules/attribute_manager.py b/src/server/modules/attribute_manager.py index 7dca9b3..7c6529f 100644 --- a/src/server/modules/attribute_manager.py +++ b/src/server/modules/attribute_manager.py @@ -45,11 +45,9 @@ def check_value_change(self, value): @orm.db_session def add_data_unit(self, value): if self.check_value_change(value): - if self.value: + if self.value is not None: print("Value changed") - data_unit_model.add( - self.handler_id, self.id, self.value, self.last_datetime - ) + data_unit_model.add(self.handler_id, self.id, self.value, self.last_datetime) self.value = value data_unit_model.add(self.handler_id, self.id, value, datetime.now()) self.check_and_add_stat_units(value) @@ -60,20 +58,19 @@ def add_data_unit(self, value): def check_and_add_stat_units(self, value): now = datetime.now() for predicate_name, stat_predicate in self.stat_predicates.items(): - if not self.stats[predicate_name]: - db_stat = data_stat_model.get_by_type_and_date( - self.handler_id, self.id, predicate_name, now.date() - ) + if self.stats[predicate_name] is None: + # If stat is not found, it may not be loaded from DB yet. Try to load it. + db_stat = data_stat_model.get_by_type_and_date(self.handler_id, self.id, predicate_name, now.date()) self.stats[predicate_name] = db_stat.value if db_stat else None - if self.stats[predicate_name] and stat_predicate(value): + if self.stats[predicate_name] is not None and stat_predicate(value): + # If stat is found in db and predicate is true, update stat in db. print("Updating", predicate_name, "stat in DB") - db_stat = data_stat_model.get_by_type_and_date( - self.handler_id, self.id, predicate_name, now.date() - ) + db_stat = data_stat_model.get_by_type_and_date(self.handler_id, self.id, predicate_name, now.date()) self.stats[predicate_name] = db_stat.value if db_stat else None db_stat.time = now.time() db_stat.value = value - elif not self.stats[predicate_name]: + elif self.stats[predicate_name] is None: + # If stat is still not in db, add it. print("Writing", predicate_name, "stat to DB") data_stat_model.add(self.handler_id, self.id, predicate_name, value) diff --git a/src/server/modules/blueprints/handlers.py b/src/server/modules/blueprints/handlers.py index cff7f36..f493621 100644 --- a/src/server/modules/blueprints/handlers.py +++ b/src/server/modules/blueprints/handlers.py @@ -38,7 +38,7 @@ def handlers(): for h_id, handler in _init.manager.registered_handlers.items() ], StatusCode.OK - @blueprint.route("/", methods=["GET"]) + @blueprint.route("/") def handler_info(handler_id): handler = _init.manager.registered_handlers.get(handler_id, None) if handler: diff --git a/src/server/modules/blueprints/widgets.py b/src/server/modules/blueprints/widgets.py index 42c4bb7..5af0b4e 100644 --- a/src/server/modules/blueprints/widgets.py +++ b/src/server/modules/blueprints/widgets.py @@ -1,4 +1,4 @@ -from flask import Blueprint +from flask import Blueprint, request from pony import orm from modules.blueprints.enums import StatusCode @@ -36,6 +36,7 @@ def widget_tiles(): "name": tile.name, "description": get_handler(tile).get_name(), "handler": tile.attribute.handler.id, + "status": 1 if get_handler(tile).is_connected() else 0, "icon": tile.icon, "attribute": tile.attribute.name, "unit": tile.attribute.unit, @@ -53,6 +54,7 @@ def widget_switches(): "name": switch.name, "description": get_handler(switch).get_name(), "handler": switch.attribute.handler.id, + "status": 1 if get_handler(switch).is_connected() else 0, "icon": switch.icon, "attribute": switch.attribute.name, "active": evaluate_attribute(switch), @@ -60,4 +62,25 @@ def widget_switches(): for switch in WidgetSwitch.select() ], StatusCode.OK + @blueprint.route("/switches/toggle/", methods=["POST"]) + @orm.db_session + def widget_switches_toggle(switch_id): + value = request.json.get("value", None) + for switch in WidgetSwitch.select(lambda s: s.id == switch_id): + handler = get_handler(switch) + if value: + handler.send_message({"label": switch.action_on.message}) + else: + handler.send_message({"label": switch.action_off.message}) + return { + "id": switch.id, + "name": switch.name, + "description": get_handler(switch).get_name(), + "handler": switch.attribute.handler.id, + "icon": switch.icon, + "attribute": switch.attribute.name, + "active": evaluate_attribute(switch), + }, StatusCode.OK + return {"status": "not found"}, StatusCode.NOT_FOUND + return blueprint diff --git a/src/server/modules/handler_manager.py b/src/server/modules/handler_manager.py index a02592d..14a5f9a 100644 --- a/src/server/modules/handler_manager.py +++ b/src/server/modules/handler_manager.py @@ -59,9 +59,7 @@ def register_attribute(self, db_attribute): handler_id = db_attribute.handler.id if handler_id not in self.registered_attributes: self.registered_attributes[handler_id] = {} - self.registered_attributes[handler_id][db_attribute.name] = AttributeManager( - db_attribute - ) + self.registered_attributes[handler_id][db_attribute.name] = AttributeManager(db_attribute) def process_message(self, handler_id: AbstractHandler, message): linearized_json = linearize(message) @@ -71,9 +69,7 @@ def process_message(self, handler_id: AbstractHandler, message): for attribute in self.registered_attributes.get(handler_id, []): print(attribute, linearized_json[attribute]) if attribute in linearized_json: - self.registered_attributes.get(handler_id).get(attribute).add_data_unit( - linearized_json.get(attribute) - ) + self.registered_attributes.get(handler_id).get(attribute).add_data_unit(linearized_json.get(attribute)) def exit(self): for handler in self.registered_handlers: diff --git a/src/server/modules/handlers/http_handler.py b/src/server/modules/handlers/http_handler.py index e62ef53..b7a67c8 100644 --- a/src/server/modules/handlers/http_handler.py +++ b/src/server/modules/handlers/http_handler.py @@ -23,6 +23,7 @@ def _fetcher(self): try: response = get(self.get_url(), timeout=self.get_config_option("timeout")) if response.status_code == 200: + self.last_response = response self.add_message(response.json()) if not self.success: pass @@ -102,6 +103,7 @@ def __init__(self, settings): self.log = Logger(f"{self.name} {self.get_url()}") self.success = False self.active = True + self.last_response = None # self.add_changed("handlers") Thread(target=self._fetcher).start() @@ -122,14 +124,32 @@ def send_message(self, message): try: args = {} index = 0 - for arg in message.json()["payload"]: - args[f"arg{index}"] = arg - index += 1 + # for arg in message.json()["payload"]: + # args[f"arg{index}"] = arg + # index += 1 base_url = self.get_base_url() - target = f"{base_url}{'/' if base_url[-1] != '/' else ''}{message.get_label()}" + # TODO: Implement proper message class? + target = f"{base_url}{'/' if base_url[-1] != '/' else ''}{message.get('label', None)}" response = get(target, params=args, timeout=self.get_config_option("timeout")) # TODO: Maybe use response.ok instead? if response.status_code: + if self.last_response: + response_keys = list(response.json().keys()) + response_keys.sort() + last_message_keys = list(self.last_response.json().keys()) + last_message_keys.sort() + if response_keys == last_message_keys: + self.add_message(response.json()) + else: + response = get(self.get_url(), timeout=self.get_config_option("timeout")) + if response.status_code == 200: + self.last_response = response + self.add_message(response.json()) + else: + response = get(self.get_url(), timeout=self.get_config_option("timeout")) + if response.status_code == 200: + self.last_response = response + self.add_message(response.json()) return True except ConnectionError as error: print(error) From 54ee78cf6e8e7264d37e89ddaa9d24837a0972b1 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 25 Oct 2023 20:49:56 +0200 Subject: [PATCH 005/105] Install Chart.js and update libraries --- src/client/package-lock.json | 796 +++++++++++------- src/client/package.json | 20 +- src/client/pages/inspector.tsx | 39 + .../Widget/SwitchWidget/SwitchWidget.scss | 9 + 4 files changed, 573 insertions(+), 291 deletions(-) diff --git a/src/client/package-lock.json b/src/client/package-lock.json index f79d409..efd5b70 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -9,29 +9,31 @@ "version": "0.1.0", "dependencies": { "@reduxjs/toolkit": "^1.9.7", + "chart.js": "^4.4.0", "next": "^13.5.4", "next-redux-wrapper": "^8.1.0", "react": "^18.2.0", + "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", "sass": "^1.69.2", "swr": "^2.2.4" }, "devDependencies": { - "@types/node": "20.8.4", - "@types/react": "18.2.28", - "@types/react-dom": "18.2.13", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "eslint": "8.51.0", - "eslint-config-next": "^13.5.4", - "eslint-plugin-import": "^2.28.1", + "@types/node": "20.8.9", + "@types/react": "18.2.32", + "@types/react-dom": "18.2.14", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "8.52.0", + "eslint-config-next": "^13.5.6", + "eslint-plugin-import": "^2.29.0", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", "husky": "^8.0.3", - "lint-staged": "^14.0.1", + "lint-staged": "^15.0.2", "prettier": "3.0.3", - "stylelint": "^15.10.3", + "stylelint": "^15.11.0", "stylelint-config-prettier-scss": "^1.0.0", "stylelint-config-standard-scss": "^11.0.0", "typescript": "5.2.2" @@ -369,21 +371,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -405,20 +407,25 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, "node_modules/@next/env": { "version": "13.5.4", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz", - "integrity": "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", + "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -680,12 +687,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", - "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "version": "20.8.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", + "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", "dev": true, "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "node_modules/@types/normalize-package-data": { @@ -700,9 +707,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.28.tgz", - "integrity": "sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==", + "version": "18.2.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.32.tgz", + "integrity": "sha512-F0FVIZQ1x5Gxy/VYJb7XcWvCcHR28Sjwt1dXLspdIatfPq1MVACfnBDwKe6ANLxQ64riIJooXClpUR6oxTiepg==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -710,9 +717,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.13.tgz", - "integrity": "sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", "devOptional": true, "dependencies": { "@types/react": "*" @@ -736,16 +743,16 @@ "peer": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", + "integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/type-utils": "6.9.0", + "@typescript-eslint/utils": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -771,15 +778,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", - "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", + "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", "debug": "^4.3.4" }, "engines": { @@ -799,13 +806,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", + "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -816,13 +823,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", + "integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/utils": "6.9.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -843,9 +850,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", + "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -856,13 +863,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", + "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -883,17 +890,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", + "integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", "semver": "^7.5.4" }, "engines": { @@ -908,12 +915,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", + "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.9.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -924,6 +931,12 @@ "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==", + "dev": true + }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -1413,6 +1426,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chart.js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", + "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=7" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1517,9 +1541,9 @@ "dev": true }, "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "engines": { "node": ">=16" @@ -1572,12 +1596,12 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", - "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", "dev": true, "engines": { - "node": ">=12.22" + "node": ">=12 || >=16" } }, "node_modules/css-tree": { @@ -1957,18 +1981,19 @@ } }, "node_modules/eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", - "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/js": "8.52.0", + "@humanwhocodes/config-array": "^0.11.13", "@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", @@ -2011,12 +2036,12 @@ } }, "node_modules/eslint-config-next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz", - "integrity": "sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", + "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.5.4", + "@next/eslint-plugin-next": "13.5.6", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", @@ -2108,26 +2133,26 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "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.7", + "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, @@ -2581,22 +2606,23 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/for-each": { @@ -2628,10 +2654,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", @@ -2956,6 +2985,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -3205,12 +3246,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3590,6 +3631,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "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==", + "dev": true + }, "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", @@ -3635,6 +3682,15 @@ "node": ">=4.0" } }, + "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==", + "dev": true, + "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", @@ -3694,27 +3750,27 @@ "dev": true }, "node_modules/lint-staged": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", - "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", + "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", "dev": true, "dependencies": { "chalk": "5.3.0", - "commander": "11.0.0", + "commander": "11.1.0", "debug": "4.3.4", - "execa": "7.2.0", + "execa": "8.0.1", "lilconfig": "2.1.0", - "listr2": "6.6.1", + "listr2": "7.0.2", "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", - "yaml": "2.3.1" + "yaml": "2.3.3" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=18.12.0" }, "funding": { "url": "https://opencollective.com/lint-staged" @@ -3732,10 +3788,66 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/lint-staged/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/lint-staged/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/listr2": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", - "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", + "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", @@ -3747,14 +3859,6 @@ }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } } }, "node_modules/locate-path": { @@ -4643,6 +4747,15 @@ "node": ">=0.10.0" } }, + "node_modules/react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -5514,9 +5627,9 @@ } }, "node_modules/stylelint": { - "version": "15.10.3", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz", - "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "dependencies": { "@csstools/css-parser-algorithms": "^2.3.1", @@ -5526,12 +5639,12 @@ "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.0", + "css-functions-list": "^3.2.1", "css-tree": "^2.3.1", "debug": "^4.3.4", "fast-glob": "^3.3.1", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^7.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", @@ -5540,13 +5653,13 @@ "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.28.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", "meow": "^10.1.5", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.27", + "postcss": "^8.4.28", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.0.13", @@ -5681,6 +5794,18 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.1.tgz", + "integrity": "sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==", + "dev": true, + "dependencies": { + "flat-cache": "^3.1.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/stylelint/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", @@ -5690,6 +5815,12 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true + }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -6065,9 +6196,9 @@ } }, "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "node_modules/untildify": { @@ -6309,9 +6440,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "dev": true, "engines": { "node": ">= 14" @@ -6557,18 +6688,18 @@ } }, "@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" } @@ -6580,20 +6711,25 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, "@next/env": { "version": "13.5.4", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" }, "@next/eslint-plugin-next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz", - "integrity": "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", + "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", "dev": true, "requires": { "glob": "7.1.7" @@ -6747,12 +6883,12 @@ "dev": true }, "@types/node": { - "version": "20.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", - "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "version": "20.8.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", + "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", "dev": true, "requires": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "@types/normalize-package-data": { @@ -6767,9 +6903,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/react": { - "version": "18.2.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.28.tgz", - "integrity": "sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==", + "version": "18.2.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.32.tgz", + "integrity": "sha512-F0FVIZQ1x5Gxy/VYJb7XcWvCcHR28Sjwt1dXLspdIatfPq1MVACfnBDwKe6ANLxQ64riIJooXClpUR6oxTiepg==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -6777,9 +6913,9 @@ } }, "@types/react-dom": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.13.tgz", - "integrity": "sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", "devOptional": true, "requires": { "@types/react": "*" @@ -6803,16 +6939,16 @@ "peer": true }, "@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", + "integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/type-utils": "6.9.0", + "@typescript-eslint/utils": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -6822,54 +6958,54 @@ } }, "@typescript-eslint/parser": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", - "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", + "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", + "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0" } }, "@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", + "integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/utils": "6.9.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", + "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", + "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6878,30 +7014,36 @@ } }, "@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", + "integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", + "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.9.0", "eslint-visitor-keys": "^3.4.1" } }, + "@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==", + "dev": true + }, "acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -7243,6 +7385,14 @@ "supports-color": "^7.1.0" } }, + "chart.js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", + "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", + "requires": { + "@kurkle/color": "^0.3.0" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -7320,9 +7470,9 @@ "dev": true }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true }, "concat-map": { @@ -7355,9 +7505,9 @@ } }, "css-functions-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", - "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", "dev": true }, "css-tree": { @@ -7644,18 +7794,19 @@ "dev": true }, "eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", - "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/js": "8.52.0", + "@humanwhocodes/config-array": "^0.11.13", "@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", @@ -7689,12 +7840,12 @@ } }, "eslint-config-next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz", - "integrity": "sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", + "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", "dev": true, "requires": { - "@next/eslint-plugin-next": "13.5.4", + "@next/eslint-plugin-next": "13.5.6", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", @@ -7763,26 +7914,26 @@ } }, "eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "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.7", + "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, @@ -8107,19 +8258,20 @@ } }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "for-each": { @@ -8144,9 +8296,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "function.prototype.name": { @@ -8375,6 +8527,15 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -8548,12 +8709,12 @@ "dev": true }, "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-date-object": { @@ -8800,6 +8961,12 @@ "argparse": "^2.0.1" } }, + "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==", + "dev": true + }, "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", @@ -8839,6 +9006,15 @@ "object.values": "^1.1.6" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -8889,21 +9065,21 @@ "dev": true }, "lint-staged": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", - "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", + "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", "dev": true, "requires": { "chalk": "5.3.0", - "commander": "11.0.0", + "commander": "11.1.0", "debug": "4.3.4", - "execa": "7.2.0", + "execa": "8.0.1", "lilconfig": "2.1.0", - "listr2": "6.6.1", + "listr2": "7.0.2", "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", - "yaml": "2.3.1" + "yaml": "2.3.3" }, "dependencies": { "chalk": { @@ -8911,13 +9087,48 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + } + }, + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true } } }, "listr2": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", - "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", + "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -9506,6 +9717,12 @@ "loose-envify": "^1.1.0" } }, + "react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "requires": {} + }, "react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -10098,9 +10315,9 @@ } }, "stylelint": { - "version": "15.10.3", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz", - "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "requires": { "@csstools/css-parser-algorithms": "^2.3.1", @@ -10110,12 +10327,12 @@ "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.0", + "css-functions-list": "^3.2.1", "css-tree": "^2.3.1", "debug": "^4.3.4", "fast-glob": "^3.3.1", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^7.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", @@ -10124,13 +10341,13 @@ "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.28.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", "meow": "^10.1.5", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.27", + "postcss": "^8.4.28", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.0.13", @@ -10157,12 +10374,27 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "file-entry-cache": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.1.tgz", + "integrity": "sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==", + "dev": true, + "requires": { + "flat-cache": "^3.1.1" + } + }, "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==", "dev": true }, + "known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -10493,9 +10725,9 @@ } }, "undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "untildify": { @@ -10676,9 +10908,9 @@ "dev": true }, "yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "dev": true }, "yargs-parser": { diff --git a/src/client/package.json b/src/client/package.json index a518a80..40c21a3 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -13,29 +13,31 @@ }, "dependencies": { "@reduxjs/toolkit": "^1.9.7", + "chart.js": "^4.4.0", "next": "^13.5.4", "next-redux-wrapper": "^8.1.0", "react": "^18.2.0", + "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", "sass": "^1.69.2", "swr": "^2.2.4" }, "devDependencies": { - "@types/node": "20.8.4", - "@types/react": "18.2.28", - "@types/react-dom": "18.2.13", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "eslint": "8.51.0", + "@types/node": "20.8.9", + "@types/react": "18.2.32", + "@types/react-dom": "18.2.14", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "8.52.0", "eslint-config-next": "^13.5.4", - "eslint-plugin-import": "^2.28.1", + "eslint-plugin-import": "^2.29.0", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", "husky": "^8.0.3", - "lint-staged": "^14.0.1", + "lint-staged": "^15.0.2", "prettier": "3.0.3", - "stylelint": "^15.10.3", + "stylelint": "^15.11.0", "stylelint-config-prettier-scss": "^1.0.0", "stylelint-config-standard-scss": "^11.0.0", "typescript": "5.2.2" diff --git a/src/client/pages/inspector.tsx b/src/client/pages/inspector.tsx index 9c2a00b..f567402 100644 --- a/src/client/pages/inspector.tsx +++ b/src/client/pages/inspector.tsx @@ -1,13 +1,52 @@ +import { + CategoryScale, + Chart, + Legend, + LinearScale, + LineElement, + PointElement, + Title, + Tooltip, +} from "chart.js"; +import { Line } from "react-chartjs-2"; + import { Header, HeaderSize, Loc } from "../src/components"; import { NavbarLayout } from "../src/layouts"; import { GLOBAL_LOC_KEYS } from "../src/utils"; +Chart.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend); + +export const options = { + responsive: true, +}; + +const labels = ["January", "February", "March", "April", "May", "June", "July"]; + +export const data = { + labels, + datasets: [ + { + label: "Dataset 1", + data: [1, 54, 10, 36, 98, 54, 5], + borderColor: "rgb(255, 99, 132)", + }, + { + label: "Dataset 2", + data: [12, 43, 23, 76, 65, 43, 9], + borderColor: "rgb(53, 162, 235)", + }, + ], +}; + export const App = () => { return (
{GLOBAL_LOC_KEYS.INSPECTOR}
+
+ +
); }; diff --git a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss index 701576f..c56d27a 100644 --- a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss +++ b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss @@ -62,4 +62,13 @@ } } } + + &--disabled { + cursor: not-allowed; + color: $grey-999; + + .icon { + opacity: 0.3; + } + } } From 3778b65873a6ba5d363db56df8bb2cc28f9106a4 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Fri, 17 Nov 2023 22:51:21 +0100 Subject: [PATCH 006/105] Prepare ground for attribute data charts --- src/client/package-lock.json | 52 +++++++++++++++--- src/client/package.json | 8 ++- src/client/pages/inspector.tsx | 55 +++++++++++++------ src/client/src/bridge/endpoints.ts | 6 +- .../src/bridge/models/AttributeChart.ts | 10 ++++ src/client/src/bridge/modules/charts.ts | 12 ++++ src/client/src/bridge/modules/index.ts | 1 + src/server/main.py | 4 +- src/server/modules/attribute_manager.py | 16 ++++-- src/server/modules/blueprints/__init__.py | 2 + src/server/modules/blueprints/attributes.py | 3 +- src/server/modules/blueprints/charts.py | 43 +++++++++++++++ src/server/modules/blueprints/handlers.py | 7 +-- src/server/modules/blueprints/widgets.py | 3 +- src/server/modules/handler_manager.py | 4 +- .../modules/handlers/abstract_handler.py | 2 +- src/server/modules/models/data_stat.py | 3 +- src/server/modules/models/data_unit.py | 3 +- src/server/modules/models/handler.py | 3 +- src/server/modules/models/logging_message.py | 3 +- src/server/modules/utils/__init__.py | 7 ++- src/server/modules/utils/blueprint_init.py | 9 +++ .../modules/{blueprints => utils}/enums.py | 0 .../modules/utils/int_list_converter.py | 11 ++++ .../modules/utils/modules_registrator.py | 13 +++++ src/server/modules/{ => utils}/tools.py | 24 -------- 26 files changed, 230 insertions(+), 74 deletions(-) create mode 100644 src/client/src/bridge/models/AttributeChart.ts create mode 100644 src/client/src/bridge/modules/charts.ts create mode 100644 src/server/modules/blueprints/charts.py create mode 100644 src/server/modules/utils/blueprint_init.py rename src/server/modules/{blueprints => utils}/enums.py (100%) create mode 100644 src/server/modules/utils/int_list_converter.py create mode 100644 src/server/modules/utils/modules_registrator.py rename src/server/modules/{ => utils}/tools.py (80%) diff --git a/src/client/package-lock.json b/src/client/package-lock.json index efd5b70..ef237fb 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -10,13 +10,16 @@ "dependencies": { "@reduxjs/toolkit": "^1.9.7", "chart.js": "^4.4.0", + "chartjs-adapter-date-fns": "^3.0.0", + "date-fns": "^2.30.0", "next": "^13.5.4", "next-redux-wrapper": "^8.1.0", "react": "^18.2.0", "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", "sass": "^1.69.2", - "swr": "^2.2.4" + "swr": "^2.2.4", + "typescript": "5.2.2" }, "devDependencies": { "@types/node": "20.8.9", @@ -25,7 +28,7 @@ "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", "eslint": "8.52.0", - "eslint-config-next": "^13.5.6", + "eslint-config-next": "^13.5.4", "eslint-plugin-import": "^2.29.0", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", @@ -35,8 +38,7 @@ "prettier": "3.0.3", "stylelint": "^15.11.0", "stylelint-config-prettier-scss": "^1.0.0", - "stylelint-config-standard-scss": "^11.0.0", - "typescript": "5.2.2" + "stylelint-config-standard-scss": "^11.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1437,6 +1439,15 @@ "pnpm": ">=7" } }, + "node_modules/chartjs-adapter-date-fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", + "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", + "peerDependencies": { + "chart.js": ">=2.8.0", + "date-fns": ">=2.0.0" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1640,6 +1651,21 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "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/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -6171,7 +6197,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7393,6 +7418,12 @@ "@kurkle/color": "^0.3.0" } }, + "chartjs-adapter-date-fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", + "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", + "requires": {} + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -7537,6 +7568,14 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "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==", + "requires": { + "@babel/runtime": "^7.21.0" + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -10709,8 +10748,7 @@ "typescript": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/src/client/package.json b/src/client/package.json index 40c21a3..f6381bb 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -14,13 +14,16 @@ "dependencies": { "@reduxjs/toolkit": "^1.9.7", "chart.js": "^4.4.0", + "chartjs-adapter-date-fns": "^3.0.0", + "date-fns": "^2.30.0", "next": "^13.5.4", "next-redux-wrapper": "^8.1.0", "react": "^18.2.0", "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", "sass": "^1.69.2", - "swr": "^2.2.4" + "swr": "^2.2.4", + "typescript": "5.2.2" }, "devDependencies": { "@types/node": "20.8.9", @@ -39,8 +42,7 @@ "prettier": "3.0.3", "stylelint": "^15.11.0", "stylelint-config-prettier-scss": "^1.0.0", - "stylelint-config-standard-scss": "^11.0.0", - "typescript": "5.2.2" + "stylelint-config-standard-scss": "^11.0.0" }, "lint-staged": { "*.js": [ diff --git a/src/client/pages/inspector.tsx b/src/client/pages/inspector.tsx index f567402..3f40c54 100644 --- a/src/client/pages/inspector.tsx +++ b/src/client/pages/inspector.tsx @@ -1,3 +1,5 @@ +import "chartjs-adapter-date-fns"; + import { CategoryScale, Chart, @@ -5,46 +7,63 @@ import { LinearScale, LineElement, PointElement, + TimeScale, Title, Tooltip, } from "chart.js"; import { Line } from "react-chartjs-2"; +import { useAttributeChart } from "../src/bridge"; import { Header, HeaderSize, Loc } from "../src/components"; import { NavbarLayout } from "../src/layouts"; import { GLOBAL_LOC_KEYS } from "../src/utils"; -Chart.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend); +Chart.register(CategoryScale, LinearScale, TimeScale, PointElement, LineElement, Title, Tooltip, Legend); export const options = { - responsive: true, -}; - -const labels = ["January", "February", "March", "April", "May", "June", "July"]; - -export const data = { - labels, - datasets: [ - { - label: "Dataset 1", - data: [1, 54, 10, 36, 98, 54, 5], - borderColor: "rgb(255, 99, 132)", + scales: { + x: { + type: "time", + time: { + unit: "hour", + }, + beginAtZero: true, }, - { - label: "Dataset 2", - data: [12, 43, 23, 76, 65, 43, 9], - borderColor: "rgb(53, 162, 235)", + y: { + beginAtZero: true, + stack: "main", }, - ], + }, + pointRadius: 0, + responsive: true, + maintainAspectRatio: false, }; export const App = () => { + const attributes = [2, 3]; + + const { data: attributeChartData } = useAttributeChart(attributes.sort()); + + const data = { + datasets: + attributeChartData?.map((attributeChart) => ({ + label: attributeChart.label, + data: attributeChart.data.map((data) => ({ + x: data.x * 1000, + y: data.y, + })), + borderColor: "red", + })) ?? [], + }; + console.log(attributeChartData); + return (
{GLOBAL_LOC_KEYS.INSPECTOR}
+ {/** @ts-ignore */}
diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts index 604c65b..8814d35 100644 --- a/src/client/src/bridge/endpoints.ts +++ b/src/client/src/bridge/endpoints.ts @@ -1,7 +1,11 @@ export enum Endpoint { + // Charts + attributeChart = "core/charts/attribute", + // Handlers + handlers = "core/handlers", addHandler = "core/handlers/add-handler", availableHandlers = "core/handlers/available-handlers", - handlers = "core/handlers", + // Widgets widgetTiles = "core/widgets/tiles", widgetSwitches = "core/widgets/switches", widgetSwitchToggle = "core/widgets/switches/toggle", diff --git a/src/client/src/bridge/models/AttributeChart.ts b/src/client/src/bridge/models/AttributeChart.ts new file mode 100644 index 0000000..f0d843d --- /dev/null +++ b/src/client/src/bridge/models/AttributeChart.ts @@ -0,0 +1,10 @@ +type ChartPoint = { + x: number; + y: string; +}; + +export interface AttributeChartModel { + id: number; + label: string; + data: ChartPoint[]; +} diff --git a/src/client/src/bridge/modules/charts.ts b/src/client/src/bridge/modules/charts.ts new file mode 100644 index 0000000..3a9cd1e --- /dev/null +++ b/src/client/src/bridge/modules/charts.ts @@ -0,0 +1,12 @@ +import useSWR from "swr"; + +import { Endpoint, getApiEndpoint } from "../endpoints"; +import { AttributeChartModel } from "../models/AttributeChart"; +import { getJson } from "../utils"; + +export const useAttributeChart = (attributeIds: number[]) => { + return useSWR( + `${getApiEndpoint(Endpoint.attributeChart)}/${attributeIds.join(",")}`, + getJson, + ); +}; diff --git a/src/client/src/bridge/modules/index.ts b/src/client/src/bridge/modules/index.ts index e20fd02..0db0edd 100644 --- a/src/client/src/bridge/modules/index.ts +++ b/src/client/src/bridge/modules/index.ts @@ -1,2 +1,3 @@ +export * from "./charts"; export * from "./handlers"; export * from "./widgets"; diff --git a/src/server/main.py b/src/server/main.py index eb60f1e..e97e49c 100755 --- a/src/server/main.py +++ b/src/server/main.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from signal import signal, SIGINT + from flask import Flask from flask_cors import CORS @@ -8,7 +9,7 @@ from modules.blueprints import blueprints from modules.database import init_database from modules.handler_manager import HandlerManager -from modules.tools import BlueprintInit, ModulesRegistrator +from modules.utils import BlueprintInit, ModulesRegistrator, IntListConverter registered_modules = ModulesRegistrator() @@ -29,6 +30,7 @@ def _quit(): app = Flask(__name__) app.config.from_object(ApplicationConfig) + app.url_map.converters["int_list"] = IntListConverter cors = CORS(app, supports_credentials=True) # Database initialization diff --git a/src/server/modules/attribute_manager.py b/src/server/modules/attribute_manager.py index 7c6529f..82fc649 100644 --- a/src/server/modules/attribute_manager.py +++ b/src/server/modules/attribute_manager.py @@ -1,9 +1,11 @@ from datetime import datetime + from pony import orm +from pony.orm import desc -from modules.models import data_unit as data_unit_model -from modules.models import data_stat as data_stat_model from modules.models import attribute as attribute_model +from modules.models import data_stat as data_stat_model +from modules.models import data_unit as data_unit_model class AttributeManager: @@ -14,7 +16,13 @@ def __init__(self, db_instance): self.handler_id = db_instance.handler.id self.name = db_instance.name - self.value = None + value = None + if db_instance.data_units: + last_unit = list(db_instance.data_units.select().order_by(lambda u: desc(u.id)).limit(1)) + if last_unit: + value = last_unit[-1].value + + self.value = value self.last_datetime = None self.stats = { @@ -45,7 +53,7 @@ def check_value_change(self, value): @orm.db_session def add_data_unit(self, value): if self.check_value_change(value): - if self.value is not None: + if self.value is not None and self.last_datetime is not None: print("Value changed") data_unit_model.add(self.handler_id, self.id, self.value, self.last_datetime) self.value = value diff --git a/src/server/modules/blueprints/__init__.py b/src/server/modules/blueprints/__init__.py index bf77f95..54102fc 100644 --- a/src/server/modules/blueprints/__init__.py +++ b/src/server/modules/blueprints/__init__.py @@ -1,9 +1,11 @@ from .attributes import attributes_blueprint +from .charts import charts_blueprint from .handlers import handlers_blueprint from .widgets import widgets_blueprint blueprints = { "attributes": attributes_blueprint, + "charts": charts_blueprint, "handlers": handlers_blueprint, "widgets": widgets_blueprint, } diff --git a/src/server/modules/blueprints/attributes.py b/src/server/modules/blueprints/attributes.py index ead8c03..9217e84 100644 --- a/src/server/modules/blueprints/attributes.py +++ b/src/server/modules/blueprints/attributes.py @@ -1,9 +1,8 @@ from flask import Blueprint from pony import orm -from modules.blueprints.enums import StatusCode from modules.models.attribute import Attribute -from modules.tools import BlueprintInit, this_name +from modules.utils import BlueprintInit, this_name, StatusCode def attributes_blueprint(_init: BlueprintInit): diff --git a/src/server/modules/blueprints/charts.py b/src/server/modules/blueprints/charts.py new file mode 100644 index 0000000..fc4434e --- /dev/null +++ b/src/server/modules/blueprints/charts.py @@ -0,0 +1,43 @@ +from datetime import datetime, time + +from flask import Blueprint +from pony import orm + +from modules.models.data_unit import DataUnit +from modules.utils import BlueprintInit, this_name + + +def charts_blueprint(_init: BlueprintInit): + blueprint = Blueprint(this_name(), __name__) + + @blueprint.route("/attribute/") + @orm.db_session + def attribute(attribute_ids): + charts_data = [] + + for attribute_id in attribute_ids: + data_units = DataUnit.select( + lambda data_unit: data_unit.attribute.id == attribute_id and data_unit.date == datetime.now().date() + ) + + if not data_units: + continue + + charts_data.append( + { + "id": attribute_id, + "label": data_units.first().attribute.name, + "data": [ + { + "x": int(datetime.combine(data_unit.date, time.fromisoformat(data_unit.time)).timestamp()), + "y": data_unit.value, + } + for data_unit in data_units + ], + } + ) + + # Return charts data for Chart.js + return charts_data + + return blueprint diff --git a/src/server/modules/blueprints/handlers.py b/src/server/modules/blueprints/handlers.py index f493621..461afa1 100644 --- a/src/server/modules/blueprints/handlers.py +++ b/src/server/modules/blueprints/handlers.py @@ -1,11 +1,10 @@ from flask import Blueprint, request from pony import orm -from modules.blueprints.enums import StatusCode -from modules.models import handler as handler_model -from modules.models import attribute as attribute_model from modules.handlers import get_handler_class, available_handlers -from modules.tools import this_name, BlueprintInit, parse_config +from modules.models import attribute as attribute_model +from modules.models import handler as handler_model +from modules.utils import this_name, BlueprintInit, parse_config, StatusCode def handlers_blueprint(_init: BlueprintInit): diff --git a/src/server/modules/blueprints/widgets.py b/src/server/modules/blueprints/widgets.py index 5af0b4e..7a3446f 100644 --- a/src/server/modules/blueprints/widgets.py +++ b/src/server/modules/blueprints/widgets.py @@ -1,10 +1,9 @@ from flask import Blueprint, request from pony import orm -from modules.blueprints.enums import StatusCode from modules.models.widget_switch import WidgetSwitch from modules.models.widget_tile import WidgetTile -from modules.tools import BlueprintInit, this_name +from modules.utils import BlueprintInit, this_name, StatusCode def widgets_blueprint(_init: BlueprintInit): diff --git a/src/server/modules/handler_manager.py b/src/server/modules/handler_manager.py index 14a5f9a..59da824 100644 --- a/src/server/modules/handler_manager.py +++ b/src/server/modules/handler_manager.py @@ -1,5 +1,6 @@ from threading import Thread from time import sleep + from pony import orm from modules.attribute_manager import AttributeManager @@ -7,7 +8,7 @@ from modules.handlers.abstract_handler import AbstractHandler from modules.logging import Logger from modules.models import handler as handler_model -from modules.tools import linearize +from modules.utils import linearize class HandlerManager: @@ -40,6 +41,7 @@ def __init__(self): @orm.db_session def initialize_handlers(self): + """Load handlers from database and initialize them""" db_handlers = handler_model.get_all() self.log.info(f"Loaded {len(db_handlers)} handlers from database") for db_handler in db_handlers: diff --git a/src/server/modules/handlers/abstract_handler.py b/src/server/modules/handlers/abstract_handler.py index a26978d..49a3914 100644 --- a/src/server/modules/handlers/abstract_handler.py +++ b/src/server/modules/handlers/abstract_handler.py @@ -1,6 +1,6 @@ from time import sleep -from modules.tools import get_current_seconds +from modules.utils import get_current_seconds class AbstractHandler: diff --git a/src/server/modules/models/data_stat.py b/src/server/modules/models/data_stat.py index 3c466ab..7bfadec 100644 --- a/src/server/modules/models/data_stat.py +++ b/src/server/modules/models/data_stat.py @@ -1,6 +1,7 @@ -from pony import orm from datetime import date, datetime, time +from pony import orm + from modules.database import db diff --git a/src/server/modules/models/data_unit.py b/src/server/modules/models/data_unit.py index 1613982..9ae16f7 100644 --- a/src/server/modules/models/data_unit.py +++ b/src/server/modules/models/data_unit.py @@ -1,5 +1,6 @@ +from datetime import date, time + from pony import orm -from datetime import date, datetime, time from modules.database import db diff --git a/src/server/modules/models/handler.py b/src/server/modules/models/handler.py index c299ad9..2393592 100644 --- a/src/server/modules/models/handler.py +++ b/src/server/modules/models/handler.py @@ -3,9 +3,8 @@ from modules.database import db from modules.handlers.abstract_handler import AbstractHandler from modules.models.attribute import Attribute -from modules.models.data_unit import DataUnit from modules.models.data_stat import DataStat -from modules.models.widget_tile import WidgetTile +from modules.models.data_unit import DataUnit class Handler(db.Entity): diff --git a/src/server/modules/models/logging_message.py b/src/server/modules/models/logging_message.py index e93daa3..c59c548 100644 --- a/src/server/modules/models/logging_message.py +++ b/src/server/modules/models/logging_message.py @@ -1,6 +1,7 @@ -from pony import orm from datetime import date, datetime, time +from pony import orm + from modules.database import db diff --git a/src/server/modules/utils/__init__.py b/src/server/modules/utils/__init__.py index 2c34b4e..05cf5f1 100644 --- a/src/server/modules/utils/__init__.py +++ b/src/server/modules/utils/__init__.py @@ -1 +1,6 @@ -from .color_print import color_print, Color +from .blueprint_init import * +from .color_print import * +from .enums import * +from .modules_registrator import * +from .tools import * +from .int_list_converter import * diff --git a/src/server/modules/utils/blueprint_init.py b/src/server/modules/utils/blueprint_init.py new file mode 100644 index 0000000..2d5b54e --- /dev/null +++ b/src/server/modules/utils/blueprint_init.py @@ -0,0 +1,9 @@ +class BlueprintInit: + """Class for passing references to blueprints constructors""" + + def __init__(self, manager): + self._manager = manager + + @property + def manager(self): + return self._manager diff --git a/src/server/modules/blueprints/enums.py b/src/server/modules/utils/enums.py similarity index 100% rename from src/server/modules/blueprints/enums.py rename to src/server/modules/utils/enums.py diff --git a/src/server/modules/utils/int_list_converter.py b/src/server/modules/utils/int_list_converter.py new file mode 100644 index 0000000..d019fd8 --- /dev/null +++ b/src/server/modules/utils/int_list_converter.py @@ -0,0 +1,11 @@ +from werkzeug.routing import BaseConverter + + +class IntListConverter(BaseConverter): + regex = r"\d+(?:,\d+)*,?" + + def to_python(self, value): + return [int(x) for x in value.split(",")] + + def to_url(self, value): + return ",".join(str(x) for x in value) diff --git a/src/server/modules/utils/modules_registrator.py b/src/server/modules/utils/modules_registrator.py new file mode 100644 index 0000000..6bcc5f6 --- /dev/null +++ b/src/server/modules/utils/modules_registrator.py @@ -0,0 +1,13 @@ +class ModulesRegistrator: + """Handles modules registration and their exit on shutdown""" + + def __init__(self): + self.registered_modules = [] + + def add(self, *modules): + for module in modules: + self.registered_modules.append(module) + + def exit(self): + for module in self.registered_modules: + module.exit() diff --git a/src/server/modules/tools.py b/src/server/modules/utils/tools.py similarity index 80% rename from src/server/modules/tools.py rename to src/server/modules/utils/tools.py index 52e14e0..64c7af5 100644 --- a/src/server/modules/tools.py +++ b/src/server/modules/utils/tools.py @@ -3,15 +3,6 @@ from time import time -class BlueprintInit: - def __init__(self, manager): - self._manager = manager - - @property - def manager(self): - return self._manager - - def this_name(): """Returns the name of the function that called this function""" return inspect.stack()[1].function @@ -50,21 +41,6 @@ def get_nested_attribute(json, attributes_row): return result -class ModulesRegistrator: - """Handles modules registration and their exit on shutdown""" - - def __init__(self): - self.registered_modules = [] - - def add(self, *modules): - for module in modules: - self.registered_modules.append(module) - - def exit(self): - for module in self.registered_modules: - module.exit() - - def parse_config(config, handler_class): parsed_config = {} From 9e25ccf1487941bb2dd7dc40464b9d8c9405075c Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 18 Nov 2023 01:17:56 +0100 Subject: [PATCH 007/105] Upgrade to Next 14, switch to BUN, adapt SMACSS --- .gitignore | 4 +- src/.github/workflows/client.yaml | 22 + src/client/.stylelintrc.json | 6 +- src/client/bun.lockb | Bin 0 -> 203290 bytes src/client/package-lock.json | 10967 ---------------- src/client/package.json | 19 +- src/client/pages/index.tsx | 5 +- src/client/src/components/Button/Button.scss | 20 +- src/client/src/components/Button/mixins.scss | 6 +- .../components/CardHeader/CardHeader.scss | 8 +- src/client/src/components/Icon/Icon.scss | 8 +- src/client/src/components/Input/Input.scss | 12 +- src/client/src/components/Input/mixins.scss | 16 +- .../src/components/LinkButton/LinkButton.tsx | 2 +- src/client/src/components/Menu/Menu.scss | 6 +- .../Menu/components/MenuItem/MenuItem.scss | 10 +- src/client/src/components/Navbar/Navbar.scss | 4 +- .../components/NavbarItem/NavbarItem.scss | 8 +- .../components/NavbarItem/NavbarItem.tsx | 5 +- .../components/NavbarUser/NavbarUser.scss | 11 +- .../AttributeWidget/AttributeWidget.scss | 18 +- .../Widget/SwitchWidget/SwitchWidget.scss | 30 +- .../layouts/NavbarLayout/NavbarLayout.scss | 6 +- src/client/src/partials/Handler/Handler.scss | 25 +- src/client/styles/mixins.scss | 8 +- 25 files changed, 142 insertions(+), 11084 deletions(-) create mode 100644 src/.github/workflows/client.yaml create mode 100755 src/client/bun.lockb delete mode 100644 src/client/package-lock.json diff --git a/.gitignore b/.gitignore index f24ba0c..ce9e88f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,8 @@ __pycache__/ *.pyc -# Node.js +# Node.js (using BUN) +.package-lock.json node_modules *config.js @@ -23,4 +24,3 @@ node_modules # Nohup nohup.out - diff --git a/src/.github/workflows/client.yaml b/src/.github/workflows/client.yaml new file mode 100644 index 0000000..97a4e6e --- /dev/null +++ b/src/.github/workflows/client.yaml @@ -0,0 +1,22 @@ +name: Frontend CI +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./ + + steps: + - uses: actions/checkout@v3 + - name: Use Bun + uses: oven-sh/setup-bun@v1 + - name: Install dependencies + run: bun install + - name: Client build + run: bun run build + - name: Stylelint + run: bun run stylelint + - name: Test + run: bun test diff --git a/src/client/.stylelintrc.json b/src/client/.stylelintrc.json index 4448120..878410f 100644 --- a/src/client/.stylelintrc.json +++ b/src/client/.stylelintrc.json @@ -1,6 +1,10 @@ { "extends": [ "stylelint-config-standard-scss", - "stylelint-config-prettier-scss" + "stylelint-config-prettier-scss", + "stylelint-config-property-sort-order-smacss" + ], + "plugins": [ + "stylelint-order" ] } diff --git a/src/client/bun.lockb b/src/client/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..c5e7ab49110d6067922596bc60bf222b1c132097 GIT binary patch literal 203290 zcmeFacRbbq|Nno|Q6V&p5?NVU36*RKA!UU`_Q;+giHf2kQW{E2ijoFOgZ7lBGE&hp z(k>19-tW%y@#?(#yk0p+@83Va%jPQNi4BCcga^4tDo0P?=AhANJ0&?BvV$F-TbDlgXmWJCQ&OBu zR&`?Cmuj^KkEC9^38#%72(@UmZv%RTHiRL6X(E-+_()Zt1$)OtD!Ye<9)$vK8Z9wm zVR&zyaBp|dNcdI&ZihnoKrqY&st~`!(D5Bx6y%LF)0P^~ z7Wj_s7KP5m{$B`+^(KiiG}7H8&>QN!hdj1BS)8FSAdl@9l3?^N4=8f_)cGNjjPu=8 zc^2exzB~a%I}@NDbV;K7f@rW#qeX@LD=&a~85$KF>lxzZT`9$wH$|X0PPw31KO)*! zInv!Xf(zord9`;OW1RflBb0pt-F>^MxEd(E1d4nKD9!^XSw?*rOYaCz8f`0-qn!j$ z2q`fV6ypo>4q1qCt(RxCV>KxD(-Kf@2h4L=jx<`H0^@u;C~{e#cs>&9VSnIyRSpgC z9i+%O9|wy4>;ej|61~I2L&BB4V?vY|^)0FMu+9Pl!2hr9(^qD+=imCZ8|>h?k5#47 zpvw|nAr741qbAU3qM+MBVTvXSsWIve2E~5OhH@Ow2=Ab1oFJ1XGTIyK9vJ8!5lQ2Q z^SBarJ=YL!yE9d!xW5mqCj&T-e$_zHPmp`4a)`$QnjGY@zln~f>WNHY#7*iA zr}Eqs?**NX{$_*Xyf6esyNaMZp#HwWA>lCLr67;vjhpI%5dUCQ4~Qos&^^Kr#syZ9 zuQ&A3OXyUrSE*F2~83yOWy`v(q0em`)`Bejo?HZ%Y@OO}^4|{p<#{B}y(GDHT zF%ALnkL}*C$LQyUe*T{5*FVBL2G^s1us?j#XmqHD?Rl)v=#Oy!pm28|8m;$Y0Oz+E zFwTbrdm=_#7!DUHXvcaeM}OIdjCk5Wu|H2id(f|cu%CChe`JJzuuq`BuU}*u)W^62 zykmP8tj#n=9@boBq_-FCEpWJwyu3Z4e8Epp1bje(b*3B{?(H4q6|4+)aNkh(@CfhN>5P6N>(|hP(f*sD7_VnYU`ROZyClv$umf8`Vge{^ zEs4IMxX#T$aXr_MVYE+k0HfaV8I1j3*_^Q+HbNdbNef21BS7)`Aqa}&#SNSy=y6L1 z-vMnxf1%;tk&*u1;SV6s1Nq)Y!1p*SMn2Tv3!6>D#S;$mBxe>Q{(sv?c_bKI)@()` z-Bdo@#|w5T8f^{mI6h>56@v5F&Ii_v@)8>cNA~ZKVDCu(Aa7a_tTs=$FkFXv*q%hN zgZtA$DxLsPEDwXYv43H9dAftYx%Q0l{MC*XlwxqnBRfk z(ZNuaHV*RWcL1e4prax0LOdhG{e!(p`^j~YT>s|4EWmmB5_lZ_N;|7Z37wI1v=_>8a z-3RqCo+{W)F^)Mf*@uH32E};l7Bb3xLqcJ|jQfBOpvb9#9n`0g$9}#8it${f&O3r)oSMMn zcu$4;z3Tn14 zze56}y=lW%G1k{0Q1naIyD`)ghWz~141NOS1t32XR1B086x-(pa{&F2eUPm4(sai9 zjRi&jd)6}Y#BT=V(cjTbM*EjS9{V8@6z%#_d1FxI)z&fmWPoD7e4+B$*^K`D1d8@L zD1~v0@P-&c;g$>bXDG*U^#jFrIe_ALihv!=D}f*EKTn7k?elG9#Nz^r<==7`al8V> z_`JNsqTFH4xyN`b!xrlOh$_Daig6f$9ZArOn;GLeVhbbAGRO~u@<{j4-Y1wbP)`{0 z13}Rbxj%xk-g+=Md*=m6?>r6K%E%u-VC{7zDQ9t>OrnxvvbRTLTv)uyt?deHUp#0U zz4m-I$NjLx9K(rwM&JQJ6ASIiRX+Kld@T5@7D3->st3u@q=8p=&sHW zUbx)nxyr04P42Bv>X#30Q8(rJKIY zuVXJ}2)ei*uh=X-t8_q8yzZpEB=7h2Wr3 zU$rFru8F#{I@2%FvTk3jsSU^2wQu%bH;KM3eSfLYA+9@0bh8wixl)1Sx`RuWyd1&x zdSjB>y+{GYb&lH{r`B?u^BntqWkJ@18)1S|%&&G%+#(XA-xaD@G5FO=jy-R#`uH7F zoacVyYKP^Jq=;0ro}>BW;^)s2A18ITc9nXTXWW^s+ZT_`vhq)~v?+*gy|FfZ-JzG) z=4`0GeRt`6le~w8JB3el74Ln&!e;ZKEC1`biCx{SbmMNr)7?d(5-Xz5G+mLYs~DZq zHftc)@N`>!4wbpc@O6!T6}*lOS1)^%x~MEX zB-7F5@o@ggAsYFq+oi`_?bJJ8ywGUG0OLhF)oZQt^1n>BHLH6^Pte@7J4Vq|)$Sqx zCH@^+2XhBTw+Efy;`qY)T8`yAMgOg%J9T|;dd06;Fz(CdaZ%B8~ z+_Y3D(g3X3f{0(fP0U$dFhYGP4gbx*R&)} zuoRm2;Mex0?>KDVy|~8y-}<#OOs=70iMhb@*>MAB+HWfVX6rh-t|_f)%bSr!=NdQh zPCaPp@?xf8r0lhE$15Mdj32BYm{uWi+AGdLu~}W&jz@6DvpKw3<67RFUmTiy|N5PG zIVH6s@sjU$Er^ba?Qs?}(_h7vYX11vxj!8 zY6ExJXmgsIf-QQb`J>S_?;<5nj13+p#>h{oTk;)zVupx-YuDoYdw&{+^ZL z&4*Ve{n(-6<*i9HkbbWAQSr%O>lW)J#$3m~l6osRv*a7J8yZ5j^6oAgms@etZSwUd z&XpIXU8)8q^T;lhaJm{H5a_J^DpZyuZP_!6Hk*rA9(eCrFy-y3n4OA?KMuEQ9yB(} zW_bDowF<__Up8E%QfW)Qw*4sc=w|af6Rg&_ z@Q<5rr@vllUiHwKcjuPAR#-7uVcX1IhYPgD&0OQM%q>=VWgj|Of8|lc`3nu#*1z^E zZamQ;8KER{(=&1cZ$hJ_;hys6+n=Uq$74du80?%AcQ_pwr`1dabrgB6eT*yuEMEu32V(mF_Y1bJ&x@yOMU6{8cAXGnyVu zmTgf}y%w!4)0QG4wg1(zZ5nO&Gsbx3ymf1IonUiV@%WlgSu(LT2R@$E_&W5I!}>$6 zu0v19R6l&Fd(~)_%O&UK2`@rt2J-2dZnwYFF)l7-nA5-Qqh$Ydx;V+E&HPITS>IJ| zty><;^7Lf5hHv|9>aIohSF-QYmY&{w*(Cg8>x}#-#~l)_$o}mxwP^mD;RA9Gx)@9I zA^*N@CRx5y_0IwIxcv{uQ?j1l#}`DCT*yTwjUVs0PS ziH6$OIKFTQU-GM+XorbnYvQf0-j1m3xo4xpb!|withv?I>$O%U1??G6H1aoW>)@1d zGn9YZ^g2TLP5JDEz>|%Kj_fD%*Ff;m#;KJ<7IU{ci0N-%{gv3M<z*i%5Vwevh&C??7cj4iIsS1n=hPWR>O*8^ z&aiY&o3cSUTk_n9D@U#@$ujcYFLTTw?}i2Kq0|iqS;*+hpG-_fKTK#f*PECcf%? zaIN~sm%K;hy#sW!SBBkbytGGn`U0VoD<{4vj?Hvv4*R?@+u;1&V~(ThK4*AUY=8Q8 z%cgOsXRa&w;C@!}g6YQ5AIW~6X0KqPeDho0`@j{$VVpd|yu6QT3E(~{iQZVblt%a}dkJfy$ zvLW)2)zu*pC+&-hIr!gRzJ8-kWVWk{Po4f@d*vz5I2u#pH>RowXEw|jaQK$nihW`a zFW);n{nHIWGsE2<7Q74|`@ZttgK=7etrjf|Rp>O@7JX9L|2Aj%$`qKnCWID;mRSG;77%uoFW60Q-J0kM$2L(Od zclyii6=c5tI`6bfwOyom)1H>U;Tkz|;EEJw3(u6u#tYUTinz};k3RWh!rD1ucV2`h znpJ2z3#?X=CU(fYC-eN*c^!Gb=6yr(Df_q*!{t^wJM0HNdpFX4pg^>4{n^jC!*(n? zmKp!ZX#2von;vGDS*JXoFg4u6Rd-a;!m7thuU?6D4Id}p`5^_63OIh#5T>h2IIwU-wY?Ou{u_~Hsp zsx^7l>6;sP>OQP@EaM5&cYPQAbz0v3H{~nWZW{7z%1*wG$D`JqFt{gL)o6S4{O*uV z%U|vuTlM74P~ioBx4+I5OplT5sjF_@R1@5k%c6!gXR|D-Araj*v`iZAm zyUk)|%8Kpr<3(PMY+77-$5U&B^b!+=_Z<=fB|P;(G0A0j z!h4Fo);6z}nPeHKsFL?uWqPd9<`ZY8^VSLHsEkPTc{(cj@}|>{`&t?urtD8wKK?Lh z^GV4}_tR$;ZI0*7mW`XiE7Udj&FaUCC;liCv*Jvv;HPhEoxOH@s4h~qmPjJ*$B_WP#z1KQ{(F(hsd6IpQ ztn)dMov}_o1kW|Uk$pIRa!A9@GtIHGchWV9U*+PZypq~y#cfh+i^n>eb9cNj;*y>b zxA*g256k6s;)!+*aq^0yQ+x#HRJSNepLaD>;qVLe{VYnmIs1IKX-msx_aT{-h>14Z9T@Eh}#=-1S3{PvY#6QxT~PHalsUI|DpxCQmNC)00a6%r- zNO@nTNxebvMFn`m()$9b^MsFtFY3Uxb!abzVCel9fJh~kkW<$c*8^>TqH z{Rg4YSnWr`*8(sF{3DC8qq33+uL%(Hm`9dfK8WIx8^nrZst)mA3_P}<_-A+gUIK4S zwVw_5e~pt81U(6O((mlHKM;6a{}?~U&TjmBfyej>&uSY;|8)azPVuCS6&s|k>0rkC zfo|-Los{=wgVaj~UIYA-ek0|q^5=lZ{sZYv?Dik;5JvxD{FvC~=K_!OkN9U;>HCwk zGaGoa{?Iq+hrTQj{yOm5;J?57_b~X;26^;{@3L7<#J>gbCctC=kup|nkh+<`WBYOa zkTt{(Ukg0;KQh>N#4hH4mq@)~@FRdF@X(Dck3HHYyf5&0{UAKMQw?i3wW%|_gmucCkf97KZZ>Mp3Fa1Z4llXc;@*l@pm`> znj`!H;Bo)Oe#gEe<^Kv&CrG^(;EkyE!|y#TUxNrQ13!jM2OfU&qv069bYLkFegW`W zO#R0a43!AK3wXT$!S>@p%KNfI>U{wo*AKQGzOp_4)M3C~fG7Si238XBzn0=j{A3^Q z%Ld`U0+07!7(23XIb$gi-X0om`v?49;O+l_?*`uC4|qHHar95(F96>95Bzrl|0nU! zf{o)(`foSz7Jm@`Yv6JJ>+k&08~OA86Zddd6PbURz{8*3C6fIgwquqO;co(O3_L<; zgWcUjdM3Gw%L{cHqY4R~_j!0z?q3h=o9^_LfgnJYKJnrB9{kS?&GW^!b^`~Jbz#w zZIJT5Y>;~Hz^j9Qj2)98L;CzAd^Yg-{7Lp+R{N3gLq!?aKfHfu_1cTU5ndSv9p9gj z`&L%>aKbMI9-rSx|M%H&ssiDwC?1Q^H`-w(5xxibiQpgmk37S&!_R;VKE8h;{m*Xu zGbp~l{dWy`1MpAg9=qeOEb;UCiIsMfI;8)W0gvOy>bm)rKLb4WAFJc`D=#3)Xg`UE zobO9XeLLXE{A0E6&^F=ofH#8pNuJ&DZwDURj~pJX_5<-JC&gI*$dNe!U;9ji4+35l z{Nwn+s{oc0;co+v_kYAcyX_w&{rC6h?DBfRTY-NP57E9FLh7vsem3x|`XzP=-v~VJ zzXRa}+CXI`5ngH>qy7E$KNomxKdXL8Y{Y*V@W#O7a|0)`tK_L!#ToF zl%dfKz&}=Drw<4pPVr>_L_4e`!XE}6#~-QiJ!U7@4gd$vK)=(13cEnHjs8;{&$J+TY+cZ|5+VJ z!q)+h&rkT?5q-1E?~td_41pH_7HyLIF!=i0MEo}ckM9rBH_jne6X8V_7}pPE(FPu@ zB*MD_PxfC{I8ul3MZg^Cf9bsPwP4|osYF;A{ReYoyDP58-5Kd(Q? zlk&c7ka}^zWB+4)EMs^4j{!d&c)b3=tBl@v@F0CA;-6Rf=ldJ%J5t`40aDKvcw_L7 z`Tm2|7>Ivy6-NJ)v17OYU4S=&_>tp+gVlBr|9QZZ^^Z2# z7XpvtkL_nQ zcC=0WoC4mNYCqawwI2yT3I-qhpVfU2ePbfL7x3iyopFY>Pr~n{`2NnH$H3$M-{1I0 z!OK@{Kd!z0^uH7EQoX{m1GaLi%448gBspG4}q%?+!c+K`)OZ z&#DdLe?9QVz+;|O7X1*u4tQKYBz{(H5MF#TWBdt66n*?I5#Anna{VP`zvIX`Qa6+0 z$^2#4e>L#ff4F~RB6bFcE({VbwR< zCp^D4Z)T;rWdHxUi9mI5w@RG23;qPA< zH~t32Y9hQH@VNd-yV)JTG~lNLkM__8tLuRHZvfta@=wZGX#=S{Uiatq1It*Q2ZRp= z9{Zo<*^U1o@Hqd8U(%0#wSoA113b+kPA1;T3Z4 z_+#5iTz$2H)Jp)K%pdg6ZvT}554XU7&A+jIIi}7N|F40!1fKLiyZ*J|<^{(e_kFa% z?)+T`Jb8X%)i*YQ#D4{N(tlXastv*qfQJtQs{I&0tBLSd6i;Urr0Nkq9e5+~PvR!p zmpQ`M0nfbu_QjF&gdYi;FW$dnzCZ8ZO@W6g^w<0&_WM%ee--d^ss8VaVLngzXTZBr z{;}_H4`U?}emY!yasFc-4|e-M6Zm-)Pu37S{$BwPL-^O%>LH`kK;$Kd+hpe{)I=|tR&J`V{I6Jze{HYVyZ*L4{_>}R z$MNeg&tc0LKhpPP9WsUbk6%gr2EgO`@9+GL2A1Dz~lba-}$o%c)Wg)eTVEreZ@ii<3C=)`AhOd zS>-1JZ^Fd)#gX&GPcraEz_S|nulyz8r%*i3KUU`;@&5yO_z9@r&p%V082v|{A4q(C zDe)go@nrm2?FYi|1>Wrs`cDBKp7HlT^smuZ&`jrv|5SMR!}*J+NEuVLfBj18USQ(! z9*o`g>&^T5`!hOYbsr@DQ-H_&CuDICWOx3Q0Z-b`&K^qqzoU5ci)HNkS8@6K-`}#^ z{utmVQSC?HthRx~Ukp61e|A`K^VeMY0K5V4=oe!rcH!%96RD@+3jbd_lz#-+?Y}+1 z8v{?~9ns%9hm*vA8}NAj=x_VS&1dXi`2ItTp6 z>j#-Pr2Ka*o+I_{0dK~{v)lh-ZjAXy?6KSbwiJ(k$ukUm?K2U7>)aUYx4-*$4e+pU z_C7yiAF|v2q3%EL|8Nbk+y1%0lXiir-zHM89C&r$asTImgOvXkW~$c)yaDid z|A8#Kyt)S?es5VjkmXH4$Fa>*w!hq>L3Cq;3H4@Ceeo zemRFaAbdIS(_pi|`J>qkmS%?N>e%c(Xs?>ww4okDa|A zV<7SCg#3N}k@)&j!bbv+_h01xvoDUEC;T4Zji~ss4_O@t!oLI_pZ{_Hz{D;;F7)T$ z&oC^o_DTGw0FUF}-~O)x9@~#ziA`1_Aa!}ee*XP5_5nOgu#^aI2|PZ3_ILhn0v_id ztNRWKj`)8BJkB5FaqQR~zv1DG^-Js#`+X^?KOcAl@K45%UH^H&ll=#Mvdh;2Zv_4^ z9#&cOL*gG3!MJ~5hh^sDfXDceXJ-x&|3`thrs5Yv!z?DkcSbV)eja`E!9mLVGDGT_ zMg7_SyA*i5{$l&lCSF5XNyPto;3rZ%a-_U38>HSRDt=O*)jlNrglNX~6W4x!_D?V1 zji~ss56FESiRa&x_`e3cKE(@BG5j0DTuyl3SjPW;9s0(D-RH+Mz~ladEIWz#9~{Tn z{|L|O8X)|1;3qKoCwBUZh44|p8&N!#k#bh~a^R=_f&aI_aF~Hj}`6uP9^4-8Qj~}^?vdT|R_&d+;{0Rdd@1IHkvCAI^-kfRt z*lqv7C4Y~f-S+DOkN00Bes=vY0^X8|XV?EF;HNXSe`sF=N1Z2e4o&>C`wx#lFt{BZ-G%pbH#?DQ1?@m~l$8GmHibCU*DVwZN188(DV!f286k z{@LYim;b!}ppAjp2o@6Yw+nb9Xg~IQfBOF!@MQnMdpCCDAD_&4ekUA>tFI=IdOpCD z{zrzCv&vThkJk^v5oML((ml@X22VPf71RzeL1Gi6F(b(H(=s%99c<(uLWL* zi6`yo%Ld^`toVEX_r;O(g!ch{4&@*FfZg_=1m1+=(I)9f;^*I#_#d{C@%IOWfVh(68{f@p9MVjnqf1g#u8C3r!dOj&9O6o79cz!s6YoFCM zMEEnn8&Um-EW7-`te^J}$g(?srUQ@jm-uFP{-#p?(JvnCUO%q^kK<3;js3_>rd$D^+{MV`Yu?!Qt?H{(8v47yc z&1&rEhxoSyegVXfEY2Zz`|mdJ22AZIcEQwd6R9V)wE}qj{R-zE`et`lF@Nh!?L-aI_B z_9j&9OD#As9vwK4gL~rMa(yaq0E)=~4y-o~j-hbCy<2bn*_2v?VnRhbHgI5ldpI!t zPO<)+-dcZGjL#7c9OFRh{QpAHZZKt!S+P764vag3I{#0K@kUbTQ86Dy<(U=ZPNmBK zmx}(<;J|p{F}QdC%>u=Qis#p11`;Z^X9FBK*G|KMTooLcs(L>eifiBk9LQg!%2AQO zLgkqi%db=AsK`}QdV?xwR=n2Trq17?&a&mErMTZI)_*|NV^)l>jw(mRdJS+4 zh2sSrnEpwzUMn2Px50slS+O5p!GZ02OX){YOw5Y>r`}SAqTMbykpBh;p8pO9CT7L* zZa7eT;J}26+yE@36#a8T9_n{mELWk*RjG1j#i9vRIkRGs8hl{?XnMSty7J!Zvm{6Lj6E871A<-DK+A%p$M1&ZZ7_(3V&`;UM; znixr)7X-!oQ8B6>v*P@eqRLT`lLp0dd8!;0zmA6w^g96*+o=JH^)>M%rI?>Y<(U=h zPo>IHv7OVXJhNiabgCQ`?U_({RLq-FY6gmStf}*;c;1G}Gb@(cQst;4Any%|arsl_ z%!>6FQ02^u;}!(va-i9u*iV~4vHoVNJ}Tz7fTI08svH%|w^Mmkw6_Zs>lIMv_fq9W zpqNnc{6SFkcN7%ulu}woX*nqTM>|gCD=-5I75$u|%1?u$opYdQ_Y!sfDy7ww-UP*j ziu@f)YbmV*h5u*`@PT$7VTMwy-wb)wXH+>V)@!BmsMwA+O53S&ROC7-eM{*FP^|wE z6#k=qh7Yv&4HWD5fa3WdRGtG0aXoN>LJ^Gz6zlVY!hf_8@PYM5QYt`|3sWiriiugV z{un4nJK~_2m!R_FK(SvHC{+RFfxH$d?t}9|F`**o209!x3>4>a94P!pTTE#pW+0(r z{7b3wWKi^<3d#qX1B!lgL2-TV1jYN{Vo)VpqTziF`iO5k6K1)Ii<%y(f%n= zjQ0jrUIU7WS&_dlyv<-*Y`<-y8{>C+?pDl>YZz&$wvd^F8*<1pN3#vFN|& zdPe{J)AKy`7nWl`*}(^1$MJa{6DofF@43FWJ9?k*u|Jrf=kW~YvEQ=sB&B$t^xtzm zWB&a2T+ir-|DNl6mq+h&J}#C2p6eO&;=kv5#(my@&-IM;fzSE4KK}pnT;IdrLtPsg zE&Shn4xlmYGMlDvOcyH7>_MyCrk2!f zUh#d8!yE-`m9Me~#V3!|IqNjJzAN=z{E*jo*4-8!{akgDm&R+Sgf97_2_nPNl}3Xh zVwdT42aWzCTw1O6lj_|uocDG*=alP*yeJqrz<-vH=(we}>fU)KM(*X}R%f(^4y2P_b;*d}h1&&WI#>j^ZJm1wWj+0@k;d4XL~v9wmBz@_2a; zS-MVVX8MDt^WPasyJV%GUOb}d^gPY611DPWJ!*HclT6omV-YreJoiH|MB>GFNF>px z-?mF|pg+8zK3;mf5f8@+t7N^`c9Bc1Zk2Bg>@uC4I(5NDt}?mC?TWS^%hjfC7*MwM z(^~1NGfqB!EL(giq(%V@5xe+Kh$MQ9nVj(OwRcxEeLVT#NWR6Yny&fV(*q+WeB|yv z`e{m&R7uHqo%6HwhB=G>@a6Q)E|0tLINwj%OwmG9MN_z)oAI|3jQN1?4oRX*y4*Nn zc3XW?z`{7EmMhmX^`{Lik*M8NQ@wX>%K8%#kND)!aN%nt)Yq#y8JktDk5^w)NIb1Kd@ z@0+lErQ03}iPd`?IM%M7VCv$dCDF|_Hn=PKLA2u77>gXP+0qu<)Qh-yLf`vtvf_)` zcEF}|2mTEZv5UWzkwj0p&~##H%&Pn~PV&2VXXsSEZ?ym7RMWY8qM*3+V67P$`*zT0 zZ7ulXP_gyM?(8em7KY6;zVUc-$k8F&kF4#|(5wPO#4f%YC5g^=sv~~)thVKiYr0c6 z%}AE{ynf=xGf^+q2Ai#)mb0bKCGwb!-4Oc8DWaRAW>2)QRGZiMS!BwcrTSjV0i&&U zOvS&AK)X11@!cm$^cNxn7ca?EEw3M-Rln3bBmYp)S@B!1OZQB;S}5vO@l^TsNwHC5 zk8yU1Id0n8)#7ZKvFU5m%t`mXtGDN>ZxDVo4GfWZ@wXR}=*yoTeP1v4RycTH?UPe{ zPLE17hRb&p=@o7j7Ed@Q@F*iz=;_0K3a4Kko6&GPM52AbP(!%|3Dfjm2R)psYd_i& z-^mcW_zssOy3EX1F_G2j?vv~!lW#oN86JO@cOHGO*ygw2hExv9IvQi(m^s$|q2E2) z_nR_PzvLLZM6L=_R8i&dTq`kWpMZcJ7$SC=|Bj2^`aJOIiOF+s?ktJg_fa{;R#mLf z++61vw5xq@O z=|01~l5*ZIKU#2*9`K~q#+=D6zFQ`VKI8BfS{-lu%zLX=p7-g|Rem;OV#35RJY%YJ z<@cLU9HDriGfYPx%!%pP0ftCF;BP%7(Y?+L zcWEcZ^(u*^?RK|Ut>iR-$24UrVh>%!x9`Yl_t z{Ap;7Eq&yS2WQ0|>`2!gxFN=MTG_K8y{)3p^E8HJy-OR0f6qhg;@=vPM5i@N%%E-C zBjs4tU1bt>=-YZGy|PZi zd{b)2<&g4el^>#iicK2v{_$*vHy-MwwP!Y?ds+{%^i&Usdav*1mBaQ8%EzYPWSG9@WA|4dK7O)z~V`h)5d4Y>!zLFPU3BROwV=ZjUd@=C*l|2^MUZdWxl_$;DdjWto14GK$CXPR z)iCLK;C6WHF*HDt^^5^I3a`qi=#_T3_Di&iE=i?Fhf?z|xoaw@$?F7-AHZ&fTys#c%K= zzW0*r6J3?7j!3BwjP1HKwtlkw8y@c&>+h5)U6{7q=5%|!Nn!EQlFY6H6O`NE>rGDD z;Un=tU)@){tX|ASB%;2sR7chkB;2BuOxqb_Nl`w z)sjpXE{b>VxmN%Aie#DS66r=$@o4TdZNtU~$2=Nu=jp8|(ReU-z=6b3;}>@RxT~4W zWOppH-Gp}0sPM&O=5BcvA{ZHSTAIEfP50R#b0v=8iBUYpo65A_bX;=XEqQw0f)VEG zcNCR0oj$)USD5Zc`|!SJ$^xk)Om^`%D3a*)BScP^&66%#dqn*}@f*&w%7wmUwZ@6;J;^TT}prliV&RfSOtC(cWnRN((nG*iB3WB9C*2R9@w;`Z_5_>AB5P2`0PanC&`Lf4Ml=W=`PRjcd%6U6O_+OYF7S znJ2PXJE>w>*aGbjg~|mQEw{8D?%!W&P8ZPKE%td=OunAa&QC#S=43qJ!DkB64>HVl zg$?Z`vo$Ye9=i6?QRejhuz<6nkX%&Tx_NBTK{4gl+oyKb1V%3%*-LpTpDEDFxMF_(YH0m;MPgLED8Pkjr0G^IhzYqzPt?8m%gCxp%oJ^0m^-|#&c zB6i0UqoDMj0Xr*4ogDXW!=#Yf+ZubS&++Gfouyp;(6cAyqTr`weh(4ddfqQG4oM?B z9$d|rFHp&fJylTuNj^ow#O=Ou9zIhLyNb+q8&*_Y4Vxt1l2)ENzNEc+;gtdTuE%ez zb{?2$UotJJk#6tACG}nHy}vof)1vgrZ#=@P>W7T08`P4!c#HOJI%A9rL2CFkqGg-iwfUm5EVM`iyc#XD#l*ytxbMwr6NcXTBPK;_ z=9tmjt3DfR1!F#)-g@!wBJ+zg`7Sm(eBG4HTW2e-JhzAWzE6eOu4mxLut_(b1kw-9 z=^A*!Cbxai-3-5VFBdf*7`<@x1obdJzQT^?4f~6Z98I-!4pX%+^^^(?e)Q-`RfhS; zt_E}XcNh>aZAc=hDzjbgf~I?^=@!TJp1T)+_J8)w=;@8D;`5tp9(B@2v^+1)bZQ*_ zcIKKpxv|-ITR#UnB@5k14w@_`oX5d6t$q6fGsg4r5E|OWXE~DSu7&%?4j7U>{B_NM zlZW%J%sb)veqkJqV}ts+@wqI$DCE!Q8Gke+ivx8ebJL9mt;(C z=NvV~d;bCOR~m_+YQ!ig-Ou@B+~lW0DmB&z7TA4P9~yJhiN`B%!e~dYt8R%R7RxM; zj`n&uFY)Cdxfc&x_tq9{kQ;k;e}28Dq`{zMhp#z@!3OpN-m6b!wmZc7wfORQhJYE^baZl=p@2#6$?6w%l z>)7pk60Yohy3*5|)98iL;5mmCizlD&Or9O|cAY<$38BaH|5oG>Cn9+Y}0Pp^K}Y`IPQrxb;u32w~*j6{Uj8aCl{KrX1(g} z6*)uJ%1@9q*zVs@x@0Q7xQFyFK5tH9w%dAnz>-nA@0Kk!KRqCP`YxqoQVv`eOB*fU`=q3DpZ$I1uNH%EnMNmewpcA%p;Hnv;^3yFJ*!S;GoB0Sy??iZeL@ob z`J(&k6AyTQYdn$YUh2XvK6g-M@_FaS39DZ`=d7PD9eP5jWQp3hT_)={nhmpR&nOHE zQOMkwb%m!pPDw6ry_o?RBI|exF$zjozV^K1OxCO(@rt~iOQd$zk9sFDR5UVuunA9y zRhGbc0r$aArW90UH|6tC540hU))XR)!#T*yjDt7th9Un^4ddp57_!;S)6ID zSY53vxY)Jw{hpcrC!*H5j+&CPt~2zt*5b>nnCxmZ+szN|oWC5x;js!DD1nVy@Jl&k>&r{c zt1j^la!yW3dOJYAp2;r$yCah5TMulo@jR5rF}j@Vg0$PF9}A1_44zqS^a&CAofCws+JHg{iJsl}<7Vl9zf z*)hk9S{@u@vTMj}SM8Ek)xsSGwK+9&4z-rqT}hvtz#m+H;!F7MAx&NZ9)?Tbm6k29 zp0p;QB>i?z*U{sJ3b(J0`egX--K1-|U!3U|nd}-d+a0+y*J-MsQe25n_}kQat9^qS z53F}vW!|yb$HB&-bWLn(LbG`H^nDSUTpbskp4Ww4eZVz;eB`-h7qd)Pr8SHBGTEKR zY?o%DCjPKxlX_^rGuw49&<}DAr2CH>9-BBnbB?a6<>oa-Wg<6p1%_#U z&mH$gdN!x%hSa4x2{#32FPpYZp?+rCy>YACg47QRDQfdf#~8`DO=q?{piIp8{^gA# zpXUXHJ)d)D(;T^>so5Qz8)IwlNHdgtdM|PJ za;Fs-BG-8{Vic6_G_3V4_w$ld&Vd1eD>4hGz1vXXRFqrg798F4qJGWHAg?*fzGJ!z zqOzWbotQK_p?bH?GpnVy)V$WZdcHRbR^HibmvNn+!ECoZNp9o*(l-}5Ro5O--d${y z5LYX7LCe0=q8_6bwJ>qq&oH;8=?jC*8Z+5R>BIk)U!KF0iI z*u{G_lIV8Tb4NPQkS__H5D?BOR(ee}Yvz|owL(jyhyYhh*UKj~Mmhh;+?->P722&a zd8Uk9aQ85s$v@^_8|d1iY(AhO4h)g&Jl?C3M6a~?u23ocR<}I;qn%Su;sbrXRhs+r zJGKq=oI5Mzxn5%n?|E`lH`fGs&E9$PF>w4o@Wax zez>$eY!Is%Sx%RE(V_cfV$r~m_7}V!CB7+wFZ6+doTI) z!nGA+lV+|F6$IGQeW< zyQ``twnK*>r;U?+9JLGA7_mEt*>0__x7KO8ZBI!{{iaymEJGWIErzeYaJ7B#6t_Om zs?I%e=R~1|$9ggb&v%F~8Z;)#_;^>Gvf9x@hupPN+lcgZjG5}}R6H|o{>rM0lhRk{ z{7BX+WxjvFcM&Afzi>{fZc4Y*7j|4~6!f`1b?}OhR-gB#ZBAGd*6I?NE3B`&A<0JA< zEpK;x^Q>i8X<*R6hv9OSuY=ZpeY^jWw6$@w(CnvK9vhY}wtOjfd7#VfV++y)Ztp$F zWOpvJU0LtzzWY^9YOPusCY#f^`^K({oB_@|x(AI}Ixf^_x#rExp<1iw#J=miVOp|s zFjraO9p2TKyQUSI+1k*{lxJoz_DRO?kj~6@J(Ig{6rN4EC#m-2(}*oLX2vddMN4u` zJ=Umi4t4wS`4D%yfWA@9a4YLUG=Wr&JMrrabhCt4d@1;LnTtNxQI2_knD;lkO9XW# z8w(8sxHEmHHFVC1Ev#t&vLhmGx9_^v9YqJ@CXcQ$SU;y?obX+<#|0t7Q@rL^-cB3R zQCM>vevC4;d&<-gF3ffdn`gV)-Jb37Nok3Vb)1d^BBHKpEzdT~IMu9}g}M&Yu|fuBUWSdg1ZM@AMnb@2k^2_B7du z9wxi^TMkrN`BN|7}Y7%iJa@+iHILiO7fQt|J1t?%B96XMTT%dk{(V zy;Z9dgfv=A1;z9xE8d)bm3w2*v5{j6g3q6_bR+lW^FJ&-m zZbQ1vv=F}q^48UEC*8_s@mh;IHKv5}hs8~5bau(+*cQ3-?s2uQ#Fxo;o(XL&Yv43c zTKWH&y344jx~~D?#DH{n$Ac2mUD6>fB@I&2B}jL7cZYO$r*wChNOw!W@Ly}*b@!L^ z?dNvSz4x56&kR?`Fb)F)kgp-o6+?&mH1H5|dTyP9@NF1|nAQ|)@hI~7C%5t>O*^YV z$_HH-v2}LiWFBOj-9E&PXq3dECpovxOS1Jo3HWR(;P(`afUf;f`wC*hYFQum{p%a2EUFnoo)VeT!+zNz+$G+&$8-EVAXpuUkAi@F zje%~&va#67vUq>f!XXY>=dh`pY7yG|T7M!N5T|$XX%KC2c)>jPr3|l3nA?&zYUwh5 z-ps_a?07?q7wF!mC>Z!Wd)sS(15`y=7n6u`OL1&~Ce>ar?LsOw8qLIOA3NwSA%6m8 z!q>g$qJ$qL>36{zIeS7QH>Ah+!F12rzo#;iUZF9q>upaAz8*}#=<5hNsg4__zZKC+ zyB$)PVS3N7f;%rScFaPmp;Gs4iBCgYKU6t`ZFP`}%4=;9?VUFlU#e;Vz$ZYf>p z`@2&+zPgwLRT{WiPIESc6|4Mlx|Bai)jhrPMO~H z92SkP;nyx^PENNqY*vUzk+FY=x&by}c((~<0DU#JBb;l_tz%>WDY~um~i?=%L zo8-yYagB!9Sx_?D=t53&{yLD*SKoPFnA;J`ilcC^d>fOon5BuoBt+1ca28ujqa?JX z@Y1g~16&KB>**48gvqiGmEduuOH76Ozqs6X03`-JFMyL%%W2_pJgexz!IF#OIo^lEpwc0~xH@ zrH{TUIts2ox(ZdYxWP=UWk0b zsP?mdySBitHP9`N@@m6(uU?KIxeclI=uhwd(*A5emqTDvIuUpJ%!s6QdrZ3wb=CvKt)0P)K87}pUk2wK5sSHo2s)+tfy{X&0J26-jMBvk=U3? zQy@l~w|3fps)H9a!%Xt9*ZNn?b4H1LlM`m4_V!EwyFb9_>j;{e7Op8NFT2CG-0s_C zgvS=JoL_AG>s1i^!m8HboOPAFEBc|cf9Rk4R!2CWW6;@4rDgrIMlXY8kPD)zl7utB zwFkQBzZ?j3-YbYXIV^}|yqwp6I_gI_>zywno{b~0|EC;B`VeTp^ZbiA!2E2@bxlrv z0$aa&tP2Hqt~RgXzQ3~w;5q0roDbHZQ}#H7vOD2|!edRz zyp9!uXN5(W3!z4WaXEVN-1xOkDqiTB(Jt|Vtg4RR{_o&A`~LuvlKRU6U&2{8^K_nuE}owu_Eu=}=F0|$uYoLQl^k|BH8Tc)mDyOS-%r}`3O^4n33 z5lWTQ*L2wAYlXBWFKdeU!$es)1?4+K7EC5t>Vu#}7xKeJGC0py2<*OnhTs4pjkKfV zf;7!qzZ>k`8GLO)UfB+alT_>EjV^s(@H?@NvVDpHE4SIWy22(@dw89=Q;~yHQ*WJB z(mp>*ekc6x8UVX*Jp*unp4KBpyhD=AN3L))9$A+z`FC{2_hT+Z7qT$}oUqvr%2L$2 z_sU0^9xZ?9>lpd%{4#!uz1r#H44v<-xz5w7yxJ zrPYmE!qQcbtB4C6*Yl4T)%&o&MshD_&5yO9Ksxyac#z zKzG2f#=M<5Rt)w+zKDUu#3g{D{DMLw!gBhabHuij*Zd30d#zrB2hWel@lIye6^94C z72S-{HUA-LU`xAtsWbvycc2@Nkvrv1scps+LsFlHqJ%;G{D&F=+3s`%L+evg&dBo~ zPq1>C4|B4D_%&-8vA0C_ymD+lBa~1EfnU6=1RgMzQ>4Sq7-gVn$n##m8d{-;i;(Z9NU=8N5@tJK`UE|7j#40D{Lk&)wj74 z?7m$a-~gpKD1J5dFn;!Ci1U5vbvvT!7@mBeT+fO}LC`*UL|L)h?cR*~Zk_e9rrz@E z`vnJbq>TgpskTB`n$3pMFWIbD2<&=+(bo|~xp2nf&MVD0(7AUzs*W8Z8!Y#a#+(M) zP%?`#&vtKJ+G3=#OEjzj9rK|{C5vU)@kax>8+`XedB!-_yYn^RbJ82=re+J~KG3A} z)sDtUaC4WsAEuOC3dm4>5~dQ$qp<-|g=gXsJNVp|$EW%<#TiuMg0zb`UPSWsUiLMNIF9__s>Y(OR1Oo*u38*Hr~WHK|0D6fy{(Ifp0g zO89z?QBPqKYEu--nW+c$KMXx?ikTr%z&E@ELl@F+S;TK?>pu&SjM! z_~~1F7v^U7p2Hf(W)&>sET#VLX|Yrrh5l-cnPdgcH6M9feOXv}4RHN{t~psqyY;>w zc@>X1x+Epv64{yEx&TJ-6b3|0uZ76TZF86tS*5y@d%ObZO4b_zA!OS#dqJ$!VnREO zF!-$Xtv3sP;K%Ce@#EBx zxdUt(NNKS1iz{CV-)S+}*$)nuU4X z9RAV-Uki^5gW>=_v2Mv>2{Rn#hd=O?Z z=Yq3Vs4YK$)z-{mkV9oQjTj;P8@ogFek7kGX$;^716>_yD}U3^JE#pZ@hdwA+E*p) zB!`Mnjd=&0H%@R1xD+U!fw`-g9`j>FMy)+nLl8Tr^)X|(ap?Gp+nCk#H1n9CX zw0ka^{x{Er8>;$se5{P^7*`EHboUXb$PRLep{z&?`LefjDzcz zA`lALO5G7v zlfc>h(96#Audzoxxr}5u@Gb%BFp8K!R}?81;D!O+${gMKT@pcpf0BcY!ZspoytNRDX7lA!>kj8ljuYz3n5K=bQ}cH!8Ba?F@g0H9kV&IfCqlMQXFqdELpacF zt2HSl5&HsD5ntw_^xLx-)}QiyeWAq}N{ummY7%Yz>Sqzyy>N9nLv-gmbXCHLDDU|6 zlP(btkBlVMD|N>v7E2^6<5n2uMs3YlG{eP<{&8?u2*@`Q=n9=-)vZ@xPtaq(gE}Lt)?d~A zW}#RJ7qa-<_mHXUY;`5S3li$ewqRw9043mwyr0So^KyJ?{DJ{V53zDq6Zkxf0=lQ) zr(B$5dcG|(vr9OU@l(?jp#@xO{P!_z-J7^mQ+oMu&fN0;!hnDABN?W0QWnlRvog|! z)HW5?DxB!mBrYl--)NxwQ$hxAb$?hsuaX)s>04`9K>+j%X6zn(*L%FUFI9xe#{L)K zSxB|h0W^#RinEr%7uLV&zA-&emfpmF={)660k|-$nyM&vobH^T^bYk;o_$onr;6uu-aI0FwRxehR{%E_=oT2& zRU_m?x{a{@Cp=x=))B685xQ%E*8Lz1G*?N`HPYrzt>)fp?vBSY_qYw{WI04q{@aMTeYZ>Mf!|T+^mF+ zvLiE^Bl|};=o%iAQv*8pj&C8}mw&t=Zove&@j%zMIk4FkO~XzWGbdYx@+0%+9qGjr zMq0i#PppV*Xy-)ecV(_i4IHz;1Jb6keQn-8l{16fO`#bM@?F*b8!6zvFahW~8+b7M z;KV1%`gDA!iK%B{>Q-*d4)M8=iFf!3;(jzZQUj^7*DP3VUK(E@&$VBQ-E2i4mhw|{ zlXva959TAV@0kd6pJxvBHd^>D*wY2c`aQ@MQxaP!#Q(ANQ*jR{R5h0JWrc=WJ)DBuq`wfrD=QqqKmsuaG+nYy5tyn|JEx4KOd5T?rdcY zI+e?(mz?DF6=+xucgr=fME6t82FAz1!ds4!nHgoy{GJ6x z5Zy<+$H%5jZ+lFz`*tmZ1N1&3{ev7-GWE%r8~kVb{V&`3j^|hISKHAJ8(m55E@jFH zW>KBg9!@QI++LLi>kgscGy;PhKq656A+dhOM{jcv*i8kauOn#vop|t^T}f=$^ce0( z(I&ar7*XW2a2qOe1M+6eJh9=IE#-p6{iw;6G$AVnBfGUos0!cgk8KS`${qfC67)v^ zHx20exeP?ySa?jAw&oQqvZ*DOU3L(XVG6fT86#zRWTA$1yI*g|FCvYqRG#y84S@4a2fA%imNd%yWJy{-SiG&^r|t-~ntUNI50FPL>K|Pk z{fjQol8YcYjZ>gDKIf;ap#O(rov{QL*cHAgE|V+i)dRfWGJx)}?dWfh1Kkzz9et)g zNvmWY=ErVy_MR-1R@KVkpLqy3tKatbh9=|IdSS>-5mKJBm1=R@xq>CpFHHxT&+8=t z`DOy$Sh8}o?cDeIR>-vyBOTbcKYj=k!M$rU!8WWO)%ZkxBYB@Z!S`royGX~K`j;O6 z&@&#r3i=aSIzK9Mn=Kk58Nkf~y6cVY+`nQ2mon&lridO`L>WfS@cVM6t&IN-OT9xK zZ89YyJ}jlMh1i4Jfk>ydTFD7MGIf{p6h;i@{9w$n{u|(C1Krc{aczE^xauBnzMh&E z%94d2{Ta2#)Vz>VfRlHq96cI1$(cLIh%(vmeXu!hD%&_{&u*s80fMrE|+)2#Pa zWmHV>+~fFgoV_=?8tE-sUI6afoDU9A(2dmo4y84g)!K&Bld&U47aUWxOd$ewzV_q; zZ}Ft$3Y7H-Z;nsb#s>f8t&8$yy-(yy$#-QprAz|}7_wQVR|uSM9vFQcLG-x>b=Yw* zk?kWS-!U(3Y>SbGlp|yRwj2Hsn&n%y=$6T3NFQ<$Bv_k&Ui1_SX^;u@J8+Z8PuN?i zs!pkD5&*crfUc}>O4{fdA+&f^>`zP$gxkh@_UI@@qx|6 zF8}stlq7y`uB_zC*nG9>mHYamB>3&S6ySXGfo_@l$M(Td_$kjE^t3}f)E-JV7hIpd zfl$`Lsz&+aXM^~{#L7=wbtx44GWHbWpdq-1Dn?%t2o(*VWnK~k^+kYN0CYt{9({1# zrm5v#B(HgGe!}vR=sNx(LDjN9qNG|4KFwoaPyEEjCyr2{MuV(KP3Z3dlL{%*<#9vF zFGRwD5IzHN-_|JL06F}wYu0V6|L%Jm_uOwS;DWK?xah}THe7u+-N4<@K_<#uE1$pI ziF)X?Y4p`pavBDgF7K;<93u`wOPoZ6%i9_qT!*(_4>&+Wcj&|T{?sB-e`3EP=!^e_ zMB`8yl#W^An%&#IMRefM)_B05qlL!^9>zoXNUMZ{IcTHAxcq^Y@&_uxc-u2@eO3%c zUq{f&dsbIcnX4~RVdPyzO^@BC7%1*c~BpRGP95&@_^4JkpgDPj>y!p1400&6rQNxkU58eqaK?(%L zndOIY=N;bf`3E5^|5liH!RYG<66a+n-Qbt_L-yb;a1-Wz_zUXqz>`kd=*zFELK~`T(~I=xQ8!(c{hWF_$$wvc7+x&Krema7zAtlw38j znU%W2r#>3p>TcG3$_mSx&@q&H2l=5_v^{6V(~US|jqAH#BXAz72D<*!4qY0HmThfL z=s5%|nock97KI0M2Y-n&hsj<>4I+`gD`RU*qrqs4&+{%|IbUnZ^8A47s{F%2=RlRg zuLkTJ)c{=ri)I`gD)@*KuFvXU-k;|hK_PikcYfx-E&R`_*}}`*{J$E`4~>0&x{^O? znYuqwv~F@k8mo%-ry)~=i^$S8xZPDo>a{aCpbK#ciC(ldSRXkm zwO%9($1Eo~fyhMN^$^<=%P`8=rh{M{%^b~*ciA-g!lT*5x^)kMo|CbJFTOpm@g4cP zx$o5iUk~*_m;L0d$m-?lFQh7p$AB;2+ z4?|87hVHJ_ZNeAM8;so#$B^zzg8;Vy=&E4V(29?wCXJx@gj#6|Mk#X(x6h*d*Ng9_ zhV8J|rFMH+m4P?yQ@MH1GEzH9p1h*rw%I0YT4q{ZNCfANx(#sOdWzrxm6llN=C>a9 z-H{w`x;V!DYiB`6q14Mcjz}JNmXJCjW*N23AHcfE|GXVV*N;VzsXIrNQ$@iv=9^J* zXExvewg&>&;cagZ4v=qyasGhaJ;Xx_DIXW3Y!`VfZ6IeXMW+!+dCuH<1xcXYbzSFY z_dneS+*;~yim6}!gtw--bt0^Fme#fXpnuy_fZb*=`Z|KfmZ}k*5$nTAu8l_v#4`l8 zIHP$z((8lTHuIIx=#45`gVYe{MSM4X!gd5QS0Ns+o0pCy%2R^XiAo}L?01|2ZVS-u z4czT1^P#r>z#uNwZA-{7_+CPCWOGD8r*-o zhUKu;gYmng!-EyT`Jxr*MquEY99_)yJyOyVnYAQHxhqAOcBzg-4B@g|y6pU(aw{=U zpeCbSp&2yzQ-n{|-L!%FL$Y>9%v!lber{cH4Ulge(Di-&4O>C#ut&saIveZYW4Lbt zCM5(a)DwsOU44E;&5O?N^wv$`ZlrD)4NkoSn&z>jA>(2WgkypmBVP8b6u^1D9q3+^ z&tgEsYx=m=_0I}0l1)!*iNI=GLy8vTcBm&)Q*!OT*!Q6#%E5dg6+W~a5-AfuF6}n!=$_3t^dMs=g*djyMeuQv+Vvxy1OP85g{gdHc zLxElW@>#eO(~_Z$E~x!v>d)(8tUUqO`Im%tv5YoTdk z@w>HNhQC2(Z)Z2)>$e-|DlPV3_BFVVuSJnNB+AbSC{kC`1x5b1d4guGt@KVGM$66o z_;PLDXYWSgPmfcC5TR+y^AU?loznizF(T+<9N_i<-S)CZ*s_b%=-BXhRrA+--t9B=pXcc5)Z~p(}v<_ACYmNL*6>Q+iE#R;M89 zP1wTsv3XP|&HGKqZxk6zrx8xjDU6hrRj=`2nk$%$-uSgnZOqEm6x(Q|KP%?%iO6}{^kh5c{5*G$a!`$1tR)gf z7-aj=KWpD$`93?ZWYNYqcru^$-48N=I{f%eUp4&@=-C5y@6H8^j z{@zM6xGjwTJe|MF0#695ICB=L%hUZ4m)~1cV^oEIzHyT3lC|^g9s}q5Hg|vnL}XEw z^>;yuEbL%d*)<#9$I%HRuo5ETl6n4scON#wSv?8u^69tpuNS(f-%c9kwUr(F6Tw8` zLLdQ91D?jf@GAs%hrsCT2x2o{Pl__VC57v!P;^v!&Y45Fxc`uqkXCy@R`#`5)C**w znHQpqE}3TwYC^$ zQh?S0GaSHam=avQXdRGUl5_66p${`?bVTm!IET2g?NJ=nWWooHkc-cBlLkGj@d|j`EB&lN?#JksOxNRI27b63SNyobOu?9~>Ym-HT?J zpDpZ7LBAD)qgYU8i0|Dj6`j@?Rtaq8ZEgn<7+Oxmw7f5+Eks59PU-qoVSo8&M6=uE zqd8+yV^q1mLSXmpSpg1^>~+hFTF}PF7K85lkX&se7;6XTE6+|Rp>Et1VZu5VlE?k` z&-TBF+u=GbCY5&`)vt1#s2M#IkwzpgB%!FLULmkM0Y+a(5PTqry~4k)7lFa#TgeCd zUxOAUwJ_^LQsL1@cndLtI_4XiCe-XH77E*IL`&$8m~>1#D`X7!YTw!!tpV;N z(4|U-XHJH|`ywx3OsgF~ZZRkWi^x18563V@#pM686pnZ;XmfSCuoh8?i~8r*CoY~Peg7W<@SJQKjJ}Q_NY%4d;h(N^2Zy0k zri_BA5?iiHOBV@!MQlgOj!P7jG#Tw8aa_9p9fn5EWZovoD>GraRIX#l^D*5;y4FDn zzZ&5B&H&xGxnQrzdXac^L3|<`;XqmFNK;4UzMtwC%9uvsNZ5i5CQ=zQ^5H}Oh{tb& z1{RvXPqXqSTF-cX*d6afYj%79xU)bv(XZ%{&B7(*sk7a$O}kz0?}tN2nW%q@&qMAy zlH@YtvsXp((pt(@=_jWbXuM&}bzMT6jWmK+S`zk9ZAas_0Cx`PerR@C!_tT1V`pP# z>QQM4^>}_qLC0;-qz!@?O`qlNzT#U+?M~eJdTGDQEI1D0|MJn#)}w4yq@6CI7zR3s z6yVMS-5|P1B4)i(hX+#g-;~d`1^m3D1blFxg3L$|JEA-e{OGUDsX_-{4x}dF`0E* z{8j~%>yGHcQi|k`BgnU{u|y0HBqn~f{rix(Su1Gj4v|S{-#{Ez9%rfvA`pP0A}5FU z_vZ%ojo#*FaDZYT`b<3p^i>-)`N9ycCb)l+khvakm3%M6wHjsKAB)2uLHv(;Kz*UY zFAXn-b)`?r2gYgWD;-XwLtrvFLdM$~2b}LR7=0Z;(}vI0B|QI8yxV4h3gsCdN2&7p58$o9y`tz1DAb+Wm9c|zpYxCLm|_LIv&xafEKKKk zXCLV_o$k)VPyy~L(9Ok`h_d%YOT2-b-POdB)-1|8O7nr2fSuqKCD6aIo28z)R0?sI zSETW%cxkMNrBQ|G@NhSb7;#NuD-SCUdh2b0>+rV51_x-f&Kc(FXG+0@Omh3zRC)gS zXXDiDpwQ_?2xs3xqOu>!zt~f-nv;Hhg~0AQ z7=0Z<>!npF9uh~J>cXnE&&;2bs}W@91O=Tp;CIFQDBtJJ|27=`XfF|a_nnmhtvNYDXxu4_)%pRqrI#1n~TL6X^0|`;+{QTirMoj6F@8 z8aXyFtWz5^Nh47)9Z9yjxN%!q6 z4_t>oK)2EqwSU`yWzlP|_vXZl3kzNJqeAj)!$PMZfZL|xa9HV{5c;l$cP)WrPC6q@TE?|}r}ngKQ7eEb*a;uj~VQ>*@wej%I! zHTA~W5V;fTo>r==Q;D?K@;9?~yN%mbZlg_v7vsCiE@3*jxDv*4K zXUUelQvVb8!+YGn;id(v?^ylDyj;YObGfrp80~fxP@;br9aDVSBhpAF z3Ufm_65ro(7Bv8g`y3Q_SrKqa(0hmcE4b5EM{CbgOhW2NGYVhJ+5qOe3v|2F)N7_q zdJ}@tDa6U+E|A2N^0i@T$Ub3_YP|oLkyI$tEu-LDwz}F%?FU0|&jfHC_JMBO4xT@3JE}4y9rvlf(7AR0QlG|| zqML;i6CqRv_mM2q$A!YhniyKA1r$umyCAQUGTYLwY+-qQZFO#3E;LqvdjNEQb&Tj6 z9o53KRH55mB!yFIiet^dVIiMJ$@Z0aGeCb8JAmAOIovQVfx=5D>R?1(MQzNjvS}}g zq#9g2#$kE87r^-*0$qG$KXn3yuj70FkofdVbd6%y*|C%L#sApL8}2k4J)&zMaK^10>LC0M&bH#28P;4mYnR0T0P| z8i09Nj};p88EZDEu&rUI(>UDYQwga|^PR;G-36P7Rs#u7FVw_p-U(*QN7GjbobNFh zeH}sJ8+GQ``{`{0OU^F_isOw9dRiF$$5|^RCkSW-2R$}%{vM0J&J^P=s*7xStft5? zIp^x@Zl71Y;j=1qF8|{NxF~eHaT+?VZ8~PlS@*7dTg%oz7P`hlg6;Y|=2p=E;?m5skHYZ(t={6CWLsw&3ULxiZNI=)1_`qm!HC^%71leFQ zdFH+A`WobLDGEnTcp2{pHr{*Og)h^lr#RH+_+J8H0qzCRt*nQ&ez0fd#J9?2kp`= zcxW@pWsCEM0&Pn3Pp+}qr_WLPIujpLa|wRNNhGikl;7mOLSXl8?G6r5i=U;-9it^hlnr^aqPk7IclSxyW_}QE+fd$3N_KEZ>_`4bB8( zkb=$~n}oKyjJf{?AYE*kEsV{79n3c_0nVGZK=-WuJMyiEo`)BYmpHA7#6`>;?pIUy zNcO!{aptWR*y5PVx=;FjmHiQA)2&7#m~)b_)(ZY zQID)xgb9*A@c6w#;5yua(bo~Q*7K{+c*vG~BtivOC?;yUaI6NBH(MQ706+PsmqSIe zeMuoEHX8;hrY%opn$2fT%?4XeI(@fE>Wjj3T_cMSfcy4r0|y9-CBo$+M99<&vzvmZ z-gYp5D_Tij`^|4n;$c{QNzru#H}qsntaEn%+GyIG8Oj{l4A=BbSxvc^gCoz!RV`rO z=mCtrjvzVe1t%V8FB_PM_TOqv~;5s}4-E`No8bpd#Z%Ce+y~iD!g*-~Ei_?0PRhG}Km;ZZJ}y*oN`t z=wz!tNLfl*|X#WwhyQ6$z^k6n^J+J%xL)O9UN625}p5^wsAq^WyxKDr8 zX$oxs`9cC+v#gufpZjiRc8F&;EzAdEh-)-4VX4Ko{wR(0m<*;qo(?a!RD>c;3U-N- zu?|>KM0#G=BJu6uCS{3Af7I@KyBEOM0~FA8vP@TJx7ltzz$ZFRvt|ClYTFPmUMUyR z#py%nxccQq3byYDue~#u58SAsM{pDy$DD^KySAA(hkcn=W??^Y{QwPgOVdg%NyVuH ze))6EGMcMdXlH*V+bw(E#}*grW?fRAdOQ~~1 zhp}=7x*(ui%`l-BQKK-_v|ojRbCXqXF=B5}mWw-i_n~H9iQ4j(x86EFTH?Rhxw%D& zOn2t^FEx2J_%S_#5KD-BzHPGbfI7Ur&lDV>kn#)_MV>$QXtFr83niky-+wmA4P&S& zeL#G-88$$iO5Uf2pE7<%K8Bseh8br)(56TS%C6m`UCcm4)q>(! zH*t3K+yME$1G*%3WAMbM;eC9T2gnTbl;1OV``lAJ3_u5J<|qxRIZ|O}nTeL$t(i0P zd1qrqlOa0=aBF^7czJV&5G`l}@r3{v4(KxKLYt)Ge*Vny5MI+M`12^kGCaKwGfcw8cj`x=AYk&|q`gd+{y8@u`vg~Yn^P-nIDYbklM1o#g(+(E4`^4YA z^8l{H+k0@q0os;UMn=7NUg64q{1wKk#jU8YIW`u?v-gMi;`~@#uw7s8vzncX#0R%E z^#QwtO9EP(WfU6W3)-=-AF9$&rxF1!GSJ0h{N?j;mj7SI)MxS{(X=kYI^H|6z3Hs? zrovto9rR%$@Z5Zr-+z6}?(zEy&H1-rh3E}$mpOgAX_Mk&9n4cNJtMKepOO|}Xx@Nh)EQbclJOCOmaK~ti4V=%!YX56HGLkr zB{?(c0=TF^SJ~W%<@o%?Ypm9v2}4w892t*-f;7IHK-O=j{8;CU<>(50Lo*Ou3FI@KgPbkDOL^V`RBsYa?c(oiF& zgVuw)68-ja4MYi zjv~YdxEMe;x>@5hd9dtvL4%k`l`Rw+`;t#fkBFTu-GQGihlzL9CNuP&@l#t3#7va3 zcD6GZHQL~OpJZvbqiLSEw)2yu0Pfp+l)wSv$sdbN0SRs3pBv2$E?QmL8H~@y+Y2+A z89>=Omlugs%6;yC9xB!Nr?B>qiCX!~jEh0*gp`QKu0;~wh*^Lgz{LW(f4|A7c)lx? zpMJM#1&S``jqjT@JAy8@R4hh8&U?vR%>R-v7E{#KwBZzg5CEbnQE=`~V?c$E>vk04 z6+-2-0Jz}yJiX-%!Z(F%=ZZ0`;6-a*;3miT5*SZDZrobE{_L<6*AufnN9Uc=mKz%% zT`#CS$^);ZR{8PW71|=!or0WF=iDa(;JOb7m@oM`bUy+P1viOSn~rwppIj6yi^5I% zrRGQJ7!^`+rnMnu_rn_y-|ES2z{oZGs?r+u>Mr4RS8uf5sqcYc5U{_43v|0Ky<^yq zUGfSjGfnur4Q=i`jV&0NdUDspX%zz4CG&+l1l{4Ep*PPMZ1Le};7ciX5Y~y!%VBt# zH>1n<%7Oh~@cXL&SBK`=h=%jPv2EtG>Z*4IhL_4F+y}@`PK0GnhI2VD?uthkwnw(GrS+@5yNR} zW9qngpk%i~{Grg)CRsdYb?WN8ZXO^{sxtg(J%{J~slOYrlz6 z%t3csm|#F7&fU7YKFPq&(WIPa*QNkUjrkr}9gy3uvSs^sE>K=rL}c)X@fVW3dq@go zmEADXcOM+-fa^0tpgW`f(p?PhN2R@D~FJgN^Ru^u;;d)M7BV$hU2y(rn zvi}cX=>0M3ueZG*IA0Q=>z^k&l+w~C!i&+cK}p6ozG1Kd84~w9Jsy%H;=<&BFah-o zaa2C`KkMl~F130>Kifgm7gAwZ#q5pFPrFk8fc;-mpljOlQn<^&f5-U+a~+jCSxIpy z<%lm@pf=6>l(sqxr1Ve&le@&46Ox@mnt$oG%&B zWw1xztam4a=nypc{DnSLgI+7nwDKQ6*w-}Vr3K7$)5)$Q~tg5GI zt5&SYxPJyAFKeU18V9~>U8v-F;3`PA!h$i<;Rm=BKv(4#e07wrhvzU8g-X`&6y##5 zO_EI-cV&(5HvZUoHu?ql@{Xy|Q(7<50_LSWttGHC)SUpA66gk_ zjsN!xRar#jcygR~=&!~8cmdgkcV};%$-c9JurDKyfZ6;H?BR3X|HS@M?HzP2SUoGG zEcuL@%|}}~jPAJ;KWFU)&HFL zseyi=ekjMTjoF0mXVLg(n~QE`;$1Ao)`h?}@CW$(r2@K9ZsyAzruy^7rK@HrJcqhB z4rRoKgq`R2@HBK^8l9ahbVlCW$bOU6Q~f5hU6#)@|Cn5m&ww29pufD#DPauUZ@ve* zr>E&Sgj)UXcWWCOC7nGIzE;0+%ib}y7(r(zv%#g=67ScRXfOB;GgT1EEpGYa+1F;P z%Op0$3JeiFx=0Ydojro<@B!%NaA$Bzr9aS9)-cm&NAOjMtd%6%FnxxLqb%P?(cMzl zjTymhEKw`Rqn3-=9SD4vYK0Y0>aop}zYsjt*(mzfn+3bnKzHC;qwUeh7SA}RvZc(_ zki^~DIt*GB#u$Y1_p2W^Y?o`y%acrwpasmVJmGXE^dpg7t|)~Ff?}#2b&_H@=#%4NqcA1JRd>SzUl0W#Go;H+9ZbOZ^G8Qe1QkP#PIbLJuB>nSb+Nx z=#G&NlKjl+%U-Mw{_^gT|3x+>3ZEbCeynE7#+LQQMec$zVYbaR+N?3h1a2!UL!|u( zZB`HT=!!Ic#C{wEi2!ivfiCAMR!Ao8|uFi9Jy7~Dc3j&V&@Vbc)5V*tcUW})6lUZv<-<_u=y!a$Mst;dLDk= zum%kgBX5k-TQGdfUf=_Mp9}nc$Tu5wS9{aw0s33zcS5?mdblF}fEE|uofqOVWR0Sh zq4Tw(`G}V`@nXsJ)4_je^h>Sl*%fz!=-z>7fBL`5G?=2%yc*#9;_dyC-~j1-jmsXl z>NGkCx4<6`9Et0MDJ=aT$*c8YN{aA9d)mbVX#V#G^yKevq! znZlPir6?6E_7)8+CwU#uO3*G4f1C&Q!C8UsY|zmn-N-rTHah7Tsv}ASb^>?8-5GM( zDT3%C<5xEv%%EToEj0x~%elbJ|AD1~q(HW58eu})Pi+UpfEK)!51H_P`jW-!(_ za-^I(MbDr;N32J_^*Hm96C>67WeKgHD*s)#+Zrk(=>NDHyZ%B&UEkt3J`2isR1EJfkLSvVjYDibqApdX zy%zwuTtF9ljSK?kd9ceXshHt>i?o)mNQ(9@p2*BI!1wvq-iE*UhxhPwO)mUlAWH{& zu2&&*fe$s4{iC2aw@R)&3?p!!=LWhMQA|q(VDfgyJcAYQ2WgT8QMyJ{&%iSYDkMR-bACVU!BYhkS`C=)q?k*#M>_C;8^M8 zo-6B5m^UKCrqO!Xm@p}%C417%?pYoPiwIArX2dRmZ%J@$#9Ml}{3{`Qryn!pV(8A_ z32=FVF8gT)X2{huRY4w-$YpxX3TpTSp|j}v3kQph*lIkM?fZ(4%$})7#%fLyMf!a@ z-VaDG=j-{VY+g~TVidxh^Z=I+=;{)|orz?tz~K}W`Z69bPj&Ek2D(6c)O?n6CO&f- zobYS1oBt85^=+&C-nq|Xrcp-n{93s)WF(}-Ku5!d7X zK8y8O_k>!dDrMv@3Cnx{$X5X9euJ73(lCZR9Th06l-}EyHz1yeB+-1_HQ3 zKsTo)*+iW(r*&RB0#si!s1`-H&0=x0A3MYe4`JI zTyp`2+caP6(-BFLyteyuyFE^6^^5+*9){+FoE~oY<(euHNxbWhDQI?(6z07F`HBMF z^iha@9?uCy#E)VYsez-Nm6a^Z)_%eqhxYW!S438ci{D)>rZA2S4T>-eSUJ?vk0{(( zv;r?05@S+HSN-wczM}!2-^75f{o&7pQ%D%92ANkgbYVSN?yyD_09PF7(taOe{CQ9K_iO75^6T4? zg@1bzuZ`l2R*XKSyw(ZjtD?@v?+Nfw`X-_G+H^62AYgBGxZoPK*#Nl zTfH1hySiLDaVRQ2-3ySfB+wmXjM|~!gn90Rm2jfACOF=ZWj7F~=kV)+#Zjal&>Oof zSA}L36w`9r;x|?OuB>+~p6-wsgksVbrrn=X7zJFXeg?W(MazC#(c~`5O-GMGnC}O~ z8`B&Ak^N<9#ueycG&Ja#Q@&*)J5_-$Z~b(N9(D3OVRbKAE9d%=A0dwIP^~cukgpWb zjdYx4K%CA^Z!vRA8i);$_0c3e+)amN#QfZpVoEg2(w>P%lP?&`HMyP-<^q!bx;GsRyLo{<9TAPaQI zwzY9;;6pZig+!o6VSV>oBo@Q)*mEdL=tH9qJ-IEHg*nt@tH<#T7KuQHYl zvdj3Oz4Yxk#dfiK>fG*t5T*KElZK#i-R&^&{6Ze+Qjv+UkPS(*VQ0LX4BHjcfz*vr zO{DZ`ORI9aLd;%PH-<5kCM$dHWu}wW`$r?^^s7BBYs^nluCqs=mtFSK8<4L8(Ea(~ z|-kS#A7fL{P|8nJy zgdz|ja&LW!;wf_u`rU<6e4XLDoUF!y@{HDP{H@mbqV)8K;y##2MJl7lUpy`3K~q zAXt}6yL_Th9BlFxeSe%h~uK808&onBUQh`rN`s+j-nlkDD&~T-UW45C7qkhPT+O+_I`J8fSR25 z4LP|~@D~2iRp&8Djar(I&)n&uNlguoWcCoqQfe=WP(`LArd0}pgty*PhHiWRJ&tpN>ARcC1Sw*MO$Q)U^G44H?_k$K2eh76?)nWs!4 zB4vnBW*Uf+Awr=dgvd~)l364&Rzeb`!Fw!i&vo9{b=}YBc|Y&{y!Z2e{(FC}@3q!> z9OwG2bslS-YprwdtHPr$=85>(bQ32_MB5luA}8ZK_i{ zQMY>Yu`h$DiQU32dLkdUV=Ol+_cc*&bCl1Fc(qBn?L#IB2hI7av|TmrtC1DiWQVH! zA|-E)U_UQBiq$2Y{rvc-Oqs1$%~dOZ`G(1h-@jIQ^j1GMHX58F8h+bZx+u+C$q{qm zT$84p?VevryDkpEzs&g{XF;1#yO|ID4cW#zZ-LeA zq~3hf{MkX;iYhi0KdH2*yJ=6-D*p)j=yFAKAwN=hZJV5LPS>}6v)^aJ){0XS zuMrG0sC#a`IkZZYfqg&9604i%{?`3hbucSS+a0-+9XnJA`Hfn+WX`RKDIZdCjue(p z*8Wg%Q=av0h{WoSRw|9*rt&v?d$~Oa{Ppf|7+lPJg=w!9R`=VR%hn>Qjo0s)%rKmj zs17~;Zt7;xy{3TT=-I8!hXfeYw-R-JIObksEzUzq8p8U#r=@L|=&On2wzhTr>T$1m zF}laFy3^Ay7S^^fbk=U-RikFDf0fF@@ag_-l9cBu*Q+M?*LpIFw+cz0FD5M@@u91B z-||(hdHQVxG3~pGI*B(vLZoaMU2CjvIu*HG5KDQc9oKmwo@Q|o`dX$}Z&wdrVhytp zclRi$73v9mRO4aM;#xNzu+JmKQ@wXort*zw(k}T^Wr5c992i|2tggqKq{zBER4&VM z`Jbx0Ye~-b-3W;?YcFm9dMVg;RV|e<{X$HDHcROPGQvk3=>~d%7fBsxFZt}w$JM*oig0qqdOUl0_Nj9x9 zUAt*Be4~K~qwDYwx`&VE^aj>`ELsb{T{ZNh@i>t$iGyeA%PsXLKlC0^$MH<+r#F~M z`8u7NdOQ4ea$Kq<;_Yc$@y@Jkd$<{L$kBHNH|{q_tggZgy%qBZz2)x1cN(HhUpT+0OCmv`cs2(JhvzhMzZfYKU{%VRW6a zx^lY{^n;|=E`A7}w}~_x?vopcmpcD;$e4I1L*pz#dUW$^UD_bCSv_V)&N!0>a^5tlcOGeLz_ix|tIIS~PFzS*bhauwm&E4) zKXn^r+cWm^1N2Y2L*u^7%?O{`Or(A)hyC`CA9bW$I*%##ruBuN_?B1u!o!iM_KT<` zM%NXq%YUAdoXa}m(_nM{0I~iDdJ!tpiPzIKk^3KM9in_9df>Ef7yog#t>&lH2r7t; z#E%8AD2aJ?HoFGbzNDwI{D}P?^l_|ipxJPU$|T)s7&juS`YGp-5G;PC z`hIij(;~anLeGGEtT|RUh1J5nQ%A7-5)Z7d5TnO}CfSw+%Y%`+4qbPQ9kU1h8=rRW zj1AKGLB3R@xVOPMeUpJ{Rmbtjyrf4K4|;DipUbr4C?0#t)xz;=3-)~&Ppt02p?fC3 zx`o-by@+|f&bB>!NcYQf+5FSRbEBMWH}V@|N%rccyyoCZ`9V8=@oTNqzPgBl++p$N zle#McDwgsFt>)^m+cn;5mv_G;U}?z)EC7~KV~8U1~_+*;Cha zU896@T<{vLq^}Aknd=pY2>)ZtUnusBDwIY`JqjZKL^zB$_DI>j;i5Tomh)qSC^@wd0s0Fg9^{9@^3UDAy`5t71IneYhrD&Gv)lp44fvSS$agz7ygy3s>vLBK zqk9so%lwJU-%(LjPovrLc+R})z_}J?pRTIJ0M?V*%9@k5pY_GxFT2Zk9qq7Vp5*9` zGESR&blrAVy{A6=sE6xCRd$T7A68c(Q!j#+4qx9;f7|ng%0e(T z%H^~(L3sAl8}-ccjK<&iJy@Ns7mb6gcIEExkcc{)!Q2x-G&aH%Rf0ugjxM|5D#e|gS>;D8IyxTFv76aOjf)xcedcW6(wxGk z7kzv6!G!WcWjpz3Vu}{e$G#QLR!kfMu)3sGoa;Cyj3Y1OY=Fx zSC2_un4a6BpAsHRlwV`NdrsxZ%aaeI*tgk`Q>7H7QW-RU*lz%#DSbbRwoHK>+lG5YG7k?g8?CY8&V>qckNEp3N4585S}ia7iv&lq7+ zpP(+cmhwC%=_JCQ%ICO=?kc&VZd$u_DGb)7W5CL z%{EW|kSTsZf3fgA=}Vf6=)2_``>0T?ZcSmGIOFpWMm?t6i!?eHhsAXJ2NHAk@N<*Y z-X~U~D9w6QY4@n`EU%7APyIq*#2uFbkHF;hBEvs&^t}{qWtT#nr(~c@Of@>oM`ClHrNHS3xPqhEq`kid^rGne8 zAx$-s=N62!4Qqc(H8OjnJx536EkWXo=OX4k$&&t$=CUsPPR=riZJ8rZQnH4#}aAHD;z?a z2MX00p1(WQ-j2~dkJWY2FHILWGYC5QasEwbRMwM&@dhH5+puWG%m($W~8QlfY~o9t8*{*IUo|N8_0ik!I#};nQTCiZ}4HE(8SD) zYwIAJxnj|#1lI~9js(?ZEzcsR~GSPd8$%4+B=dSd}1g-=Z@v=*olIiv^>mcE`Lj0EptPPDkd|vU)9uORemw)CM!2I%s{p+t7 z-HTXV|GVZgMy&qZ-+3;`xRhC5&MG*3{UQ8(xs&OgMXkkst04K( zqA@+mPi)cnAvKqj$8Mx6?5?q4=Zx4j6}w#JQK9f$k&yP5lCg={ZVHJ!h2;mC^^bPR z2%X31#$k2iZtWDkK9xQ6tcC1H>%Q{GB}xM$G_j-Cxo@0%(fh%byX*qRkACvEJ4?-% zm*S2t?UWfzIv%>L8BTw<>}^di%QcK{JXW`d<^jn;oBgZ41;cv-1A|V_Q&H~|64E8v zEpHSvJm!_T$4ox@DGl{8$vLI2oES~TgSx~=P1ins-5mHaX>qsC0gP?}R+loMv+2{3 zMibM_G*bR7g*G25x>&!Z9;I!>Qj5aZzqZJ>_Z?vwcynL>n(5wOTNrXT-Ax!g$R?rv z_=HOQ7+)dwd;E!5-9zUKVoP)cdG4HxN%YDzoTFMucWFE9qmcQi*L+jXz>1k&b|d2q zZQsg$%N-&Od4tTyEJ_dMa58`36)vxt2xY{yH|ZaAn|=gju|HWZ>Sme0;Klx>TK32y zyX;;~TLG>kVNbsergf(8<@Xaj%5x)v!dlL#nmT(vZmM-sOIBGsDm-#4_H%}0tSTdAUoWr(VD@-VT%Nd`tQl$Vl&q^0gnKhp`w)}`#d7a>z# zWKl*IqBGNX;)X3;bU#@GuEjH~)T?(V7Lj;oz~qP;iGQYbT~#^ys(@jatAH3ccXWuG*d zpObE0kv)Inec$cmTXeyu*!lMgR+n-io;2(7^%aZeECMaIxX6oN4ysa-2U>5vv(0w1 z?iOR=j@B0^Rz|00ymU7`5mvlx&QkDRi0i(x{6ndwzM=Ej`|T=L_kmu@G1=nSx%{9n zkFK~6$4JH;H?a1sb|AW072{zQUl@P*O!6hW6{+mEVSVRM`FMO;d<_WK$_lwl;~l!AoH~JGPe(&jd`m#3dSEl^4?9(NDJ&GyegYRgBxMC!8JG zGx8RTH;Ojyjzw{<9*GlrD>zed*1!pSw*Eg}5oj^3LX-3+X*pp18pYc2Pu?`&~eDepi3$Nv@iiZ6EjW@2^sKK_-o_(|qU!jimE%PT%f zn$qumhxfLN)TMs;$i2Uo)!oH!6YnDCKeAf496Vn8=TJpWl$1bzfv*(vSghj1p5p@v{}8N00We${R36NasDg^pW;K zAolq!2dgVHO01)vB2lSrG5u6XY}F%qZlq7-&GvEW9&Pn8D+3)p&#>wv>`N4xpU#h4 zSBhNOK9-%#EhaC&buv|i%V|s))85>F&=vhjl@~hixUbMW@<;7`zR^|(IjRSXWLe8A zHi?~wIF;D;idO3LlHPkREcb0||3i&qf(>bxXvMkD&pX^~psdE|-ool$`Z_S`&(*ZV zB)43!d4;gzEo&Zc;Z5l=53QCxr`X7h@3g*m3bm~$QKetH{rY9o>!B8Uqr%4tfsCWx zNj!t&(HPx4tnMyGh8NtK^dy~j#vV#T!||)>#4-(6_xDwPb;$73zE-PF6L{9;vvjd} zHgA&K;jeU(7Xy}GsXzN#RyvaE{OMQ;MmHa;o3v!vC@=0P>vQmoyrcJ`zf_r?K{u~S z51XH?^}Qb-KYqWdBD=I_LNs6En_1J%R>ay%nlIl?I4QpC>-W3KH?k7M#yfdSDClCC1w03|K9lmKo@N}*IM^5QC~V-F zj9t?&Wf@nQ*O>MeV09Z$jZxJMOVK?b+hfAR-S2qX(0J!mU1Oyd6~UZw%gVlHg1IQ| zwGjnLkL>+p`BNs}RKD?E*ipwpa5H7c@Zk{b`%#5h-TR`+77b_5`>fTq*K!J5kLdP4 zEm0|R&>zzkt>6xR&aG&uGxG97TB`BUpgr@H9YY$geol)pPVr}-k|HsD<%zv7im@HqJCeVx4vQKwQXiqioIlTS z*9h>(3+>6u((B5+<%@~K9jtCs3*o__WUic_bFa#uT5s{3k^bQKZI?xnt)BSXB0VP3 zH)=Yuj!}s_YKxR56n~QVzjnG?bBNF|>fGpX2e)7v_TRI)i`DIO(+$?D{PbusmgA1V zdD&8?nhQPl!;3BjZ}nr}?t1Y;j-q{-J8bu^gf>M{_(d{N-JQ3|7)dnVAO0q-w901V zfN5_rR(Gm^yO)uRe_WWHd;ej>(5PkN{{52C@_bi^?Fr&PI5MC6;1w}@A%nsC@iE!H zxRgwhpOj4}SKP$4BUPn8{Yr_z=$2r0Z@0Nslsj^6RjSz)b2h^B+2Qi9_TjYwse`lK zRT)O4Pit0(i6~~$uG}QP=wmT((;~RI;DwE<(y9J?2IAp4Y1r>imST19W&0V*m#rPB zs`|31+Zp$QUnOQ&?vAGsnNOn4n`&qcENc0bRfkx*R2f!IG`4v&&>Yf^3SMa#CHtwd zUBSl^`}bM*u)2O(p04*^)t@GD>m1?n_`FG({J{+ie^2Jh?{}GGeYdyju}d7th*hBa zHEVO`F4H9em07M+WO4Mg%!Cd%9+e-#zHfgYtJ^l_-Li9GapjrjU3S$5Y1$|{{eVb| z)ikEJ9M3nuYVC|Dyfn6W#9`}^5XWc(US9XIq!C80t%~PZX|Au;II#9(;`;!rYo(O& zczo7lSVAdr=jEr_``?p0vBX@ml5Ho~9DnR#JFh75Y}k56ZJUp`U?s&}e)D_0Me4j# zE~`XW)>K8vO#t zY1VK>NGMb~c-SnXBY5wi>Y-}p_#fVpPp;Gw$Q>>C;$bi2EP5cOWzAgX9G7ApM)x6B zcR(j&=b_!4pOY?Yf_>=Ydna46ONT_pn)r33UDt zg>PDZ@>bj}if;3Qf4H`J>lsXYA7OP#M;EIuyMIXjNo~DcP5t@ylRewh58l&poOu0- zk}|7peqLxdR~O&w(oJ7VDyZJ}scZ8l92A(MjNf%$r&-*xVGyHRjn#ctr+X{Wqj+VA zeLnb|M#^cuA*X0Q@u(68CW+|W`UO|1{QjHuXR|WSeHQAKlAhSTo$gLVOXP{1AmwDb zvR$g1FuFBZUE%K~o_4=v9*Dg@b%Ld1^_y>T1^vvei~TlIXXvSGspic*mp@HxsXu#9 zm^5mM_7c}wDTdYhwjp!jfQ<3LvbY}@-CC?J`>llXtm(Wp!W*F%`}4TJ@-TY@TJ=`= z>c3s%Lck>dQ(T$q_!PVpA3ApVn=o)fxWVTg)-pB zTc1D&g0ESQG?@0*VRc;`vpFMY^SKhKNOs2T>)5mCP%Lv-Vj{fl+IIi4D;~WMY0ies zw0hC8%lK5C``Vh2-Lr)+uTPjPicjEE7gZcKzV%pLaSkt|081I}(xdsQIv|NjLjY!na%GuXvuywg;cH zcpfsX`ea)X;aRWmM{ZoLx-oH#+Ud;2{XRLjo8LuCe`t?t!{|0*b+cY?%kZr^OJ*Mu z$*wq;$Tlc#My-@K{_0(0cEFC_g*%T5J5~E0G``;9GJAUI#UXFP7sBt%=NBX-j{K_b zsT1kO=r&<>g(Z9x4-(TXoo$PkT=9~keJx@6Sb%`-{L%P{$@4pGH=7Opgg<`TRg(68 z&N#BUy3pj^mq78V%*{cr+n;k1{J_4i(Tvr7lbVz?$6|43caTsdjhNWO>z3!7J6y#F z`yxG==IL}F%g{BOjZs`VJ6V+7O6=eMGQ#+p_Uj<$4x(5-XOgp@xiRg1iq)mxQu^|R zLE05zGJYfT3%^#xdgki08DH$Zy*42@ltjT~bEZ;CyQ?iR=Uc%FSq5#UPqM);i^py6 zbF6gZq|ctB!00~1>hcAJ?(@1&HOC<8EB18PO!nt&-}XRPZAQv_RcB_Uj+X{^6Mejz z6+0WZLU7i2sAJV=@@4)==ef7!#?-&8Q-!rKx-D2;KN-Sr>3-D@OY9mCrF5qFo@%h_ zxU!d`s@uMX{{EU#;^>*Nwr(xjsL-?UOVvMfDdtq;J&WRg=r(X)^1J`+o)<>96|1{j zVkT;wp!r8F%jO`7jAwlvef!e zO;fRy%%InwM%}Ev^Wx7#dcu^Zs|Ok84kTQBu$A%2%=g0!36Z+wx)aIOgWuK`JWgYD zJFvRav73S@wk*)GY&{aFM4Z+)bi{MVCw3wq?JixLMvhDH?~kd5S!Tej%HT5=?5QwHY!wYb<^)A z{mz@w;MKIGwdyPph-Fd|-BVbr))eki9ptI7RbHmt*Bsgi`pW~iO)MbR0I2WNiVUwMGix(cHvo1XfEdLK0ZQbBujmNsMUPh zetWrsdUCm3^tRnaBrZ}%m%ln44jXan*bYXRk%d%Mx z)|3Q`)Jj+C+FVonkTsuZ+bYI1Z`0qOut3a4@}=8WHN}vK+A003S=&TUx}K70>&NmB z9o(&SO;`A__eD2WH%nQ5GpRPkP_9vwbEqNhEcqm*-ttF%_A6nlrzoH2^WF8W>orz4 z4)444?Xh}ryRe48%Y=Z*pg)A_l~ma+Si z0jw@7EA!%%pnraek!4Pp)YK@iN^k-Hluhd_{rjhZt><5uwdIFELS-j;h%^{j-R--XrF%9zBeS!T@ z81^|}2&-%BJgZ$-Z`&YEantrV_ay`UTK+3nf_3F27ef3mNMDl4V4ysDLVC;i@QfYn zT2>W*j^Ug0p97<`2%8S1k5IN^KX)3&>YBG(=^bFb9LzObJZyKQ`Pd#O(^OkuCf0M@ z`yMcx(DMpP1h~*rC*eiSKKy?nAdrwL@Bo z6e3T2^sX`}E|6AFge>3(&+s?zW7d%kNv8a{MJe=k|Z zgh2f%ucS1L?g&;_n&aSG)o(Y=z8F)^uha-t>JS~iUv^EFkzr2x&WB~M2bRZsrj`QR z<~0qfMucQfF?SjtH=0+aD64z*)bRTbHtciv8?5ekC%yxkR(9!Y(I>8n(tnU8z3`*? z?v%cjRk2-v$nAZ5J{Ib#@P3S`H!*T#OEqKrG!l1Zeq{fPOc&1_U*^1(IZS&;vASMU z`&2he>TfFxJ|`}0F&T1;+JJxg{nhl7DW5(&oBMouGg|!7e*B8Iz?K?)0YO1p3+px> zmL=xrJ-KreS~X?Z@9&IZb>r%}+Xnqxc^cKnXDtUq>(qzkw_P!NBp~q0fpMSq@@iT1 zRq{Zsu+EymxxBld^CVS^to#EX8_Sn;wNrKpwk=@V`xdMFvbwUim*W1j2-R9+8`Y;u z)B0NPuUMbkT+Sm|eUF7x#w1Rs>6+|4;%gTpOf0_2OP!=8x!kfzD(Na`m*k^0mtc(U zI9Aur=&<0!#Y8$yKf?vz+xv5>W4L$~)92+W=ZiB$ zwlb!tM2)y-%owKUt!xsp->aCw>NXG#(1brw@7OuzD*V)Y4Sq59VcIxt@xF%{ntIvp zpYMcUPe0FoRdSGprTYH6zR&=DFE0HkdzxI0N3DhmN%GkDCnvGG>=Q(6@9cY>(jH#@ ztlLFI%oj8~Y|GIuNJagcZ9jj&^0gaZbu^V+OncK6HEwHGb2e<#FC{H1X|>+-8+2@xuEFx9-%r{iD|Llj@^TVE< z0yP$8h8VYcX1pnr32V6LyKUS` zx+|Q}O8Cl_X0mA|-zoXa$HP+SjovrWJfhl^X)n{doA%ig_ea?KVg{@G;PnS=4g2@s96mSqk(fFA4NeB_5A({6WsOv-a9rqZ zXI%=rxrP}J@36Y1J#-B0zb+r{IYHQ?^6?j0J*}o9)$tfbg~=H1RS(vo8*_x-buKy1 zCE=G(XPl9};BYLqI`Co_-)Fyj3Yu|^+8EvUSlzhx$VYdqW=0r2mFN5Gp4K~V7Sil8 ztI8XHczr8ZJXvLRc{UkSAH}M(cCw3U*=*{ac##bLwHTk`v8d$DqtRg)-49sZu06H+ zi;*;~oHa|vG#^ebh&+u59o!eWLY{wx9Fr(CG=vh0BK9 zbfs)AN31IGW>D3$GQFyvd!Ebn>eC&GCceCwM~*j|H)!yH!E zQ+=s4x%Ht?HM>?K;X*-YWY4~&THV<#v9Tr=)+R&M0z|tORET&AuSdC^t8E=r=9MZ7 zYCJhMU1>&hOi)y32BSNV)omtoDSO2=={_ADc~_n8R)=9Xp?sTdzRMH0oF~st2j6@q zC!}enM!77Q8cNW#Jg-l`_htP~zU;JeQ{`(hl-c?i-36@flX2k}(N?ZXHg3)wqZb>D zHQ)2(3!HsfdF2Wd2j$G-)bWBdTX~B_&b~L^qsMq%gF^8MZSgjtYo_c&=RfA~A05Ex ze!}XOPL%5_Rvlo}r?k`daeaQ;t=xWYB$$r=LAeDBcOILMzIsVcw92stHL<~#z0GQz z%0y%QU0np%kt!FuIFaT@gR}aogy*quTr`g|DocIJ0?9HmF7ZYV6F^-8;8g z=NsA8wOfw%Mc7Vtv=qeXe#YuD4|moOKj-+B*s`Z_ zaEtk;OAaz_Qa4`g&NG*+x3|6eQzp%K_UXwxH_{UQZYef6ysj`d3Hw|UKG=Crfhg~t zpbJKK39I{l_Yb46CFS&rOQYJ`t0p>tJ;1Tv9}qGE=wv z>iqzZlJC-tceV6L1nS~b&g|hmh0*XKZE9TW4fof;=q_V*_b&XT8Ga%1 zFq39*K=~3wP!iW2S=nzvTg)62&JYiDUdd}5n&-$~F%JGnNF2{KKe>}}KqvLKl_^J@)(SD_Gqfc00`HKFl@-d|h_kWp$OIC#+oIi-DF~ZTy=a#z6LcXWzYV_~j*E z|3*(zZ?lQ#o{pb+e2+p7e6A_)*H-%a5IgUD#p-HUGfRkEi(n?URD3hK)9=V$&aA{$ zw}^%AL=V;@(R8QRvTXSJUn{AGlH1V{RD@UxlFryfn$}GFW$f{OM#uMoIiUM@FJhc=BmKK`{+W#k9C`4+Ed&H1 zc5W`Bu0H?l%>SAl>G|0BtgE2(|FhtKty=t9_z3)4BY?)ehr=oKku$+ZDguJ7a6h3u z{`Fsrz{jZ0s`89W1s(B z`|!5^JrO`-&CbWi!N-n(ppch<0RF~1a|F=X^>J|bbAS(8zKG-Z7XO?3 z8h>s02w)?C?tOn}7dvN2zrz>wDgPVREmViMi@UdtBLRV}iwFLZ9oqr_gY&50Tzy0W zY~0-lBKG}zpPBv#hv|P@(}=rw;#q9$SDEjr%{J^WSld>UBQp zb36c2H~53`fA&0x&U5f_bMb(8_SlZ%_ul^0O)O??wGP+k>zB z|E>t2@%QI-|6d&eR7bP>@3Fn{86UC*gN+{MTdeKR=l!eOg4g@^MF91=tB<{)YUKToQ}AtA=$;}YoL=_t%0#bM*-;^g7!2)|ABAFp3)zhB5u3wlU$ z6VAJFjDD{K{iZ5)$DPLjwxg&a@EX9`7$I*DHgxJB*igC+-~}7f8OEK*1bHs7p?JT>*-)HrK_10> z1ZQJ`d?tWiZ*VqN$lqDF5D<*wY}?`ZAK0Q8#2mF0juClo;b1)Pl&@@!y3{r3rHrf4nWXQUm*?T<^?*yhWct5XXAss8wxJGR&X|c$a{ee^&c8v&@2K0;279Y z|E=QA6NG#!Lwj5QMY+!r4T?b{1ztC!r>Y0%ADZCa|IGZeSQd zFJhcc4DuuE7U*}d!G8qez+0S+40oOc9M=J;|Ik=RdXj(!fL;_hn-t_V*DcT|I2-ys zJ6T*?C~-C!uqA;FUE>z8!G8pMfMlGF3U{6?*v{k1QsZoLV2c79iUkd>>|V%6<7{-e z^W?!63N{oUdYnxG@}B_oV!+uHA^&0BLO{TXv%ycf6No_`y|&?O%8-}D*_d!P6|hA> z9jNWhIGZZuW5I@AEMP-L)PQAVfY)~1dFqf~0Z^OJct!n&;wcMxRR2z#Z6D<0Ko9An z`x8l{7_R|p05|SDEy#ZbkS@Bn(RtdyD$d4-v+2OGCgjnJA7|5rJSvNH1#q_gkVj>a zO%P{00QnyPs!IrG(?iFQN4mn0qIp;!K<6P{6f@Ko13(}0=zJ-hO&hlWv7x~SugwZ4 zB_)(#o%v5z9HfQLM)5-P7YRTLpnB1KkLC`j{fFjD zG(V#GkO@HZ9h%?Je1_&PHUP~}Xg->O3MYXnU>ZR8J-W})eT~)$bT6ZO7hTd%0NtN! z0BS6{-_RwZH9;Ow02BcwKp9X0Q~@x| zhk(O?8E^zR3RnP^fE6GL>;}+Ugw`Ik)}XZottH0LMiamkI0T@z#2l~yjsezy4PXbL zakmS|fot>vya6A;7dQ#{0sg=#;4*~a3UC!j1=4_PKst~CTn93Nn?N>@1LOj?fPA0; zC74QhC25Nxg&=xb`2#^BDF+eO32gC!30J_hk zfs=qA;18Sv0)f*&5O4-K3j_lpKqwFfoCCrEE?_Uf1MmWTz)pYzK=TQjKeV6?lmJ?T z(E2k22mpcrTJxrWX#lO0XkEMkWCAwCTGP

S^$0)f*2TJz2TXq_8`w!Z=n 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 slkZu=0.10.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", - "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", - "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.1" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", - "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", - "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" - } - }, - "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==", - "dev": true, - "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.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "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/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.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==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" - }, - "node_modules/@next/env": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", - "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", - "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", - "dev": true, - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", - "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", - "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", - "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", - "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", - "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", - "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", - "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", - "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", - "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@reduxjs/toolkit": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", - "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", - "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", - "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", - "dev": true - }, - "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "peer": true, - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", - "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.8.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", - "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.2.32", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.32.tgz", - "integrity": "sha512-F0FVIZQ1x5Gxy/VYJb7XcWvCcHR28Sjwt1dXLspdIatfPq1MVACfnBDwKe6ANLxQ64riIJooXClpUR6oxTiepg==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", - "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", - "devOptional": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", - "dev": true - }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", - "peer": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", - "integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/type-utils": "6.9.0", - "@typescript-eslint/utils": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", - "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/typescript-estree": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", - "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", - "integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.9.0", - "@typescript-eslint/utils": "6.9.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", - "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", - "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", - "integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/typescript-estree": "6.9.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", - "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.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==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "dev": true, - "dependencies": { - "type-fest": "^1.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", - "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "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==", - "dev": true - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001547", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", - "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", - "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/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "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/chart.js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", - "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=7" - } - }, - "node_modules/chartjs-adapter-date-fns": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", - "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", - "peerDependencies": { - "chart.js": ">=2.8.0", - "date-fns": ">=2.0.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "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" - }, - "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/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", - "dev": true, - "engines": { - "node": ">=12 || >=16" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "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==", - "dev": true - }, - "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/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true - }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", - "dev": true, - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "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==", - "dev": true, - "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/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", - "@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-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", - "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "13.5.6", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", - "dev": true, - "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.14.2" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", - "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/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==", - "dev": true, - "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-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==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", - "dev": true, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-unused-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz", - "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0", - "eslint": "^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "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==", - "dev": true, - "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/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true - }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "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==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "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.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": 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==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "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==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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/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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "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==", - "dev": true, - "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/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "peer": true, - "dependencies": { - "react-is": "^16.7.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==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "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/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - }, - "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==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "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==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "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==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-wsl/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==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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==", - "dev": true, - "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/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==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "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==", - "dev": true, - "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/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/known-css-properties": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", - "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", - "dev": true - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/lint-staged": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", - "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", - "dev": true, - "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "2.1.0", - "listr2": "7.0.2", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.3" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/lint-staged/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/listr2": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", - "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", - "dev": true, - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=16.0.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==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/log-update": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", - "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^5.0.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "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==", - "dev": true - }, - "node_modules/next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", - "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", - "dependencies": { - "@next/env": "13.5.4", - "@swc/helpers": "0.5.2", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.14.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.4", - "@next/swc-darwin-x64": "13.5.4", - "@next/swc-linux-arm64-gnu": "13.5.4", - "@next/swc-linux-arm64-musl": "13.5.4", - "@next/swc-linux-x64-gnu": "13.5.4", - "@next/swc-linux-x64-musl": "13.5.4", - "@next/swc-win32-arm64-msvc": "13.5.4", - "@next/swc-win32-ia32-msvc": "13.5.4", - "@next/swc-win32-x64-msvc": "13.5.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-redux-wrapper": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-8.1.0.tgz", - "integrity": "sha512-2hIau0hcI6uQszOtrvAFqgc0NkZegKYhBB7ZAKiG3jk7zfuQb4E7OV9jfxViqqojh3SEHdnFfPkN9KErttUKuw==", - "peerDependencies": { - "next": ">=9", - "react": "*", - "react-redux": "*" - } - }, - "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==", - "dev": true, - "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/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "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.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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/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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "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/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "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.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "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": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-chartjs-2": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", - "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", - "peerDependencies": { - "chart.js": "^4.1.1", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-redux": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", - "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/react-redux/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true - }, - "node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "peerDependencies": { - "redux": "^4" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "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-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/run-applescript/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==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "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.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sass": { - "version": "1.69.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.2.tgz", - "integrity": "sha512-48lDtG/9OuSQZ9oNmJMUXI2QdCakAWrAGjpX/Fy6j4Og8dEAyE598x5GqCqnHkwV7+I5w8DJpqjm581q5HNh3w==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "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==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "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==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", - "dev": true, - "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", - "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - } - }, - "node_modules/stylelint-config-prettier-scss": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-prettier-scss/-/stylelint-config-prettier-scss-1.0.0.tgz", - "integrity": "sha512-Gr2qLiyvJGKeDk0E/+awNTrZB/UtNVPLqCDOr07na/sLekZwm26Br6yYIeBYz3ulsEcQgs5j+2IIMXCC+wsaQA==", - "dev": true, - "bin": { - "stylelint-config-prettier-scss": "bin/check.js", - "stylelint-config-prettier-scss-check": "bin/check.js" - }, - "engines": { - "node": "14.* || 16.* || >= 18" - }, - "peerDependencies": { - "stylelint": ">=15.0.0" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", - "dev": true, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "stylelint": "^15.10.0" - } - }, - "node_modules/stylelint-config-recommended-scss": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.0.0.tgz", - "integrity": "sha512-7AmMIsHTsuwUQm7I+DD5BGeIgCvqYZ4BpeYJJpb1cUXQwrJAKjA+GBotFZgUEGP8lAM+wmd91ovzOi8xfAyWEw==", - "dev": true, - "dependencies": { - "postcss-scss": "^4.0.7", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.1.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.10.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-config-standard": { - "version": "34.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", - "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", - "dev": true, - "dependencies": { - "stylelint-config-recommended": "^13.0.0" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "stylelint": "^15.10.0" - } - }, - "node_modules/stylelint-config-standard-scss": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.0.0.tgz", - "integrity": "sha512-fGE79NBOLg09a9afqGH/guJulRULCaQWWv4cv1v2bMX92B+fGb0y56WqIguwvFcliPmmUXiAhKrrnXilIeXoHA==", - "dev": true, - "dependencies": { - "stylelint-config-recommended-scss": "^13.0.0", - "stylelint-config-standard": "^34.0.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.10.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-scss": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.2.1.tgz", - "integrity": "sha512-ZoTJUM85/qqpQHfEppjW/St//8s6p9Qsg8deWlYlr56F9iUgC9vXeIDQvH4odkRRJLTLFQzYMALSOFCQ3MDkgw==", - "dev": true, - "dependencies": { - "known-css-properties": "^0.28.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" - } - }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "node_modules/stylelint/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.1.tgz", - "integrity": "sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==", - "dev": true, - "dependencies": { - "flat-cache": "^3.1.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/stylelint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true - }, - "node_modules/stylelint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/swr": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.4.tgz", - "integrity": "sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==", - "dependencies": { - "client-only": "^0.0.1", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^16.11.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/table/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/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==", - "dev": true - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true - }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "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==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "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==", - "dev": true, - "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/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "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==", - "dev": true, - "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.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "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.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", - "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/runtime": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", - "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@csstools/css-parser-algorithms": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", - "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", - "dev": true, - "requires": {} - }, - "@csstools/css-tokenizer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", - "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", - "dev": true - }, - "@csstools/media-query-list-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", - "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", - "dev": true, - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", - "dev": true, - "requires": {} - }, - "@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==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "requires": { - "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" - } - }, - "@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, - "@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" - }, - "@next/env": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", - "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" - }, - "@next/eslint-plugin-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", - "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", - "dev": true, - "requires": { - "glob": "7.1.7" - } - }, - "@next/swc-darwin-arm64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", - "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", - "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", - "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", - "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", - "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", - "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", - "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", - "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", - "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", - "optional": true - }, - "@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==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - } - }, - "@reduxjs/toolkit": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", - "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", - "requires": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - } - }, - "@rushstack/eslint-patch": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", - "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", - "dev": true - }, - "@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "peer": true, - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", - "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", - "dev": true - }, - "@types/node": { - "version": "20.8.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", - "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", - "dev": true, - "requires": { - "undici-types": "~5.26.4" - } - }, - "@types/normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/react": { - "version": "18.2.32", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.32.tgz", - "integrity": "sha512-F0FVIZQ1x5Gxy/VYJb7XcWvCcHR28Sjwt1dXLspdIatfPq1MVACfnBDwKe6ANLxQ64riIJooXClpUR6oxTiepg==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", - "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", - "devOptional": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", - "dev": true - }, - "@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", - "peer": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", - "integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/type-utils": "6.9.0", - "@typescript-eslint/utils": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/parser": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", - "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/typescript-estree": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", - "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", - "integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "6.9.0", - "@typescript-eslint/utils": "6.9.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/types": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", - "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", - "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/visitor-keys": "6.9.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/utils": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", - "integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.0", - "@typescript-eslint/types": "6.9.0", - "@typescript-eslint/typescript-estree": "6.9.0", - "semver": "^7.5.4" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", - "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.9.0", - "eslint-visitor-keys": "^3.4.1" - } - }, - "@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==", - "dev": true - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "dev": true, - "requires": { - "type-fest": "^1.0.2" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "dequal": "^2.0.3" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - } - }, - "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==", - "dev": true - }, - "array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", - "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", - "dev": true - }, - "axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "requires": { - "dequal": "^2.0.3" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "requires": { - "big-integer": "^1.6.44" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "requires": { - "run-applescript": "^5.0.0" - } - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "requires": { - "streamsearch": "^1.1.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "requires": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30001547", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", - "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chart.js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", - "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", - "requires": { - "@kurkle/color": "^0.3.0" - } - }, - "chartjs-adapter-date-fns": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", - "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", - "requires": {} - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "requires": { - "restore-cursor": "^4.0.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - } - }, - "client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "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==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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==", - "dev": true - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "requires": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", - "dev": true - }, - "css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "requires": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - } - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "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==", - "dev": true - }, - "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==", - "requires": { - "@babel/runtime": "^7.21.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "requires": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - } - }, - "default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "requires": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - } - }, - "define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, - "define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "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==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" - } - }, - "es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", - "dev": true, - "requires": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" - } - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "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==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "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==", - "dev": true - }, - "eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", - "@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" - } - }, - "eslint-config-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", - "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", - "dev": true, - "requires": { - "@next/eslint-plugin-next": "13.5.6", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - } - }, - "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==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - } - }, - "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", - "dev": true, - "requires": { - "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.14.2" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", - "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" - } - }, - "eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", - "dev": true, - "requires": {} - }, - "eslint-plugin-unused-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz", - "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "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==", - "dev": true - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true - }, - "execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "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==", - "dev": true - }, - "fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "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==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "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==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "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==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "dev": true, - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - } - }, - "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==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "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==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", - "dev": true, - "requires": { - "resolve-pkg-maps": "^1.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "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" - } - }, - "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==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "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==" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "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" - } - }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "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==", - "dev": true - }, - "has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true - }, - "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==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "requires": { - "function-bind": "^1.1.2" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "peer": true, - "requires": { - "react-is": "^16.7.0" - } - }, - "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==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true - }, - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true - }, - "husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "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==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "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==", - "dev": true - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "requires": { - "is-docker": "^3.0.0" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "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==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.11" - } - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - }, - "dependencies": { - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - } - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "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" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "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==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "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==", - "dev": true - }, - "known-css-properties": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", - "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true - }, - "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==", - "dev": true - }, - "lint-staged": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", - "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", - "dev": true, - "requires": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "2.1.0", - "listr2": "7.0.2", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.3" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true - }, - "execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - } - }, - "get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true - }, - "human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } - } - }, - "listr2": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", - "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "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==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "log-update": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", - "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", - "dev": true, - "requires": { - "ansi-escapes": "^5.0.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "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==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true - }, - "mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "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==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", - "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", - "requires": { - "@next/env": "13.5.4", - "@next/swc-darwin-arm64": "13.5.4", - "@next/swc-darwin-x64": "13.5.4", - "@next/swc-linux-arm64-gnu": "13.5.4", - "@next/swc-linux-arm64-musl": "13.5.4", - "@next/swc-linux-x64-gnu": "13.5.4", - "@next/swc-linux-x64-musl": "13.5.4", - "@next/swc-win32-arm64-msvc": "13.5.4", - "@next/swc-win32-ia32-msvc": "13.5.4", - "@next/swc-win32-x64-msvc": "13.5.4", - "@swc/helpers": "0.5.2", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" - } - }, - "next-redux-wrapper": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-8.1.0.tgz", - "integrity": "sha512-2hIau0hcI6uQszOtrvAFqgc0NkZegKYhBB7ZAKiG3jk7zfuQb4E7OV9jfxViqqojh3SEHdnFfPkN9KErttUKuw==", - "requires": {} - }, - "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==", - "dev": true, - "requires": { - "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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dev": true, - "requires": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "requires": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "@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" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "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==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true - }, - "postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "requires": {} - }, - "postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "requires": {} - }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "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==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-chartjs-2": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", - "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", - "requires": {} - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "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==" - }, - "react-redux": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", - "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", - "peer": true, - "requires": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "dependencies": { - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true - } - } - }, - "read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "requires": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "requires": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - } - }, - "redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "requires": {} - }, - "reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - } - }, - "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - } - }, - "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==", - "dev": true - }, - "reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "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==", - "dev": true - }, - "resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true - }, - "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "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" - } - }, - "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==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "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==", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "sass": { - "version": "1.69.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.2.tgz", - "integrity": "sha512-48lDtG/9OuSQZ9oNmJMUXI2QdCakAWrAGjpX/Fy6j4Og8dEAyE598x5GqCqnHkwV7+I5w8DJpqjm581q5HNh3w==", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "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==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - } - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - }, - "string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "requires": { - "min-indent": "^1.0.1" - } - }, - "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==", - "dev": true - }, - "style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true - }, - "styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "requires": { - "client-only": "0.0.1" - } - }, - "stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", - "dev": true, - "requires": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", - "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "write-file-atomic": "^5.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "file-entry-cache": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.1.tgz", - "integrity": "sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==", - "dev": true, - "requires": { - "flat-cache": "^3.1.1" - } - }, - "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==", - "dev": true - }, - "known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "stylelint-config-prettier-scss": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-prettier-scss/-/stylelint-config-prettier-scss-1.0.0.tgz", - "integrity": "sha512-Gr2qLiyvJGKeDk0E/+awNTrZB/UtNVPLqCDOr07na/sLekZwm26Br6yYIeBYz3ulsEcQgs5j+2IIMXCC+wsaQA==", - "dev": true, - "requires": {} - }, - "stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", - "dev": true, - "requires": {} - }, - "stylelint-config-recommended-scss": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.0.0.tgz", - "integrity": "sha512-7AmMIsHTsuwUQm7I+DD5BGeIgCvqYZ4BpeYJJpb1cUXQwrJAKjA+GBotFZgUEGP8lAM+wmd91ovzOi8xfAyWEw==", - "dev": true, - "requires": { - "postcss-scss": "^4.0.7", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.1.0" - } - }, - "stylelint-config-standard": { - "version": "34.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", - "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", - "dev": true, - "requires": { - "stylelint-config-recommended": "^13.0.0" - } - }, - "stylelint-config-standard-scss": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.0.0.tgz", - "integrity": "sha512-fGE79NBOLg09a9afqGH/guJulRULCaQWWv4cv1v2bMX92B+fGb0y56WqIguwvFcliPmmUXiAhKrrnXilIeXoHA==", - "dev": true, - "requires": { - "stylelint-config-recommended-scss": "^13.0.0", - "stylelint-config-standard": "^34.0.0" - } - }, - "stylelint-scss": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.2.1.tgz", - "integrity": "sha512-ZoTJUM85/qqpQHfEppjW/St//8s6p9Qsg8deWlYlr56F9iUgC9vXeIDQvH4odkRRJLTLFQzYMALSOFCQ3MDkgw==", - "dev": true, - "requires": { - "known-css-properties": "^0.28.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" - } - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "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==", - "dev": true - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "swr": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.4.tgz", - "integrity": "sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==", - "requires": { - "client-only": "^0.0.1", - "use-sync-external-store": "^1.2.0" - } - }, - "synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "requires": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - } - }, - "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "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==", - "dev": true - }, - "titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true - }, - "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==", - "requires": { - "is-number": "^7.0.0" - } - }, - "trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true - }, - "ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "dev": true, - "requires": {} - }, - "tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "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==", - "dev": true - }, - "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "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-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "requires": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "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.1", - "which-typed-array": "^1.1.9" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", - "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - } - } -} diff --git a/src/client/package.json b/src/client/package.json index f6381bb..7ee960b 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -8,6 +8,7 @@ "build": "npm run build:config; next build", "start": "next start", "lint": "next lint", + "stylelint": "stylelint '**/*.scss'", "precommit": "lint-staged", "fmt": "prettier --write './**/*.js'" }, @@ -16,7 +17,7 @@ "chart.js": "^4.4.0", "chartjs-adapter-date-fns": "^3.0.0", "date-fns": "^2.30.0", - "next": "^13.5.4", + "next": "^14.0.3", "next-redux-wrapper": "^8.1.0", "react": "^18.2.0", "react-chartjs-2": "^5.2.0", @@ -26,23 +27,25 @@ "typescript": "5.2.2" }, "devDependencies": { - "@types/node": "20.8.9", - "@types/react": "18.2.32", - "@types/react-dom": "18.2.14", + "@types/node": "^20.9.1", + "@types/react": "^18.2.37", + "@types/react-dom": "^18.2.15", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", - "eslint": "8.52.0", - "eslint-config-next": "^13.5.4", + "eslint": "^8.54.0", + "eslint-config-next": "^14.0.3", "eslint-plugin-import": "^2.29.0", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", "husky": "^8.0.3", "lint-staged": "^15.0.2", - "prettier": "3.0.3", + "prettier": "^3.1.0", "stylelint": "^15.11.0", "stylelint-config-prettier-scss": "^1.0.0", - "stylelint-config-standard-scss": "^11.0.0" + "stylelint-config-property-sort-order-smacss": "^9.1.0", + "stylelint-config-standard-scss": "^11.0.0", + "stylelint-order": "^6.0.3" }, "lint-staged": { "*.js": [ diff --git a/src/client/pages/index.tsx b/src/client/pages/index.tsx index 68b62fa..f1ca0d5 100644 --- a/src/client/pages/index.tsx +++ b/src/client/pages/index.tsx @@ -1,11 +1,12 @@ import { NextPage } from "next"; -import router from "next/router"; +import { useRouter } from "next/navigation"; import { useEffect } from "react"; const Index: NextPage = () => { + const router = useRouter(); useEffect(() => { router.push("/dashboard"); - }, []); + }, [router]); return <>; }; diff --git a/src/client/src/components/Button/Button.scss b/src/client/src/components/Button/Button.scss index 084c781..ea281d9 100644 --- a/src/client/src/components/Button/Button.scss +++ b/src/client/src/components/Button/Button.scss @@ -1,10 +1,10 @@ @import "./mixins"; .button { + border: none; background: none; font-family: $font-cantarell; cursor: pointer; - border: none; &--expand { width: 100%; @@ -23,10 +23,10 @@ &-default { @include button-theme; - background: $primary-action; - color: $primary-text-light; display: flex; align-items: center; + background: $primary-action; + color: $primary-text-light; &:hover { @include active-shadow; @@ -47,17 +47,17 @@ } &-navbar { - text-transform: unset; - font-weight: normal; - font-size: 15px; - background: unset; - color: $grey-333; - text-align: left; display: flex; align-items: center; - gap: 12px; padding: 13px; border-radius: 10px; + background: unset; + color: $grey-333; + font-size: 15px; + font-weight: normal; + text-align: left; + text-transform: unset; + gap: 12px; &:hover { background: $grey-eee; diff --git a/src/client/src/components/Button/mixins.scss b/src/client/src/components/Button/mixins.scss index 3a92aa2..77dc956 100644 --- a/src/client/src/components/Button/mixins.scss +++ b/src/client/src/components/Button/mixins.scss @@ -1,7 +1,7 @@ @mixin button-theme { - font-weight: bold; + padding: 10px 15px; + border-radius: 7px; font-size: 13px; + font-weight: bold; text-transform: uppercase; - border-radius: 7px; - padding: 10px 15px; } diff --git a/src/client/src/components/Card/components/CardHeader/CardHeader.scss b/src/client/src/components/Card/components/CardHeader/CardHeader.scss index 084112f..39a69f0 100644 --- a/src/client/src/components/Card/components/CardHeader/CardHeader.scss +++ b/src/client/src/components/Card/components/CardHeader/CardHeader.scss @@ -4,14 +4,14 @@ align-items: center; &__title { - font-weight: bold; font-size: 18px; + font-weight: bold; } &__subtitle { - font-weight: normal; - font-size: 14px; - color: $grey-555; margin-top: 2px; + color: $grey-555; + font-size: 14px; + font-weight: normal; } } diff --git a/src/client/src/components/Icon/Icon.scss b/src/client/src/components/Icon/Icon.scss index 3b994c2..c388ae7 100644 --- a/src/client/src/components/Icon/Icon.scss +++ b/src/client/src/components/Icon/Icon.scss @@ -1,9 +1,9 @@ .icon { - filter: grayscale(1); - opacity: 0.7; - transition: ease-in-out 200ms; width: 24px; height: 24px; + transition: ease-in-out 200ms; + opacity: 0.7; + filter: grayscale(1); &--invert { opacity: 1; @@ -16,9 +16,9 @@ &--variant { &-circle { - background: $primary-text-light; padding: 7px; border-radius: 100%; + background: $primary-text-light; } &-button { diff --git a/src/client/src/components/Input/Input.scss b/src/client/src/components/Input/Input.scss index a6ab5b9..d233a19 100644 --- a/src/client/src/components/Input/Input.scss +++ b/src/client/src/components/Input/Input.scss @@ -3,20 +3,20 @@ .input-wrapper { $this: &; - background: $primary-text-light; display: block; padding: 9px 10px 10px; border-radius: 7px; + background: $primary-text-light; &__title { - text-transform: uppercase; - color: $blue; - font-weight: 700; - font-size: 12px; - margin-bottom: 3px; display: inline-block; + margin-bottom: 3px; transition: all 100ms ease-in-out; opacity: 0.6; + color: $blue; + font-size: 12px; + font-weight: 700; + text-transform: uppercase; } &__input-element, diff --git a/src/client/src/components/Input/mixins.scss b/src/client/src/components/Input/mixins.scss index bbeabde..708b2a5 100644 --- a/src/client/src/components/Input/mixins.scss +++ b/src/client/src/components/Input/mixins.scss @@ -1,14 +1,14 @@ %input { - width: 100%; box-sizing: border-box; - background: transparent; + width: 100%; + padding: 0; + transition: all 100ms ease-in-out; border: none; - font-size: 15px; - font-weight: 600; - color: $blue; - font-family: $font-cantarell; outline: none; - padding: 0; opacity: 0.7; - transition: all 100ms ease-in-out; + background: transparent; + color: $blue; + font-family: $font-cantarell; + font-size: 15px; + font-weight: 600; } diff --git a/src/client/src/components/LinkButton/LinkButton.tsx b/src/client/src/components/LinkButton/LinkButton.tsx index 645986c..5519a8e 100644 --- a/src/client/src/components/LinkButton/LinkButton.tsx +++ b/src/client/src/components/LinkButton/LinkButton.tsx @@ -1,4 +1,4 @@ -import { useRouter } from "next/router"; +import { useRouter } from "next/navigation"; import { FunctionComponent } from "react"; import { Button, ButtonProps, ButtonType, ButtonVariant } from "../Button"; diff --git a/src/client/src/components/Menu/Menu.scss b/src/client/src/components/Menu/Menu.scss index ab2d16a..ef275aa 100644 --- a/src/client/src/components/Menu/Menu.scss +++ b/src/client/src/components/Menu/Menu.scss @@ -2,11 +2,11 @@ @import "./components/MenuSection/MenuSection"; .menu { - background: $white; + box-sizing: border-box; max-width: 350px; - padding: 30px; height: 100vh; - box-sizing: border-box; + padding: 30px; + background: $white; &__header { margin-bottom: 30px; diff --git a/src/client/src/components/Menu/components/MenuItem/MenuItem.scss b/src/client/src/components/Menu/components/MenuItem/MenuItem.scss index 3afad5e..ff48171 100644 --- a/src/client/src/components/Menu/components/MenuItem/MenuItem.scss +++ b/src/client/src/components/Menu/components/MenuItem/MenuItem.scss @@ -1,8 +1,8 @@ .menu-item { - background: $primary-text-light; - border-radius: 10px; - padding: 12px 15px; align-items: center; + padding: 12px 15px; + border-radius: 10px; + background: $primary-text-light; cursor: pointer; &:hover { @@ -10,8 +10,8 @@ } &__title { - font-weight: bold; font-size: 15px; + font-weight: bold; } &__description { @@ -19,10 +19,10 @@ } &__color-flag { + box-sizing: border-box; width: 8px; height: 100%; border-radius: 10px; - box-sizing: border-box; &--color { &-green { diff --git a/src/client/src/components/Navbar/Navbar.scss b/src/client/src/components/Navbar/Navbar.scss index 4ad1bd5..ea62bf4 100644 --- a/src/client/src/components/Navbar/Navbar.scss +++ b/src/client/src/components/Navbar/Navbar.scss @@ -3,17 +3,17 @@ @import "./components/NavbarUser/NavbarUser"; .navbar { - background: $white; min-width: $navbar-max-width; height: 100vh; + background: $white; &__header { height: 150px; } &__items { - height: 100%; flex-grow: 1; + height: 100%; } &--collapsed { diff --git a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss index a5145cc..5d98535 100644 --- a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss +++ b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss @@ -1,19 +1,19 @@ .navbar-item { + width: 70%; margin: 5px 0 0; padding: 13px 15px; - background: $white; border-radius: 10px; + background: $white; font-weight: bold; - width: 70%; cursor: pointer; &:hover { - background: $primary-background; opacity: 0.8; + background: $primary-background; } &--active { - background: $primary-background; opacity: 1 !important; + background: $primary-background; } } diff --git a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx index 010db87..d5a1d88 100644 --- a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx +++ b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx @@ -1,4 +1,4 @@ -import { useRouter } from "next/router"; +import { usePathname, useRouter } from "next/navigation"; import { FC } from "react"; import { useSelector } from "react-redux"; @@ -18,10 +18,11 @@ export type NavbarItemProps = { export const NavbarItem: FC = ({ locKey, icon, href }) => { const navbarCollapsed = useSelector(selectNavbarCollapsedState); + const pathName = usePathname(); const router = useRouter(); return ( { if (href) router.push(href); }} diff --git a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss index 22e643d..9d74c0b 100644 --- a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss +++ b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss @@ -2,19 +2,18 @@ $border: solid 1px $primary-text-light; margin: 5px 15px 5px 20px; - gap: 12px; - border-top: $border; - //border-bottom: $border; padding: 20px 0; + border-top: $border; + gap: 12px; &__name { - font-weight: bold; - font-size: 14px; color: $grey-333; + font-size: 14px; + font-weight: bold; } &__email { - font-size: 12px; color: $grey-555; + font-size: 12px; } } diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss index 14bdb4d..734ba61 100644 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss @@ -1,13 +1,13 @@ .attribute-widget { - background: $white; - padding: 10px 12px; - border-radius: 10px; display: flex; - gap: 10px; - align-items: center; flex-grow: 1; flex-wrap: wrap; + align-items: center; max-width: 400px; + padding: 10px 12px; + border-radius: 10px; + background: $white; + gap: 10px; $this: &; @@ -24,17 +24,17 @@ } &__value { - background: $primary-background; - font-weight: bold; - font-size: 21px; padding: 5px 15px; border-radius: 10px; + background: $primary-background; + font-size: 21px; + font-weight: bold; white-space: nowrap; } &__unit { - font-weight: normal; font-size: 18px; + font-weight: normal; } &--disabled { diff --git a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss index c56d27a..402ec63 100644 --- a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss +++ b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss @@ -1,15 +1,15 @@ .switch-widget { - background: $white; - padding: 10px 12px; - border-radius: 10px; display: flex; - gap: 10px; - align-items: center; flex-grow: 1; flex-wrap: wrap; + align-items: center; max-width: 400px; - cursor: pointer; + padding: 10px 12px; transition: all 0.2s ease-in-out; + border-radius: 10px; + background: $white; + cursor: pointer; + gap: 10px; &__text-body { flex-grow: 1; @@ -26,24 +26,24 @@ $this: &; &__toggle { + position: relative; width: 60px; height: 33px; - background: $primary-background; - border-radius: 50px; - position: relative; transition: all 0.2s ease-in-out; + border-radius: 50px; + background: $primary-background; &::after { content: ''; display: block; position: relative; - width: 25px; - height: 25px; top: 4px; left: 4px; - background: $grey-ddd; - border-radius: 50%; + width: 25px; + height: 25px; transition: all 0.2s ease-in-out; + border-radius: 50%; + background: $grey-ddd; } } @@ -57,15 +57,15 @@ } &__toggle::after { - background: $white; left: 30px; + background: $white; } } } &--disabled { - cursor: not-allowed; color: $grey-999; + cursor: not-allowed; .icon { opacity: 0.3; diff --git a/src/client/src/layouts/NavbarLayout/NavbarLayout.scss b/src/client/src/layouts/NavbarLayout/NavbarLayout.scss index 6faa105..7b17144 100644 --- a/src/client/src/layouts/NavbarLayout/NavbarLayout.scss +++ b/src/client/src/layouts/NavbarLayout/NavbarLayout.scss @@ -1,15 +1,15 @@ .navbar-layout { - position: relative; display: flex; + position: relative; max-height: 100vh; &__content { position: relative; + z-index: 0; box-sizing: border-box; flex-grow: 1; max-height: 100%; - overflow: auto; - z-index: 0; padding: 0 40px; + overflow: auto; } } diff --git a/src/client/src/partials/Handler/Handler.scss b/src/client/src/partials/Handler/Handler.scss index 03e6afe..02d9295 100644 --- a/src/client/src/partials/Handler/Handler.scss +++ b/src/client/src/partials/Handler/Handler.scss @@ -1,16 +1,11 @@ .handler { min-width: 400px; - &__header { - } - &__texts { flex-grow: 1; } &__icon { - //@include active-shadow; - display: flex; padding: 10px; border-radius: 100%; @@ -41,15 +36,15 @@ &-title { color: $white; + font-size: 15px; font-weight: bold; text-transform: uppercase; - font-size: 15px; } &-description { + padding: 0 10px; color: $white; font-size: 12px; - padding: 0 10px; } &--color { @@ -68,29 +63,29 @@ } &__attribute { + flex-grow: 1; padding: 10px; - background: $primary-text-light; border-radius: 10px; - flex-grow: 1; + background: $primary-text-light; &:hover { - cursor: pointer; background: $grey-eee; + cursor: pointer; } &-name { - font-weight: bold; - margin-right: 6px; flex-grow: 1; + margin-right: 6px; + font-weight: bold; } &-value { + padding: 2px 6px; + border-radius: 6px; background: $blue; color: $white; - font-weight: bold; - border-radius: 6px; font-size: 14px; - padding: 2px 6px; + font-weight: bold; } } } diff --git a/src/client/styles/mixins.scss b/src/client/styles/mixins.scss index f0ff4fc..fa0f854 100644 --- a/src/client/styles/mixins.scss +++ b/src/client/styles/mixins.scss @@ -1,7 +1,7 @@ @mixin card { - background: $white; - border-radius: 15px; transition: ease-in-out 200ms; + border-radius: 15px; + background: $white; color: $grey-333; // box-shadow: 2px 2px 5px $grey-ddd; @@ -18,10 +18,10 @@ } @mixin subtitle { + margin: 0; color: $grey-999; font-size: 13px; font-weight: bold; - text-transform: uppercase; - margin: 0; letter-spacing: 0.5px; + text-transform: uppercase; } From c0c96fb4162c24974379642f3b1397d8d965adad Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 18 Nov 2023 01:22:58 +0100 Subject: [PATCH 008/105] Move .github directory to root --- {src/.github => .github}/workflows/client.yaml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {src/.github => .github}/workflows/client.yaml (100%) diff --git a/src/.github/workflows/client.yaml b/.github/workflows/client.yaml similarity index 100% rename from src/.github/workflows/client.yaml rename to .github/workflows/client.yaml From de7892be9cdc4586fb00c7f8f94c50bf2e139547 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 18 Nov 2023 01:24:46 +0100 Subject: [PATCH 009/105] Fix working directory in client.yaml --- .github/workflows/client.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/client.yaml b/.github/workflows/client.yaml index 97a4e6e..528e46d 100644 --- a/.github/workflows/client.yaml +++ b/.github/workflows/client.yaml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest defaults: run: - working-directory: ./ + working-directory: ./client steps: - uses: actions/checkout@v3 From 682de8dbafc8f06d5087c26baf70322530988510 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 18 Nov 2023 01:27:17 +0100 Subject: [PATCH 010/105] Fix working directory in client.yaml really now --- .github/workflows/client.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/client.yaml b/.github/workflows/client.yaml index 528e46d..53eb6ad 100644 --- a/.github/workflows/client.yaml +++ b/.github/workflows/client.yaml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest defaults: run: - working-directory: ./client + working-directory: ./src/client steps: - uses: actions/checkout@v3 From b8305c4f7c692816e5ef8fa91038bc603c243a2b Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 18 Nov 2023 01:37:05 +0100 Subject: [PATCH 011/105] Drop BUN for build problems, switch to Node 21 --- .github/workflows/client.yaml | 9 +- .gitignore | 3 +- src/client/bun.lockb | Bin 203290 -> 0 bytes src/client/package-lock.json | 5956 +++++++++++++++++++++++++++++++++ 4 files changed, 5964 insertions(+), 4 deletions(-) delete mode 100755 src/client/bun.lockb create mode 100644 src/client/package-lock.json diff --git a/.github/workflows/client.yaml b/.github/workflows/client.yaml index 53eb6ad..45f1af8 100644 --- a/.github/workflows/client.yaml +++ b/.github/workflows/client.yaml @@ -4,14 +4,19 @@ on: [push] jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + node-version: [21.x] defaults: run: working-directory: ./src/client steps: - uses: actions/checkout@v3 - - name: Use Bun - uses: oven-sh/setup-bun@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} - name: Install dependencies run: bun install - name: Client build diff --git a/.gitignore b/.gitignore index ce9e88f..08f9607 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,7 @@ __pycache__/ *.pyc -# Node.js (using BUN) -.package-lock.json +# Node.js node_modules *config.js diff --git a/src/client/bun.lockb b/src/client/bun.lockb deleted file mode 100755 index c5e7ab49110d6067922596bc60bf222b1c132097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203290 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

S^$0)f*2TJz2TXq_8`w!Z=n zKwb~f26h2_09y0dft>(1Fa+lfqiY35fH%M>Fb2E@#(@c73h)B@fPUa9&<)fBPk>{f zWewN>8gRT1&;+yqL%;`c1Ka^_0ImB%09uE416!b+As_+>0bO8g2eKib1;_w<09k+z zPzOdJhHrpT;4Lr?Fas>WFz^cK1fqdhAOT1Ol7M6&1-JxU1|osyz*)c_I0Xa%SpQ3HSqNfU`g_5CVh(=YVh^0=NKN1Y&?#AP$HJ5`aV?2}lOY01+Sq zt`Dv2kpS8=d;%7M&%hEO4t5EE71$220gS*lfDj-CKEQd?zzom{v;q!bmw?m=Qc<7- z@|uv+1N(q9xaJY4e;oJ$`~(_-BH%87)_ie50zm85IVgkHaz%9`A1hSwW6#(sv(Y~SpYzVY>WdJ?2mqmM5JHQ?A0K5RS zC#3_>x%Ytkz(!e=@&c2f+YHnJXuU`4yBTl{um)@ZTfh#m2OI!LzzGlpuzCkUPYu|x z1>@@8sP{Vfl7M6Y?f20BE*J;_LIFu&2fz%l0JEU~0yqSi0&-xx2*dypKqBTi4DyH- zIBx+!doHvmK{mA4iU-!f{uTHJtOD}jR{&Ij1n^^hKfwPTK>MJL{7*R6fn!}@KcEMo z{f_})2p~Vw(I$Zdc+H{>DZKu(J18CpH z0x$v$03ARBPy<_mEdbhw(E{`U@@)f{0A>K4hx|x;JFrm?Y9q?C186=)c@BUJ5CMb% zG`0i))IJ_y7l7K2-kIQp6qP~ea|6ha=4U>D7eMngvLOu(Kn+jC;|$BJRlhe1I_|xfFR&B5DEkXA;3-G9Dsb804fs>pyOyD5;zY; z08v09Z~=$|Vu6c53=j__07(GylK?k>bRZQ-0j>gJWFaXGg`ndt92c7`P-v~4T z&ww`IIe_YF2ReXG;0^E^cnNd?!@v;m3g`oRfNr1{=m!RY0RY*NZ3K7=OaK(XJ75|> zF-P?h0yDq|;5{%4_yUW-Cmafpt^i*Els^nC<5HAg#T|czbi-c``ES4}0O|Pv=v?Ig z0UW{|BOBV=^8;g$N9z?@w>AMNW<-#peGO_T6M*(PXupH@jp!Kx?RPcz)90cgJ< z4xn>)1IUh!Q7R80O*9r&Ag=+a1E^gnuL&SK0<{m#F=*~U?K}X-`vGUj8$vn;DQXA0 zUX(}Ih1!qWzA-M5-xzF2AH@#E%>u9nECDlM49?lOW^_%daBL1KTJupEbp8?GD6nxp zvLhSPMd^mU8p@*U+t2{lfA~?q9RsWYtR^}a=^=g8rZG51^&=bN4B!BuwFe#B1CD?? zoQL`t%@wFlC&(*8itO%?cLQ7jXTSwG4)_7yfG6Mqpz7Xa`9XMr}L6=(sT0`)*M@C2v>(7c%rpld+=^%!imzOa1BTUQUTQdD**DLIuYo6l%g^ykJ^N;@z3o< zZ9?{qbFjy#{te$o{82kmTv3crnGO4&^QbI}FS2j62iZ^?3vhN+wg^C)cL1cjp@Yub zr~}y$8|^_U>d!Ka9rYX1+cGT-RJ1uEdtOOL4C5(7sQb7 z0hqqm=#(j(C88l{NfsJ|xA%7b{+Ni&f{S|=Pg4IDj zRDKAk0MJ+*2hbRO3ycBi{wVoOi^kG zcMv$A^f?{?icE8M^73=#x4hNqpVf0q#lA9^Za2haQd`0e&rK3OBr?-p!^eueul zWL$iAo1Z+-d+Rdcwl&-h2`!t}rhOG0A`Duc$G*!sGRuIEOI_~S9fx7y&5UU#g|TqvTa zndMhqB266sDC1+}gC2FN_06Z{uM5TVu zg_}`5JR!nD5e~LQgs2(`I2XM`hkE;&$I(=S4!%GrgN6=_DrNA%{Sb0rgPkwGEBMuV zJ*d$Hf4&|XLiD*7>ajdXw?InNe#y9Zg?LdLC5#1ZbNc zc(#H^s5jgDbyRXEwW zw3uWwM$`82=U!Pm|tjF!ItzM5Pl&K{9t)}?7uC$d#+8N61`F%ZW;6X7U zHj^;vAT4MD4{k;}NdCKRg1fbUd^KlS#Fc^T`D+X|?zz9c9x*g}|M{pQg8-ly7>(aL zo?=^k2&~qu%7lfXkh@yKU@#dfAm5OGz{H8H8D$?4D$iae|R#$Lj#@z z&%MGfa=Jo91wjS9?0kHD1H2pv z{2#3j0}lguLdAQ18HAF}{_tD|4-0sTgM(-2DCV#J;VA|WD|oce6X*)(nI-?>X#o!! zk^N!YN-4U9iU077f(Pva5*G5?HT~MT|L}apsT~-+9iU}IglQWcbTw*$Q|!s^m_+B0 zKgtM!2dNEyUuoX_aXjJ=k2-khz++xQZsy<;4&xfu?e(?s&nx=6XMGO&^IZZn5^m@4 z*Ac(rIR!TankkgOdI?pLeT-Tk*D#O4lMHxZY=_9|w$4dhV?{d$G{3<>`0FkJZtV4* z`)fUh&?y|C;$h?A>0%G>a~bU1#r32Q)~xk;2gX|-oPoxHPqg;02f4d~!1H_i_BX5Z zx(8ZN!1#NN`n`Le5SLs!vtDLBI=--rwuOh<9Y~_ z4!X0FB6fyMq-U?<#wd(yZwDU-HwQak3feehW!r70>t)16W&gShU?6+~Dri>u^Dcma za0omweZV^Rk1HVBp+HmN_19S$o<5*;;smd@|9)l?o4VW*DPD+n4roD#w*C33jfU_Y zoJ$AwXv0I}PDo>?)Rg$rbjH`OXMIoM1RgYxp3rN}Rjym1S@*0z6`TbRCwK}cA6GEP zpORhoh@<`64e+2H3iHxhM-uIVI(Tr;SvBB6bJgL4J$jalEo19t*7p>4o^GDrFuRn-R54{Cj7diIo|ceC+&J?lGSSg%BU z;hXob!%1$YoxJC{uC{(X_71iuogjX3=Ln?6SX*I5hdz}=t)2ljv}TDb=kNrbqh(!J zTQBnoJTR4p$ZIPd5<2q*Jh(j{`cndL2Y4sPsJUgp;g&0S(4!ud5rQ%(ZXdmPi7uR*+z%dfpF-PY zaGu@Nkco@LLZCSS|f|56Ez0CUi6!zdj zF{rlQ(>_8Hg(8ZcjG*V-9X$QfSiN#!QOG5O1wDPh`xN4$(geOx2CWz$+#9c%O&@Fn z4{DqAfA+la&sUj$b}z^hoP~POxPD4~Q?59Dlizx)*S9Dc;6Z(wb4o~Sx5;a2@St}V zAUY-BK_kBLuD==`p~h*PM_iKNDR@u}a-%c31@*IjKZUN3#3AsY9oOtv+tmmvq0)7oBh5L1Prk_}bXI!2lu1@YFPU zxz{~uy&ia{0zQ=lHCj;H%JW!3-fHJ7(K+VS0 z4|O)d7lRZkm0?{~@Su4IJYvuVXjEmFpBviFJgu`{2BHA(Ie-VnK=s)F)83Z{SXCT* z4=7PV5m^LLWKoHzcVK{FUq+sSqK={>AUb;I&YhVHcjGS145H$WiXsXTl(+_?!b77X zxCBs$QE)+VLlhBxvWQBI21%a!{i?dpcJJx#%RIk)-yd%hx#x6sRaaM6S65drXZWZC z7vKA>q}E8e-5{x5++^YAk$dk)%)zQpi!Ore-BlNl{bb1M(X z!-XAXxqSu*N$2hHk8e2h`}_Y3Q35g)=-Ugs35g!{>YPJ9x#7vh%r)!vVn9eoH_hz+ z^RS6C4*^8#!74yVcP1YF*JtZXf2LkfyrC7csYqZ_8h!7u8LwP&@+~(4LOKdaG8=CQ zC91+bhE?9&zh$#a8HY8oHkb}nM}swYeO&weVdFQiV;t7EM~@el@ANgH&>O$~dkPR~ z6V*7d*Wq*s>$zua`tHE1N*4e}w!#F2gvpLR)aU*3`xou&4+zzVc*~iWU~C)!OOBqE zAKzhW!10Yau#Iny5H#s%a^U^%UUB?F#GX(N%it(Lh=b^XYu^8K>5FlvKEDNo+UK=? zzdTr66-MO8>h&d(+OoH||Mbe`JNhv-mRp&mHhy`-SKqbyrY9g|Euo3!fV2X&A&(Tj z{p9wM7%|9M2cW0|5Slan>w=1-Hf_0O3vfs}s80qE>WyQ^y*?(q`>Hbl5tDcFT@XgX z&b9vEj<0>L>~TP(^}iZ8q;H}12dy~Zumr_A2?A=f0HIOlrPhOgxa{mZ$tp`3%mak< zdT7mts_8dPqR0Yb>%EHy7TwuHP+J~2VA0`kt)a+|w0!piLO9i1*4+HmQ;+wS<)A`e z0YY+%9{NJ|i8D5k?ogY;QdCFcRe@}>sO6WDmK~RkNjuaqFR2P7C)d0@;_F?1{d@&! zh_u(fTr;(uCyBV?chmo~Y}J^iq}OsLp_b@xP8Ph?mR|Nq&r`mh#~iSYSC?}(aLA61 zUiQn@EthO1pHFIhIF(AI0^#~kc78eY{0Z=%EGw$8fX7QSj7aRr%)f94@3kYfaw6c@8^$A?qLPC)G0RF>-cgCP6 z&c1Z}Ij3eE$U(p(-VPcbz2*5XE2{vJ_TWfBS^?61{qfJO+PZ^g)l#BrYHFN*=-<@0 z_pH4#x$uM6H-eh%KMgpq8cAo0zPtO$_d8DSNuR944k`6d1hn`Y7J^wgt^_MqP zB9di!Pr+0wQVq|0U|s8%+RuD!E+EqGdhELyNd{=?STGrYCttKHa?*R{r*8N}mIKHUm^d8K7ie4p^d! zIRaL{?_Rv@TdbRraG(N3)xmUT3Vx?<8@;ht`E8dn2WW4ay=T*;Jcl2D z`h~;ioq}~H)*VpGuMfFZMC~nYx)$Lh05NzWSHo4gKmCjV!J65ivgjQ18QVvdd?_-`Jl zk*qs6-BvN?n{Q~ofU%jhHxUn!2#Q{Pa>Ro9^}*&$jkW4N;IsnHU)JwhcGYEPPjNV? zO9hijSeLa6H@*4W=~MrO*gBEG-`rD0Yfo79O|yktzCMw0N@%UxCmtf}vkN%vTi!Ok zW&5V@)l&?g2N?}-Y7Wl-4B*K-4UFZ0(XxJ>CoKB?t^3WSzg}%B=u$4W|o@-}3C@!$apUdVnR$a+{P6Gz4SO zqT4s!dicJFmox=L+BdbwrS1!~*N3EIt#8wsQC~O}rA1ghP6kuyaMQ!TdGDf^x4eRK zh;8t8>PXRl7Iz*0&_8eZg?v~kYoFP>>~kA{LmKkcp*AngL7Z6$%x!r$pN)-#8H%=19;l;5`O>)!CAUV&x%J^WEn0hE(Q{{unCgukyDj;8#eIDd z3!v41XkzXj8OZ^hWTsdJvr^~;;>lj))6n1Bdq*i}SWW#4OE8ulX2c?Ld(Gj6`k+tMuyJ#B9X#vSr9J;dpjZbzAB?xb) zC}ML2+`j)j^v~nw{i%XD;6QNESL0HQ*&k^`Se7Ks!#(I;ZY+KU~I z=ZQWy;gx>p?;5>tH#nfa0Nz?i4qUM`tgll8smpnNjF9M{>c`V}{kCF~lmV!H2nb21 z=-QQ!zB)2R_FCFrpV*-E{nh38%8hI4D>t^}K9M=e!IS3;8SFfB(Pz(%n^ErYmWYQl zkyyBB+@Qsm-F8HiySY9>L-OOJWGo?_80IS>Y%+V|($kJ>areSqz>zBN>&G*WS_VFG zWhtHZV}*vCcUAPokN@=a5|l%&4J+0S5R&zYf7|kHy8WKzfXME63LvDti+*?C?q*#s zr`WBeHV_cf`1i|4{_(5XpTX`}Bj5-?$h%#C@Xqd|%h$aQ2=xWDX}N?<9oM_lZPUxw zF*TNskK9P#fa4oiW}J&btqsaaj(uzV_Hn7J9S(dXDqAiY%+vhEVl|!gUZcFzc_aB(x!+1jcdyNbUGm9 z1$;JhbLLOw>keiJYz0m(0MZJO@KrnOQWJQ-EuFqafRKh9*=$0m@=n*iM)tatsXYM* z77J$#El)Ody5Z#^%ry-Febxa&91JQs>%xxLd`kL;cB66>^Eu3CcL1k7aGpA<^I0#o zIqo3F;c|Rd5x_GoX!%5bWSc599(^uB`L9ZZGO0*Be9PD#BLf@Od;<<-`}jn^ zWI4ZpYts087aYIxoV)(`J#Y|ZqrTl@qR`RpOB?2l+ct$f6bvQQ=fY|1qQzX|k@lxg zI`YMtI==CK`orlW+KsaQT<6Q2U^!>X}3-a83ZuMIFz0yYt_k zhW1*T7!6O2(@5Lr;1kX{^X!SY0D_%{)Cv~^huSp0Z{UyTOgjH)K>DJ6AcJ{jqNX{s zLqMv5b2xC?wffTw(`Ls-R2Mpel@vgz|8$u;`pHz=(G)GBE$HCdXUvlAbG5`7yXmu& zTX#Nd8sl(ZXmW|5_VjC4-#MaY$q9f^JRV$Eg~Lf~+AG?0+#4rcf5z@I#^D)q3*b<% zUr~1dn`afh_=Cg&2ggfl1AZ5n+jUKAk`BoLT&ty144hV=R{z`&{hJLsb1`s86A_D6 z^Oj%ERk9p4j?V}PJtS3BXb9@#8;#)oqc>kJ1TiPTdJ1so`B2$J$l2d zH1IK4oQT8A8+TjtfddGm;u$f~X+ILx$;@3otwby442FG1|`y9LY>TyAB;}y0S z^-xX1g;^ z{loW@c0i)i4;h6XPd3pyvD2!_R^+7>)qIKm1CUmLsO46UuqjDr&gL_lJoWbFH#st> z1_X=WGal>o$*b=@b^1RXNMq!t=1t9kukP?Tr^aavZ`6PM_b{pLbz@pCH_k`9_TVDH zBsHc!zP>V#fEANO{N>f1eV1gP+_D?G!!u-@fdYhPM)ys9F%WsDS&AW;8|iwMnm4tE zsHLOU12r{u4_5b6b^lRwkPjI)R7@NvMumr;`QWX;Z;twWdt{q6G;?mLR2x->!U1&`Q!vX1mXKyuHh5kxrhUxOM& zeiEShU@_acwiHKcNlY=TN4%M)+v zy==a`!Bd33#e~;6``}}DJeXee0jSA&NdgeES<_av-P-nucKZMkA}G2V5E^AppHuZh zL%RQgfRIfDHE>;*hJ?E9S+x1Ixtq2DBIAj#0Ec{+`W+9??fmoK`!IxYd?2!%&Iuvw zUUytHW#jhb42Of00BH?s1D6fHwA*2~eBnUyV}rcPL+umEM8mi)ITrikv6cJYfrYi| zqi!Fc*oO44ePSEZ7yEx0+aS61$LvEH+ejuwUkIEPx-s+dU&cTNaEGbot^|bIXZfB( z+O#=<*TkhBG@T+^;rqqS*K9lL#b1C!$2$xf69?f-x$U^%4>RU03pAs`H-R4JkjKi$G8=E6`>a(Z2_57 zJL<=}t%ILu2+uK21Ef75U!OX0eCfGuDMn0@VARLQUL&1!$0vdzWjztp$SVxbYBTuG z^-ouV8bz3}#xfNUvIi}mIk(f%3!+&-#P)dFzoXde;k!qMq5+z@ncDBY861#3czVvC znjUt?n?=k4_l0`_p&9>>?vIwV8ga*iECX)s#{fADkdxad@4DoI28z|tIyz+FGivq| zHvU;jZRkfY?_JpH!RvqnmMOfFKbEXT-jhJTPgZ!4tG8ae?zM)B7;s?sX!T`MIuXYJ zRWvA7SuwQ3;yTG2+9!s^_ZU_z7JM@I*)cbM*^42)X@)!;)Tp1Xm^1y;5f9YS-Uz8x z3LNyGN3d2-IKwNxoBGfHxZjGUp`0fGIRcO~)($#J9__~4B# zSa*hWXzy21^E%)#C!(vUqf)}MD$_kH(B2+A1>$dP~~7F@sM z567y?QTLxOfWz8*{&V-A*L~WV5(jeo z8z3Z|*gY?HofBO7G9aWOs3~2BMdh^E^!>c?&$bY|47k^~0HhTlACDWb1Zy8cMBg49Fkjy8(v+oa{ObomyK!)oDx8&rfuJy^&cxA zS^u?!^oOPcLcQ_v_r^c|%B@e{D5;h7E;<7clJ%zccNe#wQB5Pdq;|faH-Cf!;4$o51%_axb*c}#$n%ODIo0tdGx#b zo5nBbx||`feYm#;kPd((%cd`0ef8j$5(hHa3<$+TI&|OOb;}*%Y%Jsk$Pa+D24v%| zx(`3^c5GI>4@yhZ_y4fsa3~H$Tfdh)B2+WZ=(phgp>k8)S9)MUHjYbUUwYvX2C3(9b)bjn47gh*~vaA)o1p4ONw>fU9-ck7L_D0{HW#GV< zYqnw!ULnTQJ7t*obgwRzFjo%`>79&y7daKDO(qX9zd%?z@gsQ?)LhwKW};}VJTokB5CY34>lCF*>dHojiG_9VO_{egWXY=qi%&St`nB;$rc~Q>Th_K_U_A> zt6D>bUoXa=)X$6m`Tn+9*4iO>Q|r!t^2T18S_X~LL^TI$h@yQkE~xvd0tZ%1?Z@A8 zqnI5YcI1y2@0qog_J@!!hEYbr8#wSShsQ==UztzE`04>`yrLX%?OP7}*J>Q!a-dhb z8KqjQ6n+(?({!eoNgOlsnyEWJY}#4M4R%y925U!J-A2n}{DMuas%HOvRo5&ik#!*GG==P{|B04o(bYjV(w~pSC z-OD9N%?X z9+`aiIq+^e#hyk;)OSxKq>Y#=_VZB`^ndp>{_mbfiaGr6p2q+Cdm8h5{ll~2sYCjT z6*X8f#p)O=(kXWcJGyeo_g{V*+jjvh5_|x%RqEBT(||)(tldR#e16JtYbzKBv+Cad zd-D*HM-&t|6s5j!^RyFBK4w65(>f0t+mIa(se-bX9XzJ60@v0A|^ z9EvqC)bv_e&hG6a4ms}3X&4u{KCst{H89}J1`fsJ152+xtn1*H*}pEuh6=jBD%Y!7 zAnB{u%^pDxvg8lFw5_50#@kE50gX%p$al%zgRu&EyCCncJEE({Q}tX^y~d(gMd*d7 zp>kHOp6UI%-k|Tzq&zY`Ge_v#`8U76^w{yEn{z9$Ui;r6NsBCv@vnc~mQ(j&#mYDO zse1iKt??c25^pcOdS_{f77p4aDY*J`<9eE};E;0>2#;Cl%ZmY=@;qly($254*CpL_3aA?q_1#g~5A`8NkaqVgE9!p8SkdTH=oJ_R-M zgr5F$`sPXZOdxwr`)c4*1na{A9LWg3UH9-W?OJxh4hU@T#m-yY8zOOz`4O9yRxP;( zIJEBx8uBkd+JM^5-@N%%`!>`0Y?7eX0?r8SGRQxfs`B|tHSykjpAQ`Htr{)oi_!Vk zli%+6hthLkanDi4bTzS>^m4QEHFtQgF}#I3))>_0o>ZZlqlxv|f*M z$W`Gf*&z0HZn?bgg*Wy6d?p~YRsdV2gZP}s;G@vb-Xr>U?YGZ-dw$^3<5Q}3k0q0?^i*nWDoc{5a)J%_D4~leCeE2 zB>qzPX^V2K*oJefdh2^deU9xjGPq;fyl&utS`Hle-j&SvXl8;*zCrQTeSKTZ4QyP? z66I(FGlsI9drIht4Vv`daZd@aJT&H>67&#m1?%>9=jQTX_qOxc??pL>B!;}QYs@__ z;Kl+(p0FLYsKXUa!2|Yl$=~Kf(y35!B%aRTDym{JHz_{7J`+yGgV77FFwJfkLGDGtMTecO@O{%;=v00K&H=1iWD5V$LB9oXLj;A$* z?L44rKL;4yAU}nKKt}-qqclbmqmUv5w%h8DKRii-va;|{eTsG+NYEd zzUwkU4czYzbnXprMC^k{y-1wFp(5**wGdZf2 zP0pq!N5eh&(*+vYd-4$_`qTkxLGxL?D&{*VK+jJM@ZC^EO9+}>8Vy6PT((?<8$^V- zVaqCmmEma5R2F7AX8EbL3Aj0dcp?rBCO-*2SSAumOV3p?xGIo%q_xLc+f@;ScmiKQP#;DYMp@C*{pO90o{VHR%c*h0@D)UmBcmu=G2TA|LMqkupv z=8kUh;9&<2JsH}9q@n11pr?R9)?|SSBCe>Jq0a2YR>5M>D9%<(BUUnMpvSfiwZ>=6 zh_y0K#vG(9T^H(E8;)XjnC6I0pI*IsmGte^FBFVNsD{x9X0$Zxtb!k0Uq|14Oa?=f z1py#q&X=l-!~?-ptY6=})OvRs=B+RwoH0-n&pMgifLJyi&4qx99|9$NvxAX7y=4ip z^wf|;NI)V%fc*eWiV)~zc?RDZiiI)l>={f(G@{L=ZV`dFNid>FD>2{*e?Lgt40~wW zsf{BlT7bmhq3R^>FImxkR&z+A-o(a}gr?+CL|Wqr$~r>FJT#r;{|VV#P6gFQ@G83$ z1S+|7684urcklEP6WkS~m3FTO1^XEj2I;QxJizjylQrbrS7)PvYTdNil?y~&Z^FSa z8E0>iM1f|zHV?4Dbk01sYZCa_MQtqY1@m$X zg6SzIITo&p1Ot2rEv8Qh>x zt$Cr5c&N_CLm7(lGClg13a{PM114tyTrrO{6SvI#^8$4JJjozu3V&d4i0xtlYMeE60luw6xo4iX>ev}n+5QAnG3y& zf|0<8CaTcr#Tmrk=u=QwXU2jT$x>GhTi{d+`-QtI6D52Rhu2VXGJ%To;>c8k>u!F@ zgQX2TcVL4NjwL2ZHlWm)jYL^puvlINmBN=`bxozfKw%0LU8cST3B6k9;c4ksgNWQa1BS?2P5Ou%8hn22U7F9VMqnfIvH3 z=F6pd8yQ`Dg$)+9;aCu#Qw~Bru!n#|QZQ1magZb#IZZXi^}r}cJTPOX5!d?YD6p(Y za*u>H(3IuF8A$k~a#NYa<5zc(^Gimfne{M7v>=s}g6?TvRkJ?x3v}zTpwfND8X}QD z0y##)2C}MZY2EJU9u0ku~9X`AB#DH4b^_B{g z>kD7oLJlO7?0UO*l7uE>Gai4#4RI{~dM>`L3yU3t*INgFlU7WUu;lcM@1|Lk2u(fQ z*-#(%Ye0Mu*f8kW1p?cChQg79pdYS0d=s|29%uyft`$rjG35ZNcyR0sKJf{F9L$8b zD3UaiaAyNa_p3t~jT10Zax#IA^TNH*q>~=bf$n)P$bh*tgC%3@NkRUeh3!VA=`c5@ zRBwNcJo8{key5@z_Z#Ru1uE`6?xZc2xxsil3CTBS$SKfvs z-%&n3Q)4i}0)wV0Ho84$G2!MmJSf;oAQS}S2aSnh7H1 zVrFD2mbVf3l6Etq(J6n62Gafj))gV21P7aHA{h(|)!0o1Lxic62z$x8h6C6|4!2JX z-ZX`dr*+Pp4h<~nz|0s=Hq*(fdg2AHV}_r@^>8E8v}IFxpc-lT=10lC>0Bg_Y7!g@ z3%`Y5Wo^;e+Q=v|>&j}Ch8rn4E{m@BDZ7?xjf&wC)aQDvSdS zY^H#Z{Dd1-4zhp~@3?l+1WoqPNi*2+gpVE~zMIbIG|ZI?^jvQRHMy%eV7uN5QnO@0 zU{JyG(W!~1iIEwXtdr|5pU|=7Do6vq#d+50i1HaASItzfTmH@O&qB1SJrfsj=~efaUNib2lhJ59n?MF1g>`iO1<3Z zLFG(gK_n-Ixi@h_r(Ce+18n(J5dTg|-eT=TKblrj;o5ueHMrjCJj(Vaz_gQV4byI? zBd{8p9DwE4P_^@bp#6+aWS;)!OV18~Ys#~k^HhL7vS8A+oahGd?M_3YH#xhxOL&Bz zv#Q6cXX-M3%Y&fhmrQdVS`*d>BHW!0?h}LT5o{SbU|95Nj~3 zgi)foJ?vFgpxMtbq~;--R%a(+H42E@;28wuqeK2pZ<1jpN2sHbd<-)zQj1KBXBb7K@R!j#T-0yXm znQHjY%}NENiwOyg(RWuM33ndMY~xiC-7y~GZ;Iq|3fWBaPJCn)BmFj13j@YE7* zE31enc0)}j3T?$39Drs$vX=5V#-0_0I5k4C^MHc=T#x~9bs*rn-U=FyN!y+679ikF z;L3A@$aKsFt0VQAig@xl^aP&MbBp;X0Dn$fLyX}d!oO%ovw`Bza07#X9qu({z@wx5 z@d(p5Z92-`t^(BDBxg9UjzWESSBs{6Clk@KF(4}Q8W95DsbDqm!~=`hw32n4V=g3EZ~k;^j$U0g~B zRM#70n+ABSjM1(I`hlI4u@R1-S7xiLwZTDGE>Lj2aR)NZJ*bajqZqL)p17+HH28`% zUgvCmBMSMcTzPD()VrR1wKWLvFY0eTdmp2Ajiq^1F!d4ILWdpi9Nd+Uz%yIlSXG=C z8L1@s$QpzVt@`RvfmXCe>=^`!{6vNdUm*qQ^vZ2KchxwN%EQlbvy9@DVoz$j27?s!NRP4;gRQJAQ07OaLq~cGGZ|# z5sQVfIUx6zAq>-Ww~|$qrjmI?EgUUpeeC^`dH61-_NQ1EnqSE-Fr5f8E3u9*zLLpQ z3f=!iMM(=_H$9Ra+LWoFT2e+&iAh5kOl$Q4BBX}l`GVmUKO?hfEC|eDr zuo5`YkA)Vxtcm-TjkU?saD*n6la9pu-=*adlrc9>Nys*$7E@Ez$W4z3cJvw8Qn9_} z{b;q}&}59+J{87Z53CQf`r!^QWYh4ZNB0+zn?A|J<_Ys$F4}O$(aJ{JA~BpXkm|;E z3>E@csOh~DS4I$Xz0vgtR&&94A)Z7h3!(6BvUn#A)g3D>4)vOX(HgF%3|YV z4^#&9UXB7(wu4`XULrqe4aiu#EMXDW`1xZu%>a|7%@&~6~w z7nBKOISCts`a}~oSWcr;STvb59V@W&pe*~DwoeOH(6C5C66B?f#0yw8q0^8=`lng;CXj+OvAZt z(|~P1gLgO_rjFz`jfCy8l+Ku>DcT-XfNVb(B(`upb~aOW>6d+c?n*eI2md0S4A$X- zHQtPiv-h=G3}FGG1~@!NyZ(^Mi#zg}HcN@c1nZa`wn!khEq6F;Y9LIqCpWnANiAqr zm#=#EK3EM8mcF52>#?A2;;uDt-LI_jrq<^;ErMvkwH^y9*DZPCnU>pRL$KPJ%C(yi z$o6wV^7Uu}us!bubvH+=fbP6F8mMU}mvREx^~Syi`}XPDa3$^r#4b8^yJ*!gz$+MH z(ZhMy6ysg_;C^hFHsq8F=5kV;X0ZUK19zT$E`p3#P+M6l1!U`yZHmcRk)ji^3d?(S z&CoTH^KKTlm&0k@7S5;M>8#DBCsR-0UseaxWX*d`viBNf5YmAi0m@t{oOmXs!Hh4Q zB1c)I>sc0goT3I4m&$dcGD((XiS_kNgT)P<@k!@HxmA-%36PmnA?tlox{P~TU2TFk zbmOeK2z~I1V-83JBm*L7iIe8pcug=#1~nVXWO3#q5Q@S|O8(LzOi$(W)Cl5-*yBsb zUU0`w66X!EBtgefXe|mWGF4(#^$IwpV3~n03;c^htsFRZkGIm}Ha#5Y4fa|;fS4J)|_lss>9nc&>Y;eeC z66so8F<2YvS%)hI_$q2X8pBgq-jU!sIj>qaF``w z(TO7FoN-M9f+GvyIxq0f&EC9HdLU&>k|~*L%qL#?GC=tR-p%LLb5sna=A@u(^J=DB zX+gsMiXqv2p${))nR*5Y7nBbin^zsZJrkt832fm^7S!(MK)0U@l9$+OK+!(=L{Y>7 zE`(*pq@!-Yw4c$=d~8i0o8wh;vLbwX%=N}oa8rajcc%c#&rK?5Dlfks3v~I!o!KPl za2gw9a7Q3v@e_nBHw{4+@=UkJs5qIJgoOc*%RGG!r_rNnIZ-?yNPsIX$)O2ie|(%S zYSb3YVJ-LAz?AY*p>MPjs&7KOM9{FGxf0xb_`)f|c^n0HuFmHR4`@VY1P!YUw+SO0 zWS(=nM?t4rJSg)13=x+}BQB4Kf^MV=TX~p@%n!p+NbBSuq+%lZ$py^~tS>HthV|$; zI~wVET{jwTOg+lExd8e^m!6^Rd8G5TahjqCTHt7ZaJ)j)J)bF@L> zPJwW)hlL()-bAGL-9RJYQN)D>$ng-*>;?PDpFD*ZdR@#d93t-2ArlMzZ~O;epxFoH>mp1K=-1} zMtaMqbooJ3I{)b2IFxR3)$$2RBgQieyWRnQ1xe}p_?gyWL)o_K#7aYSTK)AKr#SI7 z9E_mQC$56nckV$Ib`_x{tgNJb;Oq~G2~vK!s&x0rgiD-o39qQStHM00;7+b&Z4g(Z zStCp%>Mj;5QEBm@uPs+WQA=B-v=*~}@^{x4oVZ_I{Oli1W);Nv_kTvkYH+!O$0wl@C>`(}~`etNrdFOd!hxg~sNQ`G`;F1fppp zv@F6kZUW!+#!)h?Od2eer_IRE6OOu7RRT-v;?!4DA!(jG0T%G(myF@45Qm9I{~va)#uS&hIfbd+R07Brco z&r#tsTR@Xf5GMvtYVNY+;T8`V(xq#KcX+vzO~@h-c(n5~ z3DcmB+__8&8o8-#luRSHUABi0Qg{<)uJAx0H>n^WKc`Iu8Fwo=GmOe?yb3`+x>z6w z3&+AWx{!%vqG4=w18wWEAlAIgQ3c&q`_)6^E+XZ; zLFfAwmzrek(j!85w91hTts4fD_{5>`iZs0B14?PrkKU#~zcet?K~43`_ZF?z`JrQ*a^Bp#xbfHc1qV|22gID3~BQ6oH z3fJcWasI$B4aZDmp|Ui&;X8#dHX*D{w;x%X#)TIpX2`{~JsdOA6t2ycDK)7?Hd)yq z-*AIS7EwUBt-R@#7G=^Ey*XCahyRtIY2xR8GKL0qX5Iw!Q*6%USdh!V zEEQd%G7-~Iw)23f{p|F64Q5Op^#`K$2rZCjHEA^w8zuBhbL94x0-b+Z2~FWFckOIM z>djCVy~iwEbgHEA)#+HasS|rz6{wzf@QV)^Q>nB|pKsofN`v??K0d;v@& zNLMZt;(8--%I&bC6NrO5fyxG4V-XFO9Ep^bo=H%KG!sa(`%T+W($NHc*V0{6ypnLK5_pVKa+l_$k%`@G~tHNNWU!52!B zjaMe>ofZ~{MP1k$-OS4i4b4mAt{?)G)UYny(ooLH3A#BcY!FOiolB7<1*ukyZ3;ou zB$9MqhJHA|$sl+-0U^3O1t^#|b`rllcu8*gxuCMEvFeXc3DO~d>yfA8raD6Rtv&=) z*BkT8229gRwrvBh{mlIGoRv(8WiX^g(h&2>4YEF|C_p-V(xhV7anQCXni8aV#cqC= z;XyGfP(i}?V*@n(k{#YPeEQpFQ1k~l0@u*Y>E$4nlfqQQ2n#L5ECHrBEjlyo11zaM z253t0&5yEt)14BbccMUgNF<_R>{S#d7YX8%tj@dW!Wt%kBl4hN`^f=1R-x4D3LYMyENcP$W&6`1}#Vm)E8v?1K0J&*rsw_BZuts zAd;V05GSaE3sY3YmB4bqx}{zaZUpv?#6XzCl?%eGnTD1;s$wwpqbeZ#PnFMM=Mv<^ zf@rCI2+&jmnYKyY^L$y5%u53$^WGzulLZ>CH(*OEuj%T()qww`sv$rH)z6o%iYV99 zbn``yH%PSTa&E^zWWG#VhYrCQK(`)QPA0>a=bT#QyB${Mz~tma#2lL$5XclTF|A1W zyUZZs4*(|=)Iq=Y4F5FK&?$r4-JrZw$=oz2%3^sY_-qV5$RIv%qoMAX9R>I$gMITk zMbDH1ggozvBAK_%$<88YD>eyh`a+6fp2b3qF+uWoW@12Ok2(=zp9 zX9^8$=Y?@ij=uk-oams32zSXnTW6XkYh>xZYf>w_odN=?6mr&&*Etafu$YqqDso(b z0`hm?L{HFkUT;Q_^d@j^O*Sk)HX>Lf6XTlH7Nni5i2i{Y5Y<4LQZcSLOgw`2H`_LFa{WO`^6oLITrzM5CHF`*Bxr*(bVl2=RT8Q9!_rJZnw; zy%wMN$i``-2}K!oEAKwJQHW0}SGS-ZoWr()XNO@;1LsxNy)NQM*bPSsW_L!|9BUoM zA_-qaEX>dvM4|mju8+uX<;w2tN(?w36qO(06-zR5n+M^QrLt*!ED(3UTjl`z7OJhF zd#=Qa3-2hCv~#;C&Fw_oT4s=xvCldXEGcR5reYm0l&PTGFL9TJ5iy^S@Y$7V zMpClt6fT9sVh~k<_e$c0xvk*65nLxKOVo}f#A)0J{FJk)Py4ZLAD$H4^e^rsJ9BOa zz<^CBm=FXE;Kn5!8bbV3Zt|(14Kv~*6Xu><9bet#-86Fe@-FisM3ShB(~<^tVlrXU}Z5jphhZ%sYiZhl#rju^!r1i2w!@n62*S8RfJC9c05dnM&6a~Lnv~QOh0!z}u8VxatV2_2ClfWA zz@>Q#^<|Uq;S}ZIqFlx`bvodp7=gDR)4i7DW9Z zOtt_ zdXfN=#ypTJw%QYy;W*-i^x=2uX;J*m+OMTiE_XH*=ze7>vJP3%0qhkgQ>yC*xmiIo zH>n^4l3N`TMotYOWw<3KF=v82#|FN9f>N0kQ8CdYF65+;=6$G%Tu;zQST&b)(TZlV zD$ahrYYwU*NikZW(+^H=m?yw;1DlviRV8S9sQnx$89?$dx!`URHaesBG5M+zl{Ps7 slkZu=0.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "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/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.5", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "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.10.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "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/js": { + "version": "8.54.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "license": "MIT" + }, + "node_modules/@next/env": { + "version": "14.0.3", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.0.3", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.0.3", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.7", + "license": "MIT", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.10", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.37", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.6", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.11.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.11.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.11.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.11.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.tosorted": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001563", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": 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/chart.js": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=7" + } + }, + "node_modules/chartjs-adapter-date-fns": { + "version": "3.0.0", + "license": "MIT", + "peerDependencies": { + "chart.js": ">=2.8.0", + "date-fns": ">=2.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-functions-list": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-property-sort-order-smacss": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/date-fns": { + "version": "2.30.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "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/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa/node_modules/human-signals": { + "version": "4.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/default-browser/node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "dev": true, + "license": "MIT", + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "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/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.54.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.54.0", + "@humanwhocodes/config-array": "^0.11.13", + "@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-next": { + "version": "14.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "14.0.3", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.0", + "dev": true, + "license": "MIT", + "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.14.2" + }, + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "dev": true, + "license": "MIT", + "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-plugin-react/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-unused-imports": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.0.0", + "eslint": "^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "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", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "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/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.2.9", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "dev": true, + "license": "ISC", + "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/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT", + "peer": true + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.4", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "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", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "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-set": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.12", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "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/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "dev": true, + "license": "MIT", + "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/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.29.0", + "dev": true, + "license": "MIT" + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "15.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "2.1.0", + "listr2": "7.0.2", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/meow": { + "version": "10.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "14.0.3", + "license": "MIT", + "dependencies": { + "@next/env": "14.0.3", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.0.3", + "@next/swc-darwin-x64": "14.0.3", + "@next/swc-linux-arm64-gnu": "14.0.3", + "@next/swc-linux-arm64-musl": "14.0.3", + "@next/swc-linux-x64-gnu": "14.0.3", + "@next/swc-linux-x64-musl": "14.0.3", + "@next/swc-win32-arm64-msvc": "14.0.3", + "@next/swc-win32-ia32-msvc": "14.0.3", + "@next/swc-win32-x64-msvc": "14.0.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-redux-wrapper": { + "version": "8.1.0", + "license": "MIT", + "peerDependencies": { + "next": ">=9", + "react": "*", + "react-redux": "*" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "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", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "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.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sorting": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.4.20" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-chartjs-2": { + "version": "5.2.0", + "license": "MIT", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "license": "MIT", + "peer": true + }, + "node_modules/react-redux": { + "version": "8.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "license": "MIT", + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "4.1.8", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "dev": true, + "license": "MIT", + "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-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "dev": 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/run-applescript": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.69.5", + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylelint": { + "version": "15.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.28", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-prettier-scss": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "bin": { + "stylelint-config-prettier-scss": "bin/check.js", + "stylelint-config-prettier-scss-check": "bin/check.js" + }, + "engines": { + "node": "14.* || 16.* || >= 18" + }, + "peerDependencies": { + "stylelint": ">=15.0.0" + } + }, + "node_modules/stylelint-config-property-sort-order-smacss": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "css-property-sort-order-smacss": "~2.2.0", + "stylelint-order": "^6.0.2" + }, + "peerDependencies": { + "stylelint": "^14.0.0 || ^15.0.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "13.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint-config-recommended-scss": { + "version": "13.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^13.0.0", + "stylelint-scss": "^5.3.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^15.10.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-config-standard": { + "version": "34.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "stylelint-config-recommended": "^13.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint-config-standard-scss": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "stylelint-config-recommended-scss": "^13.1.0", + "stylelint-config-standard": "^34.0.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^15.10.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-order": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^8.4.21", + "postcss-sorting": "^8.0.2" + }, + "peerDependencies": { + "stylelint": "^14.0.0 || ^15.0.0" + } + }, + "node_modules/stylelint-scss": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "known-css-properties": "^0.29.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "stylelint": "^14.5.1 || ^15.0.0" + } + }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "dev": true + }, + "node_modules/swr": { + "version": "2.2.4", + "license": "MIT", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/table": { + "version": "6.8.1", + "dev": true, + "license": "BSD-3-Clause", + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/titleize": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-newlines": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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/undici-types": { + "version": "5.26.5", + "dev": true, + "license": "MIT" + }, + "node_modules/untildify": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "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.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.3.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", + "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", + "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", + "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", + "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", + "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", + "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", + "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + } + } +} From d8e6df6df706eddb5b6f4df9f710dd7de2cfdd73 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 18 Nov 2023 01:43:39 +0100 Subject: [PATCH 012/105] Rewrite bun to npm --- .github/workflows/client.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/client.yaml b/.github/workflows/client.yaml index 45f1af8..09fb948 100644 --- a/.github/workflows/client.yaml +++ b/.github/workflows/client.yaml @@ -18,10 +18,10 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install dependencies - run: bun install + run: npm install - name: Client build - run: bun run build + run: npm run build - name: Stylelint - run: bun run stylelint + run: npm run stylelint - name: Test - run: bun test + run: npm test From 9449fb1e31cf77888ad61110a2100d6b8314125d Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 18 Nov 2023 22:30:52 +0100 Subject: [PATCH 013/105] Attribute charts and refactoring --- .github/workflows/client.yaml | 2 +- README.md | 40 +- docs/README_CZ.md | 65 - src/client/jest.config.ts | 15 + src/client/package-lock.json | 7724 ++++++++++++----- src/client/package.json | 70 +- src/client/pages/dashboard.tsx | 14 +- src/client/pages/inspector.tsx | 106 +- src/client/src/bridge/models/HandlerModel.ts | 9 +- src/client/src/bridge/modules/handlers.ts | 4 +- src/client/src/components/Button/Button.scss | 15 +- src/client/src/components/Button/Button.tsx | 3 +- src/client/src/components/Button/mixins.scss | 1 - src/client/src/components/Icon/Icon.scss | 1 + src/client/src/components/Loc/Loc.tsx | 7 +- src/client/src/components/Loc/utils.ts | 29 - .../components/NavbarItem/NavbarItem.scss | 10 +- .../components/NavbarItem/NavbarItem.tsx | 8 +- .../src/components/Toolbar/Toolbar.scss | 33 + src/client/src/components/Toolbar/Toolbar.tsx | 28 + src/client/src/components/Toolbar/index.ts | 1 + src/client/src/components/components.scss | 1 + src/client/src/components/index.ts | 2 + .../layouts/NavbarLayout/NavbarLayout.scss | 4 +- .../src/layouts/NavbarLayout/NavbarLayout.tsx | 9 +- src/client/src/localization/database.ts | 55 + src/client/src/localization/hooks.ts | 27 + src/client/src/localization/index.ts | 2 + .../InspectorChart/InspectorChart.scss | 7 + .../InspectorChart/InspectorChart.tsx | 65 + .../src/partials/InspectorChart/adapter.d.ts | 1 + .../partials/InspectorChart/chartOptions.ts | 48 + .../src/partials/InspectorChart/index.ts | 1 + .../src/partials/NewHandler/NewHandler.tsx | 4 +- src/client/src/partials/partials.scss | 1 + src/client/src/store/StoreInit.tsx | 20 +- src/client/src/store/settingsSlice.ts | 6 +- src/client/src/utils.test.ts | 30 + src/client/src/utils.ts | 126 - src/client/styles/mixins.scss | 2 +- src/client/styles/variables.scss | 8 +- src/server/Pipfile | 4 + src/server/modules/attribute_manager.py | 7 +- src/server/modules/blueprints/charts.py | 1 + src/server/modules/blueprints/handlers.py | 8 + 45 files changed, 6178 insertions(+), 2446 deletions(-) delete mode 100644 docs/README_CZ.md create mode 100644 src/client/jest.config.ts delete mode 100644 src/client/src/components/Loc/utils.ts create mode 100644 src/client/src/components/Toolbar/Toolbar.scss create mode 100644 src/client/src/components/Toolbar/Toolbar.tsx create mode 100644 src/client/src/components/Toolbar/index.ts create mode 100644 src/client/src/localization/database.ts create mode 100644 src/client/src/localization/hooks.ts create mode 100644 src/client/src/localization/index.ts create mode 100644 src/client/src/partials/InspectorChart/InspectorChart.scss create mode 100644 src/client/src/partials/InspectorChart/InspectorChart.tsx create mode 100644 src/client/src/partials/InspectorChart/adapter.d.ts create mode 100644 src/client/src/partials/InspectorChart/chartOptions.ts create mode 100644 src/client/src/partials/InspectorChart/index.ts create mode 100644 src/client/src/utils.test.ts diff --git a/.github/workflows/client.yaml b/.github/workflows/client.yaml index 09fb948..5f6be97 100644 --- a/.github/workflows/client.yaml +++ b/.github/workflows/client.yaml @@ -24,4 +24,4 @@ jobs: - name: Stylelint run: npm run stylelint - name: Test - run: npm test + run: npm run test diff --git a/README.md b/README.md index dd3a6ef..b600a8e 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,40 @@ # ContWatch -System for controlling single-board microcontrollers powered by Python. +Scalable system for IoT automation. Offers an intuitive web interface for controlling and monitoring devices. -## Python dependencies - -If you use [`apt`](https://en.wikipedia.org/wiki/APT_(software)) as your package manager, you can run: - -```shell -xargs -a dependencies.txt sudo apt-get install -``` - -As an alternative you can use [`pip`](https://en.wikipedia.org/wiki/Pip_(package_manager)): +## Run server +Make sure you have [pipenv](https://pipenv.pypa.io/en/latest/) installed. ```shell -pip3 install -r requirements.txt --user +cd src/server +pipenv install +pipenv run server ``` -## Usage +## Run client +Make sure you have [node.js](https://nodejs.org/en) installed. ```shell +cd src/client npm install +npm run build npm start ``` -Python codebase is formatted with [black](https://github.com/psf/black#readme) and TypeScript codebase with [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint#readme). +## Credits +This project is available thanks to following technologies and their communities: + +| Name | Used for | +|------------------------------------------------------------|--------------------------| +| [Python](https://www.python.org/) | Server language | +| [Flask](https://flask.palletsprojects.com/) | Server framework | +| [PonyORM](https://ponyorm.org/) | Server database | +| [Black](https://black.readthedocs.io/en/stable/index.html) | Server code formatting | +| [Node.js](https://nodejs.org/en) | Client codebase | +| [TypeScript](https://www.typescriptlang.org/) | Client language | +| [Next.js](https://nextjs.org/) | Client backend | +| [React](https://reactjs.org/) | Client framework | +| [Redux](https://redux.js.org/) | Client state management | +| [ESLint](https://eslint.org/) | Client code linting | +| [Prettier](https://prettier.io/) | Client code formatting | +| [Stylelint](https://stylelint.io/) | Client styles linting | diff --git a/docs/README_CZ.md b/docs/README_CZ.md deleted file mode 100644 index eea00b7..0000000 --- a/docs/README_CZ.md +++ /dev/null @@ -1,65 +0,0 @@ -### Systém na ovládání jednodeskových počítačů - -Autor práce: Bc. Ivo Šmerek
-Vedoucí práce: Mgr. Jan Tříska, Ph.D. - -Univerzita Palackého v Olomouci
-Přírodovědecká fakulta
-Katedra informatiky
-květen 2022 - - -Teto dokument lze zobrazit na webové adrese:
-https://github.com/BlueManCZ/contwatch/blob/master/docs/README_CZ.md -
- -### Webové adresy - -1. Zdrojový kód na GitHubu:
- https://github.com/BlueManCZ/contwatch - - -2. Živé demo systému:
- http://brutus.webly3d.net:5000 - -### Instalace na operačním systému Raspbian - -(viz 6. kapitola diplomové práce) - -Postup se může na ostatních linuxových distribucích lišit. - -**1. Sestavení projektu:** - -(Projekt přiložený k práci na CD a ve vydaných verzích systému je již sestaven, lze přeskočit na další krok) - -```shell -apt-get update -apt-get install nodejs npm - -npm install -npm run build -``` - -**2. Spuštění systému:** - -Je vyžadován interpret jazyka Python verze minimálně 3.6. - -Instalace runtime závislostí pomocí apt: - -```shell -xargs -a dependencies.txt apt-get install -``` - -Alternativně lze použít pip3: - -```shell -pip3 install -r requirements.txt --user -``` - -Spuštění systému: - -```shell -python3 run.py -``` - -Ve výchozím nastavení spouští systém webový server na portu 80. K tomu je vyžadováno oprávnění správce. Port lze změnit v konfiguračním souboru [settings.py](https://github.com/BlueManCZ/contwatch/blob/master/settings.py). diff --git a/src/client/jest.config.ts b/src/client/jest.config.ts new file mode 100644 index 0000000..567da00 --- /dev/null +++ b/src/client/jest.config.ts @@ -0,0 +1,15 @@ +import nextJest from "next/jest"; + +export const customJestConfig = { + moduleDirectories: ["node_modules", "/"], + moduleNameMapper: { + "@/(.*)$": "/src/$1", + }, + testEnvironment: "jest-environment-jsdom", +}; + +const createJestConfig = nextJest({ + dir: "./", +}); + +module.exports = createJestConfig(customJestConfig); diff --git a/src/client/package-lock.json b/src/client/package-lock.json index 5a4a2a4..ef88f18 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -1,46 +1,51 @@ { - "name": "next-app", - "version": "0.1.0", + "name": "contwatch-client", + "version": "2.0.0-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "next-app", - "version": "0.1.0", - "dependencies": { - "@reduxjs/toolkit": "^1.9.7", - "chart.js": "^4.4.0", - "chartjs-adapter-date-fns": "^3.0.0", - "date-fns": "^2.30.0", - "next": "^14.0.3", - "next-redux-wrapper": "^8.1.0", - "react": "^18.2.0", - "react-chartjs-2": "^5.2.0", - "react-dom": "^18.2.0", - "sass": "^1.69.2", - "swr": "^2.2.4", + "name": "contwatch-client", + "version": "2.0.0-beta", + "dependencies": { + "@reduxjs/toolkit": "1.9.7", + "chart.js": "4.4.0", + "chartjs-adapter-date-fns": "3.0.0", + "chartjs-plugin-zoom": "^2.0.1", + "date-fns": "2.30.0", + "next": "14.0.3", + "next-redux-wrapper": "8.1.0", + "react": "18.2.0", + "react-chartjs-2": "5.2.0", + "react-dom": "18.2.0", + "sass": "1.69.5", + "swr": "2.2.4", "typescript": "5.2.2" }, "devDependencies": { - "@types/node": "^20.9.1", - "@types/react": "^18.2.37", - "@types/react-dom": "^18.2.15", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.54.0", - "eslint-config-next": "^14.0.3", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-unused-imports": "^3.0.0", - "husky": "^8.0.3", - "lint-staged": "^15.0.2", - "prettier": "^3.1.0", - "stylelint": "^15.11.0", - "stylelint-config-prettier-scss": "^1.0.0", - "stylelint-config-property-sort-order-smacss": "^9.1.0", - "stylelint-config-standard-scss": "^11.0.0", - "stylelint-order": "^6.0.3" + "@types/jest": "^29.5.8", + "@types/node": "20.9.1", + "@types/react": "18.2.37", + "@types/react-dom": "18.2.15", + "@typescript-eslint/eslint-plugin": "6.11.0", + "@typescript-eslint/parser": "6.11.0", + "eslint": "8.54.0", + "eslint-config-next": "14.0.3", + "eslint-plugin-import": "2.29.0", + "eslint-plugin-prettier": "5.0.1", + "eslint-plugin-simple-import-sort": "10.0.0", + "eslint-plugin-unused-imports": "3.0.0", + "husky": "8.0.3", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "lint-staged": "15.1.0", + "prettier": "3.1.0", + "stylelint": "15.11.0", + "stylelint-config-prettier-scss": "1.0.0", + "stylelint-config-property-sort-order-smacss": "9.1.0", + "stylelint-config-standard-scss": "11.1.0", + "stylelint-order": "6.0.3", + "ts-node": "^10.9.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -51,6 +56,19 @@ "node": ">=0.10.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.22.13", "dev": true, @@ -100,1025 +118,2580 @@ "dev": true, "license": "MIT" }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", + "node_modules/@babel/code-frame/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==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=0.8.0" } }, - "node_modules/@babel/highlight": { - "version": "7.22.20", + "node_modules/@babel/code-frame/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==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", + "node_modules/@babel/code-frame/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==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@babel/compat-data": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "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": ">=4" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", + "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==", "dev": true, - "license": "MIT" + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/@babel/runtime": { - "version": "7.23.2", - "license": "MIT", + "node_modules/@babel/generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "dev": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "@babel/types": "^7.23.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.2", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, - "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.2.1", + "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==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.5", + "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==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", + "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==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "node": ">=6.9.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.3", + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, - "license": "MIT", "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" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@eslint/js": { - "version": "8.54.0", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, - "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "dependencies": { + "@babel/types": "^7.22.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "license": "MIT" - }, - "node_modules/@next/env": { - "version": "14.0.3", - "license": "MIT" + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.0.3", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", "dev": true, "license": "MIT", - "dependencies": { - "glob": "7.1.7" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.3", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.3", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@babel/highlight": { + "version": "7.22.20", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" }, - "funding": { - "url": "https://opencollective.com/unts" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@reduxjs/toolkit": { - "version": "1.9.7", - "license": "MIT", + "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==", + "dev": true, "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.5.1", + "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==", "dev": true, - "license": "MIT" - }, - "node_modules/@swc/helpers": { - "version": "0.5.2", - "license": "Apache-2.0", "dependencies": { - "tslib": "^2.4.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "license": "MIT", - "peer": true, + "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==", + "dev": true, "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", + "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==", "dev": true, - "license": "MIT" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@types/json5": { - "version": "0.0.29", + "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==", "dev": true, - "license": "MIT" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@types/minimist": { - "version": "1.2.5", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, - "license": "MIT" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@types/node": { - "version": "20.9.1", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", + "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==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.10", - "license": "MIT" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@types/react": { - "version": "18.2.37", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/react-dom": { - "version": "18.2.15", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "@types/react": "*" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/scheduler": { - "version": "0.16.6", - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.5", + "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==", "dev": true, - "license": "MIT" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", - "license": "MIT", - "peer": true + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.11.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==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/type-utils": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.11.0", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", - "debug": "^4.3.4" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.11.0", - "dev": true, + "node_modules/@babel/runtime": { + "version": "7.23.2", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.11.0", + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.11.0", + "node_modules/@babel/traverse": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "debug": "^4.1.0", + "globals": "^11.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.11.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==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=4" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.11.0", + "node_modules/@babel/types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "semver": "^7.5.4" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.11.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==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.11.0", - "eslint-visitor-keys": "^3.4.1" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=12" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "ISC" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } }, - "node_modules/acorn": { - "version": "8.11.2", + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.2", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.1" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.1", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": "^14 || ^16 || >=18" } }, - "node_modules/ajv": { - "version": "6.12.6", + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.5", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "engines": { + "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, - "node_modules/ansi-escapes": { - "version": "5.0.0", + "node_modules/@csstools/selector-specificity": { + "version": "3.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.2" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "engines": { - "node": ">=12" + "node": "^14 || ^16 || >=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "1.4.0", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@eslint/eslintrc": { + "version": "2.1.3", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "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": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, + "node_modules/@eslint/js": { + "version": "8.54.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.0", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", "dev": true, "license": "Apache-2.0", "dependencies": { - "dequal": "^2.0.3" + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/array-includes": { - "version": "3.1.7", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "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==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" + "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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/array-union": { - "version": "2.1.0", + "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==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.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==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", + "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==", "dev": true, - "license": "MIT", "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" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arrify": { - "version": "1.0.1", + "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==", "dev": true, - "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ast-types-flow": { - "version": "0.0.8", + "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==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/astral-regex": { - "version": "2.0.0", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", + "node_modules/@jest/core/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==", "dev": true, - "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/axe-core": { - "version": "4.7.0", + "node_modules/@jest/core/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==", "dev": true, - "license": "MPL-2.0", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/axobject-query": { - "version": "3.2.1", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "dequal": "^2.0.3" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/balanced-match": { - "version": "2.0.0", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, - "license": "MIT" + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/big-integer": { - "version": "1.6.51", + "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==", "dev": true, - "license": "Unlicense", + "dependencies": { + "jest-get-type": "^29.6.3" + }, "engines": { - "node": ">=0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "license": "MIT", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/bplist-parser": { - "version": "0.2.0", + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, - "license": "MIT", "dependencies": { - "big-integer": "^1.6.44" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">= 5.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, - "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/brace-expansion/node_modules/balanced-match": { - "version": "1.0.2", + "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==", "dev": true, - "license": "MIT" - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/bundle-name": { - "version": "3.0.0", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, - "license": "MIT", "dependencies": { - "run-applescript": "^5.0.0" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/busboy": { - "version": "1.6.0", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "dependencies": { - "streamsearch": "^1.1.0" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">=10.16.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/call-bind": { - "version": "1.0.5", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/camelcase": { - "version": "6.3.0", + "node_modules/@jest/transform/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==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/camelcase-keys": { - "version": "7.0.2", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "camelcase": "^6.3.0", + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "license": "MIT" + }, + "node_modules/@next/env": { + "version": "14.0.3", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", + "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", + "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", + "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", + "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.0.3", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.0.3", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", + "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", + "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", + "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.7", + "license": "MIT", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.1", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", + "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", + "dev": true, + "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.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz", + "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.10", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.37", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.15", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.6", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.5", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/@types/yargs": { + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", + "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.11.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.11.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.11.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.tosorted": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "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==", + "dev": true, + "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-istanbul/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==", + "dev": true, + "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/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "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.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.3.0", "map-obj": "^4.1.0", "quick-lru": "^5.1.1", "type-fest": "^1.2.1" @@ -1127,708 +2700,1638 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001563", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": 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/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==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chart.js": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=7" + } + }, + "node_modules/chartjs-adapter-date-fns": { + "version": "3.0.0", + "license": "MIT", + "peerDependencies": { + "chart.js": ">=2.8.0", + "date-fns": ">=2.0.0" + } + }, + "node_modules/chartjs-plugin-zoom": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.1.tgz", + "integrity": "sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==", + "dependencies": { + "hammerjs": "^2.0.8" + }, + "peerDependencies": { + "chart.js": ">=3.2.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "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/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.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==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-functions-list": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-property-sort-order-smacss": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "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/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "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==", + "dev": true + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa/node_modules/human-signals": { + "version": "4.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/default-browser/node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.588", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", + "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", + "node_modules/emoji-regex": { + "version": "9.2.2", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, "engines": { - "node": ">=10" + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001563", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } }, - "node_modules/chalk": { - "version": "4.1.2", + "node_modules/es-abstract": { + "version": "1.22.3", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chart.js": { - "version": "4.4.0", + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "dev": true, "license": "MIT", "dependencies": { - "@kurkle/color": "^0.3.0" + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { - "pnpm": ">=7" + "node": ">= 0.4" } }, - "node_modules/chartjs-adapter-date-fns": { - "version": "3.0.0", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "dev": true, "license": "MIT", - "peerDependencies": { - "chart.js": ">=2.8.0", - "date-fns": ">=2.0.0" + "dependencies": { + "hasown": "^2.0.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/cli-cursor": { + "node_modules/escape-string-regexp": { "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "restore-cursor": "^4.0.0" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "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/eslint": { + "version": "8.54.0", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.54.0", + "@humanwhocodes/config-array": "^0.11.13", + "@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.20.0 || ^14.13.1 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "5.0.0", + "node_modules/eslint-config-next": { + "version": "14.0.3", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "@next/eslint-plugin-next": "14.0.3", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, "engines": { - "node": ">=12" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/eslint-module-utils": { + "version": "2.8.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "debug": "^3.2.7" }, "engines": { - "node": ">=12" + "node": ">=4" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/client-only": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", + "node_modules/eslint-plugin-import": { + "version": "2.29.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "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.14.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/color-name": { - "version": "1.1.4", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } }, - "node_modules/colord": { - "version": "2.9.3", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/colorette": { - "version": "2.0.20", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/commander": { - "version": "11.1.0", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", "dev": true, "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, "engines": { - "node": ">=16" + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" }, "engines": { - "node": ">=14" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" + "url": "https://opencollective.com/prettier" }, "peerDependencies": { - "typescript": ">=4.9.5" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { - "typescript": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { "optional": true } } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/eslint-plugin-react": { + "version": "7.33.2", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" }, "engines": { - "node": ">= 8" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/css-functions-list": { - "version": "3.2.1", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", "dev": true, "license": "MIT", "engines": { - "node": ">=12 || >=16" + "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/css-property-sort-order-smacss": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/css-tree": { - "version": "2.3.1", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "esutils": "^2.0.2" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=0.10.0" } }, - "node_modules/cssesc": { - "version": "3.0.0", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", "dev": true, "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, "bin": { - "cssesc": "bin/cssesc" + "resolve": "bin/resolve" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/csstype": { - "version": "3.1.2", - "license": "MIT" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", "dev": true, - "license": "BSD-2-Clause" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/date-fns": { - "version": "2.30.0", + "node_modules/eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", + "node_modules/eslint-plugin-unused-imports": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "eslint-rule-composer": "^0.3.0" }, "engines": { - "node": ">=6.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.0.0", + "eslint": "^8.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "@typescript-eslint/eslint-plugin": { "optional": true } } }, - "node_modules/decamelize": { - "version": "5.0.1", + "node_modules/eslint-rule-composer": { + "version": "0.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", + "node_modules/eslint-scope": { + "version": "7.2.2", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "url": "https://opencollective.com/eslint" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/default-browser": { - "version": "4.0.0", + "node_modules/espree": { + "version": "9.6.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=14.16" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/default-browser-id": { - "version": "3.0.0", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", + "node_modules/esquery": { + "version": "1.5.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=0.10" } }, - "node_modules/default-browser/node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4.0" } }, - "node_modules/default-browser/node_modules/execa/node_modules/human-signals": { - "version": "4.3.1", + "node_modules/estraverse": { + "version": "5.3.0", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "engines": { - "node": ">=14.18.0" + "node": ">=4.0" } }, - "node_modules/default-browser/node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/define-data-property": { - "version": "1.1.1", + "node_modules/esutils": { + "version": "2.0.3", "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", + "node_modules/eventemitter3": { + "version": "5.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/define-properties": { - "version": "1.2.1", + "node_modules/execa": { + "version": "8.0.1", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=16.17" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/dir-glob": { - "version": "3.0.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==", "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "esutils": "^2.0.2" + "@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": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", + "node_modules/fast-deep-equal": { + "version": "3.1.3", "dev": true, "license": "MIT" }, - "node_modules/emoji-regex": { - "version": "9.2.2", + "node_modules/fast-diff": { + "version": "1.3.0", "dev": true, - "license": "MIT" + "license": "Apache-2.0" }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", + "node_modules/fast-glob": { + "version": "3.3.2", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@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": ">=10.13.0" + "node": ">=8.6.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-arrayish": "^0.2.1" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/es-abstract": { - "version": "1.22.3", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", "dev": true, "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4.9.1" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", + "node_modules/fastq": { + "version": "1.15.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "reusify": "^1.0.4" } }, - "node_modules/es-set-tostringtag": { + "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==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" + "bser": "2.1.1" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", + "node_modules/file-entry-cache": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, + "node_modules/fill-range": { + "version": "7.0.1", "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/find-up": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" }, @@ -1836,785 +4339,737 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.54.0", + "node_modules/flat-cache": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", - "@humanwhocodes/config-array": "^0.11.13", - "@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" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "14.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "14.0.3", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/flatted": { + "version": "3.2.9", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "is-callable": "^1.1.3" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", + "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==", "dev": true, - "license": "ISC", "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "node": ">= 6" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", + "node_modules/fs.realpath": { + "version": "1.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/function-bind": { + "version": "1.1.2", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.0", + "node_modules/function.prototype.name": { + "version": "1.1.6", "dev": true, "license": "MIT", "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.14.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=4" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", + "node_modules/functions-have-names": { + "version": "1.2.3", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.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==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", + "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==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", + "node_modules/get-intrinsic": { + "version": "1.2.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">=8.0.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.0.1", + "node_modules/get-stream": { + "version": "8.0.1", "dev": true, "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" - }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=16" }, "funding": { - "url": "https://opencollective.com/prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", + "node_modules/get-symbol-description": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", + "node_modules/get-tsconfig": { + "version": "4.7.2", "dev": true, "license": "MIT", - "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", - "dev": true, - "license": "Apache-2.0", "dependencies": { - "esutils": "^2.0.2" + "resolve-pkg-maps": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/glob": { + "version": "7.1.7", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "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" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", + "node_modules/glob-parent": { + "version": "6.0.2", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "2.0.0", "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=5.0.0" + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/eslint-plugin-unused-imports": { + "node_modules/global-prefix": { "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "eslint-rule-composer": "^0.3.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0", - "eslint": "^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } + "node": ">=6" } }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/globals": { + "version": "13.23.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "type-fest": "^0.20.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/globalthis": { + "version": "1.0.3", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/espree": { - "version": "9.6.1", + "node_modules/globby": { + "version": "11.1.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "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": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.5.0", + "node_modules/globjoin": { + "version": "0.1.4", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "MIT" + }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", "engines": { - "node": ">=4.0" + "node": ">=0.8.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", + "node_modules/hard-rejection": { + "version": "2.1.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=6" } }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", + "node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/execa": { - "version": "8.0.1", + "node_modules/has-property-descriptors": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "get-intrinsic": "^1.2.2" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", + "node_modules/has-symbols": { + "version": "1.0.3", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fast-diff": { - "version": "1.3.0", + "node_modules/has-tostringtag": { + "version": "1.0.0", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fast-glob": { - "version": "3.3.2", + "node_modules/hasown": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8.6.0" + "node": ">= 0.4" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT", + "peer": true + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, - "license": "MIT" + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/html-tags": { + "version": "3.3.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 4.9.1" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fastq": { - "version": "1.15.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==", "dev": true, - "license": "ISC", "dependencies": { - "reusify": "^1.0.4" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 6" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, + "node_modules/human-signals": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=16.17.0" } }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/husky": { + "version": "8.0.3", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "bin": { + "husky": "lib/bin.js" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/flat-cache": { - "version": "3.2.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==", "dev": true, - "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/flatted": { - "version": "3.2.9", - "dev": true, - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.3", + "node_modules/ignore": { + "version": "5.3.0", "dev": true, "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" + "engines": { + "node": ">= 4" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "dev": true, + "node_modules/immer": { + "version": "9.0.21", "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", + "node_modules/immutable": { + "version": "4.3.4", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/get-intrinsic": { - "version": "1.2.2", + "node_modules/import-lazy": { + "version": "4.0.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "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/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "8.0.1", + "node_modules/imurmurhash": { + "version": "0.1.4", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.7.2", + "node_modules/is-array-buffer": { + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.1.7", + "node_modules/is-arrayish": { + "version": "0.2.1", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "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" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=10.13.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "license": "BSD-2-Clause" - }, - "node_modules/global-modules": { - "version": "2.0.0", - "dev": true, + "node_modules/is-binary-path": { + "version": "2.1.0", "license": "MIT", "dependencies": { - "global-prefix": "^3.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/global-prefix": { - "version": "3.0.0", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", + "node_modules/is-callable": { + "version": "1.2.7", "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, - "bin": { - "which": "bin/which" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globals": { - "version": "13.23.0", + "node_modules/is-core-module": { + "version": "2.13.1", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "hasown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globalthis": { - "version": "1.0.3", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2623,98 +5078,106 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/is-docker": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globjoin": { - "version": "0.1.4", - "dev": true, - "license": "MIT" + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/hard-rejection": { + "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/has-bigints": { - "version": "1.0.2", + "node_modules/is-generator-function": { + "version": "1.0.10", "dev": true, "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", + "node_modules/is-inside-container": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-proto": { - "version": "1.0.1", + "node_modules/is-map": { + "version": "2.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/is-negative-zero": { + "version": "2.0.2", "dev": true, "license": "MIT", "engines": { @@ -2724,12 +5187,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2738,560 +5208,930 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.0", + "node_modules/is-path-inside": { + "version": "3.0.3", "dev": true, "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "react-is": "^16.7.0" + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", + "node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, "license": "MIT", - "peer": true + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", + "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==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-tags": { - "version": "3.3.1", + "node_modules/is-set": { + "version": "2.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/human-signals": { - "version": "5.0.0", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/husky": { - "version": "8.0.3", + "node_modules/is-stream": { + "version": "3.0.0", "dev": true, "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, "engines": { - "node": ">=14" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ignore": { - "version": "5.3.0", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/immer": { - "version": "9.0.21", + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/immutable": { - "version": "4.3.4", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/is-typed-array": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "which-typed-array": "^1.1.11" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/is-weakmap": { + "version": "2.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-lazy": { - "version": "4.0.0", + "node_modules/is-weakset": { + "version": "2.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/is-wsl": { + "version": "2.2.0", "dev": true, "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=8" } }, - "node_modules/indent-string": { - "version": "5.0.0", + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", "dev": true, "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", + "node_modules/isarray": { + "version": "2.0.5", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/ini": { - "version": "1.3.8", + "node_modules/isexe": { + "version": "2.0.0", "dev": true, "license": "ISC" }, - "node_modules/internal-slot": { - "version": "1.0.6", + "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==", "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.0.0", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-bigint": { - "version": "1.0.4", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "license": "MIT", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/is-boolean-object": { + "node_modules/iterator.prototype": { "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/is-callable": { - "version": "1.2.7", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-core-module": { - "version": "2.13.1", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "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": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/is-docker": { - "version": "3.0.0", + "node_modules/jest-changed-files/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==", "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", + "node_modules/jest-changed-files/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==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10.17.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "node_modules/jest-changed-files/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==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/jest-changed-files/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==", "dev": true, - "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-changed-files/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==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", + "node_modules/jest-changed-files/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, + "node_modules/jest-changed-files/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==", + "dev": true + }, + "node_modules/jest-changed-files/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==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, - "license": "MIT", "dependencies": { - "is-docker": "^3.0.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" }, "bin": { - "is-inside-container": "cli.js" + "jest": "bin/jest.js" }, "engines": { - "node": ">=14.16" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-map": { - "version": "2.0.2", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "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==", + "dev": true, + "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/is-negative-zero": { - "version": "2.0.2", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "detect-newline": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-plain-obj": { - "version": "1.1.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==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.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==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-set": { - "version": "2.0.2", + "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==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/is-shared-array-buffer": { - "version": "1.0.2", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-stream": { - "version": "3.0.0", + "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==", "dev": true, - "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, - "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", + "node_modules/jest-runtime/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==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^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", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakset": { - "version": "2.0.2", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "@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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, - "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/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==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" }, "engines": { "node": ">=8" @@ -3300,26 +6140,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "2.0.5", + "node_modules/jest-watcher/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==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/isexe": { - "version": "2.0.0", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "license": "ISC" + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", + "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==", "dev": true, - "license": "MIT", "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" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-tokens": { @@ -3337,6 +6197,63 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "dev": true, @@ -3398,6 +6315,15 @@ "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/known-css-properties": { "version": "0.29.0", "dev": true, @@ -3419,6 +6345,15 @@ "node": ">=0.10" } }, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "dev": true, @@ -3622,6 +6557,36 @@ "node": ">=10" } }, + "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==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/map-obj": { "version": "4.3.0", "dev": true, @@ -3708,6 +6673,27 @@ "node": ">=8.6" } }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "dev": true, @@ -3838,6 +6824,18 @@ "react-redux": "*" } }, + "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==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, "node_modules/normalize-package-data": { "version": "3.0.3", "dev": true, @@ -3884,6 +6882,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "dev": true, @@ -4076,6 +7080,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "dev": true, @@ -4104,6 +7117,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "dev": true, @@ -4166,6 +7191,79 @@ "node": ">=0.10" } }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postcss": { "version": "8.4.31", "funding": [ @@ -4300,6 +7398,45 @@ "node": ">=6.0.0" } }, + "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==", + "dev": true, + "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/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/prop-types": { "version": "15.8.1", "dev": true, @@ -4315,6 +7452,12 @@ "dev": true, "license": "MIT" }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/punycode": { "version": "2.3.1", "dev": true, @@ -4323,6 +7466,28 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "dev": true, @@ -4384,8 +7549,7 @@ }, "node_modules/react-is": { "version": "18.2.0", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/react-redux": { "version": "8.1.3", @@ -4558,6 +7722,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "dev": true, @@ -4566,6 +7739,12 @@ "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==", + "dev": true + }, "node_modules/reselect": { "version": "4.1.8", "license": "MIT" @@ -4586,6 +7765,18 @@ "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==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "5.0.0", "dev": true, @@ -4602,6 +7793,15 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/restore-cursor": { "version": "4.0.0", "dev": true, @@ -4743,6 +7943,72 @@ "dev": true, "license": "ISC" }, + "node_modules/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "dev": true, @@ -4795,6 +8061,12 @@ "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==", + "dev": true + }, "node_modules/sass": { "version": "1.69.5", "license": "MIT", @@ -4810,6 +8082,18 @@ "node": ">=14.0.0" } }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.0", "license": "MIT", @@ -4901,6 +8185,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "dev": true, @@ -4925,6 +8215,15 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "license": "BSD-3-Clause", @@ -4932,6 +8231,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "dev": true, @@ -4960,6 +8269,33 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "engines": { @@ -4974,6 +8310,19 @@ "node": ">=0.6.19" } }, + "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==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "4.2.3", "dev": true, @@ -5367,6 +8716,12 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0" } }, + "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==", + "dev": true + }, "node_modules/synckit": { "version": "0.8.5", "dev": true, @@ -5412,6 +8767,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/table/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==", + "dev": true + }, "node_modules/tapable": { "version": "2.2.1", "dev": true, @@ -5420,6 +8781,20 @@ "node": ">=6" } }, + "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==", + "dev": true, + "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", "dev": true, @@ -5436,14 +8811,56 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" }, "engines": { - "node": ">=8.0" + "node": ">=12" } }, "node_modules/trim-newlines": { @@ -5468,6 +8885,49 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tsconfig-paths": { "version": "3.14.2", "dev": true, @@ -5494,6 +8954,15 @@ "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "dev": true, @@ -5596,6 +9065,15 @@ "dev": true, "license": "MIT" }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/untildify": { "version": "4.0.0", "dev": true, @@ -5604,6 +9082,36 @@ "node": ">=8" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "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.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "dev": true, @@ -5612,6 +9120,16 @@ "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==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "license": "MIT", @@ -5624,6 +9142,26 @@ "dev": true, "license": "MIT" }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -5633,6 +9171,27 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/watchpack": { "version": "2.4.0", "license": "MIT", @@ -5644,6 +9203,49 @@ "node": ">=10.13.0" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/which": { "version": "2.0.2", "dev": true, @@ -5815,141 +9417,117 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.3.4", + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, - "license": "ISC", "engines": { - "node": ">= 14" + "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/yargs-parser": { - "version": "20.2.9", + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, - "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", - "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", - "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/yaml": { + "version": "2.3.4", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": ">= 14" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", - "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "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": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", - "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", - "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", - "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", - "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/src/client/package.json b/src/client/package.json index 7ee960b..d21075e 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -1,51 +1,57 @@ { - "name": "next-app", - "version": "0.1.0", + "name": "contwatch-client", + "version": "2.0.0-beta", "private": true, "scripts": { "build:config": "tsc next.config.ts --skipLibCheck --module commonjs --target esnext --esModuleInterop true --allowSyntheticDefaultImports true --moduleResolution node", "dev": "npm run build:config; next dev", "build": "npm run build:config; next build", "start": "next start", + "test": "jest --verbose", "lint": "next lint", "stylelint": "stylelint '**/*.scss'", "precommit": "lint-staged", "fmt": "prettier --write './**/*.js'" }, "dependencies": { - "@reduxjs/toolkit": "^1.9.7", - "chart.js": "^4.4.0", - "chartjs-adapter-date-fns": "^3.0.0", - "date-fns": "^2.30.0", - "next": "^14.0.3", - "next-redux-wrapper": "^8.1.0", - "react": "^18.2.0", - "react-chartjs-2": "^5.2.0", - "react-dom": "^18.2.0", - "sass": "^1.69.2", - "swr": "^2.2.4", + "@reduxjs/toolkit": "1.9.7", + "chart.js": "4.4.0", + "chartjs-adapter-date-fns": "3.0.0", + "chartjs-plugin-zoom": "^2.0.1", + "date-fns": "2.30.0", + "next": "14.0.3", + "next-redux-wrapper": "8.1.0", + "react": "18.2.0", + "react-chartjs-2": "5.2.0", + "react-dom": "18.2.0", + "sass": "1.69.5", + "swr": "2.2.4", "typescript": "5.2.2" }, "devDependencies": { - "@types/node": "^20.9.1", - "@types/react": "^18.2.37", - "@types/react-dom": "^18.2.15", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.54.0", - "eslint-config-next": "^14.0.3", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-unused-imports": "^3.0.0", - "husky": "^8.0.3", - "lint-staged": "^15.0.2", - "prettier": "^3.1.0", - "stylelint": "^15.11.0", - "stylelint-config-prettier-scss": "^1.0.0", - "stylelint-config-property-sort-order-smacss": "^9.1.0", - "stylelint-config-standard-scss": "^11.0.0", - "stylelint-order": "^6.0.3" + "@types/jest": "^29.5.8", + "@types/node": "20.9.1", + "@types/react": "18.2.37", + "@types/react-dom": "18.2.15", + "@typescript-eslint/eslint-plugin": "6.11.0", + "@typescript-eslint/parser": "6.11.0", + "eslint": "8.54.0", + "eslint-config-next": "14.0.3", + "eslint-plugin-import": "2.29.0", + "eslint-plugin-prettier": "5.0.1", + "eslint-plugin-simple-import-sort": "10.0.0", + "eslint-plugin-unused-imports": "3.0.0", + "husky": "8.0.3", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "lint-staged": "15.1.0", + "prettier": "3.1.0", + "stylelint": "15.11.0", + "stylelint-config-prettier-scss": "1.0.0", + "stylelint-config-property-sort-order-smacss": "9.1.0", + "stylelint-config-standard-scss": "11.1.0", + "stylelint-order": "6.0.3", + "ts-node": "^10.9.1" }, "lint-staged": { "*.js": [ diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx index c03c529..20b1950 100644 --- a/src/client/pages/dashboard.tsx +++ b/src/client/pages/dashboard.tsx @@ -1,17 +1,19 @@ import { useWidgetSwitches, useWidgetTiles } from "../src/bridge"; -import { FlexLayout, Header, HeaderSize, Loc } from "../src/components"; -import { AttributeWidget, SwitchWidget } from "../src/components/Widget"; +import { AttributeWidget, FlexLayout, SwitchWidget, ThemedIconName, Toolbar } from "../src/components"; import { NavbarLayout } from "../src/layouts"; -import { GLOBAL_LOC_KEYS } from "../src/utils"; +import { LOC_KEY, useLocalization } from "../src/localization"; export const Dashboard = () => { + const { translate } = useLocalization(); const { data: tiles } = useWidgetTiles(); const { data: switches } = useWidgetSwitches(); return ( -

- {GLOBAL_LOC_KEYS.DASHBOARD} -
+ {tiles?.map((widget) => ( { - const attributes = [2, 3]; - - const { data: attributeChartData } = useAttributeChart(attributes.sort()); - - const data = { - datasets: - attributeChartData?.map((attributeChart) => ({ - label: attributeChart.label, - data: attributeChart.data.map((data) => ({ - x: data.x * 1000, - y: data.y, - })), - borderColor: "red", - })) ?? [], +import { LOC_KEY, useLocalization } from "../src/localization"; +import { InspectorChart } from "../src/partials/InspectorChart"; + +export const Inspector = () => { + const { data: handlers } = useHandlers(); + const { translate } = useLocalization(); + + /** TODO: Store selected attributes in redux */ + const [attributes, setAttributes] = useState([]); + + const onAttributeClick = (id: number) => { + setAttributes((prev) => { + if (prev.includes(id)) { + return prev.filter((item) => item !== id); + } + return [...prev, id]; + }); }; - console.log(attributeChartData); return ( -
- {GLOBAL_LOC_KEYS.INSPECTOR} -
-
- {/** @ts-ignore */} - -
+ + + {handlers?.map( + (handler) => + handler.attributes?.map((attribute) => ( + // + + )), + )} + +
); }; -export default App; +export default Inspector; diff --git a/src/client/src/bridge/models/HandlerModel.ts b/src/client/src/bridge/models/HandlerModel.ts index ca6b838..8c93c46 100644 --- a/src/client/src/bridge/models/HandlerModel.ts +++ b/src/client/src/bridge/models/HandlerModel.ts @@ -19,14 +19,17 @@ export interface HandlerAttribute { value: string | number; } -export interface HandlerModel { - id: number; +export interface HandlerTypeModel { type: string; name: string; icon: CustomIconName; + configFields?: Record; +} + +export interface HandlerModel extends HandlerTypeModel { + id: number; description: string; status?: HandlerStatus; options?: HandlerOptions; - configFields?: Record; attributes?: HandlerAttribute[]; } diff --git a/src/client/src/bridge/modules/handlers.ts b/src/client/src/bridge/modules/handlers.ts index 61cdda2..66adde9 100644 --- a/src/client/src/bridge/modules/handlers.ts +++ b/src/client/src/bridge/modules/handlers.ts @@ -1,7 +1,7 @@ import useSWR from "swr"; import { Endpoint, getApiEndpoint } from "../endpoints"; -import { HandlerModel, NewHandlerModel } from "../models"; +import { HandlerModel, HandlerTypeModel, NewHandlerModel } from "../models"; import { getJson, postJson } from "../utils"; export const useHandlers = () => { @@ -21,5 +21,5 @@ export const addHandler = ( }; export const useAvailableHandlers = () => { - return useSWR(getApiEndpoint(Endpoint.availableHandlers), getJson); + return useSWR(getApiEndpoint(Endpoint.availableHandlers), getJson); }; diff --git a/src/client/src/components/Button/Button.scss b/src/client/src/components/Button/Button.scss index ea281d9..6f4a9b8 100644 --- a/src/client/src/components/Button/Button.scss +++ b/src/client/src/components/Button/Button.scss @@ -25,7 +25,7 @@ display: flex; align-items: center; - background: $primary-action; + background: $blue; color: $primary-text-light; &:hover { @@ -35,6 +35,13 @@ } } + &-white { + @include button-theme; + + background: $white; + color: $primary-text; + } + &-outline { @include button-theme; @@ -65,6 +72,12 @@ } } + &--variant-white#{&}--active { + @include active; + + color: $white; + } + &--variant-navbar#{&}--active { @include active; diff --git a/src/client/src/components/Button/Button.tsx b/src/client/src/components/Button/Button.tsx index 29af4d4..b5d82e7 100644 --- a/src/client/src/components/Button/Button.tsx +++ b/src/client/src/components/Button/Button.tsx @@ -5,6 +5,7 @@ import { Icon, IconVariant, ThemedIconName } from "../Icon"; export enum ButtonVariant { default = "default", + white = "white", outline = "outline", navbar = "navbar", menu = "menu", @@ -40,7 +41,7 @@ export const Button: FunctionComponent = ({ children, }) => { return ( - )), )} diff --git a/src/client/public/icons/cosmic/arrow-maximize.svg b/src/client/public/icons/cosmic/arrow-maximize.svg new file mode 100644 index 0000000..cf7352b --- /dev/null +++ b/src/client/public/icons/cosmic/arrow-maximize.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/temperature.svg b/src/client/public/icons/cosmic/temperature.svg new file mode 100644 index 0000000..b593899 --- /dev/null +++ b/src/client/public/icons/cosmic/temperature.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/client/public/icons/custom/battery.png b/src/client/public/icons/custom/battery.png new file mode 100644 index 0000000000000000000000000000000000000000..9d26fd2fd304fc2db9caf4f53d7a01e3ad595cfb GIT binary patch literal 10218 zcmeHNc|28H`#%$HQ?`o8v`>^os@rf3#c^;C4H{%98A6%LoOw8hBTA$J6;aaFbPsjAt?Q{0}E+=)khlA#RXAJ&w4*G}f7QRRY z7lm9j3|w^VkGQxUaypE0b90lkwzG9MKjd&&&fdu~`oorG7!2;#?j8FyW@ctU{Qv*_ zKLh`823l!1d_aorE_=0gFjyR(z{b7+;^5@s=2^%K^DSDugkNB(pwKd55m7O5gt%Nn za;4NN>D4l8K_E!0@1vv5Dy+ zGmFDVEUm0ytZvv+WGa&|fH>h9s`?c?i53t$AE2ns$Kaym5ZO!&F;7a}4rUb-9| zb0s$J>b2_$H-1XIdHc@YpOcbP?xm*PPtVAFn3bKA`zSB}N#WCHMa89M&&w++U%ae( zRbBJCwywURv8koCt^I9BXV<%)UgrD05B&p!L&GDZAIHWgCZ|5Jrkm4(*JCgePqoxl z_qo^iHJvQb)7f@mPK}X`A&(aO=y}H)&j%GebFH2T!{cw-0%UecyPd$NPM6$}X?9{K5Tu^1if~!qDXD_o|%-iH=oK>HfDjCBO)wb zHPLHzve~W?5?~~?sh+5G$G{`^$HIh^4$|LDEEH@f*>nZ#CB29_z_To`N7s@}*36E# zoq3civvKOCu-BV&xfSG`oIs7|ljZXDd`@OHBk5r@Hp;0hZq!}W;?O5jM-TRKLXdS$ zm!*odOW;9ikynS$#_gbzH51znpD9q}L`efLJ@t{z%6Ovk6?^dxNa5piw+sc4UGK={ z9+F9C^W_p@QToMkSMT;8Oe1{@ug=K&8M1LPF7!CJ@P)x4B&naB2?WLx1+&OJ1L3IA z#Vsy`_SQABW{$;ICi$X=lz1J1`@WS|!}>5d&fLzH2^Hp7(&2zeQfwRK*sHs~k`IRW zwoOGnRLz;J-O7YIrnjp}A@8)k^G#-g8=CXnD?osMt+m}HiNYk$_t|0OFb}Sfm}tjy z!iC9d69=heGSqmXKTB14q-i=wBHXa~@$#Zlfh9^5V%qvO(CjilVr`69& zbi7RBOIE@?e7ga5vQG8w(0yq^%Eu9R1j)%cGIDN%?PA_&5+U|K*tc083~=pM^%+99UJppD;8H8W zn0;@#p+U#CDSqEjvqjZB&24D+!xwxdDTAv>V5X-tv~%Eun2eO-vrl3N#r1#KxX`nK z55ShdEX`8=lWL6^EOFH%uj=h|8d)+?o*sq6(xKAQCPccl4D}&WO7x|8EPd4p#kqD; zVXj>rlOF>55Sr?O$dQ}kz+Kw+RE5qU_N3)dZQ7FW=EBR%h z%aRq^t(|0YepHU}LKyZgVRmA$1yMQf3ZSsXyzyS34NiD5i-3V33=T)5VGsm;`)^ru zU4KFO4_hEr*hpBa)qKtN`ltuC`c+9cbP}FFT)@hEk(uWDuHv$2dT3Zl(TthAY8SuW zNN;VnjeMM^>H}AfUNuPf7 zvqToWmffFa7QF$2da6CUgG=egj!ub=omEnin=(Py&G@1)W-n()qp)*Vk_#J_sF4+# zYkE}%J|Dqb(bUd~qpV&Mw{?17%kAwk%LK}O?^g&B82RbT6n%Hx+5l%?_DGBBa|Yub z)Hwf0zl*a&YxLMypA*2@abu~8D?=unYTxYW7AgZlZ9VQK9TiFB*kjQiwO&aG!stxd zzE+`-Uz0Z0KiSuSUb$X$!G38rj$_Z*loBc1p9Y^uEz8sG=9Das^|BwG5@2IsmU!D| zjjFcm6`yYCHBu#OW?ob2e+NmvsJ|1X;7<#;FiKw54@p+PXR=DiTn2^Zsz#lRJF>rfm!u>6~k=QKy$12W3zpXl)adyJy@fpJQ*EEs5KK;6FITYvM@YVlXZ` z*t$^>k)Tk&w}z{X5anGikFX-7g;g8hWIusS*TY5Ms_nv25iw-i9A*}#)qcI0}Iynbt7 zIemza%fj~POq?*OkU=`?i-o;s+}YF66~F1@VQ zo}EH*s+q7OXN_8Azu_Y=MC9Kp_RF7hmC9{34|f<}DlKxD*Ugo%*S^66@WvTOCtPpU zpHyXcnT|N4>JQ3pI*wr+9atYsd(r5Pq3DeZN(xTz;bicVix-LqFdkbXhX$~aP`i2f zZg(yjZe%9q46f;RjCPsW^8=$W$H`63re_4sngNfBE*TDKz@IjXPMZ# zs$0I7K)p8xC=Z8-&`;NGvbh3GksQCies+tU(Z;+Al=g|u%^gZpJ4lFE#g+!1MU{pI zC-rl#KIbdG+I#kRShz#;<83*4Vm<5@dxDq# zVv^XLCQ7XH4vuv&*FKIi9kC)h?mL&sf|uTDrfBIaGg2}d6Kou1<%E}$r;<- z30b^(#y1Lp;Bt8u^2#&R8F;J?sOYsp76)qf^Prxmf-L0iYHx{18hlL5xQ*SSiNART z9~>`lOA`)1j<0aSV~M4;#@ZM$@W#JQDia&Cu91hpSQ*_#XjO&b<$_zPd9G@NTnlI- zlda;VL13Wz@ERwr8jpv0c%1l~4HnTTO;4>@v>6@wdbF!hKcV#y=-SN;P#Z69ePo9q z8w(7iFlPd2aA1oWkJth%@sw(A6K4AE7(xPHE>GFSf=33Nk(1S~8dNH6W~{lj3FXIB zyOwvH5tf)ur#aA8%46LnQI54-iig?4Fmb#69#5fBh;}va_yzyPAVGPg#Q`_48-n)i zQ^dNjA~2vVZWsLceY#O2aAE?yZSmeeZdW-ihX^uT?|~KitSAs|`ps_6*q(2Z5=7Jk=KobMgkS8!!dGChA7GeuF;Lz7?3wRgc z&K=drZNxk>NL~&&dDLqwn+$o^spzi^rVZ$3DPY~VfL;s1Fzx_lT)_oxV`21lP}+6w z>IHzkg+LG%-6DqbUwbeAEuH30`T9CQv>);>QX>zn5J1CB%;-gUtXAenP*Yw|5eleK z(CnA^U;g#`<=J5N3;r*+zJ2<@;r`Rszx90cFP@9SosyNX;CXCNSPBE4zwjN#q}kRY zLzqURVR1Mdc#ebw5d<*>Hs)L7ix>5LG5%HP9LT&-z}Rn~{#QdGh&_1z)Iru?dH7}u zzcKayL?{O5{~HM)h#>N-1pb0hQvmwS9MNL@!7|ZkzZD7yg??4hzb#ZAi;g~zskzbp zvF+^NCHAYhxw-#6LcJBfb3{Qjy?v+pbY2Wv9N(!5H4UU%~<{U<_GOpe81@Ev6l zH{M>9YUx*5B@1)I%g666MlsZdkSAcbS%4|PsFL$B>&Y;@j?4`c2;4B9Kp^13@1JxQ za-aY(7z2fw1;FA9Kckb$f81Hf^GhCB6aWkISWiX))_s@cf5Qpp_4^5ZaiWyY&-NeS zL@PT>+FZfEFUc3@SGvCz^B>|w>p!=;ej}mponPqwx^lkuoW2{nIGigYplWc&{4y42 za{I<&$?fTjCAaNg#9quY4wB3j^L}n<5bnSZ;c)895M`_?8G~|%GO`XV#eA?Rfk7ak zgU%Z0J%f7lLFxYqp>x^H%k^{O^K$*)Lg(fea`idh0ZPLc?h2u^gM*$2?ck>FN^ET zy7=y%`NjL)O8EOj=gsj?u{2x!d35~Wxd$I8zi@+QgB(Pk;lJJd{6Xt4-|Ydw-^BzQ zm~VW4x%KVzaevEB@Z6%Q7!25NQ@%zmCgXr?m}8FZ-DUw2gn$J=Yp!)bg~3ydM<;VnR(XDHH2`mS+^`GVd+@fo8A~)gzLX zKua(=LZ7$Xys`>_$iwm|<;V{pBI=Wrvbi_+ zdPRZP(=tLBf~IP$Za;aqrKTH5CD<*fXv77uIzP9Y3>z`Z$I6xg%!P$}r7*mKKo@fJ zDo_J(?M=q0eslKdfN1}K^qtL_K>9K5LZu&&W7lN5;{XSbGph8E4F$5X-be4*A6p79 zd?OBO0BhA&aV)wuerYe2cBY#9wlh$8@w%i+p4Q5)o*>!_LfRF~mW7~DWt%}ytKlEO z_?Jyv0_-s2o(^#!>z!>=%>_>oM181=3tV(>TY*M&iGj*d;wKcs3vIG*MoW-G)+By# z1=v5;`D6=|Lj*FIL2Q)s5wgnFe8o9#Cu$Y_*(f?S%{}Z6iM|Gi`U~{bi2UrB%HeDv zl&QPB9Ld7&C+Voj!pnPxEKW*1K`w~ruTIKeJ|{^||Jip6}zcN@eUf&SOMO`Q1wvZ!WS z*2sfIT)d1`YWa$9<{5UfmvpI(Bt&Nv^A!K2G2Do>m_(jMk#8P&~DR}pu~>4`Tfg={6pmZt4Q_@Sfj1J6r{e*p8dbdGx$ zwTivK(BROUM;~!iWW!I&{p>i(@P3o_owBLzud^EwZlJ*jo>4946sJK@d3h0H5x`4+ zJS+bS0{IsU}0ekaf@&GI`!zp9B`q;P-g_(W+lB^!XosMH|wm^B_PQ0R@Q(96El|)i zH_0{X_iz$EMCA<(zr#_Kx3Ic|e8Ypn`=(0z0PP(`A#458LS^8)O*-N(1T4|ycH}~p zLVl>aOF9IV^W)a=eq_GoB=ih!XN?EZ!u6HJn>Rf_6R;>Ycg7{uzJ=#XrKwJ9f-uY1 zjgn?vp9U61xSwIyzHwn4M(4{CrU*EB@xS718|1NqgUVVv?U*Q&K+8zk+g>Q-yGh{M z&DiM}a1TfpMJjaq7}1gEajDIGvhcaim^fEw!nv9BipuG3NC47G`}pYbTOYNxC9fTd zsw0vRM6xngMEdvH?7_1cqXHFGC0ZXxao3L93~sqQmUaib zL6t9_&=&pxb(FUYqsLlsl6g^F%Txa1fS-BGeG5SU6#ml}9rUhkfbVQQvvoi!E`|%T zelZa#;hP z7%|B!w)y=!OGK*KxAzwR>`~Y7cHfckLuyKy_;Q=6)Wpc-AGQ)0+*VstoVvpoxn12~ zEobt;<#2!!1l7H~t)Kj;(`RyIBo4D@lih&~JJuax(xmPR9A$Glvtc+O%*BP{a%(Pc z>AjwsE8qz8Mf`E=sj7I_6*q45HAF<-AC6;-GZa>`wRQb)^VY4Vhj)%pLrHi4-lChh~Q&MD!$`(RJ7)^-?Uum%= zQCYH#(lfT67<;yNp7Xx{!F$iS_jB((_w&m=_k7OHu(!43;S}Wr0D#8|Z|2BC^1sfG zWW{bnpMDm=qfM;Nv9m0R-TykP<{;wTq5%N*^k0W;r2VpDHIK%ayT&+01jdkjq5=RC ziG&RaCq(=C5CgCgQ9;H3=!>$57%Q{W=i*9!l_q97zm<4z)W$Uo{aTNH+{8s2);7E0 z`uKBImm?%A_^rtqF+a7hdG?iAPnC*X2)4+c|uXh*?eO=m;Duz$u?*?A*SH`v;2&*#m6-}Om@~3=t#dOn9>ZL0WN-w zEPZ>U-iuJ1R-?2xXkM5NIK^@5AX<*<Fz&7%WhsgajQvB{c!uAxaSKm39$CKGla^@dD&Wl>P#y0ciI;J_v>7^wwCxRWBc> zFXl6vAt%Txia+~v+sIBWie$E$)R;_UO8%#JD7x+9H+(up;pWRgNfxCk&kHJE+&%b+ z9Gy>_VK95VJq17?x|j9%4r2L(Gm|RV7$DccQQoG_*ejEYj2LvxCrULrE^Ab9?O1sgJ#HE5HONfWX_aZ=gI;vCQQRzNdX+16+ zJ)w>kMyPuAM!+Ted>HcnBD#H7U+Sxi2qTC`n7mRyqi9!y4B&g7O2r%{E}+V>NC&`_ z;*n2-fo@>CChv)*(|`6DvIGGbbbhsc6?P<;?nj@J*~#ZVL& zl)ncnh*Q(?Am5eUsldO_`!psEG-)tw2imyAF_M?{VaZN&XS$J)0oXeWW_pf}k=7>l zcmgE?mTKQeeGCd$4t)`tOh5beT!FdXIp3GNYqqY9+o-vzU1vH^QM2L*e(tCd2iL_7QJ*KkpAeWWwc40B^b!niEzJ%_Ujg(L{(lJN z<60QRRd==z1*W}ej#SG)(=Dz5z&_OVra^XHF$Z+$IJp!|=WmEauc$WO zT<6kTvQ8vl21l=}JpY8;v-;8WN*I)V8+(FSY_V%TGV%tYCzSkP-5qGVzI9%C#NVTt z{WGphqbM}7-K6KzB4ghU-r=AqP(y_8b*Fs^TAJ2dUw(VshLoR7!6nP5{iL*tK87<0WA^g^IMAZFM zk!=~GWTW+6C&LPYD*o4nM8mhbiyhExjCkdP6zZ*0lV!s*UCYkodM2lF4Qc1d*m_o(0?zEYFxlS6P zk`jT*&yu2#9mUfFkLA56oG~zdS>)(_ zMq)!({1VwoU~tJ;HmOvMJE~r)yo}esY*zO(Rg?y~cPobXgW2EfTQWEb6*IlaCIYGJ zdOF$}X#Z29+{ggRt+FCEk=tg1PIb=gfVGSvud7RC?40-F8CeOLi&XP?VtH-06)>Kj zYLNZzp8$Bn3&^=^(DT3y4!y*blEX-p*Gd zSEa1$$1o30xSd!yxXJcFXxsB-fw_V#7Ui?x-6@Z=3E)f+HOA%K*F9*pnyI&Wz_QuFe4Vyo>2c;NGqwr}p7w$`d^T?Sk zC>2OA`Y~7@GaR=;3x6}C2~nDk)*faTt!vs7C0d&sTI`?~zQU)?o>qiJ^w8MXX*ZHG znaT_MTG+>*-^|jL_orLYS;{7Nc$CksH1i4|P{FdNf%^h*y6*o#p3^(X>iwOoVF#ji zxHLYAE$Q9Wd#Y}JvizqfA8X7@(=Jv-8c+|}G{5{Bzw3Q={@u5`F>KZ*^xy1RaA(<^ge>@DM({V=ooB-pHT%Gi@bgE3 z-?;{3Dk1{?r*iwPxg2gT4%zAw;uLTwBy3;MK`bmR%+TB4C)jge;6cNHAg`4Ejh|uI zQf<o1Mc```Uc|$P9CDdK(Zra?Ie&YlXoA^}K`?2dWIePVfC_&+q;Bw&-RRcG+1C z87DJx*ZF0w^J7X_oH?BrLNg_%*Y0Xt6rL|`_;>cDFVh#;&Hl{zlUrAoez$y{!}jkA zjrzaUJTzk7HZoB;&^sA*X!5MK
^#&rjVBiM}tB4p_Qz5c)TK*MdxHg%;6k0hb; zLSo&vxal8j;(0QBYLTug`LnUsN?u&@+)a8p6%1cZ@|O5^TeI)`w@nf9CLQtyC)T{J zTGK|)vhnAim9v@zc|^Zn3>Fl|Jg^r~2bXwqZ%3CF44R7iaHrjmHo|D(}Jew)uY67LY5>yrkqPvfg11{s$YUE9m$MVyQ*{OobT-K8p zHlLICgxd>wW1pE~=Jbiu6EWYD_ZU}OpOU(i<5>oZSY^Odo*$6!>_P&kZg$oy?eP84 zZHdkM@V<>M?j=o$8sucVHt9VrE9=Ser{CDDA@3M_yWwr8^}{!|kG`A9_E#=(haWJ0 zsq32_Q{Ik+BacO-7zCCCrq~ zSTi7NAhrjWIgoe7pOsX+t@>$eT8w3NuQJ@Zr``}1_q4uV$ebh|*U!c<-%C|jA)K6j z9xhg1A-}7-@3Fe97=5f1D-KG{)jKkN{@#^(HGDy^=#WzEPo)KKt4lXrys5nyb7T*PdD z>Z_)-`NA(LpV|DdD4K6INKvXyz4w5)d{1lXwu~_6B>llX;4h!f!Pg*x@s$VFeS^jR znR^?2=MB}wT9Q&ZY8GwpYvU;v13YW_CfcVM<`QAD2}U=QX|*jb_m`FHBj+^KCuk~z zG2ElL7qB9a=PU?`?lS$l;cY9;Z=j0>PG0qJ7DUUgI#e#fA3t8^^ZIap zMk0G(2;78g@P_}9@fCM1GSs>C?J|lICJVb!ip961ccA)WfSxux!LEaI!`XM+SHZG7AM2@Z??_n}#bXVL=r;P!*34PDU;9l+p zC3K=&_-v7dg~fs63ABJbcEGewzR4+{RerVRm8_7s=^kSW7(2IL4Z_(Vc|cUs;k|pdc>!B!xBEU)S+DDS;sXXU$`rtp^J4 zd+)9s82W~E7M8-EeC*KirE=hizt6bQR2plC{CC|78hKA_2pSnprX{8hl)o~Xb-{Y-E9Pt!~z{MdokleRrootFjRo#Taoa<7?NM{xuZdv*Bf)Cs}#P~#^f z>)AfHFHVjA1em&9HbWPNKI8Z2C7jmW*Uv6hSk|5d`VwPts9_P$vP^ki?Hs*bZjZde zI7_-}&9oPV#sN8e|Ka^1@Z^C~Qn)Jc``}_-c zd;uOwKFGX5J}981@zU2?{BS*dxBNT#4$@MPccvoCV!-$5=q7m)4zariKB8~5{#^U(7K?Nb>0Zc&srx71Ps0v_~WPQ0S^OMZYAHC}!KC12>$NTnqvFs_$fVm(0%U$7wKWY&VOMpTpgTMciFN7tWD z)3LW1JXwOwtfvis3;sVr`XC;ZG*3)>^%ly<4MhoxlrbggXHcJWN|Yx$6f$Ggo6Cn{ zZ${c8jXo_|G8e|r zjWb3Jb3A@ck$~6w$#8Xhm5Qzd_xw=sPKu}DDWt`}HKBAEHFwipqI-Lf=*F`yn7}b7 zHI*SvO&8y=spb{Y1iHv5r|0JRpn$%OQ*_nq*$vGt+$`DvX|59k;ZU>RPOf%!xl5!Y zUytu$h2WnlMr^F}h{~if_lL|rJ9wMm5_x1a+aj#jphu8N#x}ORd=hmZlfjvUJ`E+3 z@mE^34BEsb$~+e@((b9cL+@{o>+=0|bb%du>yY@q`UgZEasTza6}=HSZ<{T6PDDa+ zOa_VWlB?b0WdblUjk!1r3Ot>R9ZB5NBSkhMy<&7Vy6)4|@% zYl;&n$U+Cwu>RECe&6Bv!!CvDJTK<}J>=EiJLDpDHC#|#ctexsnB!qhN+aRh^z0%r z{P+{!G8vxaTxm%@IHm$t?`@rSs??aQcC3SaPR2V?QK6uj|t0>qO^2FK91 zR8(YPVll(|VG7ras!y)XdxX~B+w=_FWVMnTL$Vn)4H+07wUTGaTYhy*=h3o!(G^h) zLRc=BtYnO>6D}zEi#avi4~27q`XMR;<}hvnpqek%8Na0@vw@>UY=GEev(X zZ0pM+CMoW7qs{6VCz0uwpJZ2M@m{;Oody&TrGxTn@RRAh67GoOI`Y^-GHFL^l=jB-jo5*=iVLe(Hn4*xKQb@R3Ah@*7BQqnBs zBfB<8vrYIJBF+|N@J+-`jE9B1NC@>7#)+tdavw6(r0a|idaWDhB#taES*(e1<_3~` zL4*4_M0e|un*M+{K0pggL=oE>)Ce856El(t+?tzR4-{FE&oDpMqWaq=CO|~cU$Eta!9bymF$pLOCvs?~NXVxY+d?j_t3wfpQB=QRN*<5H~KM~W% zhKY-$zNVy76ed@6721{=?-vQO`H)B$W=R5y%i48PU-(m?} zI(q%<+}Il4h;!u{Bug)mRP}*URsO`-q1YW@lsP$mK^8Zudxfsc$|RG>fckpU7l~mH zUSm)!o|1GWPPcMN^Bvv|?r~Y%&j$`z034v!fY0aZe}*j6uSfOf>NE#nW1$s_cZ4a~ z>v*E*88Oe87wKq5Z0y-Cp0Pv1ss6iBeSw!;!(hMG{BYq+#kq}=K6y%=+GZl$f zmvc@O=dy%~SGS?Z^ff~d3|gjnKxjN5;ODlZs?4c<6;Xp8Aw{3MpI>bR2g>;-60LsEE64v~PG7Di5mNO6~Zpr?Eg zzjmBsKlEa}?;~i=C;#;^$WDzI!cux%aT`4_Q{4R)wJZz$cp{z!#BEWxWAcP)=P^?A zd87=|kC|hSh*Cr$LRaKm;dj-%NG^~m=lLWTDmuCUOnFY84y<@{k9YDlYb-(JdkOIo_m4H-7LawS5V%KF4|^ z^1nCf(T&KXO=&zH5E3{f1Z`Fr9+3LZsF(NYdV`SEfF^w17c(|{zP<2`5 z$hUSbKSb)}iO>>JoGJ1HWzV-a!uHDuW@E;y5xC5Bnkr^8+ z;)B;!U3@xRtvnG-B_zGZnt7C$L5DrV#V3xNMVSgF*C3fP)(r8kirpPkD%~8}Cmlo- zGTiITv}GO$nQgqd(ka@T$wo7J>k;iW3G@YgFwO3vgj+g|B?aje_FktpXwxoSv*Gjk zWGNG~$Oj(KU?rDhx{US&$^e%gNeZh)+|b19g{{JJ&i2yF%6=u+6oI7g?pxv&+PH|X zSq*nwpv{G1#>gW*X;fztxpA)eN_2pHG2$v0I`T+Uo)f+!c>Y|Wj%~8ltlm}>@dn8k z=vd5Ui6FOv1#a90CtJm=Hu6zo=?F|Z?Xz|qJ3p{f{sLh%kP-B`L+y|p9gW= zC;+1*A7WLZ7G=X=9@6(s6V8s`@@ERVpRh-kqU*Q?fVVeCg{4^TgxxWs! z3AUIsbg$kh61`Q3U$ld`EN}m06>8Nh9NJT~cM-Elj~l)`SL?BHj_~V#l+TFrICzi0 zH4tC@hQ(}**Yf}$K|M3WiWJ}V0k0bq;*zbd45TB{$R$Z5s;n2xqBc_H$4RrSky%l< zx@!Bm*3e`#)akBJMnM^B5~5V=W@xcF^1)wQpQ>ZxtvY%@GUA73l=Aha53t_n60WIp z0GV`0f{Nx~SYiZ4-U@Of2hS4(ahqILFKk2w+sU*)sV`QH<`R}V=CV)lT{#7DA2rrcZCNI5Wee<)gKFr=WEuxlBl3qNsEieXj#$J$ zHFFIGY?7zrNoDu=XD2}LU5-xOveMm+|I8rl8+r`y%PFr!FLWJUEkf5Ic%7SC- zp)LtmqN$(TgS=2lKqt1!|ruRo_9os@A# zWoQlg$T-@ta5l)R@ass~3pPmE-Z$a$cc=$|2ix&TZUz*ERFq2Ir72Ik_}c;LN? zv7=))I}n9VhAISO!j}?|4TVnCcn$2v_#S8v&WS~wD`X?wia+1GyZit-96`~z+; z2n7Ov)PRd`qa<=MG6m_v!$$lBRQfs@Oe*BUYibqe^64I*6Y?4?b2ocGJgxt?m{*$g3=11Ih{?&pq!^%oSq|PfFgVcHeblf(W;Ev0 zV_W^S&tYif&5M|TEP6#_o!Xp*z5A=q+IM;Z4x8ppzJvW_%3TcH*fg8mx_}3;M=9t? z1}@zTqiZls`7MC4`K+bnP4UY`9P%&NS)?qw>=LFY{GUF^mV6s7K51rSfi3DrhZ`yP zQIUr0|8&#;Z}k6PNPxkqXQi^viF#4RNd3R({UTJ?P`%;2 zI_1Vu?uzW*c<)GCSZa5pXXw%MPruD>IN{ya?F(MCtRAzhcXsY%|Po#TBM-MB8->Zh{=%C&XuFlTG9P%%i zx-FCdbeWlbwv_yf`1WJqJalO$OanhKaQ!Co4kz|1lo53OUs1>l|3CLtaH$l!`K*4I z=tJ_w_yjky-B~-PHKwA+ekzPoBepxXQ4th*K6sDJnKou!G0S|&8`B|NiLHN&&W*m{sj);&y zer6{A#5G!_Vcop5RQ(v?+7W$@$_hF*{A@WlAa`<4N*CYETA$0#RiqQNllfTBq5svt z$uuly@{s&zVpo+bReqAVi^pX1_3BhpOK@$5mD(C_`CIi>!BZ-W81H5>=&kUA)-N=w zHP}pJ3C-Ck7rOWM=LTY_+y5#N+UCivZ0v5)E7GsK^T55M+j7|yS5W|?{r+h*o{~>-_VwJ8&RfivBpE@)jfdImRt|>RJG#k|DZ2z<7I`m zca%=@)RW9l-if43#rprScBYk((X;d$8nB#S9!9Q5jGE{K}rQw}vP$%+;4{~I>NqmV!@cig$!l&R&lTGrif@g>dUeys=1;Ke@{$Oy?$ zG4ppk68!XWbXKfT((Z1>Q{+gO3ORVkrjfs59Nrh`Bt<%R&?kD<+Z6kau_0^9%OzX5WYL*~JR!dKEpkaT*p~mWilFcr65-E;w)TTRQxRnUF6gg}E6QWCt+C8aeEPkmW ze#Q!vpT%P{V}-vJIXjA^F{)l(e*?Oiss<+?^2bLq&KR@ivE1e7B%5I&PFtpms`#Sf zJWdobY$3Ss&LF=R|qP6lkmEa;BOpqQIoG|KjP+})xtbnM?% zo{RDYo-ocs!O!T^;AQ0WgGcM0v^DFr4WCfD!yNj9sIncr3~v8=c=kArn~^&SHlcYZ zwTx8)^Nn)YB2l2lY@N$KTqE9OOUS&YWxSXlp8bu2xRX(Gjc22`_bILt@jRNn`Z3)b z|I2I}xe9?_MG6*2JS2=Lm7q?jn9vZWAG>f%@jmuk$rLuncvLm_%`$uyFLG`V$1j{N z*XEgO^>Dm-Mq<`~hd{_5gSXCl#;IzB(lA~%WgtycHTG|gCG%*}(IR32I4r$Bn_VGN zBCa#sn}g-{gyMmb&=w+i6?52%yxoLdL#D9zmP0rG|lH}+reoph9xAu2k^PsB(zGj{w;3&>}^7Ld^$Q8vn zk%Z>{gB8OqGw~(dI7jtkGs|wUoS9YNDciq$s^tzg_9n-hEiT-6MWIj{Aq69v=wSkO zzTzoRz%L`zm`qWS#q8ABzZ(LaJ=Uv#eN?4o7(RzECN(VfLmEo!oh$dao9WJ27~&3% zRT1duy6116Zcl=I)w&S0Po9_sCpj2a!&I7V>L1vo?`w|m3*C?6Yxz+1Gch~j8~H=&Jh6V{-V|L|p(8a$t?jP}3guvZ zN#IKC{fsGJI6s862tw*s^=mcR$M9M5klAKx|4>qftMjweu$2dW0kLAuC*U6~EkV1P zuButi5?&lN0PvXQEjRt+zuFS@*<$wlLMbNxDvcIBhK`r8&iPVnwY~~R9$O#^G*b^e z(n!_Ho@AJ*rzZS^Z%YSUAu{~ZEpmIwGMLRtM3M0e%WmHlO@z$rG%3$g3=z;g1TOg} zLklaDyVd*RBWW=Q$qW=;28Xw#gY{<1@1e5VH@js33vKkGRRXxomYY(wxNIMb*{wg} ziJfo%N(m6>(%!EmDx7tp9`dIoN;v)N#C(w_e9iU(nwQ0qj?C@M2|(D1f3icmdNk_6KmO9^a5!^ZXjIAz=>~HO!on~pTu2R>G`-L7Ke+=?Y{gW;| zH4=~))MFw}V8Xn2YqQNkZ~|TLWkJ*cK#Dx2MQ_lJJmh<}8<~YeRY*GV38&afmCf_e?ztO&8d0u9p5;4~Z#^OUy$fq@3=O#!_O zj!a!8w5pA(b#2YuxYt*4D=rUkZ%>_?b?mQQy1^}#zLV8n4kx!TO9`1$*&_yp=q6J3 z+!{@g?gpKMaEU>}oqg->A=x#lHnWWf?hsq>EIW0TgxWY>Y0;?OY&*A!B{Tk7(1dC; z812g;Qd`1yrQAT0d{03sDXVr+#|rPbr~?33KfzQk^yCG)R8>JfKqS8hPjy>?A;Jas zP(Jydfm-}XbV>Ae2X<^hRI$hh@y_`oh3$pE=SHr2=BNs~DC&e1wtg^(oD*{dmZ#j?2scQD4dO2g z7kZ)(lM7##!8nalCnmFdzsrNUe)lE|plNG9Em1jHGO+f~9R#Fms$;#)@qHV5iWZN- zOz|2CSSsVdVn3=YmtTOEFBu5I7(d)VpPjp1Qc*ST@qn!OvXY2`~LJ= zM9+VF?Qgou_(&V_=&9+rj5OPcYm=<0;)|dDD zA~U`LZ#KBWWH))kU!b>e%f8kB2)u7${Q0{(UENSPnxyjvNzXai5&||NT zxwOuNH}6}4Q9Q#a%n{JtvWl@RO-9|5L~)hZH8uwl4rWdZ8>d$aYU?= zSX$$Fku9jt+d?KWS_uMp&p!6*937Q=B5 z9Uyd}xz+58^WlwAXm;wy+@8-p{1?T0t?+vLIIQk|J#Z*2V+m1V6j`B_w@ucQ02QA^ zD-Y1PaWK$dVnj;>$Y0cew5{~unF3%VBLU-{SKewOm z4o$E_tm&m=ln<%VSHa_=orXVNxt+vg=uiDNVs>${qMWF!GUvF7xC$qH0qi2zN2q=F zCk)udR}>ZC?Cs@WDq&zQn!?7q*!X~R*ac11@f$wPeUst!Q1aEd3F}qh!FZhQN08SKX!JpRCJSEg?T{*5~%Gfx=%{3$dLD zp~y!vw}`J)z}X0VQ_VA)qyu|lD}e3$1XC{MY*?kc08ey?!?3z0V(u@AP;59KL86Vp z*IG;VjCm#q?N@RG9=+X+2@@wDg>d!(JqiB}88b0l15FZEJ@5te$XhVX>(wVv)}Fzs z!LLwShC7O=u+LOc@3+D`;7=^Iz}8-UQRrQO7QgqKw~YHSfW4DUDnppy-(o2-L1-a>1Q83XV;2g^!X z4`H+GX-akELv@&enXOFBtq8LCU9i}%9 z+BKSX$!n?E-Z1`Tr2M{gspU&QTn*F}e+mVoA@GW#ncQ+EL@+6Sx~Ow?QP;Fgl;p#7DBgM9!FX+-1h8E)LKFMhe7WeO!Qg9g_gXr!}6DeDLTRF z>9gcjTI%k%Ek6VepIy-8YH@N!CTn}YTCVh@iS3<5s9A{a_#cp-1uQZ-J^;>s!UW8vV@Sy|HnEO<&q7hCsY9=Xi zBLwW8mqye|kLbIB3GO3LNNzh@Cz#xl(zWw9iy_u_k4a9le!OI6pP+>Xzp2$RzW1h< zd}V#V*DN?(&?(}vuZ*g%zn+lKF01XZFt*Xl(r9u_%xnK+T<4~d{9gXpMU_rrxW>OY ziB!7#L=*7O3Y*;%r%hsdF)_R3ny3tp$8z_}6Pr<<=>vork| zW5lYEwORgJx-^n_gR8CWP~!kFqK<3P=+ucU*w!U@Jn8n^g_uKMKc@9uclEQe+hnD3 zkRB)0lc&P3?)Gw;;@5T<2L?$zLqwdmVA)X`&D6%WFS2cCbob&31#q8+=u%?2Rp!%* z-@4UX3#CUb+{OM8zH&u(&&e%0jj7M-wXnEaI5J6nc#7!d1=Jk>q;%k#D!OQN~EdE#CBxVAy0+5|y@L zijnoSy73&YJuCH;^r)q~Sf|=uH=z9GkP-TYyNtel_<+e&VAj*qcmPf7BQqz-j{dKc zKYR<|87AVqDW%C@m{dDE)T_kpP2AX~f%e`H+6olXZvDZh&2X^lu3C3*=shS9sS{RE z&Ki}v{|iL>*UZF&TcW~QihYiG6jSGzN(-Y-U;D%^scK=D2Ky_daQRY_Z3~TBX$eL5P`kMY|ArWzFI}+j|%&a9{Q6f%o zS23?GXJz}n0GPn#D<{YUg|nU(i_(9;%7%&aev&$e6Ov9JQL;?d9hpRVOZF=(TdyiDsQv=hQ;IV zfEWELE$gj@voy@26H1$FSI#FKmS=cG)0xpSt@Fg;UXh9I z;l2M7uFC8=Ayu_L)5RaY%Foj~`jZbF&4~4iud#N0wk&R^zPId{Y)ri`SvtB;#F<;| z{svBOwhKN7agjaC@EuQPKdTm1C@vGXi;B5o{)P0FnHqtucm=*HcxV9#x?K_`ZzZZ~ zZNj;3f>kYLTUi5V-M?dG+0|=HX0C#dwaZ42W;;~2)7wT4Xv0>GQx(`@a{8AM)2Vq} z|IwY3ts5^?Szk;y&D5ZVu;q`4pSr6rS>!8{&+c^u6*T|Ia(3jkH;q@lCge7}tkw{F z&cs@)7(4CUdq-(wZZ_dHHIRhjkJI7Z&NA!Pl5zmWh}Gn{_g;NQn0@^hl9{|>NG#%8 zS(igv1RV2rt>%9Xf_Ic`VY>8DY3r;7zs0yW9?Dt=vQwXY z;kR&*o_1B=A5(w_!6?3tw<=lRjcDzi3Gfk{7hhuSm1z}AhwtM4cILlsN-gM7(*pNMBn&c%AyPTgjgUV|5pHCeHN2iS$I-RR&7Gh09TR!ht^ zz*Ko?ghNZyEk=rHFoTBU!QuSYowp>;nFmF;QLCMjVoWSY4ilwLuZifyH9{B?g zI!$bozsld$^lOr{Rt`G~f)jWI4$J|V`C;Dj@u<$I1p$Hz_@z5I6fcO;Mu~P3oNoq6P?_fMQc;*`4v}1htVt4cf^2mC32$KI^~KiC@|;4oa>Ls z_C;b0Epzl+&6s~1p!zobOn3Fid|m~Q6$l-Sun~@?L5Z{AE0{DBQ-{4N8vEcV&F5(A z0!(Kq`nVSpSDW=8S)EX-%27L{4)lY;k6Vod71vp?^};&C$sh?Ws@?PM9;IQz+2kbQ z*B^dH=K`>~Jl(}_=qg@?x%@(&>Z}4X--8y_2u8oehphryB7cUxDlEDAgHFz*Q96dx z(!?v_T?Pz~0|Fs+4BSlyJn&1fTCdt&1ig?!Oy-mU&o;>(SHC^)# zwM?Lh!?kXWhUsGB)wyMZYT{;onx=6dAGQFUKknUIUd*yj)?a0|t6ZqaCB^_ynEwgD zPA<_*IAv~`BXT46AAy=5R`UXvaVXITEX2Z6)N=&~P6u=#JN=wisv72XA0U!@M7~_u zkFuuj4&cAspf+(qYg8)^2bgdR_9hr_Pqg}dbWSN=Tnsq}|G11a;=KFq8eW`p$8VmN zu;+dWDME$TSLLJ?9M58@nSjUp>UFfY6@)(3<`=Y9&waObpsE!bgWedlo=izBB@HSb zE#}p8D{KImowLEiV(ugZRIcau)60Vak5RvB@VsbB?7s<*kgvwwQ2!iv7XU{sP-y-l z;~J&F#w_FI6T%+1*)H>(Ignj(MezbMo8t+6rkG0&;5fURfQkM=Q}Akb0UmoYKX6we0Tx;c4LI(D70_ncBE?x z)%u;It6)=f9)3~2n~0Q*yW9o`S{Z^NfJ16nj(@iQ-m-Srwn?3s9gIr5dP~XOGO#*% z(rsr;jt{TrWr`t;6jCZX#;=GCpVBQG_5anhN)lWbvZiO8xQLIXOj*LnMrtDZ2Uwa! zQw`&HU>t1pH&%E2t4W_6+4Y22T}zKCNMl7Zp;T8zLD0{YGcCjk?|&vNVJ{Q-3u1u( zu^E1if3&c>TWFl3Zj;cuf8vr}&6(j?!xGbY%eE)4jyym9mr&MFBMmz25 zfi-wb4C(T(lZpVItJfH?!xW^u=rQ{v+i)TQClZ}2&@1hsBUi^e{qN3umNvO zn{d?VyCjV`C^CyoDBZ(DJb+>9oe{N0Yx`JM0#T=L3)M;^rlF~mbrYuuwAP4H?`Dpwq_ zWcsDJTYKyQS)7^C(X#mYV|yEmTwO{!AF)FjHJLp>N$(t`t%7|Fa>UUQUs>qOq0jGD zG_Gncqs-~cl$!4sQAaKi@>;q&0G2L)N&v}VoLA-7M(_T#CEF%9{piU`E1|ALRuz&5 zvGF-aisHD1gIWvYoTo}ejf>q?I*aY=H6#U}f!;JyZ_GhTOQx5ZU1K>ipP>O}_Vpi0 z3Vz)I+mxvk9^fXp5{1#f%5+2Jk4Fzf^L<60s1=XQQ+U#}uz zW&`_D&HGWpn)!_6@V(i`x_;?p;%bf~$1&SOtUkxa%c#64q0sqVRDeuFH_ju*IogNW z?(H$Zv(-LvOlt9|cA@L+umfEd@cRdw0T7tZvHHWodnH51t3Q^@@T|10yS2VAt7D`KAENY+}VXZa*qW!g)^6s90)gyP7nL)6M> zqM25@++>yKiU$1LzwD%&CS$z(T{Nh`z9kR-}W{2`}5o-E4x+5dW^zU}1z?rO3D}k$8KN~7e z<9q*QsdE}Ux*vPjRzE^SSn@Rd-&|3N@nt=7X#7nE|JK5Q%~nHZxV)Lzg?!$3v7T=Y zMDvrvr96k#1RJ|c$@)CWhTDGvy?o?Rx3=rkmB2(D0kX^ua30YWA}T~(&vYupzFS^v zRGjVBu!=j@_K+ES&OWhT+I&)@#oz~e`H3m(Bc||C5&5rpnJoZh$ zS!F>&zVwEHCNBpUHC znbj|C{31%sTW4*ph3l;JvU;=sn#eypo!0i;S$p2XHC79=dcTAr)9EG5 zZJ`N#*~hlEu_pG&e>_Y7#^uh?qE!CXKq$+w+Lc15#=>W>y3DqsFnf>i+VS!Ir$us+ zNO6)VJ4@eYc39FCAga3ydl&A=fH+1ASj11B4WqGaIKPferr+9CVKJ{yiA4?ZC)SYJ8}g^6;>F=C<`!AJ1u;Z~aqDf+m^D^)FlJ+>;=1mAZlTivFTEjCiYNyL zf6u%!I#Z7cbL3YDhn1xl0RoO0Ro`jpn)U9Lx6~GcX3@BW3okJk+tE=S=R{i; z%Ugayx-|91h_hoJI~2ZoIRPL3ir19#6-oFMH9DO9s!@EiAHJfJ1w7!c6U@iMip(9< zhaU_z?IO&8Ft4hCW(=>5S4D-RCzdn2p~c!&RCZ06pIQC$?&@6u0z`$X;Q2{-wE>!v(V;lnK7yfEoFcfn)lZZF!DP2`B4Z=^>< z*kp8_RAasUmSDgBppTYn`^~tf^3j#0OV@sT!z<*`Ezf(ma-P~1tU3DQhI3z~B|A4K zKd=+-Kj*jq=`8yv+s!?8ZN7Ty%b!$tschaU)(EN$-9p!rRTDpS=T@W^)VKG#CN=U1 zr?Cz%!9c*&5kb#rbY-QfbE4}WN|S*kX65H`=b*16O~^ZXMUk#^svvLFMQ*=?_i>7+ zBH-JXcCzPiF3^Q|LwGKIXL-)(wzE10Hk7siZ_2**p^lUHH=`{JBB`Lz_(S!zwWjF@ zwk2c%;LjzdPI> zItG=_R)@VQ&tKcoWuF&)c8HcA?c`vQ~=o%nM2QTb%| z5)aa{+&c6;SkhS3NB{6Vaub{#npVDKM0lp3?;f#4#U zjq<+EJ*2QW-}bZ8D^0WM9_9I?Cok$4G&+xXfL>OTMnRv)wCrsqk@APc0a@)jSF3@% zNkvZl$65On&F9)qO;0}zA8p?p-Iko2?zU&n4P;ocr=&5@H)dKuLvf58l*eB(Mq`N` z=cx<)JBH+6w@iCYc+QY#-4+#VPp$WIE9;zm587)dS5OaHD$#}&w!;_7IirVCbPNPM zJr;50j-MU<>P`1)*I2&#Hok3!>H3bSv$*Un;Rf;-W(pjirB555Ccj1K)|x(l$$(D- z0=+5E!X%B?ec98xc@!&+vo{ChcopxSZapZlr=Pu9GA%t)Iuoa_@3?dp559SKUT^Dl z%0Yd5dg9HC5$;OJF%sKK6%V?XFoT3;1)^|}Zz^fL>`PV3$BK@6$7}mJn)XBF3h!$4 zCxY|G_A5U7t@cNy_c}G<`#pJgN;n|;h+OETeXiU%`ptu=>G@&L!8I-gVQWd8?@o!n$(rP{ z-ag^pjL#HoaGk~^7WZ-#&oJ#6LgtCM7Le)BzK}Ft%w0J>e|eyQz-vvhSBwZZ`EOu6 z&5lkFx;5>b+}qdj>g0gg4~dc+Tj$Gv&xwE7kWx|j^7RXnCoq?*akR>YD9@dm=R3H1 z<+r%L`BIwk-V)j=C^ z-$N;^9b*1FZoV?v#3xJKmdnS@XGwpBz;csxKBG|DFD>;MJxZ@NX?PWxsdjgFFF6a-FC6O6Os+6_ zsWF`mO-{hBZBb`;PgBsj?UKeHqO7NlwhG(Kq{wQ&H+Px5#u|RYU3*Z$nx}LamIX%{ zXS!38{==;KnSvA12}&4pEQiEIPfEanhqvEZ;&7IE4v2Hs@CKz^tpCYdBF69SdU=SG z6SaONx3c6GH@9X;G2mvsd*aQ)k=2N#IFfgF@qrB;onToKR~?WJuSnWPzL=I#ci(k& z^3P!T;BUC>GI21=@N3&6EI5drey&;j1zwsQ5cTkO5R*Cigd6l}W+N*})`RbGjQI-5 z#~kXdc)a9*H z>drPTQNhld=S?$nqMS1uLuu1EWjsBIipGwEsA!Pv3U9ucZNt+un-(Qho1p3YF;)O;?@+0>-t+jF?=`NDzF=a1|KuT0=b4yi1@H};N5t2K3gh3IDl zkn)psLu=*-$zO*FJY3U!D{gnX?SHq2e-ev;mz)zdf>7I-+9SB`Gu{YkC;4~Lrl z$OB4{-uJ^8&896%LeV^LlU;GZn^Lk);!~LOVfI;)S?5##WY(a_%toL2(@05e z?oPQ8G`M1T3xwRsULaY4jxCYm?Pk2Y{>PUj2h>4&ek)%M?)I}6JYMnphvzJoJfV9@ z0U{pv;#=IOSR1JCAkYCAR4pnD)9RU?Nu-*nd`aG3cWFONFN1$+Zu5Zf|-4tCP?S?M3lIu}+ zi(BfWkfFEiaIIpo<=VBTZ~~s1%jed)?ZMmDO}N76U2t*Kio@hYcM9x)%JNtbL7Vf^ z`f#N-smFj_Hgxoz!-GBL<@hNlZKkbVOvUt)bF9h~1>H+3pdL`=udh?u*piH1rHN)U zrWtem17rFZN$b%8C|o*MR#F1ID@MVLNJ;n=m*1EKb3#zypzXF(;?hncc<{iAE0zbqr#ht(e}FB5<7Y zjR)4y`GmMyYkC4DTyy~Q#nY{Afs%|CrLHb#<0w;?NAJPJfNVWT#uRWId>)7{pO9Qp znTS6+>qc(6W1EQG!cgQ-KT?Cnvt)F|jSr2dY0Z$=dS#qWrnbFk`xo$s!FgPEo4B53 zNX)u883mvA!6g=YQ3m`g_8F+x;P~hco<)En_@Z*PC7oo)c@G@wjXKV>4HFm14@2P} zRC{+Cw@nVvt078qL^tm~K9s^x$SzDz>%M{racRvoAu=a2ZQ`V8ElhYUfs#aP+|cnI zXmXMG$*u9|!yzx_$DNo-lQu2jNX13a#E7Ehu?Lr5m~2yirzJjV$y5A4?R|M%Q`fft zL29w0U~4aE0dcsk_9}>?%#k{k_Nw3j2?BvAiUX8U2E&v(p{0tgt)OAhS^<*)L1YRN zq7>00(3W=~lvxzyfFQ;Y2?l;^op|5%-rw){{(PVJ$IBmRa?aj+t+m%$d+oi~{_ai+ z;>%zE5nr;84|K(9`yuGe7D4pdF3*d{pHS56>mCe;rYcBU#gBY39a)w`ow0)c6?xR} zX_M?XbsE7;72Mt>=mj6G+e->mtKM|HH_TBR*LEF*I^q0^MIP02X;Sk>Vn&WkwlBLa z4i4!x9uO=KX4h8RXmH&gK9C6X%E)nMHopP%w}gBD4?*Uofv!VZLWfSj@py5-{wT#y zWh%R~6SHX9oKF7Xm3r~4tb2okJM`wnUmr~JG&-eD4+ZE4?(AN!0U|&Gwo?t#}C#^w)gB+yPQSf3`>^JIv z#h3{WuE`4=oY6*6gxl_>0g0A#!h=z!zTRij0)!ND+rMg#kYsArN@iRpQoAc=2kmCG zl*ZiAjLy#84=u?u?QGc4ocEJaQYg%EHNN}x>%EY2wfNMy0eITjyUtSpH9~Dt8VaVa zIUFc6^89h+Gf>i{uN8){cLed_8SliqCC|-f0PMvtqXV$&D)&nCj6bT>kPmvipyqD< z81;Lwo&Ee6a_I3~YcmuQ+MmA!I!jw_piBR5GW` zOo|W_na>*`3)7|NeKLjBm|^*jYmXyr%?-VWdtad+cCr`+>IUi*-IRP|X2LY0JC|{T z8>zhBbn-L0f=ar z#quaexl&lbw>)w7$v=Bgyk(uI#+HnBZ<$TgwUFjaxWKPcQscOxyGpBAv~(mrVlu8j}N9b zqk)H-(LDzHpDf4&*6-Q=76WDRRqcCi?>B(o|FTT6Y3nWy{encqAha?4oR7gXg7xN`OZ~j=&ETK)Gu> z;2EtL>6akB@?z|h%yCVA>s@Pwg!+=K%Cw||Frs^zk5{~?rqJ`|C6M#jiDz9P#IglD zG%?EdfemHsx6HycU*+NF5q}`EmzHX59coJGkxX~ZCOD{g^10tz%-cDHpvQTZycW2HkIT~@GVx%-LU9Nk zX%Xk-h155cx=&Ac;sg2x&bCa?%Io7jvUOTcJg-Fn6qNU6^ACo?=@)o9e%=}n#qne8 z+4Og-$G#+4Z>S#yz%=lYiE$3+yheVV{z{m1|3s~Yoz*B9pYZW1I~@L6UK4xTv=j!V zEp-nGPB<;D*HUEjTPvwz+S)pAmEU_)1=v>w-+Wn+H~pPAo1SfLJoy!FzJSO2*w;7y z=kcDqHd>11iw#8y(s7;YY^_M-t7`>y!a%4A^jg&!zwT-{6zf&m`5CestX@p#y>!NhD-t83_qOyc|7_*gkvr7rp5on zI{DwKP&EH-vO2KM7@9LZ6YK7FBa_Q_3b^%CedtCwgu1Qt0bkg-)o40AmHIcqKX6_l zMtOp=CsT{(#W~$@h`yO?5x!B`Oj%gGySSjBlNld;a~Zg+huFKaF<9Rlf*T1~?#89^ z(K|im`RYcCQ;Vv?2O9@nmVxK9|DcYx_7on<7bfJX%c-@b-@}VwXX(G99@$hE8dW&?`as6m zOX`<{o73~X1zk51Mw@Tjj~LSW$w|rR*qc;Kk}h6r>i175zVmK*d7a!1&z9hzz*9O@ zaCbx=O3qlI%CJaUGWNTX%RWtoQN_mKObe~G8MLG_r`(j%zUXE5w|25LP1F|P0@U0h zY6_AQ%-43srPlx2=Ivvm(ppK0?2OS!0>ETS$3L$KipmcO%X4ye`H*%F;;$`5Qen*n zP1Cl>)`r`85YKedbi%yjR?M-fQ+*~+Z<>@#C6bz0e{6-|eAOVZgwvwq0p&wczJBaK zA6=$v;w=eFP(}-**L2NG)%@BftlHJFgf3wBS7VO?5v+tR@fmZ>Ivi%P&Px0H6}{4f zHhyh!z21*Y#*ZWiD(LN5LUxFIFw!GAb%&d+Wb^Qfmg0FQoc>CeDAQFHOdg7gyFd1% ziJbE2SgHM$tQ0KwcG~9Lao@=Pf=|mMFX=-1!B}%Sxm=L4rmM`z{$X5MO>w*{{rk{a zfATu%$PaN(Hr?OZ`pC-}qa}K4gJSVRwkC_Lt9Hg8(!QIn2Waw3`5~VtZ+*Nkx$0{@ z+FQt)9e1#I#NQr&_tyPS9{XENe&VYAoe39BToAcT-8iR2Z=xpTfmOxt-1!6Pcbsh_W_n zP>=}eZtNLD;wk~$xloUBocM1T!-~He-ofs86mJd~+P4}hTEVyL(&Z~liY;~3(#T5gJ=wAq^c-z=ZzywK2vwX)BR=gnF2!kNmvoOs1;)4>q zxvQXH85<@WLP?>z9z$%-8DxjwcN=2)5y3gbmTB$fy`(}|>t5yF;p7b>jmxB=SO1zK zN)Sk5By%|XLvBc~az{d8p1u9(PX>T&IeLtW2H^3pls_0HRySs0F!3v9_XVA*+EpoW z0RFnaO=rdLQeM4nY6h1D;qbE6K?o;^x)fEP4t+D1+#&?%guHdO*x`$Fn> zUADf?xrc77uAT7#D5bF!BzNutPmPcA<-i8s64gB;#|`VCAD|q<&+#H-H-Qpw> zsK_B(m?P;x4o?#nCjmVe`_)=7l?Jfmd>4-@Uq)mZG&gn{s~mixv^ZsM2(p_OwnLdE zFy01ol_gkVNNHv%%)ik9GnILfzDjEn<{{A46Rvmzl&oQ*jjYOTxNP~3d4aWhcKh>N&?`ICU(L6I8a%Foa5&`VMa+>^ajd_;2zA!H!h>B|D zz4~P$t7|P3`Z2Thk*DZQp*?h=aTjvR1|E^po01#qvpq0XlYfF!L5+`=ftPoU1bYXl z$hMv^vg(1Or4C_tGI0+4C7lJ*c*zXjU!1ZfSJh|f>P&I&*InWZZY64_Zd?C8NbxSF z37?OIzgh`E9OaTm5RKl;tJJ6D1kRW^nM)@i1Hqx9X1*GPWCL4=7s%aM%Bm4c+z~xM(=O#E+8*-f6uc-^ud0;@%uXSe- z;zVhMx&*3ghRMNFp)F3WWNHA~0rVcHa&-p9m=oEDbGBQyL4CF}c3^ygM#@aHx zHK9^HU1Df9dhMZ45@^IAE5`@?O5;(|QJ4fq zEdIE&?a|4nEru;Hw_S7-#w3pFb>%E)FtN>WqH{CO`7msfTNnx^%g}xEEEEG&A*lyO zOLT|EeEJFGw~rsNXeiR-tnFv2aufETb2doAg^h~dGvrABB4gfh$qjCJvT7NOh)?jw z2TrulCBTKfWLKeHN;hIhH!?fbJtWO?8f3QSgV9u=R)z*RErR|vN%)!j5{%HX+f&(1 zEyX_Ueuz2FVhv!es_{wRB{Ia#7}&T22O{BjUp6BSBl z^_#xekQfp{w$O@Ip$Pz}CHVP228I3L2N04LtEtR{t0`nV)Zb98bR|}3!)=3bEP;^g z4uc2xriZt-fk%`DyfE~2qla65rww+f5Qlh5x-XX$(Q(|K;CR!P}?du#$QiTP%yf7WpF~Fg1~VpbCHm^?tOB z`lv3dKu`okck8!%!gA+RG`{wA=$UNVYylx!e5T=sbPuZXa2gCSvVe(;Al|Z#T~4^t z8T}Ar4gTO&a^l5rGiBM5>s-&|YcoNAt)yFZiJ<(D2UCFre`r$_1#sId{Bm^&o7C)& zWPK5{j9_9P4&jk3fE%vV1ExZ~U>N~?E;O+BDU{M7jGG zZc`kR2mFn2XpLuTt z4?h8@?Ynft)#YTZKmqpN{jHC8M~>tW7&tHf0IFp`%;$i!T+#iSI)rL~!>stz^!bKj z$97l*x8cz}1STvS4u#zKv(K!`X3L0xQ813toGg@*)yN@mV?*C# zo;>(VPS<=Mj3lvY5U;6&D(X$VsK~@+?W6{Xb2zjTIBi?a>*(z?Agmsu4-M!jRfkTl z)RnKz5)SW*-%HcGAL$jXgj*Ci#%6WN@Y?5e<>8xV%7(*J^oV)rF|D>l%;H3s*Xk0p zFt|yJ9L1*Rt6~V=`Ud{HL|Q~6bzwYf7KfD~vdql~RVO&+H0AwaNcqiP(mw}`P|iZ} zMo43z&(EdDG6>lml&<~dy+lQ0eOV`x^8U(f&w$ty0qDv4E=)8w2%at5Q}CKh7iaXY1hYA{3-p^Uu`vJ+** zIuo+XC~8p`=q15<);^&_G(SX&G!UK`^^3OW5J^?1e z{#hVm*35tTuK3XEzx?i)2tCr=P-#wZ>XGZ_k#rPWMFg&R$!$?^gJ4n`JWX$>At4UX zG6vWjZwv4LDJ)#)d(#`BS90fJ4QLVGP9jc#Q1xF4n)tuE*yZ25_}_)+zy05Z`FyH0 zT2)xl6&YWfmBaS_^U&|dwtlyJq31V&`u8Od^7c8bFBD(3Topjw+-kg)Gg)Xd<=MXX zq6I&w^o%7+AtG8}VfA{5rKQlYCik$PSXTBV6f1OaJ zQc3b_mmKYXxn|&j(7r`kKcbfAt5nrvVb8!Z`OgI9tL$I3jA*MZ2GvOU6jWm@Gek!> z$h-wQj*$&Qk;h7>&l1P`fclQfrMPnH{qzKt88?4A$J@y>0_S+>f%{M#zjU)-h~5YQE(sVr{vcI z&~h6MS^upbto0=koR*IBFCgqWF%9&!AqQI+%*VV0aUQl1v2Ha?%h~;2P~|3U0S-!l zMLV=`3Em=k{)y=uOyX!r**YzQHuv zxw1laGt~_e<9&rUxp6x0P#SDuRqFNEaD!3~n!~#(cc#fr0ab|5ze0bvts`ub0v!mz z>%%hhU2g;zxB{k$Y*l%VI-BaG#g2C`%2p2*0C75yP;B=EZZ=uG40yiSdl#xQEsDlH zbIxYqOKb|)v51`a+Yqu1bd9_73#9&lSmE;IGPN7XAw22ZJ64Q9SIKr%90W!Q!yUlr zie#4@LbNhvHQdfX-)7}`ahH%UoC}>0x@kBs)4gM@8O*Kzg56Q~;t6#V5I0Nhz zp1n%;{cAPm5G=?7v?;j0<}p=7ehDXQOWGNbXAUr_a808eg(phl3-v*&zqRcIa2nBc zY)&0I&q3zYvKQQS55}#7y|1WUWK&WE5hM%*C}9Jjoai2exMyQ~?v>aIr(F1dsg^E_jO;JV=B{8{U3= zjDDN`F(78W@Hkf!rxzMz;NB?A2b&~hg*5l`Ekl%N_Y>#p&9TSjGo*`PVrk!yzwY~$ z<%DUTE@@9@xuL}6qnQVoS>Qro z<c}%>9rT}w?hE!RfeK~1#e*hGt`Ij76Tphkd7Yn1Gl~<@w z0vmyk&2x}0`T|OumKs>_+(@iwuMo08q_Cle&eEnuAvAp4Zp(8~dBb% z9M=e)t;p-t|;DHsQY^sfO2y71mDQq)d4`duv|dj!cr73RgXiv`Y+We zJ`-BlQ2@?|&_Md5Nn{|jPlzkfzqa)ZKpLFwtbQUb$|aJC0DrKG&@zg4BA;8zQtj7& zr#s6XoDz80QKmZ>fdA@+lv$N|6JeNab~)H$Gg zEEC6Ys9@3+1(4T^Ce=2O4L9E+zH(Hnv%nHZ3|XfFr&`a73nW*#B-F=#@rGBcjo8H< znLFceskdMedA~41z(=dHs-BNxfJ@*;JoJ#dE5}JUy1NcH088Dw@@zh909PsAIO(rk zj{Z9B3AXPZzY(au2d(%Y*)QA>J%xe`IEu^g9?{Hx4?n=O3Y`^v!}muRlX)m=r^gpa zwI1ICck;Ao-MX)LDIr9Jy90|E@2jeRD0aUi+(~AnLd?OfFU)96UgomoUYtY6CDkp zZr~*D)kDrw8&u~FU8sjXDKrh`V|pfq1$!3J4l~3a!+8lmOAw_2?loKV6rSA}6q*PX zSg7}au+$ChrV>XfyN^;?rK|!#R0_J?!m7gK>^$W)l+HoT$YDR_iyl*1pSmAbHL(Z- z`Lr_{$#c#3U7fBgcY-S{YrrUAm<6{@)KUzx)V&{kfXzJeLP{5>1bNd zD^_Jwvr!E^6CvgyqJDK0T0^vdoCq9@7F79}0VUwT+AtrIcQ$+{EC&L78q9?DC`*O0 zsBq%>=P>M(eO_Lw?x9`}ER=bT*HgFAQim4OmsaMOqK@cKCn z3B)D_%#mEzJYT!?>7Mzv%!0;CSZo>+Uor3#Tx>Q0O(ZKC1&IF#-U)+Iahqk{aInX* zA(Mt_4;|%)2Ya1y_~8_xFy#8F%xHJ#^B=rZ(t3yL7ft~>Hmnu&S1*NNcc2)6*_MLm z9BZG1#r{&z8Cdp0vC9Lyc2!maP}dwzV_YHRryKyQBIFBDB%e4HaStemfU*1v0i-%L z(T^-^>5ynS+q*KC+XdxV>~^X$AN(Sx5eZ2Hg|!t<0Xnn%FH@D=&5?ll4SNkuT2FM? zkXe=ZG|O*Ynyws9PjfdaW%T1zRM3xOLLzqw&(3kac2_Mag`MTI*rE*eX2k=Au$0*d z9?7&YP}l<3lA=!iU=0m=UNmI&GZTSdyT!)E+>yV*0OmO>#TW=WG#nfm^WsY~xu|&7 zmZ&T0lT>70X9Y-d-ny;eNA?xuHxvN+>pL-NuvzO}>5p|feSn>?1yWvAf&-vIlT|{Y z`3-uMB2w<5k6F=?BrFn4xtp0bOluqF2vv{lanSUnFWeMeU?JetV5ouo^Q?jd30D;g zN@BOd1}R-??9o_%Nmtxrc~IGj1|zmXgAwsfyv@!{7Lk)ZE5rlCf&>8>JDiOm`=Ohh zV1=9)IhIb9dYk=VFeEbcaNa??W8&OBTBP0c+I=$oGCVcPAiHYUm@De&JR4`JRr+)o z+b@G#CTwbUlYHR_jAwyEm1Ltk%dj6*+P}{v9OeMuq-6Bd(l`?GM4B z7e1b%9A@Hnvo-gehHn>>vGmR?Z|$f*dA7cbV-s*jQNtX8ya4$Z2J0ak?*e z+S}_I3JlzliT4$DD z8|M!N?2d3LVSor(&(Qx6-rWx%H`AF3hxvnT3^p1-mR^;&#x-&<$doQAx6ko#-p$_L z(enC}W33(KBfoVi-I!h4he2O2Rc@ajo~W=LtZ#UzVYqYCVc@g6iz}5dXDaaBrQtvx z`-7q|yA9E-kvvOLr*DVVWzdH0JTT2^W`2wUhXU|_6^f#XKTJh%vhEsLQtKkngDX=A z!mm1M8PF~r5hdi3QTOX^nyucS7#SwCNYNL%)gut{f@H9KqPcFAyo4|?xBj-t)qLBn z^8A9ypCvy_ZmDA;IcqTeM2?0cp3MAn(pg*Yv;};7iG_1Z`OubuKN1j&QP-io<>@&A#ypBv9?ttXKhR!n0Z&ejSvKeln zwMbcQYkt{V;4RcRzM7f|t^Duje~tu1Ur*`%I48!$n-oMZn7oX`tl literal 0 HcmV?d00001 diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts index e72d984..88fe2d1 100644 --- a/src/client/src/bridge/endpoints.ts +++ b/src/client/src/bridge/endpoints.ts @@ -7,7 +7,7 @@ export enum Endpoint { // Charts attributeChart = "core/charts/attribute", // Handlers - handlers = "core/handlers", + handlers = "core/handlers/all", addHandler = "core/handlers/add-handler", availableHandlers = "core/handlers/available-handlers", // Widgets diff --git a/src/client/src/bridge/models/HandlerModel.ts b/src/client/src/bridge/models/HandlerModel.ts index 8c93c46..d05e307 100644 --- a/src/client/src/bridge/models/HandlerModel.ts +++ b/src/client/src/bridge/models/HandlerModel.ts @@ -16,6 +16,7 @@ export interface HandlerOptions { export interface HandlerAttribute { id: number; name: string; + label?: string; value: string | number; } diff --git a/src/client/src/components/Icon/enums.ts b/src/client/src/components/Icon/enums.ts index 5e3b41e..d9f5346 100644 --- a/src/client/src/components/Icon/enums.ts +++ b/src/client/src/components/Icon/enums.ts @@ -10,6 +10,7 @@ export enum ThemedIconName { arrowCircleLeft = "arrow-circle-left", arrowCircleRight = "arrow-circle-right", arrowLeft = "arrow-left", + arrowMaximize = "arrow-maximize", arrowRight = "arrow-right", basket = "basket", batteryMedium = "battery-medium", @@ -48,8 +49,11 @@ export enum ThemedIconName { } export enum CustomIconName { + battery = "battery", http = "http", + inverter = "inverter", logo = "logo", + serial = "serial", } export type IconName = ThemedIconName | CustomIconName; diff --git a/src/client/src/components/Input/Input.tsx b/src/client/src/components/Input/Input.tsx index 24726f1..8825919 100644 --- a/src/client/src/components/Input/Input.tsx +++ b/src/client/src/components/Input/Input.tsx @@ -7,12 +7,12 @@ const classNames = bemClassNames("input-wrapper"); export type InputProps = { type?: HTMLInputTypeAttribute | "pick"; placeholder?: string; - value?: string; + value?: string | boolean; name?: string; innerRef?: MutableRefObject; min?: number; step?: number; - onValueChange?: (value: string) => void; + onValueChange?: (value: string | boolean) => void; onDateChange?: (date: Date | null) => void; }; @@ -34,12 +34,17 @@ export const Input: FC = ({ { - setValueState(e.target.value); if (type === "datetime-local") { + setValueState(e.target.value); onDateChange?.(e.target.valueAsDate); + } else if (type === "checkbox") { + setValueState(e.target.checked); + onValueChange?.(e.target.checked); } else { + setValueState(e.target.value); onValueChange?.(e.target.value); } }} diff --git a/src/client/src/components/InputRenderer/InputRenderer.tsx b/src/client/src/components/InputRenderer/InputRenderer.tsx index be386e5..ecdc478 100644 --- a/src/client/src/components/InputRenderer/InputRenderer.tsx +++ b/src/client/src/components/InputRenderer/InputRenderer.tsx @@ -10,8 +10,8 @@ export type InputRendererProps = { name: string; type: string; title: string; - value?: string; - onValueChange?: (value: string) => void; + value?: string | boolean; + onValueChange?: (value: string | boolean) => void; }; export const InputRenderer: FC = ({ name, type, title, value, onValueChange }) => { @@ -21,6 +21,7 @@ export const InputRenderer: FC = ({ name, type, title, value {title} {type === "string" && } + {type === "bool" && } {type === "float" && } {type === "int" && } diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx index 9a3ef52..6d7ee4b 100644 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx @@ -24,7 +24,7 @@ export const AttributeWidget: FC = ({ }) => { return (
- + {icon && }
{title}
{description}
diff --git a/src/client/src/partials/InspectorChart/InspectorChart.scss b/src/client/src/partials/InspectorChart/InspectorChart.scss index 5cdb3f9..186beb7 100644 --- a/src/client/src/partials/InspectorChart/InspectorChart.scss +++ b/src/client/src/partials/InspectorChart/InspectorChart.scss @@ -4,4 +4,12 @@ padding: 1rem; border-radius: 2rem; background: $white; + + &--fullScreen { + position: fixed; + top: 0; + left: 0; + width: calc(100% - 2rem); + height: calc(100% - 2rem); + } } diff --git a/src/client/src/partials/InspectorChart/InspectorChart.tsx b/src/client/src/partials/InspectorChart/InspectorChart.tsx index 6b9945a..74b74d5 100644 --- a/src/client/src/partials/InspectorChart/InspectorChart.tsx +++ b/src/client/src/partials/InspectorChart/InspectorChart.tsx @@ -11,10 +11,11 @@ import { Title, Tooltip, } from "chart.js"; -import { FC, useEffect, useRef } from "react"; +import { FC, useEffect, useRef, useState } from "react"; import { Line } from "react-chartjs-2"; import { useAttributeChart } from "../../bridge"; +import { Button, ButtonVariant, FlexLayout, ThemedIconName } from "../../components"; import { bemClassNames } from "../../utils"; import { options } from "./chartOptions"; @@ -29,6 +30,8 @@ type InspectorChartProps = { export const InspectorChart: FC = ({ attributes = [] }) => { const ref = useRef(null); + const [fullScreen, setFullScreen] = useState(false); + // Loading the zoom plugin only on client side, because it doesn't support SSR useEffect(() => { if (typeof window !== "undefined") @@ -58,7 +61,16 @@ export const InspectorChart: FC = ({ attributes = [] }) => return ( data.datasets.length > 0 && ( -
+
+ + +
diff --git a/src/client/src/partials/NewHandler/NewHandler.tsx b/src/client/src/partials/NewHandler/NewHandler.tsx index 547cdcf..c70c967 100644 --- a/src/client/src/partials/NewHandler/NewHandler.tsx +++ b/src/client/src/partials/NewHandler/NewHandler.tsx @@ -71,6 +71,7 @@ export const NewHandler: FC = ({ type, name, icon, configField name={field} type={configFields[field][0]} title={configFields[field][1]} + // TODO: This doesn't work with Redux value={configFields[field][2]} onValueChange={(value) => { console.log(value); diff --git a/src/server/Pipfile b/src/server/Pipfile index 691d130..a985788 100644 --- a/src/server/Pipfile +++ b/src/server/Pipfile @@ -6,15 +6,19 @@ name = "pypi" [packages] flask = "*" flask-cors = "*" +minimalmodbus = "*" +pipdeptree = "*" pony = "*" -simplejson = "*" +pyserial = "*" requests = "*" +simplejson = "*" +psycopg2 = "*" [dev-packages] black = "*" [requires] -python_version = "3.11" +python_version = "3.12" [scripts] black = "black --check --line-length 120 ." diff --git a/src/server/Pipfile.lock b/src/server/Pipfile.lock index 4b51132..1db35e6 100644 --- a/src/server/Pipfile.lock +++ b/src/server/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "c843ce922bb729dc7bb736824d496dd47064568745a90b037aac0f59561fab07" + "sha256": "02e3c6b732a01ba770d9f067b6c4a6a74e17174871d0989579fec0edf96348a6" }, "pipfile-spec": 6, "requires": { - "python_version": "3.11" + "python_version": "3.12" }, "sources": [ { @@ -18,399 +18,480 @@ "default": { "blinker": { "hashes": [ - "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d", - "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa" + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" ], - "markers": "python_version >= '3.7'", - "version": "==1.6.3" + "markers": "python_version >= '3.9'", + "version": "==1.9.0" }, "certifi": { "hashes": [ - "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", - "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], "markers": "python_version >= '3.6'", - "version": "==2023.7.22" + "version": "==2024.12.14" }, "charset-normalizer": { "hashes": [ - "sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5", - "sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93", - "sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a", - "sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d", - "sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c", - "sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1", - "sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58", - "sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2", - "sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557", - "sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147", - "sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041", - "sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2", - "sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2", - "sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7", - "sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296", - "sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690", - "sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67", - "sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57", - "sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597", - "sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846", - "sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b", - "sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97", - "sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c", - "sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62", - "sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa", - "sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f", - "sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e", - "sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821", - "sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3", - "sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4", - "sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb", - "sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727", - "sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514", - "sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d", - "sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761", - "sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55", - "sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f", - "sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c", - "sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034", - "sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6", - "sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae", - "sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1", - "sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14", - "sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1", - "sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228", - "sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708", - "sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48", - "sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f", - "sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5", - "sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f", - "sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4", - "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8", - "sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff", - "sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61", - "sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b", - "sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97", - "sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b", - "sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605", - "sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728", - "sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d", - "sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c", - "sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf", - "sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673", - "sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1", - "sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b", - "sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41", - "sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8", - "sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f", - "sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4", - "sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008", - "sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9", - "sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5", - "sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f", - "sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e", - "sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273", - "sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45", - "sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e", - "sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656", - "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e", - "sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c", - "sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2", - "sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72", - "sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056", - "sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397", - "sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42", - "sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd", - "sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3", - "sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213", - "sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf", - "sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67" + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.1" + "markers": "python_version >= '3.7'", + "version": "==3.4.1" }, "click": { "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], "markers": "python_version >= '3.7'", - "version": "==8.1.7" + "version": "==8.1.8" }, "flask": { "hashes": [ - "sha256:21128f47e4e3b9d597a3e8521a329bf56909b690fcc3fa3e477725aa81367638", - "sha256:cfadcdb638b609361d29ec22360d6070a77d7463dcb3ab08d2c2f2f168845f58" + "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac", + "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136" ], "index": "pypi", - "version": "==3.0.0" + "markers": "python_version >= '3.9'", + "version": "==3.1.0" }, "flask-cors": { "hashes": [ - "sha256:bc3492bfd6368d27cfe79c7821df5a8a319e1a6d5eab277a3794be19bdc51783", - "sha256:f268522fcb2f73e2ecdde1ef45e2fd5c71cc48fe03cffb4b441c6d1b40684eb0" + "sha256:5aadb4b950c4e93745034594d9f3ea6591f734bb3662e16e255ffbf5e89c88ef", + "sha256:b9e307d082a9261c100d8fb0ba909eec6a228ed1b60a8315fd85f783d61910bc" ], "index": "pypi", - "version": "==4.0.0" + "version": "==5.0.0" }, "idna": { "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], - "markers": "python_version >= '3.5'", - "version": "==3.4" + "markers": "python_version >= '3.6'", + "version": "==3.10" }, "itsdangerous": { "hashes": [ - "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", - "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" + "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", + "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" ], - "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "markers": "python_version >= '3.8'", + "version": "==2.2.0" }, "jinja2": { "hashes": [ - "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", - "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", + "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" ], "markers": "python_version >= '3.7'", - "version": "==3.1.2" + "version": "==3.1.5" }, "markupsafe": { "hashes": [ - "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", - "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", - "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", - "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", - "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", - "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", - "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", - "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", - "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", - "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", - "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", - "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", - "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", - "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", - "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", - "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", - "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", - "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", - "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", - "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", - "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", - "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", - "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", - "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", - "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", - "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", - "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", - "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", - "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", - "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", - "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", - "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", - "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", - "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", - "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", - "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", - "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", - "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", - "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", - "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", - "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", - "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", - "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", - "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", - "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", - "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", - "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", - "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", - "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", - "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", - "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", - "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", - "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", - "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", - "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", - "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", - "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", - "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", - "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", - "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" ], - "markers": "python_version >= '3.7'", - "version": "==2.1.3" + "markers": "python_version >= '3.9'", + "version": "==3.0.2" + }, + "minimalmodbus": { + "hashes": [ + "sha256:75c677e2f3ea901b762f8b2ab7cf8ad84de915bbea275d66e30b724e23887b1a", + "sha256:c3f5a56e107d537e4bb420f7e735841ab2939c8ca6fb528f5fe4124571315b64" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.1.1" + }, + "packaging": { + "hashes": [ + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + ], + "markers": "python_version >= '3.8'", + "version": "==24.2" + }, + "pip": { + "hashes": [ + "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", + "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99" + ], + "markers": "python_version >= '3.8'", + "version": "==24.3.1" + }, + "pipdeptree": { + "hashes": [ + "sha256:97a455ee53cfa3dfe07223a985e4d473ac96a8b9e953d7db7f27a5e893865023", + "sha256:d520e165535e217dd8958dfc14f1922efa0f6e4ff16126a61edb7ed6c538a930" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.24.0" }, "pony": { "hashes": [ - "sha256:b72172d57abd5e0846cd8d71231572da20f526327bf0d33348a9276f624d8aa7", - "sha256:c37e9b44f975d147b79cf56925b16b0e40b2b47ba5958d0c01579f37a5a24f7c" + "sha256:5112b4cf40d3f24e93ae66dc5ab7dc6813388efa870e750928d60dc699873cf5", + "sha256:f7f83b2981893e49f7f18e8def52ad8fa8f8e6c5f9583b9aaed62d4d85036a0f" + ], + "index": "pypi", + "version": "==0.7.19" + }, + "psycopg2": { + "hashes": [ + "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4", + "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11", + "sha256:47c4f9875125344f4c2b870e41b6aad585901318068acd01de93f3677a6522c2", + "sha256:4a579d6243da40a7b3182e0430493dbd55950c493d8c68f4eec0b302f6bbf20e", + "sha256:5df2b672140f95adb453af93a7d669d7a7bf0a56bcd26f1502329166f4a61716", + "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067", + "sha256:88138c8dedcbfa96408023ea2b0c369eda40fe5d75002c0964c78f46f11fa442", + "sha256:9d5b3b94b79a844a986d029eee38998232451119ad653aea42bb9220a8c5066b", + "sha256:c6f7b8561225f9e711a9c47087388a97fdc948211c10a4bccbf0ba68ab7b3b5a" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.9.10" + }, + "pyserial": { + "hashes": [ + "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", + "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0" ], "index": "pypi", - "version": "==0.7.17" + "version": "==3.5" }, "requests": { "hashes": [ - "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", - "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], "index": "pypi", - "version": "==2.31.0" + "markers": "python_version >= '3.8'", + "version": "==2.32.3" }, "simplejson": { "hashes": [ - "sha256:0405984f3ec1d3f8777c4adc33eac7ab7a3e629f3b1c05fdded63acc7cf01137", - "sha256:0436a70d8eb42bea4fe1a1c32d371d9bb3b62c637969cb33970ad624d5a3336a", - "sha256:061e81ea2d62671fa9dea2c2bfbc1eec2617ae7651e366c7b4a2baf0a8c72cae", - "sha256:064300a4ea17d1cd9ea1706aa0590dcb3be81112aac30233823ee494f02cb78a", - "sha256:08889f2f597ae965284d7b52a5c3928653a9406d88c93e3161180f0abc2433ba", - "sha256:0a48679310e1dd5c9f03481799311a65d343748fe86850b7fb41df4e2c00c087", - "sha256:0b0a3eb6dd39cce23801a50c01a0976971498da49bc8a0590ce311492b82c44b", - "sha256:0d2d5119b1d7a1ed286b8af37357116072fc96700bce3bec5bb81b2e7057ab41", - "sha256:0d551dc931638e2102b8549836a1632e6e7cf620af3d093a7456aa642bff601d", - "sha256:1018bd0d70ce85f165185d2227c71e3b1e446186f9fa9f971b69eee223e1e3cd", - "sha256:11c39fbc4280d7420684494373b7c5904fa72a2b48ef543a56c2d412999c9e5d", - "sha256:11cc3afd8160d44582543838b7e4f9aa5e97865322844b75d51bf4e0e413bb3e", - "sha256:1537b3dd62d8aae644f3518c407aa8469e3fd0f179cdf86c5992792713ed717a", - "sha256:16ca9c90da4b1f50f089e14485db8c20cbfff2d55424062791a7392b5a9b3ff9", - "sha256:176a1b524a3bd3314ed47029a86d02d5a95cc0bee15bd3063a1e1ec62b947de6", - "sha256:18955c1da6fc39d957adfa346f75226246b6569e096ac9e40f67d102278c3bcb", - "sha256:1bb5b50dc6dd671eb46a605a3e2eb98deb4a9af787a08fcdddabe5d824bb9664", - "sha256:1c768e7584c45094dca4b334af361e43b0aaa4844c04945ac7d43379eeda9bc2", - "sha256:1dd4f692304854352c3e396e9b5f0a9c9e666868dd0bdc784e2ac4c93092d87b", - "sha256:25785d038281cd106c0d91a68b9930049b6464288cea59ba95b35ee37c2d23a5", - "sha256:287e39ba24e141b046812c880f4619d0ca9e617235d74abc27267194fc0c7835", - "sha256:2c1467d939932901a97ba4f979e8f2642415fcf02ea12f53a4e3206c9c03bc17", - "sha256:2c433a412e96afb9a3ce36fa96c8e61a757af53e9c9192c97392f72871e18e69", - "sha256:2d022b14d7758bfb98405672953fe5c202ea8a9ccf9f6713c5bd0718eba286fd", - "sha256:2f98d918f7f3aaf4b91f2b08c0c92b1774aea113334f7cde4fe40e777114dbe6", - "sha256:2fc697be37585eded0c8581c4788fcfac0e3f84ca635b73a5bf360e28c8ea1a2", - "sha256:3194cd0d2c959062b94094c0a9f8780ffd38417a5322450a0db0ca1a23e7fbd2", - "sha256:332c848f02d71a649272b3f1feccacb7e4f7e6de4a2e6dc70a32645326f3d428", - "sha256:346820ae96aa90c7d52653539a57766f10f33dd4be609206c001432b59ddf89f", - "sha256:3471e95110dcaf901db16063b2e40fb394f8a9e99b3fe9ee3acc6f6ef72183a2", - "sha256:3848427b65e31bea2c11f521b6fc7a3145d6e501a1038529da2391aff5970f2f", - "sha256:39b6d79f5cbfa3eb63a869639cfacf7c41d753c64f7801efc72692c1b2637ac7", - "sha256:3e74355cb47e0cd399ead3477e29e2f50e1540952c22fb3504dda0184fc9819f", - "sha256:3f39bb1f6e620f3e158c8b2eaf1b3e3e54408baca96a02fe891794705e788637", - "sha256:40847f617287a38623507d08cbcb75d51cf9d4f9551dd6321df40215128325a3", - "sha256:4280e460e51f86ad76dc456acdbfa9513bdf329556ffc8c49e0200878ca57816", - "sha256:445a96543948c011a3a47c8e0f9d61e9785df2544ea5be5ab3bc2be4bd8a2565", - "sha256:4969d974d9db826a2c07671273e6b27bc48e940738d768fa8f33b577f0978378", - "sha256:49aaf4546f6023c44d7e7136be84a03a4237f0b2b5fb2b17c3e3770a758fc1a0", - "sha256:49e0e3faf3070abdf71a5c80a97c1afc059b4f45a5aa62de0c2ca0444b51669b", - "sha256:49f9da0d6cd17b600a178439d7d2d57c5ef01f816b1e0e875e8e8b3b42db2693", - "sha256:4a8c3cc4f9dfc33220246760358c8265dad6e1104f25f0077bbca692d616d358", - "sha256:4d36081c0b1c12ea0ed62c202046dca11438bee48dd5240b7c8de8da62c620e9", - "sha256:4edcd0bf70087b244ba77038db23cd98a1ace2f91b4a3ecef22036314d77ac23", - "sha256:554313db34d63eac3b3f42986aa9efddd1a481169c12b7be1e7512edebff8eaf", - "sha256:5675e9d8eeef0aa06093c1ff898413ade042d73dc920a03e8cea2fb68f62445a", - "sha256:60848ab779195b72382841fc3fa4f71698a98d9589b0a081a9399904487b5832", - "sha256:66e5dc13bfb17cd6ee764fc96ccafd6e405daa846a42baab81f4c60e15650414", - "sha256:6779105d2fcb7fcf794a6a2a233787f6bbd4731227333a072d8513b252ed374f", - "sha256:6ad331349b0b9ca6da86064a3599c425c7a21cd41616e175ddba0866da32df48", - "sha256:6f0a0b41dd05eefab547576bed0cf066595f3b20b083956b1405a6f17d1be6ad", - "sha256:73a8a4653f2e809049999d63530180d7b5a344b23a793502413ad1ecea9a0290", - "sha256:778331444917108fa8441f59af45886270d33ce8a23bfc4f9b192c0b2ecef1b3", - "sha256:7cb98be113911cb0ad09e5523d0e2a926c09a465c9abb0784c9269efe4f95917", - "sha256:7d74beca677623481810c7052926365d5f07393c72cbf62d6cce29991b676402", - "sha256:7f2398361508c560d0bf1773af19e9fe644e218f2a814a02210ac2c97ad70db0", - "sha256:8434dcdd347459f9fd9c526117c01fe7ca7b016b6008dddc3c13471098f4f0dc", - "sha256:8a390e56a7963e3946ff2049ee1eb218380e87c8a0e7608f7f8790ba19390867", - "sha256:92c4a4a2b1f4846cd4364855cbac83efc48ff5a7d7c06ba014c792dd96483f6f", - "sha256:9300aee2a8b5992d0f4293d88deb59c218989833e3396c824b69ba330d04a589", - "sha256:9453419ea2ab9b21d925d0fd7e3a132a178a191881fab4169b6f96e118cc25bb", - "sha256:9652e59c022e62a5b58a6f9948b104e5bb96d3b06940c6482588176f40f4914b", - "sha256:972a7833d4a1fcf7a711c939e315721a88b988553fc770a5b6a5a64bd6ebeba3", - "sha256:9c1a4393242e321e344213a90a1e3bf35d2f624aa8b8f6174d43e3c6b0e8f6eb", - "sha256:9e038c615b3906df4c3be8db16b3e24821d26c55177638ea47b3f8f73615111c", - "sha256:9e4c166f743bb42c5fcc60760fb1c3623e8fda94f6619534217b083e08644b46", - "sha256:9eb117db8d7ed733a7317c4215c35993b815bf6aeab67523f1f11e108c040672", - "sha256:9eb442a2442ce417801c912df68e1f6ccfcd41577ae7274953ab3ad24ef7d82c", - "sha256:a3cd18e03b0ee54ea4319cdcce48357719ea487b53f92a469ba8ca8e39df285e", - "sha256:a8617625369d2d03766413bff9e64310feafc9fc4f0ad2b902136f1a5cd8c6b0", - "sha256:a970a2e6d5281d56cacf3dc82081c95c1f4da5a559e52469287457811db6a79b", - "sha256:aad7405c033d32c751d98d3a65801e2797ae77fac284a539f6c3a3e13005edc4", - "sha256:adcb3332979cbc941b8fff07181f06d2b608625edc0a4d8bc3ffc0be414ad0c4", - "sha256:af9c7e6669c4d0ad7362f79cb2ab6784d71147503e62b57e3d95c4a0f222c01c", - "sha256:b01fda3e95d07a6148702a641e5e293b6da7863f8bc9b967f62db9461330562c", - "sha256:b8d940fd28eb34a7084877747a60873956893e377f15a32ad445fe66c972c3b8", - "sha256:bccb3e88ec26ffa90f72229f983d3a5d1155e41a1171190fa723d4135523585b", - "sha256:bcedf4cae0d47839fee7de344f96b5694ca53c786f28b5f773d4f0b265a159eb", - "sha256:be893258d5b68dd3a8cba8deb35dc6411db844a9d35268a8d3793b9d9a256f80", - "sha256:c0521e0f07cb56415fdb3aae0bbd8701eb31a9dfef47bb57206075a0584ab2a2", - "sha256:c594642d6b13d225e10df5c16ee15b3398e21a35ecd6aee824f107a625690374", - "sha256:c87c22bd6a987aca976e3d3e23806d17f65426191db36d40da4ae16a6a494cbc", - "sha256:c9ac1c2678abf9270e7228133e5b77c6c3c930ad33a3c1dfbdd76ff2c33b7b50", - "sha256:d0e5ffc763678d48ecc8da836f2ae2dd1b6eb2d27a48671066f91694e575173c", - "sha256:d0f402e787e6e7ee7876c8b05e2fe6464820d9f35ba3f172e95b5f8b699f6c7f", - "sha256:d222a9ed082cd9f38b58923775152003765016342a12f08f8c123bf893461f28", - "sha256:d94245caa3c61f760c4ce4953cfa76e7739b6f2cbfc94cc46fff6c050c2390c5", - "sha256:de9a2792612ec6def556d1dc621fd6b2073aff015d64fba9f3e53349ad292734", - "sha256:e2f5a398b5e77bb01b23d92872255e1bcb3c0c719a3be40b8df146570fe7781a", - "sha256:e8dd53a8706b15bc0e34f00e6150fbefb35d2fd9235d095b4f83b3c5ed4fa11d", - "sha256:e9eb3cff1b7d71aa50c89a0536f469cb8d6dcdd585d8f14fb8500d822f3bdee4", - "sha256:ed628c1431100b0b65387419551e822987396bee3c088a15d68446d92f554e0c", - "sha256:ef7938a78447174e2616be223f496ddccdbf7854f7bf2ce716dbccd958cc7d13", - "sha256:f1c70249b15e4ce1a7d5340c97670a95f305ca79f376887759b43bb33288c973", - "sha256:f3c7363a8cb8c5238878ec96c5eb0fc5ca2cb11fc0c7d2379863d342c6ee367a", - "sha256:fbbcc6b0639aa09b9649f36f1bcb347b19403fe44109948392fbb5ea69e48c3e", - "sha256:febffa5b1eda6622d44b245b0685aff6fb555ce0ed734e2d7b1c3acd018a2cff", - "sha256:ff836cd4041e16003549449cc0a5e372f6b6f871eb89007ab0ee18fb2800fded" + "sha256:01c6657485393f2e9b8177c77a7634f13ebe70d5e6de150aae1677d91516ce6b", + "sha256:0552eb06e7234da892e1d02365cd2b7b2b1f8233aa5aabdb2981587b7cc92ea0", + "sha256:06662392e4913dc8846d6a71a6d5de86db5fba244831abe1dd741d62a4136764", + "sha256:0733ecd95ae03ae718ec74aad818f5af5f3155d596f7b242acbc1621e765e5fb", + "sha256:0766ca6222b410e08e0053a0dda3606cafb3973d5d00538307f631bb59743396", + "sha256:0791f64fed7d4abad639491f8a6b1ba56d3c604eb94b50f8697359b92d983f36", + "sha256:08f9b443a94e72dd02c87098c96886d35790e79e46b24e67accafbf13b73d43b", + "sha256:0959e6cb62e3994b5a40e31047ff97ef5c4138875fae31659bead691bed55896", + "sha256:0a32859d45d7b85fb803bb68f6bee14526991a1190269116c33399fa0daf9bbf", + "sha256:0b5ddd2c7d1d3f4d23224bc8a04bbf1430ae9a8149c05b90f8fc610f7f857a23", + "sha256:0bc5544e3128891bf613b9f71813ee2ec9c11574806f74dd8bb84e5e95bf64a2", + "sha256:101a3c8392028cd704a93c7cba8926594e775ca3c91e0bee82144e34190903f1", + "sha256:1069143a8fb3905e1bc0696c62be7e3adf812e9f1976ac9ae15b05112ff57cc9", + "sha256:1773cabfba66a6337b547e45dafbd471b09487370bcab75bd28f626520410d29", + "sha256:1a53a07320c5ff574d8b1a89c937ce33608832f166f39dff0581ac43dc979abd", + "sha256:1bd41f2cb1a2c57656ceff67b12d005cb255c728265e222027ad73193a04005a", + "sha256:1c49eeb94b8f09dc8a5843c156a22b8bde6aa1ddc65ca8ddc62dddcc001e6a2d", + "sha256:1df0aaf1cb787fdf34484ed4a1f0c545efd8811f6028623290fef1a53694e597", + "sha256:1e557712fc79f251673aeb3fad3501d7d4da3a27eff0857af2e1d1afbbcf6685", + "sha256:1e662336db50ad665777e6548b5076329a94a0c3d4a0472971c588b3ef27de3a", + "sha256:212fce86a22188b0c7f53533b0f693ea9605c1a0f02c84c475a30616f55a744d", + "sha256:23228037dc5d41c36666384062904d74409a62f52283d9858fa12f4c22cffad1", + "sha256:23833ee7e791ec968b744dfee2a2d39df7152050051096caf4296506d75608d8", + "sha256:256e09d0f94d9c3d177d9e95fd27a68c875a4baa2046633df387b86b652f5747", + "sha256:2876027ebdd599d730d36464debe84619b0368e9a642ca6e7c601be55aed439e", + "sha256:2a6a750d3c7461b1c47cfc6bba8d9e57a455e7c5f80057d2a82f738040dd1129", + "sha256:2a954b30810988feeabde843e3263bf187697e0eb5037396276db3612434049b", + "sha256:2b737a5fefedb8333fa50b8db3dcc9b1d18fd6c598f89fa7debff8b46bf4e511", + "sha256:2c78293470313aefa9cfc5e3f75ca0635721fb016fb1121c1c5b0cb8cc74712a", + "sha256:2f56eb03bc9e432bb81adc8ecff2486d39feb371abb442964ffb44f6db23b332", + "sha256:32a3ada8f3ea41db35e6d37b86dade03760f804628ec22e4fe775b703d567426", + "sha256:37105d1d708365b91165e1a6e505bdecc88637091348cf4b6adcdcb4f5a5fb8b", + "sha256:3bbcdc438dc1683b35f7a8dc100960c721f922f9ede8127f63bed7dfded4c64c", + "sha256:3dc5c1a85ff388e98ea877042daec3d157b6db0d85bac6ba5498034689793e7e", + "sha256:42e5acf80d4d971238d4df97811286a044d720693092b20a56d5e56b7dcc5d09", + "sha256:49549e3d81ab4a58424405aa545602674d8c35c20e986b42bb8668e782a94bac", + "sha256:49cc4c7b940d43bd12bf87ec63f28cbc4964fc4e12c031cc8cd01650f43eb94e", + "sha256:4a0710d1a5e41c4f829caa1572793dd3130c8d65c2b194c24ff29c4c305c26e0", + "sha256:4dfa420bb9225dd33b6efdabde7c6a671b51150b9b1d9c4e5cd74d3b420b3fe1", + "sha256:50d8b742d74c449c4dcac570d08ce0f21f6a149d2d9cf7652dbf2ba9a1bc729a", + "sha256:56134bbafe458a7b21f6fddbf889d36bec6d903718f4430768e3af822f8e27c2", + "sha256:5bf6a3b9a7d7191471b464fe38f684df10eb491ec9ea454003edb45a011ab187", + "sha256:5d9e8f836688a8fabe6a6b41b334aa550a6823f7b4ac3d3712fc0ad8655be9a8", + "sha256:619756f1dd634b5bdf57d9a3914300526c3b348188a765e45b8b08eabef0c94e", + "sha256:6300680d83a399be2b8f3b0ef7ef90b35d2a29fe6e9c21438097e0938bbc1564", + "sha256:637c4d4b81825c1f4d651e56210bd35b5604034b192b02d2d8f17f7ce8c18f42", + "sha256:66a0399e21c2112acacfebf3d832ebe2884f823b1c7e6d1363f2944f1db31a99", + "sha256:67a20641afebf4cfbcff50061f07daad1eace6e7b31d7622b6fa2c40d43900ba", + "sha256:6890ff9cf0bd2e1d487e2a8869ebd620a44684c0a9667fa5ee751d099d5d84c8", + "sha256:6d43e24b88c80f997081503f693be832fc90854f278df277dd54f8a4c847ab61", + "sha256:6ef9383c5e05f445be60f1735c1816163c874c0b1ede8bb4390aff2ced34f333", + "sha256:6f455672f4738b0f47183c5896e3606cd65c9ddee3805a4d18e8c96aa3f47c84", + "sha256:6fea0716c593dabb4392c4996d4e902a83b2428e6da82938cf28a523a11eb277", + "sha256:7017329ca8d4dca94ad5e59f496e5fc77630aecfc39df381ffc1d37fb6b25832", + "sha256:7137e69c6781ecf23afab064be94a277236c9cba31aa48ff1a0ec3995c69171e", + "sha256:72e8abbc86fcac83629a030888b45fed3a404d54161118be52cb491cd6975d3e", + "sha256:7355c7203353c36d46c4e7b6055293b3d2be097bbc5e2874a2b8a7259f0325dd", + "sha256:76f8c28fe2d426182405b18ddf3001fce47835a557dc15c3d8bdea01c03361da", + "sha256:7923878b7a0142d39763ec2dbecff3053c1bedd3653585a8474666e420fe83f5", + "sha256:7a7bfad839c624e139a4863007233a3f194e7c51551081f9789cba52e4da5167", + "sha256:7b5c472099b39b274dcde27f1113db8d818c9aa3ba8f78cbb8ad04a4c1ac2118", + "sha256:7c0104b4b7d2c75ccedbf1d9d5a3bd2daa75e51053935a44ba012e2fd4c43752", + "sha256:7e062767ac165df9a46963f5735aa4eee0089ec1e48b3f2ec46182754b96f55e", + "sha256:7e2a098c21ad8924076a12b6c178965d88a0ad75d1de67e1afa0a66878f277a5", + "sha256:817abad79241ed4a507b3caf4d3f2be5079f39d35d4c550a061988986bffd2ec", + "sha256:83c87706265ae3028e8460d08b05f30254c569772e859e5ba61fe8af2c883468", + "sha256:89b35433186e977fa86ff1fd179c1fadff39cfa3afa1648dab0b6ca53153acd9", + "sha256:8e086896c36210ab6050f2f9f095a5f1e03c83fa0e7f296d6cba425411364680", + "sha256:8f41bb5370b34f63171e65fdb00e12be1d83675cecb23e627df26f4c88dfc021", + "sha256:934a50a614fb831614db5dbfba35127ee277624dda4d15895c957d2f5d48610c", + "sha256:93be280fc69a952c76e261036312c20b910e7fa9e234f1d89bdfe3fa34f8a023", + "sha256:951095be8d4451a7182403354c22ec2de3e513e0cc40408b689af08d02611588", + "sha256:a0782cb9bf827f0c488b6aa0f2819f618308a3caf2973cfd792e45d631bec4db", + "sha256:ab69f811a660c362651ae395eba8ce84f84c944cea0df5718ea0ba9d1e4e7252", + "sha256:ad0e0b1ce9bd3edb5cf64b5b5b76eacbfdac8c5367153aeeec8a8b1407f68342", + "sha256:add8850db04b98507a8b62d248a326ecc8561e6d24336d1ca5c605bbfaab4cad", + "sha256:afab2f7f2486a866ff04d6d905e9386ca6a231379181a3838abce1f32fbdcc37", + "sha256:b5587feda2b65a79da985ae6d116daf6428bf7489992badc29fc96d16cd27b05", + "sha256:b9198c1f1f8910a3b86b60f4fe2556d9d28d3fefe35bffe6be509a27402e694d", + "sha256:bc164f32dd9691e7082ce5df24b4cf8c6c394bbf9bdeeb5d843127cd07ab8ad2", + "sha256:bcde83a553a96dc7533736c547bddaa35414a2566ab0ecf7d3964fc4bdb84c11", + "sha256:c40df31a75de98db2cdfead6074d4449cd009e79f54c1ebe5e5f1f153c68ad20", + "sha256:c4f614581b61a26fbbba232a1391f6cee82bc26f2abbb6a0b44a9bba25c56a1c", + "sha256:c9bedebdc5fdad48af8783022bae307746d54006b783007d1d3c38e10872a2c6", + "sha256:cb324bb903330cbb35d87cce367a12631cd5720afa06e5b9c906483970946da6", + "sha256:d00313681015ac498e1736b304446ee6d1c72c5b287cd196996dad84369998f7", + "sha256:d0b0efc7279d768db7c74d3d07f0b5c81280d16ae3fb14e9081dc903e8360771", + "sha256:d0d5a63f1768fed7e78cf55712dee81f5a345e34d34224f3507ebf71df2b754d", + "sha256:d1b8b4d6379fe55f471914345fe6171d81a18649dacf3248abfc9c349b4442eb", + "sha256:d36608557b4dcd7a62c29ad4cd7c5a1720bbf7dc942eff9dc42d2c542a5f042d", + "sha256:d43c2d7504eda566c50203cdc9dc043aff6f55f1b7dae0dcd79dfefef9159d1c", + "sha256:d73efb03c5b39249c82488a994f0998f9e4399e3d085209d2120503305ba77a8", + "sha256:d936ae682d5b878af9d9eb4d8bb1fdd5e41275c8eb59ceddb0aeed857bb264a2", + "sha256:dd011fc3c1d88b779645495fdb8189fb318a26981eebcce14109460e062f209b", + "sha256:dd5b9b1783e14803e362a558680d88939e830db2466f3fa22df5c9319f8eea94", + "sha256:dd6a7dabcc4c32daf601bc45e01b79175dde4b52548becea4f9545b0a4428169", + "sha256:dd7230d061e755d60a4d5445bae854afe33444cdb182f3815cff26ac9fb29a15", + "sha256:e0d2b00ecbcd1a3c5ea1abc8bb99a26508f758c1759fd01c3be482a3655a176f", + "sha256:e1a1452ad5723ff129b081e3c8aa4ba56b8734fee4223355ed7b815a7ece69bc", + "sha256:e88abff510dcff903a18d11c2a75f9964e768d99c8d147839913886144b2065e", + "sha256:ea7a4a998c87c5674a27089e022110a1a08a7753f21af3baf09efe9915c23c3c", + "sha256:eb47ee773ce67476a960e2db4a0a906680c54f662521550828c0cc57d0099426", + "sha256:eed8cd98a7b24861da9d3d937f5fbfb6657350c547528a117297fe49e3960667", + "sha256:ef28c3b328d29b5e2756903aed888960bc5df39b4c2eab157ae212f70ed5bf74", + "sha256:ef59a53be400c1fad2c914b8d74c9d42384fed5174f9321dd021b7017fd40270", + "sha256:f39caec26007a2d0efab6b8b1d74873ede9351962707afab622cc2285dd26ed0", + "sha256:f8efb03ca77bd7725dfacc9254df00d73e6f43013cf39bd37ef1a8ed0ebb5165", + "sha256:fa97278ae6614346b5ca41a45a911f37a3261b57dbe4a00602048652c862c28b", + "sha256:fc3dc9fb413fc34c396f52f4c87de18d0bd5023804afa8ab5cc224deeb6a9900", + "sha256:ff7bc1bbdaa3e487c9469128bf39408e91f5573901cb852e03af378d3582c52d" ], "index": "pypi", - "version": "==3.19.2" + "markers": "python_version >= '2.5' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==3.19.3" }, "urllib3": { "hashes": [ - "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", - "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.7" + "markers": "python_version >= '3.9'", + "version": "==2.3.0" }, "werkzeug": { "hashes": [ - "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0", - "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962" + "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", + "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746" ], - "markers": "python_version >= '3.8'", - "version": "==3.0.0" + "markers": "python_version >= '3.9'", + "version": "==3.1.3" } }, "develop": { "black": { "hashes": [ - "sha256:0e232f24a337fed7a82c1185ae46c56c4a6167fb0fe37411b43e876892c76699", - "sha256:30b78ac9b54cf87bcb9910ee3d499d2bc893afd52495066c49d9ee6b21eee06e", - "sha256:31946ec6f9c54ed7ba431c38bc81d758970dd734b96b8e8c2b17a367d7908171", - "sha256:31b9f87b277a68d0e99d2905edae08807c007973eaa609da5f0c62def6b7c0bd", - "sha256:47c4510f70ec2e8f9135ba490811c071419c115e46f143e4dce2ac45afdcf4c9", - "sha256:481167c60cd3e6b1cb8ef2aac0f76165843a374346aeeaa9d86765fe0dd0318b", - "sha256:6901631b937acbee93c75537e74f69463adaf34379a04eef32425b88aca88a23", - "sha256:76baba9281e5e5b230c9b7f83a96daf67a95e919c2dfc240d9e6295eab7b9204", - "sha256:7fb5fc36bb65160df21498d5a3dd330af8b6401be3f25af60c6ebfe23753f747", - "sha256:960c21555be135c4b37b7018d63d6248bdae8514e5c55b71e994ad37407f45b8", - "sha256:a3c2ddb35f71976a4cfeca558848c2f2f89abc86b06e8dd89b5a65c1e6c0f22a", - "sha256:c870bee76ad5f7a5ea7bd01dc646028d05568d33b0b09b7ecfc8ec0da3f3f39c", - "sha256:d3d9129ce05b0829730323bdcb00f928a448a124af5acf90aa94d9aba6969604", - "sha256:db451a3363b1e765c172c3fd86213a4ce63fb8524c938ebd82919bf2a6e28c6a", - "sha256:e223b731a0e025f8ef427dd79d8cd69c167da807f5710add30cdf131f13dd62e", - "sha256:f20ff03f3fdd2fd4460b4f631663813e57dc277e37fb216463f3b907aa5a9bdd", - "sha256:f74892b4b836e5162aa0452393112a574dac85e13902c57dfbaaf388e4eda37c", - "sha256:f8dc7d50d94063cdfd13c82368afd8588bac4ce360e4224ac399e769d6704e98" + "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f", + "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd", + "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea", + "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981", + "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b", + "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7", + "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8", + "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175", + "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d", + "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392", + "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad", + "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f", + "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f", + "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b", + "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875", + "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3", + "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800", + "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65", + "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2", + "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812", + "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50", + "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e" ], "index": "pypi", - "version": "==23.10.0" + "markers": "python_version >= '3.9'", + "version": "==24.10.0" }, "click": { "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], "markers": "python_version >= '3.7'", - "version": "==8.1.7" + "version": "==8.1.8" }, "mypy-extensions": { "hashes": [ @@ -422,27 +503,27 @@ }, "packaging": { "hashes": [ - "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", - "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], - "markers": "python_version >= '3.7'", - "version": "==23.2" + "markers": "python_version >= '3.8'", + "version": "==24.2" }, "pathspec": { "hashes": [ - "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", - "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" + "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", + "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" ], - "markers": "python_version >= '3.7'", - "version": "==0.11.2" + "markers": "python_version >= '3.8'", + "version": "==0.12.1" }, "platformdirs": { "hashes": [ - "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3", - "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e" + "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", + "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" ], - "markers": "python_version >= '3.7'", - "version": "==3.11.0" + "markers": "python_version >= '3.8'", + "version": "==4.3.6" } } } diff --git a/src/server/main.py b/src/server/main.py index 02e218c..284b931 100755 --- a/src/server/main.py +++ b/src/server/main.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 - +import json from signal import signal, SIGINT from flask import Flask @@ -31,10 +31,19 @@ def _quit(): app = Flask(__name__) app.config.from_object(ApplicationConfig) app.url_map.converters["int_list"] = IntListConverter + app.url_map.strict_slashes = False cors = CORS(app, supports_credentials=True) + config = {} + # Try to load the configuration from the file + try: + with open("config.json", "r") as file: + config = json.load(file) + except FileNotFoundError: + print("Configuration file not found. Using default configuration.") + # Database initialization - init_database() + init_database(config.get("database", {})) # HandlerManager initialization manager = HandlerManager() registered_modules.add(manager) diff --git a/src/server/modules/attribute_manager.py b/src/server/modules/attribute_manager.py index 441e26a..09e3f2e 100644 --- a/src/server/modules/attribute_manager.py +++ b/src/server/modules/attribute_manager.py @@ -15,6 +15,7 @@ def __init__(self, db_instance): self.id = db_instance.id self.handler_id = db_instance.handler.id self.name = db_instance.name + self.label = db_instance.label self.last_value_save_skipped = False value = None @@ -53,6 +54,7 @@ def check_value_change(self, value): @orm.db_session def add_data_unit(self, value): + value_changed = False if self.check_value_change(value): # Value has changed if self.value is not None and self.last_datetime is not None and self.last_value_save_skipped: @@ -61,10 +63,12 @@ def add_data_unit(self, value): self.value = value data_unit_model.add(self.handler_id, self.id, value, datetime.now()) self.check_and_add_stat_units(value) + value_changed = True else: # Value hasn't changed self.last_value_save_skipped = True self.last_datetime = datetime.now() + return value_changed def check_and_add_stat_units(self, value): now = datetime.now() diff --git a/src/server/modules/blueprints/attributes.py b/src/server/modules/blueprints/attributes.py index 0264bd2..19ed004 100644 --- a/src/server/modules/blueprints/attributes.py +++ b/src/server/modules/blueprints/attributes.py @@ -18,6 +18,7 @@ def attributes(): "handler": attribute.handler.id, "enabled": attribute.enabled, "unit": attribute.unit, + "label": attribute.label, } for attribute in Attribute.select() ], StatusCode.OK diff --git a/src/server/modules/blueprints/handlers.py b/src/server/modules/blueprints/handlers.py index 91ef3c4..171486b 100644 --- a/src/server/modules/blueprints/handlers.py +++ b/src/server/modules/blueprints/handlers.py @@ -22,7 +22,7 @@ def get_available_handlers(): for handler in available_handlers ], StatusCode.OK - @blueprint.route("/") + @blueprint.route("/all") # TODO: Investigate why this doesn't work with just / on mobile @orm.db_session def handlers(): return [ @@ -37,6 +37,7 @@ def handlers(): { "id": attribute_manager.get_id(), "name": attribute_name, + "label": attribute_manager.label, "value": attribute_manager.get_current_value(), } for attribute_name, attribute_manager in _context.manager.registered_attributes.get( @@ -47,7 +48,7 @@ def handlers(): for h_id, handler in _context.manager.registered_handlers.items() ], StatusCode.OK - @blueprint.route("/") + @blueprint.route("/all/") # TODO: Investigate why this doesn't work with just / on mobile def handler_info(handler_id): handler = _context.manager.registered_handlers.get(handler_id, None) if handler: @@ -79,6 +80,13 @@ def handler_info(handler_id): }, StatusCode.OK return {"status": "not found"}, StatusCode.NOT_FOUND + @blueprint.route("//last") + def handler_last_message(handler_id): + handler = _context.manager.last_messages.get(handler_id, None) + if handler: + return _context.manager.last_messages.get(handler_id), StatusCode.OK + return {"status": "not found"}, StatusCode.NOT_FOUND + @blueprint.route("/add-handler", methods=["POST"]) @orm.db_session def add_handler(): diff --git a/src/server/modules/blueprints/widgets.py b/src/server/modules/blueprints/widgets.py index 1392342..df27f5f 100644 --- a/src/server/modules/blueprints/widgets.py +++ b/src/server/modules/blueprints/widgets.py @@ -32,11 +32,11 @@ def widget_tiles(): return [ { "id": tile.id, - "name": tile.name, + "name": tile.attribute.label or tile.attribute.name, # TODO: Split label and name "description": get_handler(tile).get_name(), "handler": tile.attribute.handler.id, "status": 1 if get_handler(tile).is_connected() else 0, - "icon": tile.icon, + "icon": tile.attribute.icon, "attribute": tile.attribute.name, "unit": tile.attribute.unit, "value": get_attribute(tile).get_current_value() if get_attribute(tile) else None, diff --git a/src/server/modules/database/__init__.py b/src/server/modules/database/__init__.py index dbc92f5..ecb0375 100644 --- a/src/server/modules/database/__init__.py +++ b/src/server/modules/database/__init__.py @@ -3,7 +3,18 @@ db = orm.Database() -def init_database(): +def init_database(db_config: dict): """Initializes database""" - db.bind(provider="sqlite", filename="database.sqlite", create_db=True) + provider = db_config.get("provider") + if provider == "postgres": + db.bind( + provider=provider, + user=db_config.get("user", "contwatch"), + password=db_config.get("password", "contwatch"), + host=db_config.get("host", "localhost"), + database=db_config.get("database", "contwatch"), + ) + elif provider == "sqlite" or provider is None: + db.bind(provider="sqlite", filename=db_config.get("filename", "database.sqlite"), create_db=True) + db.generate_mapping(create_tables=True) diff --git a/src/server/modules/handler_manager.py b/src/server/modules/handler_manager.py index 4a36bc1..7fb1262 100644 --- a/src/server/modules/handler_manager.py +++ b/src/server/modules/handler_manager.py @@ -84,16 +84,10 @@ def process_message(self, handler_id: AbstractHandler, message): stored_attributes = self.registered_attributes.get(handler_id, {}) for attribute in stored_attributes: if attribute in linearized_json: - attribute_instance = stored_attributes.get(attribute) - new_value = linearized_json.get(attribute) + attribute_instance: AttributeManager = stored_attributes.get(attribute) - changed = False - if attribute_instance.check_value_change(new_value): - changed = True - - attribute_instance.add_data_unit(linearized_json.get(attribute)) - - if changed: + if attribute_instance.add_data_unit(linearized_json.get(attribute)): + # If value has changed, execute listeners self.execute_attribute_listeners(attribute_instance.get_id()) self.execute_handler_listeners(handler_id) diff --git a/src/server/modules/handlers/__init__.py b/src/server/modules/handlers/__init__.py index 6bdeacc..80cd0c4 100644 --- a/src/server/modules/handlers/__init__.py +++ b/src/server/modules/handlers/__init__.py @@ -1,7 +1,10 @@ from .abstract_handler import AbstractHandler from .http_handler import HttpHandler +from .jiabaida_bms_serial_handler import JiabaidaBmsSerialHandler +from .must_pv_ph_inverter_modbus_handler import MustPVPHInverterModbusHandler +from .serial_handler import SerialHandler -available_handlers = [HttpHandler] +available_handlers = [HttpHandler, SerialHandler, JiabaidaBmsSerialHandler, MustPVPHInverterModbusHandler] def get_handler_class(handler_type): diff --git a/src/server/modules/handlers/jiabaida_bms_serial_handler.py b/src/server/modules/handlers/jiabaida_bms_serial_handler.py new file mode 100644 index 0000000..3a92449 --- /dev/null +++ b/src/server/modules/handlers/jiabaida_bms_serial_handler.py @@ -0,0 +1,113 @@ +from serial import SerialException + +from .serial_handler import SerialHandler + + +def _byte(array, index): + return array[index] * 256 + array[index + 1] + + +class JiabaidaBmsSerialHandler(SerialHandler): + """Class for handling Jiabaida Battery Management System connected to serial port.""" + + type = "jiabaida_bms_serial" + icon = "battery" + name = "Jiabaida BMS" + config_fields = { + "port": ["string", "Device port (e.g., /dev/ttyUSB0)"], + "interval": ["int", "Fetching interval in seconds", 10], + "timeout": ["float", "Timeout in seconds", 0.1], + "auto-reconnect": ["bool", "Auto reconnect", True], + "trim-echo": ["bool", "Trim echoed messages", False], + } + + def _read_block(self, query): + self.connection.flushInput() + self.connection.flushOutput() + self.connection.write(query) + data = [] + length = 0 + + # TODO: Auto detect echoed messages and trim them automatically. + incoming_length = 11 + if not self.get_config_option("trim-echo"): + incoming_length = 4 + for i in range(0, incoming_length): + byte = int.from_bytes(self.connection.read(), "big") + if i == incoming_length - 2: + if byte != 0: + break + if i == incoming_length - 1: + length = byte + + for i in range(0, length): + data.append(int.from_bytes(self.connection.read(), "big")) + + for i in range(0, 3): + self.connection.read() + + return data + + def _read_message(self): + if not self.first_tick(): + self.wait_for_interval(self.get_config_option("interval")) + + d1 = self._read_block(b"\xDD\xA5\x03\x00\xFF\xFD\x77") + d2 = self._read_block(b"\xDD\xA5\x04\x00\xFF\xFC\x77") + + if not d1 or not d2: + raise SerialException("Missing some block of data") + + current = ( + _byte(d1, 2) / 100 + if _byte(d1, 2) < 2**15 + else (_byte(d1, 2) - 2**16) / 100 + ) or 0 + + json = { + "voltage": _byte(d1, 0) / 100, + "current": current, + "capacity": _byte(d1, 4) * 10, + "nominal-capacity": _byte(d1, 6) * 10, + "cycles": _byte(d1, 8), + "percentages": d1[19], + "mos-state": d1[20], + "temperatures": { + # TODO: Number of temps is provided in data too, do this in loop. + "1": (_byte(d1, 23) - 2731) / 10, + "2": (_byte(d1, 25) - 2731) / 10, + }, + "cells": {}, + "protection-bits": bin(_byte(d1, 16))[2:].zfill(16), + } + + cell_count = d1[21] + balancing = bin(_byte(d1, 14))[2:].zfill(16) + bin(_byte(d1, 12))[2:].zfill(16) + + for i in range(0, cell_count): + json["cells"][f"{i+1}"] = { + "voltage": _byte(d2, i * 2) / 1000, + "balancing": int(balancing[31 - i]), + } + + return json + + def send_message(self, message): + if self.is_connected(): + try: + mos_template = "DD 5A E1 02 00 ## ?? ?? 77" + label = message.get_label() + if "mos-state" in label: + bits = label.split("-")[2] + text = mos_template + if bits not in ["00", "01", "10", "11"]: + return False + text = text.replace("##", hex(3 - int(bits, 2))[2:].zfill(2)) + current_bytes = bytes.fromhex(text[6:-9]) + byte_sum = sum(current_bytes) + text = text.replace("?? ??", hex(256 * 256 - byte_sum)[2:]) + self.connection.write(bytes.fromhex(text)) + # TODO: Read answer from device and detect return state. + return True + except SerialException: + pass diff --git a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py new file mode 100644 index 0000000..afaccf6 --- /dev/null +++ b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py @@ -0,0 +1,161 @@ +from os import path +from threading import Thread +from time import sleep + +from minimalmodbus import Instrument, NoResponseError, InvalidResponseError +from serial import SerialException + +from modules.logging.logger import Logger +from .abstract_handler import AbstractHandler + + +class MustPVPHInverterModbusHandler(AbstractHandler): + """Class for handling MUST PV/PH solar system inverters.""" + + type = "must_pv_ph_modbus" + icon = "inverter" + name = "MUST PV/PH solar inverter" + config_fields = { + "port": ["string", "Device port (e.g., /dev/ttyUSB0)"], + "slave-address": ["int", "Device slave address", 4], + "interval": ["int", "Fetching interval in seconds", 10], + "timeout": ["float", "Timeout in seconds", 0.1], + "auto-reconnect": ["bool", "Auto reconnect", True], + } + + registers = { + "charger": { + "pv-voltage": [15205, 1], + "battery-voltage": [15206, 1], + "current": [15207, 1], + "power": [15208, 0], + }, + "inverter": { + "battery-voltage": [25205, 1], + "power": [25213, 0], + "power-grid": [25214, 0], + "power-load": [25215, 0], + }, + } + + def _read_message(self): + if not self.first_tick(): + self.wait_for_interval(self.get_config_option("interval")) + + result = {"charger": {}, "inverter": {}} + + for section_type in self.registers.keys(): + for key, data in self.registers[section_type].items(): + result[section_type][key] = self.connection.read_register( + data[0], data[1] + ) + sleep(0.05) + + return result + + def _message_watcher(self): + self.log.debug("Starting message watcher") + while self.active: + if path.exists(self.connection.serial.port): + try: + message = self._read_message() + if message: + self.add_message(message) + except SerialException as error: + self._handle_error(error, "Failed to read from device") + break + except UnicodeDecodeError as error: + self.log.warning(error) + sleep(0.1) + except NoResponseError as error: + self._handle_error(error, "Communication error") + break + except InvalidResponseError as error: + self._handle_error(error, "Invalid response error") + break + else: + self.log.info("Lost connection with device") + self.connection.serial.close() + # self.add_changed("handlers") + if self.get_config_option("auto-reconnect"): + Thread(target=self._reconnect_watcher).start() + else: + self.suspended = True + break + self.log.debug("Stopping message watcher") + + def _handle_error(self, error, message): + # print(error) + self.log.warning(message) + self.log.error(error) + self.success = False + # self.add_changed("handlers") + Thread(target=self._reconnect_watcher).start() + + def _reconnect_watcher(self): + self.log.debug("Starting reconnect watcher") + while self.active: + if path.exists(self.connection.serial.port): + if self._reconnect(): + Thread(target=self._message_watcher).start() + break + sleep(1) + self.log.debug("Stopping reconnect watcher") + + def _reconnect(self): + try: + self.connection.serial.open() + self.log.info("Established connection with device") + # self.add_changed("handlers") + return True + except SerialException: + if path.exists(self.connection.serial.port): + self.log.warning("Failed to establish connection - Permission denied") + else: + self.log.warning( + "Failed to establish connection - Device does not exist" + ) + self.connection.serial.close() + return False + except NoResponseError: + return False + except InvalidResponseError: + return False + + def __init__(self, settings): + super().__init__(settings) + self.log = Logger( + f"SerialDevice {self.get_config_option('port')}:{self.get_config_option('slave-address')}" + ) + + # TODO: This is failing if the device is not connected at the start + self.connection = Instrument(self.get_config_option("port"), self.get_config_option("slave-address")) + self.connection.serial.timeout = self.get_config_option("timeout") + + self.active = True + self.suspended = False + # self.add_changed("handlers") + + Thread(target=self._reconnect_watcher).start() + + def set_config(self, new_config): + super().set_config(new_config) + + # TODO: Semaphore may be required + + self.connection.serial.close() + self.connection.serial.port = self.get_config_option("port") + self.connection.serial.timeout = self.get_config_option("timeout") + self.connection.address = self.get_config_option("slave-address") + self.connection.serial.close() + + if self.suspended: + Thread(target=self._reconnect_watcher).start() + + # self.add_changed("handlers") + + def get_description(self): + return self.connection.serial.port + + def is_connected(self): + return self.connection.serial.is_open diff --git a/src/server/modules/handlers/serial_handler.py b/src/server/modules/handlers/serial_handler.py new file mode 100644 index 0000000..d1a7392 --- /dev/null +++ b/src/server/modules/handlers/serial_handler.py @@ -0,0 +1,140 @@ +from json import loads +from json.decoder import JSONDecodeError +from os import path +from threading import Thread +from time import sleep + +from serial import Serial, SerialException + +from modules.logging import Logger +from .abstract_handler import AbstractHandler + + +class SerialHandler(AbstractHandler): + """Class for handling devices connected to serial port.""" + + def _read_message(self): + data = self.connection.readline() + if data: + try: + # Try load as a JSON + data_json = loads(data) + return data_json + except JSONDecodeError: + # If this fails, decode as a plain text + data = bytes.decode(data) + data = data.replace("\n", "") + return data + + def _message_watcher(self): + self.log.debug("Starting message watcher") + while self.active: + if path.exists(self.connection.port): + try: + message = self._read_message() + if message: + self.add_message(message) + except SerialException: + self.log.warning("Failed to read from device") + self._reconnect() + sleep(0.1) + except UnicodeDecodeError as error: + self.log.warning(error) + sleep(0.1) + else: + self.log.info("Lost connection with device") + self.connection.close() + # self.add_changed("handlers") + if self.get_config_option("auto-reconnect"): + Thread(target=self._reconnect_watcher).start() + else: + self.suspended = True + break + self.log.debug("Stopping message watcher") + + def _reconnect_watcher(self): + self.log.debug("Starting reconnect watcher") + while self.active: + if path.exists(self.connection.port): + if self._reconnect(): + Thread(target=self._message_watcher).start() + break + sleep(1) + self.log.debug("Stopping reconnect watcher") + + def _reconnect(self): + try: + self.connection.open() + self.log.info("Established connection with device") + # self.add_changed("handlers") + return True + except SerialException: + if path.exists(self.connection.port): + self.log.warning("Failed to establish connection - Permission denied") + else: + self.log.warning( + "Failed to establish connection - Device does not exist" + ) + self.connection.close() + return False + + type = "serial" + icon = type + name = "Serial device" + config_fields = { + "port": ["string", "Device port (e.g., /dev/ttyUSB0)"], + "baudrate": ["int", "Baudrate", 9600], + "timeout": ["float", "Timeout in seconds", 0.1], + "auto-reconnect": ["bool", "Auto reconnect", True], + } + + def __init__(self, settings): + super().__init__(settings) + self.log = Logger(f"{self.name} {self.get_config_option('port')}") + + self.connection = Serial() + self.connection.port = self.get_config_option("port") + self.connection.baudrate = self.get_config_option("baudrate") or 9600 + self.connection.timeout = self.get_config_option("timeout") + + self.active = True + self.suspended = False + # self.add_changed("handlers") + + Thread(target=self._reconnect_watcher).start() + + def set_config(self, new_config): + super().set_config(new_config) + + # TODO: Semaphore may be required + + self.connection.close() + self.connection.port = self.get_config_option("port") + self.connection.baudrate = self.get_config_option("baudrate") or 9600 + self.connection.timeout = self.get_config_option("timeout") + self.connection.close() + + if self.suspended: + Thread(target=self._reconnect_watcher).start() + + # self.add_changed("handlers") + + def get_description(self): + return self.connection.port + + def send_message(self, message): + if self.is_connected(): + try: + self.connection.write(bytes(message.text(), "utf-8")) + return True + except SerialException: + pass + + def is_connected(self): + return self.connection.is_open + + def exit(self): + self.active = False + if self.connection: + self.log.info("Closing connection") + self.connection.close() diff --git a/src/server/modules/models/attribute.py b/src/server/modules/models/attribute.py index 86edde5..1ad7df0 100644 --- a/src/server/modules/models/attribute.py +++ b/src/server/modules/models/attribute.py @@ -14,6 +14,8 @@ class Attribute(db.Entity): widget_switches = orm.Set("WidgetSwitch") enabled = orm.Required(bool) unit = orm.Optional(str) + label = orm.Optional(str) + icon = orm.Optional(str) # def to_json(self): # return {} diff --git a/src/server/modules/models/widget_tile.py b/src/server/modules/models/widget_tile.py index 818b6d0..a8e3f85 100644 --- a/src/server/modules/models/widget_tile.py +++ b/src/server/modules/models/widget_tile.py @@ -6,8 +6,6 @@ class WidgetTile(db.Entity): """Database entity representing widget tile""" - name = orm.Optional(str, index=True) - icon = orm.Optional(str) attribute = orm.Required("Attribute") diff --git a/src/server/modules/utils/tools.py b/src/server/modules/utils/tools.py index 64c7af5..36acfc8 100644 --- a/src/server/modules/utils/tools.py +++ b/src/server/modules/utils/tools.py @@ -13,6 +13,8 @@ def get_current_seconds(): return int(time()) +# TODO: Refactor to not use result as an argument +# TODO: Unit test def linearize(input_json, result=None, current_branch=()): if result is None: result = {} @@ -21,6 +23,9 @@ def linearize(input_json, result=None, current_branch=()): new_branch = list(current_branch) new_branch.append(attribute) linearize(input_json[attribute], result, new_branch) + elif isinstance(input_json[attribute], list): + for index, item in enumerate(input_json[attribute]): + linearize({attribute: {str(index): item}}, result, current_branch) else: branch = list(current_branch) branch.append(attribute) From 5daf41388eb3793d4665d911d8f627b76303a5ff Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Tue, 31 Dec 2024 08:05:18 +0100 Subject: [PATCH 022/105] Fixes --- src/client/pages/dashboard.tsx | 18 ++++++++++-------- src/client/pages/handlers.tsx | 3 +-- src/client/src/bridge/endpoints.ts | 2 ++ src/client/src/bridge/models/AttributeModel.ts | 16 ++++++++++++++++ src/client/src/bridge/modules/attributes.ts | 9 +++++++++ .../Widget/AttributeWidget/AttributeWidget.tsx | 6 +++--- src/server/modules/models/attribute.py | 6 +++--- src/server/modules/models/logging_message.py | 2 +- src/server/modules/models/widget_switch.py | 8 ++++---- 9 files changed, 49 insertions(+), 21 deletions(-) create mode 100644 src/client/src/bridge/models/AttributeModel.ts create mode 100644 src/client/src/bridge/modules/attributes.ts diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx index 5c232d0..ad4e92a 100644 --- a/src/client/pages/dashboard.tsx +++ b/src/client/pages/dashboard.tsx @@ -1,4 +1,5 @@ import { useWidgetSwitches, useWidgetTiles } from "../src/bridge"; +import { useAttributes } from "../src/bridge/modules/attributes"; import { AttributeWidget, FlexLayout, SwitchWidget, ThemedIconName, Toolbar } from "../src/components"; import { NavbarLayout } from "../src/layouts"; import { LOC_KEY, useLocalization } from "../src/localization"; @@ -6,6 +7,7 @@ import { LOC_KEY, useLocalization } from "../src/localization"; const Dashboard = () => { const { localize } = useLocalization(); const { data: tiles } = useWidgetTiles(); + const { data: attributes } = useAttributes(); const { data: switches } = useWidgetSwitches(); return ( @@ -15,15 +17,15 @@ const Dashboard = () => { description={localize(LOC_KEY.DASHBOARD_INFO)} /> - {tiles?.map((widget) => ( + {attributes?.map((attribute) => ( ))} diff --git a/src/client/pages/handlers.tsx b/src/client/pages/handlers.tsx index 3bf2726..45b5a59 100644 --- a/src/client/pages/handlers.tsx +++ b/src/client/pages/handlers.tsx @@ -3,7 +3,6 @@ import { useState } from "react"; import { useAvailableHandlers, useHandlers } from "../src/bridge"; import { getStatusColor } from "../src/bridge/models/utils"; import { - CustomIconName, FlexLayout, Menu, MenuItem, @@ -57,7 +56,7 @@ const Handlers = () => { title={handler.name} description={handler.description} colorFlag={getStatusColor(handler.status)} - icon={handler.type as CustomIconName} + icon={handler.icon} onClick={() => showHandlerInfo(handler.id)} active={currentHandlerId === handler.id} /> diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts index 88fe2d1..9c57a47 100644 --- a/src/client/src/bridge/endpoints.ts +++ b/src/client/src/bridge/endpoints.ts @@ -4,6 +4,8 @@ export enum Endpoint { availablePorts = "core/actions/available-ports", nodeMap = "core/actions/node-map", saveNodeMap = "core/actions/save-node-map", + // Attributes + attributes = "core/attributes", // Charts attributeChart = "core/charts/attribute", // Handlers diff --git a/src/client/src/bridge/models/AttributeModel.ts b/src/client/src/bridge/models/AttributeModel.ts new file mode 100644 index 0000000..0ac487e --- /dev/null +++ b/src/client/src/bridge/models/AttributeModel.ts @@ -0,0 +1,16 @@ +import { IconName } from "../../components"; + +export interface AttributeModel { + id: number; + name: string; + handler: number; + enabled: boolean; + unit?: string; + label?: string; + icon?: IconName; + data: { + handler_name: string; + value?: string | number; + status: number; + }; +} diff --git a/src/client/src/bridge/modules/attributes.ts b/src/client/src/bridge/modules/attributes.ts new file mode 100644 index 0000000..7e2ffb4 --- /dev/null +++ b/src/client/src/bridge/modules/attributes.ts @@ -0,0 +1,9 @@ +import useSWR from "swr"; + +import { Endpoint, getApiEndpoint } from "../endpoints"; +import { AttributeModel } from "../models/AttributeModel"; +import { getJson } from "../utils"; + +export const useAttributes = () => { + return useSWR(getApiEndpoint(Endpoint.attributes), getJson); +}; diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx index 6d7ee4b..2bd7a3b 100644 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx +++ b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx @@ -8,10 +8,10 @@ const bem = bemClassNames("attribute-widget"); export type AttributeWidgetProps = { title: string; description: string; - icon: IconName; + icon?: IconName; status: number; - unit: string; - value: string | number | boolean; + unit?: string; + value?: string | number | boolean; }; export const AttributeWidget: FC = ({ diff --git a/src/server/modules/models/attribute.py b/src/server/modules/models/attribute.py index 1ad7df0..1ae8ddd 100644 --- a/src/server/modules/models/attribute.py +++ b/src/server/modules/models/attribute.py @@ -13,9 +13,9 @@ class Attribute(db.Entity): widget_tiles = orm.Set("WidgetTile") widget_switches = orm.Set("WidgetSwitch") enabled = orm.Required(bool) - unit = orm.Optional(str) - label = orm.Optional(str) - icon = orm.Optional(str) + unit = orm.Optional(str, nullable=True) + label = orm.Optional(str, nullable=True) + icon = orm.Optional(str, nullable=True) # def to_json(self): # return {} diff --git a/src/server/modules/models/logging_message.py b/src/server/modules/models/logging_message.py index c59c548..707c635 100644 --- a/src/server/modules/models/logging_message.py +++ b/src/server/modules/models/logging_message.py @@ -11,7 +11,7 @@ class LoggingMessage(db.Entity): source = orm.Required(str) level = orm.Required(int) message = orm.Required(str) - payload = orm.Optional(orm.Json) + payload = orm.Optional(orm.Json, nullable=True) date = orm.Required(date, index=True) time = orm.Required(time) diff --git a/src/server/modules/models/widget_switch.py b/src/server/modules/models/widget_switch.py index cb51e25..b0d0a0f 100644 --- a/src/server/modules/models/widget_switch.py +++ b/src/server/modules/models/widget_switch.py @@ -7,9 +7,9 @@ class WidgetSwitch(db.Entity): """Database entity representing widget switch""" - name = orm.Optional(str, index=True) - icon = orm.Optional(str) + name = orm.Optional(str, index=True, nullable=True) + icon = orm.Optional(str, nullable=True) attribute = orm.Required("Attribute") attribute_compare = orm.Optional(str, nullable=True) - action_on = orm.Optional(Action) - action_off = orm.Optional(Action) + action_on = orm.Optional(Action, nullable=True) + action_off = orm.Optional(Action, nullable=True) From 4a552c736ade02d5a7641f18b029111ba608df4d Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Tue, 31 Dec 2024 08:11:35 +0100 Subject: [PATCH 023/105] Fixes --- src/server/modules/blueprints/attributes.py | 13 +++++++++++++ src/server/modules/blueprints/charts.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/server/modules/blueprints/attributes.py b/src/server/modules/blueprints/attributes.py index 19ed004..7fd7a51 100644 --- a/src/server/modules/blueprints/attributes.py +++ b/src/server/modules/blueprints/attributes.py @@ -8,6 +8,12 @@ def attributes_blueprint(_context: Context): blueprint = Blueprint(this_name(), __name__) + def get_handler(attribute): + return _context.manager.registered_handlers.get(attribute.handler.id, None) + + def get_attribute(attribute): + return _context.manager.registered_attributes.get(attribute.handler.id, {}).get(attribute.name) + @blueprint.route("/") @orm.db_session def attributes(): @@ -19,6 +25,13 @@ def attributes(): "enabled": attribute.enabled, "unit": attribute.unit, "label": attribute.label, + "icon": attribute.icon, + "data": { + # TODO: Add disabled status + "status": 1 if get_handler(attribute).is_connected() else 0, + "handler_name": get_handler(attribute).get_name(), + "value": get_attribute(attribute).get_current_value(), + } } for attribute in Attribute.select() ], StatusCode.OK diff --git a/src/server/modules/blueprints/charts.py b/src/server/modules/blueprints/charts.py index dcf0d64..168b310 100644 --- a/src/server/modules/blueprints/charts.py +++ b/src/server/modules/blueprints/charts.py @@ -30,7 +30,7 @@ def attribute(attribute_ids): "label": data_units.first().attribute.name, "data": [ { - "x": int(datetime.combine(data_unit.date, time.fromisoformat(data_unit.time)).timestamp()), + "x": int(datetime.combine(data_unit.date, time.fromisoformat(str(data_unit.time))).timestamp()), "y": data_unit.value, } for data_unit in data_units From e582134910013b8f04dff98f7b147b482e82da7f Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Tue, 31 Dec 2024 08:56:31 +0100 Subject: [PATCH 024/105] Fix attribute description and value --- src/client/pages/dashboard.tsx | 2 +- .../src/components/Widget/AttributeWidget/AttributeWidget.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx index ad4e92a..2a7857f 100644 --- a/src/client/pages/dashboard.tsx +++ b/src/client/pages/dashboard.tsx @@ -20,7 +20,7 @@ const Dashboard = () => { {attributes?.map((attribute) => ( = ({
{title}
{description}
- {value && ( + {value !== null && value !== undefined && (
{value} {unit}
From 1a80f355e5ea97804ea972d12f30c14de4b2e6e1 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 1 Jan 2025 15:00:59 +0100 Subject: [PATCH 025/105] Fixes --- src/client/pages/dashboard.tsx | 3 +- src/client/public/icons/cosmic/humidity.svg | 7 +++++ src/server/modules/attribute_manager.py | 19 +++++++++--- .../must_pv_ph_inverter_modbus_handler.py | 31 ++++++++++--------- 4 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 src/client/public/icons/cosmic/humidity.svg diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx index 2a7857f..973f2d8 100644 --- a/src/client/pages/dashboard.tsx +++ b/src/client/pages/dashboard.tsx @@ -1,4 +1,4 @@ -import { useWidgetSwitches, useWidgetTiles } from "../src/bridge"; +import { useWidgetSwitches } from "../src/bridge"; import { useAttributes } from "../src/bridge/modules/attributes"; import { AttributeWidget, FlexLayout, SwitchWidget, ThemedIconName, Toolbar } from "../src/components"; import { NavbarLayout } from "../src/layouts"; @@ -6,7 +6,6 @@ import { LOC_KEY, useLocalization } from "../src/localization"; const Dashboard = () => { const { localize } = useLocalization(); - const { data: tiles } = useWidgetTiles(); const { data: attributes } = useAttributes(); const { data: switches } = useWidgetSwitches(); return ( diff --git a/src/client/public/icons/cosmic/humidity.svg b/src/client/public/icons/cosmic/humidity.svg new file mode 100644 index 0000000..5355e58 --- /dev/null +++ b/src/client/public/icons/cosmic/humidity.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/server/modules/attribute_manager.py b/src/server/modules/attribute_manager.py index 09e3f2e..0eee5ae 100644 --- a/src/server/modules/attribute_manager.py +++ b/src/server/modules/attribute_manager.py @@ -17,6 +17,7 @@ def __init__(self, db_instance): self.name = db_instance.name self.label = db_instance.label self.last_value_save_skipped = False + self.last_date = datetime.now().date() value = None if db_instance.data_units: @@ -27,16 +28,20 @@ def __init__(self, db_instance): self.value = value self.last_datetime = None + self.stats = {} + self.init_stats() + + self.stat_predicates = { + "max": lambda val: val > self.stats["max"], + "min": lambda val: val < self.stats["min"], + } + + def init_stats(self): self.stats = { "max": None, "min": None, } - self.stat_predicates = { - "max": lambda value: value > self.stats["max"], - "min": lambda value: value < self.stats["min"], - } - def get_id(self): return self.id @@ -72,6 +77,10 @@ def add_data_unit(self, value): def check_and_add_stat_units(self, value): now = datetime.now() + if now.date() > self.last_date: + # New day has started, reset stats + self.init_stats() + self.last_date = now.date() for predicate_name, stat_predicate in self.stat_predicates.items(): if self.stats[predicate_name] is None: # If stat is not found, it may not be loaded from DB yet. Try to load it. diff --git a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py index afaccf6..3ad5ae8 100644 --- a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py +++ b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py @@ -63,6 +63,12 @@ def _message_watcher(self): self.add_message(message) except SerialException as error: self._handle_error(error, "Failed to read from device") + if path.exists(self.get_config_option("port")): + self._handle_error(error, "Failed to establish connection - Permission denied") + else: + self._handle_error(error, + "Failed to establish connection - Device does not exist" + ) break except UnicodeDecodeError as error: self.log.warning(error) @@ -95,27 +101,23 @@ def _handle_error(self, error, message): def _reconnect_watcher(self): self.log.debug("Starting reconnect watcher") while self.active: - if path.exists(self.connection.serial.port): - if self._reconnect(): - Thread(target=self._message_watcher).start() - break + if self._reconnect(): + Thread(target=self._message_watcher).start() + break sleep(1) self.log.debug("Stopping reconnect watcher") def _reconnect(self): try: + if self.connection: + self.connection.serial.close() + self.connection = Instrument(self.get_config_option("port"), self.get_config_option("slave-address")) + self.connection.serial.timeout = self.get_config_option("timeout") self.connection.serial.open() self.log.info("Established connection with device") # self.add_changed("handlers") return True except SerialException: - if path.exists(self.connection.serial.port): - self.log.warning("Failed to establish connection - Permission denied") - else: - self.log.warning( - "Failed to establish connection - Device does not exist" - ) - self.connection.serial.close() return False except NoResponseError: return False @@ -129,9 +131,8 @@ def __init__(self, settings): ) # TODO: This is failing if the device is not connected at the start - self.connection = Instrument(self.get_config_option("port"), self.get_config_option("slave-address")) - self.connection.serial.timeout = self.get_config_option("timeout") + self.connection = None self.active = True self.suspended = False # self.add_changed("handlers") @@ -155,7 +156,7 @@ def set_config(self, new_config): # self.add_changed("handlers") def get_description(self): - return self.connection.serial.port + return self.get_config_option("port") def is_connected(self): - return self.connection.serial.is_open + return self.connection and self.connection.serial.is_open From e22eff48947a33b06613b910571a322f68c859a4 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 1 Jan 2025 15:18:05 +0100 Subject: [PATCH 026/105] Fixes --- .../handlers/must_pv_ph_inverter_modbus_handler.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py index 3ad5ae8..d22a0db 100644 --- a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py +++ b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py @@ -82,6 +82,7 @@ def _message_watcher(self): else: self.log.info("Lost connection with device") self.connection.serial.close() + self.connection = None # self.add_changed("handlers") if self.get_config_option("auto-reconnect"): Thread(target=self._reconnect_watcher).start() @@ -111,13 +112,15 @@ def _reconnect(self): try: if self.connection: self.connection.serial.close() + self.connection = None self.connection = Instrument(self.get_config_option("port"), self.get_config_option("slave-address")) self.connection.serial.timeout = self.get_config_option("timeout") self.connection.serial.open() self.log.info("Established connection with device") # self.add_changed("handlers") return True - except SerialException: + except SerialException as error: + print(error) return False except NoResponseError: return False @@ -130,8 +133,6 @@ def __init__(self, settings): f"SerialDevice {self.get_config_option('port')}:{self.get_config_option('slave-address')}" ) - # TODO: This is failing if the device is not connected at the start - self.connection = None self.active = True self.suspended = False @@ -145,10 +146,7 @@ def set_config(self, new_config): # TODO: Semaphore may be required self.connection.serial.close() - self.connection.serial.port = self.get_config_option("port") - self.connection.serial.timeout = self.get_config_option("timeout") - self.connection.address = self.get_config_option("slave-address") - self.connection.serial.close() + self.connection = None if self.suspended: Thread(target=self._reconnect_watcher).start() From 9b495dd21aaa2f5dfa2593231d26453da1e0974b Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 1 Jan 2025 15:36:45 +0100 Subject: [PATCH 027/105] Fixes --- .../modules/handlers/must_pv_ph_inverter_modbus_handler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py index d22a0db..440f5d6 100644 --- a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py +++ b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py @@ -115,7 +115,8 @@ def _reconnect(self): self.connection = None self.connection = Instrument(self.get_config_option("port"), self.get_config_option("slave-address")) self.connection.serial.timeout = self.get_config_option("timeout") - self.connection.serial.open() + if not self.connection.serial.is_open: + self.connection.serial.open() self.log.info("Established connection with device") # self.add_changed("handlers") return True From 9088f4123b8b9f049e1c2740d8f96ca14dd21201 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 1 Jan 2025 16:18:07 +0100 Subject: [PATCH 028/105] Fixes --- src/server/modules/attribute_manager.py | 4 ++-- .../handlers/must_pv_ph_inverter_modbus_handler.py | 3 +-- src/server/modules/handlers/serial_handler.py | 1 + src/server/modules/models/data_stat.py | 8 +++----- src/server/modules/models/handler.py | 2 -- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/server/modules/attribute_manager.py b/src/server/modules/attribute_manager.py index 0eee5ae..0eb980a 100644 --- a/src/server/modules/attribute_manager.py +++ b/src/server/modules/attribute_manager.py @@ -84,12 +84,12 @@ def check_and_add_stat_units(self, value): for predicate_name, stat_predicate in self.stat_predicates.items(): if self.stats[predicate_name] is None: # If stat is not found, it may not be loaded from DB yet. Try to load it. - db_stat = data_stat_model.get_by_type_and_date(self.handler_id, self.id, predicate_name, now.date()) + db_stat = data_stat_model.get_by_type_and_date(self.id, predicate_name, now.date()) self.stats[predicate_name] = db_stat.value if db_stat else None if self.stats[predicate_name] is not None and stat_predicate(value): # If stat is found in db and predicate is true, update stat in db. - db_stat = data_stat_model.get_by_type_and_date(self.handler_id, self.id, predicate_name, now.date()) + db_stat = data_stat_model.get_by_type_and_date(self.id, predicate_name, now.date()) self.stats[predicate_name] = db_stat.value if db_stat else None db_stat.time = now.time() db_stat.value = value diff --git a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py index 440f5d6..8d54306 100644 --- a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py +++ b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py @@ -120,8 +120,7 @@ def _reconnect(self): self.log.info("Established connection with device") # self.add_changed("handlers") return True - except SerialException as error: - print(error) + except SerialException: return False except NoResponseError: return False diff --git a/src/server/modules/handlers/serial_handler.py b/src/server/modules/handlers/serial_handler.py index d1a7392..c136082 100644 --- a/src/server/modules/handlers/serial_handler.py +++ b/src/server/modules/handlers/serial_handler.py @@ -131,6 +131,7 @@ def send_message(self, message): pass def is_connected(self): + # TODO: Check if the messages are being sent return self.connection.is_open def exit(self): diff --git a/src/server/modules/models/data_stat.py b/src/server/modules/models/data_stat.py index 7bfadec..6e4ef0e 100644 --- a/src/server/modules/models/data_stat.py +++ b/src/server/modules/models/data_stat.py @@ -8,7 +8,6 @@ class DataStat(db.Entity): """Database entity representing data statistics""" - handler = orm.Required("Handler") attribute = orm.Required("Attribute", index=True) type = orm.Required(str) value = orm.Required(float) @@ -23,7 +22,6 @@ def add(handler, attribute, stat_type, value) -> DataStat: """Adds DataStat to database""" now = datetime.now() return DataStat( - handler=handler, attribute=attribute, type=stat_type, value=value, @@ -32,6 +30,6 @@ def add(handler, attribute, stat_type, value) -> DataStat: ) -def get_by_type_and_date(handler, attribute, stat_type, stat_date) -> DataStat | None: - """Return DataStat by handler, attribute and date""" - return DataStat.get(handler=handler, attribute=attribute, type=stat_type, date=stat_date) +def get_by_type_and_date(attribute, stat_type, stat_date) -> DataStat | None: + """Return DataStat by attribute and date""" + return DataStat.get(attribute=attribute, type=stat_type, date=stat_date) diff --git a/src/server/modules/models/handler.py b/src/server/modules/models/handler.py index 2393592..2709602 100644 --- a/src/server/modules/models/handler.py +++ b/src/server/modules/models/handler.py @@ -3,7 +3,6 @@ from modules.database import db from modules.handlers.abstract_handler import AbstractHandler from modules.models.attribute import Attribute -from modules.models.data_stat import DataStat from modules.models.data_unit import DataUnit @@ -14,7 +13,6 @@ class Handler(db.Entity): options = orm.Required(orm.Json) enabled = orm.Required(bool) data = orm.Set(DataUnit) - stats = orm.Set(DataStat) attributes = orm.Set(Attribute) # events = orm.Set("EventUnit") From 41b28302c63024533cabb432fbb6db8701281e66 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 1 Jan 2025 16:30:02 +0100 Subject: [PATCH 029/105] Fix --- .../modules/handlers/must_pv_ph_inverter_modbus_handler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py index 8d54306..a819070 100644 --- a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py +++ b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py @@ -117,6 +117,7 @@ def _reconnect(self): self.connection.serial.timeout = self.get_config_option("timeout") if not self.connection.serial.is_open: self.connection.serial.open() + self._read_message() self.log.info("Established connection with device") # self.add_changed("handlers") return True From b79613de23ee03d53e988650f5d850432389db4d Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 1 Jan 2025 17:35:13 +0100 Subject: [PATCH 030/105] Fixes --- src/client/src/bridge/models/utils.ts | 4 ++-- .../Menu/components/MenuItem/MenuItem.scss | 4 ++++ src/server/modules/blueprints/attributes.py | 2 +- src/server/modules/blueprints/charts.py | 4 +++- src/server/modules/blueprints/handlers.py | 10 +++++++--- src/server/modules/blueprints/widgets.py | 2 +- .../modules/handlers/abstract_handler.py | 14 ++++++++++++-- src/server/modules/handlers/http_handler.py | 6 ++++++ .../handlers/jiabaida_bms_serial_handler.py | 6 +----- .../must_pv_ph_inverter_modbus_handler.py | 19 +++++++++---------- src/server/modules/handlers/serial_handler.py | 10 +++++++--- 11 files changed, 53 insertions(+), 28 deletions(-) diff --git a/src/client/src/bridge/models/utils.ts b/src/client/src/bridge/models/utils.ts index a703513..4fc089b 100644 --- a/src/client/src/bridge/models/utils.ts +++ b/src/client/src/bridge/models/utils.ts @@ -1,11 +1,11 @@ import { HandlerStatus } from "./HandlerModel"; export const getStatusColor = (handlerStatus: HandlerStatus = HandlerStatus.DISCONNECTED) => { - const colors = ["red", "green", "gray"]; + const colors = ["red", "green", "orange", "gray"]; return colors[handlerStatus]; }; export const getStatusText = (handlerStatus: HandlerStatus = HandlerStatus.DISCONNECTED) => { - const texts = ["disconnected", "connected", "disabled"]; + const texts = ["disconnected", "connected", "not communicating", "disabled"]; return texts[handlerStatus]; }; diff --git a/src/client/src/components/Menu/components/MenuItem/MenuItem.scss b/src/client/src/components/Menu/components/MenuItem/MenuItem.scss index ff48171..3a25522 100644 --- a/src/client/src/components/Menu/components/MenuItem/MenuItem.scss +++ b/src/client/src/components/Menu/components/MenuItem/MenuItem.scss @@ -32,6 +32,10 @@ &-red { background: #dc6860; } + + &-orange { + background: #f0a500; + } } } diff --git a/src/server/modules/blueprints/attributes.py b/src/server/modules/blueprints/attributes.py index 7fd7a51..9a7f96d 100644 --- a/src/server/modules/blueprints/attributes.py +++ b/src/server/modules/blueprints/attributes.py @@ -31,7 +31,7 @@ def attributes(): "status": 1 if get_handler(attribute).is_connected() else 0, "handler_name": get_handler(attribute).get_name(), "value": get_attribute(attribute).get_current_value(), - } + }, } for attribute in Attribute.select() ], StatusCode.OK diff --git a/src/server/modules/blueprints/charts.py b/src/server/modules/blueprints/charts.py index 168b310..01150d5 100644 --- a/src/server/modules/blueprints/charts.py +++ b/src/server/modules/blueprints/charts.py @@ -30,7 +30,9 @@ def attribute(attribute_ids): "label": data_units.first().attribute.name, "data": [ { - "x": int(datetime.combine(data_unit.date, time.fromisoformat(str(data_unit.time))).timestamp()), + "x": int( + datetime.combine(data_unit.date, time.fromisoformat(str(data_unit.time))).timestamp() + ), "y": data_unit.value, } for data_unit in data_units diff --git a/src/server/modules/blueprints/handlers.py b/src/server/modules/blueprints/handlers.py index 171486b..e30f542 100644 --- a/src/server/modules/blueprints/handlers.py +++ b/src/server/modules/blueprints/handlers.py @@ -10,6 +10,10 @@ def handlers_blueprint(_context: Context): blueprint = Blueprint(this_name(), __name__) + def get_status(handler): + """Returns 1 if handler is connected and communication. Returns 2 if handler is connected but not communicating. Returns 0 if handler is not connected.""" + return 2 if handler.is_connected() and not handler.is_communicating() else 1 if handler.is_connected() else 0 + @blueprint.route("/available-handlers") def get_available_handlers(): return [ @@ -22,7 +26,7 @@ def get_available_handlers(): for handler in available_handlers ], StatusCode.OK - @blueprint.route("/all") # TODO: Investigate why this doesn't work with just / on mobile + @blueprint.route("/all") # TODO: Investigate why this doesn't work with just / on mobile @orm.db_session def handlers(): return [ @@ -32,7 +36,7 @@ def handlers(): "name": handler.get_name(), "icon": handler.icon, "description": handler.get_description(), - "status": 1 if handler.is_connected() else 0, + "status": get_status(handler), "attributes": [ { "id": attribute_manager.get_id(), @@ -48,7 +52,7 @@ def handlers(): for h_id, handler in _context.manager.registered_handlers.items() ], StatusCode.OK - @blueprint.route("/all/") # TODO: Investigate why this doesn't work with just / on mobile + @blueprint.route("/all/") # TODO: Investigate why this doesn't work with just / on mobile def handler_info(handler_id): handler = _context.manager.registered_handlers.get(handler_id, None) if handler: diff --git a/src/server/modules/blueprints/widgets.py b/src/server/modules/blueprints/widgets.py index df27f5f..3ba402e 100644 --- a/src/server/modules/blueprints/widgets.py +++ b/src/server/modules/blueprints/widgets.py @@ -32,7 +32,7 @@ def widget_tiles(): return [ { "id": tile.id, - "name": tile.attribute.label or tile.attribute.name, # TODO: Split label and name + "name": tile.attribute.label or tile.attribute.name, # TODO: Split label and name "description": get_handler(tile).get_name(), "handler": tile.attribute.handler.id, "status": 1 if get_handler(tile).is_connected() else 0, diff --git a/src/server/modules/handlers/abstract_handler.py b/src/server/modules/handlers/abstract_handler.py index 49a3914..cd8f3c8 100644 --- a/src/server/modules/handlers/abstract_handler.py +++ b/src/server/modules/handlers/abstract_handler.py @@ -35,7 +35,11 @@ def send_message(self, message): pass def is_connected(self): - """Returns True if the target is connected and can communicate.""" + """Returns True if the target is connected and ready to use.""" + return False + + def is_communicating(self): + """Returns True if the target is responding to messages.""" return False def exit(self): @@ -60,6 +64,7 @@ def __init__(self, options): self._first_tick = True self._current_seconds = get_current_seconds() self._last_seconds = 0 + self._last_message_seconds = None def get_options(self): return self.options @@ -88,6 +93,10 @@ def get_config_option(self, attribute): """Returns single form configuration option value""" return self.get_config().get(attribute, None) + def get_last_message_seconds(self): + """Returns the time in seconds when the last message was received.""" + return self._last_message_seconds + # def add_changed(self, value): # """ # Add appropriate string if there is a need to refresh GUI. @@ -114,8 +123,9 @@ def get_config_option(self, attribute): # self.set_option("label", label) def add_message(self, message): - """Appends message to the message queue.""" + """Appends message to the message queue and updates the last message seconds.""" self.message_queue.append(message) + self._last_message_seconds = get_current_seconds() def ready_to_read(self): """Returns True if there is a message ready to read.""" diff --git a/src/server/modules/handlers/http_handler.py b/src/server/modules/handlers/http_handler.py index 45ade74..50c295f 100644 --- a/src/server/modules/handlers/http_handler.py +++ b/src/server/modules/handlers/http_handler.py @@ -8,6 +8,7 @@ from modules.logging import Logger from .abstract_handler import AbstractHandler +from ..utils import get_current_seconds class HttpHandler(AbstractHandler): @@ -163,3 +164,8 @@ def send_message(self, message): def is_connected(self): return self.success + + def is_communicating(self): + return self.get_last_message_seconds() > ( + get_current_seconds() - self.get_config_option("interval") - self.get_config_option("timeout") + ) diff --git a/src/server/modules/handlers/jiabaida_bms_serial_handler.py b/src/server/modules/handlers/jiabaida_bms_serial_handler.py index 3a92449..2b2842d 100644 --- a/src/server/modules/handlers/jiabaida_bms_serial_handler.py +++ b/src/server/modules/handlers/jiabaida_bms_serial_handler.py @@ -58,11 +58,7 @@ def _read_message(self): if not d1 or not d2: raise SerialException("Missing some block of data") - current = ( - _byte(d1, 2) / 100 - if _byte(d1, 2) < 2**15 - else (_byte(d1, 2) - 2**16) / 100 - ) or 0 + current = (_byte(d1, 2) / 100 if _byte(d1, 2) < 2**15 else (_byte(d1, 2) - 2**16) / 100) or 0 json = { "voltage": _byte(d1, 0) / 100, diff --git a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py index a819070..21beefc 100644 --- a/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py +++ b/src/server/modules/handlers/must_pv_ph_inverter_modbus_handler.py @@ -7,6 +7,7 @@ from modules.logging.logger import Logger from .abstract_handler import AbstractHandler +from ..utils import get_current_seconds class MustPVPHInverterModbusHandler(AbstractHandler): @@ -46,9 +47,7 @@ def _read_message(self): for section_type in self.registers.keys(): for key, data in self.registers[section_type].items(): - result[section_type][key] = self.connection.read_register( - data[0], data[1] - ) + result[section_type][key] = self.connection.read_register(data[0], data[1]) sleep(0.05) return result @@ -66,9 +65,7 @@ def _message_watcher(self): if path.exists(self.get_config_option("port")): self._handle_error(error, "Failed to establish connection - Permission denied") else: - self._handle_error(error, - "Failed to establish connection - Device does not exist" - ) + self._handle_error(error, "Failed to establish connection - Device does not exist") break except UnicodeDecodeError as error: self.log.warning(error) @@ -95,7 +92,6 @@ def _handle_error(self, error, message): # print(error) self.log.warning(message) self.log.error(error) - self.success = False # self.add_changed("handlers") Thread(target=self._reconnect_watcher).start() @@ -130,9 +126,7 @@ def _reconnect(self): def __init__(self, settings): super().__init__(settings) - self.log = Logger( - f"SerialDevice {self.get_config_option('port')}:{self.get_config_option('slave-address')}" - ) + self.log = Logger(f"{self.name} {self.get_config_option('port')}:{self.get_config_option('slave-address')}") self.connection = None self.active = True @@ -159,3 +153,8 @@ def get_description(self): def is_connected(self): return self.connection and self.connection.serial.is_open + + def is_communicating(self): + return self.get_last_message_seconds() > ( + get_current_seconds() - self.get_config_option("interval") - self.get_config_option("timeout") + ) diff --git a/src/server/modules/handlers/serial_handler.py b/src/server/modules/handlers/serial_handler.py index c136082..cbabebc 100644 --- a/src/server/modules/handlers/serial_handler.py +++ b/src/server/modules/handlers/serial_handler.py @@ -8,6 +8,7 @@ from modules.logging import Logger from .abstract_handler import AbstractHandler +from ..utils import get_current_seconds class SerialHandler(AbstractHandler): @@ -72,9 +73,7 @@ def _reconnect(self): if path.exists(self.connection.port): self.log.warning("Failed to establish connection - Permission denied") else: - self.log.warning( - "Failed to establish connection - Device does not exist" - ) + self.log.warning("Failed to establish connection - Device does not exist") self.connection.close() return False @@ -134,6 +133,11 @@ def is_connected(self): # TODO: Check if the messages are being sent return self.connection.is_open + def is_communicating(self): + return self.get_last_message_seconds() > ( + get_current_seconds() - self.get_config_option("interval") - self.get_config_option("timeout") + ) + def exit(self): self.active = False if self.connection: From 3094bb6539f4f031878f3fb52a66715bec3a5e47 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Wed, 1 Jan 2025 17:40:25 +0100 Subject: [PATCH 031/105] Fix --- src/server/modules/handlers/abstract_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/modules/handlers/abstract_handler.py b/src/server/modules/handlers/abstract_handler.py index cd8f3c8..7ed9d58 100644 --- a/src/server/modules/handlers/abstract_handler.py +++ b/src/server/modules/handlers/abstract_handler.py @@ -94,8 +94,8 @@ def get_config_option(self, attribute): return self.get_config().get(attribute, None) def get_last_message_seconds(self): - """Returns the time in seconds when the last message was received.""" - return self._last_message_seconds + """Returns the time in seconds when the last message was received or 0 if no message was received.""" + return self._last_message_seconds or 0 # def add_changed(self, value): # """ From 3bdf1dce053575958db06c991051815c0ac1c459 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Fri, 3 Jan 2025 16:33:46 +0100 Subject: [PATCH 032/105] Rewrite to Turborepo --- src/client/.eslintrc.json | 21 - src/client/.gitignore | 38 + src/client/.stylelintrc.json | 10 - src/client/README.md | 84 + src/client/apps/contwatch-client/.gitignore | 36 + src/client/apps/contwatch-client/README.md | 36 + .../contwatch-client/app/actions/page.tsx | 101 + .../apps/contwatch-client/app/favicon.ico | Bin 0 -> 25931 bytes .../apps/contwatch-client/app/globals.scss | 1 + .../HandlerWidget/HandlerWidget.module.scss | 70 + .../HandlerWidget/HandlerWidget.tsx | 133 + .../contwatch-client/app/handlers/page.tsx | 23 + .../InspectorChart.module.scss} | 13 +- .../InspectorChart/InspectorChart.tsx | 138 + .../components}/InspectorChart/adapter.d.ts | 0 .../InspectorChart/chartOptions.ts | 0 .../contwatch-client/app/inspector/page.tsx | 88 + .../apps/contwatch-client/app/layout.tsx | 23 + src/client/apps/contwatch-client/app/page.tsx | 22 + .../apps/contwatch-client/app/providers.tsx | 20 + .../apps/contwatch-client/next.config.mjs | 33 + src/client/apps/contwatch-client/package.json | 25 + .../public/icons/arrow-down-square.svg | 3 + .../public/icons}/arrow-maximize.svg | 0 .../public/icons/arrow-minimize.svg | 3 + .../public/icons/arrow-right-down.svg | 3 + .../public/icons/arrow-right-up.svg | 3 + .../public/icons/arrow-up-square.svg | 3 + .../public/icons}/branch-horizontal.svg | 0 .../public/icons}/chart-square.svg | 0 .../contwatch-client/public/icons/circle.svg | 3 + .../public/icons}/cross-small.svg | 0 .../public/icons/custom/battery.png | Bin .../public/icons/custom/http.png | Bin .../public/icons/custom/inverter.png | Bin .../public/icons/custom/serial.png | Bin .../public/icons}/grid-mixed.svg | 0 .../public/icons}/humidity.svg | 0 .../contwatch-client/public/icons/menu.svg | 3 + .../contwatch-client/public/icons/minus.svg | 3 + .../contwatch-client/public/icons/plus.svg | 3 + .../public/icons}/processor.svg | 0 .../public/icons/search-trending-up.svg | 3 + .../public/icons}/temperature.svg | 0 .../contwatch-client/public/icons/wrench.svg | 3 + .../public/icons/zoom-out.svg | 3 + .../contwatch-client/public}/logo.png | Bin .../apps/contwatch-client/tsconfig.json | 20 + src/client/apps/docs/.gitignore | 36 + src/client/apps/docs/README.md | 36 + src/client/apps/docs/app/favicon.ico | Bin 0 -> 25931 bytes .../apps/docs/app/fonts/GeistMonoVF.woff | Bin 0 -> 67864 bytes src/client/apps/docs/app/fonts/GeistVF.woff | Bin 0 -> 66268 bytes src/client/apps/docs/app/globals.css | 50 + src/client/apps/docs/app/layout.tsx | 31 + src/client/apps/docs/app/page.module.css | 188 + src/client/apps/docs/app/page.tsx | 98 + src/client/apps/docs/package.json | 27 + src/client/apps/docs/public/file-text.svg | 3 + src/client/apps/docs/public/globe.svg | 10 + src/client/apps/docs/public/next.svg | 1 + .../apps/docs/public/turborepo-dark.svg | 19 + .../apps/docs/public/turborepo-light.svg | 19 + src/client/apps/docs/public/vercel.svg | 10 + src/client/apps/docs/public/window.svg | 3 + src/client/apps/docs/tsconfig.json | 20 + src/client/jest.config.ts | 15 - src/client/next-env.d.ts | 5 - src/client/next.config.ts | 38 - src/client/package-lock.json | 13268 ++++++++++++---- src/client/package.json | 83 +- src/client/packages/eslint-config/README.md | 3 + src/client/packages/eslint-config/base.js | 32 + src/client/packages/eslint-config/next.js | 49 + .../packages/eslint-config/package-lock.json | 6586 ++++++++ .../packages/eslint-config/package.json | 26 + .../packages/eslint-config/react-internal.js | 39 + src/client/packages/store/eslint.config.mjs | 33 + src/client/packages/store/package.json | 19 + .../store/src/components/StoreProvider.tsx | 34 + .../store/src/hooks/useLocalization.ts | 57 + .../store/src/slices}/settingsSlice.ts | 20 +- .../store => packages/store/src}/store.ts | 11 +- src/client/packages/types/package.json | 11 + .../types/src/models/AttributeChartModel.ts} | 0 .../types/src}/models/AttributeModel.ts | 7 +- .../types/src/models/DataStatModel.ts | 8 + .../types/src}/models/HandlerModel.ts | 5 +- .../packages/typescript-config/base.json | 19 + .../packages/typescript-config/nextjs.json | 12 + .../packages/typescript-config/package.json | 9 + .../typescript-config/react-library.json | 7 + src/client/packages/ui/global.d.ts | 4 + src/client/packages/ui/package.json | 42 + .../src/components/Button/Button.module.scss | 200 + .../ui/src/components/Button/Button.tsx | 109 + .../ui/src/components/Flex/Flex.module.scss | 52 + .../packages/ui/src/components/Flex/Flex.tsx | 73 + .../ui/src/components/Icon/Icon.module.scss | 101 + .../packages/ui/src/components/Icon/Icon.tsx | 90 + .../ui/src/components/Input/Input.module.scss | 102 + .../ui/src/components/Input/Input.test.tsx | 221 + .../ui/src/components/Input/Input.tsx | 258 + .../src/components/Navbar/Navbar.module.scss | 22 + .../ui/src/components/Navbar/Navbar.tsx | 16 + .../NavbarItem/NavbarItem.module.scss | 22 + .../components/NavbarItem/NavbarItem.tsx | 34 + .../NavbarLayout/NavbarLayout.module.scss | 27 + .../components/NavbarLayout/NavbarLayout.tsx | 60 + .../ui/src/components/Popup/Popup.module.scss | 27 + .../ui/src/components/Popup/Popup.tsx | 64 + .../Separator/Separator.module.scss | 11 + .../ui/src/components/Separator/Separator.tsx | 17 + .../ui/src/components/Text/Text.module.scss | 111 + .../packages/ui/src/components/Text/Text.tsx | 70 + .../packages/ui/src/components/common.scss | 45 + .../ui/src/components/definition.scss | 65 + .../packages/ui/src/components/mixins.scss | 8 + .../packages/ui/src/components/variables.scss | 10 + src/client/packages/ui/src/fonts.ts | 22 + .../partials/FlexPartials/FlexPartials.tsx | 15 + src/client/packages/ui/tsconfig.json | 8 + .../packages/ui/turbo/generators/config.ts | 30 + .../turbo/generators/templates/component.hbs | 8 + src/client/packages/utils/.eslintrc.js | 10 + src/client/packages/utils/eslint.config.mjs | 33 + src/client/packages/utils/jest.config.ts | 8 + src/client/packages/utils/package.json | 43 + .../packages/utils/src/bemClassNames.test.ts | 29 + .../packages/utils/src/bemClassNames.ts | 38 + .../packages/utils/src/communication.ts | 36 + src/client/packages/utils/src/endpoints.ts | 6 + .../packages/utils/src/fetchJsonFactory.ts | 11 + .../packages/utils/src/getApiEndpoint.test.ts | 16 + .../packages/utils/src/getApiEndpoint.ts | 2 + .../packages/utils/src/hooks/swrEndpoints.ts | 34 + src/client/packages/utils/src/i18n/client.ts | 60 + src/client/packages/utils/src/i18n/index.ts | 30 + .../src/i18n/locales/cs/translation.json | 15 + .../src/i18n/locales/en/translation.json | 15 + .../packages/utils/src/i18n/settings.ts | 16 + .../packages/utils/src/pluralizeUnit.ts | 20 + src/client/packages/utils/tsconfig.json | 8 + src/client/pages/_app.tsx | 32 - src/client/pages/actions.tsx | 114 - src/client/pages/dashboard.tsx | 48 - src/client/pages/handlers.tsx | 105 - src/client/pages/index.tsx | 14 - src/client/pages/inspector.tsx | 53 - src/client/pages/internal-server-error.tsx | 5 - src/client/pages/settings.tsx | 32 - src/client/public/fonts/Cantarell-Bold.otf | Bin 143192 -> 0 bytes .../public/fonts/Cantarell-ExtraBold.otf | Bin 145140 -> 0 bytes src/client/public/fonts/Cantarell-Light.otf | Bin 141608 -> 0 bytes src/client/public/fonts/Cantarell-Regular.otf | Bin 137812 -> 0 bytes src/client/public/fonts/Cantarell-Thin.otf | Bin 140512 -> 0 bytes .../public/fonts/IndieFlower-Regular.ttf | Bin 55300 -> 0 bytes src/client/public/fonts/RobotoMono-Bold.ttf | Bin 87008 -> 0 bytes src/client/public/fonts/RobotoMono-Medium.ttf | Bin 86820 -> 0 bytes .../public/fonts/RobotoMono-Regular.ttf | Bin 86908 -> 0 bytes src/client/public/icons/cosmic/air.svg | 3 - .../public/icons/cosmic/battery-medium.svg | 3 - src/client/public/icons/cosmic/lightbulb.svg | 3 - src/client/public/icons/cosmic/plus-small.svg | 3 - src/client/public/icons/cosmic/power.svg | 3 - src/client/public/icons/cosmic/settings.svg | 4 - src/client/public/icons/cosmic/sun.svg | 3 - src/client/public/images/chart.png | Bin 2432 -> 0 bytes src/client/src/bridge/endpoints.ts | 20 - src/client/src/bridge/hooks.ts | 17 - src/client/src/bridge/index.ts | 1 - .../src/bridge/models/NewHandlerModel.ts | 6 - src/client/src/bridge/models/Widget.ts | 11 - .../src/bridge/models/WidgetSwitchModel.ts | 5 - .../src/bridge/models/WidgetTileModel.ts | 6 - src/client/src/bridge/models/index.ts | 4 - src/client/src/bridge/models/utils.ts | 11 - .../src/bridge/modules/actions/index.ts | 22 - .../modules/actions/models/NodeModel.ts | 10 - .../bridge/modules/actions/models/index.ts | 1 - src/client/src/bridge/modules/attributes.ts | 9 - src/client/src/bridge/modules/charts.ts | 12 - src/client/src/bridge/modules/handlers.ts | 25 - src/client/src/bridge/modules/index.ts | 4 - src/client/src/bridge/modules/widgets.ts | 27 - src/client/src/bridge/utils.ts | 39 - .../BooleanSwitcher/BooleanSwitcher.tsx | 18 - .../src/components/BooleanSwitcher/index.ts | 1 - src/client/src/components/Button/Button.scss | 86 - src/client/src/components/Button/Button.tsx | 55 - src/client/src/components/Button/index.ts | 1 - src/client/src/components/Button/mixins.scss | 6 - src/client/src/components/Card/Card.scss | 33 - src/client/src/components/Card/Card.tsx | 43 - .../Card/components/CardBody/CardBody.scss | 3 - .../Card/components/CardBody/CardBody.tsx | 20 - .../Card/components/CardBody/index.ts | 1 - .../components/CardHeader/CardHeader.scss | 17 - .../Card/components/CardHeader/CardHeader.tsx | 25 - .../Card/components/CardHeader/index.ts | 1 - .../src/components/Card/components/index.ts | 2 - src/client/src/components/Card/index.ts | 2 - src/client/src/components/Card/mixins.scss | 11 - .../src/components/FlexLayout/FlexLayout.scss | 13 - .../src/components/FlexLayout/FlexLayout.tsx | 50 - src/client/src/components/FlexLayout/index.ts | 1 - src/client/src/components/Header/Header.scss | 3 - src/client/src/components/Header/Header.tsx | 31 - src/client/src/components/Header/index.ts | 1 - src/client/src/components/Icon/Icon.scss | 30 - src/client/src/components/Icon/Icon.tsx | 47 - src/client/src/components/Icon/enums.ts | 59 - src/client/src/components/Icon/index.ts | 2 - src/client/src/components/Input/Input.scss | 36 - src/client/src/components/Input/Input.tsx | 55 - src/client/src/components/Input/index.ts | 1 - src/client/src/components/Input/mixins.scss | 14 - .../InputRenderer/InputRenderer.scss | 5 - .../InputRenderer/InputRenderer.tsx | 29 - .../src/components/InputRenderer/index.ts | 1 - .../src/components/LinkButton/LinkButton.tsx | 36 - src/client/src/components/LinkButton/index.ts | 1 - src/client/src/components/Loc/Loc.tsx | 15 - src/client/src/components/Loc/index.ts | 1 - src/client/src/components/Menu/Menu.scss | 11 - src/client/src/components/Menu/Menu.tsx | 18 - .../Menu/components/MenuItem/MenuItem.scss | 51 - .../Menu/components/MenuItem/MenuItem.tsx | 36 - .../Menu/components/MenuItem/index.ts | 1 - .../components/MenuSection/MenuSection.scss | 16 - .../components/MenuSection/MenuSection.tsx | 24 - .../Menu/components/MenuSection/index.ts | 1 - .../src/components/Menu/components/index.ts | 2 - src/client/src/components/Menu/index.ts | 2 - src/client/src/components/Navbar/Navbar.scss | 25 - src/client/src/components/Navbar/Navbar.tsx | 20 - .../components/NavbarItem/NavbarItem.scss | 23 - .../components/NavbarItem/NavbarItem.tsx | 38 - .../Navbar/components/NavbarItem/index.ts | 1 - .../components/NavbarLogo/NavbarLogo.scss | 3 - .../components/NavbarLogo/NavbarLogo.tsx | 17 - .../Navbar/components/NavbarLogo/index.ts | 1 - .../NavbarSection/NavbarSection.tsx | 19 - .../Navbar/components/NavbarSection/index.ts | 1 - .../components/NavbarUser/NavbarUser.scss | 19 - .../components/NavbarUser/NavbarUser.tsx | 28 - .../Navbar/components/NavbarUser/index.ts | 1 - .../src/components/Navbar/components/index.ts | 4 - src/client/src/components/Navbar/index.ts | 2 - .../src/components/Separator/Separator.scss | 7 - .../src/components/Separator/Separator.tsx | 17 - src/client/src/components/Separator/index.ts | 1 - .../src/components/Toolbar/Toolbar.scss | 33 - src/client/src/components/Toolbar/Toolbar.tsx | 28 - src/client/src/components/Toolbar/index.ts | 1 - .../AttributeWidget/AttributeWidget.scss | 51 - .../AttributeWidget/AttributeWidget.tsx | 39 - .../Widget/AttributeWidget/index.ts | 1 - .../Widget/SwitchWidget/SwitchWidget.scss | 74 - .../Widget/SwitchWidget/SwitchWidget.tsx | 39 - .../components/Widget/SwitchWidget/index.ts | 1 - src/client/src/components/Widget/Widget.scss | 2 - src/client/src/components/Widget/index.ts | 2 - src/client/src/components/components.scss | 12 - src/client/src/components/index.ts | 15 - .../layouts/NavbarLayout/NavbarLayout.scss | 15 - .../src/layouts/NavbarLayout/NavbarLayout.tsx | 48 - src/client/src/layouts/NavbarLayout/index.ts | 1 - src/client/src/layouts/index.ts | 1 - src/client/src/layouts/layouts.scss | 1 - src/client/src/localization/database.ts | 80 - src/client/src/localization/hooks.ts | 27 - src/client/src/localization/index.ts | 2 - src/client/src/partials/Handler/Handler.scss | 91 - src/client/src/partials/Handler/Handler.tsx | 68 - src/client/src/partials/Handler/index.ts | 1 - .../InspectorChart/InspectorChart.tsx | 79 - .../src/partials/InspectorChart/index.ts | 1 - .../src/partials/NewHandler/NewHandler.scss | 17 - .../src/partials/NewHandler/NewHandler.tsx | 114 - src/client/src/partials/NewHandler/index.ts | 2 - .../NewHandler/newHandlerConfigSlice.ts | 38 - src/client/src/partials/index.ts | 2 - src/client/src/partials/partials.scss | 3 - src/client/src/ssrUtils.ts | 28 - src/client/src/store/StoreInit.tsx | 31 - src/client/src/store/index.ts | 2 - src/client/src/types.ts | 66 - src/client/src/utils.test.ts | 30 - src/client/src/utils.ts | 65 - src/client/styles/fonts.scss | 53 - src/client/styles/main.scss | 14 - src/client/styles/mixins.scss | 27 - src/client/styles/variables.scss | 34 - src/client/tsconfig.json | 26 - src/client/turbo.json | 22 + src/server/Pipfile | 1 + src/server/modules/attribute_manager.py | 30 + src/server/modules/blueprints/__init__.py | 2 + src/server/modules/blueprints/attributes.py | 6 +- src/server/modules/blueprints/charts.py | 11 +- src/server/modules/blueprints/datastats.py | 42 + src/server/modules/blueprints/handlers.py | 7 +- src/server/modules/handler_manager.py | 8 + .../modules/handlers/abstract_handler.py | 4 + src/server/modules/models/data_unit.py | 9 + 306 files changed, 20762 insertions(+), 6737 deletions(-) delete mode 100644 src/client/.eslintrc.json create mode 100644 src/client/.gitignore delete mode 100644 src/client/.stylelintrc.json create mode 100644 src/client/README.md create mode 100644 src/client/apps/contwatch-client/.gitignore create mode 100644 src/client/apps/contwatch-client/README.md create mode 100644 src/client/apps/contwatch-client/app/actions/page.tsx create mode 100644 src/client/apps/contwatch-client/app/favicon.ico create mode 100644 src/client/apps/contwatch-client/app/globals.scss create mode 100644 src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss create mode 100644 src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx create mode 100644 src/client/apps/contwatch-client/app/handlers/page.tsx rename src/client/{src/partials/InspectorChart/InspectorChart.scss => apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.module.scss} (51%) create mode 100644 src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx rename src/client/{src/partials => apps/contwatch-client/app/inspector/components}/InspectorChart/adapter.d.ts (100%) rename src/client/{src/partials => apps/contwatch-client/app/inspector/components}/InspectorChart/chartOptions.ts (100%) create mode 100644 src/client/apps/contwatch-client/app/inspector/page.tsx create mode 100644 src/client/apps/contwatch-client/app/layout.tsx create mode 100644 src/client/apps/contwatch-client/app/page.tsx create mode 100644 src/client/apps/contwatch-client/app/providers.tsx create mode 100644 src/client/apps/contwatch-client/next.config.mjs create mode 100644 src/client/apps/contwatch-client/package.json create mode 100644 src/client/apps/contwatch-client/public/icons/arrow-down-square.svg rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/arrow-maximize.svg (100%) create mode 100644 src/client/apps/contwatch-client/public/icons/arrow-minimize.svg create mode 100644 src/client/apps/contwatch-client/public/icons/arrow-right-down.svg create mode 100644 src/client/apps/contwatch-client/public/icons/arrow-right-up.svg create mode 100644 src/client/apps/contwatch-client/public/icons/arrow-up-square.svg rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/branch-horizontal.svg (100%) rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/chart-square.svg (100%) create mode 100644 src/client/apps/contwatch-client/public/icons/circle.svg rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/cross-small.svg (100%) rename src/client/{ => apps/contwatch-client}/public/icons/custom/battery.png (100%) rename src/client/{ => apps/contwatch-client}/public/icons/custom/http.png (100%) rename src/client/{ => apps/contwatch-client}/public/icons/custom/inverter.png (100%) rename src/client/{ => apps/contwatch-client}/public/icons/custom/serial.png (100%) rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/grid-mixed.svg (100%) rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/humidity.svg (100%) create mode 100644 src/client/apps/contwatch-client/public/icons/menu.svg create mode 100644 src/client/apps/contwatch-client/public/icons/minus.svg create mode 100644 src/client/apps/contwatch-client/public/icons/plus.svg rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/processor.svg (100%) create mode 100644 src/client/apps/contwatch-client/public/icons/search-trending-up.svg rename src/client/{public/icons/cosmic => apps/contwatch-client/public/icons}/temperature.svg (100%) create mode 100644 src/client/apps/contwatch-client/public/icons/wrench.svg create mode 100644 src/client/apps/contwatch-client/public/icons/zoom-out.svg rename src/client/{public/icons/custom => apps/contwatch-client/public}/logo.png (100%) create mode 100644 src/client/apps/contwatch-client/tsconfig.json create mode 100644 src/client/apps/docs/.gitignore create mode 100644 src/client/apps/docs/README.md create mode 100644 src/client/apps/docs/app/favicon.ico create mode 100644 src/client/apps/docs/app/fonts/GeistMonoVF.woff create mode 100644 src/client/apps/docs/app/fonts/GeistVF.woff create mode 100644 src/client/apps/docs/app/globals.css create mode 100644 src/client/apps/docs/app/layout.tsx create mode 100644 src/client/apps/docs/app/page.module.css create mode 100644 src/client/apps/docs/app/page.tsx create mode 100644 src/client/apps/docs/package.json create mode 100644 src/client/apps/docs/public/file-text.svg create mode 100644 src/client/apps/docs/public/globe.svg create mode 100644 src/client/apps/docs/public/next.svg create mode 100644 src/client/apps/docs/public/turborepo-dark.svg create mode 100644 src/client/apps/docs/public/turborepo-light.svg create mode 100644 src/client/apps/docs/public/vercel.svg create mode 100644 src/client/apps/docs/public/window.svg create mode 100644 src/client/apps/docs/tsconfig.json delete mode 100644 src/client/jest.config.ts delete mode 100644 src/client/next-env.d.ts delete mode 100644 src/client/next.config.ts create mode 100644 src/client/packages/eslint-config/README.md create mode 100644 src/client/packages/eslint-config/base.js create mode 100644 src/client/packages/eslint-config/next.js create mode 100644 src/client/packages/eslint-config/package-lock.json create mode 100644 src/client/packages/eslint-config/package.json create mode 100644 src/client/packages/eslint-config/react-internal.js create mode 100644 src/client/packages/store/eslint.config.mjs create mode 100644 src/client/packages/store/package.json create mode 100644 src/client/packages/store/src/components/StoreProvider.tsx create mode 100644 src/client/packages/store/src/hooks/useLocalization.ts rename src/client/{src/store => packages/store/src/slices}/settingsSlice.ts (61%) rename src/client/{src/store => packages/store/src}/store.ts (54%) create mode 100644 src/client/packages/types/package.json rename src/client/{src/bridge/models/AttributeChart.ts => packages/types/src/models/AttributeChartModel.ts} (100%) rename src/client/{src/bridge => packages/types/src}/models/AttributeModel.ts (64%) create mode 100644 src/client/packages/types/src/models/DataStatModel.ts rename src/client/{src/bridge => packages/types/src}/models/HandlerModel.ts (86%) create mode 100644 src/client/packages/typescript-config/base.json create mode 100644 src/client/packages/typescript-config/nextjs.json create mode 100644 src/client/packages/typescript-config/package.json create mode 100644 src/client/packages/typescript-config/react-library.json create mode 100644 src/client/packages/ui/global.d.ts create mode 100644 src/client/packages/ui/package.json create mode 100644 src/client/packages/ui/src/components/Button/Button.module.scss create mode 100644 src/client/packages/ui/src/components/Button/Button.tsx create mode 100644 src/client/packages/ui/src/components/Flex/Flex.module.scss create mode 100644 src/client/packages/ui/src/components/Flex/Flex.tsx create mode 100644 src/client/packages/ui/src/components/Icon/Icon.module.scss create mode 100644 src/client/packages/ui/src/components/Icon/Icon.tsx create mode 100644 src/client/packages/ui/src/components/Input/Input.module.scss create mode 100644 src/client/packages/ui/src/components/Input/Input.test.tsx create mode 100644 src/client/packages/ui/src/components/Input/Input.tsx create mode 100644 src/client/packages/ui/src/components/Navbar/Navbar.module.scss create mode 100644 src/client/packages/ui/src/components/Navbar/Navbar.tsx create mode 100644 src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.module.scss create mode 100644 src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.tsx create mode 100644 src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.module.scss create mode 100644 src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.tsx create mode 100644 src/client/packages/ui/src/components/Popup/Popup.module.scss create mode 100644 src/client/packages/ui/src/components/Popup/Popup.tsx create mode 100644 src/client/packages/ui/src/components/Separator/Separator.module.scss create mode 100644 src/client/packages/ui/src/components/Separator/Separator.tsx create mode 100644 src/client/packages/ui/src/components/Text/Text.module.scss create mode 100644 src/client/packages/ui/src/components/Text/Text.tsx create mode 100644 src/client/packages/ui/src/components/common.scss create mode 100644 src/client/packages/ui/src/components/definition.scss create mode 100644 src/client/packages/ui/src/components/mixins.scss create mode 100644 src/client/packages/ui/src/components/variables.scss create mode 100644 src/client/packages/ui/src/fonts.ts create mode 100644 src/client/packages/ui/src/partials/FlexPartials/FlexPartials.tsx create mode 100644 src/client/packages/ui/tsconfig.json create mode 100644 src/client/packages/ui/turbo/generators/config.ts create mode 100644 src/client/packages/ui/turbo/generators/templates/component.hbs create mode 100644 src/client/packages/utils/.eslintrc.js create mode 100644 src/client/packages/utils/eslint.config.mjs create mode 100644 src/client/packages/utils/jest.config.ts create mode 100644 src/client/packages/utils/package.json create mode 100644 src/client/packages/utils/src/bemClassNames.test.ts create mode 100644 src/client/packages/utils/src/bemClassNames.ts create mode 100644 src/client/packages/utils/src/communication.ts create mode 100644 src/client/packages/utils/src/endpoints.ts create mode 100644 src/client/packages/utils/src/fetchJsonFactory.ts create mode 100644 src/client/packages/utils/src/getApiEndpoint.test.ts create mode 100644 src/client/packages/utils/src/getApiEndpoint.ts create mode 100644 src/client/packages/utils/src/hooks/swrEndpoints.ts create mode 100644 src/client/packages/utils/src/i18n/client.ts create mode 100644 src/client/packages/utils/src/i18n/index.ts create mode 100644 src/client/packages/utils/src/i18n/locales/cs/translation.json create mode 100644 src/client/packages/utils/src/i18n/locales/en/translation.json create mode 100644 src/client/packages/utils/src/i18n/settings.ts create mode 100644 src/client/packages/utils/src/pluralizeUnit.ts create mode 100644 src/client/packages/utils/tsconfig.json delete mode 100644 src/client/pages/_app.tsx delete mode 100644 src/client/pages/actions.tsx delete mode 100644 src/client/pages/dashboard.tsx delete mode 100644 src/client/pages/handlers.tsx delete mode 100644 src/client/pages/index.tsx delete mode 100644 src/client/pages/inspector.tsx delete mode 100644 src/client/pages/internal-server-error.tsx delete mode 100644 src/client/pages/settings.tsx delete mode 100644 src/client/public/fonts/Cantarell-Bold.otf delete mode 100644 src/client/public/fonts/Cantarell-ExtraBold.otf delete mode 100644 src/client/public/fonts/Cantarell-Light.otf delete mode 100644 src/client/public/fonts/Cantarell-Regular.otf delete mode 100644 src/client/public/fonts/Cantarell-Thin.otf delete mode 100644 src/client/public/fonts/IndieFlower-Regular.ttf delete mode 100644 src/client/public/fonts/RobotoMono-Bold.ttf delete mode 100644 src/client/public/fonts/RobotoMono-Medium.ttf delete mode 100644 src/client/public/fonts/RobotoMono-Regular.ttf delete mode 100644 src/client/public/icons/cosmic/air.svg delete mode 100644 src/client/public/icons/cosmic/battery-medium.svg delete mode 100644 src/client/public/icons/cosmic/lightbulb.svg delete mode 100644 src/client/public/icons/cosmic/plus-small.svg delete mode 100644 src/client/public/icons/cosmic/power.svg delete mode 100644 src/client/public/icons/cosmic/settings.svg delete mode 100644 src/client/public/icons/cosmic/sun.svg delete mode 100644 src/client/public/images/chart.png delete mode 100644 src/client/src/bridge/endpoints.ts delete mode 100644 src/client/src/bridge/hooks.ts delete mode 100644 src/client/src/bridge/index.ts delete mode 100644 src/client/src/bridge/models/NewHandlerModel.ts delete mode 100644 src/client/src/bridge/models/Widget.ts delete mode 100644 src/client/src/bridge/models/WidgetSwitchModel.ts delete mode 100644 src/client/src/bridge/models/WidgetTileModel.ts delete mode 100644 src/client/src/bridge/models/index.ts delete mode 100644 src/client/src/bridge/models/utils.ts delete mode 100644 src/client/src/bridge/modules/actions/index.ts delete mode 100644 src/client/src/bridge/modules/actions/models/NodeModel.ts delete mode 100644 src/client/src/bridge/modules/actions/models/index.ts delete mode 100644 src/client/src/bridge/modules/attributes.ts delete mode 100644 src/client/src/bridge/modules/charts.ts delete mode 100644 src/client/src/bridge/modules/handlers.ts delete mode 100644 src/client/src/bridge/modules/index.ts delete mode 100644 src/client/src/bridge/modules/widgets.ts delete mode 100644 src/client/src/bridge/utils.ts delete mode 100644 src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx delete mode 100644 src/client/src/components/BooleanSwitcher/index.ts delete mode 100644 src/client/src/components/Button/Button.scss delete mode 100644 src/client/src/components/Button/Button.tsx delete mode 100644 src/client/src/components/Button/index.ts delete mode 100644 src/client/src/components/Button/mixins.scss delete mode 100644 src/client/src/components/Card/Card.scss delete mode 100644 src/client/src/components/Card/Card.tsx delete mode 100644 src/client/src/components/Card/components/CardBody/CardBody.scss delete mode 100644 src/client/src/components/Card/components/CardBody/CardBody.tsx delete mode 100644 src/client/src/components/Card/components/CardBody/index.ts delete mode 100644 src/client/src/components/Card/components/CardHeader/CardHeader.scss delete mode 100644 src/client/src/components/Card/components/CardHeader/CardHeader.tsx delete mode 100644 src/client/src/components/Card/components/CardHeader/index.ts delete mode 100644 src/client/src/components/Card/components/index.ts delete mode 100644 src/client/src/components/Card/index.ts delete mode 100644 src/client/src/components/Card/mixins.scss delete mode 100644 src/client/src/components/FlexLayout/FlexLayout.scss delete mode 100644 src/client/src/components/FlexLayout/FlexLayout.tsx delete mode 100644 src/client/src/components/FlexLayout/index.ts delete mode 100644 src/client/src/components/Header/Header.scss delete mode 100644 src/client/src/components/Header/Header.tsx delete mode 100644 src/client/src/components/Header/index.ts delete mode 100644 src/client/src/components/Icon/Icon.scss delete mode 100644 src/client/src/components/Icon/Icon.tsx delete mode 100644 src/client/src/components/Icon/enums.ts delete mode 100644 src/client/src/components/Icon/index.ts delete mode 100644 src/client/src/components/Input/Input.scss delete mode 100644 src/client/src/components/Input/Input.tsx delete mode 100644 src/client/src/components/Input/index.ts delete mode 100644 src/client/src/components/Input/mixins.scss delete mode 100644 src/client/src/components/InputRenderer/InputRenderer.scss delete mode 100644 src/client/src/components/InputRenderer/InputRenderer.tsx delete mode 100644 src/client/src/components/InputRenderer/index.ts delete mode 100644 src/client/src/components/LinkButton/LinkButton.tsx delete mode 100644 src/client/src/components/LinkButton/index.ts delete mode 100644 src/client/src/components/Loc/Loc.tsx delete mode 100644 src/client/src/components/Loc/index.ts delete mode 100644 src/client/src/components/Menu/Menu.scss delete mode 100644 src/client/src/components/Menu/Menu.tsx delete mode 100644 src/client/src/components/Menu/components/MenuItem/MenuItem.scss delete mode 100644 src/client/src/components/Menu/components/MenuItem/MenuItem.tsx delete mode 100644 src/client/src/components/Menu/components/MenuItem/index.ts delete mode 100644 src/client/src/components/Menu/components/MenuSection/MenuSection.scss delete mode 100644 src/client/src/components/Menu/components/MenuSection/MenuSection.tsx delete mode 100644 src/client/src/components/Menu/components/MenuSection/index.ts delete mode 100644 src/client/src/components/Menu/components/index.ts delete mode 100644 src/client/src/components/Menu/index.ts delete mode 100644 src/client/src/components/Navbar/Navbar.scss delete mode 100644 src/client/src/components/Navbar/Navbar.tsx delete mode 100644 src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss delete mode 100644 src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx delete mode 100644 src/client/src/components/Navbar/components/NavbarItem/index.ts delete mode 100644 src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss delete mode 100644 src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx delete mode 100644 src/client/src/components/Navbar/components/NavbarLogo/index.ts delete mode 100644 src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx delete mode 100644 src/client/src/components/Navbar/components/NavbarSection/index.ts delete mode 100644 src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss delete mode 100644 src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx delete mode 100644 src/client/src/components/Navbar/components/NavbarUser/index.ts delete mode 100644 src/client/src/components/Navbar/components/index.ts delete mode 100644 src/client/src/components/Navbar/index.ts delete mode 100644 src/client/src/components/Separator/Separator.scss delete mode 100644 src/client/src/components/Separator/Separator.tsx delete mode 100644 src/client/src/components/Separator/index.ts delete mode 100644 src/client/src/components/Toolbar/Toolbar.scss delete mode 100644 src/client/src/components/Toolbar/Toolbar.tsx delete mode 100644 src/client/src/components/Toolbar/index.ts delete mode 100644 src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss delete mode 100644 src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx delete mode 100644 src/client/src/components/Widget/AttributeWidget/index.ts delete mode 100644 src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss delete mode 100644 src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx delete mode 100644 src/client/src/components/Widget/SwitchWidget/index.ts delete mode 100644 src/client/src/components/Widget/Widget.scss delete mode 100644 src/client/src/components/Widget/index.ts delete mode 100644 src/client/src/components/components.scss delete mode 100644 src/client/src/components/index.ts delete mode 100644 src/client/src/layouts/NavbarLayout/NavbarLayout.scss delete mode 100644 src/client/src/layouts/NavbarLayout/NavbarLayout.tsx delete mode 100644 src/client/src/layouts/NavbarLayout/index.ts delete mode 100644 src/client/src/layouts/index.ts delete mode 100644 src/client/src/layouts/layouts.scss delete mode 100644 src/client/src/localization/database.ts delete mode 100644 src/client/src/localization/hooks.ts delete mode 100644 src/client/src/localization/index.ts delete mode 100644 src/client/src/partials/Handler/Handler.scss delete mode 100644 src/client/src/partials/Handler/Handler.tsx delete mode 100644 src/client/src/partials/Handler/index.ts delete mode 100644 src/client/src/partials/InspectorChart/InspectorChart.tsx delete mode 100644 src/client/src/partials/InspectorChart/index.ts delete mode 100644 src/client/src/partials/NewHandler/NewHandler.scss delete mode 100644 src/client/src/partials/NewHandler/NewHandler.tsx delete mode 100644 src/client/src/partials/NewHandler/index.ts delete mode 100644 src/client/src/partials/NewHandler/newHandlerConfigSlice.ts delete mode 100644 src/client/src/partials/index.ts delete mode 100644 src/client/src/partials/partials.scss delete mode 100644 src/client/src/ssrUtils.ts delete mode 100644 src/client/src/store/StoreInit.tsx delete mode 100644 src/client/src/store/index.ts delete mode 100644 src/client/src/types.ts delete mode 100644 src/client/src/utils.test.ts delete mode 100644 src/client/src/utils.ts delete mode 100644 src/client/styles/fonts.scss delete mode 100644 src/client/styles/main.scss delete mode 100644 src/client/styles/mixins.scss delete mode 100644 src/client/styles/variables.scss delete mode 100644 src/client/tsconfig.json create mode 100644 src/client/turbo.json create mode 100644 src/server/modules/blueprints/datastats.py diff --git a/src/client/.eslintrc.json b/src/client/.eslintrc.json deleted file mode 100644 index 9213ad5..0000000 --- a/src/client/.eslintrc.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": [ - "next/core-web-vitals", - "plugin:react/recommended" - ], - "plugins": [ - "import", - "unused-imports", - "simple-import-sort", - "prettier" - ], - "rules": { - "import/no-duplicates": "error", - "simple-import-sort/imports": "error", - "simple-import-sort/exports": "error", - "unused-imports/no-unused-imports": "error", - "prettier/prettier": "error", - "react/react-in-jsx-scope": "off", - "react/no-unused-prop-types": "error" - } -} diff --git a/src/client/.gitignore b/src/client/.gitignore new file mode 100644 index 0000000..96fab4f --- /dev/null +++ b/src/client/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Dependencies +node_modules +.pnp +.pnp.js + +# Local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build +dist + + +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Misc +.DS_Store +*.pem diff --git a/src/client/.stylelintrc.json b/src/client/.stylelintrc.json deleted file mode 100644 index 878410f..0000000 --- a/src/client/.stylelintrc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": [ - "stylelint-config-standard-scss", - "stylelint-config-prettier-scss", - "stylelint-config-property-sort-order-smacss" - ], - "plugins": [ - "stylelint-order" - ] -} diff --git a/src/client/README.md b/src/client/README.md new file mode 100644 index 0000000..1574369 --- /dev/null +++ b/src/client/README.md @@ -0,0 +1,84 @@ +# Turborepo starter + +This is an official starter Turborepo. + +## Using this example + +Run the following command: + +```sh +npx create-turbo@latest +``` + +## What's inside? + +This Turborepo includes the following packages/apps: + +### Apps and Packages + +- `docs`: a [Next.js](https://nextjs.org/) app +- `web`: another [Next.js](https://nextjs.org/) app +- `@repo/ui`: a stub React component library shared by both `web` and `docs` applications +- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) +- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo + +Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). + +### Utilities + +This Turborepo has some additional tools already setup for you: + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting + +### Build + +To build all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm build +``` + +### Develop + +To develop all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm dev +``` + +### Remote Caching + +> [!TIP] +> Vercel Remote Cache is free for all plans. Get started today at [vercel.com](https://vercel.com/signup?/signup?utm_source=remote-cache-sdk&utm_campaign=free_remote_cache). + +Turborepo can use a technique known as [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines. + +By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup?utm_source=turborepo-examples), then enter the following commands: + +``` +cd my-turborepo +npx turbo login +``` + +This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview). + +Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo: + +``` +npx turbo link +``` + +## Useful Links + +Learn more about the power of Turborepo: + +- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks) +- [Caching](https://turbo.build/repo/docs/core-concepts/caching) +- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) +- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering) +- [Configuration Options](https://turbo.build/repo/docs/reference/configuration) +- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference) diff --git a/src/client/apps/contwatch-client/.gitignore b/src/client/apps/contwatch-client/.gitignore new file mode 100644 index 0000000..f886745 --- /dev/null +++ b/src/client/apps/contwatch-client/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# env files (can opt-in for commiting if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/src/client/apps/contwatch-client/README.md b/src/client/apps/contwatch-client/README.md new file mode 100644 index 0000000..a98bfa8 --- /dev/null +++ b/src/client/apps/contwatch-client/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/src/client/apps/contwatch-client/app/actions/page.tsx b/src/client/apps/contwatch-client/app/actions/page.tsx new file mode 100644 index 0000000..0a96b05 --- /dev/null +++ b/src/client/apps/contwatch-client/app/actions/page.tsx @@ -0,0 +1,101 @@ +"use client"; + +import { Text } from "@repo/ui/Text"; +import { useTranslation } from "@repo/utils/useTranslation"; + +import { + addEdge, + Background, + BackgroundVariant, + Controls, + Edge, + MiniMap, + Node, + Position, + ReactFlow, + useEdgesState, + useNodesState, +} from "@xyflow/react"; +import "@xyflow/react/dist/style.css"; +// import "@xyflow/react/dist/base.css"; +import { useCallback, useEffect } from "react"; +import { Connection } from "@xyflow/system"; + +export default function Actions() { + // TODO: Use SSR translation and remove "use client" + const { t } = useTranslation(); + + const firstTitle = t("New action editor"); + const secondTitle = t("is currently in development"); + + const initialNodes: Node[] = [ + { + id: "1", + type: "input", + position: { x: 0, y: 0 }, + data: { label: firstTitle }, + sourcePosition: Position.Right, + targetPosition: Position.Left, + }, + { + id: "2", + type: "output", + position: { x: 200, y: 50 }, + data: { label: secondTitle }, + sourcePosition: Position.Right, + targetPosition: Position.Left, + }, + ]; + + const initialEdges: Edge[] = [ + { + id: "e1-2", + source: "1", + target: "2", + }, + ]; + + const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); + const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + + useEffect(() => { + setNodes((nodes) => + nodes.map((node) => { + if (node.id === "1") { + return { ...node, data: { ...node.data, label: firstTitle } }; + } else if (node.id === "2") { + return { ...node, data: { ...node.data, label: secondTitle } }; + } + return node; + }), + ); + }, [firstTitle, secondTitle, setNodes]); + + const onConnect = useCallback( + (params: Connection) => setEdges((eds) => addEdge(params, eds)), + [setEdges], + ); + + return ( + <> + + {t("Actions")} + +
+ + + + + +
+ + ); +} diff --git a/src/client/apps/contwatch-client/app/favicon.ico b/src/client/apps/contwatch-client/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/src/client/apps/contwatch-client/app/globals.scss b/src/client/apps/contwatch-client/app/globals.scss new file mode 100644 index 0000000..a629158 --- /dev/null +++ b/src/client/apps/contwatch-client/app/globals.scss @@ -0,0 +1 @@ +@use "../../../packages/ui/src/components/common"; diff --git a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss new file mode 100644 index 0000000..154623e --- /dev/null +++ b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss @@ -0,0 +1,70 @@ +.handler-widget { + border-radius: 20px; + overflow: hidden; + background: white; + box-shadow: var(--box-shadow-card); + width: 500px; + + @media (max-width: 1000px) { + width: 100%; + } + + &__header { + background-color: var(--color-primary); + color: var(--color-mono-light); + padding: 0.6rem 1rem; + + &--color-0 { + background: #682723; + } + + &--color-1 { + background: #125100; + } + + &--color-2 { + background: #9b6d00; + } + } + + &__body { + padding: .5rem 0; + } + + &__attribute { + display: flex; + align-items: center; + gap: .5rem; + padding: .5rem .5rem; + margin: 0 .5rem; + color: inherit; + text-decoration: none; + border-radius: var(--border-radius-small); + &:hover { + background: var(--color-mono-light); + } + } + + &__peak-indicator { + display: inline-flex; + justify-content: space-between; + padding: 0.2rem; + border-radius: 100%; + opacity: .9; + margin-left: 5px; + + &--color-green { + background: var(--color-green); + } + + &--color-red { + background: var(--color-red); + } + } + + &__value { + background: var(--color-mono-light); + padding: 5px 10px; + border-radius: 10px; + } +} diff --git a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx new file mode 100644 index 0000000..afb4850 --- /dev/null +++ b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx @@ -0,0 +1,133 @@ +import { FC } from "react"; +import { HandlerModel } from "@repo/types/HandlerModel"; +import { DateTime } from "luxon"; + +import styles from "./HandlerWidget.module.scss"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { Column } from "@repo/ui/FlexPartials"; +import { Flex } from "@repo/ui/Flex"; +import { Text } from "@repo/ui/Text"; +import { Icon } from "@repo/ui/Icon"; +import { useDataStats, useHandlerAttributes } from "@repo/utils/swrEndpoints"; +import { Separator } from "@repo/ui/Separator"; +import { useTranslation } from "@repo/utils/useTranslation"; +import Link from "next/link"; + +type HandlerWidgetProps = { + handler: HandlerModel; +}; + +const bem = bemClassNames(styles); + +export const HandlerWidget: FC = ({ handler }) => { + const { t } = useTranslation(); + const { data: attributes } = useHandlerAttributes(handler.id); + const { data: dataStats } = useDataStats(); + + return ( + + + + + + {handler.name} + + + {handler.description} + + + + + {t("Data received")}:{" "} + + {handler.last_message !== null + ? (handler.last_message ?? 0) < 10 + ? t("Now") + : DateTime.local().minus({ seconds: handler.last_message }).toRelative() + : t("Never")} + + + + {t("Handler ID")}: {handler.id} + + + + {attributes && attributes.length > 0 && ( +
+ {attributes?.map((attribute) => { + const minStat = dataStats?.find( + (stat) => stat.type === "min" && stat.attribute === attribute.id, + ); + const maxStat = dataStats?.find( + (stat) => stat.type === "max" && stat.attribute === attribute.id, + ); + return ( + + + + + + {attribute.label ?? attribute.name}{" "} + {minStat?.value === attribute.data.value && ( +
+ +
+ )} + {maxStat?.value === attribute.data.value && ( +
+ +
+ )} + {attribute.data.trend === -1 && ( +
+ +
+ )} + {attribute.data.trend === 1 && ( +
+ +
+ )} +
+ + {minStat && ( + + + + {minStat.value} {attribute.unit} + + + )} + {maxStat && ( + + + + {maxStat.value} {attribute.unit} + + + )} + +
+
+ + + + {attribute.data.value} {attribute.unit} + + + ); + })} +
+ )} +
+ ); +}; diff --git a/src/client/apps/contwatch-client/app/handlers/page.tsx b/src/client/apps/contwatch-client/app/handlers/page.tsx new file mode 100644 index 0000000..3e6c0af --- /dev/null +++ b/src/client/apps/contwatch-client/app/handlers/page.tsx @@ -0,0 +1,23 @@ +"use client"; + +import { Column } from "@repo/ui/FlexPartials"; +import { Text } from "@repo/ui/Text"; +import { useHandlers } from "@repo/utils/swrEndpoints"; +import { HandlerWidget } from "./components/HandlerWidget/HandlerWidget"; +import { useTranslation } from "@repo/utils/useTranslation"; + +export default function Handlers() { + const { t } = useTranslation(); + const { data: handlers } = useHandlers(); + + return ( + <> + + {t("Handlers")} + + + {handlers?.map((handler) => )} + + + ); +} diff --git a/src/client/src/partials/InspectorChart/InspectorChart.scss b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.module.scss similarity index 51% rename from src/client/src/partials/InspectorChart/InspectorChart.scss rename to src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.module.scss index 186beb7..60f10ff 100644 --- a/src/client/src/partials/InspectorChart/InspectorChart.scss +++ b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.module.scss @@ -1,15 +1,20 @@ .inspector-chart { flex-grow: 1; - height: 0; padding: 1rem; border-radius: 2rem; - background: $white; + background: white; &--fullScreen { position: fixed; top: 0; left: 0; - width: calc(100% - 2rem); - height: calc(100% - 2rem); + width: 100%; + height: 100%; + border-radius: unset; + } + + &__chart { + flex-grow: 1; + height: 0; } } diff --git a/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx new file mode 100644 index 0000000..1e50bd8 --- /dev/null +++ b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx @@ -0,0 +1,138 @@ +import "chartjs-adapter-date-fns"; + +import { + CategoryScale, + Chart, + ChartOptions, + Legend, + LinearScale, + LineElement, + PointElement, + TimeScale, + Title, + Tooltip, +} from "chart.js"; +import { FC, useCallback, useEffect, useState } from "react"; +import { Line } from "react-chartjs-2"; + +import { options } from "./chartOptions"; + +import styles from "./InspectorChart.module.scss"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { Flex } from "@repo/ui/Flex"; +import { Button } from "@repo/ui/Button"; +import { useAttributeChart } from "@repo/utils/swrEndpoints"; +import { Column } from "@repo/ui/FlexPartials"; +import { useTranslation } from "@repo/utils/useTranslation"; + +Chart.register(CategoryScale, LinearScale, TimeScale, PointElement, LineElement, Title, Tooltip, Legend); + +const bem = bemClassNames(styles); + +type InspectorChartProps = { + attributes?: number[]; + date?: string; + onSettingsClick?: () => void; +}; + +export const InspectorChart: FC = ({ attributes = [], date, onSettingsClick }) => { + const { t } = useTranslation(); + + // const ref = useRef(null); + const [ref, setRef] = useState(undefined); + const [zoomLevel, setZoomLevel] = useState(1); + + const [fullScreen, setFullScreen] = useState(false); + + // Loading the zoom plugin only on client side, because it doesn't support SSR + useEffect(() => { + if (typeof window !== "undefined") + import("chartjs-plugin-zoom").then((zoomPlugin) => { + Chart.register(zoomPlugin.default); + }); + }, []); + + const resetZoomLevel = useCallback(() => { + setZoomLevel(1); + ref?.resetZoom?.(); + }, [ref]); + + // Reset zoom on attributes change + useEffect(() => { + resetZoomLevel(); + }, [attributes, resetZoomLevel, ref]); + + // TODO: Fetch each attribute data separately, this is bad for caching. + const { data: attributeChartData } = useAttributeChart(attributes.sort(), date); + + // UseEffect to exit fullscreen when browser exits fullscreen + useEffect(() => { + const exitFullscreen = () => { + if (!document.fullscreenElement) { + setFullScreen(false); + } + }; + + document.addEventListener("fullscreenchange", exitFullscreen); + + return () => { + document.removeEventListener("fullscreenchange", exitFullscreen); + }; + }, []); + + const data = { + datasets: + attributeChartData?.map((attributeChart) => ({ + label: attributeChart.label, + data: attributeChart.data.map((data) => ({ + x: data.x * 1000, + y: data.y, + })), + borderColor: "#5278FF", + })) ?? [], + }; + + return ( + + + + { + + +
+ , data }} + ref={(ref) => setRef(ref as unknown as Chart)} + onWheel={() => setZoomLevel((ref?.["getZoomLevel"] && ref?.getZoomLevel()) ?? 1)} + onTouchEnd={() => setZoomLevel((ref?.["getZoomLevel"] && ref?.getZoomLevel()) ?? 1)} + /> +
+
+ ); +}; diff --git a/src/client/src/partials/InspectorChart/adapter.d.ts b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/adapter.d.ts similarity index 100% rename from src/client/src/partials/InspectorChart/adapter.d.ts rename to src/client/apps/contwatch-client/app/inspector/components/InspectorChart/adapter.d.ts diff --git a/src/client/src/partials/InspectorChart/chartOptions.ts b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/chartOptions.ts similarity index 100% rename from src/client/src/partials/InspectorChart/chartOptions.ts rename to src/client/apps/contwatch-client/app/inspector/components/InspectorChart/chartOptions.ts diff --git a/src/client/apps/contwatch-client/app/inspector/page.tsx b/src/client/apps/contwatch-client/app/inspector/page.tsx new file mode 100644 index 0000000..a662393 --- /dev/null +++ b/src/client/apps/contwatch-client/app/inspector/page.tsx @@ -0,0 +1,88 @@ +"use client"; +import { useState } from "react"; + +import { Text } from "@repo/ui/Text"; +import { useAttributes } from "@repo/utils/swrEndpoints"; +import { Button } from "@repo/ui/Button"; +import { Flex } from "@repo/ui/Flex"; +import { InspectorChart } from "./components/InspectorChart/InspectorChart"; +import { useTranslation } from "@repo/utils/useTranslation"; +import { Popup } from "@repo/ui/Popup"; +import { Column } from "@repo/ui/FlexPartials"; +import { Input } from "@repo/ui/Input"; +import { useSearchParams } from "next/navigation"; + +export default function Inspector() { + const { t } = useTranslation(); + const { data: attributes } = useAttributes(); + + const searchParams = useSearchParams(); + const paramAttribute = searchParams.get("attribute"); + const paramAttributeInt = paramAttribute ? parseInt(paramAttribute) : undefined; + + /** TODO: Store selected attributes in redux */ + const [selectedAttributes, setSelectedAttributes] = useState( + paramAttributeInt ? [paramAttributeInt] : [], + ); + const [selectedDate, setSelectedDate] = useState( + new Date().toISOString().split("T")[0], + ); + const [showSettings, setShowSettings] = useState(false); + + const onAttributeClick = (id: number) => { + setSelectedAttributes((prev) => { + if (prev.includes(id)) { + return prev.filter((item) => item !== id); + } + return [...prev, id]; + }); + }; + + return ( + <> + + {t("Inspector")} + + setShowSettings(false)} title={t("Settings")}> + + + {t("Show data for date")} + + setSelectedDate(value)} + /> + + + + + {t("Displayed attributes")} + + + {attributes?.map((attribute) => ( + + ))} + + + + + + setShowSettings(true)} + /> + + ); +} diff --git a/src/client/apps/contwatch-client/app/layout.tsx b/src/client/apps/contwatch-client/app/layout.tsx new file mode 100644 index 0000000..a98317c --- /dev/null +++ b/src/client/apps/contwatch-client/app/layout.tsx @@ -0,0 +1,23 @@ +import type { Metadata } from "next"; +import "./globals.scss"; +import { PropsWithChildren } from "react"; +import { NavbarLayout } from "@repo/ui/NavbarLayout"; +import { openSans } from "@repo/ui/fonts"; +import { Providers } from "./providers"; + +export const metadata: Metadata = { + title: "ContWatch", + description: "Scalable system for IoT automation.", +}; + +export default function RootLayout({ children }: PropsWithChildren) { + return ( + + + + {children} + + + + ); +} diff --git a/src/client/apps/contwatch-client/app/page.tsx b/src/client/apps/contwatch-client/app/page.tsx new file mode 100644 index 0000000..72a0919 --- /dev/null +++ b/src/client/apps/contwatch-client/app/page.tsx @@ -0,0 +1,22 @@ +"use client"; + +import { Text } from "@repo/ui/Text"; +import { useTranslation } from "@repo/utils/useTranslation"; +import { Button } from "@repo/ui/Button"; +import { Flex } from "@repo/ui/Flex"; + +export default function Overview() { + // TODO: Use SSR translation and remove "use client" + const { t } = useTranslation(); + + return ( + <> + + {t("Overview")} + + + + + + ); +} diff --git a/src/client/apps/contwatch-client/app/providers.tsx b/src/client/apps/contwatch-client/app/providers.tsx new file mode 100644 index 0000000..ff98915 --- /dev/null +++ b/src/client/apps/contwatch-client/app/providers.tsx @@ -0,0 +1,20 @@ +"use client"; + +import { StoreProvider } from "@repo/store/StoreProvider"; +// import { ThemeProvider } from "next-themes"; +import { PropsWithChildren } from "react"; + +export function Providers({ children }: PropsWithChildren) { + return ( + // + {children} + // + ); +} diff --git a/src/client/apps/contwatch-client/next.config.mjs b/src/client/apps/contwatch-client/next.config.mjs new file mode 100644 index 0000000..c25c142 --- /dev/null +++ b/src/client/apps/contwatch-client/next.config.mjs @@ -0,0 +1,33 @@ +/** @type {import('next').NextConfig} */ + +const HOST = process.env.NEXT_PUBLIC_API_SERVER_HOST ?? "localhost"; +const PORT = process.env.NEXT_PUBLIC_API_SERVER_PORT ?? "5000"; +const PROTOCOL = process.env.NEXT_PUBLIC_API_SERVER_PROTOCOL ?? "http"; + +const nextConfig = { + // output: "standalone", + experimental: { + turbo: { + useSwcCss: true, + }, + }, + // eslint: { + // ignoreDuringBuilds: true, + // }, + async rewrites() { + return { + afterFiles: [ + { + source: `/media/:path*`, + destination: `${PROTOCOL}://${HOST}:${PORT}/media/:path*/`, + }, + { + source: "/api/:path*", + destination: `${PROTOCOL}://${HOST}:${PORT}/api/:path*/`, + }, + ], + }; + }, +}; + +export default nextConfig; diff --git a/src/client/apps/contwatch-client/package.json b/src/client/apps/contwatch-client/package.json new file mode 100644 index 0000000..d5a734c --- /dev/null +++ b/src/client/apps/contwatch-client/package.json @@ -0,0 +1,25 @@ +{ + "name": "contwatch-client", + "version": "0.0.0", + "type": "module", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint --max-warnings 0", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "@repo/ui": "*", + "@repo/utils": "*", + "@repo/store": "*", + "@repo/types": "*", + "next": "^15.1.0", + "swr": "2.3.0" + }, + "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*" + } +} diff --git a/src/client/apps/contwatch-client/public/icons/arrow-down-square.svg b/src/client/apps/contwatch-client/public/icons/arrow-down-square.svg new file mode 100644 index 0000000..892009c --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/arrow-down-square.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/arrow-maximize.svg b/src/client/apps/contwatch-client/public/icons/arrow-maximize.svg similarity index 100% rename from src/client/public/icons/cosmic/arrow-maximize.svg rename to src/client/apps/contwatch-client/public/icons/arrow-maximize.svg diff --git a/src/client/apps/contwatch-client/public/icons/arrow-minimize.svg b/src/client/apps/contwatch-client/public/icons/arrow-minimize.svg new file mode 100644 index 0000000..244cf0f --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/arrow-minimize.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/contwatch-client/public/icons/arrow-right-down.svg b/src/client/apps/contwatch-client/public/icons/arrow-right-down.svg new file mode 100644 index 0000000..512508b --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/arrow-right-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/contwatch-client/public/icons/arrow-right-up.svg b/src/client/apps/contwatch-client/public/icons/arrow-right-up.svg new file mode 100644 index 0000000..1b3cf20 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/arrow-right-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/contwatch-client/public/icons/arrow-up-square.svg b/src/client/apps/contwatch-client/public/icons/arrow-up-square.svg new file mode 100644 index 0000000..e808086 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/arrow-up-square.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/branch-horizontal.svg b/src/client/apps/contwatch-client/public/icons/branch-horizontal.svg similarity index 100% rename from src/client/public/icons/cosmic/branch-horizontal.svg rename to src/client/apps/contwatch-client/public/icons/branch-horizontal.svg diff --git a/src/client/public/icons/cosmic/chart-square.svg b/src/client/apps/contwatch-client/public/icons/chart-square.svg similarity index 100% rename from src/client/public/icons/cosmic/chart-square.svg rename to src/client/apps/contwatch-client/public/icons/chart-square.svg diff --git a/src/client/apps/contwatch-client/public/icons/circle.svg b/src/client/apps/contwatch-client/public/icons/circle.svg new file mode 100644 index 0000000..38c1cc7 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/cross-small.svg b/src/client/apps/contwatch-client/public/icons/cross-small.svg similarity index 100% rename from src/client/public/icons/cosmic/cross-small.svg rename to src/client/apps/contwatch-client/public/icons/cross-small.svg diff --git a/src/client/public/icons/custom/battery.png b/src/client/apps/contwatch-client/public/icons/custom/battery.png similarity index 100% rename from src/client/public/icons/custom/battery.png rename to src/client/apps/contwatch-client/public/icons/custom/battery.png diff --git a/src/client/public/icons/custom/http.png b/src/client/apps/contwatch-client/public/icons/custom/http.png similarity index 100% rename from src/client/public/icons/custom/http.png rename to src/client/apps/contwatch-client/public/icons/custom/http.png diff --git a/src/client/public/icons/custom/inverter.png b/src/client/apps/contwatch-client/public/icons/custom/inverter.png similarity index 100% rename from src/client/public/icons/custom/inverter.png rename to src/client/apps/contwatch-client/public/icons/custom/inverter.png diff --git a/src/client/public/icons/custom/serial.png b/src/client/apps/contwatch-client/public/icons/custom/serial.png similarity index 100% rename from src/client/public/icons/custom/serial.png rename to src/client/apps/contwatch-client/public/icons/custom/serial.png diff --git a/src/client/public/icons/cosmic/grid-mixed.svg b/src/client/apps/contwatch-client/public/icons/grid-mixed.svg similarity index 100% rename from src/client/public/icons/cosmic/grid-mixed.svg rename to src/client/apps/contwatch-client/public/icons/grid-mixed.svg diff --git a/src/client/public/icons/cosmic/humidity.svg b/src/client/apps/contwatch-client/public/icons/humidity.svg similarity index 100% rename from src/client/public/icons/cosmic/humidity.svg rename to src/client/apps/contwatch-client/public/icons/humidity.svg diff --git a/src/client/apps/contwatch-client/public/icons/menu.svg b/src/client/apps/contwatch-client/public/icons/menu.svg new file mode 100644 index 0000000..9c5de85 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/contwatch-client/public/icons/minus.svg b/src/client/apps/contwatch-client/public/icons/minus.svg new file mode 100644 index 0000000..1fb4868 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/minus.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/contwatch-client/public/icons/plus.svg b/src/client/apps/contwatch-client/public/icons/plus.svg new file mode 100644 index 0000000..a9b85f0 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/processor.svg b/src/client/apps/contwatch-client/public/icons/processor.svg similarity index 100% rename from src/client/public/icons/cosmic/processor.svg rename to src/client/apps/contwatch-client/public/icons/processor.svg diff --git a/src/client/apps/contwatch-client/public/icons/search-trending-up.svg b/src/client/apps/contwatch-client/public/icons/search-trending-up.svg new file mode 100644 index 0000000..be20528 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/search-trending-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/cosmic/temperature.svg b/src/client/apps/contwatch-client/public/icons/temperature.svg similarity index 100% rename from src/client/public/icons/cosmic/temperature.svg rename to src/client/apps/contwatch-client/public/icons/temperature.svg diff --git a/src/client/apps/contwatch-client/public/icons/wrench.svg b/src/client/apps/contwatch-client/public/icons/wrench.svg new file mode 100644 index 0000000..aa49b30 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/wrench.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/contwatch-client/public/icons/zoom-out.svg b/src/client/apps/contwatch-client/public/icons/zoom-out.svg new file mode 100644 index 0000000..ce4efcb --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/zoom-out.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/public/icons/custom/logo.png b/src/client/apps/contwatch-client/public/logo.png similarity index 100% rename from src/client/public/icons/custom/logo.png rename to src/client/apps/contwatch-client/public/logo.png diff --git a/src/client/apps/contwatch-client/tsconfig.json b/src/client/apps/contwatch-client/tsconfig.json new file mode 100644 index 0000000..b3afb74 --- /dev/null +++ b/src/client/apps/contwatch-client/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "@repo/typescript-config/nextjs.json", + "compilerOptions": { + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "next-env.d.ts", + "next.config.mjs", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/src/client/apps/docs/.gitignore b/src/client/apps/docs/.gitignore new file mode 100644 index 0000000..f886745 --- /dev/null +++ b/src/client/apps/docs/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# env files (can opt-in for commiting if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/src/client/apps/docs/README.md b/src/client/apps/docs/README.md new file mode 100644 index 0000000..a98bfa8 --- /dev/null +++ b/src/client/apps/docs/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/src/client/apps/docs/app/favicon.ico b/src/client/apps/docs/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/src/client/apps/docs/app/fonts/GeistMonoVF.woff b/src/client/apps/docs/app/fonts/GeistMonoVF.woff new file mode 100644 index 0000000000000000000000000000000000000000..f2ae185cbfd16946a534d819e9eb03924abbcc49 GIT binary patch literal 67864 zcmZsCV{|6X^LDby#!fc2?QCp28{4*X$D569+qP}vj&0lKKhN*HAKy9W>N!=Xdb(?> zQB^(TCNCxi0tx~G0t$@@g8bk8lJvX$|6bxEqGBK*H_sp-KYBnwz$0Q}BT2;-%I=)X2ub{=04r2*}TK5D+LXt~5{t z)Bof^+#0@Rw7=mKi|m$bX6?Bh~_rVfN!~Z5D+lYZ~eMdYd=)1 z?To(VG`{%|MBi{mhZ2~!F#vq`Pec9x)g^>91o^TxurUDvvGDqSS9st3-kw(m@3Xga z`qtIzyIr_nARq+I@sH7;0MG(2NPTSa#jh!1f4cEF5Xll)bpZ(>cyI|Q1wleT1wA5Y zq9^hv^x;~(?2G$>(CTL2)#Ou-rP=XDW$spn8<%0TH%F=^X^(F62Vd@bY`Wi$j$33w zf!U^8o_B|x>{pW$eFZG}b7#|uFueKt$`e9j!wHNBGQX67&nfgl(Ae`3qE-E+yBSfA zEnJSA6p%}|+P9ZIYR{w}nfaKIlV@b3YYzcH!?WNXRvg|J( z((lq^WAE%Q7;oE?zDk~Nvg1Dr_0)KH8m&HF%^&8bI!=#YAGqIx$Yf2lH9S*;=c=b6 zUHi?R*$?Q;>HU4-#?hGJ&dj2jq>d3;_NN_TeipMG!(E+ou)RL-kMQv(W$b9+k# z*%bh8;4)9Je-Giu+XwdbyoaSGei^KG*(1D)5+h{Kfg<`v)nU>dj}RiD_+VvZgb7>9 z-Qb^cdc0k1VSIW!onbm2*_uY*_+r1qe${8^DzXxMnX@F#u>I3_n0j_0ih#p?wd+gPI5niQVbIIsk zkxy%JZZqLeb?p_DXdh1*9Z(O`Nm%TZ(zL`RA!dd+$VNO>qwecEt;dy5w%UK1@1exK zD~__{?4}pb@sGL5CjI=xAR7Jym_*l%fS~I(m>6873y~E7k;IfdA_0)|1$o9?h92Js zt4eu6$WMaSodkz#g|LB%Iw?^B?6x^A=arKjpBhhH6ZCbk2{;io5x)B3eh9R{KEOQX z9|&Q1T3-YGeF+9$doOBzU`TntM~LF~ON3aEZ|p9Y7+wF9qBi`6(hl}&)@-uZ`4zJl z>R`Cps(&x90dBZ~SLeCp?oa*PgM%P!bZaG*OS96bkBT*gF)q0a zxEd&4ZXnQHBuCrYm@m@ffPQTObP*2j+P z_?=gLxmGc32nceW5l5oy=+SB$=N%F^{g}lKR9(TljKIPHw)zVyZ?3ODUL^k;0CuW% z!;ErXcl6|m8OB+{5iYNEq}!Y@o<%r_^{5a($V)INcxkIcMA}Gd8LUShZK5U!u)=PR z6ZALS*{0F1Oxl?y$xE;JA+eyc6mW}LqFTZ3ZvVl#h*UFfj`$%JE0l8D!JRBYUlH!L zJ!uZs@&)nqNg9x8t`fZ?k4Ihgdv(Ogzr)|%{JQ|-g@#=7rCIq(Oo={zr!i7F_F!6; zqpKdMO={?6)e1SETQW+U?L?WPzQx9x#RrVu%xa5u$bDgLQrF-K4Iwd}9a=yS3(f1J z=&B1p=UwPU_#kfxrJ(YnDYZkc%{pp&sn{<~MdR_9^8y%u``RUJaJtY*yi=~R9ryu@ z9kzsKGwMLhZ1egl=e5m~k^Ft9pSfxI5B!$g1WaeqpO`4?C-3aj(gSm%1+@BdqpyAV z@X|;G-&|(jA;zG>T=$%}2gC%)gu@pTPQ)SpSw*2DuSrX((%PM=kQ&E@b=Ygy)l&#k zn6Q419734+(;{THjU2Uy9No0H4_jV1#6O)c>u@tbG6oWD;-8yHLnM^;;b@dWvle!?{40o`dO)$$EZ zM^@JN7b3@-+?UUO*P#gtLsy$!7gZcziDwAj59PsCAJm>m6r+l^X1z|%wu-jJhnQ&_ znPJwq9_*qBLoo*W`sPdYk10kPgf$aH@4qU~%&pFl2rZ0AHR*E-AvBR{F9QCehDa@z z95xXU{QZg|=zb2Pq36>@3je4inO+>S(`ht?)Z#zrHM(i>qE+>iU#!8v4QnWDruR08 zihT~ec3TRJh#llhgk(NqF04=VE8}61FWwvTi_}KWRnkIGbxQ)CAyBfBoVsTvRsR!v zeeHuptQ&5sDmg3vV_f9UtqYjdrR(_D^waATK``ZJjfZD5Kduvl1+l2-u6Qf=6Ombx z7Sq ztJ92oU^LD6n$?=8G?#FGx#fF$d!2WBTf$UGVa}#`S@X&5dFIq%K!1Ikjs!+ybc~8&;<*f2$gyb>j{=&y@=kHsC%Xl#WTojY!)xQxm z+xUe-8Of9gTp&DDOh{Yy9#6leUk5m&-h{G7M@bsLtAJZq1|X(5;ulY z-D2nY-`lAFFZza${swOYsV>&wyw;MiiXw9Ze4so}{Flt`IeJQ5b1l1!d)yG4v?WEO zO3yg9oy--%g}hya8*T);IAWhS&T>>KL9Je(WS#9P#!$_f6!1`7cfKj*+i>@*tP8Mjj|un5Z`YGD>MiCU!adPX zx#5sU8_)@)5fHgRLdp7k;l9Mr_8H3SOvpCBbBRGBQ`Wih*Xpj<)C6}E4SH?GeM1wt)HAM~N<~ejyt^Wpq0tmp z6X&e+wbKjOt@{1ng^s>(semrGFCQLXu|@O1tvtmYwuZ`$BSe{a-011Sk2a~(>MVE0 zpIQ7LpuG+o?lOHuw%e_kJ6yAoXCpu*QQeY%8SNh6?$89*3`>%=;EOJb+gtz&Kp|yv zfPV+nw`uTKbxE3vpT)v3C@L}V3(f*@_3N$Flc(8e<6F?hmPF|Dt%$W})5dMX(nql2 zOMy&yEWPokJ^l?odvVv&l(un4B`x0UHu6T8LraPoL*NltIUElZ5m!YVjcyZe{0Gtx zK{scl85IYuMO$EBG$tHHu0zc0wi&8rW3`d{VJC$oYNJ?m2MBStoGQ!4xQLHS_tBeI z4=tL^Lv>Bj^g79fzfCc?aTHu%Uvn6&+a@&*N~Rba)gbaLl?WBo%1^Pjx=t&|S^9nh zu(^m2A5XEp+ZN2L2#w^7IpLW%BW#F@6{50p0liwKYe!&NWu2F@oIV-5r<}*;+3|bP ze>zfTOAXqW760vNex|NG!Xz~@Wcd5UhOk&n5clNgylEGuS)lF7K$c{a+Hl#rx-2Ic zD(HhN(=Sa(v|zonLt6q9;>ZBVh6n__yB8Pn7WCY*KX8V+u(@n9e zOTe7&?}Fvh8wHRCgku@eEVodSv4NBH%wJEO4wEp#-}%%$wR$2D5JR|@$vRkRb7}iIhxv; zshP$6ckt<2KCd5K9#gwy%I*Ey>Fe20M_29Y=)g1AcBH#@^pXEtP30j`IbaZgR2{t^ z`r?E$A9Zdf@wct0$aRwJ=i9-^yxU77e+%zOG9j-MXBP)nekEiIFHfS>Ba|3w;D?|dL35fhFX>Fi zQcepJaiZvXu&=IsDUMoZIo?5N1`h|7?WDfbJmXcY~w_lg&|t|BlK!`YFCDcu*n(Sa{%c z4$vg-+drB`)#x8&q6x0pG5p+BKvfIu#O32<*&LF;z8q?zL`41|Yicx^Yq4jz6>WcO z4=~f8fF;F-A=fL28*f$mLyZ)0X>6z$biG4VuDpiV4z zY~_evrt9XZfAzEyT`LtOtA^qKGM{Tq8NMHGIOL>T;4vaiE@lH-C<@aOeh_^m?<&&h zdXSPA^^n-i>Uj{Z%Lb+6v5B_zD^V_GWE1OBNlHndI9YW5kD^Kk@cZ&Ia z6oRdBan^1xma-m6+`d|wRJR`V~A;L2zw&Yu_yoTtgzTrhi-xxFYK659imn;^%TR%3!4mYTU`we=`K-=!r$)M^U|fng0gd4 zY&D|@id)hQ6lZ6$q#}%snpqqb>@aUApp7;*W>0UoVkg(l}MYC6COXI29 zGc~J-gZ4vC{yy!bjlkXM?rF2de*R#dL=(PI9-L-quUxck&u`DmTQjI#p*2mPjNqc? z$X9XK{UtI;@pJUK?cwIxV;%;lTG0!%y5 zJpWhb11vK@d2I=!;)F5vM`ML)^6b)LCj<7zlFm7!F$_T_`hyDZ>MEBe@A%a+9RG#y z_*KevIxJ(rEBNzd_KBWC<+$;IWH5}W4eTN}TM#4*`n;PelIth54aC}8|KHL1Kd9hY zdg6C1@KJ_+m6OHmY-}EB_QYaDnd8)^Y#fTGC1QB3E&Rq&s{PIUL5DzjJG<4E+;x=! zz3?hDSALlK#YF2II?cmMlq^D)riLWp(`LjFJNTY&BkIxb04C*yZ)Vjb*8{OJ&U(p# z3cxi}BFmgL+V%Ew9*g|D_V>-jj>E&_kXF}@LX&k)UuVIb+!>`~SGXZrZd9yBFoeR5 zNrxA*){}5*BIRJ3GSAb5CW!RX5}9`W*v3|J4v;znteT1Jn6BmRxF0|>v+o2A%ix3E z_}aH+5hk}2B`>5kW}hg%W`rkIVN-e8*j3!A(mQ&IFKdo(2cn%(!rGGG-la2y4dz)d z;cU;$Z5l<(tUS+pPC9~e+Sl_5OnGT=${=;{P%TayUQ^o1bm#Qel@0Ea2wDFsgpR8p z%{42-o*aWIGVFESm@;QGB)am8yb0`j>EazkuEVoKMd!r}nWzO!rg#7+BuCQ?4|TZ^ z`|;e56wJl>(SLl!DEUo1dvlUaqZZ{;%CQg!oaJ?FFxAmVK6uv$_;SHB!^)t!xv-f_$Bs$C)MjJg|HA#qe9b`BSwl8 z2McXH6Uvn|ClJyKV8|OT-V{LIG1v~h>gQprzhfK(DrmFQ4M!VgO!ZS8o6D1p%RSmV z+Xf5C09vC7w0t%eXb8L=U(~wlP)tZ3TaN#j4{NWJFL7# zMeiEPfaIS?IHAdP9aH+sm5udxfk^i!o76N(KewVyMk&0@OpX6rwAKG}3?0IvE?(cPM;r3Az!_xLiYFY&)}Sl<19#fU0x zj-uZ}`Ey9BnVxqbj#D{R24|$jM(dNl2KH#FvbDSz*@x<{sy48Gz=(yRiYW`ofYMu+ zzdPsn^PhpxWX2v}!sahrD*o$$3k;XDHq|HQU^rDKHq%xw$IafF=^BmtY8T@#Z%YDW zAdx@ahu2vaLq%D&-me?D(}&)mEb|5m{{oc6#p!vRnXxnizHWv)adXiBb>q0*jdBJ~Zv<2B}4vZ{P z>E)ayXwPyT&!MqX{ao=#mpGCX5|61&)PEQKmppcZigqM*Xe+;DOlb?AQ8hZ8S0~w3)(nNAK)Iuc7rg zfIT}yB^fVpt`B3Pkl;fBY6u~2&%W5O{d;oadPW=tcE^D^C>VI_JPYukh@TfhQoWZeCJ5B$7I19W@q_TM0($TkNK3wl)QIl3|@|1RCuW$X^KSG)YgdJf$ zD&q2EfNK5$`W1XPc!pW_jn16RK(}y~T4kUY!;u`93tAJiu%lz7ol{&ur{Q zrA4yCFcU|gV0|>p_`D&ByZc`)DL+`Qqx8bmSv%J+qdQd*Y<;Klb{>?OW@XKPzqewj ztIkvI-K;Hlf@9cCVRdISFG4&ME?xbBnin*J=9sxZ+*CAN{PGnwwyeqzbU^u}JEz&U zujyQvjy%LMauULwp0$59k|Lxd4Icntq<^uQ3!iJ0*EJT#GqBhF5^zk{hkBT< zKNwtg4Y`s4lJ-1VzUy%1!)~>kypou8iu}HY$;B}2qhX>w`(0ya>5ndBmNHvwz@<@d z)_T3Arr!pCuZ?)(&jZ=LnXHsU&B)ifpJd12LpQF3x4*zCIMUlbov*YMkDIX`ZQ}#B zDEm7;2>6H|!x9eQMZTTQ#83yK07tV{aiGreb{XKo=?{!()DRH+$I-(B{q;fyyO2n) z-rGbBGoMjZLapRim!$3W&f}tbELYcO^N@9^$@oA{Fw|v>Jo^sP%|m`>OsVrmyd1`r z*_-ScUuU|lzR~%OHT$uyWNQuw)pj`yF@eLl^+;zNjqf~|6huSAAIGYnALff2fZP5> zz7ARH{>mIa^RkT@w4ZV!CXF(cDn9w9CcPN-d;=6xcKKM>?vd2tUshA!XM9hA9JplyPAlKHA3W}2f4;=EdS9$VRk zJd#7BDuS+qpm{NTo#0B*Oj{$Z2l2)5j>joob07T0UCp(y#jl_ioRJq7;CrcFZ;7+D ziT+n)gme?&`MZ8Q3URYd1 zUXO6*c;TeIhsi*l(c2?lau-s#yIh8Vm$bBPLkB24pwd6-v8=f_57U7s_X=;?ZMPX$=V+KD?D%h69Plxj z6s25MR;B`_3y$P%?|Wl%v9)a+)Xt1ovYG0-8ZEx;{wk%oGLr8D(F1mGIiIYKO7qIT zkyAXybQE{@&#($=@kZpE5&n7R;k?&LuC|WbUG$$?mLATHDk-iOwVbXY!1z4~OSn zL9Iql5xuH}kpF|{#T-2i$=3HA7g2YTKZSXE!U$;^53~)*>eS`jehs0aZ z?~}w>o$4HP*axMt=ZuDj#B+$8z;s<~`^+`;?9euOJhNPximpeOXZLVk`?)op?#1LI zsEJ(3NA-`GoL{a>z!{Z>a*D$!ZnSUCRhF+h1{YrQx-{HFin8WzZefO{l z8cNaM;e7wxPv4B1qdM6*FoUE$-f@ij7)Qn+%qi1X#m$C)|q*>heV z_F1E1;>jFo_X_SxU4z7K=dzD=a^~oL!C9SEV-!KD$#mnz60qM-#pJFWBjB{A91?@LxNGc9%0{4?@cU#Y7z;WB&(t+Ux8ij z{ywC~@RW4y=k@~>Rr8pTmb$u=7qLo2Vpes~6>g_ENtTY7^pVeIg!wVc`DUmbY|`3M z-R+tCPAunS>R|zng`6f_20?)pLm}bSq%ja@pW1*wXr=T!IW0oYP6_8+GG^?eKvEc| z0FC0qr5|LsL5JWpacSeAuHLx1qO#F6G*`!D4x6a;L#0WM=HD&Vnsp=Ye)1&&^=NgK z$R=p#49`^kf{*a{V%70)-|osKU4qK8u*Ee`n^}AVgiVqOGq`)`$~)h-UbZ_TpWn5) z4AU%KuIEO^Hr5rLcT?KcOFj<^6-E5p*F`RXe_*jNQ-<*{pcs{>ypy$kvv5&h_=hdL<+0wfo7i8Zr zN2QPM2zwaYFfOrCFU7(G*GymiiuOMUH#o1w-P5{_<`RmBx9=5gvCW1?z*U9M+@ATPF1Psy-Tq}n0&H9|(XuzmZW30{I#a|z_}fb*J@}$Os9qoBgJ+y# zL#8>}`N|}X{(N$J8f*=>O{m7)%z$pbzMS2$yb0xce}L`230Nn-UPkBNZy?Asat0>M==4pw7^P*~|GtzfgB9oEz zSk=B0wEed=|Ip)4I}(ZDBYlprm6N!l&1a{)JCR@4>nZ9els~Gu+`<5ezJ3A;{B3`Ck6-7#p ziFkA{?4$2BcHuw~sGfB+sGG>sgP(eW)M^H@39}u3uf^6HSPdw&q^1jxpusc>E1p9-Su?Z)!3+F+@GwHP~|a`e`o(nklU0c z$M)W3BB{3Wn$(JgntlTNAP(iL>=b;wqp`!xMfLpa7@%+oG3L2vFv0Yd{WYP^a(Nq8 z;2jw%*$3xNJbL7%aTo}j30ZXHpm9k0sVi_dl8xNyUxDA006-~CjL%1|Og^BvD;u`5 z8eUsPX>1Jry+fY`?0PYEo<6g2_UycjSnM=1^3)pT)`AiKgWBpcxjSg3%AirFd5eP* zjvhK=PEj=}3VEoUv38N5?p1FxcdB>$Mz7(sJzqFUM>lEr#N`oGvZQdU_A z`K|dEXc~4j2p{1d#j?jW&BI$yC00u2CH5F#XOFeDJdb_wrIAZDw(D<$uoFNSLNQjK zmiC)`+pCCs75<1NJK7S?oxlh4Tt%Ivo^LVH@gw3D
4)|DOKg<>hv+aNnO=o?qd) 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ϣ%UY8`RWp~V-U_7 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 CLkb=M literal 0 HcmV?d00001 diff --git a/src/client/apps/docs/app/fonts/GeistVF.woff b/src/client/apps/docs/app/fonts/GeistVF.woff new file mode 100644 index 0000000000000000000000000000000000000000..1b62daacff96dad6584e71cd962051b82957c313 GIT binary patch literal 66268 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 >-Aun5A4Gp>4U0IQJ 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 G)cz05(PHWV literal 0 HcmV?d00001 diff --git a/src/client/apps/docs/app/globals.css b/src/client/apps/docs/app/globals.css new file mode 100644 index 0000000..6af7ecb --- /dev/null +++ b/src/client/apps/docs/app/globals.css @@ -0,0 +1,50 @@ +:root { + --background: #ffffff; + --foreground: #171717; +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + color: var(--foreground); + background: var(--background); +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +a { + color: inherit; + text-decoration: none; +} + +.imgDark { + display: none; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } + + .imgLight { + display: none; + } + .imgDark { + display: unset; + } +} diff --git a/src/client/apps/docs/app/layout.tsx b/src/client/apps/docs/app/layout.tsx new file mode 100644 index 0000000..8469537 --- /dev/null +++ b/src/client/apps/docs/app/layout.tsx @@ -0,0 +1,31 @@ +import type { Metadata } from "next"; +import localFont from "next/font/local"; +import "./globals.css"; + +const geistSans = localFont({ + src: "./fonts/GeistVF.woff", + variable: "--font-geist-sans", +}); +const geistMono = localFont({ + src: "./fonts/GeistMonoVF.woff", + variable: "--font-geist-mono", +}); + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/src/client/apps/docs/app/page.module.css b/src/client/apps/docs/app/page.module.css new file mode 100644 index 0000000..3630662 --- /dev/null +++ b/src/client/apps/docs/app/page.module.css @@ -0,0 +1,188 @@ +.page { + --gray-rgb: 0, 0, 0; + --gray-alpha-200: rgba(var(--gray-rgb), 0.08); + --gray-alpha-100: rgba(var(--gray-rgb), 0.05); + + --button-primary-hover: #383838; + --button-secondary-hover: #f2f2f2; + + display: grid; + grid-template-rows: 20px 1fr 20px; + align-items: center; + justify-items: center; + min-height: 100svh; + padding: 80px; + gap: 64px; + font-synthesis: none; +} + +@media (prefers-color-scheme: dark) { + .page { + --gray-rgb: 255, 255, 255; + --gray-alpha-200: rgba(var(--gray-rgb), 0.145); + --gray-alpha-100: rgba(var(--gray-rgb), 0.06); + + --button-primary-hover: #ccc; + --button-secondary-hover: #1a1a1a; + } +} + +.main { + display: flex; + flex-direction: column; + gap: 32px; + grid-row-start: 2; +} + +.main ol { + font-family: var(--font-geist-mono); + padding-left: 0; + margin: 0; + font-size: 14px; + line-height: 24px; + letter-spacing: -0.01em; + list-style-position: inside; +} + +.main li:not(:last-of-type) { + margin-bottom: 8px; +} + +.main code { + font-family: inherit; + background: var(--gray-alpha-100); + padding: 2px 4px; + border-radius: 4px; + font-weight: 600; +} + +.ctas { + display: flex; + gap: 16px; +} + +.ctas a { + appearance: none; + border-radius: 128px; + height: 48px; + padding: 0 20px; + border: none; + font-family: var(--font-geist-sans); + border: 1px solid transparent; + transition: background 0.2s, color 0.2s, border-color 0.2s; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + line-height: 20px; + font-weight: 500; +} + +a.primary { + background: var(--foreground); + color: var(--background); + gap: 8px; +} + +a.secondary { + border-color: var(--gray-alpha-200); + min-width: 180px; +} + +button.secondary { + appearance: none; + border-radius: 128px; + height: 48px; + padding: 0 20px; + border: none; + font-family: var(--font-geist-sans); + border: 1px solid transparent; + transition: background 0.2s, color 0.2s, border-color 0.2s; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + line-height: 20px; + font-weight: 500; + background: transparent; + border-color: var(--gray-alpha-200); + min-width: 180px; +} + +.footer { + font-family: var(--font-geist-sans); + grid-row-start: 3; + display: flex; + gap: 24px; +} + +.footer a { + display: flex; + align-items: center; + gap: 8px; +} + +.footer img { + flex-shrink: 0; +} + +/* Enable hover only on non-touch devices */ +@media (hover: hover) and (pointer: fine) { + a.primary:hover { + background: var(--button-primary-hover); + border-color: transparent; + } + + a.secondary:hover { + background: var(--button-secondary-hover); + border-color: transparent; + } + + .footer a:hover { + text-decoration: underline; + text-underline-offset: 4px; + } +} + +@media (max-width: 600px) { + .page { + padding: 32px; + padding-bottom: 80px; + } + + .main { + align-items: center; + } + + .main ol { + text-align: center; + } + + .ctas { + flex-direction: column; + } + + .ctas a { + font-size: 14px; + height: 40px; + padding: 0 16px; + } + + a.secondary { + min-width: auto; + } + + .footer { + flex-wrap: wrap; + align-items: center; + justify-content: center; + } +} + +@media (prefers-color-scheme: dark) { + .logo { + filter: invert(); + } +} diff --git a/src/client/apps/docs/app/page.tsx b/src/client/apps/docs/app/page.tsx new file mode 100644 index 0000000..5d47126 --- /dev/null +++ b/src/client/apps/docs/app/page.tsx @@ -0,0 +1,98 @@ +import Image, { type ImageProps } from "next/image"; +import styles from "./page.module.css"; + +type Props = Omit & { + srcLight: string; + srcDark: string; +}; + +const ThemeImage = (props: Props) => { + const { srcLight, srcDark, ...rest } = props; + + return ( + <> + + + + ); +}; + +export default function Home() { + return ( + + ); +} diff --git a/src/client/apps/docs/package.json b/src/client/apps/docs/package.json new file mode 100644 index 0000000..0c3bfb1 --- /dev/null +++ b/src/client/apps/docs/package.json @@ -0,0 +1,27 @@ +{ + "name": "docs", + "version": "0.1.0", + "type": "module", + "private": true, + "scripts": { + "dev": "next dev --turbopack --port 3001", + "build": "next build", + "start": "next start", + "lint": "next lint --max-warnings 0", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "@repo/ui": "*", + "next": "^15.1.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*", + "@types/node": "^20", + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2", + "typescript": "5.5.4" + } +} diff --git a/src/client/apps/docs/public/file-text.svg b/src/client/apps/docs/public/file-text.svg new file mode 100644 index 0000000..9cfb3c9 --- /dev/null +++ b/src/client/apps/docs/public/file-text.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/docs/public/globe.svg b/src/client/apps/docs/public/globe.svg new file mode 100644 index 0000000..4230a3d --- /dev/null +++ b/src/client/apps/docs/public/globe.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/client/apps/docs/public/next.svg b/src/client/apps/docs/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/src/client/apps/docs/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/client/apps/docs/public/turborepo-dark.svg b/src/client/apps/docs/public/turborepo-dark.svg new file mode 100644 index 0000000..dae38fe --- /dev/null +++ b/src/client/apps/docs/public/turborepo-dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/client/apps/docs/public/turborepo-light.svg b/src/client/apps/docs/public/turborepo-light.svg new file mode 100644 index 0000000..ddea915 --- /dev/null +++ b/src/client/apps/docs/public/turborepo-light.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/client/apps/docs/public/vercel.svg b/src/client/apps/docs/public/vercel.svg new file mode 100644 index 0000000..0164ddc --- /dev/null +++ b/src/client/apps/docs/public/vercel.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/client/apps/docs/public/window.svg b/src/client/apps/docs/public/window.svg new file mode 100644 index 0000000..bbc7800 --- /dev/null +++ b/src/client/apps/docs/public/window.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/docs/tsconfig.json b/src/client/apps/docs/tsconfig.json new file mode 100644 index 0000000..7aef056 --- /dev/null +++ b/src/client/apps/docs/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "@repo/typescript-config/nextjs.json", + "compilerOptions": { + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "next-env.d.ts", + "next.config.js", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/src/client/jest.config.ts b/src/client/jest.config.ts deleted file mode 100644 index 567da00..0000000 --- a/src/client/jest.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import nextJest from "next/jest"; - -export const customJestConfig = { - moduleDirectories: ["node_modules", "/"], - moduleNameMapper: { - "@/(.*)$": "/src/$1", - }, - testEnvironment: "jest-environment-jsdom", -}; - -const createJestConfig = nextJest({ - dir: "./", -}); - -module.exports = createJestConfig(customJestConfig); diff --git a/src/client/next-env.d.ts b/src/client/next-env.d.ts deleted file mode 100644 index 4f11a03..0000000 --- a/src/client/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/client/next.config.ts b/src/client/next.config.ts deleted file mode 100644 index fc2a31c..0000000 --- a/src/client/next.config.ts +++ /dev/null @@ -1,38 +0,0 @@ -const HOST = process.env.NEXT_PUBLIC_API_SERVER_HOST ?? "localhost"; -const PORT = process.env.NEXT_PUBLIC_API_SERVER_PORT ?? "8000"; -const PROTOCOL = process.env.NEXT_PUBLIC_API_SERVER_PROTOCOL ?? "http"; - -const API_SERVER_ROUTES = ["media", "api"]; - -// noinspection JSUnusedGlobalSymbols -export const nextConfig = { - reactStrictMode: true, - swcMinify: true, - images: { - remotePatterns: [ - { - protocol: PROTOCOL, - hostname: HOST, - port: PORT, - pathname: "/media/**", - }, - ], - }, - serverRuntimeConfig: { - appVersion: process.env.npm_package_version || "", - }, - async rewrites() { - return [ - ...API_SERVER_ROUTES.map((route) => ({ - source: `/${route}/:path*`, - destination: `${PROTOCOL}://${HOST}:${PORT}/${route}/:path*`, - })), - { - source: "/public/:path*", - destination: "/:path*", - }, - ]; - }, -}; - -module.exports = nextConfig; diff --git a/src/client/package-lock.json b/src/client/package-lock.json index 8f25ea0..661d4c8 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -1,180 +1,151 @@ { - "name": "contwatch-client", - "version": "2.0.0-beta", + "name": "contwatch-turborepo", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "contwatch-client", - "version": "2.0.0-beta", + "name": "contwatch-turborepo", + "workspaces": [ + "apps/*", + "packages/*" + ], "dependencies": { - "@reduxjs/toolkit": "1.9.7", - "chart.js": "4.4.0", + "@xyflow/react": "^12.3.6", + "chart.js": "^4.4.7", "chartjs-adapter-date-fns": "3.0.0", - "chartjs-plugin-zoom": "^2.0.1", - "date-fns": "2.30.0", - "flume": "^1.0.4", - "next": "14.0.3", - "next-redux-wrapper": "8.1.0", - "react": "18.2.0", - "react-chartjs-2": "5.2.0", - "react-dom": "18.2.0", - "sass": "1.69.5", - "swr": "2.2.4", - "typescript": "5.2.2" + "chartjs-plugin-zoom": "^2.2.0", + "luxon": "^3.5.0", + "react-chartjs-2": "^5.3.0", + "sass": "^1.83.0", + "turbo": "^2.3.3", + "typescript": "5.7.2" }, "devDependencies": { - "@types/jest": "^29.5.8", - "@types/node": "20.9.1", - "@types/react": "18.2.37", - "@types/react-dom": "18.2.15", - "@typescript-eslint/eslint-plugin": "6.11.0", - "@typescript-eslint/parser": "6.11.0", - "eslint": "8.54.0", - "eslint-config-next": "14.0.3", - "eslint-plugin-import": "2.29.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-simple-import-sort": "10.0.0", - "eslint-plugin-unused-imports": "3.0.0", - "husky": "8.0.3", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "lint-staged": "15.1.0", - "prettier": "3.1.0", - "stylelint": "15.11.0", + "@types/luxon": "^3.4.2", + "prettier": "^3.2.5", + "stylelint": "16.10.0", "stylelint-config-prettier-scss": "1.0.0", - "stylelint-config-property-sort-order-smacss": "9.1.0", - "stylelint-config-standard-scss": "11.1.0", - "stylelint-order": "6.0.3", - "ts-node": "^10.9.1" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "dev": true, - "license": "MIT", + "stylelint-config-property-sort-order-smacss": "10.0.0", + "stylelint-config-standard-scss": "13.1.0", + "stylelint-order": "6.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, + "apps/contwatch-client": { + "version": "0.0.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@repo/store": "*", + "@repo/types": "*", + "@repo/ui": "*", + "@repo/utils": "*", + "next": "^15.1.0", + "swr": "2.3.0" }, - "engines": { - "node": ">=6.0.0" + "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*" } }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", + "apps/docs": { + "version": "0.1.0", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@repo/ui": "*", + "next": "^15.1.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" }, - "engines": { - "node": ">=6.9.0" + "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*", + "@types/node": "^20", + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2", + "typescript": "5.5.4" } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", + "apps/docs/node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4" + "node": ">=14.17" } }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^1.9.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/@ampproject/remapping/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==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "engines": { - "node": ">=4" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@babel/code-frame/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==", + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", - "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", - "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.3", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -189,51 +160,67 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "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==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -246,6 +233,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -255,73 +243,126 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "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==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "dev": true, + "license": "MIT", + "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-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -330,50 +371,93 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "license": "MIT", "engines": { @@ -381,118 +465,155 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.22.20", + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", + "node_modules/@babel/parser": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/types": "^7.26.3" + }, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "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==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "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.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": ">=0.8.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "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==", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "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==", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { @@ -500,6 +621,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -512,6 +634,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -524,6 +647,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -531,11 +655,60 @@ "@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==", + "dev": true, + "license": "MIT", + "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-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -548,6 +721,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -556,12 +730,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -575,6 +750,7 @@ "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -587,6 +763,7 @@ "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -599,6 +776,7 @@ "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -611,6 +789,7 @@ "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -623,6 +802,7 @@ "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -635,6 +815,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -642,11 +823,28 @@ "@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==", + "dev": true, + "license": "MIT", + "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -658,12 +856,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -672,271 +871,1855 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.23.2", + "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==", + "dev": true, "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.14.0" + "@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/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", - "globals": "^11.1.0" + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-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==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-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==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.2", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.1" + "@babel/core": "^7.12.0" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.2.1", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.5", + "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==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" + "node": ">=4" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=6.9.0" }, "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.3", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "dev": true, "license": "MIT", "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" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/js": { - "version": "8.54.0", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": ">=12.22" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", + "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", + "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", + "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-4.0.0.tgz", + "integrity": "sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.1.0" + } + }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.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": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } }, "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==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -953,37 +2736,17 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "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==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -992,69 +2755,115 @@ "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==", + "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==", + "dev": true, + "license": "BSD-3-Clause" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "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==", "dev": true, + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/@jest/console/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==", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "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==", + "node_modules/@jest/console/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/console/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "node_modules/@jest/console/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==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/@jest/core": { @@ -1062,6 +2871,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -1104,31 +2914,80 @@ } } }, - "node_modules/@jest/core/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==", + "node_modules/@jest/core/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==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/core/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==", + "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==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@jest/environment": { @@ -1136,6 +2995,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -1151,6 +3011,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -1164,6 +3025,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -1176,6 +3038,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -1193,6 +3056,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -1208,6 +3072,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -1235,15 +3100,119 @@ "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.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/@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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jest/reporters/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/@jest/reporters/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@jest/schemas": { @@ -1251,6 +3220,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -1263,6 +3233,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -1272,11 +3243,23 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/source-map/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@jest/test-result": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -1292,6 +3275,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -1307,6 +3291,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -1328,23 +3313,91 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/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==", - "dev": true + "node_modules/@jest/transform/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "node_modules/@jest/transform/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==", "dev": true, + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/@jest/transform/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/transform/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@jest/types": { @@ -1352,6 +3405,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1364,77 +3418,193 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/types/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/@jest/types/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, + "node_modules/@jridgewell/gen-mapping/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@kurkle/color": { - "version": "0.3.2", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", "license": "MIT" }, "node_modules/@next/env": { - "version": "14.0.3", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.3.tgz", + "integrity": "sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.0.3", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.3.tgz", + "integrity": "sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "license": "MIT", "dependencies": { - "glob": "7.1.7" + "@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/@next/swc-darwin-arm64": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", - "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.3.tgz", + "integrity": "sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1444,12 +3614,13 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", - "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.3.tgz", + "integrity": "sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1459,12 +3630,13 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", - "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.3.tgz", + "integrity": "sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -1474,12 +3646,13 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", - "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.3.tgz", + "integrity": "sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -1489,7 +3662,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.3", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.3.tgz", + "integrity": "sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==", "cpu": [ "x64" ], @@ -1503,7 +3678,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.3", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.3.tgz", + "integrity": "sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==", "cpu": [ "x64" ], @@ -1517,27 +3694,13 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", - "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.3.tgz", + "integrity": "sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==", "cpu": [ "arm64" ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", - "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", - "cpu": [ - "ia32" - ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -1547,12 +3710,13 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", - "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.3.tgz", + "integrity": "sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -1563,6 +3727,8 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -1575,6 +3741,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==", "dev": true, "license": "MIT", "engines": { @@ -1583,6 +3751,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==", "dev": true, "license": "MIT", "dependencies": { @@ -1593,258 +3763,363 @@ "node": ">= 8" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "dev": true, + "node_modules/@parcel/watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", + "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", + "detect-libc": "^1.0.3", "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@reach/auto-id": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.10.5.tgz", - "integrity": "sha512-we4/bwjFxJ3F+2eaddQ1HltbKvJ7AB8clkN719El7Zugpn/vOjfPMOVUiBqTmPGLUvkYrq4tpuFwLvk2HyOVHg==", - "dependencies": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/auto-id/node_modules/@reach/utils": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.10.5.tgz", - "integrity": "sha512-5E/xxQnUbmpI/LrufBAOXjunl96DnqX6B4zC2MO2KH/dRzLug5gM5VuOwV26egsp0jvsSPxojwciOhS43px3qw==", - "dependencies": { - "@types/warning": "^3.0.0", - "tslib": "^2.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reduxjs/toolkit": { - "version": "1.9.7", - "license": "MIT", - "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz", - "integrity": "sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==", + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", "cpu": [ - "arm" + "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz", - "integrity": "sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==", + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz", - "integrity": "sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==", + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", "cpu": [ - "arm64" + "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz", - "integrity": "sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==", + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ - "darwin" + "freebsd" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz", - "integrity": "sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==", + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz", - "integrity": "sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==", + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz", - "integrity": "sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==", + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz", - "integrity": "sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz", - "integrity": "sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz", - "integrity": "sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz", - "integrity": "sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==", + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz", - "integrity": "sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==", + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.5.1", - "dev": true, - "license": "MIT" + "node_modules/@reduxjs/toolkit": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.5.0.tgz", + "integrity": "sha512-awNe2oTodsZ6LmRqmkFhtb/KH03hUhxOamEQy411m3Njj3BbFvoBovxo4Q1cBWnV1ErprVj9MlF0UPXkng0eyg==", + "license": "MIT", + "dependencies": { + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@repo/eslint-config": { + "resolved": "packages/eslint-config", + "link": true + }, + "node_modules/@repo/store": { + "resolved": "packages/store", + "link": true + }, + "node_modules/@repo/types": { + "resolved": "packages/types", + "link": true + }, + "node_modules/@repo/typescript-config": { + "resolved": "packages/typescript-config", + "link": true + }, + "node_modules/@repo/ui": { + "resolved": "packages/ui", + "link": true + }, + "node_modules/@repo/utils": { + "resolved": "packages/utils", + "link": true }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1854,15 +4129,24 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, "node_modules/@swc/helpers": { - "version": "0.5.2", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@tootallnate/once": { @@ -1870,39 +4154,99 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@turbo/gen": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@turbo/gen/-/gen-1.13.4.tgz", + "integrity": "sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@turbo/workspaces": "1.13.4", + "chalk": "2.4.2", + "commander": "^10.0.0", + "fs-extra": "^10.1.0", + "inquirer": "^8.2.4", + "minimatch": "^9.0.0", + "node-plop": "^0.26.3", + "proxy-agent": "^6.2.2", + "ts-node": "^10.9.1", + "update-check": "^1.5.4", + "validate-npm-package-name": "^5.0.0" + }, + "bin": { + "gen": "dist/cli.js" + } + }, + "node_modules/@turbo/workspaces": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@turbo/workspaces/-/workspaces-1.13.4.tgz", + "integrity": "sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "chalk": "2.4.2", + "commander": "^10.0.0", + "execa": "5.1.1", + "fast-glob": "^3.2.12", + "fs-extra": "^10.1.0", + "gradient-string": "^2.0.0", + "inquirer": "^8.0.0", + "js-yaml": "^4.1.0", + "ora": "4.1.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "update-check": "^1.5.4" + }, + "bin": { + "workspaces": "dist/cli.js" + } }, "node_modules/@types/babel__core": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", - "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1912,10 +4256,11 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -1925,49 +4270,165 @@ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/hammerjs": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", + "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==", + "license": "MIT" + }, "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", + "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", "license": "MIT", - "peer": true, "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/through": "*", + "rxjs": "^6.4.0" + } + }, + "node_modules/@types/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" } }, + "node_modules/@types/inquirer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -1977,15 +4438,17 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.5.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz", - "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -1996,6 +4459,7 @@ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", @@ -2004,88 +4468,98 @@ }, "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==", "dev": true, "license": "MIT" }, - "node_modules/@types/json5": { - "version": "0.0.29", + "node_modules/@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", "dev": true, "license": "MIT" }, - "node_modules/@types/minimist": { - "version": "1.2.5", + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "20.9.1", + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.10", - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.2.37", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.15", - "devOptional": true, + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^19.0.0" } }, - "node_modules/@types/scheduler": { - "version": "0.16.6", - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.5", - "dev": true, - "license": "MIT" - }, "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==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@types/through": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", + "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", "license": "MIT", "peer": true }, - "node_modules/@types/warning": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", - "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" - }, "node_modules/@types/yargs": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", - "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -2094,79 +4568,76 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz", + "integrity": "sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/type-utils": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/type-utils": "8.19.0", + "@typescript-eslint/utils": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.0.tgz", + "integrity": "sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/typescript-estree": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz", + "integrity": "sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2174,37 +4645,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz", + "integrity": "sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/typescript-estree": "8.19.0", + "@typescript-eslint/utils": "8.19.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.0.tgz", + "integrity": "sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==", "dev": true, "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2212,105 +4683,129 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz", + "integrity": "sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.0.tgz", + "integrity": "sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/typescript-estree": "8.19.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.11.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz", + "integrity": "sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.11.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.19.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "ISC" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/@yarn-tool/resolve-package": { - "version": "1.0.47", - "resolved": "https://registry.npmjs.org/@yarn-tool/resolve-package/-/resolve-package-1.0.47.tgz", - "integrity": "sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==", + "node_modules/@xyflow/react": { + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.3.6.tgz", + "integrity": "sha512-9GS+cz8hDZahpvTrVCmySAEgKUL8oN4b2q1DluHrKtkqhAMWfH2s7kblhbM4Y4Y4SUnH2lt4drXKZ/4/Lot/2Q==", + "license": "MIT", "dependencies": { - "pkg-dir": "< 6 >= 5", - "tslib": "^2", - "upath2": "^3.1.13" + "@xyflow/system": "0.0.47", + "classcat": "^5.0.3", + "zustand": "^4.4.0" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" } }, - "node_modules/@yarn-tool/resolve-package/node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "node_modules/@xyflow/system": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.47.tgz", + "integrity": "sha512-aUXJPIvsCFxGX70ccRG8LPsR+A8ExYXfh/noYNpqn8udKerrLdSHxMG2VsvUrQ1PGex10fOpbJwFU4A+I/Xv8w==", + "license": "MIT", "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" + "@types/d3-drag": "^3.0.7", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" } }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/acorn": { - "version": "8.11.2", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -2325,6 +4820,7 @@ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.1.0", "acorn-walk": "^8.0.2" @@ -2332,6 +4828,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==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2339,28 +4837,46 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } }, "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==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "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==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "4" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -2375,25 +4891,16 @@ } }, "node_modules/ansi-escapes": { - "version": "5.0.0", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^1.0.2" - }, - "engines": { - "node": ">=12" + "type-fest": "^0.21.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "1.4.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2401,6 +4908,8 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -2408,21 +4917,23 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", + "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==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "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==", + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -2436,42 +4947,45 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, - "node_modules/aria-query": { - "version": "5.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" - } - }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { - "version": "3.1.7", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "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": { @@ -2483,22 +4997,27 @@ }, "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==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "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==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "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" @@ -2508,14 +5027,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2525,14 +5046,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2542,29 +5065,36 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.2", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "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.2", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -2573,45 +5103,52 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "dev": true, - "license": "MIT" - }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - } + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "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==", "dev": true, "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2619,41 +5156,102 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axe-core": { - "version": "4.7.0", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "license": "MPL-2.0", + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/babel-jest/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/axobject-query": { - "version": "3.2.1", + "node_modules/babel-jest/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==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "license": "MIT" + }, + "node_modules/babel-jest/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "node_modules/babel-jest/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==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "node": ">=8" } }, "node_modules/babel-plugin-istanbul": { @@ -2661,6 +5259,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -2672,64 +5271,96 @@ "node": ">=8" } }, - "node_modules/babel-plugin-istanbul/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==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "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" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { + "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==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "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==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^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.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.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-top-level-await": "^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" @@ -2740,6 +5371,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -2752,64 +5384,82 @@ } }, "node_modules/balanced-match": { - "version": "2.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, - "node_modules/big-integer": { - "version": "1.6.51", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.2.0", + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "node_modules/bplist-parser": { - "version": "0.2.0", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, - "node_modules/brace-expansion/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "devOptional": true, "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", "dev": true, "funding": [ { @@ -2825,11 +5475,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -2838,37 +5489,65 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, "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==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "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==", - "dev": true - }, - "node_modules/bundle-name": { - "version": "3.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, "node_modules/busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -2877,67 +5556,90 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/camelcase": { - "version": "6.3.0", + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/camelcase-keys": { - "version": "7.0.2", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001563", + "version": "1.0.30001690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", + "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", "funding": [ { "type": "opencollective", @@ -2955,18 +5657,45 @@ "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "4.1.2", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" + } + }, + "node_modules/change-case": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" } }, "node_modules/char-regex": { @@ -2974,22 +5703,34 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, "node_modules/chart.js": { - "version": "4.4.0", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz", + "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==", "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" }, "engines": { - "pnpm": ">=7" + "pnpm": ">=8" } }, "node_modules/chartjs-adapter-date-fns": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", + "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", "license": "MIT", "peerDependencies": { "chart.js": ">=2.8.0", @@ -2997,10 +5738,12 @@ } }, "node_modules/chartjs-plugin-zoom": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.1.tgz", - "integrity": "sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.2.0.tgz", + "integrity": "sha512-in6kcdiTlP6npIVLMd4zXZ08PDUXC52gZ4FAy5oyjk1zX3gKarXMAof7B9eFiisf9WOC3bh2saHg+J5WtLXZeA==", + "license": "MIT", "dependencies": { + "@types/hammerjs": "^2.0.45", "hammerjs": "^2.0.8" }, "peerDependencies": { @@ -3008,38 +5751,18 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" + "node": ">= 14.16.0" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/ci-info": { @@ -3053,146 +5776,133 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true, + "license": "MIT" }, - "node_modules/cli-cursor": { - "version": "4.0.0", + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, + "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==", "dev": true, "license": "MIT", - "dependencies": { - "restore-cursor": "^4.0.0" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/cli-truncate": { + "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "5.0.0", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 10" } }, - "node_modules/cli-truncate/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/cliui/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==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/cliui/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==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, + "node_modules/cliui/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==", + "dev": true, + "license": "MIT" + }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3205,11 +5915,22 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -3219,12 +5940,57 @@ "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==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } }, "node_modules/color-convert": { - "version": "2.0.1", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3232,18 +5998,17 @@ "node": ">=7.0.0" } }, - "node_modules/color-name": { + "node_modules/color/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true }, "node_modules/colord": { "version": "2.9.3", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true, "license": "MIT" }, @@ -3252,6 +6017,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3260,83 +6026,215 @@ } }, "node_modules/commander": { - "version": "11.1.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=14" } }, - "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/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, + "node_modules/constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/contwatch-client": { + "resolved": "apps/contwatch-client", + "link": true + }, "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==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", + "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/cosmiconfig": { - "version": "8.3.6", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-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==", + "dev": 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/create-jest/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/create-jest/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest/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==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/create-jest/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==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -3349,7 +6247,9 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.1", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true, "license": "MIT", "engines": { @@ -3358,15 +6258,19 @@ }, "node_modules/css-property-sort-order-smacss": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/css-property-sort-order-smacss/-/css-property-sort-order-smacss-2.2.0.tgz", + "integrity": "sha512-nXutswsivIEBOrPo/OZw2KQjFPLvtg68aovJf6Kqrm3L6FmTvvFPaeDrk83hh0+pRJGuP3PeKJwMS0E6DFipdQ==", "dev": true, "license": "MIT" }, "node_modules/css-tree": { - "version": "2.3.1", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.0.30", + "mdn-data": "2.12.2", "source-map-js": "^1.0.1" }, "engines": { @@ -3375,6 +6279,8 @@ }, "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==", "dev": true, "license": "MIT", "bin": { @@ -3388,13 +6294,15 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, + "license": "MIT", "dependencies": { "cssom": "~0.3.6" }, @@ -3406,35 +6314,136 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/csstype": { - "version": "3.1.2", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, - "node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + "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==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } }, - "node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "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==", + "license": "ISC", "dependencies": { - "d3-path": "1" + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, - "license": "BSD-2-Clause" + "license": "MIT", + "engines": { + "node": ">= 14" + } }, "node_modules/data-urls": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", @@ -3444,89 +6453,102 @@ "node": ">=12" } }, - "node_modules/date-fns": { - "version": "2.30.0", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": ">=0.11" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/debug": { - "version": "4.3.4", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "5.0.1", - "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "dev": true, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -3536,8 +6558,20 @@ } } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "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==", "dev": true, "license": "MIT" }, @@ -3546,126 +6580,93 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/default-browser": { - "version": "4.0.0", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" + "clone": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-browser-id": { - "version": "3.0.0", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", + "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==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-browser/node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/execa/node_modules/human-signals": { - "version": "4.3.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=14.18.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-browser/node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/define-data-property": { - "version": "1.1.1", + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/define-properties": { - "version": "1.2.1", + "node_modules/del": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "globby": "^10.0.1", + "graceful-fs": "^4.2.2", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.1", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/delayed-stream": { @@ -3673,16 +6674,31 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/dequal": { "version": "2.0.3", - "dev": true, + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/detect-newline": { @@ -3690,6 +6706,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3699,6 +6716,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -3708,12 +6726,15 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "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==", "dev": true, "license": "MIT", "dependencies": { @@ -3723,22 +6744,30 @@ "node": ">=8" } }, + "node_modules/docs": { + "resolved": "apps/docs", + "link": true + }, "node_modules/doctrine": { - "version": "3.0.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, + "license": "MIT", "dependencies": { "webidl-conversions": "^7.0.0" }, @@ -3746,22 +6775,70 @@ "node": ">=12" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", + "node_modules/dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/electron-to-chromium": { - "version": "1.4.588", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", - "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", - "dev": true + "version": "1.5.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz", + "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3770,27 +6847,18 @@ } }, "node_modules/emoji-regex": { - "version": "9.2.2", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -3798,58 +6866,89 @@ "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "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==", "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.22.3", + "node_modules/error-ex/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==", "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.23.8", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.8.tgz", + "integrity": "sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.6", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "object.assign": "^4.1.7", + "own-keys": "^1.0.0", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -3858,35 +6957,77 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "license": "MIT", "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", + "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==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -3894,6 +7035,8 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -3901,13 +7044,15 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -3917,23 +7062,23 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "4.0.0", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/escodegen": { @@ -3941,6 +7086,7 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -3958,413 +7104,443 @@ } }, "node_modules/eslint": { - "version": "8.54.0", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "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", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "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" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "14.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "14.0.3", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" + "jiti": "*" }, "peerDependenciesMeta": { - "typescript": { + "jiti": { "optional": true } } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/eslint-plugin-only-warn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.1.0.tgz", + "integrity": "sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=6" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", + "node_modules/eslint-plugin-react": { + "version": "7.37.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", + "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "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.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "node": ">=4" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, "engines": { - "node": ">=4" + "node": ">=10" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/eslint-plugin-react/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==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.0", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "license": "ISC", "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.14.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=4" + "node": "*" + } + }, + "node_modules/eslint-plugin-react/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", + "node_modules/eslint-plugin-turbo": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-2.3.3.tgz", + "integrity": "sha512-j8UEA0Z+NNCsjZep9G5u5soDQHcXq/x4amrwulk6eHF1U91H2qAjp5I4jQcvJewmccCJbVp734PkHHTRnosjpg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "dotenv": "16.0.3" + }, + "peerDependencies": { + "eslint": ">6.6.0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "dependencies": { - "esutils": "^2.0.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", + "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==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", + "node_modules/eslint/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==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4.0" + "node": ">=8" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.0.1", + "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==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "node_modules/eslint/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==", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">=7.0.0" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", + "node_modules/eslint/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/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==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/eslint/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==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", + "node_modules/eslint/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==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", + "node_modules/eslint/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==", "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=5.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-unused-imports": { - "version": "3.0.0", + "node_modules/eslint/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==", "dev": true, "license": "MIT", "dependencies": { - "eslint-rule-composer": "^0.3.0" + "p-locate": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0", - "eslint": "^8.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=4.0.0" + "node": "*" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/eslint/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==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/eslint/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==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=8" } }, "node_modules/espree": { - "version": "9.6.1", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4375,6 +7551,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4384,7 +7561,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4396,6 +7575,8 @@ }, "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==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4407,47 +7588,43 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/execa": { - "version": "8.0.1", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.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": ">=16.17" + "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" @@ -4467,6 +7644,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -4478,18 +7656,32 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "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==", "dev": true, "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" - }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -4503,29 +7695,31 @@ "node": ">=8.6.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "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==", "dev": true, "license": "MIT" }, "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==", "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "license": "MIT", "engines": { @@ -4533,7 +7727,9 @@ } }, "node_modules/fastq": { - "version": "1.15.0", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, "license": "ISC", "dependencies": { @@ -4545,125 +7741,115 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.0.1", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "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==", + "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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "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==", + "dev": true, + "license": "ISC", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "node": ">=10" } }, - "node_modules/find-cache-dir/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==", + "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==", + "devOptional": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-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/find-up": { - "version": "5.0.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/flat-cache": { - "version": "3.2.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.9", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, - "node_modules/flume": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/flume/-/flume-1.0.4.tgz", - "integrity": "sha512-pZQBbmuJQgZRT8ZmSzMWpAZrb4xKlzY5OUYc0PrqVnSzzlHkxAho4Dqi9+mVUonXrdCb+haZUgVZz5wq7nDqmQ==", - "dependencies": { - "@reach/auto-id": "^0.10.5", - "d3-shape": "^1.3.7", - "lodash": "^4.17.15", - "nanoid": "^3.3.2", - "react-portal": "^4.2.1", - "rollup-plugin-typescript2": "^0.31.2" - }, - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "peerDependencies": { - "prop-types": "^15.5.4", - "react": "^18.2.0", - "react-dom": "^18.2.0" - } - }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -4671,10 +7857,11 @@ } }, "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==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4688,6 +7875,8 @@ "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==", + "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -4697,16 +7886,10 @@ "node": ">=12" } }, - "node_modules/fs-extra/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/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, @@ -4714,7 +7897,9 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4725,20 +7910,27 @@ }, "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==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { - "version": "1.1.6", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -4749,6 +7941,8 @@ }, "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==", "dev": true, "license": "MIT", "funding": { @@ -4760,6 +7954,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -4769,19 +7964,31 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.2", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4792,28 +7999,34 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/get-stream": { - "version": "8.0.1", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -4822,26 +8035,33 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.7.2", + "node_modules/get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "engines": { + "node": ">= 14" } }, "node_modules/glob": { - "version": "7.1.7", + "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", "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -4853,22 +8073,46 @@ } }, "node_modules/glob-parent": { - "version": "6.0.2", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "license": "BSD-2-Clause" + "node_modules/glob/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -4880,6 +8124,8 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -4893,6 +8139,8 @@ }, "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==", "dev": true, "license": "ISC", "dependencies": { @@ -4903,25 +8151,27 @@ } }, "node_modules/globals": { - "version": "13.23.0", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -4931,35 +8181,40 @@ } }, "node_modules/globby": { - "version": "11.1.0", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, "license": "MIT", "dependencies": { + "@types/glob": "^7.1.1", "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", "slash": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/globjoin": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, "license": "MIT" }, "node_modules/gopd": { - "version": "1.0.1", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4967,10 +8222,105 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, "license": "ISC" }, + "node_modules/gradient-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-2.0.2.tgz", + "integrity": "sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "tinygradient": "^1.1.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gradient-string/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/gradient-string/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/gradient-string/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gradient-string/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/gradient-string/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gradient-string/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/graphemer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, @@ -4978,49 +8328,78 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, "engines": { - "node": ">=6" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, "node_modules/has-bigints": { - "version": "1.0.2", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "4.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5029,7 +8408,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -5040,11 +8421,13 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -5054,7 +8437,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -5063,35 +8449,38 @@ "node": ">= 0.4" } }, + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "react-is": "^16.7.0" } }, "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", - "license": "MIT", - "peer": true - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" }, @@ -5103,10 +8492,22 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "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-tags": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "license": "MIT", "engines": { @@ -5117,68 +8518,130 @@ } }, "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==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "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==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, - "engines": { - "node": ">= 6" + "engines": { + "node": ">= 14" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/i18next": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.0.tgz", + "integrity": "sha512-ArJJTS1lV6lgKH7yEf4EpgNZ7+THl7bsGxxougPYiXRTJ/Fe1j08/TBpV9QsXCIYVfdE/HWG/xLezJ5DOlfBOA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + }, + "peerDependencies": { + "typescript": "^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/human-signals": { - "version": "5.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" + "node_modules/i18next-browser-languagedetector": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.2.tgz", + "integrity": "sha512-shBvPmnIyZeD2VU5jVGIOWP7u9qNG3Lj7mpaiPFpbJ3LVfHZJvVzKR4v1Cb91wAOFpNw442N+LGPzHOHsten2g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" } }, - "node_modules/husky": { - "version": "8.0.3", - "dev": true, + "node_modules/i18next-resources-to-backend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/i18next-resources-to-backend/-/i18next-resources-to-backend-1.2.1.tgz", + "integrity": "sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==", "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "dependencies": { + "@babel/runtime": "^7.23.2" } }, "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==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { - "version": "5.3.0", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -5186,7 +8649,9 @@ } }, "node_modules/immer": { - "version": "9.0.21", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", "license": "MIT", "funding": { "type": "opencollective", @@ -5194,11 +8659,15 @@ } }, "node_modules/immutable": { - "version": "4.3.4", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", "license": "MIT" }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -5214,25 +8683,20 @@ }, "node_modules/import-fresh/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==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -5249,6 +8713,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -5256,18 +8722,20 @@ } }, "node_modules/indent-string": { - "version": "5.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "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.", "dev": true, "license": "ISC", "dependencies": { @@ -5277,47 +8745,220 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/inquirer/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/internal-slot": { - "version": "1.0.6", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/is-array-buffer": { - "version": "3.0.2", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -5331,33 +8972,30 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { - "version": "1.1.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5368,6 +9006,8 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -5378,21 +9018,31 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5401,33 +9051,44 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "3.0.0", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5435,6 +9096,8 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -5446,12 +9109,15 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "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==", "dev": true, "license": "MIT", "dependencies": { @@ -5466,6 +9132,9 @@ }, "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==", + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -5474,33 +9143,30 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { + "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/is-map": { - "version": "2.0.2", + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "lower-case": "^1.1.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "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==", "dev": true, "license": "MIT", "engines": { @@ -5512,17 +9178,23 @@ }, "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==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5531,24 +9203,30 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/is-plain-obj": { - "version": "1.1.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==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-plain-object": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", "engines": { @@ -5559,15 +9237,20 @@ "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-regex": { - "version": "1.1.4", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -5577,41 +9260,56 @@ } }, "node_modules/is-set": { - "version": "2.0.2", + "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==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { - "version": "3.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { - "version": "1.0.7", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5621,11 +9319,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -5635,11 +9337,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -5648,69 +9352,99 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "upper-case": "^1.1.0" } }, - "node_modules/is-weakset": { + "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==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/is-weakref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "call-bound": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, @@ -5719,24 +9453,36 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "semver": "^6.3.0" }, "engines": { - "node": ">=10" + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-report": { @@ -5744,6 +9490,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -5753,11 +9500,35 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-report/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "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==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -5768,10 +9539,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -5781,162 +9553,182 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.2", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "license": "MIT", "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" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" }, "bin": { - "jest": "bin/jest.js" + "jake": "bin/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=10" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/jake/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==", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/jake/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==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest-changed-files/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==", + "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==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-changed-files/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==", + "node_modules/jake/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==", "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=10.17.0" + "node": ">=7.0.0" } }, - "node_modules/jest-changed-files/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==", + "node_modules/jake/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jake/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-changed-files/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==", + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/jest-changed-files/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==", + "node_modules/jake/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==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/jest-changed-files/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/jest-changed-files/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==", - "dev": true - }, - "node_modules/jest-changed-files/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==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { @@ -5944,6 +9736,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -5970,11 +9763,88 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-circus/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-circus/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-circus/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-cli": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -6003,11 +9873,88 @@ } } }, + "node_modules/jest-cli/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-cli/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-cli/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-config": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -6048,19 +9995,185 @@ } } }, - "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==", + "node_modules/jest-config/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-config/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-config/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-diff/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/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==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/jest-docblock": { @@ -6068,6 +10181,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -6080,6 +10194,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -6091,11 +10206,88 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-each/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-each/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-each/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-environment-jsdom": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -6123,6 +10315,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -6140,6 +10333,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -6149,6 +10343,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -6174,6 +10369,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -6187,6 +10383,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -6197,11 +10394,88 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-matcher-utils/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-matcher-utils/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -6217,11 +10491,88 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-message-util/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-message-util/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-mock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -6236,6 +10587,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -6253,6 +10605,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -6262,6 +10615,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -6274,20 +10628,97 @@ "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-resolve/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/jest-resolve/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/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==", "dev": true, + "license": "MIT", "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/jest-runner": { @@ -6295,6 +10726,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -6322,11 +10754,88 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runner/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-runner/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runner/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-runtime": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -6355,11 +10864,78 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/strip-bom": { + "node_modules/jest-runtime/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-runtime/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/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==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } @@ -6369,6 +10945,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -6395,11 +10972,88 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-snapshot/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-snapshot/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -6409,7 +11063,83 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/jest-util/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jest-validate": { @@ -6417,6 +11147,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -6429,11 +11160,101 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-validate/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": 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/jest-validate/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-validate/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-watcher": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -6448,31 +11269,80 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/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==", + "node_modules/jest-watcher/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==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watcher/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==", + "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==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jest-worker": { @@ -6480,6 +11350,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -6490,11 +11361,22 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-worker/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6507,10 +11389,14 @@ }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -6520,11 +11406,19 @@ "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==", + "dev": true, + "license": "MIT" + }, "node_modules/jsdom": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "acorn": "^8.8.1", @@ -6565,53 +11459,108 @@ } } }, + "node_modules/jsdom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/jsdom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, "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==", "dev": true, "license": "MIT" }, "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==", "dev": true, "license": "MIT" }, "node_modules/json5": { - "version": "1.0.2", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, "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==", + "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -6619,16 +11568,10 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonfile/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/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==", "dev": true, "license": "MIT", "dependencies": { @@ -6643,6 +11586,8 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -6651,6 +11596,8 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -6662,245 +11609,163 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/known-css-properties": { - "version": "0.29.0", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", "dev": true, "license": "MIT" }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "15.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "2.1.0", - "listr2": "7.0.2", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "license": "MIT", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6" } }, - "node_modules/listr2": { - "version": "7.0.2", + "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==", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=16.0.0" + "node": ">= 0.8.0" } }, + "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==", + "dev": true, + "license": "MIT" + }, "node_modules/locate-path": { - "version": "6.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" }, "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==", "dev": true, "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, "license": "MIT" }, - "node_modules/log-update": { - "version": "5.0.1", + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^5.0.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" + "chalk": "^2.4.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "5.0.0", - "dev": true, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/log-update/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "lower-case": "^1.1.2" } }, - "node_modules/log-update/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", + "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==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/loose-envify": { - "version": "1.4.0", + "node_modules/luxon": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/make-dir": { @@ -6908,6 +11773,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -6922,30 +11788,33 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } }, - "node_modules/map-obj": { - "version": "4.3.0", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, "node_modules/mathml-tag-names": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, "license": "MIT", "funding": { @@ -6954,41 +11823,20 @@ } }, "node_modules/mdn-data": { - "version": "2.0.30", + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", "dev": true, "license": "CC0-1.0" }, "node_modules/meow": { - "version": "10.1.5", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6996,11 +11844,15 @@ }, "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==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -7008,11 +11860,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -7024,6 +11878,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7033,6 +11888,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -7041,63 +11897,72 @@ } }, "node_modules/mimic-fn": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/minimatch": { - "version": "3.1.2", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimist-options": { - "version": "4.1.0", + "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==", "dev": true, "license": "MIT", "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "minimist": "^1.2.6" }, - "engines": { - "node": ">= 6" + "bin": { + "mkdirp": "bin/cmd.js" } }, "node_modules/ms": { - "version": "2.1.2", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, "node_modules/nanoid": { - "version": "3.3.7", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", @@ -7114,143 +11979,325 @@ }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "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==", "dev": true, "license": "MIT" }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/next": { - "version": "14.0.3", + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.3.tgz", + "integrity": "sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==", "license": "MIT", "dependencies": { - "@next/env": "14.0.3", - "@swc/helpers": "0.5.2", + "@next/env": "15.1.3", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", + "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" + "styled-jsx": "5.1.6" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=18.17.0" + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.3", - "@next/swc-darwin-x64": "14.0.3", - "@next/swc-linux-arm64-gnu": "14.0.3", - "@next/swc-linux-arm64-musl": "14.0.3", - "@next/swc-linux-x64-gnu": "14.0.3", - "@next/swc-linux-x64-musl": "14.0.3", - "@next/swc-win32-arm64-msvc": "14.0.3", - "@next/swc-win32-ia32-msvc": "14.0.3", - "@next/swc-win32-x64-msvc": "14.0.3" + "@next/swc-darwin-arm64": "15.1.3", + "@next/swc-darwin-x64": "15.1.3", + "@next/swc-linux-arm64-gnu": "15.1.3", + "@next/swc-linux-arm64-musl": "15.1.3", + "@next/swc-linux-x64-gnu": "15.1.3", + "@next/swc-linux-x64-musl": "15.1.3", + "@next/swc-win32-arm64-msvc": "15.1.3", + "@next/swc-win32-x64-msvc": "15.1.3", + "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { "@opentelemetry/api": { "optional": true }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, "sass": { "optional": true } } }, - "node_modules/next-redux-wrapper": { - "version": "8.1.0", + "node_modules/next-redux-wrapper": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-8.1.0.tgz", + "integrity": "sha512-2hIau0hcI6uQszOtrvAFqgc0NkZegKYhBB7ZAKiG3jk7zfuQb4E7OV9jfxViqqojh3SEHdnFfPkN9KErttUKuw==", + "license": "MIT", + "peerDependencies": { + "next": ">=9", + "react": "*", + "react-redux": "*" + } + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-plop": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/node-plop/-/node-plop-0.26.3.tgz", + "integrity": "sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime-corejs3": "^7.9.2", + "@types/inquirer": "^6.5.0", + "change-case": "^3.1.0", + "del": "^5.1.0", + "globby": "^10.0.1", + "handlebars": "^4.4.3", + "inquirer": "^7.1.0", + "isbinaryfile": "^4.0.2", + "lodash.get": "^4.4.2", + "mkdirp": "^0.5.1", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=8.9.4" + } + }, + "node_modules/node-plop/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/node-plop/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/node-plop/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/node-plop/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-plop/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==", + "dev": true, "license": "MIT", - "peerDependencies": { - "next": ">=9", - "react": "*", - "react-redux": "*" + "engines": { + "node": ">=8" } }, - "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==", - "dev": true + "node_modules/node-plop/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "node_modules/node-plop/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", + "node_modules/node-plop/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==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, + "node_modules/node-plop/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-path": { - "version": "5.1.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "path-key": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", + "dev": true, + "license": "MIT" }, "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==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.1", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -7258,13 +12305,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -7275,26 +12326,31 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "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.7", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "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" @@ -7303,37 +12359,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.groupby": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { - "version": "1.1.7", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7344,6 +12380,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==", "dev": true, "license": "ISC", "dependencies": { @@ -7351,54 +12389,168 @@ } }, "node_modules/onetime": { - "version": "6.0.0", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "9.1.0", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "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/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "dev": true, "license": "MIT", "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=14.16" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.3", + "node_modules/ora/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==", "dev": true, "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "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==", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -7410,29 +12562,106 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz", + "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "degenerator": "^5.0.0", + "netmask": "^2.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "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/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" } }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -7444,6 +12673,8 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -7460,19 +12691,44 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "dev": true, + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, "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==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7480,22 +12736,18 @@ }, "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==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-is-network-drive": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/path-is-network-drive/-/path-is-network-drive-1.0.20.tgz", - "integrity": "sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==", - "dependencies": { - "tslib": "^2" - } - }, "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==", "dev": true, "license": "MIT", "engines": { @@ -7504,18 +12756,15 @@ }, "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==", + "dev": true, "license": "MIT" }, - "node_modules/path-strip-sep": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/path-strip-sep/-/path-strip-sep-1.0.17.tgz", - "integrity": "sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==", - "dependencies": { - "tslib": "^2" - } - }, "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==", "dev": true, "license": "MIT", "engines": { @@ -7523,11 +12772,16 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -7536,22 +12790,12 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -7560,6 +12804,8 @@ "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==", + "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -7567,56 +12813,20 @@ "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" - }, + "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==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/postcss": { "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -7643,31 +12853,49 @@ }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true, "license": "MIT" }, "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", "dev": true, "license": "MIT" }, "node_modules/postcss-safe-parser": { - "version": "6.0.0", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=18.0" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.31" } }, "node_modules/postcss-scss": { "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", "dev": true, "funding": [ { @@ -7692,7 +12920,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", + "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==", "dev": true, "license": "MIT", "dependencies": { @@ -7705,6 +12935,8 @@ }, "node_modules/postcss-sorting": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", + "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", "dev": true, "license": "MIT", "peerDependencies": { @@ -7713,11 +12945,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==", "dev": true, "license": "MIT" }, "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==", "dev": true, "license": "MIT", "engines": { @@ -7725,7 +12961,9 @@ } }, "node_modules/prettier": { - "version": "3.1.0", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "license": "MIT", "bin": { @@ -7738,22 +12976,12 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -7768,6 +12996,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7780,6 +13009,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -7790,6 +13020,9 @@ }, "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==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -7799,16 +13032,55 @@ }, "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, "license": "MIT" }, "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -7816,9 +13088,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -7829,16 +13101,20 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, "funding": [ { @@ -7856,231 +13132,324 @@ ], "license": "MIT" }, - "node_modules/quick-lru": { - "version": "5.1.1", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rc": "cli.js" } }, "node_modules/react": { - "version": "18.2.0", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-chartjs-2": { - "version": "5.2.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.3.0.tgz", + "integrity": "sha512-UfZZFnDsERI3c3CZGxzvNJd02SHjaSJ8kgW1djn65H1KK8rehwTjyrRKOG3VTMG8wtHZ5rgAO5oTHtHi9GCCmw==", "license": "MIT", "peerDependencies": { "chart.js": "^4.1.1", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/react-dom": { - "version": "18.2.0", + "node_modules/react-cookie": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.2.2.tgz", + "integrity": "sha512-e+hi6axHcw9VODoeVu8WyMWyoosa1pzpyjfvrLdF7CexfU+WSGZdDuRfHa4RJgTpfv3ZjdIpHE14HpYBieHFhg==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "@types/hoist-non-react-statics": "^3.3.5", + "hoist-non-react-statics": "^3.3.2", + "universal-cookie": "^7.0.0" }, "peerDependencies": { - "react": "^18.2.0" + "react": ">= 16.3.0" } }, - "node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" - }, - "node_modules/react-portal": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-4.2.2.tgz", - "integrity": "sha512-vS18idTmevQxyQpnde0Td6ZcUlv+pD8GTyR42n3CHUQq9OHi1C4jDE4ZWEbEsrbrLRhSECYiao58cvocwMtP7Q==", + "node_modules/react-dom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "license": "MIT", "dependencies": { - "prop-types": "^15.5.8" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0", - "react-dom": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0" + "react": "^19.0.0" } }, - "node_modules/react-redux": { - "version": "8.1.3", + "node_modules/react-i18next": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.4.0.tgz", + "integrity": "sha512-Py6UkX3zV08RTvL6ZANRoBh9sL/ne6rQq79XlkHEdd82cZr2H9usbWpUNVadJntIZP2pu3M2rL1CN+5rQYfYFw==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" + "@babel/runtime": "^7.25.0", + "html-parse-stringify": "^3.0.1" }, "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4 || ^5.0.0-beta.0" + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" }, "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, "react-dom": { "optional": true }, "react-native": { "optional": true - }, - "redux": { - "optional": true } } }, - "node_modules/read-pkg": { - "version": "6.0.0", + "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==", "dev": true, + "license": "MIT" + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", + "peer": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } } }, - "node_modules/read-pkg-up": { - "version": "8.0.0", + "node_modules/react-spinners": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.15.0.tgz", + "integrity": "sha512-ZO3/fNB9Qc+kgpG3SfdlMnvTX6LtLmTnOogb3W6sXIaU/kZ1ydEViPfZ06kSOaEsor58C/tzXw2wROGQu3X2pA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "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==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "1.4.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "1.4.0", + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readdirp": { - "version": "3.6.0", + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "regenerate": "^1.4.2" }, "engines": { - "node": ">=8.10.0" + "node": ">=4" } }, - "node_modules/redent": { - "version": "4.0.0", + "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==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "license": "MIT", "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/redux": { - "version": "4.2.1", + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.9.2" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/redux-thunk": { - "version": "2.4.2", + "node_modules/registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, "license": "MIT", - "peerDependencies": { - "redux": "^4" + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "rc": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, "license": "MIT" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "jsesc": "~3.0.2" }, - "engines": { - "node": ">= 0.4" + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, "node_modules/require-directory": { @@ -8088,12 +13457,15 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -8104,23 +13476,32 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/reselect": { - "version": "4.1.8", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8130,6 +13511,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -8139,31 +13521,28 @@ }, "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==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/restore-cursor": { - "version": "4.0.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -8171,41 +13550,13 @@ "signal-exit": "^3.0.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "license": "MIT", "engines": { @@ -8213,13 +13564,11 @@ "node": ">=0.10.0" } }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, "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", "dev": true, "license": "ISC", "dependencies": { @@ -8232,190 +13581,74 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "dev": 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/rollup": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.0.tgz", - "integrity": "sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==", - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.5.0", - "@rollup/rollup-android-arm64": "4.5.0", - "@rollup/rollup-darwin-arm64": "4.5.0", - "@rollup/rollup-darwin-x64": "4.5.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.5.0", - "@rollup/rollup-linux-arm64-gnu": "4.5.0", - "@rollup/rollup-linux-arm64-musl": "4.5.0", - "@rollup/rollup-linux-x64-gnu": "4.5.0", - "@rollup/rollup-linux-x64-musl": "4.5.0", - "@rollup/rollup-win32-arm64-msvc": "4.5.0", - "@rollup/rollup-win32-ia32-msvc": "4.5.0", - "@rollup/rollup-win32-x64-msvc": "4.5.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.31.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz", - "integrity": "sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==", - "dependencies": { - "@rollup/pluginutils": "^4.1.2", - "@yarn-tool/resolve-package": "^1.0.40", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "resolve": "^1.20.0", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/run-applescript": { - "version": "5.0.0", + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "license": "MIT", - "dependencies": { - "execa": "^5.0.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.12.0" } }, - "node_modules/run-applescript/node_modules/execa": { - "version": "5.1.1", + "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==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "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/run-applescript/node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=6" + "queue-microtask": "^1.2.2" } }, - "node_modules/run-applescript/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==", + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.1.0" } }, - "node_modules/run-applescript/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" }, "engines": { - "node": ">=6" + "node": ">=0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/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==", - "dev": true, - "engines": { - "node": ">=6" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -8431,36 +13664,38 @@ "url": "https://feross.org/support" } ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } + "license": "MIT" }, - "node_modules/safe-array-concat": { - "version": "1.0.1", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", + "es-errors": "^1.3.0", "isarray": "^2.0.5" }, "engines": { - "node": ">=0.4" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8470,14 +13705,17 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sass": { - "version": "1.69.5", + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.0.tgz", + "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==", "license": "MIT", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -8485,6 +13723,9 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/saxes": { @@ -8492,6 +13733,7 @@ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -8500,19 +13742,17 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT" }, "node_modules/semver": { - "version": "7.5.4", - "dev": true, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "devOptional": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8520,35 +13760,105 @@ "node": ">=10" } }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, "node_modules/set-function-length": { - "version": "1.1.1", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "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.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", + "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==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -8560,6 +13870,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==", "dev": true, "license": "MIT", "engines": { @@ -8567,37 +13879,109 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" } }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -8606,6 +13990,8 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8620,17 +14006,107 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/slice-ansi/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "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": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "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==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -8641,50 +14117,25 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "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==", + "dev": true, + "license": "BSD-3-Clause" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -8697,22 +14148,27 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/streamsearch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } }, - "node_modules/string-argv": { - "version": "0.3.2", + "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==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.6.19" + "dependencies": { + "safe-buffer": "~5.2.0" } }, "node_modules/string-length": { @@ -8720,6 +14176,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -8730,6 +14187,8 @@ }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -8741,38 +14200,59 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { - "version": "1.2.8", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8782,26 +14262,37 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "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" @@ -8809,6 +14300,8 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -8819,56 +14312,39 @@ } }, "node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/strip-indent": { - "version": "4.0.0", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", - "dependencies": { - "min-indent": "^1.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/strip-json-comments": { - "version": "3.1.1", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/style-search": { - "version": "0.1.0", - "dev": true, - "license": "ISC" - }, "node_modules/styled-jsx": { - "version": "5.1.1", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", "license": "MIT", "dependencies": { "client-only": "0.0.1" @@ -8877,7 +14353,7 @@ "node": ">= 12.0.0" }, "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, "peerDependenciesMeta": { "@babel/core": { @@ -8889,64 +14365,72 @@ } }, "node_modules/stylelint": { - "version": "15.11.0", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz", + "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "license": "MIT", "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1", + "@csstools/media-query-list-parser": "^3.0.1", + "@csstools/selector-specificity": "^4.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.0.0", + "debug": "^4.3.7", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", + "file-entry-cache": "^9.1.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^6.0.2", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "picocolors": "^1.0.1", + "postcss": "^8.4.47", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", + "supports-hyperlinks": "^3.1.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">=18.12.0" } }, "node_modules/stylelint-config-prettier-scss": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier-scss/-/stylelint-config-prettier-scss-1.0.0.tgz", + "integrity": "sha512-Gr2qLiyvJGKeDk0E/+awNTrZB/UtNVPLqCDOr07na/sLekZwm26Br6yYIeBYz3ulsEcQgs5j+2IIMXCC+wsaQA==", "dev": true, "license": "MIT", "bin": { @@ -8961,40 +14445,62 @@ } }, "node_modules/stylelint-config-property-sort-order-smacss": { - "version": "9.1.0", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-property-sort-order-smacss/-/stylelint-config-property-sort-order-smacss-10.0.0.tgz", + "integrity": "sha512-NuiTgyqD8UdYY1IpTBIodBbrWKwaib5r8sq5kGHQ52UrmT8O7Fa8ZWYGipSZw6k9tGoljl9Hng2jtH+wBTMa1Q==", "dev": true, "license": "MIT", "dependencies": { "css-property-sort-order-smacss": "~2.2.0", - "stylelint-order": "^6.0.2" + "stylelint-order": "^6.0.4" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^14.0.0 || ^15.0.0" + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/stylelint-config-recommended": { - "version": "13.0.0", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "license": "MIT", "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-recommended-scss": { - "version": "13.1.0", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", "dev": true, "license": "MIT", "dependencies": { "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.3.0" + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.6.1" }, "peerDependenciesMeta": { "postcss": { @@ -9003,30 +14509,47 @@ } }, "node_modules/stylelint-config-standard": { - "version": "34.0.0", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", + "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "license": "MIT", "dependencies": { - "stylelint-config-recommended": "^13.0.0" + "stylelint-config-recommended": "^14.0.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-standard-scss": { - "version": "11.1.0", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.1.0.tgz", + "integrity": "sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA==", "dev": true, "license": "MIT", "dependencies": { - "stylelint-config-recommended-scss": "^13.1.0", - "stylelint-config-standard": "^34.0.0" + "stylelint-config-recommended-scss": "^14.0.0", + "stylelint-config-standard": "^36.0.0" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.3.1" }, "peerDependenciesMeta": { "postcss": { @@ -9035,56 +14558,240 @@ } }, "node_modules/stylelint-order": { - "version": "6.0.3", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", "dev": true, "license": "MIT", "dependencies": { - "postcss": "^8.4.21", + "postcss": "^8.4.32", "postcss-sorting": "^8.0.2" }, "peerDependencies": { - "stylelint": "^14.0.0 || ^15.0.0" + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" + } + }, + "node_modules/stylelint-order/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, "node_modules/stylelint-scss": { - "version": "5.3.1", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.10.0.tgz", + "integrity": "sha512-y03if6Qw9xBMoVaf7tzp5BbnYhYvudIKzURkhSHzcHG0bW0fAYvQpTUVJOe7DyhHaxeThBil4ObEMvGbV7+M+w==", "dev": true, "license": "MIT", "dependencies": { - "known-css-properties": "^0.29.0", + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mdn-data": "^2.12.2", "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": ">=18.12.0" + }, "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" + "stylelint": "^16.0.2" + } + }, + "node_modules/stylelint-scss/node_modules/known-css-properties": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/stylelint-scss/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "license": "MIT" + }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "7.0.2", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.2.0" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=18" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.3.1", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/stylelint/node_modules/ignore": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", + "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/stylelint/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/stylelint/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/stylelint/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/supports-color": { - "version": "7.2.0", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/supports-hyperlinks": { - "version": "3.0.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", + "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", "dev": true, "license": "MIT", "dependencies": { @@ -9093,10 +14800,39 @@ }, "engines": { "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-hyperlinks/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -9107,42 +14843,45 @@ }, "node_modules/svg-tags": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, "node_modules/swr": { - "version": "2.2.4", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.0.tgz", + "integrity": "sha512-NyZ76wA4yElZWBHzSgEJc28a0u6QZvhb6w0azeL2k7+Q1gAzVK+IqQYXhVOC/mzi+HZIozrZvBVeSeOZNR2bqA==", "license": "MIT", "dependencies": { - "client-only": "^0.0.1", - "use-sync-external-store": "^1.2.0" + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" }, "peerDependencies": { - "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "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==", - "dev": true - }, - "node_modules/synckit": { - "version": "0.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } + "dev": true, + "license": "MIT" }, "node_modules/table": { - "version": "6.8.1", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -9157,14 +14896,16 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -9175,21 +14916,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, "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==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -9199,39 +14934,91 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", + "node_modules/test-exclude/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, - "node_modules/titleize": { - "version": "3.0.0", + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinygradient": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", + "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" + } + }, + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.6.0" } }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "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==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "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==", + "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -9241,10 +15028,11 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -9255,11 +15043,22 @@ "node": ">=6" } }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -9267,33 +15066,74 @@ "node": ">=12" } }, - "node_modules/trim-newlines": { - "version": "4.1.1", + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/ts-api-utils": { - "version": "1.0.3", + "node_modules/ts-jest": { + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, "engines": { - "node": ">=16.13.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { - "typescript": ">=4.2.0" + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -9332,23 +15172,111 @@ } } }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "dev": true, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/turbo": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.3.3.tgz", + "integrity": "sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA==", "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "2.3.3", + "turbo-darwin-arm64": "2.3.3", + "turbo-linux-64": "2.3.3", + "turbo-linux-arm64": "2.3.3", + "turbo-windows-64": "2.3.3", + "turbo-windows-arm64": "2.3.3" } }, - "node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" + "node_modules/turbo-darwin-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.3.3.tgz", + "integrity": "sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-darwin-arm64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.3.3.tgz", + "integrity": "sha512-DYbQwa3NsAuWkCUYVzfOUBbSUBVQzH5HWUFy2Kgi3fGjIWVZOFk86ss+xsWu//rlEAfYwEmopigsPYSmW4X15A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-linux-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.3.3.tgz", + "integrity": "sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-linux-arm64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.3.3.tgz", + "integrity": "sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-windows-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.3.3.tgz", + "integrity": "sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.3.3.tgz", + "integrity": "sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -9363,12 +15291,15 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "0.20.2", + "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==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9379,27 +15310,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -9409,15 +15345,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -9427,20 +15367,30 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { - "version": "5.2.2", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -9450,56 +15400,137 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.19.0.tgz", + "integrity": "sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.19.0", + "@typescript-eslint/parser": "8.19.0", + "@typescript-eslint/utils": "8.19.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unbox-primitive": { - "version": "1.0.2", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/undici-types": { - "version": "5.26.5", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, "license": "MIT" }, - "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==", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universal-cookie": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.2.2.tgz", + "integrity": "sha512-fMiOcS3TmzP2x5QV26pIH3mvhexLIT0HmPa3V7Q7knRfT9HG6kTwq02HZGLPw0sAOXrAmotElGRvTLCMbJsvxQ==", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^0.7.2" } }, - "node_modules/untildify": { - "version": "4.0.0", + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/upath2": { - "version": "3.1.19", - "resolved": "https://registry.npmjs.org/upath2/-/upath2-3.1.19.tgz", - "integrity": "sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==", - "dependencies": { - "@types/node": "*", - "path-is-network-drive": "^1.0.20", - "path-strip-sep": "^1.0.17", - "tslib": "^2" + "node": ">= 10.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -9515,9 +15546,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -9526,8 +15558,38 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-check": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", + "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true, + "license": "MIT" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.1" + } + }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9539,20 +15601,25 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "node_modules/use-sync-external-store": { - "version": "1.2.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "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==", "dev": true, "license": "MIT" }, @@ -9560,13 +15627,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -9576,13 +15645,34 @@ "node": ">=10.12.0" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", + "node_modules/v8-to-istanbul/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==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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-xmlserializer": { @@ -9590,6 +15680,7 @@ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, + "license": "MIT", "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -9602,27 +15693,19 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" + "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { @@ -9630,6 +15713,7 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } @@ -9639,6 +15723,7 @@ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -9646,11 +15731,25 @@ "node": ">=12" } }, + "node_modules/whatwg-encoding/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } @@ -9660,6 +15759,7 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -9670,6 +15770,8 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -9683,37 +15785,45 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "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" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.3", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "call-bound": "^1.0.2", + "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-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -9723,29 +15833,37 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "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.13", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9754,96 +15872,101 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "license": "MIT" }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/wrap-ansi/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==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/wrap-ansi/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==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=7.0.0" } }, + "node_modules/wrap-ansi/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==", + "dev": true, + "license": "MIT" + }, "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==", "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { - "version": "5.0.1", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "signal-exit": "^3.0.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -9865,6 +15988,7 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12" } @@ -9873,35 +15997,32 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, - "node_modules/yaml": { - "version": "2.3.4", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -9916,18 +16037,11 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -9937,12 +16051,16 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "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==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -9950,6 +16068,162 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.5.tgz", + "integrity": "sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/zustand/node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "packages/eslint-config": { + "name": "@repo/eslint-config", + "version": "0.0.0", + "devDependencies": { + "@eslint/js": "^9.17.0", + "@next/eslint-plugin-next": "^15.1.0", + "@typescript-eslint/eslint-plugin": "^8.15.0", + "@typescript-eslint/parser": "^8.15.0", + "eslint": "^9.15.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-only-warn": "^1.1.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-turbo": "^2.3.0", + "globals": "^15.12.0", + "typescript": "^5.3.3", + "typescript-eslint": "^8.15.0" + } + }, + "packages/store": { + "name": "@repo/store", + "version": "1.0.0", + "dependencies": { + "@reduxjs/toolkit": "2.5.0", + "@repo/types": "*", + "next-redux-wrapper": "8.1.0" + } + }, + "packages/types": { + "name": "@repo/types", + "version": "1.0.0" + }, + "packages/typescript-config": { + "name": "@repo/typescript-config", + "version": "0.0.0", + "license": "MIT" + }, + "packages/ui": { + "name": "@repo/ui", + "version": "0.0.0", + "dependencies": { + "next": "^15.1.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-spinners": "0.15.0" + }, + "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*", + "@turbo/gen": "^1.12.4", + "@types/node": "^20.11.24", + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2", + "typescript": "5.5.4" + } + }, + "packages/ui/node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/utils": { + "name": "@repo/utils", + "version": "0.0.0", + "dependencies": { + "@repo/store": "*", + "@repo/types": "*", + "i18next": "24.2.0", + "i18next-browser-languagedetector": "8.0.2", + "i18next-resources-to-backend": "1.2.1", + "react-cookie": "7.2.2", + "react-i18next": "15.4.0", + "swr": "2.2.5" + }, + "devDependencies": { + "@babel/preset-env": "7.26.0", + "@babel/preset-typescript": "7.26.0", + "@types/jest": "29.5.14", + "babel-jest": "29.7.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "ts-jest": "29.2.5" + } + }, + "packages/utils/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==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/utils/node_modules/swr": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", + "license": "MIT", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } } } } diff --git a/src/client/package.json b/src/client/package.json index 2fc666a..50f0ffe 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -1,64 +1,41 @@ { - "name": "contwatch-client", - "version": "2.0.0-beta", + "name": "contwatch-turborepo", "private": true, "scripts": { - "build:config": "tsc next.config.ts --skipLibCheck --module commonjs --target esnext --esModuleInterop true --allowSyntheticDefaultImports true --moduleResolution node", - "dev": "npm run build:config; next dev", - "build": "npm run build:config; next build", - "start": "next start", - "test": "jest --verbose", - "lint": "next lint", - "stylelint": "stylelint '**/*.scss'", - "precommit": "lint-staged", - "fmt": "prettier --write './**/*.js'" + "build": "turbo build", + "dev": "turbo dev", + "lint": "turbo lint", + "format": "prettier --write \"**/*.{ts,tsx,md}\"", + "stylelint": "turbo stylelint", + "test": "turbo test", + "ci": "turbo build lint stylelint test" }, "dependencies": { - "@reduxjs/toolkit": "1.9.7", - "chart.js": "4.4.0", + "@xyflow/react": "^12.3.6", + "chart.js": "^4.4.7", "chartjs-adapter-date-fns": "3.0.0", - "chartjs-plugin-zoom": "^2.0.1", - "date-fns": "2.30.0", - "flume": "^1.0.4", - "next": "14.0.3", - "next-redux-wrapper": "8.1.0", - "react": "18.2.0", - "react-chartjs-2": "5.2.0", - "react-dom": "18.2.0", - "sass": "1.69.5", - "swr": "2.2.4", - "typescript": "5.2.2" + "chartjs-plugin-zoom": "^2.2.0", + "luxon": "^3.5.0", + "react-chartjs-2": "^5.3.0", + "sass": "^1.83.0", + "turbo": "^2.3.3", + "typescript": "5.7.2" }, "devDependencies": { - "@types/jest": "^29.5.8", - "@types/node": "20.9.1", - "@types/react": "18.2.37", - "@types/react-dom": "18.2.15", - "@typescript-eslint/eslint-plugin": "6.11.0", - "@typescript-eslint/parser": "6.11.0", - "eslint": "8.54.0", - "eslint-config-next": "14.0.3", - "eslint-plugin-import": "2.29.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-simple-import-sort": "10.0.0", - "eslint-plugin-unused-imports": "3.0.0", - "husky": "8.0.3", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "lint-staged": "15.1.0", - "prettier": "3.1.0", - "stylelint": "15.11.0", + "@types/luxon": "^3.4.2", + "prettier": "^3.2.5", + "stylelint": "16.10.0", "stylelint-config-prettier-scss": "1.0.0", - "stylelint-config-property-sort-order-smacss": "9.1.0", - "stylelint-config-standard-scss": "11.1.0", - "stylelint-order": "6.0.3", - "ts-node": "^10.9.1" + "stylelint-config-property-sort-order-smacss": "10.0.0", + "stylelint-config-standard-scss": "13.1.0", + "stylelint-order": "6.0.4" }, - "lint-staged": { - "*.js": [ - "prettier --write", - "git add" - ] - } + "engines": { + "node": ">=18" + }, + "packageManager": "npm@10.8.1", + "workspaces": [ + "apps/*", + "packages/*" + ] } diff --git a/src/client/packages/eslint-config/README.md b/src/client/packages/eslint-config/README.md new file mode 100644 index 0000000..8b42d90 --- /dev/null +++ b/src/client/packages/eslint-config/README.md @@ -0,0 +1,3 @@ +# `@turbo/eslint-config` + +Collection of internal eslint configurations. diff --git a/src/client/packages/eslint-config/base.js b/src/client/packages/eslint-config/base.js new file mode 100644 index 0000000..31f5f43 --- /dev/null +++ b/src/client/packages/eslint-config/base.js @@ -0,0 +1,32 @@ +import js from "@eslint/js"; +import eslintConfigPrettier from "eslint-config-prettier"; +import turboPlugin from "eslint-plugin-turbo"; +import tseslint from "typescript-eslint"; +import onlyWarn from "eslint-plugin-only-warn"; + +/** + * A shared ESLint configuration for the repository. + * + * @type {import("eslint").Linter.Config} + * */ +export const config = [ + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + { + plugins: { + turbo: turboPlugin, + }, + rules: { + "turbo/no-undeclared-env-vars": "warn", + }, + }, + { + plugins: { + onlyWarn, + }, + }, + { + ignores: ["dist/**"], + }, +]; diff --git a/src/client/packages/eslint-config/next.js b/src/client/packages/eslint-config/next.js new file mode 100644 index 0000000..1997af7 --- /dev/null +++ b/src/client/packages/eslint-config/next.js @@ -0,0 +1,49 @@ +import js from "@eslint/js"; +import eslintConfigPrettier from "eslint-config-prettier"; +import tseslint from "typescript-eslint"; +import pluginReactHooks from "eslint-plugin-react-hooks"; +import pluginReact from "eslint-plugin-react"; +import globals from "globals"; +import pluginNext from "@next/eslint-plugin-next"; +import { config as baseConfig } from "./base.js"; + +/** + * A custom ESLint configuration for libraries that use Next.js. + * + * @type {import("eslint").Linter.Config} + * */ +export const nextJsConfig = [ + ...baseConfig, + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + { + ...pluginReact.configs.flat.recommended, + languageOptions: { + ...pluginReact.configs.flat.recommended.languageOptions, + globals: { + ...globals.serviceworker, + }, + }, + }, + { + plugins: { + "@next/next": pluginNext, + }, + rules: { + ...pluginNext.configs.recommended.rules, + ...pluginNext.configs["core-web-vitals"].rules, + }, + }, + { + plugins: { + "react-hooks": pluginReactHooks, + }, + settings: { react: { version: "detect" } }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + // React scope no longer necessary with new JSX transform. + "react/react-in-jsx-scope": "off", + }, + }, +]; diff --git a/src/client/packages/eslint-config/package-lock.json b/src/client/packages/eslint-config/package-lock.json new file mode 100644 index 0000000..011504a --- /dev/null +++ b/src/client/packages/eslint-config/package-lock.json @@ -0,0 +1,6586 @@ +{ + "name": "@repo/eslint-config", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@repo/eslint-config", + "version": "0.0.0", + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^7.1.0", + "@typescript-eslint/parser": "^7.1.0", + "@vercel/style-guide": "^5.2.0", + "eslint-config-next": "14.2.7", + "eslint-config-turbo": "2.2.3", + "eslint-plugin-import": "2.29.1", + "eslint-plugin-only-warn": "^1.1.0", + "eslint-plugin-prettier": "5.2.1", + "eslint-plugin-react": "7.35.0", + "eslint-plugin-simple-import-sort": "12.1.1", + "eslint-plugin-unused-imports": "4.1.3", + "typescript": "5.4.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", + "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", + "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", + "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "Apache-2.0", + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", + "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.0", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", + "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.2.tgz", + "integrity": "sha512-2WwyTYNVaMNUWPZTOJdkax9iqTdirrApgTbk+Qoq5EPX6myqZvG8QGFRgdKmkjKVG6/G/a565vpPauHk0+hpBA==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "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", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.2.7", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.7.tgz", + "integrity": "sha512-+7xh142AdhZGjY9/L0iFo7mqRBMJHe+q+uOL+hto1Lfo9DeWCGcR6no4StlFbVSVcA6fQLKEX6y6qhMsSKbgNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "10.3.10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.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==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.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==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/@vercel/style-guide": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vercel/style-guide/-/style-guide-5.2.0.tgz", + "integrity": "sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@babel/core": "^7.22.11", + "@babel/eslint-parser": "^7.22.11", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/eslint-plugin": "^6.5.0", + "@typescript-eslint/parser": "^6.5.0", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-import-resolver-typescript": "^3.6.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jest": "^27.2.3", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-playwright": "^0.16.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-testing-library": "^6.0.1", + "eslint-plugin-tsdoc": "^0.2.17", + "eslint-plugin-unicorn": "^48.0.1", + "prettier-plugin-packagejson": "^2.4.5" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@next/eslint-plugin-next": ">=12.3.0 <15", + "eslint": ">=8.48.0 <9", + "prettier": ">=3.0.0 <4", + "typescript": ">=4.8.0 <6" + }, + "peerDependenciesMeta": { + "@next/eslint-plugin-next": { + "optional": true + }, + "eslint": { + "optional": true + }, + "prettier": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@vercel/style-guide/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vercel/style-guide/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/acorn": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "license": "Python-2.0", + "peer": true + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "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-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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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.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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001671", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001671.tgz", + "integrity": "sha512-jocyVaSSfXg2faluE6hrWkMgDOiULBMca4QLtDT39hw1YxaIPHWc1CcTCKkPmHgGH6tKji6ZNbMSmUAvENf2/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "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/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-regexp/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "license": "BSD-2-Clause" + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-indent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", + "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/detect-newline": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", + "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.47", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.47.tgz", + "integrity": "sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", + "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "dev": true, + "license": "MIT", + "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.4", + "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.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@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-next": { + "version": "14.2.7", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.7.tgz", + "integrity": "sha512-ppmy+QdQ7qkuCHGDlPjWaoSbJvjGpWSBD4zEW8f1eWlxYXYpZK7QzBOer1EcHKT3uKhlY1JjUus9g7Kvv712rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "14.2.7", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-turbo": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-2.2.3.tgz", + "integrity": "sha512-/zwNU+G2w0HszXzWILdl6/Catt86ejUG7vsFSdpnFzFAAUbbT2TxgoCFvC1fKtm6+SkQsXwkRRe9tFz0aMftpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-turbo": "2.2.3" + }, + "peerDependencies": { + "eslint": ">6.6.0" + } + }, + "node_modules/eslint-import-resolver-alias": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz", + "integrity": "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + }, + "peerDependencies": { + "eslint-plugin-import": ">=1.4.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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "engines": { + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-eslint-comments/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.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==", + "dev": true, + "license": "MIT", + "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/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jest/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==", + "dev": true, + "license": "MIT", + "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/eslint-plugin-jest/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/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==", + "dev": true, + "license": "BSD-2-Clause", + "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/eslint-plugin-jest/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==", + "dev": true, + "license": "MIT", + "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/eslint-plugin-jest/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==", + "dev": true, + "license": "MIT", + "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/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "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.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-only-warn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.1.0.tgz", + "integrity": "sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-plugin-playwright": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.16.0.tgz", + "integrity": "sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=7", + "eslint-plugin-jest": ">=25" + }, + "peerDependenciesMeta": { + "eslint-plugin-jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/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==", + "dev": true, + "license": "MIT", + "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-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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.4.0.tgz", + "integrity": "sha512-yeWF+YgCgvNyPNI9UKnG0FjeE2sk93N/3lsKqcmR8dSfeXJwFT5irnWo7NjLf152HkRzfoFjh3LsBUrhvFz4eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-testing-library/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==", + "dev": true, + "license": "MIT", + "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/eslint-plugin-testing-library/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-testing-library/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==", + "dev": true, + "license": "BSD-2-Clause", + "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/eslint-plugin-testing-library/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==", + "dev": true, + "license": "MIT", + "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/eslint-plugin-testing-library/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==", + "dev": true, + "license": "MIT", + "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/eslint-plugin-tsdoc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", + "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "0.16.2" + } + }, + "node_modules/eslint-plugin-turbo": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-2.2.3.tgz", + "integrity": "sha512-LHt35VwxthdGVO6hQRfvmFb6ee8/exAzAYWCy4o87Bnp7urltP8qg7xMd4dPSLAhtfnI2xSo1WgeVaR3MeItxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv": "16.0.3" + }, + "peerDependencies": { + "eslint": ">6.6.0" + } + }, + "node_modules/eslint-plugin-unicorn": { + "version": "48.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz", + "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^3.8.0", + "clean-regexp": "^1.0.0", + "esquery": "^1.5.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.5.4", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.44.0" + } + }, + "node_modules/eslint-plugin-unused-imports": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.3.tgz", + "integrity": "sha512-lqrNZIZjFMUr7P06eoKtQLwyVRibvG7N+LtfKtObYGizAAGrcqLkc3tDx+iAik2z7q0j/XI3ihjupIqxhFabFA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/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==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "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/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/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==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "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/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "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==", + "dev": true, + "license": "BSD-2-Clause", + "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==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.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==", + "dev": true, + "license": "ISC", + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.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==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "ISC", + "peer": 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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "license": "ISC", + "peer": true + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "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==", + "dev": true, + "license": "MIT", + "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/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-hooks-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz", + "integrity": "sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "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==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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.", + "dev": true, + "license": "ISC", + "peer": true, + "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==", + "dev": true, + "license": "ISC", + "peer": true + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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-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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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==", + "dev": true, + "license": "CC0-1.0" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "BSD-2-Clause", + "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/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "BlueOak-1.0.0", + "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==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-plugin-packagejson": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.3.tgz", + "integrity": "sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-package-json": "2.10.1", + "synckit": "0.9.2" + }, + "peerDependencies": { + "prettier": ">= 1.16.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "(MIT OR CC0-1.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==", + "dev": true, + "license": "MIT", + "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/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "license": "BSD-2-Clause", + "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==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/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", + "dev": true, + "license": "ISC", + "peer": true, + "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/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "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-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==", + "dev": true, + "license": "MIT", + "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/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "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/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-object-keys": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", + "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sort-package-json": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.10.1.tgz", + "integrity": "sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^7.0.1", + "detect-newline": "^4.0.0", + "get-stdin": "^9.0.0", + "git-hooks-list": "^3.0.0", + "globby": "^13.1.2", + "is-plain-obj": "^4.1.0", + "semver": "^7.6.0", + "sort-object-keys": "^1.1.3" + }, + "bin": { + "sort-package-json": "cli.js" + } + }, + "node_modules/sort-package-json/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-package-json/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "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==", + "dev": true, + "license": "CC-BY-3.0" + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "0BSD" + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/typescript": { + "version": "5.4.5", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/client/packages/eslint-config/package.json b/src/client/packages/eslint-config/package.json new file mode 100644 index 0000000..a3f992e --- /dev/null +++ b/src/client/packages/eslint-config/package.json @@ -0,0 +1,26 @@ +{ + "name": "@repo/eslint-config", + "version": "0.0.0", + "type": "module", + "private": true, + "exports": { + "./base": "./base.js", + "./next-js": "./next.js", + "./react-internal": "./react-internal.js" + }, + "devDependencies": { + "@eslint/js": "^9.17.0", + "@next/eslint-plugin-next": "^15.1.0", + "@typescript-eslint/eslint-plugin": "^8.15.0", + "@typescript-eslint/parser": "^8.15.0", + "eslint": "^9.15.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-only-warn": "^1.1.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-turbo": "^2.3.0", + "globals": "^15.12.0", + "typescript": "^5.3.3", + "typescript-eslint": "^8.15.0" + } +} diff --git a/src/client/packages/eslint-config/react-internal.js b/src/client/packages/eslint-config/react-internal.js new file mode 100644 index 0000000..0cc8b1d --- /dev/null +++ b/src/client/packages/eslint-config/react-internal.js @@ -0,0 +1,39 @@ +import js from "@eslint/js"; +import eslintConfigPrettier from "eslint-config-prettier"; +import tseslint from "typescript-eslint"; +import pluginReactHooks from "eslint-plugin-react-hooks"; +import pluginReact from "eslint-plugin-react"; +import globals from "globals"; +import { config as baseConfig } from "./base.js"; + +/** + * A custom ESLint configuration for libraries that use React. + * + * @type {import("eslint").Linter.Config} */ +export const config = [ + ...baseConfig, + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, + { + languageOptions: { + ...pluginReact.configs.flat.recommended.languageOptions, + globals: { + ...globals.serviceworker, + ...globals.browser, + }, + }, + }, + { + plugins: { + "react-hooks": pluginReactHooks, + }, + settings: { react: { version: "detect" } }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + // React scope no longer necessary with new JSX transform. + "react/react-in-jsx-scope": "off", + }, + }, +]; diff --git a/src/client/packages/store/eslint.config.mjs b/src/client/packages/store/eslint.config.mjs new file mode 100644 index 0000000..3254711 --- /dev/null +++ b/src/client/packages/store/eslint.config.mjs @@ -0,0 +1,33 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { FlatCompat } from "@eslint/eslintrc"; +import js from "@eslint/js"; +import tsParser from "@typescript-eslint/parser"; +import globals from "globals"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +const config = [ + ...compat.extends("@repo/eslint-config/next.js"), + { + languageOptions: { + globals: { + ...globals.jest, + }, + + parser: tsParser, + }, + }, + { + files: ["**/*.ts?(x)"], + }, +]; + +export default config; diff --git a/src/client/packages/store/package.json b/src/client/packages/store/package.json new file mode 100644 index 0000000..bbc7633 --- /dev/null +++ b/src/client/packages/store/package.json @@ -0,0 +1,19 @@ +{ + "name": "@repo/store", + "version": "1.0.0", + "private": true, + "dependencies": { + "@repo/types": "*", + "@reduxjs/toolkit": "2.5.0", + "next-redux-wrapper": "8.1.0" + }, + "exports": { + "./store": "./src/store.ts", + "./StoreProvider": "./src/components/StoreProvider.tsx", + "./hooks/useLocalization": "./src/hooks/useLocalization.ts", + "./slices/settingsSlice": "./src/slices/settingsSlice.ts" + }, + "scripts": { + "lint": "eslint . --max-warnings 0 --cache" + } +} diff --git a/src/client/packages/store/src/components/StoreProvider.tsx b/src/client/packages/store/src/components/StoreProvider.tsx new file mode 100644 index 0000000..46180fa --- /dev/null +++ b/src/client/packages/store/src/components/StoreProvider.tsx @@ -0,0 +1,34 @@ +"use client"; + +import { FC, PropsWithChildren, useCallback, useRef } from "react"; +import { Provider } from "react-redux"; + +import { setLocaleState } from "../slices/settingsSlice"; +import { AppStore, makeStore } from "../store"; + +type StoreProviderProps = PropsWithChildren<{ + lang?: string; +}>; + +export const StoreProvider: FC = ({ lang, children }) => { + /** + * Get the current locale. Uses the browser's locale if available, otherwise defaults to en-US. + * This is used only for state initialization. Use redux selector "selectLocaleState" to get the current locale. + */ + const getLocale = useCallback(() => { + let locale = "en"; + if (navigator) { + locale = navigator.language; + } + return locale; + }, []); + + const storeRef = useRef(null); + if (!storeRef.current) { + // Create the store instance the first time this renders + storeRef.current = makeStore(); + storeRef.current.dispatch(setLocaleState(getLocale())); + } + + return {children}; +}; diff --git a/src/client/packages/store/src/hooks/useLocalization.ts b/src/client/packages/store/src/hooks/useLocalization.ts new file mode 100644 index 0000000..4ef664e --- /dev/null +++ b/src/client/packages/store/src/hooks/useLocalization.ts @@ -0,0 +1,57 @@ +import { useSelector } from "react-redux"; + +import { selectLocaleState } from "../slices/settingsSlice"; + +export enum LOCALES { + en_US = "en-US", + cs_CZ = "cs-CZ", +} + +export const useLocalization = () => { + const currentLocale = useSelector(selectLocaleState); + + /** + * Localize a number or string to the current or specified locale. + * @param value The value to localize. + * @param locale The locale to localize to. Defaults to the current locale. + */ + const localizeValue = (value: string | number, locale?: LOCALES) => { + const targetLocale = locale ?? currentLocale; + return value.toLocaleString(targetLocale); + }; + + /** + * Localize a date to the current or specified locale. + * @param date The date to localize. + * @param locale The locale to localize to. Defaults to the current locale. + */ + const localizeDate = (date: Date, locale?: LOCALES) => { + const targetLocale = locale ?? currentLocale; + return date.toLocaleDateString(targetLocale); + }; + + /** + * Localize a number to a currency in the current or specified locale. + * @param value The value to localize. + * @param currency The currency to localize to. + * @param locale The locale to localize to. Defaults to the current locale. + */ + const localizeCurrency = (value: number = NaN, currency: string = "CZK", locale?: LOCALES) => { + const result = new Intl.NumberFormat(locale ?? currentLocale, { + style: "currency", + currency, + // @ts-ignore + trailingZeroDisplay: "stripIfInteger", + }).format(value); + if (Number.isNaN(value)) { + return result.replace("NaN", ""); + } + return result; + }; + + return { + localizeValue, + localizeDate, + localizeCurrency, + }; +}; diff --git a/src/client/src/store/settingsSlice.ts b/src/client/packages/store/src/slices/settingsSlice.ts similarity index 61% rename from src/client/src/store/settingsSlice.ts rename to src/client/packages/store/src/slices/settingsSlice.ts index 13efea2..6e06a49 100644 --- a/src/client/src/store/settingsSlice.ts +++ b/src/client/packages/store/src/slices/settingsSlice.ts @@ -1,20 +1,24 @@ import { createSlice } from "@reduxjs/toolkit"; -import { LOCALES } from "../localization"; -import { AppState } from "./store"; +// import { LOCALES } from "../localization"; +import { AppState } from "../store"; + +export enum LOCALES { + cs = "cs", + sk = "sk", + en = "en", +} // Type for the state export interface SettingsState { - navbarCollapsedState: boolean; iconThemeState: string; localeState: LOCALES; } // Initial state const initialState: SettingsState = { - navbarCollapsedState: false, iconThemeState: "cosmic", - localeState: LOCALES.en_US, + localeState: LOCALES.cs, }; // Actual Slice @@ -22,9 +26,6 @@ export const settingsSlice = createSlice({ name: "settings", initialState, reducers: { - setNavbarCollapsedState(state, action) { - state.navbarCollapsedState = action.payload; - }, setIconThemeState(state, action) { state.iconThemeState = action.payload; }, @@ -34,9 +35,8 @@ export const settingsSlice = createSlice({ }, }); -export const { setNavbarCollapsedState, setIconThemeState, setLocaleState } = settingsSlice.actions; +export const { setIconThemeState, setLocaleState } = settingsSlice.actions; -export const selectNavbarCollapsedState = (state: AppState) => state.settings.navbarCollapsedState; export const selectIconThemeState = (state: AppState) => state.settings.iconThemeState; export const selectLocaleState = (state: AppState) => state.settings.localeState; diff --git a/src/client/src/store/store.ts b/src/client/packages/store/src/store.ts similarity index 54% rename from src/client/src/store/store.ts rename to src/client/packages/store/src/store.ts index 8665d4f..c6889d3 100644 --- a/src/client/src/store/store.ts +++ b/src/client/packages/store/src/store.ts @@ -1,20 +1,17 @@ import { Action, configureStore, ThunkAction } from "@reduxjs/toolkit"; -import { createWrapper } from "next-redux-wrapper"; -import { newHandlerConfigSlice } from "../partials"; -import { settingsSlice } from "./settingsSlice"; +import { settingsSlice } from "./slices/settingsSlice"; -const makeStore = () => +export const makeStore = () => configureStore({ reducer: { - [newHandlerConfigSlice.name]: newHandlerConfigSlice.reducer, [settingsSlice.name]: settingsSlice.reducer, }, - devTools: true, + devTools: true, // TODO: Disable in production }); export type AppStore = ReturnType; export type AppState = ReturnType; export type AppThunk = ThunkAction; -export const wrapper = createWrapper(makeStore); +// export const wrapper = createWrapper(makeStore); diff --git a/src/client/packages/types/package.json b/src/client/packages/types/package.json new file mode 100644 index 0000000..dedc666 --- /dev/null +++ b/src/client/packages/types/package.json @@ -0,0 +1,11 @@ +{ + "name": "@repo/types", + "version": "1.0.0", + "private": true, + "exports": { + "./AttributeModel": "./src/models/ArticleModel.ts", + "./AttributeChartModel": "./src/models/AttributeChartModel.ts", + "./DataStatModel": "./src/models/DataStatModel.ts", + "./HandlerModel": "./src/models/HandlerModel.ts" + } +} diff --git a/src/client/src/bridge/models/AttributeChart.ts b/src/client/packages/types/src/models/AttributeChartModel.ts similarity index 100% rename from src/client/src/bridge/models/AttributeChart.ts rename to src/client/packages/types/src/models/AttributeChartModel.ts diff --git a/src/client/src/bridge/models/AttributeModel.ts b/src/client/packages/types/src/models/AttributeModel.ts similarity index 64% rename from src/client/src/bridge/models/AttributeModel.ts rename to src/client/packages/types/src/models/AttributeModel.ts index 0ac487e..338f8c4 100644 --- a/src/client/src/bridge/models/AttributeModel.ts +++ b/src/client/packages/types/src/models/AttributeModel.ts @@ -1,4 +1,4 @@ -import { IconName } from "../../components"; +import { IconProps } from "@repo/ui/Icon"; export interface AttributeModel { id: number; @@ -7,10 +7,11 @@ export interface AttributeModel { enabled: boolean; unit?: string; label?: string; - icon?: IconName; + icon?: IconProps["icon"]; data: { handler_name: string; value?: string | number; - status: number; + status: 0 | 1 | 2; + trend: -1 | 0 | 1; }; } diff --git a/src/client/packages/types/src/models/DataStatModel.ts b/src/client/packages/types/src/models/DataStatModel.ts new file mode 100644 index 0000000..3dabffa --- /dev/null +++ b/src/client/packages/types/src/models/DataStatModel.ts @@ -0,0 +1,8 @@ +export interface DataStatModel { + id: number; + attribute: number; + type: string; + value: number; + date: string; + time: string; +} diff --git a/src/client/src/bridge/models/HandlerModel.ts b/src/client/packages/types/src/models/HandlerModel.ts similarity index 86% rename from src/client/src/bridge/models/HandlerModel.ts rename to src/client/packages/types/src/models/HandlerModel.ts index d05e307..512d5ac 100644 --- a/src/client/src/bridge/models/HandlerModel.ts +++ b/src/client/packages/types/src/models/HandlerModel.ts @@ -1,4 +1,4 @@ -import { CustomIconName } from "../../components"; +import { IconProps } from "@repo/ui/Icon"; export enum HandlerStatus { DISCONNECTED, @@ -23,7 +23,7 @@ export interface HandlerAttribute { export interface HandlerTypeModel { type: string; name: string; - icon: CustomIconName; + icon: IconProps["icon"]; configFields?: Record; } @@ -31,6 +31,7 @@ export interface HandlerModel extends HandlerTypeModel { id: number; description: string; status?: HandlerStatus; + last_message?: number; options?: HandlerOptions; attributes?: HandlerAttribute[]; } diff --git a/src/client/packages/typescript-config/base.json b/src/client/packages/typescript-config/base.json new file mode 100644 index 0000000..fea8b62 --- /dev/null +++ b/src/client/packages/typescript-config/base.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "incremental": false, + "isolatedModules": true, + "lib": ["es2022", "DOM", "DOM.Iterable"], + "module": "NodeNext", + "moduleDetection": "force", + "moduleResolution": "Bundler", + "noUncheckedIndexedAccess": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ES2022" + } +} diff --git a/src/client/packages/typescript-config/nextjs.json b/src/client/packages/typescript-config/nextjs.json new file mode 100644 index 0000000..e6defa4 --- /dev/null +++ b/src/client/packages/typescript-config/nextjs.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "plugins": [{ "name": "next" }], + "module": "ESNext", + "moduleResolution": "Bundler", + "allowJs": true, + "jsx": "preserve", + "noEmit": true + } +} diff --git a/src/client/packages/typescript-config/package.json b/src/client/packages/typescript-config/package.json new file mode 100644 index 0000000..27c0e60 --- /dev/null +++ b/src/client/packages/typescript-config/package.json @@ -0,0 +1,9 @@ +{ + "name": "@repo/typescript-config", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/src/client/packages/typescript-config/react-library.json b/src/client/packages/typescript-config/react-library.json new file mode 100644 index 0000000..c3a1b26 --- /dev/null +++ b/src/client/packages/typescript-config/react-library.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "jsx": "react-jsx" + } +} diff --git a/src/client/packages/ui/global.d.ts b/src/client/packages/ui/global.d.ts new file mode 100644 index 0000000..d46824a --- /dev/null +++ b/src/client/packages/ui/global.d.ts @@ -0,0 +1,4 @@ +declare module "*.module.scss" { + const classes: { [key: string]: string }; + export default classes; +} diff --git a/src/client/packages/ui/package.json b/src/client/packages/ui/package.json new file mode 100644 index 0000000..4104d3f --- /dev/null +++ b/src/client/packages/ui/package.json @@ -0,0 +1,42 @@ +{ + "name": "@repo/ui", + "version": "0.0.0", + "type": "module", + "private": true, + "exports": { + "./Button": "./src/components/Button/Button.tsx", + "./Flex": "./src/components/Flex/Flex.tsx", + "./Icon": "./src/components/Icon/Icon.tsx", + "./Input": "./src/components/Input/Input.tsx", + "./Navbar": "./src/components/Navbar/Navbar.tsx", + "./NavbarItem": "./src/components/Navbar/components/NavbarItem/NavbarItem.tsx", + "./NavbarLayout": "./src/components/NavbarLayout/NavbarLayout.tsx", + "./Popup": "./src/components/Popup/Popup.tsx", + "./Separator": "./src/components/Separator/Separator.tsx", + "./Text": "./src/components/Text/Text.tsx", + + "./FlexPartials": "./src/partials/FlexPartials/FlexPartials.tsx", + + "./fonts": "./src/fonts.ts" + }, + "scripts": { + "lint": "eslint . --max-warnings 0", + "generate:component": "turbo gen react-component", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0", + "next": "^15.1.0", + "react-spinners": "0.15.0" + }, + "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*", + "@turbo/gen": "^1.12.4", + "@types/node": "^20.11.24", + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2", + "typescript": "5.5.4" + } +} diff --git a/src/client/packages/ui/src/components/Button/Button.module.scss b/src/client/packages/ui/src/components/Button/Button.module.scss new file mode 100644 index 0000000..cef742b --- /dev/null +++ b/src/client/packages/ui/src/components/Button/Button.module.scss @@ -0,0 +1,200 @@ +@mixin button-default { + --button-text-color: var(--color-mono-light); + --button-border-radius: var(--border-radius-small); + --button-background: var(--color-primary); + --button-font-size: var(--font-size-tiny); + --button-font-weight: var(--font-weight-bold); + --button-box-shadow: var(--box-shadow-button); + --button-border: none; + --button-padding: 13px 36px; + --icon-filter: var(--default-button-icon-filter); + + &:hover { + transform: var(--transform-hover); + filter: brightness(1.1); + backdrop-filter: blur(10px) brightness(1.1); + } + + &:active { + transform: scale(0.98) translateY(2px); + transition: var(--transition-click); + filter: brightness(0.9); + } + + &:disabled { + transform: unset; + filter: grayscale(0.7); + backdrop-filter: none; + } +} + +.button { + display: flex; + align-items: center; + justify-content: center; + padding: var(--button-padding); + transition: var(--transition-default); + border: var(--button-border); + border-radius: var(--button-border-radius); + background: var(--button-background); + box-shadow: var(--button-box-shadow); + color: var(--button-text-color); + font-family: inherit; + font-size: var(--button-font-size); + font-weight: var(--button-font-weight); + text-decoration: none; + cursor: pointer; + gap: 6px; + + --button-box-shadow: unset; + + &:disabled { + cursor: not-allowed; + + &:hover { + transform: unset; + } + } + + &--uppercased { + text-transform: uppercase; + } + + + &--grow { + flex-grow: 1; + + &Mobile { + @media (max-width: 768px) { + flex-grow: 1; + } + } + } + + &--slim { + padding: 13px 15px; + } + + &--variant { + &-default { + @include button-default; + + &:hover { + --button-box-shadow: var(--box-shadow-button-hover); + } + + &:disabled { + box-shadow: unset; + } + } + + &-outline { + @include button-default; + + --button-background: rgb(255 255 255 / 10%); + --button-text-color: var(--color-primary); + --button-box-shadow: inset 0 0 0 3px var(--color-primary), var(--box-shadow-button); + --icon-filter: var(--primary-color-filter); + + &:hover { + --button-box-shadow: + inset 0 0 0 3px var(--color-primary), + var(--box-shadow-button-hover); + } + + &:disabled { + --button-box-shadow: inset 0 0 0 3px var(--color-primary); + } + } + + &-card { + --button-border-radius: 15px; + --button-font-size: 16px; + --button-font-weight: var(--font-weight-medium); + --button-padding: 10px; + + align-items: center; + justify-content: flex-start; + gap: 10px; + + &:hover { + --button-background: var(--color-mono-light); + } + } + + // &-white { + // @include button-theme; + + // background: var(--white); + // color: var(--primary-text); + // } + + // &-outline-white { + // --color-primary: var(--color-mono-light); + // } + + // &-outline-small { + // padding: 12px 20px !important; + // font-size: 13px !important; + // } + + // &-input-control { + // align-self: center; + // margin: 0 10px; + // padding: 0; + // border-radius: 5px; + // background: var(--grey-light); + // box-shadow: 0 0 0 1px var(--color-theme); + + // &:hover { + // transform: unset; + // box-shadow: 0 0 0 1px var(--color-primary); + // filter: brightness(0.95); + // } + // } + + // &-circle-icon { + // align-content: center; + // width: 40px; + // height: 40px; + // border-radius: 100%; + // background: var(--white); + // box-shadow: var(--globals-button-shadow); + // } + + // &-card-active { + // align-items: center; + + // .icon { + // &--variant-button { + // margin-right: 5px; + // padding: 5px; + // border-radius: 20px; + + // img { + // filter: invert(1); + // width: 22px !important; + // height: 22px !important; + // } + // } + // } + // } + } + + // &--active { + // background: var(--color-primary) !important; + // } + + // &--expand { + // width: 100%; + // } + + // &--center { + // margin: auto; + // } + + // &--navbar { + // padding: 13px 32px !important; + // white-space: nowrap; + // } +} diff --git a/src/client/packages/ui/src/components/Button/Button.tsx b/src/client/packages/ui/src/components/Button/Button.tsx new file mode 100644 index 0000000..fe65ada --- /dev/null +++ b/src/client/packages/ui/src/components/Button/Button.tsx @@ -0,0 +1,109 @@ +"use client"; + +import { bemClassNames } from "@repo/utils/bemClassNames"; +import Link from "next/link"; +import { FC, PropsWithChildren, useState } from "react"; +import { ClipLoader } from "react-spinners"; + +import { Icon, IconProps } from "../Icon/Icon"; +import styles from "./Button.module.scss"; + +export type ButtonProps = { + variant?: "default" | "outline" | "card"; + disabled?: boolean; + expand?: boolean; + grow?: boolean; + growMobile?: boolean; + center?: boolean; + active?: boolean; + icon?: IconProps["icon"]; + iconBackground?: IconProps["background"]; + iconInvert?: boolean; + navbar?: boolean; + blank?: boolean; + uppercased?: boolean; + onClick?: string | (() => Promise | void); + afterClick?: () => void; + redirect?: boolean; + slim?: boolean; +}; + +// TODO: Rewrite this with CSS variables? +const getIconVariant = (variant: ButtonProps["variant"]) => { + switch (variant) { + case "card": + return "card"; + default: + return "button"; + } +}; + +const bem = bemClassNames(styles, "button"); + +export const Button: FC> = ({ + variant = "default", + disabled, + expand, + grow, + growMobile, + center, + active, + icon, + iconBackground, + iconInvert, + navbar, + blank, + uppercased = false, + onClick, + afterClick, + redirect, + slim, + children, +}) => { + const Component = typeof onClick === "string" ? (redirect ? "a" : Link) : "button"; + + const href = onClick instanceof Function ? "" : (onClick ?? ""); + const onClickHandler = onClick instanceof Function ? onClick : undefined; + + const [loading, setLoading] = useState(false); + + return ( + { + afterClick?.(); + if (loading || !onClickHandler) { + return; + } + setLoading(true); + setLoading((await onClickHandler()) ?? false); + }} + className={bem({ + variant, + expand, + grow, + center, + active, + navbar, + uppercased, + growMobile, + slim, + })} + {...{ disabled }} + > + {icon && ( + + )} + {loading && } + {children} + + ); +}; diff --git a/src/client/packages/ui/src/components/Flex/Flex.module.scss b/src/client/packages/ui/src/components/Flex/Flex.module.scss new file mode 100644 index 0000000..368e036 --- /dev/null +++ b/src/client/packages/ui/src/components/Flex/Flex.module.scss @@ -0,0 +1,52 @@ +@use "../definition" as d; +@use "../mixins" as m; +@use "../variables" as v; + +.flex { + display: flex; + position: relative; + box-sizing: border-box; + max-width: 100%; + + &--fill { + width: 100%; + height: 100%; + } + + &--variant { + &-popup, + &-card { + @include m.card; + } + } + + &--background { + &-always-dark { + background: var(--color-mono-always-dark); + + --color-mono-light: #{v.$mono-light}; + } + + &-dark { + background: var(--color-mono-dark); + } + + &-light { + background: var(--color-mono-light); + } + + &-white { + background: var(--color-mono-white); + } + } + + @each $key, $value in d.$predefined-block { + &--#{$key} { + @each $item, $item-value in $value { + &-#{$item} { + #{$key}: var(--#{$key}-#{$item}); + } + } + } + } +} diff --git a/src/client/packages/ui/src/components/Flex/Flex.tsx b/src/client/packages/ui/src/components/Flex/Flex.tsx new file mode 100644 index 0000000..5fdbc65 --- /dev/null +++ b/src/client/packages/ui/src/components/Flex/Flex.tsx @@ -0,0 +1,73 @@ +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { Property } from "csstype"; +import { FC, PropsWithChildren } from "react"; + +import styles from "./Flex.module.scss"; + +const bem = bemClassNames(styles); + +export type FlexProps = PropsWithChildren<{ + justifyContent?: Property.JustifyContent; + alignItems?: Property.AlignItems; + alignSelf?: Property.AlignSelf; + direction?: Property.FlexDirection; + wrap?: Property.FlexWrap; + gap?: Property.Gap; + basis?: Property.FlexBasis; + height?: Property.Height; + width?: Property.Width; + maxWidth?: Property.MaxWidth; + grow?: Property.FlexGrow | boolean; + fill?: boolean; + padding?: "content" | "card-content" | "block" | "block-small" | "groupbox"; + margin?: "vertical-large" | "vertical-medium" | "vertical-rem"; + className?: string; + variant?: "card" | "popup"; + background?: "always-dark" | "dark" | "light" | "white"; +}>; + +export const Flex: FC = ({ + justifyContent, + alignItems, + alignSelf, + direction, + wrap, + gap, + basis, + height, + width, + maxWidth, + grow, + fill, + padding, + margin, + className, + variant, + background, + children, + // onClick, + // onWheel, + // onMouseDown, + // onMouseUp, + // onMouseEnter, + // onMouseLeave, +}) => ( +
+ {children} +
+); diff --git a/src/client/packages/ui/src/components/Icon/Icon.module.scss b/src/client/packages/ui/src/components/Icon/Icon.module.scss new file mode 100644 index 0000000..f850e85 --- /dev/null +++ b/src/client/packages/ui/src/components/Icon/Icon.module.scss @@ -0,0 +1,101 @@ +.icon { + transform: var(--icon-transform); + transition: var(--transition-default); + opacity: var(--icon-opacity); + display: inline-block; + + $this: &; + + &__image { + display: block; + align-self: center; + width: 24px; + height: 24px; + filter: var(--icon-filter); + } + + &--invert { + --icon-filter: invert(1); + + &-auto { + --icon-filter: var(--themed-filter); + } + } + + &--active { + --icon-filter: var(--primary-color-filter) !important; + } + + &--disabled { + transform: none; + cursor: not-allowed !important; + filter: none; + } + + &--clickable { + cursor: pointer; + + &:hover { + --icon-transform: scale(1.11); + --icon-filter: brightness(1.2); + --icon-opacity: 0.9; + } + + &:active { + --icon-filter: brightness(0.9); + --icon-transition: var(--transition-click); + } + } + + &--variant { + &-circle { + padding: .6rem; + border-radius: 100%; + background: var(--color-mono-light); + } + + &-small-circle { + --icon-filter: invert(1); + + padding: 5px; + border-radius: 100%; + background: var(--color-primary); + } + + &-primary { + --icon-filter: invert(1) var(--primary-color-filter); + } + + &-card { + padding: 5px; + border-radius: 20px; + + #{$this}__image { + width: 22px !important; + height: 22px !important; + } + } + } + + &--background { + &-primary { + background: var(--color-primary); + } + + &-green { + background: var(--color-green); + } + + &-red { + background: var(--color-red); + } + + &-purple { + background: var(--color-purple); + } + + &-silver { + background: var(--color-silver); + } + } +} diff --git a/src/client/packages/ui/src/components/Icon/Icon.tsx b/src/client/packages/ui/src/components/Icon/Icon.tsx new file mode 100644 index 0000000..7170c6b --- /dev/null +++ b/src/client/packages/ui/src/components/Icon/Icon.tsx @@ -0,0 +1,90 @@ +"use client"; + +// import { useSelector } from "react-redux"; +// import { selectIconThemeState } from "../../store/settingsSlice"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import Image from "next/image"; +import { EventHandler, FC, KeyboardEvent, MouseEvent } from "react"; + +import styles from "./Icon.module.scss"; + +export const getIcon = (icon: string) => { + if (CustomIcons.includes(icon)) { + return `/icons/custom/${icon}.png`; + } + return `/icons/${icon}.svg`; +}; + +export const CustomIcons = ["http", "serial"]; + +export type IconProps = { + icon: + | "arrow-down-square" + | "arrow-maximize" + | "arrow-minimize" + | "arrow-right-down" + | "arrow-right-up" + | "arrow-up-square" + | "branch-horizontal" + | "circle" + | "chart-square" + | "cross-small" + | "grid-mixed" + | "menu" + | "minus" + | "plus" + | "processor" + | "search-trending-up" + | "wrench" + | "zoom-out"; + variant?: "circle" | "small-circle" | "primary" | "card" | "button"; + background?: "primary" | "green" | "red" | "purple" | "silver"; + size?: number; + invert?: boolean | "auto"; + title?: string; + active?: boolean; + disabled?: boolean; + clickable?: boolean; + onClick?: EventHandler; +}; + +const bem = bemClassNames(styles); + +export const Icon: FC = ({ + icon, + size = 24, + variant, + background, + invert = false, + title, + active, + disabled, + clickable, + onClick, +}) => { + return ( +
+ {`${icon} e.key === "Enter" && onClick && onClick(e)} + tabIndex={onClick ? 0 : undefined} + style={{ width: size, height: size }} + /> +
+ ); +}; diff --git a/src/client/packages/ui/src/components/Input/Input.module.scss b/src/client/packages/ui/src/components/Input/Input.module.scss new file mode 100644 index 0000000..852a099 --- /dev/null +++ b/src/client/packages/ui/src/components/Input/Input.module.scss @@ -0,0 +1,102 @@ +@use "sass:map"; +@use "sass:color"; +@use "../definition" as d; + +.input { + $this: &; + + display: flex; + flex-direction: column; + gap: 5px; + min-width: 200px; + + --icon-filter: var(--themed-filter); + + &--grow { + flex-grow: 1; + width: 0; + + &Mobile { + @media (max-width: 768px) { + flex-grow: 1; + } + } + } + + &__wrapper { + display: flex; + position: relative; + flex-grow: 1; + align-items: center; + transition: var(--transition-default); + border-radius: 2rem; + background: var(--color-primary-transparent); + cursor: text; + gap: 12px; + + --icon-opacity: .5; + + &:focus-within { + background: unset; + box-shadow: 0 0 0 3px var(--color-primary) inset; + + --icon-opacity: .8; + } + + &:has(input:invalid) { + background: rgba(map.get(map.get(d.$predefined-text, "color"), "red"), 0.2); + box-shadow: 0 0 0 3px var(--color-red) inset; + + --color-primary: var(--color-red); + + &:focus-within { + background: var(--primary-background); + box-shadow: 0 0 0 3px var(--color-red) inset; + } + } + + &--controls { + padding: 10px 12px; + + --icon-filter: none; + + #{$this}__input { + padding: 0; + } + } + } + + &__input { + flex-grow: 1; + width: 100%; + padding: 12px 25px; + border: none; + outline: transparent; + background: transparent; + color: var(--color-mono-dark); + font-family: inherit; + font-size: var(--font-size-normal); + font-weight: var(--font-weight-medium); + + &[type="pick"] { + appearance: none; + cursor: pointer; + } + } + + &__right-control, + &__left-control { + transition: var(--transition-default); + } + + &__icon { + position: absolute; + right: 1.2rem; + } + + &--hasIcon { + #{$this}__input { + padding-right: 50px; + } + } +} diff --git a/src/client/packages/ui/src/components/Input/Input.test.tsx b/src/client/packages/ui/src/components/Input/Input.test.tsx new file mode 100644 index 0000000..e92a0b9 --- /dev/null +++ b/src/client/packages/ui/src/components/Input/Input.test.tsx @@ -0,0 +1,221 @@ +import "@testing-library/jest-dom"; + +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { Provider } from "react-redux"; +import configureMockStore from "redux-mock-store"; + +import { Input } from "./Input"; + +const mockStore = configureMockStore(); +const store = mockStore({ settings: { localeState: "cs-CZ" } }); +const makeStoreWithLocale = (locale: string) => mockStore({ settings: { localeState: locale } }); + +describe("Input behavior", () => { + const onValueChange = jest.fn(); + const onNumberChange = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("Normal", async () => { + render( + + + , + ); + + const input = screen.getByRole("textbox"); + + // Test that the input is empty by default + expect(input).toHaveValue(""); + expect(onValueChange).toHaveBeenCalledTimes(0); + expect(onNumberChange).toHaveBeenCalledTimes(0); + + // Simulate user typing + await userEvent.type(input, "1234"); + + // Test that the input has the correct value and is not formatted + expect(input).toHaveValue("1234"); + expect(onValueChange).toHaveBeenCalledTimes(4); + expect(onNumberChange).toHaveBeenCalledTimes(0); + }); + + it("Default value", async () => { + render( + + + , + ); + + const input = screen.getByRole("textbox"); + + // Test that the input has the correct default value and is not formatted + expect(input).toHaveValue("1234"); + expect(onValueChange).toHaveBeenCalledTimes(0); + expect(onNumberChange).toHaveBeenCalledTimes(0); + }); + + it("Number", async () => { + render( + + + , + ); + + const input = screen.getByRole("textbox"); + + // Simulate user typing + await userEvent.type(input, "234"); + + // Test that the input has the correct value and is formatted + expect(input).toHaveValue("1 234"); + expect(onValueChange).toHaveBeenCalledTimes(3); + expect(onNumberChange).toHaveBeenCalledTimes(3); + + // Test that control buttons are not rendered by default + const [down, up] = screen.queryAllByRole("img"); + expect(down).toBeUndefined(); + expect(up).toBeUndefined(); + }); + + it("Number with controls", async () => { + render( + + + , + ); + + const input = screen.getByRole("textbox"); + const [down, up] = screen.getAllByRole("img"); + + // Simulate user clicking on the control button + up && (await userEvent.click(up)); + // Test that the input has the correct value and is formatted + expect(input).toHaveValue("1 001"); + + // Simulate user clicking on the control button + down && (await userEvent.click(down)); + // Test that the input has the correct value and is formatted + expect(input).toHaveValue("1 000"); + expect(onValueChange).toHaveBeenCalledTimes(2); + expect(onNumberChange).toHaveBeenCalledTimes(2); + }); + + it("Number with min and max", async () => { + render( + + + , + ); + + const input = screen.getByRole("textbox"); + const [down, up] = screen.getAllByRole("img"); + + await userEvent.type(input, "1234"); + + expect(input).toHaveValue("10"); + // TODO: Optimize calls? + expect(onValueChange).toHaveBeenCalledTimes(4); + expect(onNumberChange).toHaveBeenCalledTimes(4); + + // Simulate user clicking on the control button + up && (await userEvent.click(up)); + // Test that the input value is not changed + expect(input).toHaveValue("10"); + // TODO: Optimize calls? + expect(onValueChange).toHaveBeenCalledTimes(5); + expect(onNumberChange).toHaveBeenCalledTimes(5); + // Simulate user clicking on the control button + down && (await userEvent.click(down)); + // Test that the input value decreased by the step + expect(input).toHaveValue("9"); + expect(onValueChange).toHaveBeenCalledTimes(6); + expect(onNumberChange).toHaveBeenCalledTimes(6); + }); + + it("Number with step", async () => { + render( + + + , + ); + + const input = screen.getByRole("textbox"); + const [down, up] = screen.getAllByRole("img"); + + expect(input).toHaveValue("50"); + expect(onValueChange).toHaveBeenCalledTimes(0); + expect(onNumberChange).toHaveBeenCalledTimes(0); + // Simulate user clicking on the control button + up && (await userEvent.click(up)); + // Test that the input value increased by the step + expect(input).toHaveValue("60"); + expect(onValueChange).toHaveBeenCalledTimes(1); + expect(onNumberChange).toHaveBeenCalledTimes(1); + // Simulate user clicking on the control button + down && (await userEvent.click(down)); + // Test that the input value decreased by the step + expect(input).toHaveValue("50"); + expect(onValueChange).toHaveBeenCalledTimes(2); + expect(onNumberChange).toHaveBeenCalledTimes(2); + }); + + it("Number with postponed change and en-US locale", async () => { + render( + + + , + ); + + const input = screen.getByRole("textbox"); + + // Simulate user typing + await userEvent.type(input, "234"); + + // Test that the input has the correct value and is formatted + expect(input).toHaveValue("1,234"); + expect(onValueChange).toHaveBeenCalledTimes(0); + expect(onNumberChange).toHaveBeenCalledTimes(0); + + // Simulate user clicking outside the input + await userEvent.click(document.body); + + // Test that the input has the correct value and is formatted + expect(input).toHaveValue("1,234"); + expect(onValueChange).toHaveBeenCalledTimes(1); + expect(onNumberChange).toHaveBeenCalledTimes(1); + + // Simulate user typing + await userEvent.type(input, "567"); + + // Test that the input has the correct value and is formatted + expect(input).toHaveValue("1,234,567"); + expect(onValueChange).toHaveBeenCalledTimes(1); + expect(onNumberChange).toHaveBeenCalledTimes(1); + + // Simulate user pressing Enter + await userEvent.type(input, "{enter}"); + + // Test that the input has the correct value and is formatted + expect(input).toHaveValue("1,234,567"); + expect(onValueChange).toHaveBeenCalledTimes(2); + expect(onNumberChange).toHaveBeenCalledTimes(2); + }); +}); diff --git a/src/client/packages/ui/src/components/Input/Input.tsx b/src/client/packages/ui/src/components/Input/Input.tsx new file mode 100644 index 0000000..f3f20a7 --- /dev/null +++ b/src/client/packages/ui/src/components/Input/Input.tsx @@ -0,0 +1,258 @@ +"use client"; + +import { LOCALES, selectLocaleState } from "@repo/store/slices/settingsSlice"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { Property } from "csstype"; +import { FC, HTMLInputTypeAttribute, useCallback, useEffect, useState } from "react"; +import { useSelector } from "react-redux"; + +import { openSans } from "../../fonts"; +import { Icon, IconProps } from "../Icon/Icon"; +import { Text } from "../Text/Text"; +import styles from "./Input.module.scss"; + +const bem = bemClassNames(styles); + +export type InputProps = { + type?: HTMLInputTypeAttribute | "pick" | "long-text"; + value?: string | number; + title?: string; + placeholder?: string; + icon?: IconProps["icon"]; + unit?: string; + required?: boolean; + min?: number; + max?: number; + step?: number; + controls?: boolean; + basis?: Property.FlexBasis; + grow?: boolean; + growMobile?: boolean; + postponedChanged?: boolean; + onValueChange?: (value: string) => void; + onNumberChange?: (value: number) => void; + options?: { name: string; value: string }[]; +}; + +export const Input: FC = ({ + type, + value, + title, + placeholder, + icon, + unit, + required, + min, + max, + step = 1, + controls, + basis, + grow, + growMobile, + postponedChanged, + onValueChange, + onNumberChange, + options, +}) => { + const offsetValue = (offset: number) => { + return processValue( + parseLocalizedFloat(valueState !== "" ? valueState : "0", currentLocale) + offset, + ); + }; + + const processValue = useCallback( + (value: number) => { + if (min !== undefined && value < min) { + return min; + } else if (max && value > max) { + return max; + } else if (isNaN(value)) { + return min ?? 0; + } + + return value; + }, + [max, min], + ); + + const commitNumberValue = (value: number, triggerChangeEvent = false) => { + const formattedValue = formatLocalizedFloat(value, currentLocale); + setValueState(formattedValue); + if (triggerChangeEvent) { + onNumberChange?.(value); + onValueChange?.(formattedValue); + } + }; + + const commitEmptyValue = (triggerChangeEvent = false) => { + setValueState(""); + // onNumberChange?.(0); + if (triggerChangeEvent) { + onValueChange?.(""); + } + }; + + const [valueState, setValueState] = useState(""); + + const currentLocale = useSelector(selectLocaleState); + + useEffect(() => { + let newValue; + if (typeof value === "number") { + newValue = value; + } else { + newValue = processValue(parseLocalizedFloat(value ?? "", currentLocale)); + } + if (type === "number") { + setValueState(formatLocalizedFloat(newValue, currentLocale)); + } else { + setValueState(value?.toString() ?? ""); + } + }, [currentLocale, processValue, type, value]); + + function parseLocalizedFloat(input: string, locale: LOCALES) { + const formatter = new Intl.NumberFormat(locale); + const parts = formatter.formatToParts(1234.5); // Example number to extract separators + + const decimalSeparator = parts.find((part) => part.type === "decimal")?.value || "."; + const groupSeparator = parts.find((part) => part.type === "group")?.value || ","; + + // Replace group separator with nothing and decimal separator with '.' + const normalizedInput = input.split(groupSeparator).join("").split(decimalSeparator).join("."); + + // Parse the normalized number + return parseFloat(normalizedInput); + } + + function formatLocalizedFloat(value: number, locale: LOCALES) { + return new Intl.NumberFormat(locale).format(value); + } + + const Component = type === "long-text" ? "textarea" : type === "pick" ? "select" : "input"; + + return ( + + ); +}; diff --git a/src/client/packages/ui/src/components/Navbar/Navbar.module.scss b/src/client/packages/ui/src/components/Navbar/Navbar.module.scss new file mode 100644 index 0000000..2784636 --- /dev/null +++ b/src/client/packages/ui/src/components/Navbar/Navbar.module.scss @@ -0,0 +1,22 @@ +.navbar { + flex-direction: column; + align-items: center; + background: #fff; + box-sizing: border-box; + gap: 5px; + min-width: 300px; + + @media (max-width: 1000px) { + display: none; + width: 100%; + position: fixed; + height: 100%; + left: 0; + top: 0; + z-index: 100; + } + + &--visible { + display: flex; + } +} diff --git a/src/client/packages/ui/src/components/Navbar/Navbar.tsx b/src/client/packages/ui/src/components/Navbar/Navbar.tsx new file mode 100644 index 0000000..268fea5 --- /dev/null +++ b/src/client/packages/ui/src/components/Navbar/Navbar.tsx @@ -0,0 +1,16 @@ +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { FC, PropsWithChildren } from "react"; + +import styles from "./Navbar.module.scss"; +import { Flex } from "../Flex/Flex"; + +const bem = bemClassNames(styles); + +export type NavbarProps = { + width?: string; + visible?: boolean; +}; + +export const Navbar: FC> = ({ visible = false, children }) => { + return {children}; +}; diff --git a/src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.module.scss b/src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.module.scss new file mode 100644 index 0000000..2f3aa3b --- /dev/null +++ b/src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.module.scss @@ -0,0 +1,22 @@ +.navbar-item { + background: transparent; + text-decoration: none; + color: inherit; + width: 80%; + box-sizing: border-box; + gap: 15px; + padding: 13px 15px; + display: flex; + border-radius: 10px; + align-items: center; + + &--active { + background: var(--color-primary) !important; + color: var(--color-mono-light); + box-shadow: var(--box-shadow-card); + } + + &:hover { + background: var(--color-mono-light); + } +} diff --git a/src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.tsx b/src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.tsx new file mode 100644 index 0000000..3a0f256 --- /dev/null +++ b/src/client/packages/ui/src/components/Navbar/components/NavbarItem/NavbarItem.tsx @@ -0,0 +1,34 @@ +"use client"; + +import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { FC } from "react"; + +import { Text } from "@repo/ui/Text"; +import { Icon, IconProps } from "@repo/ui/Icon"; + +import styles from "./NavbarItem.module.scss"; +import { bemClassNames } from "@repo/utils/bemClassNames"; + +const bem = bemClassNames(styles); + +type NavbarItemProps = { + href: string; + name: string; + icon: IconProps["icon"]; + onClick?: () => void; +}; + +export const NavbarItem: FC = ({ href, name, icon, onClick }) => { + const pathname = usePathname(); + const active = pathname.endsWith(href); + + return ( + + + + {name} + + + ); +}; diff --git a/src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.module.scss b/src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.module.scss new file mode 100644 index 0000000..0a554ac --- /dev/null +++ b/src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.module.scss @@ -0,0 +1,27 @@ +.navbar-layout { + display: flex; + width: 100%; + + &__content { + padding: 2rem; + box-sizing: border-box; + width: 0; + flex-grow: 1; + + @media (max-width: 1000px) { + padding: 1rem; + width: 100%; + } + } + + &__mobile-menu-button { + display: none; + position: absolute; + right: 1rem; + top: .8rem; + + @media (max-width: 1000px) { + display: block; + } + } +} diff --git a/src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.tsx b/src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.tsx new file mode 100644 index 0000000..82ba2be --- /dev/null +++ b/src/client/packages/ui/src/components/NavbarLayout/NavbarLayout.tsx @@ -0,0 +1,60 @@ +"use client"; + +import { FC, PropsWithChildren, useState } from "react"; +import { Flex } from "../Flex/Flex"; +import Image from "next/image"; +import { NavbarItem } from "../Navbar/components/NavbarItem/NavbarItem"; +import { Navbar } from "../Navbar/Navbar"; +import { Icon } from "../Icon/Icon"; + +import styles from "./NavbarLayout.module.scss"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { Column } from "../../partials/FlexPartials/FlexPartials"; +import { useTranslation } from "@repo/utils/useTranslation"; + +export type NavbarLayoutProps = PropsWithChildren; + +const bem = bemClassNames(styles); + +export const NavbarLayout: FC = ({ children }) => { + const { t } = useTranslation(); + const [showNavbar, setShowNavbar] = useState(false); + + const killMenu = () => { + setShowNavbar(false); + }; + + return ( + + + {"Contwatch + + + + + + + {children} + +
+ setShowNavbar(!showNavbar)} icon={"menu"} size={30} /> +
+
+ ); +}; diff --git a/src/client/packages/ui/src/components/Popup/Popup.module.scss b/src/client/packages/ui/src/components/Popup/Popup.module.scss new file mode 100644 index 0000000..d114f74 --- /dev/null +++ b/src/client/packages/ui/src/components/Popup/Popup.module.scss @@ -0,0 +1,27 @@ +.popup { + display: none; + position: fixed; + z-index: 500; + top: 0; + left: 0; + align-items: center; + justify-content: center; + width: 100%; + height: 100dvh; + + --icon-filter: var(--themed-filter); + + &--visible { + display: flex; + } + + &__overlay { + position: absolute; + right: 0; + left: 0; + width: 100%; + height: 100dvh; + background: rgba(0 0 0 / 70%); + backdrop-filter: blur(17px); + } +} diff --git a/src/client/packages/ui/src/components/Popup/Popup.tsx b/src/client/packages/ui/src/components/Popup/Popup.tsx new file mode 100644 index 0000000..3e79bbe --- /dev/null +++ b/src/client/packages/ui/src/components/Popup/Popup.tsx @@ -0,0 +1,64 @@ +import { bemClassNames } from "@repo/utils/bemClassNames"; +import Link from "next/link"; +import { FC, PropsWithChildren } from "react"; + +import { Column } from "../../partials/FlexPartials/FlexPartials"; +import { Flex } from "../Flex/Flex"; +import { Icon } from "../Icon/Icon"; +import { Text } from "../Text/Text"; +import styles from "./Popup.module.scss"; + +const bem = bemClassNames(styles); + +export type PopupProps = { + visible?: boolean; + title?: string; + titleHref?: string; + titleOnClick?: () => void; + onClose?: () => void; +}; + +export const Popup: FC> = ({ + visible, + title, + titleHref, + titleOnClick, + onClose, + children, +}) => { + return ( + visible && ( +
+
+ + +
+ + + {title ? ( + titleHref ? ( + + + {title.toUpperCase()} + + + ) : ( + + {title.toUpperCase()} + + ) + ) : ( + + )} + + + +
+ +
{children}
+
+
+
+ ) + ); +}; diff --git a/src/client/packages/ui/src/components/Separator/Separator.module.scss b/src/client/packages/ui/src/components/Separator/Separator.module.scss new file mode 100644 index 0000000..23f58d2 --- /dev/null +++ b/src/client/packages/ui/src/components/Separator/Separator.module.scss @@ -0,0 +1,11 @@ +.separator { + content: ""; + + &--variant { + &-navbar { + width: 1px; + height: 27px; + background-color: var(--color-primary); + } + } +} diff --git a/src/client/packages/ui/src/components/Separator/Separator.tsx b/src/client/packages/ui/src/components/Separator/Separator.tsx new file mode 100644 index 0000000..d467ef3 --- /dev/null +++ b/src/client/packages/ui/src/components/Separator/Separator.tsx @@ -0,0 +1,17 @@ +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { Property } from "csstype"; +import { FC } from "react"; + +import styles from "./Separator.module.scss"; + +const bem = bemClassNames(styles); + +export type SeparatorProps = { + width?: Property.Width; + height?: Property.Height; + variant?: "navbar"; +}; + +export const Separator: FC = ({ variant, width, height }) => { + return
; +}; diff --git a/src/client/packages/ui/src/components/Text/Text.module.scss b/src/client/packages/ui/src/components/Text/Text.module.scss new file mode 100644 index 0000000..b532350 --- /dev/null +++ b/src/client/packages/ui/src/components/Text/Text.module.scss @@ -0,0 +1,111 @@ +@use "../definition" as d; +@use "sass:math"; + +.text { + font-size: var(--font-size-normal); + + @each $key, $value in d.$predefined-text { + &--#{$key} { + @each $item, $item-value in $value { + &-#{$item} { + #{$key}: var(--#{$key}-#{$item}); + } + } + } + } + + &--uppercase { + text-transform: uppercase; + } + + &--ellipsis { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &--nowrap { + white-space: nowrap; + } + + &--shadow { + text-shadow: 0 0 10px gray; + } + + &--align { + &-center { + margin: auto; + text-align: center; + } + + &-right { + text-align: right; + } + + &-justify { + text-align: justify; + } + } + + &--glitched { + position: relative; + overflow: hidden; + + &::before { + content: attr(data-text); + position: absolute; + left: 1px; + max-width: 100%; + overflow: auto; + animation-name: glitch-animation-1; + animation-duration: 2s; + animation-timing-function: linear; + animation-delay: 0s; + animation-iteration-count: infinite; + text-shadow: -2px 0 red; + white-space: nowrap; + } + + &::after { + content: attr(data-text); + position: absolute; + left: -1px; + max-width: 100%; + overflow: auto; + animation-name: glitch-animation-2; + animation-duration: 2s; + animation-timing-function: linear; + animation-delay: 0s; + animation-iteration-count: infinite; + text-shadow: -2px 0 blue; + white-space: nowrap; + } + } + + @keyframes glitch-animation-1 { + $steps: 20; + @for $i from 0 through $steps { + #{math.percentage(calc($i*(1/$steps)))} { + clip:rect(math.random(150) + px, 100vw, math.random(150) + px, 0) + } + } + } + + @keyframes glitch-animation-2 { + $steps: 20; + @for $i from 0 through $steps { + #{math.percentage(calc($i*(1/$steps)))} { + clip:rect(math.random(150) + px, 100vw, math.random(150) + px, 0) + } + } + } + + //a { + // color: var(--color-primary); + // text-decoration: none; + // + // &:hover { + // text-decoration: underline; + // } + //} +} diff --git a/src/client/packages/ui/src/components/Text/Text.tsx b/src/client/packages/ui/src/components/Text/Text.tsx new file mode 100644 index 0000000..2870977 --- /dev/null +++ b/src/client/packages/ui/src/components/Text/Text.tsx @@ -0,0 +1,70 @@ +"use client"; + +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { Property } from "csstype"; +import Link from "next/link"; +import { FunctionComponent, PropsWithChildren } from "react"; + +import { Font, fontDefinitions } from "../../fonts"; +import styles from "./Text.module.scss"; + +export type TextProps = { + className?: string; + uppercase?: boolean; + color?: "theme" | "mono-dark" | "mono-light" | "primary" | "secondary" | "silver" | "red"; + weight?: "light" | "medium" | "bold" | "black"; + lineHeight?: Property.LineHeight; + align?: Property.TextAlign; + ellipsis?: boolean; + nowrap?: boolean; + shadow?: boolean; + size?: "huge" | "large" | "medium" | "normal" | "small" | "tiny" | "logo"; + font?: Font; + variant?: "logo"; + href?: string; + glitched?: boolean; +}; + +const bem = bemClassNames(styles, "text"); + +export const Text: FunctionComponent> = ({ + className, + uppercase, + color, + weight, + lineHeight, + align, + ellipsis, + nowrap, + shadow, + size, + font = "open-sans", + variant, + href, + glitched, + children, +}) => { + let resultClassName = bem({ + uppercase, + color, + "font-weight": weight, + align, + ellipsis, + nowrap, + shadow, + "font-size": size, + variant, + glitched, + }); + if (className) resultClassName += " " + className; + + if (font) { + resultClassName += " " + fontDefinitions[font].className; + } + + return ( + + {href ? {children} : children} + + ); +}; diff --git a/src/client/packages/ui/src/components/common.scss b/src/client/packages/ui/src/components/common.scss new file mode 100644 index 0000000..5ac3bad --- /dev/null +++ b/src/client/packages/ui/src/components/common.scss @@ -0,0 +1,45 @@ +@use "variables" as v; +@use "definition" as d; + +html { + display: flex; + flex-direction: column; + height: 100%; +} + +body { + margin: 0; + background: #f5f6fa; + color: var(--color-mono-dark); + display: flex; + flex-direction: row; + flex-grow: 1; +} + +:root { + @each $key, $value in d.$predefined-text { + @each $sub-key, $sub-value in $value { + --#{$key}-#{$sub-key}: #{$sub-value}; + } + } + + @each $key, $value in d.$predefined-block { + @each $sub-key, $sub-value in $value { + --#{$key}-#{$sub-key}: #{$sub-value}; + } + } + + --icon-opacity: 0.9; + --body-background: linear-gradient(140deg, #fff7c703 0%, rgb(255 236 209 / 70%) 100%); + --default-button-icon-filter: invert(1); +} + +html[data-theme='dark'] { + --body-background: #121619; + --default-button-icon-filter: unset; + --color-mono-always-dark: #282E32; + --color-mono-dark: #{v.$mono-white}; + --color-mono-light: #{v.$mono-dark}; + --color-mono-white: #1d2225; + --themed-filter: invert(1); +} diff --git a/src/client/packages/ui/src/components/definition.scss b/src/client/packages/ui/src/components/definition.scss new file mode 100644 index 0000000..135ff0f --- /dev/null +++ b/src/client/packages/ui/src/components/definition.scss @@ -0,0 +1,65 @@ +@use "variables" as v; + +$predefined-text: ( + color: ( + "mono-always-dark": v.$mono-dark, + "mono-dark": v.$mono-dark, + "mono-light": v.$mono-light, + "mono-white": v.$mono-white, + "primary": v.$primary, + "primary-transparent": v.$primary-transparent, + "secondary": v.$secondary, + "silver": v.$silver, + "red": v.$red, + "orange": v.$orange, + "green": v.$green, + "theme": var(--color-primary), + ), + font-weight: ( + "light": 300, + "normal": 400, + "medium": 600, + "bold": 700, + "black": 900, + ), + font-size: ( + "tiny": clamp(12px, 1.2vw, 14px), + "small": clamp(15px, 1.4vw, 16px), + "normal": clamp(15px, 1.8vw, 18px), + "medium": clamp(17px, 2.1vw, 22px), + "large": clamp(20px, 2.5vw, 32px), + "huge": clamp(40px, 7vw, 50px), + "logo": clamp(25px, 2.1vw, 30px), + ), +); +$predefined-block: ( + padding: ( + "content": 0 clamp(20px, 6vw, 90px), + "block": clamp(18px, 1.5vw, 25px) clamp(20px, 2.1vw, 32px), + "block-small": 17px 14px, + "card-content": 10px, + "groupbox": 10px, + ), + margin: ( + "vertical-large": clamp(40px, 5vw, 90px) 0, + "vertical-medium": clamp(30px, 2.5vw, 45px) 0, + "vertical-rem": 1rem 0, + ), + border-radius: ( + "small": 10px, + "medium": 25px, + "large": 30px, + ), + box-shadow: ( + "card": 0 0 10px rgb(0 0 0 / 5%), + "button": 4px 4px 10px rgb(0 0 0 / 10%), + "button-hover": 0 0 10px rgb(0 0 0 / 15%), + ), + transform: ( + "hover": scale(1.03), + ), + transition: ( + "default": ease-in-out .1s, + "click": ease-in-out .05s, + ), +); diff --git a/src/client/packages/ui/src/components/mixins.scss b/src/client/packages/ui/src/components/mixins.scss new file mode 100644 index 0000000..592026a --- /dev/null +++ b/src/client/packages/ui/src/components/mixins.scss @@ -0,0 +1,8 @@ +@mixin card { + box-sizing: border-box; + max-width: 100%; + border-radius: var(--border-radius-medium); + background: var(--color-mono-white); + box-shadow: var(--box-shadow-card); + color: var(--color-mono-dark); +} diff --git a/src/client/packages/ui/src/components/variables.scss b/src/client/packages/ui/src/components/variables.scss new file mode 100644 index 0000000..3a5afd7 --- /dev/null +++ b/src/client/packages/ui/src/components/variables.scss @@ -0,0 +1,10 @@ +$mono-dark: #3c3c3b; +$mono-light: #f4f4f4; +$mono-white: #fff; +$primary: #5278ff; +$primary-transparent: #5278ff21; +$secondary: #25c2ff; +$silver: #ababab; +$red: #dc6860; +$orange: #f0a500; +$green: #80dc60; diff --git a/src/client/packages/ui/src/fonts.ts b/src/client/packages/ui/src/fonts.ts new file mode 100644 index 0000000..6c507ee --- /dev/null +++ b/src/client/packages/ui/src/fonts.ts @@ -0,0 +1,22 @@ +import { NextFont } from "next/dist/compiled/@next/font"; +import { Open_Sans, Source_Code_Pro } from "next/font/google"; + +export const openSans = Open_Sans({ + subsets: ["latin"], + display: "swap", + weight: ["300", "400", "500", "600", "700"], + variable: "--font-family-cantarell", +}); + +export const sourceCodePro = Source_Code_Pro({ + subsets: ["latin"], + display: "swap", + variable: "--font-family-source-code-pro", +}); + +export type Font = "open-sans" | "source-code-pro"; + +export const fontDefinitions: Record = { + "open-sans": openSans, + "source-code-pro": sourceCodePro, +}; diff --git a/src/client/packages/ui/src/partials/FlexPartials/FlexPartials.tsx b/src/client/packages/ui/src/partials/FlexPartials/FlexPartials.tsx new file mode 100644 index 0000000..0dd1c9c --- /dev/null +++ b/src/client/packages/ui/src/partials/FlexPartials/FlexPartials.tsx @@ -0,0 +1,15 @@ +import { FC } from "react"; + +import { Flex, FlexProps } from "../../components/Flex/Flex"; + +export const Column: FC = (props) => { + return ; +}; + +export const GroupBox: FC = (props) => { + return ; +}; + +export const Content: FC = (props) => { + return ; +}; diff --git a/src/client/packages/ui/tsconfig.json b/src/client/packages/ui/tsconfig.json new file mode 100644 index 0000000..66c622b --- /dev/null +++ b/src/client/packages/ui/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@repo/typescript-config/react-library.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["global.d.ts", "src"], + "exclude": ["node_modules", "dist"] +} diff --git a/src/client/packages/ui/turbo/generators/config.ts b/src/client/packages/ui/turbo/generators/config.ts new file mode 100644 index 0000000..40100ba --- /dev/null +++ b/src/client/packages/ui/turbo/generators/config.ts @@ -0,0 +1,30 @@ +import type { PlopTypes } from "@turbo/gen"; + +// Learn more about Turborepo Generators at https://turbo.build/repo/docs/core-concepts/monorepos/code-generation + +export default function generator(plop: PlopTypes.NodePlopAPI): void { + // A simple generator to add a new React component to the internal UI library + plop.setGenerator("react-component", { + description: "Adds a new react component", + prompts: [ + { + type: "input", + name: "name", + message: "What is the name of the component?", + }, + ], + actions: [ + { + type: "add", + path: "src/{{kebabCase name}}.tsx", + templateFile: "templates/component.hbs", + }, + { + type: "append", + path: "package.json", + pattern: /"exports": {(?)/g, + template: ' "./{{kebabCase name}}": "./src/{{kebabCase name}}.tsx",', + }, + ], + }); +} diff --git a/src/client/packages/ui/turbo/generators/templates/component.hbs b/src/client/packages/ui/turbo/generators/templates/component.hbs new file mode 100644 index 0000000..d968b9e --- /dev/null +++ b/src/client/packages/ui/turbo/generators/templates/component.hbs @@ -0,0 +1,8 @@ +export const {{ pascalCase name }} = ({ children }: { children: React.ReactNode }) => { + return ( +
+

{{ pascalCase name }} Component

+ {children} +
+ ); +}; diff --git a/src/client/packages/utils/.eslintrc.js b/src/client/packages/utils/.eslintrc.js new file mode 100644 index 0000000..9d6be2c --- /dev/null +++ b/src/client/packages/utils/.eslintrc.js @@ -0,0 +1,10 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@repo/eslint-config/next.js"], + parser: "@typescript-eslint/parser", + overrides: [{ files: ["*.ts?(x)"] }], + env: { + jest: true, + }, +}; diff --git a/src/client/packages/utils/eslint.config.mjs b/src/client/packages/utils/eslint.config.mjs new file mode 100644 index 0000000..3254711 --- /dev/null +++ b/src/client/packages/utils/eslint.config.mjs @@ -0,0 +1,33 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { FlatCompat } from "@eslint/eslintrc"; +import js from "@eslint/js"; +import tsParser from "@typescript-eslint/parser"; +import globals from "globals"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +const config = [ + ...compat.extends("@repo/eslint-config/next.js"), + { + languageOptions: { + globals: { + ...globals.jest, + }, + + parser: tsParser, + }, + }, + { + files: ["**/*.ts?(x)"], + }, +]; + +export default config; diff --git a/src/client/packages/utils/jest.config.ts b/src/client/packages/utils/jest.config.ts new file mode 100644 index 0000000..e0760bb --- /dev/null +++ b/src/client/packages/utils/jest.config.ts @@ -0,0 +1,8 @@ +module.exports = { + preset: "ts-jest", + transform: { + "^.+\\.[tj]sx?$": "babel-jest", + }, + moduleFileExtensions: ["ts", "tsx", "js", "jsx"], + testEnvironment: "jsdom", +}; diff --git a/src/client/packages/utils/package.json b/src/client/packages/utils/package.json new file mode 100644 index 0000000..e6e6659 --- /dev/null +++ b/src/client/packages/utils/package.json @@ -0,0 +1,43 @@ +{ + "name": "@repo/utils", + "version": "0.0.0", + "private": true, + "exports": { + "./swrEndpoints": "./src/hooks/swrEndpoints.ts", + "./useUser": "./src/hooks/useUser.ts", + + "./ssrTranslation": "./src/i18n/index.ts", + "./useTranslation": "./src/i18n/client.ts", + + "./bemClassNames": "./src/bemClassNames.ts", + "./communication": "./src/communication.ts", + "./endpoints": "./src/endpoints.ts", + "./fetchJsonFactory": "./src/fetchJsonFactory.ts", + "./filters": "./src/filters.ts", + "./getApiEndpoint": "./src/getApiEndpoint.ts", + "./pluralizeUnit": "./src/pluralizeUnit.ts" + }, + "scripts": { + "lint": "eslint . --max-warnings 0 --cache", + "test": "jest" + }, + "dependencies": { + "@repo/store": "*", + "@repo/types": "*", + "swr": "2.2.5", + "i18next": "24.2.0", + "i18next-browser-languagedetector": "8.0.2", + "i18next-resources-to-backend": "1.2.1", + "react-cookie": "7.2.2", + "react-i18next": "15.4.0" + }, + "devDependencies": { + "@types/jest": "29.5.14", + "ts-jest": "29.2.5", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "babel-jest": "29.7.0", + "@babel/preset-typescript": "7.26.0", + "@babel/preset-env": "7.26.0" + } +} diff --git a/src/client/packages/utils/src/bemClassNames.test.ts b/src/client/packages/utils/src/bemClassNames.test.ts new file mode 100644 index 0000000..ab79a05 --- /dev/null +++ b/src/client/packages/utils/src/bemClassNames.test.ts @@ -0,0 +1,29 @@ +import { bemClassNames } from "./bemClassNames"; + +describe("Utils", () => { + it("BEM ClassNames", () => { + const styles = { + a: "a#", + "a--c": "a--c#", + "a--c-d": "a--c-d#", + "a--e-f": "a--e-f#", + a__b: "a__b#", + "a__b--c": "a__b--c#", + "a__b--c-d": "a__b--c-d#", + "a__b--e-f": "a__b--e-f#", + }; + const bem = bemClassNames(styles); + for (const row of [ + [[], "a#"], + [["b"], "a__b#"], + [[{ c: true }], "a# a--c#"], + [[{ c: "d" }], "a# a--c-d#"], + [[{ c: "d", e: "f" }], "a# a--c-d# a--e-f#"], + [["b", { c: true }], "a__b# a__b--c#"], + [["b", { c: "d" }], "a__b# a__b--c-d#"], + [["b", { c: "d", e: "f" }], "a__b# a__b--c-d# a__b--e-f#"], + ]) { + expect(bem(row?.[0]?.[0], row?.[0]?.[1])).toBe(row[1]); + } + }); +}); diff --git a/src/client/packages/utils/src/bemClassNames.ts b/src/client/packages/utils/src/bemClassNames.ts new file mode 100644 index 0000000..c72e796 --- /dev/null +++ b/src/client/packages/utils/src/bemClassNames.ts @@ -0,0 +1,38 @@ +export const bemClassNames = (classNamesMap: { [key: string]: string }, target?: string) => { + return (classNameOrModifiers: string | Object = "", modifiers: Object = {}) => { + let blockClassName = ""; + if (typeof classNameOrModifiers === "object") { + modifiers = classNameOrModifiers; + } else { + blockClassName = classNameOrModifiers; + } + let baseClass = target ? target : Object.keys(classNamesMap)[0]; + if (!baseClass) { + return ""; + } + if (blockClassName) { + baseClass += "__" + blockClassName; + } + let resultClassNames = classNamesMap[baseClass]; + for (const modifier of Object.keys(modifiers)) { + const key = modifier as keyof typeof modifiers; + if (!modifiers[key]) { + continue; + } + let newClassName = ""; + if (typeof modifiers[key] === "boolean") { + if (modifiers[key] as unknown as boolean) { + newClassName = classNamesMap[`${baseClass}--${modifier}`] ?? ""; + } + } else if (typeof modifiers[key] === "string") { + newClassName = classNamesMap[`${baseClass}--${modifier}-${modifiers[key]}`] ?? ""; + } else { + newClassName = classNamesMap[`${baseClass}--${modifier}`] ?? ""; + } + if (newClassName) { + resultClassNames += " " + newClassName; + } + } + return resultClassNames; + }; +}; diff --git a/src/client/packages/utils/src/communication.ts b/src/client/packages/utils/src/communication.ts new file mode 100644 index 0000000..f901eaf --- /dev/null +++ b/src/client/packages/utils/src/communication.ts @@ -0,0 +1,36 @@ +export const getJson = (key: string) => jsonFetcher(key).then((response) => response.json()); + +export const jsonFetcher = (key: string, method: "GET" | "POST" | "DELETE" = "GET", payload?: object) => + fetch(key, { + method, + credentials: "include", + headers: { + "Content-Type": "application/json", + "X-CSRFToken": + typeof document !== "undefined" + ? document.cookie.replace(/(?:^|.*;\s*)csrftoken\s*=\s*([^;]*).*$|^.*$/, "$1") + : "", + }, + body: JSON.stringify(payload), + }); + +export const executeRequest = ( + key: string, + method: "POST" | "DELETE" = "POST", + payload: any, + onSuccess?: (response: Response) => void, + onError?: (error: any) => void, +) => { + jsonFetcher(key, method, payload) + .then((response) => { + if (response.ok) { + onSuccess?.(response); + } else { + onError?.(response); + } + }) + .catch((error) => { + onError?.(error); + console.error("Error"); + }); +}; diff --git a/src/client/packages/utils/src/endpoints.ts b/src/client/packages/utils/src/endpoints.ts new file mode 100644 index 0000000..573a726 --- /dev/null +++ b/src/client/packages/utils/src/endpoints.ts @@ -0,0 +1,6 @@ +export enum Endpoint { + attributes = "core/attributes", + attributeChart = "core/charts/attribute", + dataStats = "core/data-stats", + handlers = "core/handlers/all", +} diff --git a/src/client/packages/utils/src/fetchJsonFactory.ts b/src/client/packages/utils/src/fetchJsonFactory.ts new file mode 100644 index 0000000..00d1675 --- /dev/null +++ b/src/client/packages/utils/src/fetchJsonFactory.ts @@ -0,0 +1,11 @@ +export const fetchJsonFactory = + (host: string, port: string, protocol: string) => + async (endpoint: string): Promise => { + const url = `${protocol}://api.${host}:${port}/${endpoint}/`; + // @ts-ignore + const response = await fetch(url, { cache: "force-cache", next: { revalidate: 3600 } }); + if (!response.ok) { + throw new Error(`Failed to fetch ${url}`); + } + return response.json(); + }; diff --git a/src/client/packages/utils/src/getApiEndpoint.test.ts b/src/client/packages/utils/src/getApiEndpoint.test.ts new file mode 100644 index 0000000..b1d9216 --- /dev/null +++ b/src/client/packages/utils/src/getApiEndpoint.test.ts @@ -0,0 +1,16 @@ +import { Endpoint } from "./endpoints"; +import { getApiEndpoint } from "./getApiEndpoint"; + +describe("Bridge - Endpoints", () => { + test("Correct route form", () => { + for (const endpoint of Object.values(Endpoint)) { + expect(endpoint[0] !== "/").toBeTruthy(); + expect(endpoint.slice(-1) !== "/").toBeTruthy(); + } + }); + + test("Correct route generating", () => { + expect(getApiEndpoint(Endpoint.auth)).toBe("/rest/auth/"); + expect(getApiEndpoint(Endpoint.projectTiles)).toBe("/rest/project-tiles/"); + }); +}); diff --git a/src/client/packages/utils/src/getApiEndpoint.ts b/src/client/packages/utils/src/getApiEndpoint.ts new file mode 100644 index 0000000..646d1cb --- /dev/null +++ b/src/client/packages/utils/src/getApiEndpoint.ts @@ -0,0 +1,2 @@ +export const getApiEndpoint = (endpoint: string, suffix: string = "/", prefix: string = "/api") => + `${prefix}/${endpoint}${suffix}`; diff --git a/src/client/packages/utils/src/hooks/swrEndpoints.ts b/src/client/packages/utils/src/hooks/swrEndpoints.ts new file mode 100644 index 0000000..429567f --- /dev/null +++ b/src/client/packages/utils/src/hooks/swrEndpoints.ts @@ -0,0 +1,34 @@ +"use client"; + +import { AttributeModel } from "../../../types/src/models/AttributeModel"; +import useSWR from "swr"; + +import { getJson } from "../communication"; +import { Endpoint } from "../endpoints"; +import { getApiEndpoint } from "../getApiEndpoint"; +import { HandlerModel } from "@repo/types/HandlerModel"; +import { DataStatModel } from "@repo/types/DataStatModel"; +import { AttributeChartModel } from "@repo/types/AttributeChartModel"; + +export const useHandlers = () => { + return useSWR(getApiEndpoint(Endpoint.handlers), getJson); +}; + +export const useAttributes = () => { + return useSWR(getApiEndpoint(Endpoint.attributes), getJson); +}; + +export const useHandlerAttributes = (id: number) => { + return useSWR(getApiEndpoint(Endpoint.attributes, `?handler=${id}`), getJson); +}; + +export const useDataStats = () => { + return useSWR(getApiEndpoint(Endpoint.dataStats), getJson); +}; + +export const useAttributeChart = (attributeIds: number[], date?: string) => { + return useSWR( + `${getApiEndpoint(Endpoint.attributeChart)}/${attributeIds.join(",")}/${attributeIds.length > 0 ? (date ?? "") : ""}`, + getJson, + ); +}; diff --git a/src/client/packages/utils/src/i18n/client.ts b/src/client/packages/utils/src/i18n/client.ts new file mode 100644 index 0000000..b308dd4 --- /dev/null +++ b/src/client/packages/utils/src/i18n/client.ts @@ -0,0 +1,60 @@ +"use client"; + +import { selectLocaleState } from "@repo/store/slices/settingsSlice"; +import i18next from "i18next"; +import LanguageDetector from "i18next-browser-languagedetector"; +import resourcesToBackend from "i18next-resources-to-backend"; +import { useEffect, useState } from "react"; +import { useCookies } from "react-cookie"; +import { initReactI18next, useTranslation as useTranslationOrg } from "react-i18next"; +import { useSelector } from "react-redux"; + +import { cookieName, getOptions, languages } from "./settings"; + +const runsOnServerSide = typeof window === "undefined"; + +i18next + .use(initReactI18next) + .use(LanguageDetector) + .use( + resourcesToBackend( + (language: string, namespace: string) => import(`./locales/${language}/${namespace}.json`), + ), + ) + .init({ + ...getOptions(), + lng: undefined, // let detect the language on client side + detection: { + order: ["htmlTag", "cookie", "navigator"], + }, + preload: runsOnServerSide ? languages : [], + }); + +export function useTranslation(ns: string = getOptions().defaultNS, options: { keyPrefix?: string } = {}) { + const lng = useSelector(selectLocaleState); + const [cookies, setCookie] = useCookies([cookieName]); + const ret = useTranslationOrg(ns, options); + const { i18n } = ret; + if (runsOnServerSide && lng && i18n.resolvedLanguage !== lng) { + i18n.changeLanguage(lng); + } else { + // eslint-disable-next-line react-hooks/rules-of-hooks + const [activeLng, setActiveLng] = useState(i18n.resolvedLanguage); + // eslint-disable-next-line react-hooks/rules-of-hooks + useEffect(() => { + if (activeLng === i18n.resolvedLanguage) return; + setActiveLng(i18n.resolvedLanguage); + }, [activeLng, i18n.resolvedLanguage]); + // eslint-disable-next-line react-hooks/rules-of-hooks + useEffect(() => { + if (!lng || i18n.resolvedLanguage === lng) return; + i18n.changeLanguage(lng); + }, [lng, i18n]); + // eslint-disable-next-line react-hooks/rules-of-hooks + useEffect(() => { + if (cookies.i18next === lng) return; + setCookie(cookieName, lng, { path: "/" }); + }, [lng, cookies.i18next, setCookie]); + } + return ret; +} diff --git a/src/client/packages/utils/src/i18n/index.ts b/src/client/packages/utils/src/i18n/index.ts new file mode 100644 index 0000000..6a8af15 --- /dev/null +++ b/src/client/packages/utils/src/i18n/index.ts @@ -0,0 +1,30 @@ +import { createInstance } from "i18next"; +import resourcesToBackend from "i18next-resources-to-backend"; +import { initReactI18next } from "react-i18next/initReactI18next"; + +import { getOptions } from "./settings"; + +const initI18next = async (lng: string, ns: string) => { + const i18nInstance = createInstance(); + await i18nInstance + .use(initReactI18next) + .use( + resourcesToBackend( + (language: string, namespace: string) => import(`./locales/${language}/${namespace}.json`), + ), + ) + .init(getOptions(lng, ns, getOptions().defaultNS)); + return i18nInstance; +}; + +export async function ssrTranslation( + lng: string, + ns: string = getOptions().defaultNS, + options = { keyPrefix: "" }, +) { + const i18nextInstance = await initI18next(lng, ns); + return { + t: i18nextInstance.getFixedT(lng, Array.isArray(ns) ? ns[0] : ns, options.keyPrefix), + i18n: i18nextInstance, + }; +} diff --git a/src/client/packages/utils/src/i18n/locales/cs/translation.json b/src/client/packages/utils/src/i18n/locales/cs/translation.json new file mode 100644 index 0000000..ae87047 --- /dev/null +++ b/src/client/packages/utils/src/i18n/locales/cs/translation.json @@ -0,0 +1,15 @@ +{ + "Overview": "Přehled", + "Inspector": "Průzkumník", + "Handlers": "Zařízení", + "Actions": "Akce", + "Settings": "Nastavení", + "Data received": "Data přijata", + "Now": "Nyní", + "Never": "Nikdy", + "Handler ID": "ID zařízení", + "Zoom out": "Oddálit", + "Displayed attributes": "Zobrazené atributy", + "New action editor": "Nový editor akcí", + "is currently in development": "je aktuálně ve vývoji" +} diff --git a/src/client/packages/utils/src/i18n/locales/en/translation.json b/src/client/packages/utils/src/i18n/locales/en/translation.json new file mode 100644 index 0000000..6b7bf51 --- /dev/null +++ b/src/client/packages/utils/src/i18n/locales/en/translation.json @@ -0,0 +1,15 @@ +{ + "Overview": "Overview", + "Inspector": "Inspector", + "Handlers": "Handlers", + "Actions": "Actions", + "Settings": "Settings", + "Data received": "Data received", + "Now": "Now", + "Never": "Never", + "Handler ID": "Handler ID", + "Zoom out": "Zoom out", + "Displayed attributes": "Displayed attributes", + "New action editor": "New action editor", + "is currently in development": "is currently in development" +} diff --git a/src/client/packages/utils/src/i18n/settings.ts b/src/client/packages/utils/src/i18n/settings.ts new file mode 100644 index 0000000..ad54130 --- /dev/null +++ b/src/client/packages/utils/src/i18n/settings.ts @@ -0,0 +1,16 @@ +export const fallbackLng = "en"; +export const languages = [fallbackLng, "cs"]; +export const defaultNS = "translation"; +export const cookieName = "i18next"; + +export function getOptions(lng = fallbackLng, ns = defaultNS, fallbackNS = defaultNS) { + return { + // debug: true, + supportedLngs: languages, + fallbackLng, + lng, + fallbackNS, + defaultNS, + ns: [ns, fallbackNS], + }; +} diff --git a/src/client/packages/utils/src/pluralizeUnit.ts b/src/client/packages/utils/src/pluralizeUnit.ts new file mode 100644 index 0000000..00aa5ae --- /dev/null +++ b/src/client/packages/utils/src/pluralizeUnit.ts @@ -0,0 +1,20 @@ +/** + * Returns the correct form of a unit based on the value. + * TODO: Unit test + * @param value The value to be checked + * @param config Configuration object + */ +export default function pluralizeUnit( + value: number, + config: { zero?: string; singular?: string; semiSingular?: string; plural?: string } = {}, +) { + if (value === 0) { + return config.zero || config.plural || config.singular; + } else if (value == 1) { + return config.singular || config.plural; + } else if (value > 1 && value < 5) { + return config.semiSingular || config.plural || config.singular; + } else { + return config.plural || config.semiSingular || config.singular; + } +} diff --git a/src/client/packages/utils/tsconfig.json b/src/client/packages/utils/tsconfig.json new file mode 100644 index 0000000..565a98e --- /dev/null +++ b/src/client/packages/utils/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@repo/typescript-config/react-library.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["global.d.ts", "src"], + "exclude": ["node_modules", "dist"], +} diff --git a/src/client/pages/_app.tsx b/src/client/pages/_app.tsx deleted file mode 100644 index 9fecb89..0000000 --- a/src/client/pages/_app.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import "../styles/main.scss"; - -import type { AppProps } from "next/app"; -import { Provider } from "react-redux"; - -import { StoreInit, wrapper } from "../src/store"; - -function MyApp({ Component, ...rest }: AppProps) { - const { store, props } = wrapper.useWrappedStore(rest); - const { pageProps } = props; - - if (!process.env.NEXT_PUBLIC_API_SERVER_HOST) { - return ( -
-

API server host address or port not set

-

- Use NEXT_PUBLIC_API_SERVER_HOST and NEXT_PUBLIC_API_SERVER_PORT{" "} - variables in .env.local file. -

-
- ); - } - - return ( - - - - - ); -} - -export default MyApp; diff --git a/src/client/pages/actions.tsx b/src/client/pages/actions.tsx deleted file mode 100644 index 9d8060e..0000000 --- a/src/client/pages/actions.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { FlumeConfig, NodeEditor, NodeMap, PortType, PortTypeConfig } from "flume"; -import { NextPage } from "next"; -import { useEffect, useState } from "react"; - -import { fetchNodeMap, saveNodeMap, useAvailableNodes, useAvailablePorts } from "../src/bridge"; -import { NodeModel } from "../src/bridge/modules/actions/models"; -import { ThemedIconName, Toolbar } from "../src/components"; -import { NavbarLayout } from "../src/layouts"; -import { LOC_KEY, useLocalization } from "../src/localization"; - -const addPorts = (config: FlumeConfig, availablePorts: PortTypeConfig[]) => { - availablePorts.forEach((port) => { - config.addPortType(port); - }); -}; - -const addNodes = (config: FlumeConfig, availableNodes: NodeModel[]) => { - availableNodes.forEach((node) => { - config.addNodeType({ - type: node.type, - label: node.label, - description: node.description, - // @ts-ignore flume types don't like this, but it's fine - inputs: (ports) => { - if (node.repeatableInput) { - return (inputData, connections) => { - const result: PortType[] = []; - const repeatableInput = node.inputs.find( - (input) => input.name === node.repeatableInput, - ); - let maximumIndex = -1; - node.inputs.forEach((input) => { - if (input.name !== node.repeatableInput) { - result.push(ports[input.type](input)); - } else { - Object.keys(connections.inputs).forEach((name) => { - result.push( - ports[input.type]({ - ...input, - name: name, - }), - ); - maximumIndex = Math.max(maximumIndex, parseInt(name.split("##")[1])); - }); - } - }); - result.push( - ports[repeatableInput?.type ?? ""]({ - ...repeatableInput, - name: (repeatableInput?.name ?? "") + "##" + (maximumIndex + 1), - }), - ); - return result; - }; - } else { - return node.inputs?.map((port) => ports[port.type](port)) ?? []; - } - }, - outputs: (ports) => node.outputs?.map((port) => ports[port.type](port)) ?? [], - }); - }); -}; - -const Actions: NextPage = () => { - const { localize } = useLocalization(); - const { data: availablePorts } = useAvailablePorts(); - const { data: availableNodes } = useAvailableNodes(); - - const [config, setConfig] = useState(null); - const [nodeMap, setNodeMap] = useState(null); - - const saveNodeMapOnServer = (nodeMap: NodeMap) => { - if (Object.keys(nodeMap).length > 0) { - saveNodeMap(nodeMap); - } - }; - - useEffect(() => { - if (availableNodes && availablePorts) { - const config = new FlumeConfig(); - availablePorts && addPorts(config, availablePorts); - availableNodes && addNodes(config, availableNodes); - setConfig(config); - } - }, [availableNodes, availablePorts]); - - useEffect(() => { - fetchNodeMap().then((nodeMap) => { - setNodeMap(nodeMap); - }); - }, []); - - return ( - - -
- {config && nodeMap && ( - - )} -
-
- ); -}; - -export default Actions; diff --git a/src/client/pages/dashboard.tsx b/src/client/pages/dashboard.tsx deleted file mode 100644 index 973f2d8..0000000 --- a/src/client/pages/dashboard.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { useWidgetSwitches } from "../src/bridge"; -import { useAttributes } from "../src/bridge/modules/attributes"; -import { AttributeWidget, FlexLayout, SwitchWidget, ThemedIconName, Toolbar } from "../src/components"; -import { NavbarLayout } from "../src/layouts"; -import { LOC_KEY, useLocalization } from "../src/localization"; - -const Dashboard = () => { - const { localize } = useLocalization(); - const { data: attributes } = useAttributes(); - const { data: switches } = useWidgetSwitches(); - return ( - - - - {attributes?.map((attribute) => ( - - ))} - - - {switches?.map((widget) => ( - - ))} - - - ); -}; - -export default Dashboard; diff --git a/src/client/pages/handlers.tsx b/src/client/pages/handlers.tsx deleted file mode 100644 index 45b5a59..0000000 --- a/src/client/pages/handlers.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { useState } from "react"; - -import { useAvailableHandlers, useHandlers } from "../src/bridge"; -import { getStatusColor } from "../src/bridge/models/utils"; -import { - FlexLayout, - Menu, - MenuItem, - MenuSection, - Separator, - SeparatorVariant, - ThemedIconName, - Toolbar, -} from "../src/components"; -import { NavbarLayout } from "../src/layouts"; -import { LOC_KEY, useLocalization } from "../src/localization"; -import { Handler, NewHandler } from "../src/partials"; - -const Handlers = () => { - const { localize } = useLocalization(); - const { data: handlers } = useHandlers(); - const { data: availableHandlers } = useAvailableHandlers(); - - const [newHandlerSectionVisible, setNewHandlerSectionVisible] = useState(false); - const [newHandlerType, setNewHandlerType] = useState(null); - const [currentHandlerId, setCurrentHandlerId] = useState(null); - - const newHandler = availableHandlers?.find((handler) => handler.type === newHandlerType); - - const showHandlerInfo = (handlerId: number) => { - setCurrentHandlerId(handlerId); - setNewHandlerType(null); - }; - - const showNewHandler = (handlerType: string) => { - setCurrentHandlerId(null); - setNewHandlerType(handlerType); - }; - - return ( - - - - - - {handlers?.map((handler) => ( - showHandlerInfo(handler.id)} - active={currentHandlerId === handler.id} - /> - ))} - - {!newHandlerSectionVisible && ( - setNewHandlerSectionVisible(true)} - /> - )} - - {newHandlerSectionVisible && ( - - {availableHandlers?.map((handler) => ( - showNewHandler(handler.type)} - /> - ))} - - { - setNewHandlerType(null); - setNewHandlerSectionVisible(false); - }} - /> - - )} - - - {newHandler && } - {currentHandlerId && } - - - - ); -}; - -export default Handlers; diff --git a/src/client/pages/index.tsx b/src/client/pages/index.tsx deleted file mode 100644 index f1ca0d5..0000000 --- a/src/client/pages/index.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { NextPage } from "next"; -import { useRouter } from "next/navigation"; -import { useEffect } from "react"; - -const Index: NextPage = () => { - const router = useRouter(); - useEffect(() => { - router.push("/dashboard"); - }, [router]); - - return <>; -}; - -export default Index; diff --git a/src/client/pages/inspector.tsx b/src/client/pages/inspector.tsx deleted file mode 100644 index 3ea3d1a..0000000 --- a/src/client/pages/inspector.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { useState } from "react"; - -import { useHandlers } from "../src/bridge"; -import { Button, ButtonVariant, FlexLayout, ThemedIconName, Toolbar } from "../src/components"; -import { NavbarLayout } from "../src/layouts"; -import { LOC_KEY, useLocalization } from "../src/localization"; -import { InspectorChart } from "../src/partials/InspectorChart"; - -const Inspector = () => { - const { data: handlers } = useHandlers(); - const { localize } = useLocalization(); - - /** TODO: Store selected attributes in redux */ - const [attributes, setAttributes] = useState([]); - - const onAttributeClick = (id: number) => { - setAttributes((prev) => { - if (prev.includes(id)) { - return prev.filter((item) => item !== id); - } - return [...prev, id]; - }); - }; - - return ( - - - - {handlers?.map( - (handler) => - handler.attributes?.map((attribute) => ( - // - - )), - )} - - - - ); -}; - -export default Inspector; diff --git a/src/client/pages/internal-server-error.tsx b/src/client/pages/internal-server-error.tsx deleted file mode 100644 index 85887b3..0000000 --- a/src/client/pages/internal-server-error.tsx +++ /dev/null @@ -1,5 +0,0 @@ -const InternalServerError = () => { - return

Internal Server Error

; -}; - -export default InternalServerError; diff --git a/src/client/pages/settings.tsx b/src/client/pages/settings.tsx deleted file mode 100644 index 1cc633e..0000000 --- a/src/client/pages/settings.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { InferGetStaticPropsType, NextPage } from "next"; - -import { Card, CardBody, CardHeader, ThemedIconName, Toolbar } from "../src/components"; -import { NavbarLayout } from "../src/layouts"; -import { LOC_KEY, useLocalization } from "../src/localization"; -import { CommonPageProps, getCommonStaticProps } from "../src/ssrUtils"; - -export const getStaticProps = getCommonStaticProps; - -const Settings: NextPage = ({ - appVersion, -}: InferGetStaticPropsType) => { - const { localize } = useLocalization(); - - return ( - - - - - - ContWatch version: {appVersion} - - - - ); -}; - -export default Settings; diff --git a/src/client/public/fonts/Cantarell-Bold.otf b/src/client/public/fonts/Cantarell-Bold.otf deleted file mode 100644 index 1a5954bf95804b81b8bab09818d645ec5c713ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143192 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 BFv|b{ diff --git a/src/client/public/fonts/Cantarell-Light.otf b/src/client/public/fonts/Cantarell-Light.otf deleted file mode 100644 index 5f0fa785b6c5dc8d52e1db6ecdb01fbeb34c35e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141608 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 diff --git a/src/client/public/fonts/Cantarell-Regular.otf b/src/client/public/fonts/Cantarell-Regular.otf deleted file mode 100644 index d92de43dd2414bf40e9e85f0d3b4401aa75e071a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137812 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 N4Vss!WDaJo`vb2Qq$L0V diff --git a/src/client/public/fonts/Cantarell-Thin.otf b/src/client/public/fonts/Cantarell-Thin.otf deleted file mode 100644 index fe5878509edb951be09a3629dee0ffba73535422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140512 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 NWay#aFYhJ=U-oPRh^ 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 - {subtitle &&
{subtitle}
} - - - ); -}; diff --git a/src/client/src/components/Card/components/CardHeader/index.ts b/src/client/src/components/Card/components/CardHeader/index.ts deleted file mode 100644 index 0f559d4..0000000 --- a/src/client/src/components/Card/components/CardHeader/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./CardHeader"; diff --git a/src/client/src/components/Card/components/index.ts b/src/client/src/components/Card/components/index.ts deleted file mode 100644 index 898a306..0000000 --- a/src/client/src/components/Card/components/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./CardBody"; -export * from "./CardHeader"; diff --git a/src/client/src/components/Card/index.ts b/src/client/src/components/Card/index.ts deleted file mode 100644 index 1ac82d6..0000000 --- a/src/client/src/components/Card/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./Card"; -export * from "./components"; diff --git a/src/client/src/components/Card/mixins.scss b/src/client/src/components/Card/mixins.scss deleted file mode 100644 index 2fc3605..0000000 --- a/src/client/src/components/Card/mixins.scss +++ /dev/null @@ -1,11 +0,0 @@ -@mixin card-item { - padding: 30px; - - &:first-child { - padding-bottom: 0; - } - - &:only-child { - padding-bottom: 30px; - } -} diff --git a/src/client/src/components/FlexLayout/FlexLayout.scss b/src/client/src/components/FlexLayout/FlexLayout.scss deleted file mode 100644 index a824568..0000000 --- a/src/client/src/components/FlexLayout/FlexLayout.scss +++ /dev/null @@ -1,13 +0,0 @@ -.flex-layout { - display: flex; - - &--direction { - &-row { - flex-direction: row; - } - - &-column { - flex-direction: column; - } - } -} diff --git a/src/client/src/components/FlexLayout/FlexLayout.tsx b/src/client/src/components/FlexLayout/FlexLayout.tsx deleted file mode 100644 index efc4b95..0000000 --- a/src/client/src/components/FlexLayout/FlexLayout.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { Property } from "csstype"; -import { FunctionComponent, ReactNode } from "react"; - -import { InteractiveProps } from "../../types"; -import { bemClassNames } from "../../utils"; - -const bem = bemClassNames("flex-layout"); - -export type FlexLayoutProps = InteractiveProps & { - justifyContent?: Property.JustifyContent; - alignItems?: Property.AlignItems; - direction?: Property.FlexDirection; - wrap?: Property.FlexWrap; - gap?: Property.Gap; - grow?: boolean; - className?: string; - children: ReactNode; -}; - -export const FlexLayout: FunctionComponent = ({ - justifyContent = "unset", - alignItems, - direction = "row", - wrap, - gap, - grow, - className, - children, - onClick, - onWheel, - onMouseDown, - onMouseUp, - onMouseEnter, - onMouseLeave, -}) => { - let resultClassName = bem(); - if (className) resultClassName += " " + className; - - const flexGrow = grow ? "1" : undefined; - - return ( -
- {children} -
- ); -}; diff --git a/src/client/src/components/FlexLayout/index.ts b/src/client/src/components/FlexLayout/index.ts deleted file mode 100644 index 81c94ac..0000000 --- a/src/client/src/components/FlexLayout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./FlexLayout"; diff --git a/src/client/src/components/Header/Header.scss b/src/client/src/components/Header/Header.scss deleted file mode 100644 index 9bb965c..0000000 --- a/src/client/src/components/Header/Header.scss +++ /dev/null @@ -1,3 +0,0 @@ -.header { - color: $primary-text; -} diff --git a/src/client/src/components/Header/Header.tsx b/src/client/src/components/Header/Header.tsx deleted file mode 100644 index 1d2fad9..0000000 --- a/src/client/src/components/Header/Header.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { FC, ReactNode } from "react"; - -import { bemClassNames } from "../../utils"; - -export enum HeaderSize { - h1 = "h1", - h2 = "h2", - h3 = "h3", - h4 = "h4", -} - -export type HeaderProps = { - children?: ReactNode; - size?: HeaderSize; -}; - -const classNames = bemClassNames("header"); - -export const Header: FC = ({ children, size = HeaderSize.h1 }) => { - const className = classNames({ size: size }); - switch (size) { - case HeaderSize.h1: - return

{children}

; - case HeaderSize.h2: - return

{children}

; - case HeaderSize.h3: - return

{children}

; - case HeaderSize.h4: - return

{children}

; - } -}; diff --git a/src/client/src/components/Header/index.ts b/src/client/src/components/Header/index.ts deleted file mode 100644 index 9e08a64..0000000 --- a/src/client/src/components/Header/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Header"; diff --git a/src/client/src/components/Icon/Icon.scss b/src/client/src/components/Icon/Icon.scss deleted file mode 100644 index a4cf330..0000000 --- a/src/client/src/components/Icon/Icon.scss +++ /dev/null @@ -1,30 +0,0 @@ -.icon { - display: block; - width: 24px; - height: 24px; - opacity: 0.7; - filter: grayscale(1); - - &--invert { - opacity: 1; - filter: grayscale(1) invert(1); - } - - &--clickable { - cursor: pointer; - } - - &--variant { - &-circle { - padding: 7px; - border-radius: 100%; - background: $primary-text-light; - } - - &-button { - width: 22px; - height: 22px; - margin-right: 5px; - } - } -} diff --git a/src/client/src/components/Icon/Icon.tsx b/src/client/src/components/Icon/Icon.tsx deleted file mode 100644 index 998c595..0000000 --- a/src/client/src/components/Icon/Icon.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import Image from "next/image"; -import { FunctionComponent, MouseEventHandler } from "react"; -import { useSelector } from "react-redux"; - -import { selectIconThemeState } from "../../store/settingsSlice"; -import { bemClassNames } from "../../utils"; -import { getIcon, IconName } from "./enums"; - -export enum IconVariant { - circle = "circle", - default = "default", - navbar = "navbar", - button = "button", -} - -export type IconProps = { - icon: IconName; - theme?: string; - variant?: IconVariant; - size?: number; - invert?: boolean; - onClick?: MouseEventHandler; -}; - -const classNames = bemClassNames("icon"); - -export const Icon: FunctionComponent = ({ - icon, - theme, - size = 30, - variant = IconVariant.default, - invert = false, - onClick, -}) => { - const iconTheme = useSelector(selectIconThemeState); - - return ( - {`${icon} - ); -}; diff --git a/src/client/src/components/Icon/enums.ts b/src/client/src/components/Icon/enums.ts deleted file mode 100644 index d9f5346..0000000 --- a/src/client/src/components/Icon/enums.ts +++ /dev/null @@ -1,59 +0,0 @@ -export const getIcon = (icon: IconName, theme: string = "cosmic") => { - if (Object.values(CustomIconName).includes(icon as CustomIconName)) { - return `/icons/custom/${icon}.png`; - } - return `/icons/${theme}/${icon}.svg`; -}; - -export enum ThemedIconName { - air = "air", - arrowCircleLeft = "arrow-circle-left", - arrowCircleRight = "arrow-circle-right", - arrowLeft = "arrow-left", - arrowMaximize = "arrow-maximize", - arrowRight = "arrow-right", - basket = "basket", - batteryMedium = "battery-medium", - box = "cart-3", - branchHorizontal = "branch-horizontal", - calendar = "calendar", - cam = "cam", - capsule = "capsule", - cart = "cart-4", - cast = "cast", - chartSquare = "chart-square", - cloud = "cloud", - coin = "coin", - copy = "copy", - cross = "cross", - crossSmall = "cross-small", - globe = "globe-1", - gridMixed = "grid-mixed", - headphones = "headphones", - home = "home-1", - laptop = "laptop", - location = "location-2", - logout = "logout", - music = "music", - plus = "plus", - plusSmall = "plus-small", - plusCircle = "plus-circle", - power = "power", - print = "print", - processor = "processor", - settings = "settings", - sun = "sun", - smartphone = "smartphone", - user = "user-1", - wallet = "wallet", -} - -export enum CustomIconName { - battery = "battery", - http = "http", - inverter = "inverter", - logo = "logo", - serial = "serial", -} - -export type IconName = ThemedIconName | CustomIconName; diff --git a/src/client/src/components/Icon/index.ts b/src/client/src/components/Icon/index.ts deleted file mode 100644 index f3a7d8a..0000000 --- a/src/client/src/components/Icon/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./enums"; -export * from "./Icon"; diff --git a/src/client/src/components/Input/Input.scss b/src/client/src/components/Input/Input.scss deleted file mode 100644 index d233a19..0000000 --- a/src/client/src/components/Input/Input.scss +++ /dev/null @@ -1,36 +0,0 @@ -@import "./mixins"; - -.input-wrapper { - $this: &; - - display: block; - padding: 9px 10px 10px; - border-radius: 7px; - background: $primary-text-light; - - &__title { - display: inline-block; - margin-bottom: 3px; - transition: all 100ms ease-in-out; - opacity: 0.6; - color: $blue; - font-size: 12px; - font-weight: 700; - text-transform: uppercase; - } - - &__input-element, - &__select-element { - @extend %input; - } - - &:focus-within { - box-shadow: inset 0 0 0 1px $blue; - - #{$this}__title, - #{$this}__input-element, - #{$this}__select-element { - opacity: 1; - } - } -} diff --git a/src/client/src/components/Input/Input.tsx b/src/client/src/components/Input/Input.tsx deleted file mode 100644 index 8825919..0000000 --- a/src/client/src/components/Input/Input.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { FC, HTMLInputTypeAttribute, MutableRefObject, useState } from "react"; - -import { bemClassNames } from "../../utils"; - -const classNames = bemClassNames("input-wrapper"); - -export type InputProps = { - type?: HTMLInputTypeAttribute | "pick"; - placeholder?: string; - value?: string | boolean; - name?: string; - innerRef?: MutableRefObject; - min?: number; - step?: number; - onValueChange?: (value: string | boolean) => void; - onDateChange?: (date: Date | null) => void; -}; - -export const Input: FC = ({ - type = "text", - placeholder = "", - value = "", - name, - innerRef, - min, - step, - onValueChange, - onDateChange, -}) => { - const [valueState, setValueState] = useState(value); - - return ( -
- { - if (type === "datetime-local") { - setValueState(e.target.value); - onDateChange?.(e.target.valueAsDate); - } else if (type === "checkbox") { - setValueState(e.target.checked); - onValueChange?.(e.target.checked); - } else { - setValueState(e.target.value); - onValueChange?.(e.target.value); - } - }} - {...{ type, placeholder, name, min, step }} - /> -
- ); -}; diff --git a/src/client/src/components/Input/index.ts b/src/client/src/components/Input/index.ts deleted file mode 100644 index be66d76..0000000 --- a/src/client/src/components/Input/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Input"; diff --git a/src/client/src/components/Input/mixins.scss b/src/client/src/components/Input/mixins.scss deleted file mode 100644 index 708b2a5..0000000 --- a/src/client/src/components/Input/mixins.scss +++ /dev/null @@ -1,14 +0,0 @@ -%input { - box-sizing: border-box; - width: 100%; - padding: 0; - transition: all 100ms ease-in-out; - border: none; - outline: none; - opacity: 0.7; - background: transparent; - color: $blue; - font-family: $font-cantarell; - font-size: 15px; - font-weight: 600; -} diff --git a/src/client/src/components/InputRenderer/InputRenderer.scss b/src/client/src/components/InputRenderer/InputRenderer.scss deleted file mode 100644 index 892b5a9..0000000 --- a/src/client/src/components/InputRenderer/InputRenderer.scss +++ /dev/null @@ -1,5 +0,0 @@ -.input-renderer { - &__label { - @include subtitle; - } -} diff --git a/src/client/src/components/InputRenderer/InputRenderer.tsx b/src/client/src/components/InputRenderer/InputRenderer.tsx deleted file mode 100644 index ecdc478..0000000 --- a/src/client/src/components/InputRenderer/InputRenderer.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { FC } from "react"; - -import { bemClassNames } from "../../utils"; -import { FlexLayout } from "../FlexLayout"; -import { Input } from "../Input"; - -const bem = bemClassNames("input-renderer"); - -export type InputRendererProps = { - name: string; - type: string; - title: string; - value?: string | boolean; - onValueChange?: (value: string | boolean) => void; -}; - -export const InputRenderer: FC = ({ name, type, title, value, onValueChange }) => { - return ( - - - {type === "string" && } - {type === "bool" && } - {type === "float" && } - {type === "int" && } - - ); -}; diff --git a/src/client/src/components/InputRenderer/index.ts b/src/client/src/components/InputRenderer/index.ts deleted file mode 100644 index 9aed710..0000000 --- a/src/client/src/components/InputRenderer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./InputRenderer"; diff --git a/src/client/src/components/LinkButton/LinkButton.tsx b/src/client/src/components/LinkButton/LinkButton.tsx deleted file mode 100644 index 5519a8e..0000000 --- a/src/client/src/components/LinkButton/LinkButton.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { useRouter } from "next/navigation"; -import { FunctionComponent } from "react"; - -import { Button, ButtonProps, ButtonType, ButtonVariant } from "../Button"; - -export type LinkButtonProps = Omit & { - href?: string; -}; - -export const LinkButton: FunctionComponent = ({ - variant = ButtonVariant.default, - expand, - grow, - href, - active, - icon, - children, -}) => { - const router = useRouter(); - - return ( - - ); -}; diff --git a/src/client/src/components/LinkButton/index.ts b/src/client/src/components/LinkButton/index.ts deleted file mode 100644 index 6287dc8..0000000 --- a/src/client/src/components/LinkButton/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./LinkButton"; diff --git a/src/client/src/components/Loc/Loc.tsx b/src/client/src/components/Loc/Loc.tsx deleted file mode 100644 index 9880d12..0000000 --- a/src/client/src/components/Loc/Loc.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { FC } from "react"; -import { useSelector } from "react-redux"; - -import { LOC_KEY, useLocalization } from "../../localization"; -import { selectLocaleState } from "../../store/settingsSlice"; - -export type LocProps = { - children: LOC_KEY; -}; - -export const Loc: FC = ({ children }) => { - const { localize } = useLocalization(); - const locale = useSelector(selectLocaleState); - return localize(children, locale); -}; diff --git a/src/client/src/components/Loc/index.ts b/src/client/src/components/Loc/index.ts deleted file mode 100644 index b26982d..0000000 --- a/src/client/src/components/Loc/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Loc"; diff --git a/src/client/src/components/Menu/Menu.scss b/src/client/src/components/Menu/Menu.scss deleted file mode 100644 index f6ab6df..0000000 --- a/src/client/src/components/Menu/Menu.scss +++ /dev/null @@ -1,11 +0,0 @@ -@import "./components/MenuItem/MenuItem"; -@import "./components/MenuSection/MenuSection"; - -.menu { - box-sizing: border-box; - max-width: 350px; - height: 100%; - padding: 2rem; - border-radius: 2rem; - background: $white; -} diff --git a/src/client/src/components/Menu/Menu.tsx b/src/client/src/components/Menu/Menu.tsx deleted file mode 100644 index c998c96..0000000 --- a/src/client/src/components/Menu/Menu.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { FC, ReactNode } from "react"; - -import { bemClassNames } from "../../utils"; -import { FlexLayout } from "../FlexLayout"; - -const bem = bemClassNames("menu"); - -export type MenuComponentProps = { - children?: ReactNode; -}; - -export const Menu: FC = ({ children }) => { - return ( - - {children} - - ); -}; diff --git a/src/client/src/components/Menu/components/MenuItem/MenuItem.scss b/src/client/src/components/Menu/components/MenuItem/MenuItem.scss deleted file mode 100644 index 3a25522..0000000 --- a/src/client/src/components/Menu/components/MenuItem/MenuItem.scss +++ /dev/null @@ -1,51 +0,0 @@ -.menu-item { - align-items: center; - padding: 12px 15px; - border-radius: 10px; - background: $primary-text-light; - cursor: pointer; - - &:hover { - background: $grey-eee; - } - - &__title { - font-size: 15px; - font-weight: bold; - } - - &__description { - font-size: 13px; - } - - &__color-flag { - box-sizing: border-box; - width: 8px; - height: 100%; - border-radius: 10px; - - &--color { - &-green { - background: #80dc60; - } - - &-red { - background: #dc6860; - } - - &-orange { - background: #f0a500; - } - } - } - - &--active { - @include active; - - color: white; - - &:hover { - background: $blue; - } - } -} diff --git a/src/client/src/components/Menu/components/MenuItem/MenuItem.tsx b/src/client/src/components/Menu/components/MenuItem/MenuItem.tsx deleted file mode 100644 index b279a99..0000000 --- a/src/client/src/components/Menu/components/MenuItem/MenuItem.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { FC } from "react"; - -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; -import { Icon, IconName } from "../../../Icon"; - -const bem = bemClassNames("menu-item"); - -export type AbstractComponentProps = { - title: string; - description?: string; - active?: boolean; - icon?: IconName; - colorFlag?: string; - onClick?: () => void; -}; - -export const MenuItem: FC = ({ - title, - description, - icon, - colorFlag, - active, - onClick, -}) => { - return ( - - {icon && } - -
{title}
- {description &&
{description}
} -
-
- - ); -}; diff --git a/src/client/src/components/Menu/components/MenuItem/index.ts b/src/client/src/components/Menu/components/MenuItem/index.ts deleted file mode 100644 index 3df96e8..0000000 --- a/src/client/src/components/Menu/components/MenuItem/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./MenuItem"; diff --git a/src/client/src/components/Menu/components/MenuSection/MenuSection.scss b/src/client/src/components/Menu/components/MenuSection/MenuSection.scss deleted file mode 100644 index 5be303d..0000000 --- a/src/client/src/components/Menu/components/MenuSection/MenuSection.scss +++ /dev/null @@ -1,16 +0,0 @@ -.menu-section { - &__header { - margin-bottom: 10px; - } - - &__title { - margin: 0; - font-size: 18px; - } - - &__description { - margin: 0; - font-size: 14px; - font-weight: normal; - } -} diff --git a/src/client/src/components/Menu/components/MenuSection/MenuSection.tsx b/src/client/src/components/Menu/components/MenuSection/MenuSection.tsx deleted file mode 100644 index 3e76b83..0000000 --- a/src/client/src/components/Menu/components/MenuSection/MenuSection.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { FC, ReactNode } from "react"; - -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; - -const bem = bemClassNames("menu-section"); - -export type MenuSectionProps = { - title: string; - description: string; - children?: ReactNode; -}; - -export const MenuSection: FC = ({ title, description, children }) => { - return ( - -
-

{title}

-

{description}

-
- {children} -
- ); -}; diff --git a/src/client/src/components/Menu/components/MenuSection/index.ts b/src/client/src/components/Menu/components/MenuSection/index.ts deleted file mode 100644 index 7bb2647..0000000 --- a/src/client/src/components/Menu/components/MenuSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./MenuSection"; diff --git a/src/client/src/components/Menu/components/index.ts b/src/client/src/components/Menu/components/index.ts deleted file mode 100644 index cdb49b2..0000000 --- a/src/client/src/components/Menu/components/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./MenuItem"; -export * from "./MenuSection"; diff --git a/src/client/src/components/Menu/index.ts b/src/client/src/components/Menu/index.ts deleted file mode 100644 index 114fc23..0000000 --- a/src/client/src/components/Menu/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./components"; -export * from "./Menu"; diff --git a/src/client/src/components/Navbar/Navbar.scss b/src/client/src/components/Navbar/Navbar.scss deleted file mode 100644 index 7688a7b..0000000 --- a/src/client/src/components/Navbar/Navbar.scss +++ /dev/null @@ -1,25 +0,0 @@ -@import "./components/NavbarItem/NavbarItem"; -@import "./components/NavbarLogo/NavbarLogo"; -@import "./components/NavbarUser/NavbarUser"; - -.navbar { - box-sizing: border-box; - min-width: $navbar-max-width; - height: 100vh; - padding: 2rem 0; - background: $white; - - &__header { - height: 150px; - } - - &__items { - flex-grow: 1; - height: 100%; - } - - &--collapsed { - min-width: $navbar-width-collapsed; - transition: ease-in-out 200ms; - } -} diff --git a/src/client/src/components/Navbar/Navbar.tsx b/src/client/src/components/Navbar/Navbar.tsx deleted file mode 100644 index a529b5a..0000000 --- a/src/client/src/components/Navbar/Navbar.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { FunctionComponent, ReactNode } from "react"; - -import { bemClassNames } from "../../utils"; -import { FlexLayout } from "../"; - -export type NavbarProps = { - // collapsed?: boolean; - // user?: User; - children: ReactNode; -}; - -const classNames = bemClassNames("navbar"); - -export const Navbar: FunctionComponent = ({ children }) => { - return ( - - {children} - - ); -}; diff --git a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss deleted file mode 100644 index 273c45b..0000000 --- a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.scss +++ /dev/null @@ -1,23 +0,0 @@ -.navbar-item { - width: 70%; - margin: 5px 0 0; - padding: 13px 15px; - border-radius: 10px; - background: $white; - font-weight: bold; - cursor: pointer; - - &:hover { - background: $primary-background; - } - - &--active { - background: $blue; - box-shadow: $primary-shadow-box; - color: $white; - - &:hover { - background: $blue; - } - } -} diff --git a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx b/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx deleted file mode 100644 index b19549b..0000000 --- a/src/client/src/components/Navbar/components/NavbarItem/NavbarItem.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { usePathname, useRouter } from "next/navigation"; -import { FC } from "react"; -import { useSelector } from "react-redux"; - -import { LOC_KEY } from "../../../../localization"; -import { selectNavbarCollapsedState } from "../../../../store/settingsSlice"; -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; -import { Icon, ThemedIconName } from "../../../Icon"; -import { Loc } from "../../../Loc"; - -const bem = bemClassNames("navbar-item"); - -export type NavbarItemProps = { - locKey: LOC_KEY; - icon: ThemedIconName; - href: string; -}; - -export const NavbarItem: FC = ({ locKey, icon, href }) => { - const navbarCollapsed = useSelector(selectNavbarCollapsedState); - const pathName = usePathname(); - const router = useRouter(); - const active = pathName.startsWith(href); - return ( - { - if (href) router.push(href); - }} - alignItems="center" - gap="16px" - > - - {!navbarCollapsed && {locKey}} - - ); -}; diff --git a/src/client/src/components/Navbar/components/NavbarItem/index.ts b/src/client/src/components/Navbar/components/NavbarItem/index.ts deleted file mode 100644 index 4cde3a3..0000000 --- a/src/client/src/components/Navbar/components/NavbarItem/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./NavbarItem"; diff --git a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss deleted file mode 100644 index 8156d56..0000000 --- a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.scss +++ /dev/null @@ -1,3 +0,0 @@ -.navbar-logo { - margin: 25px auto; -} diff --git a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx b/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx deleted file mode 100644 index 7e60838..0000000 --- a/src/client/src/components/Navbar/components/NavbarLogo/NavbarLogo.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { FC } from "react"; - -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; -import { CustomIconName, Icon } from "../../../Icon"; - -export type NavbarLogoProps = {}; - -const classNames = bemClassNames("navbar-logo"); - -export const NavbarLogo: FC = () => { - return ( - - - - ); -}; diff --git a/src/client/src/components/Navbar/components/NavbarLogo/index.ts b/src/client/src/components/Navbar/components/NavbarLogo/index.ts deleted file mode 100644 index 31b96e6..0000000 --- a/src/client/src/components/Navbar/components/NavbarLogo/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./NavbarLogo"; diff --git a/src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx b/src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx deleted file mode 100644 index 92f5af6..0000000 --- a/src/client/src/components/Navbar/components/NavbarSection/NavbarSection.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { FC, ReactNode } from "react"; - -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; - -const bem = bemClassNames("navbar-section"); - -export type NavbarSectionProps = { - grow?: boolean; - children: ReactNode; -}; - -export const NavbarSection: FC = ({ children, grow }) => { - return ( - - {children} - - ); -}; diff --git a/src/client/src/components/Navbar/components/NavbarSection/index.ts b/src/client/src/components/Navbar/components/NavbarSection/index.ts deleted file mode 100644 index 89894f5..0000000 --- a/src/client/src/components/Navbar/components/NavbarSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./NavbarSection"; diff --git a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss deleted file mode 100644 index 9d74c0b..0000000 --- a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.scss +++ /dev/null @@ -1,19 +0,0 @@ -.navbar-user { - $border: solid 1px $primary-text-light; - - margin: 5px 15px 5px 20px; - padding: 20px 0; - border-top: $border; - gap: 12px; - - &__name { - color: $grey-333; - font-size: 14px; - font-weight: bold; - } - - &__email { - color: $grey-555; - font-size: 12px; - } -} diff --git a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx b/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx deleted file mode 100644 index 241fb33..0000000 --- a/src/client/src/components/Navbar/components/NavbarUser/NavbarUser.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { FunctionComponent } from "react"; - -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; -import { Icon, IconVariant, ThemedIconName } from "../../../Icon"; - -export type NavbarUserProps = { - userName: string; - email: string; - // picture?: string; - collapsed: boolean; -}; - -const classNames = bemClassNames("navbar-user"); - -export const NavbarUser: FunctionComponent = ({ userName, email, collapsed }) => { - return ( - - - {!collapsed && ( - -
{userName}
-
{email}
-
- )} -
- ); -}; diff --git a/src/client/src/components/Navbar/components/NavbarUser/index.ts b/src/client/src/components/Navbar/components/NavbarUser/index.ts deleted file mode 100644 index ec4b499..0000000 --- a/src/client/src/components/Navbar/components/NavbarUser/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./NavbarUser"; diff --git a/src/client/src/components/Navbar/components/index.ts b/src/client/src/components/Navbar/components/index.ts deleted file mode 100644 index 7a9592b..0000000 --- a/src/client/src/components/Navbar/components/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./NavbarItem"; -export * from "./NavbarLogo"; -export * from "./NavbarSection"; -export * from "./NavbarUser"; diff --git a/src/client/src/components/Navbar/index.ts b/src/client/src/components/Navbar/index.ts deleted file mode 100644 index 07f2783..0000000 --- a/src/client/src/components/Navbar/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./components"; -export * from "./Navbar"; diff --git a/src/client/src/components/Separator/Separator.scss b/src/client/src/components/Separator/Separator.scss deleted file mode 100644 index 676151d..0000000 --- a/src/client/src/components/Separator/Separator.scss +++ /dev/null @@ -1,7 +0,0 @@ -.separator { - &--variant { - &-menu { - height: 0; - } - } -} diff --git a/src/client/src/components/Separator/Separator.tsx b/src/client/src/components/Separator/Separator.tsx deleted file mode 100644 index 59ca96a..0000000 --- a/src/client/src/components/Separator/Separator.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { FC } from "react"; - -import { bemClassNames } from "../../utils"; - -const bem = bemClassNames("separator"); - -export enum SeparatorVariant { - menu = "menu", -} - -export type SeparatorProps = { - variant: SeparatorVariant; -}; - -export const Separator: FC = ({ variant }) => { - return
; -}; diff --git a/src/client/src/components/Separator/index.ts b/src/client/src/components/Separator/index.ts deleted file mode 100644 index 4060cb5..0000000 --- a/src/client/src/components/Separator/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Separator"; diff --git a/src/client/src/components/Toolbar/Toolbar.scss b/src/client/src/components/Toolbar/Toolbar.scss deleted file mode 100644 index fa89bf6..0000000 --- a/src/client/src/components/Toolbar/Toolbar.scss +++ /dev/null @@ -1,33 +0,0 @@ -.toolbar { - display: flex; - box-sizing: border-box; - align-items: center; - height: 4rem; - padding: 1rem; - border-radius: 4rem; - background-color: $white; - gap: .8rem; - - &__icon-plate { - display: block; - padding: .5rem; - border-radius: 2rem; - background: $blue; - box-shadow: $primary-shadow-box; - } - - &__header { - display: flex; - flex-direction: column; - } - - &__title { - margin: 0; - font-size: 1.2rem; - } - - &__description { - margin: 0; - font-size: 14px; - } -} diff --git a/src/client/src/components/Toolbar/Toolbar.tsx b/src/client/src/components/Toolbar/Toolbar.tsx deleted file mode 100644 index 58e6aa2..0000000 --- a/src/client/src/components/Toolbar/Toolbar.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { ReactNode } from "react"; - -import { bemClassNames } from "../../utils"; -import { Icon, IconName } from "../Icon"; - -const bem = bemClassNames("toolbar"); - -type ToolbarProps = { - icon?: IconName; - title?: string; - description?: string; - children?: ReactNode; -}; - -export const Toolbar = ({ icon, title, description, children }: ToolbarProps) => { - return ( -
-
{icon && }
- {(title || description) && ( -
- {title &&

{title}

} - {description &&

{description}

} -
- )} - {children} -
- ); -}; diff --git a/src/client/src/components/Toolbar/index.ts b/src/client/src/components/Toolbar/index.ts deleted file mode 100644 index 8364e21..0000000 --- a/src/client/src/components/Toolbar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Toolbar"; diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss deleted file mode 100644 index 734ba61..0000000 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.scss +++ /dev/null @@ -1,51 +0,0 @@ -.attribute-widget { - display: flex; - flex-grow: 1; - flex-wrap: wrap; - align-items: center; - max-width: 400px; - padding: 10px 12px; - border-radius: 10px; - background: $white; - gap: 10px; - - $this: &; - - &__text-body { - flex-grow: 1; - } - - &__title { - font-weight: bold; - } - - &__description { - font-size: 13px; - } - - &__value { - padding: 5px 15px; - border-radius: 10px; - background: $primary-background; - font-size: 21px; - font-weight: bold; - white-space: nowrap; - } - - &__unit { - font-size: 18px; - font-weight: normal; - } - - &--disabled { - color: $grey-999; - - .icon { - opacity: 0.3; - } - - #{$this}__value { - display: none; - } - } -} diff --git a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx b/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx deleted file mode 100644 index ca22fd4..0000000 --- a/src/client/src/components/Widget/AttributeWidget/AttributeWidget.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { FC } from "react"; - -import { bemClassNames } from "../../../utils"; -import { Icon, IconName } from "../../Icon"; - -const bem = bemClassNames("attribute-widget"); - -export type AttributeWidgetProps = { - title: string; - description: string; - icon?: IconName; - status: number; - unit?: string; - value?: string | number | boolean; -}; - -export const AttributeWidget: FC = ({ - title, - description, - icon, - status, - unit, - value, -}) => { - return ( -
- {icon && } -
-
{title}
-
{description}
-
- {value !== null && value !== undefined && ( -
- {value} {unit} -
- )} -
- ); -}; diff --git a/src/client/src/components/Widget/AttributeWidget/index.ts b/src/client/src/components/Widget/AttributeWidget/index.ts deleted file mode 100644 index 1404dd0..0000000 --- a/src/client/src/components/Widget/AttributeWidget/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./AttributeWidget"; diff --git a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss deleted file mode 100644 index 402ec63..0000000 --- a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.scss +++ /dev/null @@ -1,74 +0,0 @@ -.switch-widget { - display: flex; - flex-grow: 1; - flex-wrap: wrap; - align-items: center; - max-width: 400px; - padding: 10px 12px; - transition: all 0.2s ease-in-out; - border-radius: 10px; - background: $white; - cursor: pointer; - gap: 10px; - - &__text-body { - flex-grow: 1; - } - - &__title { - font-weight: bold; - } - - &__description { - font-size: 13px; - } - - $this: &; - - &__toggle { - position: relative; - width: 60px; - height: 33px; - transition: all 0.2s ease-in-out; - border-radius: 50px; - background: $primary-background; - - &::after { - content: ''; - display: block; - position: relative; - top: 4px; - left: 4px; - width: 25px; - height: 25px; - transition: all 0.2s ease-in-out; - border-radius: 50%; - background: $grey-ddd; - } - } - - &--active { - background: #5278FF; - color: $white; - - #{$this} { - &__toggle { - background: #333C62; - } - - &__toggle::after { - left: 30px; - background: $white; - } - } - } - - &--disabled { - color: $grey-999; - cursor: not-allowed; - - .icon { - opacity: 0.3; - } - } -} diff --git a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx b/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx deleted file mode 100644 index bd5b8c5..0000000 --- a/src/client/src/components/Widget/SwitchWidget/SwitchWidget.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { FC } from "react"; -import { useSWRConfig } from "swr"; - -import { toggleWidgetSwitch } from "../../../bridge"; -import { Endpoint, getApiEndpoint } from "../../../bridge/endpoints"; -import { bemClassNames } from "../../../utils"; -import { Icon, IconName } from "../../Icon"; - -const bem = bemClassNames("switch-widget"); - -export type SwitchWidget = { - id: number; - title: string; - description: string; - icon: IconName; - status: number; - active: boolean; -}; - -export const SwitchWidget: FC = ({ id, title, description, icon, status, active }) => { - const { mutate } = useSWRConfig(); - - const toggleSwitch = (active: boolean) => { - toggleWidgetSwitch(id, active, () => { - mutate(getApiEndpoint(Endpoint.widgetSwitches)); - }); - }; - - return ( -
toggleSwitch(!active)}> - -
-
{title}
-
{description}
-
-
-
- ); -}; diff --git a/src/client/src/components/Widget/SwitchWidget/index.ts b/src/client/src/components/Widget/SwitchWidget/index.ts deleted file mode 100644 index 6903088..0000000 --- a/src/client/src/components/Widget/SwitchWidget/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./SwitchWidget"; diff --git a/src/client/src/components/Widget/Widget.scss b/src/client/src/components/Widget/Widget.scss deleted file mode 100644 index 7d7d33f..0000000 --- a/src/client/src/components/Widget/Widget.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import "./AttributeWidget/AttributeWidget"; -@import "./SwitchWidget/SwitchWidget"; diff --git a/src/client/src/components/Widget/index.ts b/src/client/src/components/Widget/index.ts deleted file mode 100644 index e751a46..0000000 --- a/src/client/src/components/Widget/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./AttributeWidget"; -export * from "./SwitchWidget"; diff --git a/src/client/src/components/components.scss b/src/client/src/components/components.scss deleted file mode 100644 index 9be5829..0000000 --- a/src/client/src/components/components.scss +++ /dev/null @@ -1,12 +0,0 @@ -@import "Button/Button"; -@import "Card/Card"; -@import "FlexLayout/FlexLayout"; -@import "Header/Header"; -@import "Icon/Icon"; -@import "Input/Input"; -@import "InputRenderer/InputRenderer"; -@import "Menu/Menu"; -@import "Navbar/Navbar"; -@import "Separator/Separator"; -@import "Toolbar/Toolbar"; -@import "Widget/Widget"; diff --git a/src/client/src/components/index.ts b/src/client/src/components/index.ts deleted file mode 100644 index 32c5800..0000000 --- a/src/client/src/components/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from "./BooleanSwitcher"; -export * from "./Button"; -export * from "./Card"; -export * from "./FlexLayout"; -export * from "./Header"; -export * from "./Icon"; -export * from "./Input"; -export * from "./InputRenderer"; -export * from "./LinkButton"; -export * from "./Loc"; -export * from "./Menu"; -export * from "./Navbar"; -export * from "./Separator"; -export * from "./Toolbar"; -export * from "./Widget"; diff --git a/src/client/src/layouts/NavbarLayout/NavbarLayout.scss b/src/client/src/layouts/NavbarLayout/NavbarLayout.scss deleted file mode 100644 index d19dc3f..0000000 --- a/src/client/src/layouts/NavbarLayout/NavbarLayout.scss +++ /dev/null @@ -1,15 +0,0 @@ -.navbar-layout { - display: flex; - position: relative; - max-height: 100dvh; - - &__content { - position: relative; - z-index: 0; - box-sizing: border-box; - flex-grow: 1; - max-height: 100%; - padding: 2rem; - overflow: auto; - } -} diff --git a/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx b/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx deleted file mode 100644 index 218f9f7..0000000 --- a/src/client/src/layouts/NavbarLayout/NavbarLayout.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { FunctionComponent, ReactNode } from "react"; - -import { FlexLayout, Navbar, NavbarItem, NavbarLogo, NavbarSection, ThemedIconName } from "../../components"; -import { LOC_KEY } from "../../localization"; -import { bemClassNames } from "../../utils"; - -const bem = bemClassNames("navbar-layout"); - -const navbarTopItems = [ - { locKey: LOC_KEY.DASHBOARD, href: "/dashboard", icon: ThemedIconName.gridMixed }, - { locKey: LOC_KEY.INSPECTOR, href: "/inspector", icon: ThemedIconName.chartSquare }, - { locKey: LOC_KEY.HANDLERS, href: "/handlers", icon: ThemedIconName.processor }, - { locKey: LOC_KEY.ACTIONS, href: "/actions", icon: ThemedIconName.branchHorizontal }, -]; - -const navbarBottomItems = [ - { locKey: LOC_KEY.SETTINGS, href: "/settings", icon: ThemedIconName.settings }, - // { locKey: LOC_KEY.LOGOUT, href: "/logout", icon: ThemedIconName.logout }, -]; - -export type NavbarLayoutProps = { - children: ReactNode; -}; - -export const NavbarLayout: FunctionComponent = ({ children }) => { - return ( - - - - - - - {navbarTopItems.map((item) => ( - - ))} - - - {navbarBottomItems.map((item) => ( - - ))} - - - - {children} - - - ); -}; diff --git a/src/client/src/layouts/NavbarLayout/index.ts b/src/client/src/layouts/NavbarLayout/index.ts deleted file mode 100644 index 3a74c2b..0000000 --- a/src/client/src/layouts/NavbarLayout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./NavbarLayout"; diff --git a/src/client/src/layouts/index.ts b/src/client/src/layouts/index.ts deleted file mode 100644 index 3a74c2b..0000000 --- a/src/client/src/layouts/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./NavbarLayout"; diff --git a/src/client/src/layouts/layouts.scss b/src/client/src/layouts/layouts.scss deleted file mode 100644 index 72098ba..0000000 --- a/src/client/src/layouts/layouts.scss +++ /dev/null @@ -1 +0,0 @@ -@import "./NavbarLayout/NavbarLayout"; diff --git a/src/client/src/localization/database.ts b/src/client/src/localization/database.ts deleted file mode 100644 index 7398c45..0000000 --- a/src/client/src/localization/database.ts +++ /dev/null @@ -1,80 +0,0 @@ -export enum LOCALES { - en_US = "en-US", - cs_CZ = "cs-CZ", -} - -export enum LOCALE_NAMES { - "en-US" = "English", - "cs-CZ" = "Čeština", -} - -export const enum LOC_KEY { - LOGIN = "login", - LOGOUT = "logout", - DASHBOARD = "dashboard", - INSPECTOR = "inspector", - HANDLERS = "handlers", - ACTIONS = "actions", - SETTINGS = "settings", - DASHBOARD_INFO = "dashboardInfo", - INSPECTOR_INFO = "inspectorInfo", - HANDLERS_INFO = "handlersInfo", - ACTIONS_INFO = "actionsInfo", - HANDLERS_DESCRIPTION = "handlersDescription", - SETTINGS_INFO = "settingsInfo", -} - -export const LOC_KEY_DATABASE: Record> = { - login: { - "en-US": "Login", - "cs-CZ": "Přihlásit", - }, - logout: { - "en-US": "Logout", - "cs-CZ": "Odhlásit", - }, - dashboard: { - "en-US": "Dashboard", - "cs-CZ": "Přehled", - }, - inspector: { - "en-US": "Inspector", - "cs-CZ": "Průzkumník", - }, - handlers: { - "en-US": "Handlers", - "cs-CZ": "Zařízení", - }, - actions: { - "en-US": "Actions", - "cs-CZ": "Akce", - }, - settings: { - "en-US": "Settings", - "cs-CZ": "Nastavení", - }, - dashboardInfo: { - "en-US": "All important information in one place", - "cs-CZ": "Všechny důležité informace na jednom místě", - }, - inspectorInfo: { - "en-US": "Advanced data and visualizations", - "cs-CZ": "Podrobná data a vizualizace", - }, - handlersInfo: { - "en-US": "Manage your devices", - "cs-CZ": "Spravujte svá zařízení", - }, - actionsInfo: { - "en-US": "Setup custom rules and actions", - "cs-CZ": "Nastavte si vlastní pravidla a akce", - }, - settingsInfo: { - "en-US": "Manage ContWatch configuration", - "cs-CZ": "Spravujte nastavení ContWatch", - }, - handlersDescription: { - "en-US": "Your configured devices", - "cs-CZ": "Vaše nakonfigurovaná zařízení", - }, -}; diff --git a/src/client/src/localization/hooks.ts b/src/client/src/localization/hooks.ts deleted file mode 100644 index 4334a6d..0000000 --- a/src/client/src/localization/hooks.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { useSelector } from "react-redux"; - -import { selectLocaleState } from "../store/settingsSlice"; -import { LOC_KEY, LOC_KEY_DATABASE, LOCALES } from "./database"; - -export const useLocalization = () => { - const currentLocale = useSelector(selectLocaleState); - - /** - * Translate a LOC_KEY to a string in the current or specified locale. - * @param locKey The LOC_KEY to translate. - * @param locale The locale to translate to. Defaults to the current locale. - */ - const localize = (locKey: LOC_KEY, locale?: LOCALES) => { - const targetLocale = locale ?? currentLocale; - const loadedTranslation = LOC_KEY_DATABASE[locKey]; - if (loadedTranslation) { - return loadedTranslation[targetLocale] ?? loadedTranslation["en-US"]; - } else { - return locKey; - } - }; - - return { - localize, - }; -}; diff --git a/src/client/src/localization/index.ts b/src/client/src/localization/index.ts deleted file mode 100644 index a21659f..0000000 --- a/src/client/src/localization/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./database"; -export * from "./hooks"; diff --git a/src/client/src/partials/Handler/Handler.scss b/src/client/src/partials/Handler/Handler.scss deleted file mode 100644 index 02d9295..0000000 --- a/src/client/src/partials/Handler/Handler.scss +++ /dev/null @@ -1,91 +0,0 @@ -.handler { - min-width: 400px; - - &__texts { - flex-grow: 1; - } - - &__icon { - display: flex; - padding: 10px; - border-radius: 100%; - - &--color { - &-red { - background: $primary-disconnected; - } - - &-green { - background: $primary-connected; - } - } - } - - &__title { - margin: 0; - } - - &__description { - margin: 0; - font-size: 14px; - } - - &__status-button { - padding: 10px; - border-radius: 10px; - - &-title { - color: $white; - font-size: 15px; - font-weight: bold; - text-transform: uppercase; - } - - &-description { - padding: 0 10px; - color: $white; - font-size: 12px; - } - - &--color { - &-red { - background: $primary-disconnected; - } - - &-green { - background: $primary-connected; - } - } - } - - &__subtitle { - @include subtitle; - } - - &__attribute { - flex-grow: 1; - padding: 10px; - border-radius: 10px; - background: $primary-text-light; - - &:hover { - background: $grey-eee; - cursor: pointer; - } - - &-name { - flex-grow: 1; - margin-right: 6px; - font-weight: bold; - } - - &-value { - padding: 2px 6px; - border-radius: 6px; - background: $blue; - color: $white; - font-size: 14px; - font-weight: bold; - } - } -} diff --git a/src/client/src/partials/Handler/Handler.tsx b/src/client/src/partials/Handler/Handler.tsx deleted file mode 100644 index 1653df3..0000000 --- a/src/client/src/partials/Handler/Handler.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { FC } from "react"; - -import { useHandler } from "../../bridge"; -import { getStatusColor } from "../../bridge/models/utils"; -import { Button, ButtonVariant, Card, CardBody, FlexLayout, Icon, ThemedIconName } from "../../components"; -import { bemClassNames } from "../../utils"; - -const bem = bemClassNames("handler"); - -export type HandlerProps = { - id: number; -}; - -export const Handler: FC = ({ id }) => { - const { data: handler } = useHandler(id); - - return ( - - {handler && ( - - -
- -
- -

{handler.name}

-

{handler.description}

-
- {/**/} - {/* */} - {/* {getStatusText(handler.status)}*/} - {/* */} - {/* */} - {/* {`Click to ${*/} - {/* handler.status === HandlerStatus.DISABLED ? "enable" : "disable"*/} - {/* } handler`}*/} - {/* */} - {/*
*/} - - - - {handler.attributes && handler.attributes.length > 0 && ( - <> -

Stored attributes:

- - {handler.attributes?.map((attribute) => ( - - {attribute.name} - {attribute.value} - - ))} - - - )} -
-
- )} -
- ); -}; diff --git a/src/client/src/partials/Handler/index.ts b/src/client/src/partials/Handler/index.ts deleted file mode 100644 index 70bcf3f..0000000 --- a/src/client/src/partials/Handler/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Handler"; diff --git a/src/client/src/partials/InspectorChart/InspectorChart.tsx b/src/client/src/partials/InspectorChart/InspectorChart.tsx deleted file mode 100644 index 74b74d5..0000000 --- a/src/client/src/partials/InspectorChart/InspectorChart.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import "chartjs-adapter-date-fns"; - -import { - CategoryScale, - Chart, - Legend, - LinearScale, - LineElement, - PointElement, - TimeScale, - Title, - Tooltip, -} from "chart.js"; -import { FC, useEffect, useRef, useState } from "react"; -import { Line } from "react-chartjs-2"; - -import { useAttributeChart } from "../../bridge"; -import { Button, ButtonVariant, FlexLayout, ThemedIconName } from "../../components"; -import { bemClassNames } from "../../utils"; -import { options } from "./chartOptions"; - -Chart.register(CategoryScale, LinearScale, TimeScale, PointElement, LineElement, Title, Tooltip, Legend); - -const bem = bemClassNames("inspector-chart"); - -type InspectorChartProps = { - attributes?: number[]; -}; - -export const InspectorChart: FC = ({ attributes = [] }) => { - const ref = useRef(null); - - const [fullScreen, setFullScreen] = useState(false); - - // Loading the zoom plugin only on client side, because it doesn't support SSR - useEffect(() => { - if (typeof window !== "undefined") - import("chartjs-plugin-zoom").then((zoomPlugin) => { - Chart.register(zoomPlugin.default); - }); - }, []); - - // Reset zoom on attributes change - useEffect(() => { - ref?.current?.resetZoom?.(); - }, [attributes]); - - const { data: attributeChartData } = useAttributeChart(attributes.sort()); - - const data = { - datasets: - attributeChartData?.map((attributeChart) => ({ - label: attributeChart.label, - data: attributeChart.data.map((data) => ({ - x: data.x * 1000, - y: data.y, - })), - borderColor: "#5278FF", - })) ?? [], - }; - - return ( - data.datasets.length > 0 && ( -
- - -
- ) - ); -}; diff --git a/src/client/src/partials/InspectorChart/index.ts b/src/client/src/partials/InspectorChart/index.ts deleted file mode 100644 index 1e2e0c7..0000000 --- a/src/client/src/partials/InspectorChart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./InspectorChart"; diff --git a/src/client/src/partials/NewHandler/NewHandler.scss b/src/client/src/partials/NewHandler/NewHandler.scss deleted file mode 100644 index 9a402e8..0000000 --- a/src/client/src/partials/NewHandler/NewHandler.scss +++ /dev/null @@ -1,17 +0,0 @@ -.new-handler { - &__icon { - @include active; - - display: flex; - padding: 10px; - border-radius: 10px; - } - - &__description { - @include subtitle; - } - - &__title { - margin: 0; - } -} diff --git a/src/client/src/partials/NewHandler/NewHandler.tsx b/src/client/src/partials/NewHandler/NewHandler.tsx deleted file mode 100644 index c70c967..0000000 --- a/src/client/src/partials/NewHandler/NewHandler.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { FC, useCallback, useEffect } from "react"; -import { useDispatch, useSelector } from "react-redux"; -import { useSWRConfig } from "swr"; - -import { addHandler } from "../../bridge"; -import { Endpoint, getApiEndpoint } from "../../bridge/endpoints"; -import { HandlerTypeModel } from "../../bridge/models"; -import { Button, Card, CardBody, FlexLayout, Icon, InputRenderer, ThemedIconName } from "../../components"; -import { bemClassNames } from "../../utils"; -import { - resetNewHandler, - selectConfig, - selectLabel, - setConfigField, - setLabel, -} from "./newHandlerConfigSlice"; - -const bem = bemClassNames("new-handler"); - -export const NewHandler: FC = ({ type, name, icon, configFields }) => { - const dispatch = useDispatch(); - const newHandlerConfig = useSelector(selectConfig); - const newHandlerLAbel = useSelector(selectLabel); - const { mutate } = useSWRConfig(); - - const clearNewHandler = useCallback(() => { - dispatch(resetNewHandler()); - }, [dispatch]); - - useEffect(() => { - console.log("Hey, input mounted"); - if (configFields) { - for (const field of Object.keys(configFields)) { - dispatch( - setConfigField({ - fieldName: field, - fieldValue: configFields[field][2], - }), - ); - } - } - }, [configFields, dispatch]); - - return ( - - - - -
- -
- -

Create new handler for

-

{name}

-
-
- - { - console.log(value); - dispatch(setLabel(value)); - }} - /> - {configFields && - Object.keys(configFields).map((field) => ( - { - console.log(value); - dispatch( - setConfigField({ - fieldName: field, - fieldValue: value, - }), - ); - }} - /> - ))} - - -
-
-
- ); -}; diff --git a/src/client/src/partials/NewHandler/index.ts b/src/client/src/partials/NewHandler/index.ts deleted file mode 100644 index 00d4df9..0000000 --- a/src/client/src/partials/NewHandler/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./NewHandler"; -export * from "./newHandlerConfigSlice"; diff --git a/src/client/src/partials/NewHandler/newHandlerConfigSlice.ts b/src/client/src/partials/NewHandler/newHandlerConfigSlice.ts deleted file mode 100644 index 5498b38..0000000 --- a/src/client/src/partials/NewHandler/newHandlerConfigSlice.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { createSlice } from "@reduxjs/toolkit"; - -import { AppState } from "../../store"; - -export interface newHandlerConfigState { - config: Record; - label: string | undefined; -} - -const initialState: newHandlerConfigState = { - config: {}, - label: undefined, -}; - -export const newHandlerConfigSlice = createSlice({ - name: "newHandlerConfig", - initialState, - reducers: { - setConfigField(state, action) { - state.config[action.payload.fieldName] = action.payload.fieldValue; - }, - resetNewHandler(state) { - state.config = {}; - state.label = undefined; - }, - setLabel(state, action) { - state.label = action.payload; - }, - }, -}); - -export const { setConfigField, resetNewHandler, setLabel } = newHandlerConfigSlice.actions; - -export const selectConfig = (state: AppState) => state.newHandlerConfig.config; - -export const selectLabel = (state: AppState) => state.newHandlerConfig.label; - -export default newHandlerConfigSlice.reducer; diff --git a/src/client/src/partials/index.ts b/src/client/src/partials/index.ts deleted file mode 100644 index 0325120..0000000 --- a/src/client/src/partials/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./Handler"; -export * from "./NewHandler"; diff --git a/src/client/src/partials/partials.scss b/src/client/src/partials/partials.scss deleted file mode 100644 index f8d5192..0000000 --- a/src/client/src/partials/partials.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import "./Handler/Handler"; -@import "./InspectorChart/InspectorChart"; -@import "./NewHandler/NewHandler"; diff --git a/src/client/src/ssrUtils.ts b/src/client/src/ssrUtils.ts deleted file mode 100644 index 837a345..0000000 --- a/src/client/src/ssrUtils.ts +++ /dev/null @@ -1,28 +0,0 @@ -import getConfig from "next/config"; - -/** - * Returns the version of the project. - * Use only in server-side code. - */ -export const getAppVersion = () => { - const { serverRuntimeConfig } = getConfig(); - return serverRuntimeConfig.appVersion || ""; -}; - -/** - * Props that are common for all pages. - */ -export type CommonPageProps = { - appVersion: string; -}; - -/** - * Returns common static props for all pages. - */ -export const getCommonStaticProps = (): { props: CommonPageProps } => { - return { - props: { - appVersion: getAppVersion(), - }, - }; -}; diff --git a/src/client/src/store/StoreInit.tsx b/src/client/src/store/StoreInit.tsx deleted file mode 100644 index 8d1bdbe..0000000 --- a/src/client/src/store/StoreInit.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { FC, useCallback, useEffect } from "react"; -import { useDispatch } from "react-redux"; - -import { setLocaleState } from "./settingsSlice"; - -export type StoreInitProps = {}; - -export const StoreInit: FC = ({}) => { - const dispatch = useDispatch(); - - /** - * Get the current locale. Uses the browser's locale if available, otherwise defaults to en-US. - * This is used only for state initialization. Use redux selector "selectLocaleState" to get the current locale. - */ - const getLocale = useCallback(() => { - let locale = "en-US"; - if (navigator) { - locale = navigator.language; - } - if (locale === "cs") { - locale += "-CZ"; - } - return locale; - }, []); - - useEffect(() => { - dispatch(setLocaleState(getLocale())); - }, [dispatch, getLocale]); - - return <>; -}; diff --git a/src/client/src/store/index.ts b/src/client/src/store/index.ts deleted file mode 100644 index d9d80d1..0000000 --- a/src/client/src/store/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./store"; -export * from "./StoreInit"; diff --git a/src/client/src/types.ts b/src/client/src/types.ts deleted file mode 100644 index 03179cb..0000000 --- a/src/client/src/types.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { KeyboardEventHandler, MouseEventHandler, WheelEventHandler } from "react"; - -export interface Household { - id: number; - name: string; -} - -export interface User { - id: number; - email: string; - name: string; - logged_in: boolean; - households: Household[]; -} - -export type InteractiveProps = { - onClick?: MouseEventHandler; - onWheel?: WheelEventHandler; - onMouseDown?: MouseEventHandler; - onMouseUp?: MouseEventHandler; - onMouseEnter?: MouseEventHandler; - onMouseLeave?: MouseEventHandler; - onKeyDown?: KeyboardEventHandler; -}; - -export interface Category { - id: number; - name: string; - iconName: string; -} - -export interface Product { - id: number; - name: string; - category: Category; - lastPrice?: number; -} - -export interface Vendor { - id: number; - name: string; - description: string; -} - -export enum Key { - "ArrowUp" = "ArrowUp", - "ArrowDown" = "ArrowDown", - "Enter" = "Enter", -} - -export type ExpenseItem = { - id: number; - product: Product; - amount: number; - price: number; - added: Date; - sharedWith?: Household | null; -}; - -export type Expense = { - id: number; - vendor: Vendor; - items: ExpenseItem[]; - date: number; - userId?: number; -}; diff --git a/src/client/src/utils.test.ts b/src/client/src/utils.test.ts deleted file mode 100644 index a2c7234..0000000 --- a/src/client/src/utils.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { bemClassNames, capitalize } from "./utils"; - -describe("Utils", () => { - it("BEM ClassNames", () => { - const bem = bemClassNames("a"); - for (const row of [ - [[], "a"], - [["b"], "a__b"], - [[{ c: true }], "a a--c"], - [[{ c: "d" }], "a a--c-d"], - [[{ c: "d", e: "f" }], "a a--c-d a--e-f"], - [["b", { c: true }], "a__b a__b--c"], - [["b", { c: "d" }], "a__b a__b--c-d"], - [["b", { c: "d", e: "f" }], "a__b a__b--c-d a__b--e-f"], - ]) { - expect(bem(row[0][0], row[0][1])).toBe(row[1]); - } - }); - - it("Capitalize", () => { - for (const row of [ - ["abc", "Abc"], - ["Abc", "Abc"], - [".abc", ".abc"], - ["abc abc", "Abc abc"], - ]) { - expect(capitalize(row[0])).toBe(row[1]); - } - }); -}); diff --git a/src/client/src/utils.ts b/src/client/src/utils.ts deleted file mode 100644 index f5897e5..0000000 --- a/src/client/src/utils.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { KeyboardEvent, KeyboardEventHandler, WheelEvent, WheelEventHandler } from "react"; - -import { Key } from "./types"; - -export const bemClassNames = (blockClassName: string) => { - return (classNameOrModifiers: string | Object = "", modifiers: Object = {}) => { - let elementClassName; - if (typeof classNameOrModifiers === "object") { - modifiers = classNameOrModifiers; - elementClassName = ""; - } else { - elementClassName = classNameOrModifiers; - } - let className = blockClassName; - if (elementClassName) { - className += "__" + elementClassName; - } - let resultClassNames = className; - for (const modifier of Object.keys(modifiers)) { - const key = modifier as keyof typeof modifiers; - if (!modifiers[key]) { - continue; - } - let newClassName = ""; - if (typeof modifiers[key] === "boolean") { - if (modifiers[key] as unknown as boolean) { - newClassName = `${className}--${modifier}`; - } - } else if (typeof modifiers[key] === "string") { - newClassName = `${className}--${modifier}-${modifiers[key]}`; - } else { - newClassName = `${className}--${modifier}`; - } - if (newClassName) { - resultClassNames += " " + newClassName; - } - } - return resultClassNames; - }; -}; - -export const capitalize = (word: string) => { - return word.charAt(0).toUpperCase() + word.slice(1); -}; - -export const wheelHandler = (onScrollUp?: WheelEventHandler, onScrollDown?: WheelEventHandler) => { - return (e: WheelEvent) => { - if (e.deltaY < 0) { - return onScrollUp?.(e); - } else { - return onScrollDown?.(e); - } - }; -}; - -export const arrowHandler = (onArrowUp?: KeyboardEventHandler, onArrowDown?: KeyboardEventHandler) => { - return (e: KeyboardEvent) => { - switch (e.code) { - case Key.ArrowUp: - return onArrowUp?.(e); - case Key.ArrowDown: - return onArrowDown?.(e); - } - }; -}; diff --git a/src/client/styles/fonts.scss b/src/client/styles/fonts.scss deleted file mode 100644 index bac27fc..0000000 --- a/src/client/styles/fonts.scss +++ /dev/null @@ -1,53 +0,0 @@ -@font-face { - font-family: Cantarell; - font-weight: 200; - src: url("/public/fonts/Cantarell-Thin.otf") format("opentype"); -} - -@font-face { - font-family: Cantarell; - font-weight: 300; - src: url("/public/fonts/Cantarell-Light.otf") format("opentype"); -} - -@font-face { - font-family: Cantarell; - src: url("/public/fonts/Cantarell-Regular.otf") format("opentype"); -} - -@font-face { - font-family: Cantarell; - font-weight: bold; - src: url("/public/fonts/Cantarell-Bold.otf") format("opentype"); -} - -@font-face { - font-family: Cantarell; - font-weight: 900; - src: url("/public/fonts/Cantarell-ExtraBold.otf") format("opentype"); -} - -@font-face { - font-family: IndieFlower; - src: url("/public/fonts/IndieFlower-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Roboto Mono"; - src: url("/public/fonts/RobotoMono-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Roboto Mono"; - font-weight: 700; - src: url("/public/fonts/RobotoMono-Medium.ttf") format("truetype"); -} - -@font-face { - font-family: "Roboto Mono"; - font-weight: 900; - src: url("/public/fonts/RobotoMono-Bold.ttf") format("truetype"); -} - -$font-cantarell: "Cantarell", "Verdana", sans-serif; -$font2: "Roboto Mono", monospace; diff --git a/src/client/styles/main.scss b/src/client/styles/main.scss deleted file mode 100644 index b5cad76..0000000 --- a/src/client/styles/main.scss +++ /dev/null @@ -1,14 +0,0 @@ -@import "variables"; -@import "fonts"; -@import "mixins"; - -@import "../src/components/components"; -@import "../src/layouts/layouts"; -@import "../src/partials/partials"; - -body { - margin: 0; - background: #f5f6fa; - color: $primary-text; - font-family: $font-cantarell; -} diff --git a/src/client/styles/mixins.scss b/src/client/styles/mixins.scss deleted file mode 100644 index 418390c..0000000 --- a/src/client/styles/mixins.scss +++ /dev/null @@ -1,27 +0,0 @@ -@mixin card { - transition: ease-in-out 200ms; - border-radius: 2rem; - background: $white; - color: $grey-333; - - // box-shadow: 2px 2px 5px $grey-ddd; -} - -@mixin active-shadow { - box-shadow: $primary-shadow-box; -} - -@mixin active { - @include active-shadow; - - background: $blue; -} - -@mixin subtitle { - margin: 0; - color: $grey-999; - font-size: 13px; - font-weight: bold; - letter-spacing: 0.5px; - text-transform: uppercase; -} diff --git a/src/client/styles/variables.scss b/src/client/styles/variables.scss deleted file mode 100644 index 38d5bc3..0000000 --- a/src/client/styles/variables.scss +++ /dev/null @@ -1,34 +0,0 @@ -// Color palette -$white: #fff; -$blue: #5278FF; -$grey-blue: #426395; -$dark-blue: #333c62; -$purple: #601f99; -$green: #6ca758; -$red: #a75858; - -// Greyscale -$grey-eee: #eee; -$grey-ddd: #ddd; -$grey-ccc: #ccc; -$grey-bbb: #bbb; -$grey-999: #999; -$grey-777: #777; -$grey-555: #555; -$grey-444: #444; -$grey-333: #333; - -// Primary colors -$primary-text: $grey-444; -$primary-action: $grey-blue; -$primary-text-light: #f8f8f8; -$primary-background: #f5f6fa; -$primary-connected: $green; -$primary-disconnected: $red; - -// Primary shadows -$primary-shadow-box: 0 0 6px rgba(0 0 0 / 25%); - -// Navbar width -$navbar-max-width: 300px; -$navbar-width-collapsed: 75px; diff --git a/src/client/tsconfig.json b/src/client/tsconfig.json deleted file mode 100644 index a08ae6a..0000000 --- a/src/client/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/src/client/turbo.json b/src/client/turbo.json new file mode 100644 index 0000000..7c36b43 --- /dev/null +++ b/src/client/turbo.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://turbo.build/schema.json", + "ui": "tui", + "tasks": { + "build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [".next/**", "!.next/cache/**"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "dev": { + "cache": false, + "persistent": true + }, + "test": {}, + "stylelint": { + "dependsOn": ["^stylelint"] + } + } +} diff --git a/src/server/Pipfile b/src/server/Pipfile index a985788..1f9a69a 100644 --- a/src/server/Pipfile +++ b/src/server/Pipfile @@ -22,4 +22,5 @@ python_version = "3.12" [scripts] black = "black --check --line-length 120 ." +black_fix = "black --line-length 120 ." server = "./main.py" diff --git a/src/server/modules/attribute_manager.py b/src/server/modules/attribute_manager.py index 0eb980a..6041aac 100644 --- a/src/server/modules/attribute_manager.py +++ b/src/server/modules/attribute_manager.py @@ -1,3 +1,4 @@ +from collections import deque from datetime import datetime from pony import orm @@ -19,6 +20,24 @@ def __init__(self, db_instance): self.last_value_save_skipped = False self.last_date = datetime.now().date() + last_values = [ + unit.value + for unit in reversed( + db_instance.data_units.select( + lambda unit: unit.attribute.id == self.id and unit.date == datetime.now().date() + ) + .order_by(lambda u: desc(u.id)) + .limit(6) + ) + ] + self.trend_queue = deque(maxlen=3) + + last_added = None + for value in last_values: + if last_added != value: + self.trend_queue.append(value) + last_added = value + value = None if db_instance.data_units: last_unit = list(db_instance.data_units.select().order_by(lambda u: desc(u.id)).limit(1)) @@ -54,12 +73,22 @@ def get_current_value(self): def get_instance(self): return attribute_model.get_by_id(self.id) + def get_trend(self): + if len(self.trend_queue) < 3: + return 0 + if self.trend_queue[0] < self.trend_queue[1] < self.trend_queue[2]: + return 1 + if self.trend_queue[0] > self.trend_queue[1] > self.trend_queue[2]: + return -1 + return 0 + def check_value_change(self, value): return value != self.value @orm.db_session def add_data_unit(self, value): value_changed = False + # TODO: We need to create two new data units when the day changes. if self.check_value_change(value): # Value has changed if self.value is not None and self.last_datetime is not None and self.last_value_save_skipped: @@ -67,6 +96,7 @@ def add_data_unit(self, value): self.last_value_save_skipped = False self.value = value data_unit_model.add(self.handler_id, self.id, value, datetime.now()) + self.trend_queue.append(self.value) self.check_and_add_stat_units(value) value_changed = True else: diff --git a/src/server/modules/blueprints/__init__.py b/src/server/modules/blueprints/__init__.py index d2d27b7..8d85df9 100644 --- a/src/server/modules/blueprints/__init__.py +++ b/src/server/modules/blueprints/__init__.py @@ -1,6 +1,7 @@ from .actions import actions_blueprint from .attributes import attributes_blueprint from .charts import charts_blueprint +from .datastats import datastats_blueprint from .handlers import handlers_blueprint from .widgets import widgets_blueprint @@ -8,6 +9,7 @@ "actions": actions_blueprint, "attributes": attributes_blueprint, "charts": charts_blueprint, + "data-stats": datastats_blueprint, "handlers": handlers_blueprint, "widgets": widgets_blueprint, } diff --git a/src/server/modules/blueprints/attributes.py b/src/server/modules/blueprints/attributes.py index 9a7f96d..d0a4a42 100644 --- a/src/server/modules/blueprints/attributes.py +++ b/src/server/modules/blueprints/attributes.py @@ -1,4 +1,4 @@ -from flask import Blueprint +from flask import Blueprint, request from pony import orm from modules.models.attribute import Attribute @@ -17,6 +17,7 @@ def get_attribute(attribute): @blueprint.route("/") @orm.db_session def attributes(): + handler = request.args.get("handler", None) return [ { "id": attribute.id, @@ -31,9 +32,10 @@ def attributes(): "status": 1 if get_handler(attribute).is_connected() else 0, "handler_name": get_handler(attribute).get_name(), "value": get_attribute(attribute).get_current_value(), + "trend": get_attribute(attribute).get_trend(), }, } - for attribute in Attribute.select() + for attribute in (Attribute.select(lambda a: a.handler.id == handler) if handler else Attribute.select()) ], StatusCode.OK return blueprint diff --git a/src/server/modules/blueprints/charts.py b/src/server/modules/blueprints/charts.py index 01150d5..f95b33b 100644 --- a/src/server/modules/blueprints/charts.py +++ b/src/server/modules/blueprints/charts.py @@ -10,15 +10,18 @@ def charts_blueprint(_context: Context): blueprint = Blueprint(this_name(), __name__) - @blueprint.route("/attribute/", defaults={"attribute_ids": []}) - @blueprint.route("/attribute/") + @blueprint.route("/attribute", defaults={"attribute_ids": []}) + @blueprint.route("/attribute//", defaults={"date": None}) + @blueprint.route("/attribute//") @orm.db_session - def attribute(attribute_ids): + def attribute(attribute_ids, date): charts_data = [] + date = datetime.now().date() if not date else datetime.fromisoformat(date).date() + for attribute_id in attribute_ids: data_units = DataUnit.select( - lambda data_unit: data_unit.attribute.id == attribute_id and data_unit.date == datetime.now().date() + lambda data_unit: data_unit.attribute.id == attribute_id and data_unit.date == date ) if not data_units: diff --git a/src/server/modules/blueprints/datastats.py b/src/server/modules/blueprints/datastats.py new file mode 100644 index 0000000..e8b7fbb --- /dev/null +++ b/src/server/modules/blueprints/datastats.py @@ -0,0 +1,42 @@ +import datetime +from datetime import datetime + +from flask import Blueprint +from pony import orm + +from modules.models.data_stat import DataStat +from modules.utils import Context, this_name, StatusCode + + +def datastats_blueprint(_context: Context): + blueprint = Blueprint(this_name(), __name__) + + def data_stat_serializer(data_stat): + return { + "id": data_stat.id, + "attribute": data_stat.attribute.id, + "type": data_stat.type, + "value": data_stat.value, + "date": data_stat.date, + "time": data_stat.time, + } + + @blueprint.route("/") + @orm.db_session + def all_datastats(): + return [ + data_stat_serializer(data_stat) + for data_stat in (DataStat.select(lambda d: d.date == datetime.now().date())) + ], StatusCode.OK + + @blueprint.route("/") + @orm.db_session + def datastats(data_stat_id): + return [ + data_stat_serializer(data_stat) + for data_stat in ( + DataStat.select(lambda d: d.attribute.id == data_stat_id and d.date == datetime.now().date()) + ) + ], StatusCode.OK + + return blueprint diff --git a/src/server/modules/blueprints/handlers.py b/src/server/modules/blueprints/handlers.py index e30f542..74ae38c 100644 --- a/src/server/modules/blueprints/handlers.py +++ b/src/server/modules/blueprints/handlers.py @@ -4,7 +4,7 @@ from modules.handlers import get_handler_class, available_handlers from modules.models import attribute as attribute_model from modules.models import handler as handler_model -from modules.utils import this_name, Context, parse_config, StatusCode +from modules.utils import this_name, Context, parse_config, StatusCode, get_current_seconds def handlers_blueprint(_context: Context): @@ -37,6 +37,11 @@ def handlers(): "icon": handler.icon, "description": handler.get_description(), "status": get_status(handler), + "last_message": ( + get_current_seconds() - handler.get_last_message_seconds() + if handler.get_last_message_seconds() + else None + ), "attributes": [ { "id": attribute_manager.get_id(), diff --git a/src/server/modules/handler_manager.py b/src/server/modules/handler_manager.py index 7fb1262..76f72cc 100644 --- a/src/server/modules/handler_manager.py +++ b/src/server/modules/handler_manager.py @@ -1,3 +1,4 @@ +from datetime import datetime, time from threading import Thread from time import sleep @@ -9,6 +10,7 @@ from modules.handlers import get_handler_class from modules.handlers.abstract_handler import AbstractHandler from modules.logging import Logger +from modules.models import data_unit as data_unit_model from modules.models import handler as handler_model from modules.models.settings import get_settings from modules.utils import linearize, Context @@ -60,6 +62,12 @@ def initialize_handlers(self): for db_handler in db_handlers: handler = get_handler_class(db_handler.type)(db_handler.options) handler.set_id(db_handler.id) + last_data_unit_select = data_unit_model.get_by_handler_id(db_handler.id) + last_data_unit = last_data_unit_select[-1] if last_data_unit_select else None + if last_data_unit: + handler.set_last_message_seconds( + datetime.combine(last_data_unit.date, time.fromisoformat(str(last_data_unit.time))).timestamp() + ) self.register_handler(handler) for db_attribute in db_handler.attributes: self.register_attribute(db_attribute) diff --git a/src/server/modules/handlers/abstract_handler.py b/src/server/modules/handlers/abstract_handler.py index 7ed9d58..3c28a9c 100644 --- a/src/server/modules/handlers/abstract_handler.py +++ b/src/server/modules/handlers/abstract_handler.py @@ -97,6 +97,10 @@ def get_last_message_seconds(self): """Returns the time in seconds when the last message was received or 0 if no message was received.""" return self._last_message_seconds or 0 + def set_last_message_seconds(self, seconds): + """Sets the time in seconds when the last message was received.""" + self._last_message_seconds = seconds + # def add_changed(self, value): # """ # Add appropriate string if there is a need to refresh GUI. diff --git a/src/server/modules/models/data_unit.py b/src/server/modules/models/data_unit.py index 9ae16f7..1567e2b 100644 --- a/src/server/modules/models/data_unit.py +++ b/src/server/modules/models/data_unit.py @@ -28,3 +28,12 @@ def add(handler, attribute, value, timestamp) -> DataUnit: date=timestamp.date(), time=timestamp.time(), ) + + +def get_by_handler_id(handler_id) -> DataUnit | None: + """Returns DataUnit by handler id""" + return ( + DataUnit.select(lambda unit: unit.handler.id == handler_id) + .order_by(orm.desc(DataUnit.date), orm.desc(DataUnit.time)) + .limit(1) + ) From c94bd483c072559553913a0fda4d42ba5680c776 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Fri, 3 Jan 2025 16:47:27 +0100 Subject: [PATCH 033/105] Fix --- src/client/apps/contwatch-client/app/layout.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/client/apps/contwatch-client/app/layout.tsx b/src/client/apps/contwatch-client/app/layout.tsx index a98317c..bf790ea 100644 --- a/src/client/apps/contwatch-client/app/layout.tsx +++ b/src/client/apps/contwatch-client/app/layout.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import "./globals.scss"; -import { PropsWithChildren } from "react"; +import { PropsWithChildren, Suspense } from "react"; import { NavbarLayout } from "@repo/ui/NavbarLayout"; import { openSans } from "@repo/ui/fonts"; import { Providers } from "./providers"; @@ -15,7 +15,9 @@ export default function RootLayout({ children }: PropsWithChildren) { - {children} + + {children} + From 30a4a9a4528253af80d3f367a044401b9eba6bc4 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Fri, 3 Jan 2025 16:54:19 +0100 Subject: [PATCH 034/105] Icons --- src/client/packages/ui/src/components/Icon/Icon.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/packages/ui/src/components/Icon/Icon.tsx b/src/client/packages/ui/src/components/Icon/Icon.tsx index 7170c6b..ece92ae 100644 --- a/src/client/packages/ui/src/components/Icon/Icon.tsx +++ b/src/client/packages/ui/src/components/Icon/Icon.tsx @@ -15,7 +15,7 @@ export const getIcon = (icon: string) => { return `/icons/${icon}.svg`; }; -export const CustomIcons = ["http", "serial"]; +export const CustomIcons = ["battery", "http", "inverter", "serial"]; export type IconProps = { icon: From 869de2bd3f480a17058ae0d1097feb2cf0fa4f26 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Fri, 3 Jan 2025 17:03:50 +0100 Subject: [PATCH 035/105] Fix --- src/client/apps/contwatch-client/next.config.mjs | 6 +++--- src/server/modules/blueprints/datastats.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/apps/contwatch-client/next.config.mjs b/src/client/apps/contwatch-client/next.config.mjs index c25c142..c36f52b 100644 --- a/src/client/apps/contwatch-client/next.config.mjs +++ b/src/client/apps/contwatch-client/next.config.mjs @@ -11,9 +11,9 @@ const nextConfig = { useSwcCss: true, }, }, - // eslint: { - // ignoreDuringBuilds: true, - // }, + eslint: { + ignoreDuringBuilds: true, + }, async rewrites() { return { afterFiles: [ diff --git a/src/server/modules/blueprints/datastats.py b/src/server/modules/blueprints/datastats.py index e8b7fbb..84c0a1d 100644 --- a/src/server/modules/blueprints/datastats.py +++ b/src/server/modules/blueprints/datastats.py @@ -18,7 +18,7 @@ def data_stat_serializer(data_stat): "type": data_stat.type, "value": data_stat.value, "date": data_stat.date, - "time": data_stat.time, + "time": str(data_stat.time), } @blueprint.route("/") From fa28c232279e2c375b5367e7c358199c3ae9300c Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Fri, 3 Jan 2025 20:05:20 +0100 Subject: [PATCH 036/105] Fixes --- .../HandlerWidget/HandlerWidget.tsx | 24 +- .../contwatch-client/app/inspector/page.tsx | 5 +- src/client/package-lock.json | 443 +++++++++++++++++- src/client/packages/ui/jest.config.ts | 8 + src/client/packages/ui/jest.setup.ts | 13 + src/client/packages/ui/package.json | 14 +- .../ui/src/components/Popup/Popup.tsx | 6 +- .../packages/ui/src/components/mixins.scss | 1 + .../packages/utils/src/getApiEndpoint.test.ts | 4 +- .../src/i18n/locales/cs/translation.json | 1 + .../src/i18n/locales/en/translation.json | 1 + 11 files changed, 486 insertions(+), 34 deletions(-) create mode 100644 src/client/packages/ui/jest.config.ts create mode 100644 src/client/packages/ui/jest.setup.ts diff --git a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx index afb4850..cc8747d 100644 --- a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx +++ b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx @@ -77,16 +77,20 @@ export const HandlerWidget: FC = ({ handler }) => { {attribute.label ?? attribute.name}{" "} - {minStat?.value === attribute.data.value && ( -
- -
- )} - {maxStat?.value === attribute.data.value && ( -
- -
- )} + {minStat?.value === attribute.data.value && + minStat?.value !== maxStat?.value && ( +
+ +
+ )} + {maxStat?.value === attribute.data.value && + minStat?.value !== maxStat?.value && ( +
+ +
+ )} {attribute.data.trend === -1 && (
diff --git a/src/client/apps/contwatch-client/app/inspector/page.tsx b/src/client/apps/contwatch-client/app/inspector/page.tsx index a662393..69e23f8 100644 --- a/src/client/apps/contwatch-client/app/inspector/page.tsx +++ b/src/client/apps/contwatch-client/app/inspector/page.tsx @@ -11,11 +11,14 @@ import { Popup } from "@repo/ui/Popup"; import { Column } from "@repo/ui/FlexPartials"; import { Input } from "@repo/ui/Input"; import { useSearchParams } from "next/navigation"; +import { useLocalization } from "@repo/store/hooks/useLocalization"; export default function Inspector() { const { t } = useTranslation(); const { data: attributes } = useAttributes(); + const { localizeDate } = useLocalization(); + const searchParams = useSearchParams(); const paramAttribute = searchParams.get("attribute"); const paramAttributeInt = paramAttribute ? parseInt(paramAttribute) : undefined; @@ -41,7 +44,7 @@ export default function Inspector() { return ( <> - {t("Inspector")} + {t("Inspector")} {selectedDate ? `(${localizeDate(new Date(selectedDate))})` : ""} setShowSettings(false)} title={t("Settings")}> diff --git a/src/client/package-lock.json b/src/client/package-lock.json index 661d4c8..a27c7dc 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -79,6 +79,13 @@ "node": ">=14.17" } }, + "node_modules/@adobe/css-tools": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.1.tgz", + "integrity": "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -4149,6 +4156,280 @@ "tslib": "^2.8.0" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": 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/@testing-library/dom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/dom/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/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==", + "dev": true, + "license": "MIT", + "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/@testing-library/dom/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/dom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", + "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/jest-dom/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.1.0.tgz", + "integrity": "sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "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", @@ -4241,6 +4522,13 @@ "workspaces": "dist/cli.js" } }, + "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==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -4516,6 +4804,26 @@ "@types/react": "^19.0.0" } }, + "node_modules/@types/redux-mock-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/redux-mock-store/-/redux-mock-store-1.5.0.tgz", + "integrity": "sha512-jcscBazm6j05Hs6xYCca6psTUBbFT2wqMxT7wZEHAYFxHB/I8jYk7d5msrHUlDiSL02HdTqTmkK2oIV8i3C8DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "redux": "^4.0.5" + } + }, + "node_modules/@types/redux-mock-store/node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -4957,6 +5265,16 @@ "dev": true, "license": "Python-2.0" }, + "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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", @@ -6277,6 +6595,13 @@ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, + "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==", + "dev": true, + "license": "MIT" + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -6761,6 +7086,13 @@ "node": ">=0.10.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==", + "dev": true, + "license": "MIT" + }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -8355,6 +8687,13 @@ "uglify-js": "^3.1.4" } }, + "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==", + "dev": true, + "license": "(Apache-2.0 OR MPL-1.1)" + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -8617,6 +8956,19 @@ "node": ">=0.10.0" } }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -11686,6 +12038,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11768,6 +12127,16 @@ "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==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -11906,6 +12275,16 @@ "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -13284,12 +13663,39 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", "license": "MIT" }, + "node_modules/redux-mock-store": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.5.tgz", + "integrity": "sha512-YxX+ofKUTQkZE4HbhYG4kKGr7oCTJfB0GLy7bSeqx86GLpGirrbUWstMnqXkqHNaQpcnbMGbof2dYs5KsPE6Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.isplainobject": "^4.0.6" + }, + "peerDependencies": { + "redux": "*" + } + }, "node_modules/redux-thunk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", @@ -14331,6 +14737,19 @@ "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -16155,25 +16574,19 @@ "devDependencies": { "@repo/eslint-config": "*", "@repo/typescript-config": "*", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.6.3", + "@testing-library/react": "16.1.0", + "@testing-library/user-event": "14.5.2", "@turbo/gen": "^1.12.4", "@types/node": "^20.11.24", "@types/react": "19.0.2", "@types/react-dom": "19.0.2", - "typescript": "5.5.4" - } - }, - "packages/ui/node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" + "@types/redux-mock-store": "1.5.0", + "identity-obj-proxy": "3.0.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "redux-mock-store": "1.5.5" } }, "packages/utils": { diff --git a/src/client/packages/ui/jest.config.ts b/src/client/packages/ui/jest.config.ts new file mode 100644 index 0000000..39f12da --- /dev/null +++ b/src/client/packages/ui/jest.config.ts @@ -0,0 +1,8 @@ +module.exports = { + preset: "ts-jest", + testEnvironment: "jsdom", + setupFilesAfterEnv: ["/jest.setup.ts"], + moduleNameMapper: { + "\\.module\\.scss$": "identity-obj-proxy", + }, +}; diff --git a/src/client/packages/ui/jest.setup.ts b/src/client/packages/ui/jest.setup.ts new file mode 100644 index 0000000..2984018 --- /dev/null +++ b/src/client/packages/ui/jest.setup.ts @@ -0,0 +1,13 @@ +// Mocking the Google font loader +jest.mock("next/font/google", () => { + return new Proxy( + {}, + { + get: () => () => ({ + style: { + fontFamily: "mocked", + }, + }), + }, + ); +}); diff --git a/src/client/packages/ui/package.json b/src/client/packages/ui/package.json index 4104d3f..a979df8 100644 --- a/src/client/packages/ui/package.json +++ b/src/client/packages/ui/package.json @@ -21,8 +21,8 @@ }, "scripts": { "lint": "eslint . --max-warnings 0", - "generate:component": "turbo gen react-component", - "check-types": "tsc --noEmit" + "test": "jest", + "generate:component": "turbo gen react-component" }, "dependencies": { "react": "^19.0.0", @@ -33,10 +33,18 @@ "devDependencies": { "@repo/eslint-config": "*", "@repo/typescript-config": "*", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.6.3", + "@testing-library/react": "16.1.0", + "@testing-library/user-event": "14.5.2", "@turbo/gen": "^1.12.4", "@types/node": "^20.11.24", "@types/react": "19.0.2", "@types/react-dom": "19.0.2", - "typescript": "5.5.4" + "@types/redux-mock-store": "1.5.0", + "identity-obj-proxy": "3.0.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "redux-mock-store": "1.5.5" } } diff --git a/src/client/packages/ui/src/components/Popup/Popup.tsx b/src/client/packages/ui/src/components/Popup/Popup.tsx index 3e79bbe..0d2cce1 100644 --- a/src/client/packages/ui/src/components/Popup/Popup.tsx +++ b/src/client/packages/ui/src/components/Popup/Popup.tsx @@ -30,11 +30,11 @@ export const Popup: FC> = ({ visible && (
- + -
+
- + {title ? ( titleHref ? ( diff --git a/src/client/packages/ui/src/components/mixins.scss b/src/client/packages/ui/src/components/mixins.scss index 592026a..bcf71cd 100644 --- a/src/client/packages/ui/src/components/mixins.scss +++ b/src/client/packages/ui/src/components/mixins.scss @@ -5,4 +5,5 @@ background: var(--color-mono-white); box-shadow: var(--box-shadow-card); color: var(--color-mono-dark); + overflow: auto; } diff --git a/src/client/packages/utils/src/getApiEndpoint.test.ts b/src/client/packages/utils/src/getApiEndpoint.test.ts index b1d9216..bfdbf28 100644 --- a/src/client/packages/utils/src/getApiEndpoint.test.ts +++ b/src/client/packages/utils/src/getApiEndpoint.test.ts @@ -10,7 +10,7 @@ describe("Bridge - Endpoints", () => { }); test("Correct route generating", () => { - expect(getApiEndpoint(Endpoint.auth)).toBe("/rest/auth/"); - expect(getApiEndpoint(Endpoint.projectTiles)).toBe("/rest/project-tiles/"); + expect(getApiEndpoint(Endpoint.attributes)).toBe("/api/core/attributes/"); + expect(getApiEndpoint(Endpoint.dataStats)).toBe("/api/core/data-stats/"); }); }); diff --git a/src/client/packages/utils/src/i18n/locales/cs/translation.json b/src/client/packages/utils/src/i18n/locales/cs/translation.json index ae87047..ce2c2c3 100644 --- a/src/client/packages/utils/src/i18n/locales/cs/translation.json +++ b/src/client/packages/utils/src/i18n/locales/cs/translation.json @@ -9,6 +9,7 @@ "Never": "Nikdy", "Handler ID": "ID zařízení", "Zoom out": "Oddálit", + "Show data for date": "Zobrazit data pro den", "Displayed attributes": "Zobrazené atributy", "New action editor": "Nový editor akcí", "is currently in development": "je aktuálně ve vývoji" diff --git a/src/client/packages/utils/src/i18n/locales/en/translation.json b/src/client/packages/utils/src/i18n/locales/en/translation.json index 6b7bf51..24d95a6 100644 --- a/src/client/packages/utils/src/i18n/locales/en/translation.json +++ b/src/client/packages/utils/src/i18n/locales/en/translation.json @@ -9,6 +9,7 @@ "Never": "Never", "Handler ID": "Handler ID", "Zoom out": "Zoom out", + "Show data for date": "Show data for date", "Displayed attributes": "Displayed attributes", "New action editor": "New action editor", "is currently in development": "is currently in development" From 12c182dcb0388f91a9fd1963614adfddf47c8d6f Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sat, 4 Jan 2025 09:53:24 +0100 Subject: [PATCH 037/105] Improvements --- .../HandlerWidget/HandlerWidget.tsx | 2 +- .../HandlersWrapper.module.scss | 14 +++++++++++ .../HandlersWrapper/HandlersWrapper.tsx | 13 ++++++++++ .../contwatch-client/app/handlers/page.tsx | 6 ++--- .../public/icons/batery-medium.svg | 3 +++ .../contwatch-client/public/icons/current.svg | 21 ++++++++++++++++ .../contwatch-client/public/icons/power.svg | 21 ++++++++++++++++ .../contwatch-client/public/icons/voltage.svg | 24 +++++++++++++++++++ .../packages/ui/src/components/Flex/Flex.tsx | 3 +++ .../handlers/jiabaida_bms_serial_handler.py | 9 +++++-- 10 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 src/client/apps/contwatch-client/app/handlers/components/HandlersWrapper/HandlersWrapper.module.scss create mode 100644 src/client/apps/contwatch-client/app/handlers/components/HandlersWrapper/HandlersWrapper.tsx create mode 100644 src/client/apps/contwatch-client/public/icons/batery-medium.svg create mode 100644 src/client/apps/contwatch-client/public/icons/current.svg create mode 100644 src/client/apps/contwatch-client/public/icons/power.svg create mode 100644 src/client/apps/contwatch-client/public/icons/voltage.svg diff --git a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx index cc8747d..aa29ffe 100644 --- a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx +++ b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx @@ -27,7 +27,7 @@ export const HandlerWidget: FC = ({ handler }) => { return ( = ({ children }) => { + return {children}; +}; diff --git a/src/client/apps/contwatch-client/app/handlers/page.tsx b/src/client/apps/contwatch-client/app/handlers/page.tsx index 3e6c0af..2217b90 100644 --- a/src/client/apps/contwatch-client/app/handlers/page.tsx +++ b/src/client/apps/contwatch-client/app/handlers/page.tsx @@ -1,10 +1,10 @@ "use client"; -import { Column } from "@repo/ui/FlexPartials"; import { Text } from "@repo/ui/Text"; import { useHandlers } from "@repo/utils/swrEndpoints"; import { HandlerWidget } from "./components/HandlerWidget/HandlerWidget"; import { useTranslation } from "@repo/utils/useTranslation"; +import { HandlersWrapper } from "./components/HandlersWrapper/HandlersWrapper"; export default function Handlers() { const { t } = useTranslation(); @@ -15,9 +15,9 @@ export default function Handlers() { {t("Handlers")} - + {handlers?.map((handler) => )} - + ); } diff --git a/src/client/apps/contwatch-client/public/icons/batery-medium.svg b/src/client/apps/contwatch-client/public/icons/batery-medium.svg new file mode 100644 index 0000000..7815fe0 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/batery-medium.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/client/apps/contwatch-client/public/icons/current.svg b/src/client/apps/contwatch-client/public/icons/current.svg new file mode 100644 index 0000000..dded820 --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/current.svg @@ -0,0 +1,21 @@ + + + + diff --git a/src/client/apps/contwatch-client/public/icons/power.svg b/src/client/apps/contwatch-client/public/icons/power.svg new file mode 100644 index 0000000..a849cbf --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/power.svg @@ -0,0 +1,21 @@ + + + + diff --git a/src/client/apps/contwatch-client/public/icons/voltage.svg b/src/client/apps/contwatch-client/public/icons/voltage.svg new file mode 100644 index 0000000..883cb7e --- /dev/null +++ b/src/client/apps/contwatch-client/public/icons/voltage.svg @@ -0,0 +1,24 @@ + + + + diff --git a/src/client/packages/ui/src/components/Flex/Flex.tsx b/src/client/packages/ui/src/components/Flex/Flex.tsx index 5fdbc65..e1d1bb5 100644 --- a/src/client/packages/ui/src/components/Flex/Flex.tsx +++ b/src/client/packages/ui/src/components/Flex/Flex.tsx @@ -8,6 +8,7 @@ const bem = bemClassNames(styles); export type FlexProps = PropsWithChildren<{ justifyContent?: Property.JustifyContent; + alignContent?: Property.AlignContent; alignItems?: Property.AlignItems; alignSelf?: Property.AlignSelf; direction?: Property.FlexDirection; @@ -28,6 +29,7 @@ export type FlexProps = PropsWithChildren<{ export const Flex: FC = ({ justifyContent, + alignContent, alignItems, alignSelf, direction, @@ -56,6 +58,7 @@ export const Flex: FC = ({ className={bem({ padding, margin, fill, variant, background }) + (className ? ` ${className}` : "")} style={{ justifyContent, + alignContent, alignItems, alignSelf, flexDirection: direction, diff --git a/src/server/modules/handlers/jiabaida_bms_serial_handler.py b/src/server/modules/handlers/jiabaida_bms_serial_handler.py index 2b2842d..0ba432a 100644 --- a/src/server/modules/handlers/jiabaida_bms_serial_handler.py +++ b/src/server/modules/handlers/jiabaida_bms_serial_handler.py @@ -70,13 +70,18 @@ def _read_message(self): "mos-state": d1[20], "temperatures": { # TODO: Number of temps is provided in data too, do this in loop. - "1": (_byte(d1, 23) - 2731) / 10, - "2": (_byte(d1, 25) - 2731) / 10, + # "1": (_byte(d1, 23) - 2731) / 10, + # "2": (_byte(d1, 25) - 2731) / 10, }, "cells": {}, "protection-bits": bin(_byte(d1, 16))[2:].zfill(16), } + temperatures_count = d1[22] + + for i in range(0, temperatures_count): + json["temperatures"][f"{i+1}"] = (_byte(d1, 23 + i * 2) - 2731) / 10 + cell_count = d1[21] balancing = bin(_byte(d1, 14))[2:].zfill(16) + bin(_byte(d1, 12))[2:].zfill(16) From 3297507f260483b181f80850c392edb86d4f5ba5 Mon Sep 17 00:00:00 2001 From: BlueManCZ Date: Sun, 5 Jan 2025 16:50:49 +0100 Subject: [PATCH 038/105] Formatting, Linting, Fixes --- .github/workflows/client.yaml | 14 +- .gitignore | 4 +- .../contwatch-client/app/actions/page.tsx | 15 +- .../AttributeWidget.module.scss | 37 +++ .../AttributeWidget/AttributeWidget.tsx | 80 ++++++ .../HandlerWidget/HandlerWidget.module.scss | 37 --- .../HandlerWidget/HandlerWidget.tsx | 96 +------ .../HandlersWrapper/HandlersWrapper.tsx | 4 +- .../contwatch-client/app/handlers/page.tsx | 7 +- .../InspectorChart/InspectorChart.tsx | 25 +- .../contwatch-client/app/inspector/page.tsx | 17 +- .../apps/contwatch-client/app/layout.tsx | 8 +- src/client/apps/contwatch-client/app/page.tsx | 4 +- .../apps/contwatch-client/app/providers.tsx | 2 +- .../apps/contwatch-client/eslint.config.js | 4 + .../apps/contwatch-client/next.config.mjs | 2 +- src/client/apps/docs/app/globals.css | 52 ++-- src/client/apps/docs/app/layout.tsx | 31 ++- src/client/apps/docs/app/page.module.css | 252 +++++++++--------- src/client/apps/docs/app/page.tsx | 157 +++++------ src/client/apps/docs/eslint.config.js | 4 + src/client/apps/docs/next.config.js | 4 + src/client/apps/docs/package.json | 2 +- src/client/biome.json | 37 +++ src/client/package-lock.json | 196 +++++++++++++- src/client/package.json | 5 +- src/client/packages/eslint-config/base.js | 38 +-- src/client/packages/eslint-config/next.js | 66 ++--- .../packages/eslint-config/react-internal.js | 50 ++-- src/client/packages/store/eslint.config.js | 4 + src/client/packages/store/eslint.config.mjs | 33 --- src/client/packages/store/package.json | 1 + .../store/src/components/StoreProvider.tsx | 7 +- .../store/src/hooks/useLocalization.ts | 3 +- .../store/src/slices/settingsSlice.ts | 2 +- src/client/packages/store/src/store.ts | 2 +- src/client/packages/types/package.json | 3 +- .../types/src/models/AttributeModel.ts | 4 +- .../packages/types/src/models/HandlerModel.ts | 8 +- .../packages/typescript-config/base.json | 4 +- src/client/packages/ui/eslint.config.js | 4 + src/client/packages/ui/package.json | 4 +- .../ui/src/components/Button/Button.tsx | 8 +- .../packages/ui/src/components/Flex/Flex.tsx | 7 +- .../packages/ui/src/components/Icon/Icon.tsx | 4 +- .../ui/src/components/Input/Input.test.tsx | 1 + .../ui/src/components/Input/Input.tsx | 42 +-- .../ui/src/components/Navbar/Navbar.tsx | 4 +- .../components/NavbarItem/NavbarItem.tsx | 9 +- .../components/NavbarLayout/NavbarLayout.tsx | 14 +- .../ui/src/components/Popup/Popup.tsx | 5 +- .../ui/src/components/Separator/Separator.tsx | 6 +- .../packages/ui/src/components/Text/Text.tsx | 10 +- src/client/packages/ui/src/fonts.ts | 2 +- .../partials/FlexPartials/FlexPartials.tsx | 4 +- .../packages/ui/turbo/generators/config.ts | 48 ++-- src/client/packages/utils/.eslintrc.js | 10 - src/client/packages/utils/babel.config.js | 3 + src/client/packages/utils/eslint.config.js | 4 + src/client/packages/utils/eslint.config.mjs | 33 --- src/client/packages/utils/jest.config.ts | 6 +- src/client/packages/utils/package.json | 1 + .../packages/utils/src/bemClassNames.test.ts | 10 +- .../packages/utils/src/bemClassNames.ts | 16 +- .../packages/utils/src/communication.ts | 4 +- src/client/packages/utils/src/endpoints.ts | 2 +- .../packages/utils/src/fetchJsonFactory.ts | 3 +- .../packages/utils/src/getApiEndpoint.ts | 2 +- .../packages/utils/src/hooks/swrEndpoints.ts | 8 +- .../packages/utils/src/pluralizeUnit.ts | 9 +- src/server/modules/blueprints/attributes.py | 6 - src/server/modules/blueprints/handlers.py | 4 +- .../handlers/jiabaida_bms_serial_handler.py | 6 +- 73 files changed, 905 insertions(+), 715 deletions(-) create mode 100644 src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.module.scss create mode 100644 src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.tsx create mode 100644 src/client/apps/contwatch-client/eslint.config.js create mode 100644 src/client/apps/docs/eslint.config.js create mode 100644 src/client/apps/docs/next.config.js create mode 100644 src/client/biome.json create mode 100644 src/client/packages/store/eslint.config.js delete mode 100644 src/client/packages/store/eslint.config.mjs create mode 100644 src/client/packages/ui/eslint.config.js delete mode 100644 src/client/packages/utils/.eslintrc.js create mode 100644 src/client/packages/utils/babel.config.js create mode 100644 src/client/packages/utils/eslint.config.js delete mode 100644 src/client/packages/utils/eslint.config.mjs diff --git a/.github/workflows/client.yaml b/.github/workflows/client.yaml index 5f6be97..e3c1a3e 100644 --- a/.github/workflows/client.yaml +++ b/.github/workflows/client.yaml @@ -1,4 +1,4 @@ -name: Frontend CI +name: Client CI on: [push] jobs: @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [21.x] + node-version: [ 22.x ] defaults: run: working-directory: ./src/client @@ -19,9 +19,13 @@ jobs: node-version: ${{ matrix.node-version }} - name: Install dependencies run: npm install - - name: Client build - run: npm run build + - name: Lint + run: npm run lint + - name: Biome + run: npm run biome - name: Stylelint run: npm run stylelint + - name: Build + run: npm run build - name: Test - run: npm run test + run: npm test diff --git a/.gitignore b/.gitignore index 4f4edcd..c2fa26e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ __pycache__/ # Node.js node_modules -*config.js # Next.js .next/ @@ -26,3 +25,6 @@ nohup.out # Config config.json + +# Eslint +.eslintcache diff --git a/src/client/apps/contwatch-client/app/actions/page.tsx b/src/client/apps/contwatch-client/app/actions/page.tsx index 0a96b05..d3f875a 100644 --- a/src/client/apps/contwatch-client/app/actions/page.tsx +++ b/src/client/apps/contwatch-client/app/actions/page.tsx @@ -1,25 +1,25 @@ "use client"; +// import "@xyflow/react/dist/base.css"; +import "@xyflow/react/dist/style.css"; + import { Text } from "@repo/ui/Text"; import { useTranslation } from "@repo/utils/useTranslation"; - import { addEdge, Background, BackgroundVariant, Controls, - Edge, + type Edge, MiniMap, - Node, + type Node, Position, ReactFlow, useEdgesState, useNodesState, } from "@xyflow/react"; -import "@xyflow/react/dist/style.css"; -// import "@xyflow/react/dist/base.css"; +import type { Connection } from "@xyflow/system"; import { useCallback, useEffect } from "react"; -import { Connection } from "@xyflow/system"; export default function Actions() { // TODO: Use SSR translation and remove "use client" @@ -63,7 +63,8 @@ export default function Actions() { nodes.map((node) => { if (node.id === "1") { return { ...node, data: { ...node.data, label: firstTitle } }; - } else if (node.id === "2") { + } + if (node.id === "2") { return { ...node, data: { ...node.data, label: secondTitle } }; } return node; diff --git a/src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.module.scss b/src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.module.scss new file mode 100644 index 0000000..7363e55 --- /dev/null +++ b/src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.module.scss @@ -0,0 +1,37 @@ +.attribute-widget { + display: flex; + align-items: center; + gap: .5rem; + padding: .5rem .5rem; + margin: 0 .5rem; + color: inherit; + text-decoration: none; + border-radius: var(--border-radius-small); + + &:hover { + background: var(--color-mono-light); + } + + &__peak-indicator { + display: inline-flex; + justify-content: space-between; + padding: 0.2rem; + border-radius: 100%; + opacity: .9; + margin-left: 5px; + + &--color-green { + background: var(--color-green); + } + + &--color-red { + background: var(--color-red); + } + } + + &__value { + background: var(--color-mono-light); + padding: 5px 10px; + border-radius: 10px; + } +} diff --git a/src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.tsx b/src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.tsx new file mode 100644 index 0000000..278183e --- /dev/null +++ b/src/client/apps/contwatch-client/app/handlers/components/AttributeWidget/AttributeWidget.tsx @@ -0,0 +1,80 @@ +import type { AttributeModel } from "@repo/types/AttributeModel"; +import { Flex } from "@repo/ui/Flex"; +import { Column } from "@repo/ui/FlexPartials"; +import { Icon } from "@repo/ui/Icon"; +import { Separator } from "@repo/ui/Separator"; +import { Text } from "@repo/ui/Text"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { useDataStats } from "@repo/utils/swrEndpoints"; +import Link from "next/link"; +import type { FC } from "react"; + +import styles from "./AttributeWidget.module.scss"; + +type AttributeWidgetProps = { + attribute: AttributeModel; +}; + +const bem = bemClassNames(styles); + +export const AttributeWidget: FC = ({ attribute }) => { + const { data: dataStats } = useDataStats(); + + const minStat = dataStats?.find((stat) => stat.type === "min" && stat.attribute === attribute.id); + const maxStat = dataStats?.find((stat) => stat.type === "max" && stat.attribute === attribute.id); + return ( + + + + + + {attribute.label ?? attribute.name}{" "} + {minStat?.value === attribute.data.value && minStat?.value !== maxStat?.value && ( +
+ +
+ )} + {maxStat?.value === attribute.data.value && minStat?.value !== maxStat?.value && ( +
+ +
+ )} + {attribute.data.trend === -1 && ( +
+ +
+ )} + {attribute.data.trend === 1 && ( +
+ +
+ )} +
+ + {minStat && ( + + + + {minStat.value} {attribute.unit} + + + )} + {maxStat && ( + + + + {maxStat.value} {attribute.unit} + + + )} + +
+
+ + + + {attribute.data.value} {attribute.unit} + + + ); +}; diff --git a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss index 154623e..3d8776f 100644 --- a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss +++ b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.module.scss @@ -30,41 +30,4 @@ &__body { padding: .5rem 0; } - - &__attribute { - display: flex; - align-items: center; - gap: .5rem; - padding: .5rem .5rem; - margin: 0 .5rem; - color: inherit; - text-decoration: none; - border-radius: var(--border-radius-small); - &:hover { - background: var(--color-mono-light); - } - } - - &__peak-indicator { - display: inline-flex; - justify-content: space-between; - padding: 0.2rem; - border-radius: 100%; - opacity: .9; - margin-left: 5px; - - &--color-green { - background: var(--color-green); - } - - &--color-red { - background: var(--color-red); - } - } - - &__value { - background: var(--color-mono-light); - padding: 5px 10px; - border-radius: 10px; - } } diff --git a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx index aa29ffe..84b8d32 100644 --- a/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx +++ b/src/client/apps/contwatch-client/app/handlers/components/HandlerWidget/HandlerWidget.tsx @@ -1,17 +1,16 @@ -import { FC } from "react"; -import { HandlerModel } from "@repo/types/HandlerModel"; -import { DateTime } from "luxon"; - -import styles from "./HandlerWidget.module.scss"; -import { bemClassNames } from "@repo/utils/bemClassNames"; -import { Column } from "@repo/ui/FlexPartials"; +import type { HandlerModel } from "@repo/types/HandlerModel"; import { Flex } from "@repo/ui/Flex"; -import { Text } from "@repo/ui/Text"; +import { Column } from "@repo/ui/FlexPartials"; import { Icon } from "@repo/ui/Icon"; -import { useDataStats, useHandlerAttributes } from "@repo/utils/swrEndpoints"; -import { Separator } from "@repo/ui/Separator"; +import { Text } from "@repo/ui/Text"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { useHandlerAttributes } from "@repo/utils/swrEndpoints"; import { useTranslation } from "@repo/utils/useTranslation"; -import Link from "next/link"; +import { DateTime } from "luxon"; +import type { FC } from "react"; + +import { AttributeWidget } from "../AttributeWidget/AttributeWidget"; +import styles from "./HandlerWidget.module.scss"; type HandlerWidgetProps = { handler: HandlerModel; @@ -22,7 +21,6 @@ const bem = bemClassNames(styles); export const HandlerWidget: FC = ({ handler }) => { const { t } = useTranslation(); const { data: attributes } = useHandlerAttributes(handler.id); - const { data: dataStats } = useDataStats(); return ( @@ -59,77 +57,9 @@ export const HandlerWidget: FC = ({ handler }) => {
{attributes && attributes.length > 0 && (
- {attributes?.map((attribute) => { - const minStat = dataStats?.find( - (stat) => stat.type === "min" && stat.attribute === attribute.id, - ); - const maxStat = dataStats?.find( - (stat) => stat.type === "max" && stat.attribute === attribute.id, - ); - return ( - - - - - - {attribute.label ?? attribute.name}{" "} - {minStat?.value === attribute.data.value && - minStat?.value !== maxStat?.value && ( -
- -
- )} - {maxStat?.value === attribute.data.value && - minStat?.value !== maxStat?.value && ( -
- -
- )} - {attribute.data.trend === -1 && ( -
- -
- )} - {attribute.data.trend === 1 && ( -
- -
- )} -
- - {minStat && ( - - - - {minStat.value} {attribute.unit} - - - )} - {maxStat && ( - - - - {maxStat.value} {attribute.unit} - - - )} - -
-
- - - - {attribute.data.value} {attribute.unit} - - - ); - })} + {attributes?.map((attribute) => ( + + ))}
)}
diff --git a/src/client/apps/contwatch-client/app/handlers/components/HandlersWrapper/HandlersWrapper.tsx b/src/client/apps/contwatch-client/app/handlers/components/HandlersWrapper/HandlersWrapper.tsx index d8746f7..d60f8fe 100644 --- a/src/client/apps/contwatch-client/app/handlers/components/HandlersWrapper/HandlersWrapper.tsx +++ b/src/client/apps/contwatch-client/app/handlers/components/HandlersWrapper/HandlersWrapper.tsx @@ -1,8 +1,8 @@ -import { FC, PropsWithChildren } from "react"; import { Column } from "@repo/ui/FlexPartials"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import type { FC, PropsWithChildren } from "react"; import styles from "./HandlersWrapper.module.scss"; -import { bemClassNames } from "@repo/utils/bemClassNames"; type HandlersWrapperProps = PropsWithChildren; diff --git a/src/client/apps/contwatch-client/app/handlers/page.tsx b/src/client/apps/contwatch-client/app/handlers/page.tsx index 2217b90..d6e863a 100644 --- a/src/client/apps/contwatch-client/app/handlers/page.tsx +++ b/src/client/apps/contwatch-client/app/handlers/page.tsx @@ -2,9 +2,10 @@ import { Text } from "@repo/ui/Text"; import { useHandlers } from "@repo/utils/swrEndpoints"; -import { HandlerWidget } from "./components/HandlerWidget/HandlerWidget"; import { useTranslation } from "@repo/utils/useTranslation"; + import { HandlersWrapper } from "./components/HandlersWrapper/HandlersWrapper"; +import { HandlerWidget } from "./components/HandlerWidget/HandlerWidget"; export default function Handlers() { const { t } = useTranslation(); @@ -16,7 +17,9 @@ export default function Handlers() { {t("Handlers")}
- {handlers?.map((handler) => )} + {handlers?.map((handler) => ( + + ))} ); diff --git a/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx index 1e50bd8..a40412b 100644 --- a/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx +++ b/src/client/apps/contwatch-client/app/inspector/components/InspectorChart/InspectorChart.tsx @@ -1,9 +1,15 @@ import "chartjs-adapter-date-fns"; +import { Button } from "@repo/ui/Button"; +import { Flex } from "@repo/ui/Flex"; +import { Column } from "@repo/ui/FlexPartials"; +import { bemClassNames } from "@repo/utils/bemClassNames"; +import { useAttributeChart } from "@repo/utils/swrEndpoints"; +import { useTranslation } from "@repo/utils/useTranslation"; import { CategoryScale, Chart, - ChartOptions, + type ChartOptions, Legend, LinearScale, LineElement, @@ -12,18 +18,11 @@ import { Title, Tooltip, } from "chart.js"; -import { FC, useCallback, useEffect, useState } from "react"; +import { type FC, useCallback, useEffect, useState } from "react"; import { Line } from "react-chartjs-2"; import { options } from "./chartOptions"; - import styles from "./InspectorChart.module.scss"; -import { bemClassNames } from "@repo/utils/bemClassNames"; -import { Flex } from "@repo/ui/Flex"; -import { Button } from "@repo/ui/Button"; -import { useAttributeChart } from "@repo/utils/swrEndpoints"; -import { Column } from "@repo/ui/FlexPartials"; -import { useTranslation } from "@repo/utils/useTranslation"; Chart.register(CategoryScale, LinearScale, TimeScale, PointElement, LineElement, Title, Tooltip, Legend); @@ -57,10 +56,10 @@ export const InspectorChart: FC = ({ attributes = [], date, ref?.resetZoom?.(); }, [ref]); - // Reset zoom on attributes change + // biome-ignore lint/correctness/useExhaustiveDependencies: Reset zoom on attributes change useEffect(() => { resetZoomLevel(); - }, [attributes, resetZoomLevel, ref]); + }, [attributes, resetZoomLevel]); // TODO: Fetch each attribute data separately, this is bad for caching. const { data: attributeChartData } = useAttributeChart(attributes.sort(), date); @@ -129,8 +128,8 @@ export const InspectorChart: FC = ({ attributes = [], date, , data }} ref={(ref) => setRef(ref as unknown as Chart)} - onWheel={() => setZoomLevel((ref?.["getZoomLevel"] && ref?.getZoomLevel()) ?? 1)} - onTouchEnd={() => setZoomLevel((ref?.["getZoomLevel"] && ref?.getZoomLevel()) ?? 1)} + onWheel={() => setZoomLevel(ref?.getZoomLevel?.() ?? 1)} + onTouchEnd={() => setZoomLevel(ref?.getZoomLevel?.() ?? 1)} />
diff --git a/src/client/apps/contwatch-client/app/inspector/page.tsx b/src/client/apps/contwatch-client/app/inspector/page.tsx index 69e23f8..58a7030 100644 --- a/src/client/apps/contwatch-client/app/inspector/page.tsx +++ b/src/client/apps/contwatch-client/app/inspector/page.tsx @@ -1,17 +1,18 @@ "use client"; -import { useState } from "react"; -import { Text } from "@repo/ui/Text"; -import { useAttributes } from "@repo/utils/swrEndpoints"; +import { useLocalization } from "@repo/store/hooks/useLocalization"; import { Button } from "@repo/ui/Button"; import { Flex } from "@repo/ui/Flex"; -import { InspectorChart } from "./components/InspectorChart/InspectorChart"; -import { useTranslation } from "@repo/utils/useTranslation"; -import { Popup } from "@repo/ui/Popup"; import { Column } from "@repo/ui/FlexPartials"; import { Input } from "@repo/ui/Input"; +import { Popup } from "@repo/ui/Popup"; +import { Text } from "@repo/ui/Text"; +import { useAttributes } from "@repo/utils/swrEndpoints"; +import { useTranslation } from "@repo/utils/useTranslation"; import { useSearchParams } from "next/navigation"; -import { useLocalization } from "@repo/store/hooks/useLocalization"; +import { useState } from "react"; + +import { InspectorChart } from "./components/InspectorChart/InspectorChart"; export default function Inspector() { const { t } = useTranslation(); @@ -21,7 +22,7 @@ export default function Inspector() { const searchParams = useSearchParams(); const paramAttribute = searchParams.get("attribute"); - const paramAttributeInt = paramAttribute ? parseInt(paramAttribute) : undefined; + const paramAttributeInt = paramAttribute ? Number.parseInt(paramAttribute) : undefined; /** TODO: Store selected attributes in redux */ const [selectedAttributes, setSelectedAttributes] = useState( diff --git a/src/client/apps/contwatch-client/app/layout.tsx b/src/client/apps/contwatch-client/app/layout.tsx index bf790ea..d36559c 100644 --- a/src/client/apps/contwatch-client/app/layout.tsx +++ b/src/client/apps/contwatch-client/app/layout.tsx @@ -1,8 +1,10 @@ -import type { Metadata } from "next"; import "./globals.scss"; -import { PropsWithChildren, Suspense } from "react"; -import { NavbarLayout } from "@repo/ui/NavbarLayout"; + import { openSans } from "@repo/ui/fonts"; +import { NavbarLayout } from "@repo/ui/NavbarLayout"; +import type { Metadata } from "next"; +import { type PropsWithChildren, Suspense } from "react"; + import { Providers } from "./providers"; export const metadata: Metadata = { diff --git a/src/client/apps/contwatch-client/app/page.tsx b/src/client/apps/contwatch-client/app/page.tsx index 72a0919..fd63bbf 100644 --- a/src/client/apps/contwatch-client/app/page.tsx +++ b/src/client/apps/contwatch-client/app/page.tsx @@ -1,9 +1,9 @@ "use client"; -import { Text } from "@repo/ui/Text"; -import { useTranslation } from "@repo/utils/useTranslation"; import { Button } from "@repo/ui/Button"; import { Flex } from "@repo/ui/Flex"; +import { Text } from "@repo/ui/Text"; +import { useTranslation } from "@repo/utils/useTranslation"; export default function Overview() { // TODO: Use SSR translation and remove "use client" diff --git a/src/client/apps/contwatch-client/app/providers.tsx b/src/client/apps/contwatch-client/app/providers.tsx index ff98915..2ffd1d9 100644 --- a/src/client/apps/contwatch-client/app/providers.tsx +++ b/src/client/apps/contwatch-client/app/providers.tsx @@ -2,7 +2,7 @@ import { StoreProvider } from "@repo/store/StoreProvider"; // import { ThemeProvider } from "next-themes"; -import { PropsWithChildren } from "react"; +import type { PropsWithChildren } from "react"; export function Providers({ children }: PropsWithChildren) { return ( diff --git a/src/client/apps/contwatch-client/eslint.config.js b/src/client/apps/contwatch-client/eslint.config.js new file mode 100644 index 0000000..e8759ff --- /dev/null +++ b/src/client/apps/contwatch-client/eslint.config.js @@ -0,0 +1,4 @@ +import { nextJsConfig } from "@repo/eslint-config/next-js"; + +/** @type {import("eslint").Linter.Config} */ +export default nextJsConfig; diff --git a/src/client/apps/contwatch-client/next.config.mjs b/src/client/apps/contwatch-client/next.config.mjs index c36f52b..7d379ee 100644 --- a/src/client/apps/contwatch-client/next.config.mjs +++ b/src/client/apps/contwatch-client/next.config.mjs @@ -18,7 +18,7 @@ const nextConfig = { return { afterFiles: [ { - source: `/media/:path*`, + source: "/media/:path*", destination: `${PROTOCOL}://${HOST}:${PORT}/media/:path*/`, }, { diff --git a/src/client/apps/docs/app/globals.css b/src/client/apps/docs/app/globals.css index 6af7ecb..3a2429b 100644 --- a/src/client/apps/docs/app/globals.css +++ b/src/client/apps/docs/app/globals.css @@ -1,50 +1,50 @@ :root { - --background: #ffffff; - --foreground: #171717; + --background: #ffffff; + --foreground: #171717; } @media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } + :root { + --background: #0a0a0a; + --foreground: #ededed; + } } html, body { - max-width: 100vw; - overflow-x: hidden; + max-width: 100vw; + overflow-x: hidden; } body { - color: var(--foreground); - background: var(--background); + color: var(--foreground); + background: var(--background); } * { - box-sizing: border-box; - padding: 0; - margin: 0; + box-sizing: border-box; + padding: 0; + margin: 0; } a { - color: inherit; - text-decoration: none; + color: inherit; + text-decoration: none; } .imgDark { - display: none; + display: none; } @media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - - .imgLight { - display: none; - } - .imgDark { - display: unset; - } + html { + color-scheme: dark; + } + + .imgLight { + display: none; + } + .imgDark { + display: unset; + } } diff --git a/src/client/apps/docs/app/layout.tsx b/src/client/apps/docs/app/layout.tsx index 8469537..0283094 100644 --- a/src/client/apps/docs/app/layout.tsx +++ b/src/client/apps/docs/app/layout.tsx @@ -1,31 +1,30 @@ +import "./globals.css"; + import type { Metadata } from "next"; import localFont from "next/font/local"; -import "./globals.css"; const geistSans = localFont({ - src: "./fonts/GeistVF.woff", - variable: "--font-geist-sans", + src: "./fonts/GeistVF.woff", + variable: "--font-geist-sans", }); const geistMono = localFont({ - src: "./fonts/GeistMonoVF.woff", - variable: "--font-geist-mono", + src: "./fonts/GeistMonoVF.woff", + variable: "--font-geist-mono", }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Create Next App", + description: "Generated by create next app", }; export default function RootLayout({ - children, + children, }: Readonly<{ - children: React.ReactNode; + children: React.ReactNode; }>) { - return ( - - - {children} - - - ); + return ( + + {children} + + ); } diff --git a/src/client/apps/docs/app/page.module.css b/src/client/apps/docs/app/page.module.css index 3630662..09961ca 100644 --- a/src/client/apps/docs/app/page.module.css +++ b/src/client/apps/docs/app/page.module.css @@ -1,188 +1,188 @@ .page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); + --gray-rgb: 0, 0, 0; + --gray-alpha-200: rgba(var(--gray-rgb), 0.08); + --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; + --button-primary-hover: #383838; + --button-secondary-hover: #f2f2f2; - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-synthesis: none; + display: grid; + grid-template-rows: 20px 1fr 20px; + align-items: center; + justify-items: center; + min-height: 100svh; + padding: 80px; + gap: 64px; + font-synthesis: none; } @media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); + .page { + --gray-rgb: 255, 255, 255; + --gray-alpha-200: rgba(var(--gray-rgb), 0.145); + --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } + --button-primary-hover: #ccc; + --button-secondary-hover: #1a1a1a; + } } .main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; + display: flex; + flex-direction: column; + gap: 32px; + grid-row-start: 2; } .main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; + /*font-family: var(--font-geist-mono);*/ + padding-left: 0; + margin: 0; + font-size: 14px; + line-height: 24px; + letter-spacing: -0.01em; + list-style-position: inside; } .main li:not(:last-of-type) { - margin-bottom: 8px; + margin-bottom: 8px; } .main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; + font-family: inherit; + background: var(--gray-alpha-100); + padding: 2px 4px; + border-radius: 4px; + font-weight: 600; } .ctas { - display: flex; - gap: 16px; + display: flex; + gap: 16px; } .ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; + appearance: none; + border-radius: 128px; + height: 48px; + padding: 0 20px; + border: none; + /*font-family: var(--font-geist-sans);*/ + border: 1px solid transparent; + transition: background 0.2s, color 0.2s, border-color 0.2s; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + line-height: 20px; + font-weight: 500; } a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; + background: var(--foreground); + color: var(--background); + gap: 8px; } a.secondary { - border-color: var(--gray-alpha-200); - min-width: 180px; + border-color: var(--gray-alpha-200); + min-width: 180px; } button.secondary { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; - background: transparent; - border-color: var(--gray-alpha-200); - min-width: 180px; + appearance: none; + border-radius: 128px; + height: 48px; + padding: 0 20px; + border: none; + /*font-family: var(--font-geist-sans);*/ + border: 1px solid transparent; + transition: background 0.2s, color 0.2s, border-color 0.2s; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + line-height: 20px; + font-weight: 500; + background: transparent; + border-color: var(--gray-alpha-200); + min-width: 180px; } .footer { - font-family: var(--font-geist-sans); - grid-row-start: 3; - display: flex; - gap: 24px; + /*font-family: var(--font-geist-sans);*/ + grid-row-start: 3; + display: flex; + gap: 24px; } .footer a { - display: flex; - align-items: center; - gap: 8px; + display: flex; + align-items: center; + gap: 8px; } .footer img { - flex-shrink: 0; + flex-shrink: 0; } /* Enable hover only on non-touch devices */ @media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } + a.primary:hover { + background: var(--button-primary-hover); + border-color: transparent; + } - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } + a.secondary:hover { + background: var(--button-secondary-hover); + border-color: transparent; + } - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } + .footer a:hover { + text-decoration: underline; + text-underline-offset: 4px; + } } @media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; - } + .page { + padding: 32px; + padding-bottom: 80px; + } - .main { - align-items: center; - } + .main { + align-items: center; + } - .main ol { - text-align: center; - } + .main ol { + text-align: center; + } - .ctas { - flex-direction: column; - } + .ctas { + flex-direction: column; + } - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } + .ctas a { + font-size: 14px; + height: 40px; + padding: 0 16px; + } - a.secondary { - min-width: auto; - } + a.secondary { + min-width: auto; + } - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } + .footer { + flex-wrap: wrap; + align-items: center; + justify-content: center; + } } @media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } + .logo { + filter: invert(); + } } diff --git a/src/client/apps/docs/app/page.tsx b/src/client/apps/docs/app/page.tsx index 5d47126..58027de 100644 --- a/src/client/apps/docs/app/page.tsx +++ b/src/client/apps/docs/app/page.tsx @@ -1,98 +1,87 @@ import Image, { type ImageProps } from "next/image"; + import styles from "./page.module.css"; type Props = Omit & { - srcLight: string; - srcDark: string; + srcLight: string; + srcDark: string; }; const ThemeImage = (props: Props) => { - const { srcLight, srcDark, ...rest } = props; + const { srcLight, srcDark, ...rest } = props; - return ( - <> - - - - ); + return ( + <> + + + + ); }; export default function Home() { - return ( -
- ); + ); } diff --git a/src/client/apps/docs/eslint.config.js b/src/client/apps/docs/eslint.config.js new file mode 100644 index 0000000..e8759ff --- /dev/null +++ b/src/client/apps/docs/eslint.config.js @@ -0,0 +1,4 @@ +import { nextJsConfig } from "@repo/eslint-config/next-js"; + +/** @type {import("eslint").Linter.Config} */ +export default nextJsConfig; diff --git a/src/client/apps/docs/next.config.js b/src/client/apps/docs/next.config.js new file mode 100644 index 0000000..4678774 --- /dev/null +++ b/src/client/apps/docs/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +export default nextConfig; diff --git a/src/client/apps/docs/package.json b/src/client/apps/docs/package.json index 0c3bfb1..8a92f5d 100644 --- a/src/client/apps/docs/package.json +++ b/src/client/apps/docs/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@repo/eslint-config": "*", "@repo/typescript-config": "*", - "@types/node": "^20", + "@types/node": "^22", "@types/react": "19.0.2", "@types/react-dom": "19.0.2", "typescript": "5.5.4" diff --git a/src/client/biome.json b/src/client/biome.json new file mode 100644 index 0000000..ea0e21f --- /dev/null +++ b/src/client/biome.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [".next", "*.json"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 4, + "lineWidth": 110 + }, + "organizeImports": { + "enabled": false + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "noUnusedImports": { + "level": "error" + } + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/src/client/package-lock.json b/src/client/package-lock.json index a27c7dc..3085e01 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -21,7 +21,9 @@ "typescript": "5.7.2" }, "devDependencies": { + "@biomejs/biome": "1.9.4", "@types/luxon": "^3.4.2", + "eslint-plugin-simple-import-sort": "^12.1.1", "prettier": "^3.2.5", "stylelint": "16.10.0", "stylelint-config-prettier-scss": "1.0.0", @@ -30,7 +32,7 @@ "stylelint-order": "6.0.4" }, "engines": { - "node": ">=18" + "node": ">=22" } }, "apps/contwatch-client": { @@ -59,7 +61,7 @@ "devDependencies": { "@repo/eslint-config": "*", "@repo/typescript-config": "*", - "@types/node": "^20", + "@types/node": "^22", "@types/react": "19.0.2", "@types/react-dom": "19.0.2", "typescript": "5.5.4" @@ -1982,6 +1984,170 @@ "dev": true, "license": "MIT" }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -4776,13 +4942,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "22.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz", + "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.20.0" } }, "node_modules/@types/react": { @@ -7616,6 +7782,16 @@ "semver": "bin/semver.js" } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-plugin-turbo": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-2.3.3.tgz", @@ -15876,9 +16052,9 @@ } }, "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==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" }, @@ -16579,7 +16755,7 @@ "@testing-library/react": "16.1.0", "@testing-library/user-event": "14.5.2", "@turbo/gen": "^1.12.4", - "@types/node": "^20.11.24", + "@types/node": "^22", "@types/react": "19.0.2", "@types/react-dom": "19.0.2", "@types/redux-mock-store": "1.5.0", diff --git a/src/client/package.json b/src/client/package.json index 50f0ffe..53058d9 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -7,6 +7,7 @@ "lint": "turbo lint", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "stylelint": "turbo stylelint", + "biome": "biome check", "test": "turbo test", "ci": "turbo build lint stylelint test" }, @@ -22,7 +23,9 @@ "typescript": "5.7.2" }, "devDependencies": { + "@biomejs/biome": "1.9.4", "@types/luxon": "^3.4.2", + "eslint-plugin-simple-import-sort": "^12.1.1", "prettier": "^3.2.5", "stylelint": "16.10.0", "stylelint-config-prettier-scss": "1.0.0", @@ -31,7 +34,7 @@ "stylelint-order": "6.0.4" }, "engines": { - "node": ">=18" + "node": ">=22" }, "packageManager": "npm@10.8.1", "workspaces": [ diff --git a/src/client/packages/eslint-config/base.js b/src/client/packages/eslint-config/base.js index 31f5f43..9a5916e 100644 --- a/src/client/packages/eslint-config/base.js +++ b/src/client/packages/eslint-config/base.js @@ -1,8 +1,9 @@ import js from "@eslint/js"; import eslintConfigPrettier from "eslint-config-prettier"; +import onlyWarn from "eslint-plugin-only-warn"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; import turboPlugin from "eslint-plugin-turbo"; import tseslint from "typescript-eslint"; -import onlyWarn from "eslint-plugin-only-warn"; /** * A shared ESLint configuration for the repository. @@ -10,23 +11,26 @@ import onlyWarn from "eslint-plugin-only-warn"; * @type {import("eslint").Linter.Config} * */ export const config = [ - js.configs.recommended, - eslintConfigPrettier, - ...tseslint.configs.recommended, - { - plugins: { - turbo: turboPlugin, + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + { + plugins: { + turbo: turboPlugin, + "simple-import-sort": simpleImportSort, + }, + rules: { + "turbo/no-undeclared-env-vars": "warn", + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error", + }, }, - rules: { - "turbo/no-undeclared-env-vars": "warn", + { + plugins: { + onlyWarn, + }, }, - }, - { - plugins: { - onlyWarn, + { + ignores: ["dist/**"], }, - }, - { - ignores: ["dist/**"], - }, ]; diff --git a/src/client/packages/eslint-config/next.js b/src/client/packages/eslint-config/next.js index 1997af7..d0c3b5a 100644 --- a/src/client/packages/eslint-config/next.js +++ b/src/client/packages/eslint-config/next.js @@ -1,10 +1,10 @@ import js from "@eslint/js"; +import pluginNext from "@next/eslint-plugin-next"; import eslintConfigPrettier from "eslint-config-prettier"; -import tseslint from "typescript-eslint"; -import pluginReactHooks from "eslint-plugin-react-hooks"; import pluginReact from "eslint-plugin-react"; +import pluginReactHooks from "eslint-plugin-react-hooks"; import globals from "globals"; -import pluginNext from "@next/eslint-plugin-next"; +import tseslint from "typescript-eslint"; import { config as baseConfig } from "./base.js"; /** @@ -13,37 +13,37 @@ import { config as baseConfig } from "./base.js"; * @type {import("eslint").Linter.Config} * */ export const nextJsConfig = [ - ...baseConfig, - js.configs.recommended, - eslintConfigPrettier, - ...tseslint.configs.recommended, - { - ...pluginReact.configs.flat.recommended, - languageOptions: { - ...pluginReact.configs.flat.recommended.languageOptions, - globals: { - ...globals.serviceworker, - }, - }, - }, - { - plugins: { - "@next/next": pluginNext, - }, - rules: { - ...pluginNext.configs.recommended.rules, - ...pluginNext.configs["core-web-vitals"].rules, + ...baseConfig, + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + { + ...pluginReact.configs.flat.recommended, + languageOptions: { + ...pluginReact.configs.flat.recommended.languageOptions, + globals: { + ...globals.serviceworker, + }, + }, }, - }, - { - plugins: { - "react-hooks": pluginReactHooks, + { + plugins: { + "@next/next": pluginNext, + }, + rules: { + ...pluginNext.configs.recommended.rules, + ...pluginNext.configs["core-web-vitals"].rules, + }, }, - settings: { react: { version: "detect" } }, - rules: { - ...pluginReactHooks.configs.recommended.rules, - // React scope no longer necessary with new JSX transform. - "react/react-in-jsx-scope": "off", + { + plugins: { + "react-hooks": pluginReactHooks, + }, + settings: { react: { version: "detect" } }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + // React scope no longer necessary with new JSX transform. + "react/react-in-jsx-scope": "off", + }, }, - }, ]; diff --git a/src/client/packages/eslint-config/react-internal.js b/src/client/packages/eslint-config/react-internal.js index 0cc8b1d..4962db6 100644 --- a/src/client/packages/eslint-config/react-internal.js +++ b/src/client/packages/eslint-config/react-internal.js @@ -1,9 +1,9 @@ import js from "@eslint/js"; import eslintConfigPrettier from "eslint-config-prettier"; -import tseslint from "typescript-eslint"; -import pluginReactHooks from "eslint-plugin-react-hooks"; import pluginReact from "eslint-plugin-react"; +import pluginReactHooks from "eslint-plugin-react-hooks"; import globals from "globals"; +import tseslint from "typescript-eslint"; import { config as baseConfig } from "./base.js"; /** @@ -11,29 +11,29 @@ import { config as baseConfig } from "./base.js"; * * @type {import("eslint").Linter.Config} */ export const config = [ - ...baseConfig, - js.configs.recommended, - eslintConfigPrettier, - ...tseslint.configs.recommended, - pluginReact.configs.flat.recommended, - { - languageOptions: { - ...pluginReact.configs.flat.recommended.languageOptions, - globals: { - ...globals.serviceworker, - ...globals.browser, - }, - }, - }, - { - plugins: { - "react-hooks": pluginReactHooks, + ...baseConfig, + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, + { + languageOptions: { + ...pluginReact.configs.flat.recommended.languageOptions, + globals: { + ...globals.serviceworker, + ...globals.browser, + }, + }, }, - settings: { react: { version: "detect" } }, - rules: { - ...pluginReactHooks.configs.recommended.rules, - // React scope no longer necessary with new JSX transform. - "react/react-in-jsx-scope": "off", + { + plugins: { + "react-hooks": pluginReactHooks, + }, + settings: { react: { version: "detect" } }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + // React scope no longer necessary with new JSX transform. + "react/react-in-jsx-scope": "off", + }, }, - }, ]; diff --git a/src/client/packages/store/eslint.config.js b/src/client/packages/store/eslint.config.js new file mode 100644 index 0000000..19170f8 --- /dev/null +++ b/src/client/packages/store/eslint.config.js @@ -0,0 +1,4 @@ +import { config } from "@repo/eslint-config/react-internal"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/src/client/packages/store/eslint.config.mjs b/src/client/packages/store/eslint.config.mjs deleted file mode 100644 index 3254711..0000000 --- a/src/client/packages/store/eslint.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -import path from "node:path"; -import { fileURLToPath } from "node:url"; - -import { FlatCompat } from "@eslint/eslintrc"; -import js from "@eslint/js"; -import tsParser from "@typescript-eslint/parser"; -import globals from "globals"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}); - -const config = [ - ...compat.extends("@repo/eslint-config/next.js"), - { - languageOptions: { - globals: { - ...globals.jest, - }, - - parser: tsParser, - }, - }, - { - files: ["**/*.ts?(x)"], - }, -]; - -export default config; diff --git a/src/client/packages/store/package.json b/src/client/packages/store/package.json index bbc7633..73dccd1 100644 --- a/src/client/packages/store/package.json +++ b/src/client/packages/store/package.json @@ -1,6 +1,7 @@ { "name": "@repo/store", "version": "1.0.0", + "type": "module", "private": true, "dependencies": { "@repo/types": "*", diff --git a/src/client/packages/store/src/components/StoreProvider.tsx b/src/client/packages/store/src/components/StoreProvider.tsx index 46180fa..9564ae2 100644 --- a/src/client/packages/store/src/components/StoreProvider.tsx +++ b/src/client/packages/store/src/components/StoreProvider.tsx @@ -1,16 +1,17 @@ "use client"; -import { FC, PropsWithChildren, useCallback, useRef } from "react"; +import { type FC, type PropsWithChildren, useCallback, useRef } from "react"; import { Provider } from "react-redux"; import { setLocaleState } from "../slices/settingsSlice"; -import { AppStore, makeStore } from "../store"; +import { type AppStore, makeStore } from "../store"; type StoreProviderProps = PropsWithChildren<{ lang?: string; }>; -export const StoreProvider: FC = ({ lang, children }) => { +// export const StoreProvider: FC = ({ lang, children }) => { +export const StoreProvider: FC = ({ children }) => { /** * Get the current locale. Uses the browser's locale if available, otherwise defaults to en-US. * This is used only for state initialization. Use redux selector "selectLocaleState" to get the current locale. diff --git a/src/client/packages/store/src/hooks/useLocalization.ts b/src/client/packages/store/src/hooks/useLocalization.ts index 4ef664e..47d2944 100644 --- a/src/client/packages/store/src/hooks/useLocalization.ts +++ b/src/client/packages/store/src/hooks/useLocalization.ts @@ -36,11 +36,10 @@ export const useLocalization = () => { * @param currency The currency to localize to. * @param locale The locale to localize to. Defaults to the current locale. */ - const localizeCurrency = (value: number = NaN, currency: string = "CZK", locale?: LOCALES) => { + const localizeCurrency = (value: number = Number.NaN, currency = "CZK", locale?: LOCALES) => { const result = new Intl.NumberFormat(locale ?? currentLocale, { style: "currency", currency, - // @ts-ignore trailingZeroDisplay: "stripIfInteger", }).format(value); if (Number.isNaN(value)) { diff --git a/src/client/packages/store/src/slices/settingsSlice.ts b/src/client/packages/store/src/slices/settingsSlice.ts index 6e06a49..f646961 100644 --- a/src/client/packages/store/src/slices/settingsSlice.ts +++ b/src/client/packages/store/src/slices/settingsSlice.ts @@ -1,7 +1,7 @@ import { createSlice } from "@reduxjs/toolkit"; // import { LOCALES } from "../localization"; -import { AppState } from "../store"; +import type { AppState } from "../store"; export enum LOCALES { cs = "cs", diff --git a/src/client/packages/store/src/store.ts b/src/client/packages/store/src/store.ts index c6889d3..0e779ec 100644 --- a/src/client/packages/store/src/store.ts +++ b/src/client/packages/store/src/store.ts @@ -1,4 +1,4 @@ -import { Action, configureStore, ThunkAction } from "@reduxjs/toolkit"; +import { type Action, configureStore, type ThunkAction } from "@reduxjs/toolkit"; import { settingsSlice } from "./slices/settingsSlice"; diff --git a/src/client/packages/types/package.json b/src/client/packages/types/package.json index dedc666..23799d5 100644 --- a/src/client/packages/types/package.json +++ b/src/client/packages/types/package.json @@ -1,9 +1,10 @@ { "name": "@repo/types", "version": "1.0.0", + "type": "module", "private": true, "exports": { - "./AttributeModel": "./src/models/ArticleModel.ts", + "./AttributeModel": "./src/models/AttributeModel.ts", "./AttributeChartModel": "./src/models/AttributeChartModel.ts", "./DataStatModel": "./src/models/DataStatModel.ts", "./HandlerModel": "./src/models/HandlerModel.ts" diff --git a/src/client/packages/types/src/models/AttributeModel.ts b/src/client/packages/types/src/models/AttributeModel.ts index 338f8c4..f2123e4 100644 --- a/src/client/packages/types/src/models/AttributeModel.ts +++ b/src/client/packages/types/src/models/AttributeModel.ts @@ -1,4 +1,4 @@ -import { IconProps } from "@repo/ui/Icon"; +import type { IconProps } from "@repo/ui/Icon"; export interface AttributeModel { id: number; @@ -9,9 +9,7 @@ export interface AttributeModel { label?: string; icon?: IconProps["icon"]; data: { - handler_name: string; value?: string | number; - status: 0 | 1 | 2; trend: -1 | 0 | 1; }; } diff --git a/src/client/packages/types/src/models/HandlerModel.ts b/src/client/packages/types/src/models/HandlerModel.ts index 512d5ac..12e54d7 100644 --- a/src/client/packages/types/src/models/HandlerModel.ts +++ b/src/client/packages/types/src/models/HandlerModel.ts @@ -1,9 +1,9 @@ -import { IconProps } from "@repo/ui/Icon"; +import type { IconProps } from "@repo/ui/Icon"; export enum HandlerStatus { - DISCONNECTED, - CONNECTED, - DISABLED, + DISCONNECTED = 0, + CONNECTED = 1, + DISABLED = 2, } export type HandlerConfig = Record; diff --git a/src/client/packages/typescript-config/base.json b/src/client/packages/typescript-config/base.json index fea8b62..76be90e 100644 --- a/src/client/packages/typescript-config/base.json +++ b/src/client/packages/typescript-config/base.json @@ -6,7 +6,7 @@ "esModuleInterop": true, "incremental": false, "isolatedModules": true, - "lib": ["es2022", "DOM", "DOM.Iterable"], + "lib": ["es2023", "DOM", "DOM.Iterable"], "module": "NodeNext", "moduleDetection": "force", "moduleResolution": "Bundler", @@ -14,6 +14,6 @@ "resolveJsonModule": true, "skipLibCheck": true, "strict": true, - "target": "ES2022" + "target": "ES2023" } } diff --git a/src/client/packages/ui/eslint.config.js b/src/client/packages/ui/eslint.config.js new file mode 100644 index 0000000..19170f8 --- /dev/null +++ b/src/client/packages/ui/eslint.config.js @@ -0,0 +1,4 @@ +import { config } from "@repo/eslint-config/react-internal"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/src/client/packages/ui/package.json b/src/client/packages/ui/package.json index a979df8..ca35b89 100644 --- a/src/client/packages/ui/package.json +++ b/src/client/packages/ui/package.json @@ -20,7 +20,7 @@ "./fonts": "./src/fonts.ts" }, "scripts": { - "lint": "eslint . --max-warnings 0", + "lint": "eslint . --max-warnings 0 --cache", "test": "jest", "generate:component": "turbo gen react-component" }, @@ -38,7 +38,7 @@ "@testing-library/react": "16.1.0", "@testing-library/user-event": "14.5.2", "@turbo/gen": "^1.12.4", - "@types/node": "^20.11.24", + "@types/node": "^22", "@types/react": "19.0.2", "@types/react-dom": "19.0.2", "@types/redux-mock-store": "1.5.0", diff --git a/src/client/packages/ui/src/components/Button/Button.tsx b/src/client/packages/ui/src/components/Button/Button.tsx index fe65ada..6c0dfaa 100644 --- a/src/client/packages/ui/src/components/Button/Button.tsx +++ b/src/client/packages/ui/src/components/Button/Button.tsx @@ -2,10 +2,10 @@ import { bemClassNames } from "@repo/utils/bemClassNames"; import Link from "next/link"; -import { FC, PropsWithChildren, useState } from "react"; +import { type FC, type PropsWithChildren, useState } from "react"; import { ClipLoader } from "react-spinners"; -import { Icon, IconProps } from "../Icon/Icon"; +import { Icon, type IconProps } from "../Icon/Icon"; import styles from "./Button.module.scss"; export type ButtonProps = { @@ -22,7 +22,7 @@ export type ButtonProps = { navbar?: boolean; blank?: boolean; uppercased?: boolean; - onClick?: string | (() => Promise | void); + onClick?: string | (() => Promise) | (() => void); afterClick?: () => void; redirect?: boolean; slim?: boolean; @@ -69,7 +69,7 @@ export const Button: FC> = ({ return ( { diff --git a/src/client/packages/ui/src/components/Flex/Flex.tsx b/src/client/packages/ui/src/components/Flex/Flex.tsx index e1d1bb5..03e5e11 100644 --- a/src/client/packages/ui/src/components/Flex/Flex.tsx +++ b/src/client/packages/ui/src/components/Flex/Flex.tsx @@ -1,6 +1,6 @@ import { bemClassNames } from "@repo/utils/bemClassNames"; -import { Property } from "csstype"; -import { FC, PropsWithChildren } from "react"; +import type { Property } from "csstype"; +import type { FC, PropsWithChildren } from "react"; import styles from "./Flex.module.scss"; @@ -16,6 +16,7 @@ export type FlexProps = PropsWithChildren<{ gap?: Property.Gap; basis?: Property.FlexBasis; height?: Property.Height; + maxHeight?: Property.MaxHeight; width?: Property.Width; maxWidth?: Property.MaxWidth; grow?: Property.FlexGrow | boolean; @@ -37,6 +38,7 @@ export const Flex: FC = ({ gap, basis, height, + maxHeight, width, maxWidth, grow, @@ -67,6 +69,7 @@ export const Flex: FC = ({ flexGrow: typeof grow === "boolean" ? (grow ? 1 : 0) : grow, flexBasis: basis, height, + maxHeight, maxWidth, width, }} diff --git a/src/client/packages/ui/src/components/Icon/Icon.tsx b/src/client/packages/ui/src/components/Icon/Icon.tsx index ece92ae..48a112c 100644 --- a/src/client/packages/ui/src/components/Icon/Icon.tsx +++ b/src/client/packages/ui/src/components/Icon/Icon.tsx @@ -4,7 +4,7 @@ // import { selectIconThemeState } from "../../store/settingsSlice"; import { bemClassNames } from "@repo/utils/bemClassNames"; import Image from "next/image"; -import { EventHandler, FC, KeyboardEvent, MouseEvent } from "react"; +import type { EventHandler, FC, KeyboardEvent, MouseEvent } from "react"; import styles from "./Icon.module.scss"; @@ -70,7 +70,7 @@ export const Icon: FC = ({ active, disabled, background, - clickable: clickable || onClick, + clickable: !!(clickable || onClick), })} onClick={onClick} {...{ title }} diff --git a/src/client/packages/ui/src/components/Input/Input.test.tsx b/src/client/packages/ui/src/components/Input/Input.test.tsx index e92a0b9..ea7a27e 100644 --- a/src/client/packages/ui/src/components/Input/Input.test.tsx +++ b/src/client/packages/ui/src/components/Input/Input.test.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions */ import "@testing-library/jest-dom"; import { render, screen } from "@testing-library/react"; diff --git a/src/client/packages/ui/src/components/Input/Input.tsx b/src/client/packages/ui/src/components/Input/Input.tsx index f3f20a7..3845e68 100644 --- a/src/client/packages/ui/src/components/Input/Input.tsx +++ b/src/client/packages/ui/src/components/Input/Input.tsx @@ -1,13 +1,13 @@ "use client"; -import { LOCALES, selectLocaleState } from "@repo/store/slices/settingsSlice"; +import { type LOCALES, selectLocaleState } from "@repo/store/slices/settingsSlice"; import { bemClassNames } from "@repo/utils/bemClassNames"; -import { Property } from "csstype"; -import { FC, HTMLInputTypeAttribute, useCallback, useEffect, useState } from "react"; +import type { Property } from "csstype"; +import { type FC, type HTMLInputTypeAttribute, useCallback, useEffect, useState } from "react"; import { useSelector } from "react-redux"; import { openSans } from "../../fonts"; -import { Icon, IconProps } from "../Icon/Icon"; +import { Icon, type IconProps } from "../Icon/Icon"; import { Text } from "../Text/Text"; import styles from "./Input.module.scss"; @@ -64,9 +64,11 @@ export const Input: FC = ({ (value: number) => { if (min !== undefined && value < min) { return min; - } else if (max && value > max) { + } + if (max && value > max) { return max; - } else if (isNaN(value)) { + } + if (Number.isNaN(value)) { return min ?? 0; } @@ -97,7 +99,7 @@ export const Input: FC = ({ const currentLocale = useSelector(selectLocaleState); useEffect(() => { - let newValue; + let newValue: number; if (typeof value === "number") { newValue = value; } else { @@ -121,7 +123,7 @@ export const Input: FC = ({ const normalizedInput = input.split(groupSeparator).join("").split(decimalSeparator).join("."); // Parse the normalized number - return parseFloat(normalizedInput); + return Number.parseFloat(normalizedInput); } function formatLocalizedFloat(value: number, locale: LOCALES) { @@ -131,10 +133,12 @@ export const Input: FC = ({ const Component = type === "long-text" ? "textarea" : type === "pick" ? "select" : "input"; return ( + // biome-ignore lint/a11y/noLabelWithoutControl:

41`eR`3l$Vv=zMNJq(73Y|ij<8OWC=ZbCZutR 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 MmDnSJgEZ}b0mzqS2><{9 diff --git a/src/client/public/fonts/RobotoMono-Medium.ttf b/src/client/public/fonts/RobotoMono-Medium.ttf deleted file mode 100644 index 8461be77a38bdc0e47b678f1623df33379535d8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86820 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 Ce6P0v diff --git a/src/client/public/fonts/RobotoMono-Regular.ttf b/src/client/public/fonts/RobotoMono-Regular.ttf deleted file mode 100644 index 7c4ce36a442d14eeb12444ad707c2afa19422fd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86908 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 - - diff --git a/src/client/public/icons/cosmic/battery-medium.svg b/src/client/public/icons/cosmic/battery-medium.svg deleted file mode 100644 index 7815fe0..0000000 --- a/src/client/public/icons/cosmic/battery-medium.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/client/public/icons/cosmic/lightbulb.svg b/src/client/public/icons/cosmic/lightbulb.svg deleted file mode 100644 index 672962f..0000000 --- a/src/client/public/icons/cosmic/lightbulb.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/client/public/icons/cosmic/plus-small.svg b/src/client/public/icons/cosmic/plus-small.svg deleted file mode 100644 index 7fe358f..0000000 --- a/src/client/public/icons/cosmic/plus-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/client/public/icons/cosmic/power.svg b/src/client/public/icons/cosmic/power.svg deleted file mode 100644 index 895f37e..0000000 --- a/src/client/public/icons/cosmic/power.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/client/public/icons/cosmic/settings.svg b/src/client/public/icons/cosmic/settings.svg deleted file mode 100644 index 43b5ee5..0000000 --- a/src/client/public/icons/cosmic/settings.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/client/public/icons/cosmic/sun.svg b/src/client/public/icons/cosmic/sun.svg deleted file mode 100644 index 731c47b..0000000 --- a/src/client/public/icons/cosmic/sun.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/client/public/images/chart.png b/src/client/public/images/chart.png deleted file mode 100644 index f8378ec44dbd671529450e0337b2ed2bfebd7a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 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 NY^)qnPb@rQ{{t<5iKzep diff --git a/src/client/src/bridge/endpoints.ts b/src/client/src/bridge/endpoints.ts deleted file mode 100644 index 9c57a47..0000000 --- a/src/client/src/bridge/endpoints.ts +++ /dev/null @@ -1,20 +0,0 @@ -export enum Endpoint { - // Actions - availableNode = "core/actions/available-nodes", - availablePorts = "core/actions/available-ports", - nodeMap = "core/actions/node-map", - saveNodeMap = "core/actions/save-node-map", - // Attributes - attributes = "core/attributes", - // Charts - attributeChart = "core/charts/attribute", - // Handlers - handlers = "core/handlers/all", - addHandler = "core/handlers/add-handler", - availableHandlers = "core/handlers/available-handlers", - // Widgets - widgetTiles = "core/widgets/tiles", - widgetSwitches = "core/widgets/switches", - widgetSwitchToggle = "core/widgets/switches/toggle", -} -export const getApiEndpoint = (endpoint: Endpoint) => `/api/${endpoint}`; diff --git a/src/client/src/bridge/hooks.ts b/src/client/src/bridge/hooks.ts deleted file mode 100644 index af6e62f..0000000 --- a/src/client/src/bridge/hooks.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useEffect, useState } from "react"; - -export const useQuery = (text: string, offset: number = 1) => { - const [queryString, setQueryString] = useState(""); - - useEffect(() => { - if (text.length > offset) { - setQueryString(text); - } else if (text.length === 0) { - setQueryString(""); - } else if (!queryString.startsWith(text)) { - setQueryString(""); - } - }, [text, queryString, offset]); - - return queryString; -}; diff --git a/src/client/src/bridge/index.ts b/src/client/src/bridge/index.ts deleted file mode 100644 index 49d8f6a..0000000 --- a/src/client/src/bridge/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./modules"; diff --git a/src/client/src/bridge/models/NewHandlerModel.ts b/src/client/src/bridge/models/NewHandlerModel.ts deleted file mode 100644 index 771380a..0000000 --- a/src/client/src/bridge/models/NewHandlerModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { HandlerOptions } from "./HandlerModel"; - -export interface NewHandlerModel { - type: string; - options: HandlerOptions; -} diff --git a/src/client/src/bridge/models/Widget.ts b/src/client/src/bridge/models/Widget.ts deleted file mode 100644 index 24c2eef..0000000 --- a/src/client/src/bridge/models/Widget.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { IconName } from "../../components"; - -export interface Widget { - id: number; - name: string; - description: string; - handler: number; - status: number; - icon: IconName; - attribute: string; -} diff --git a/src/client/src/bridge/models/WidgetSwitchModel.ts b/src/client/src/bridge/models/WidgetSwitchModel.ts deleted file mode 100644 index 6649722..0000000 --- a/src/client/src/bridge/models/WidgetSwitchModel.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Widget } from "./Widget"; - -export interface WidgetSwitchModel extends Widget { - active: boolean; -} diff --git a/src/client/src/bridge/models/WidgetTileModel.ts b/src/client/src/bridge/models/WidgetTileModel.ts deleted file mode 100644 index 136a7c9..0000000 --- a/src/client/src/bridge/models/WidgetTileModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Widget } from "./Widget"; - -export interface WidgetTileModel extends Widget { - unit: string; - value: string | number | boolean; -} diff --git a/src/client/src/bridge/models/index.ts b/src/client/src/bridge/models/index.ts deleted file mode 100644 index acd113c..0000000 --- a/src/client/src/bridge/models/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./HandlerModel"; -export * from "./NewHandlerModel"; -export * from "./WidgetSwitchModel"; -export * from "./WidgetTileModel"; diff --git a/src/client/src/bridge/models/utils.ts b/src/client/src/bridge/models/utils.ts deleted file mode 100644 index 4fc089b..0000000 --- a/src/client/src/bridge/models/utils.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { HandlerStatus } from "./HandlerModel"; - -export const getStatusColor = (handlerStatus: HandlerStatus = HandlerStatus.DISCONNECTED) => { - const colors = ["red", "green", "orange", "gray"]; - return colors[handlerStatus]; -}; - -export const getStatusText = (handlerStatus: HandlerStatus = HandlerStatus.DISCONNECTED) => { - const texts = ["disconnected", "connected", "not communicating", "disabled"]; - return texts[handlerStatus]; -}; diff --git a/src/client/src/bridge/modules/actions/index.ts b/src/client/src/bridge/modules/actions/index.ts deleted file mode 100644 index f83c2dd..0000000 --- a/src/client/src/bridge/modules/actions/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NodeMap, PortTypeConfig } from "flume"; -import useSWR from "swr"; - -import { Endpoint, getApiEndpoint } from "../../endpoints"; -import { getJson, postJson } from "../../utils"; -import { NodeModel } from "./models"; - -export const useAvailableNodes = () => { - return useSWR(getApiEndpoint(Endpoint.availableNode), getJson); -}; - -export const useAvailablePorts = () => { - return useSWR(getApiEndpoint(Endpoint.availablePorts), getJson); -}; - -export const fetchNodeMap = () => { - return getJson(getApiEndpoint(Endpoint.nodeMap)); -}; - -export const saveNodeMap = (nodeMap: NodeMap, onSuccess?: () => void, onError?: (error: any) => void) => { - return postJson(getApiEndpoint(Endpoint.saveNodeMap), nodeMap, onSuccess, onError); -}; diff --git a/src/client/src/bridge/modules/actions/models/NodeModel.ts b/src/client/src/bridge/modules/actions/models/NodeModel.ts deleted file mode 100644 index 2ce75dd..0000000 --- a/src/client/src/bridge/modules/actions/models/NodeModel.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { PortTypeConfig } from "flume/dist/types"; - -export interface NodeModel { - type: string; - label: string; - description: string; - repeatableInput: string; - inputs: PortTypeConfig[]; - outputs: PortTypeConfig[]; -} diff --git a/src/client/src/bridge/modules/actions/models/index.ts b/src/client/src/bridge/modules/actions/models/index.ts deleted file mode 100644 index c3fa57a..0000000 --- a/src/client/src/bridge/modules/actions/models/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./NodeModel"; diff --git a/src/client/src/bridge/modules/attributes.ts b/src/client/src/bridge/modules/attributes.ts deleted file mode 100644 index 7e2ffb4..0000000 --- a/src/client/src/bridge/modules/attributes.ts +++ /dev/null @@ -1,9 +0,0 @@ -import useSWR from "swr"; - -import { Endpoint, getApiEndpoint } from "../endpoints"; -import { AttributeModel } from "../models/AttributeModel"; -import { getJson } from "../utils"; - -export const useAttributes = () => { - return useSWR(getApiEndpoint(Endpoint.attributes), getJson); -}; diff --git a/src/client/src/bridge/modules/charts.ts b/src/client/src/bridge/modules/charts.ts deleted file mode 100644 index 3a9cd1e..0000000 --- a/src/client/src/bridge/modules/charts.ts +++ /dev/null @@ -1,12 +0,0 @@ -import useSWR from "swr"; - -import { Endpoint, getApiEndpoint } from "../endpoints"; -import { AttributeChartModel } from "../models/AttributeChart"; -import { getJson } from "../utils"; - -export const useAttributeChart = (attributeIds: number[]) => { - return useSWR( - `${getApiEndpoint(Endpoint.attributeChart)}/${attributeIds.join(",")}`, - getJson, - ); -}; diff --git a/src/client/src/bridge/modules/handlers.ts b/src/client/src/bridge/modules/handlers.ts deleted file mode 100644 index 66adde9..0000000 --- a/src/client/src/bridge/modules/handlers.ts +++ /dev/null @@ -1,25 +0,0 @@ -import useSWR from "swr"; - -import { Endpoint, getApiEndpoint } from "../endpoints"; -import { HandlerModel, HandlerTypeModel, NewHandlerModel } from "../models"; -import { getJson, postJson } from "../utils"; - -export const useHandlers = () => { - return useSWR(getApiEndpoint(Endpoint.handlers), getJson); -}; - -export const useHandler = (handlerId: number) => { - return useSWR(`${getApiEndpoint(Endpoint.handlers)}/${handlerId}`, getJson); -}; - -export const addHandler = ( - handler: NewHandlerModel, - onSuccess?: () => void, - onError?: (error: any) => void, -) => { - return postJson(getApiEndpoint(Endpoint.addHandler), handler, onSuccess, onError); -}; - -export const useAvailableHandlers = () => { - return useSWR(getApiEndpoint(Endpoint.availableHandlers), getJson); -}; diff --git a/src/client/src/bridge/modules/index.ts b/src/client/src/bridge/modules/index.ts deleted file mode 100644 index 96c8a8f..0000000 --- a/src/client/src/bridge/modules/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./actions"; -export * from "./charts"; -export * from "./handlers"; -export * from "./widgets"; diff --git a/src/client/src/bridge/modules/widgets.ts b/src/client/src/bridge/modules/widgets.ts deleted file mode 100644 index 8570ddd..0000000 --- a/src/client/src/bridge/modules/widgets.ts +++ /dev/null @@ -1,27 +0,0 @@ -import useSWR from "swr"; - -import { Endpoint, getApiEndpoint } from "../endpoints"; -import { WidgetSwitchModel, WidgetTileModel } from "../models"; -import { getJson, postJson } from "../utils"; - -export const useWidgetSwitches = () => { - return useSWR(getApiEndpoint(Endpoint.widgetSwitches), getJson); -}; - -export const useWidgetTiles = () => { - return useSWR(getApiEndpoint(Endpoint.widgetTiles), getJson); -}; - -export const toggleWidgetSwitch = ( - widgetId: number, - value: boolean, - onSuccess?: () => void, - onError?: (error: any) => void, -) => { - return postJson( - getApiEndpoint(Endpoint.widgetSwitchToggle) + `/${widgetId}`, - { value }, - onSuccess, - onError, - ); -}; diff --git a/src/client/src/bridge/utils.ts b/src/client/src/bridge/utils.ts deleted file mode 100644 index dbbac51..0000000 --- a/src/client/src/bridge/utils.ts +++ /dev/null @@ -1,39 +0,0 @@ -export const getJsonFetcher = (key: string) => - fetch(key, { - credentials: "include", - headers: { - "Content-Type": "application/json", - }, - }); - -export const getJson = (key: string) => getJsonFetcher(key).then((response) => response.json()); - -export const getArray = (key: string) => - getJsonFetcher(key).then((response) => Object.values(response.json())); - -export const postJsonFetcher = (key: string, payload: object) => - fetch(key, { - method: "POST", - credentials: "include", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(payload), - }); - -export const postJson = ( - key: string, - payload: any, - onSuccess?: () => void, - onError?: (error: any) => void, -) => { - postJsonFetcher(key, payload) - .then((response) => { - if (response.ok) { - onSuccess?.(); - } - }) - .catch((error) => { - onError?.(error); - }); -}; diff --git a/src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx b/src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx deleted file mode 100644 index a70c18e..0000000 --- a/src/client/src/components/BooleanSwitcher/BooleanSwitcher.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { FC, ReactElement, useState } from "react"; - -export type BooleanSwitcherChildrenProps = { - turnOn: () => void; - turnOff: () => void; - value: boolean; -}; - -export type BooleanSwitcherProps = { - children: (props: BooleanSwitcherChildrenProps) => ReactElement; -}; - -export const BooleanSwitcher: FC = ({ children }) => { - const [value, setValue] = useState(false); - const turnOn = () => setValue(true); - const turnOff = () => setValue(false); - return children({ turnOn, turnOff, value }); -}; diff --git a/src/client/src/components/BooleanSwitcher/index.ts b/src/client/src/components/BooleanSwitcher/index.ts deleted file mode 100644 index 05758de..0000000 --- a/src/client/src/components/BooleanSwitcher/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./BooleanSwitcher"; diff --git a/src/client/src/components/Button/Button.scss b/src/client/src/components/Button/Button.scss deleted file mode 100644 index 6f4a9b8..0000000 --- a/src/client/src/components/Button/Button.scss +++ /dev/null @@ -1,86 +0,0 @@ -@import "./mixins"; - -.button { - border: none; - background: none; - font-family: $font-cantarell; - cursor: pointer; - - &--expand { - width: 100%; - } - - &--grow { - flex-grow: 1; - } - - &--variant { - &-none { - padding: 0; - text-align: left; - } - - &-default { - @include button-theme; - - display: flex; - align-items: center; - background: $blue; - color: $primary-text-light; - - &:hover { - @include active-shadow; - - filter: brightness(1.1); - } - } - - &-white { - @include button-theme; - - background: $white; - color: $primary-text; - } - - &-outline { - @include button-theme; - - box-shadow: inset 0 0 0 2px $blue; - color: $blue; - - &:hover { - box-shadow: inset 0 0 0 2px $blue, 0 0 10px $grey-bbb; - } - } - - &-navbar { - display: flex; - align-items: center; - padding: 13px; - border-radius: 10px; - background: unset; - color: $grey-333; - font-size: 15px; - font-weight: normal; - text-align: left; - text-transform: unset; - gap: 12px; - - &:hover { - background: $grey-eee; - } - } - } - - &--variant-white#{&}--active { - @include active; - - color: $white; - } - - &--variant-navbar#{&}--active { - @include active; - - font-weight: bold; - } -} diff --git a/src/client/src/components/Button/Button.tsx b/src/client/src/components/Button/Button.tsx deleted file mode 100644 index b5d82e7..0000000 --- a/src/client/src/components/Button/Button.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { FunctionComponent, MouseEvent, ReactNode } from "react"; - -import { bemClassNames } from "../../utils"; -import { Icon, IconVariant, ThemedIconName } from "../Icon"; - -export enum ButtonVariant { - default = "default", - white = "white", - outline = "outline", - navbar = "navbar", - menu = "menu", - none = "none", -} - -export enum ButtonType { - submit = "submit", - button = "button", -} - -export type ButtonProps = { - type?: ButtonType; - variant?: ButtonVariant; - expand?: boolean; - grow?: boolean; - active?: boolean; - icon?: ThemedIconName; - onClick?: (e: MouseEvent) => void; - children?: ReactNode; -}; - -const classNames = bemClassNames("button"); - -export const Button: FunctionComponent = ({ - type = ButtonType.submit, - variant = ButtonVariant.default, - expand = false, - grow = false, - active = false, - icon, - onClick, - children, -}) => { - return ( - - ); -}; diff --git a/src/client/src/components/Button/index.ts b/src/client/src/components/Button/index.ts deleted file mode 100644 index e22c29a..0000000 --- a/src/client/src/components/Button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Button"; diff --git a/src/client/src/components/Button/mixins.scss b/src/client/src/components/Button/mixins.scss deleted file mode 100644 index 64facef..0000000 --- a/src/client/src/components/Button/mixins.scss +++ /dev/null @@ -1,6 +0,0 @@ -@mixin button-theme { - padding: 10px 15px; - border-radius: 7px; - font-size: 13px; - font-weight: bold; -} diff --git a/src/client/src/components/Card/Card.scss b/src/client/src/components/Card/Card.scss deleted file mode 100644 index b08dbfa..0000000 --- a/src/client/src/components/Card/Card.scss +++ /dev/null @@ -1,33 +0,0 @@ -@import "./mixins"; - -@import "./components/CardBody/CardBody"; -@import "./components/CardHeader/CardHeader"; - -.card { - @include card; - - &--fullwidth { - width: 100%; - } - - &--overflow { - &-auto { - overflow: auto; - } - } - - &--variant { - &-clickable { - cursor: pointer; - - &:hover { - box-shadow: 2px 2px 5px $grey-ccc; - } - } - } - - &--variant-clickable#{&}--active { - background: $purple; - color: white; - } -} diff --git a/src/client/src/components/Card/Card.tsx b/src/client/src/components/Card/Card.tsx deleted file mode 100644 index 3a6951a..0000000 --- a/src/client/src/components/Card/Card.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Property } from "csstype"; -import { FunctionComponent, MouseEventHandler, ReactNode } from "react"; - -import { bemClassNames } from "../../utils"; -import { FlexLayout } from "../FlexLayout"; - -const bem = bemClassNames("card"); - -export enum CardVariant { - default = "default", - clickable = "clickable", -} - -export type CardProps = { - className?: string; - fullwidth?: boolean; - overflow?: Property.Overflow; - gap?: Property.Gap; - variant?: CardVariant; - active?: boolean; - children: ReactNode; - onClick?: MouseEventHandler; -}; - -export const Card: FunctionComponent = ({ - className, - fullwidth = false, - overflow, - gap, - variant = CardVariant.default, - active = false, - children, - onClick, -}) => { - let resultClassName = bem({ fullwidth, overflow, variant, active }); - if (className) resultClassName += " " + className; - - return ( - - {children} - - ); -}; diff --git a/src/client/src/components/Card/components/CardBody/CardBody.scss b/src/client/src/components/Card/components/CardBody/CardBody.scss deleted file mode 100644 index 1bc8fa1..0000000 --- a/src/client/src/components/Card/components/CardBody/CardBody.scss +++ /dev/null @@ -1,3 +0,0 @@ -.card-body { - @include card-item; -} diff --git a/src/client/src/components/Card/components/CardBody/CardBody.tsx b/src/client/src/components/Card/components/CardBody/CardBody.tsx deleted file mode 100644 index ce04008..0000000 --- a/src/client/src/components/Card/components/CardBody/CardBody.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Property } from "csstype"; -import { FunctionComponent, ReactNode } from "react"; - -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; - -export type CardBodyProps = { - gap?: Property.Gap; - children: ReactNode; -}; - -const classNames = bemClassNames("card-body"); - -export const CardBody: FunctionComponent = ({ gap = "20px", children }) => { - return ( - - {children} - - ); -}; diff --git a/src/client/src/components/Card/components/CardBody/index.ts b/src/client/src/components/Card/components/CardBody/index.ts deleted file mode 100644 index 3eda2d6..0000000 --- a/src/client/src/components/Card/components/CardBody/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./CardBody"; diff --git a/src/client/src/components/Card/components/CardHeader/CardHeader.scss b/src/client/src/components/Card/components/CardHeader/CardHeader.scss deleted file mode 100644 index 39a69f0..0000000 --- a/src/client/src/components/Card/components/CardHeader/CardHeader.scss +++ /dev/null @@ -1,17 +0,0 @@ -.card-header { - @include card-item; - - align-items: center; - - &__title { - font-size: 18px; - font-weight: bold; - } - - &__subtitle { - margin-top: 2px; - color: $grey-555; - font-size: 14px; - font-weight: normal; - } -} diff --git a/src/client/src/components/Card/components/CardHeader/CardHeader.tsx b/src/client/src/components/Card/components/CardHeader/CardHeader.tsx deleted file mode 100644 index 6f8b64e..0000000 --- a/src/client/src/components/Card/components/CardHeader/CardHeader.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { FunctionComponent } from "react"; - -import { bemClassNames } from "../../../../utils"; -import { FlexLayout } from "../../../FlexLayout"; -import { CustomIconName, Icon, IconVariant, ThemedIconName } from "../../../Icon"; - -export type CardHeaderProps = { - title: string; - icon?: ThemedIconName | CustomIconName; - subtitle?: string; -}; - -const classNames = bemClassNames("card-header"); - -export const CardHeader: FunctionComponent = ({ title, icon, subtitle }) => { - return ( - - {icon && } - - {title &&