This commit is contained in:
Marc Brooks 2025-11-05 15:03:20 -06:00 committed by GitHub
commit 4af41c1dd7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 1330 additions and 2265 deletions

1
.gitignore vendored
View File

@ -15,3 +15,4 @@ node_modules
#internal/native/lib
ui/reports
*.eez-project-ui-state

View File

@ -41,9 +41,27 @@ func switchToMainScreen() {
func updateDisplay() {
if networkManager != nil {
nativeInstance.UpdateLabelIfChanged("home_info_ipv4_addr", networkManager.IPv4String())
nativeInstance.UpdateLabelAndChangeVisibility("home_info_ipv6_addr", networkManager.IPv6String())
nativeInstance.UpdateLabelIfChanged("home_info_mac_addr", networkManager.MACString())
ipv4 := networkManager.IPv4String()
if ipv4 == "" {
ipv4 = "--"
}
nativeInstance.UISetVar("ip_v4_address", ipv4)
nativeInstance.ChangeVisibility("home_info_ipv4_addr", ipv4 != "")
ipv6 := networkManager.IPv6String()
if ipv6 == "" {
ipv6 = "--"
}
nativeInstance.UISetVar("ip_v6_address", ipv6)
nativeInstance.ChangeVisibility("home_info_ipv6_addr", ipv6 != "" && ipv6 != "--")
nativeInstance.UISetVar("mac_address", networkManager.MACString())
nativeInstance.UISetVar("hostname", networkManager.Hostname())
// we either show the MAC address (if no IP yet) or the hostname (if either IPv4 or IPv6 are available)
hasIP := networkManager.IPv4Ready() || networkManager.IPv6Ready()
nativeInstance.ChangeVisibility("home_info_mac_addr", !hasIP)
nativeInstance.ChangeVisibility("home_info_hostname", hasIP)
}
_, _ = nativeInstance.UIObjHide("menu_btn_network")
@ -70,6 +88,7 @@ func updateDisplay() {
nativeInstance.UpdateLabelIfChanged("hdmi_status_label", "Disconnected")
_, _ = nativeInstance.UIObjClearState("hdmi_status_label", "LV_STATE_CHECKED")
}
nativeInstance.UpdateLabelIfChanged("cloud_status_label", fmt.Sprintf("%d active", actionSessions))
if networkManager != nil && networkManager.IsUp() {
@ -203,7 +222,8 @@ func waitCtrlAndRequestDisplayUpdate(shouldWakeDisplay bool, reason string) {
func updateStaticContents() {
//contents that never change
if networkManager != nil {
nativeInstance.UpdateLabelIfChanged("home_info_mac_addr", networkManager.MACString())
mac := networkManager.MACString()
nativeInstance.UISetVar("mac_address", mac)
}
// get cpu info
@ -229,7 +249,7 @@ func updateStaticContents() {
nativeInstance.UpdateLabelAndChangeVisibility("build_date", version.BuildDate)
nativeInstance.UpdateLabelAndChangeVisibility("golang_version", version.GoVersion)
// nativeInstance.UpdateLabelAndChangeVisibility("boot_screen_device_id", GetDeviceID())
nativeInstance.UpdateLabelAndChangeVisibility("device_id", GetDeviceID())
}
// setDisplayBrightness sets /sys/class/backlight/backlight/brightness to alter

View File

@ -98,6 +98,10 @@ func uiGetLVGLVersion() string {
return ""
}
func uiTick() {
panicPlatformNotSupported()
}
func videoGetStreamQualityFactor() (float64, error) {
panicPlatformNotSupported()
return 0, nil

View File

@ -109,6 +109,7 @@ func (n *Native) UpdateLabelIfChanged(objName string, newText string) {
if changed {
l.Msg("label changed")
uiTick()
} else {
l.Msg("label not changed")
}
@ -117,15 +118,21 @@ func (n *Native) UpdateLabelIfChanged(objName string, newText string) {
// UpdateLabelAndChangeVisibility updates the label and changes the visibility of the object
func (n *Native) UpdateLabelAndChangeVisibility(objName string, newText string) {
n.UpdateLabelIfChanged(objName, newText)
n.ChangeVisibility(objName, newText != "")
}
// ChangeVisibility shows or hides an object AND the container it is in
func (n *Native) ChangeVisibility(objName string, show bool) {
containerName := objName + "_container"
if newText == "" {
_, _ = n.UIObjHide(objName)
_, _ = n.UIObjHide(containerName)
} else {
if show {
_, _ = n.UIObjShow(objName)
_, _ = n.UIObjShow(containerName)
} else {
_, _ = n.UIObjHide(objName)
_, _ = n.UIObjHide(containerName)
}
uiTick()
}
// SwitchToScreenIf switches to the screen if the screen name is different from the current screen and the screen name is in the shouldSwitch list

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -56,6 +56,10 @@ void action_switch_to_reboot(lv_event_t *e) {
loadScreen(SCREEN_ID_REBOOT_SCREEN);
}
void action_switch_to_network(lv_event_t *e) {
loadScreen(SCREEN_ID_MENU_NETWORK_SCREEN);
}
void action_menu_screen_gesture(lv_event_t * e) {
handle_gesture_main_screen_switch(e, LV_DIR_RIGHT);
}
@ -76,6 +80,11 @@ void action_about_screen_gesture(lv_event_t * e) {
handle_gesture_screen_switch(e, LV_DIR_RIGHT, SCREEN_ID_MENU_SCREEN);
}
void action_status_screen_gesture(lv_event_t *e) {
handle_gesture_screen_switch(e, LV_DIR_RIGHT, SCREEN_ID_MENU_SCREEN);
}
// user_data doesn't seem to be working, so we use a global variable here
static uint32_t t_reset_config;
static uint32_t t_reboot;
@ -168,9 +177,9 @@ void action_dhcpc(lv_event_t * e) {
.lock = &b_dhcpc_lock,
.hold_time_seconds = DHCPC_HOLD_TIME,
.rpc_method = "toggleDHCPClient",
.button_obj = NULL, // No button/spinner for reboot
.button_obj = NULL, // No button/spinner for dhcp client change
.spinner_obj = NULL,
.label_obj = objects.dhcpc_label,
.label_obj = objects.dhcp_client_label,
.default_text = "Press and hold for\n5 seconds"
};

View File

@ -26,6 +26,8 @@ extern void action_reboot(lv_event_t * e);
extern void action_switch_to_reboot(lv_event_t * e);
extern void action_dhcpc(lv_event_t * e);
extern void action_switch_to_dhcpc(lv_event_t * e);
extern void action_status_screen_gesture(lv_event_t * e);
extern void action_switch_to_network(lv_event_t * e);
#ifdef __cplusplus

View File

@ -1,7 +1,7 @@
/*******************************************************************************
* Size: 30 px
* Bpp: 4
* Opts: --bpp 4 --size 30 --no-compress --font ../../Downloads/jetkvm-lvgl-ui 2/assets/font-bold.ttf --range 32-127 --format lvgl
* Opts: --bpp 4 --size 30 --no-compress --font ../fonts/font-bold.ttf --range 32-127 --format lvgl
******************************************************************************/
#ifdef __has_include

View File

@ -1,7 +1,7 @@
/*******************************************************************************
* Size: 16 px
* Bpp: 4
* Opts: --bpp 4 --size 16 --no-compress --font ../../Downloads/jetkvm-lvgl-ui 2/assets/font-book.ttf --range 32-127 --format lvgl
* Opts: --bpp 4 --size 16 --no-compress --font ../fonts/font-book.ttf --range 32-127 --format lvgl
******************************************************************************/
#ifdef __has_include

View File

@ -1,7 +1,7 @@
/*******************************************************************************
* Size: 18 px
* Bpp: 4
* Opts: --bpp 4 --size 18 --no-compress --font ../../Downloads/jetkvm-lvgl-ui 2/assets/font-book.ttf --range 32-127 --format lvgl
* Opts: --bpp 4 --size 18 --no-compress --font ../fonts/font-book.ttf --range 32-127 --format lvgl
******************************************************************************/
#ifdef __has_include

View File

@ -1,7 +1,7 @@
/*******************************************************************************
* Size: 20 px
* Bpp: 4
* Opts: --bpp 4 --size 20 --no-compress --font ../../Downloads/jetkvm-lvgl-ui 2/assets/font-book.ttf --range 32-127 --format lvgl
* Opts: --bpp 4 --size 20 --no-compress --font ../fonts/font-book.ttf --range 32-127 --format lvgl
******************************************************************************/
#ifdef __has_include

View File

@ -1,7 +1,7 @@
/*******************************************************************************
* Size: 24 px
* Bpp: 4
* Opts: --bpp 4 --size 24 --no-compress --font ../../Downloads/jetkvm-lvgl-ui 2/assets/font-book.ttf --range 32-127 --format lvgl
* Opts: --bpp 4 --size 24 --no-compress --font ../fonts/font-book.ttf --range 32-127 --format lvgl
******************************************************************************/
#ifdef __has_include

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@ typedef struct _objects_t {
lv_obj_t *no_network_header_logo;
lv_obj_t *no_network_content_container;
lv_obj_t *no_network_title;
lv_obj_t *home_info_ipv6_addr_1;
lv_obj_t *no_network_connect_cable;
lv_obj_t *home_header_container;
lv_obj_t *home_header_logo;
lv_obj_t *cloud_status_icon;
@ -35,6 +35,7 @@ typedef struct _objects_t {
lv_obj_t *home_info_ipv4_addr;
lv_obj_t *home_info_ipv6_addr;
lv_obj_t *home_info_mac_addr;
lv_obj_t *home_info_hostname;
lv_obj_t *divider;
lv_obj_t *home_status_container;
lv_obj_t *usb_status;
@ -50,15 +51,15 @@ typedef struct _objects_t {
lv_obj_t *menu_btn_access;
lv_obj_t *menu_btn_advanced;
lv_obj_t *menu_btn_about;
lv_obj_t *menu_header_container_1;
lv_obj_t *menu_items_container_1;
lv_obj_t *menu_advanced_header_container;
lv_obj_t *menu_advanced_items_container;
lv_obj_t *menu_btn_advanced_developer_mode;
lv_obj_t *menu_btn_advanced_usb_emulation;
lv_obj_t *menu_btn_advanced_reboot;
lv_obj_t *menu_btn_dhcp_client;
lv_obj_t *menu_btn_advanced_reset_config;
lv_obj_t *menu_header_container_2;
lv_obj_t *menu_items_container_2;
lv_obj_t *menu_network_header_container;
lv_obj_t *menu_network_items_container;
lv_obj_t *menu_btn_network_ipv4;
lv_obj_t *menu_btn_network_ipv6;
lv_obj_t *menu_btn_network_lldp;
@ -84,32 +85,39 @@ typedef struct _objects_t {
lv_obj_t *status_items_container;
lv_obj_t *device_id_container;
lv_obj_t *device_id;
lv_obj_t *device_mac_address_container;
lv_obj_t *device_mac_address;
lv_obj_t *cloud_account_id_container;
lv_obj_t *app_version_1;
lv_obj_t *cloud_account_id;
lv_obj_t *cloud_domain_container;
lv_obj_t *cloud_domain;
lv_obj_t *reset_config_header;
lv_obj_t *reset_config_container;
lv_obj_t *reset_config_label_container;
lv_obj_t *reset_config_label;
lv_obj_t *reset_config_spinner_container;
lv_obj_t *reset_config_spinner;
lv_obj_t *reset_config_button_container;
lv_obj_t *reset_config_button;
lv_obj_t *obj0;
lv_obj_t *reset_config_button_label;
lv_obj_t *reboot_header;
lv_obj_t *reboot_container;
lv_obj_t *reboot_label_container;
lv_obj_t *reboot_label;
lv_obj_t *reboot_config_button;
lv_obj_t *obj1;
lv_obj_t *reboot_device_button_container;
lv_obj_t *reboot_device_button;
lv_obj_t *reboot_device_button_label;
lv_obj_t *reboot_in_progress_container;
lv_obj_t *reboot_in_progress_logo;
lv_obj_t *reboot_in_progress_label;
lv_obj_t *dhcp_client_header;
lv_obj_t *dhcp_client_container;
lv_obj_t *dhcp_client_label_container;
lv_obj_t *dhcpc_label;
lv_obj_t *dhcp_client_label;
lv_obj_t *dhcp_client_spinner_container;
lv_obj_t *dhcp_client_spinner;
lv_obj_t *dhcp_client_button;
lv_obj_t *obj2;
lv_obj_t *dhcp_client_change_button_container;
lv_obj_t *dhcp_client_change_button;
lv_obj_t *dhcp_client_change_label;
} objects_t;

View File

@ -76,8 +76,6 @@ void remove_style_flex_center(lv_obj_t *obj) {
void init_style_flex_start_MAIN_DEFAULT(lv_style_t *style) {
init_style_flex_center_MAIN_DEFAULT(style);
lv_style_set_layout(style, LV_LAYOUT_FLEX);
lv_style_set_flex_flow(style, LV_FLEX_FLOW_COLUMN);
lv_style_set_flex_main_place(style, LV_FLEX_ALIGN_START);
lv_style_set_flex_cross_place(style, LV_FLEX_ALIGN_START);
lv_style_set_flex_track_place(style, LV_FLEX_ALIGN_START);
@ -110,10 +108,8 @@ void remove_style_flex_start(lv_obj_t *obj) {
void init_style_flow_row_space_between_MAIN_DEFAULT(lv_style_t *style) {
init_style_flex_center_MAIN_DEFAULT(style);
lv_style_set_layout(style, LV_LAYOUT_FLEX);
lv_style_set_flex_flow(style, LV_FLEX_FLOW_ROW);
lv_style_set_flex_main_place(style, LV_FLEX_ALIGN_SPACE_BETWEEN);
lv_style_set_flex_cross_place(style, LV_FLEX_ALIGN_CENTER);
lv_style_set_flex_track_place(style, LV_FLEX_ALIGN_START);
};
@ -144,11 +140,7 @@ void remove_style_flow_row_space_between(lv_obj_t *obj) {
void init_style_flow_row_start_center_MAIN_DEFAULT(lv_style_t *style) {
init_style_flow_row_space_between_MAIN_DEFAULT(style);
lv_style_set_layout(style, LV_LAYOUT_FLEX);
lv_style_set_flex_flow(style, LV_FLEX_FLOW_ROW);
lv_style_set_flex_main_place(style, LV_FLEX_ALIGN_START);
lv_style_set_flex_cross_place(style, LV_FLEX_ALIGN_CENTER);
lv_style_set_flex_track_place(style, LV_FLEX_ALIGN_START);
};
lv_style_t *get_style_flow_row_start_center_MAIN_DEFAULT() {
@ -178,11 +170,9 @@ void remove_style_flow_row_start_center(lv_obj_t *obj) {
void init_style_flex_column_start_MAIN_DEFAULT(lv_style_t *style) {
init_style_flow_row_space_between_MAIN_DEFAULT(style);
lv_style_set_layout(style, LV_LAYOUT_FLEX);
lv_style_set_flex_flow(style, LV_FLEX_FLOW_COLUMN);
lv_style_set_flex_main_place(style, LV_FLEX_ALIGN_START);
lv_style_set_flex_cross_place(style, LV_FLEX_ALIGN_START);
lv_style_set_flex_track_place(style, LV_FLEX_ALIGN_START);
lv_style_set_flex_main_place(style, LV_FLEX_ALIGN_SPACE_EVENLY);
lv_style_set_flex_flow(style, LV_FLEX_FLOW_COLUMN);
};
lv_style_t *get_style_flex_column_start_MAIN_DEFAULT() {
@ -342,7 +332,6 @@ void init_style_header_link_MAIN_DEFAULT(lv_style_t *style) {
lv_style_set_text_color(style, lv_color_hex(0xff1d4ed8));
lv_style_set_text_opa(style, 255);
lv_style_set_text_font(style, &ui_font_font_book20);
lv_style_set_text_align(style, LV_TEXT_ALIGN_CENTER);
};
lv_style_t *get_style_header_link_MAIN_DEFAULT() {

View File

@ -10,8 +10,6 @@ void ui_call_rpc_handler(const char *method, const char *params);
#if defined(EEZ_FOR_LVGL)
#include <eez/flow/lvgl_api.h>
#endif

View File

@ -7,15 +7,79 @@ char app_version[100] = { 0 };
char system_version[100] = { 0 };
char lvgl_version[32] = { 0 };
char main_screen[32] = "home_screen";
char mac_address[18] = { 0 };
char ip_v4_address[22] = "--";
char ip_v6_address[46] = "--";
char hostname[262] = { 0 };
const char *get_var_ip_v4_address() {
return ip_v4_address;
}
void set_var_ip_v4_address(const char *value) {
strncpy(ip_v4_address, value, sizeof(ip_v4_address) / sizeof(char));
ip_v4_address[sizeof(ip_v4_address) / sizeof(char) - 1] = 0;
tick_screen_home_screen();
}
const char *get_var_ip_v6_address() {
return ip_v6_address;
}
void set_var_ip_v6_address(const char *value) {
strncpy(ip_v6_address, value, sizeof(ip_v6_address) / sizeof(char));
ip_v6_address[sizeof(ip_v6_address) / sizeof(char) - 1] = 0;
tick_screen_home_screen();
}
const char *get_var_mac_address() {
return mac_address;
}
void set_var_mac_address(const char *value) {
strncpy(mac_address, value, sizeof(mac_address) / sizeof(char));
mac_address[sizeof(mac_address) / sizeof(char) - 1] = 0;
tick_screen_home_screen();
tick_screen_status_screen();
}
const char *get_var_hostname() {
return hostname;
}
void set_var_hostname(const char *value) {
strncpy(hostname, value, sizeof(hostname) / sizeof(char));
hostname[sizeof(hostname) / sizeof(char) - 1] = 0;
tick_screen_home_screen();
}
const char *get_var_app_version() {
return app_version;
}
void set_var_app_version(const char *value) {
strncpy(app_version, value, sizeof(app_version) / sizeof(char));
app_version[sizeof(app_version) / sizeof(char) - 1] = 0;
tick_screen_boot_screen();
tick_screen_about_screen();
}
const char *get_var_system_version() {
return system_version;
}
void set_var_system_version(const char *value) {
strncpy(system_version, value, sizeof(system_version) / sizeof(char));
system_version[sizeof(system_version) / sizeof(char) - 1] = 0;
tick_screen_about_screen();
}
const char *get_var_lvgl_version() {
if (lvgl_version[0] == '\0') {
char buf[32];
@ -28,23 +92,17 @@ const char *get_var_lvgl_version() {
return lvgl_version;
}
void set_var_app_version(const char *value) {
strncpy(app_version, value, sizeof(app_version) / sizeof(char));
app_version[sizeof(app_version) / sizeof(char) - 1] = 0;
}
void set_var_lvgl_version(const char *value) {
// intentional NOP since this is actually generated
void set_var_system_version(const char *value) {
strncpy(system_version, value, sizeof(system_version) / sizeof(char));
system_version[sizeof(system_version) / sizeof(char) - 1] = 0;
}
void set_var_lvgl_version(const char *value) {}
void set_var_main_screen(const char *value) {
strncpy(main_screen, value, sizeof(main_screen) / sizeof(char));
main_screen[sizeof(main_screen) / sizeof(char) - 1] = 0;
tick_screen_about_screen();
}
const char *get_var_main_screen() {
return main_screen;
}
void set_var_main_screen(const char *value) {
strncpy(main_screen, value, sizeof(main_screen) / sizeof(char));
main_screen[sizeof(main_screen) / sizeof(char) - 1] = 0;
}

View File

@ -4,6 +4,11 @@
#include <stdint.h>
#include <stdbool.h>
void tick_screen_home_screen();
void tick_screen_status_screen();
void tick_screen_boot_screen();
void tick_screen_about_screen();
#ifdef __cplusplus
extern "C" {
#endif
@ -18,7 +23,11 @@ enum FlowGlobalVariables {
FLOW_GLOBAL_VARIABLE_APP_VERSION = 0,
FLOW_GLOBAL_VARIABLE_SYSTEM_VERSION = 1,
FLOW_GLOBAL_VARIABLE_LVGL_VERSION = 2,
FLOW_GLOBAL_VARIABLE_MAIN_SCREEN = 3
FLOW_GLOBAL_VARIABLE_MAIN_SCREEN = 3,
FLOW_GLOBAL_VARIABLE_MAC_ADDRESS = 4,
FLOW_GLOBAL_VARIABLE_IP_V6_ADDRESS = 5,
FLOW_GLOBAL_VARIABLE_IP_V4_ADDRESS = 6,
FLOW_GLOBAL_VARIABLE_HOSTNAME = 7
};
// Native global variables
@ -31,6 +40,14 @@ extern const char *get_var_lvgl_version();
extern void set_var_lvgl_version(const char *value);
extern const char *get_var_main_screen();
extern void set_var_main_screen(const char *value);
extern const char *get_var_mac_address();
extern void set_var_mac_address(const char *value);
extern const char *get_var_ip_v6_address();
extern void set_var_ip_v6_address(const char *value);
extern const char *get_var_ip_v4_address();
extern void set_var_ip_v4_address(const char *value);
extern const char *get_var_hostname();
extern void set_var_hostname(const char *value);
#ifdef __cplusplus

Binary file not shown.

Binary file not shown.

222
ui/package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "kvm-ui",
"version": "2025.10.24.2140",
"version": "2025.10.30.0830",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "kvm-ui",
"version": "2025.10.24.2140",
"version": "2025.10.30.0830",
"dependencies": {
"@headlessui/react": "^2.2.9",
"@headlessui/tailwindcss": "^0.2.2",
@ -32,13 +32,13 @@
"react-hot-toast": "^2.6.0",
"react-icons": "^5.5.0",
"react-router": "^7.9.5",
"react-simple-keyboard": "^3.8.131",
"react-simple-keyboard": "^3.8.132",
"react-use-websocket": "^4.13.0",
"react-xtermjs": "^1.0.10",
"recharts": "^3.3.0",
"tailwind-merge": "^3.3.1",
"usehooks-ts": "^3.1.1",
"validator": "^13.15.15",
"validator": "^13.15.20",
"zustand": "^4.5.2"
},
"devDependencies": {
@ -57,7 +57,7 @@
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@types/semver": "^7.7.1",
"@types/validator": "^13.15.3",
"@types/validator": "^13.15.4",
"@typescript-eslint/eslint-plugin": "^8.46.2",
"@typescript-eslint/parser": "^8.46.2",
"@vitejs/plugin-react-swc": "^4.2.0",
@ -126,6 +126,7 @@
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@ -847,21 +848,21 @@
}
},
"node_modules/@eslint/config-helpers": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz",
"integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==",
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
"integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.16.0"
"@eslint/core": "^0.17.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz",
"integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==",
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
"integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
@ -928,12 +929,12 @@
}
},
"node_modules/@eslint/plugin-kit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz",
"integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==",
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
"integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.16.0",
"@eslint/core": "^0.17.0",
"levn": "^0.4.1"
},
"engines": {
@ -1742,9 +1743,9 @@
"license": "MIT"
},
"node_modules/@swc/core": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.21.tgz",
"integrity": "sha512-umBaSb65O1v6Lt8RV3o5srw0nKr25amf/yRIGFPug63sAerL9n2UkmfGywA1l1aN81W7faXIynF0JmlQ2wPSdw==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.14.0.tgz",
"integrity": "sha512-oExhY90bes5pDTVrei0xlMVosTxwd/NMafIpqsC4dMbRYZ5KB981l/CX8tMnGsagTplj/RcG9BeRYmV6/J5m3w==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
@ -1760,16 +1761,16 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.13.21",
"@swc/core-darwin-x64": "1.13.21",
"@swc/core-linux-arm-gnueabihf": "1.13.21",
"@swc/core-linux-arm64-gnu": "1.13.21",
"@swc/core-linux-arm64-musl": "1.13.21",
"@swc/core-linux-x64-gnu": "1.13.21",
"@swc/core-linux-x64-musl": "1.13.21",
"@swc/core-win32-arm64-msvc": "1.13.21",
"@swc/core-win32-ia32-msvc": "1.13.21",
"@swc/core-win32-x64-msvc": "1.13.21"
"@swc/core-darwin-arm64": "1.14.0",
"@swc/core-darwin-x64": "1.14.0",
"@swc/core-linux-arm-gnueabihf": "1.14.0",
"@swc/core-linux-arm64-gnu": "1.14.0",
"@swc/core-linux-arm64-musl": "1.14.0",
"@swc/core-linux-x64-gnu": "1.14.0",
"@swc/core-linux-x64-musl": "1.14.0",
"@swc/core-win32-arm64-msvc": "1.14.0",
"@swc/core-win32-ia32-msvc": "1.14.0",
"@swc/core-win32-x64-msvc": "1.14.0"
},
"peerDependencies": {
"@swc/helpers": ">=0.5.17"
@ -1781,9 +1782,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.21.tgz",
"integrity": "sha512-0jaz9r7f0PDK8OyyVooadv8dkFlQmVmBK6DtAnWSRjkCbNt4sdqsc9ZkyEDJXaxOVcMQ3pJx/Igniyw5xqACLw==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.14.0.tgz",
"integrity": "sha512-uHPC8rlCt04nvYNczWzKVdgnRhxCa3ndKTBBbBpResOZsRmiwRAvByIGh599j+Oo6Z5eyTPrgY+XfJzVmXnN7Q==",
"cpu": [
"arm64"
],
@ -1798,9 +1799,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.21.tgz",
"integrity": "sha512-pLeZn+NTGa7oW/ysD6oM82BjKZl71WNJR9BKXRsOhrNQeUWv55DCoZT2P4DzeU5Xgjmos+iMoDLg/9R6Ngc0PA==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.14.0.tgz",
"integrity": "sha512-2SHrlpl68vtePRknv9shvM9YKKg7B9T13tcTg9aFCwR318QTYo+FzsKGmQSv9ox/Ua0Q2/5y2BNjieffJoo4nA==",
"cpu": [
"x64"
],
@ -1815,9 +1816,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.21.tgz",
"integrity": "sha512-p9aYzTmP7qVDPkXxnbekOfbT11kxnPiuLrUbgpN/vn6sxXDCObMAiY63WlDR0IauBK571WUdmgb04goe/xTQWw==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.14.0.tgz",
"integrity": "sha512-SMH8zn01dxt809svetnxpeg/jWdpi6dqHKO3Eb11u4OzU2PK7I5uKS6gf2hx5LlTbcJMFKULZiVwjlQLe8eqtg==",
"cpu": [
"arm"
],
@ -1832,9 +1833,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.21.tgz",
"integrity": "sha512-yRqFoGlCwEX1nS7OajBE23d0LPeONmFAgoe4rgRYvaUb60qGxIJoMMdvF2g3dum9ZyVDYAb3kP09hbXFbMGr4A==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.14.0.tgz",
"integrity": "sha512-q2JRu2D8LVqGeHkmpVCljVNltG0tB4o4eYg+dElFwCS8l2Mnt9qurMCxIeo9mgoqz0ax+k7jWtIRHktnVCbjvQ==",
"cpu": [
"arm64"
],
@ -1849,9 +1850,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.21.tgz",
"integrity": "sha512-wu5EGA86gtdYMW69eU80jROzArzD3/6G6zzK0VVR+OFt/0zqbajiiszIpaniOVACObLfJEcShQ05B3q0+CpUEg==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.14.0.tgz",
"integrity": "sha512-uofpVoPCEUjYIv454ZEZ3sLgMD17nIwlz2z7bsn7rl301Kt/01umFA7MscUovFfAK2IRGck6XB+uulMu6aFhKQ==",
"cpu": [
"arm64"
],
@ -1866,9 +1867,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.21.tgz",
"integrity": "sha512-AoGGVPNXH3C4S7WlJOxN1nGW5nj//J9uKysS7CIBotRmHXfHO4wPK3TVFRTA4cuouAWBBn7O8m3A99p/GR+iaw==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.14.0.tgz",
"integrity": "sha512-quTTx1Olm05fBfv66DEBuOsOgqdypnZ/1Bh3yGXWY7ANLFeeRpCDZpljD9BSjdsNdPOlwJmEUZXMHtGm3v1TZQ==",
"cpu": [
"x64"
],
@ -1883,9 +1884,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.21.tgz",
"integrity": "sha512-cBy2amuDuxMZnEq16MqGu+DUlEFqI+7F/OACNlk7zEJKq48jJKGEMqJz3X2ucJE5jqUIg6Pos6Uo/y+vuWQymQ==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.14.0.tgz",
"integrity": "sha512-caaNAu+aIqT8seLtCf08i8C3/UC5ttQujUjejhMcuS1/LoCKtNiUs4VekJd2UGt+pyuuSrQ6dKl8CbCfWvWeXw==",
"cpu": [
"x64"
],
@ -1900,9 +1901,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.21.tgz",
"integrity": "sha512-2xfR5gnqBGOMOlY3s1QiFTXZaivTILMwX67FD2uzT6OCbT/3lyAM/4+3BptBXD8pUkkOGMFLsdeHw4fbO1GrpQ==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.14.0.tgz",
"integrity": "sha512-EeW3jFlT3YNckJ6V/JnTfGcX7UHGyh6/AiCPopZ1HNaGiXVCKHPpVQZicmtyr/UpqxCXLrTgjHOvyMke7YN26A==",
"cpu": [
"arm64"
],
@ -1917,9 +1918,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.21.tgz",
"integrity": "sha512-0pkpgKlBDwUImWTQxLakKbzZI6TIGVVAxk658oxrY8VK+hxRy2iezFY6m5Urmeds47M/cnW3dO+OY4C2caOF8A==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.14.0.tgz",
"integrity": "sha512-dPai3KUIcihV5hfoO4QNQF5HAaw8+2bT7dvi8E5zLtecW2SfL3mUZipzampXq5FHll0RSCLzlrXnSx+dBRZIIQ==",
"cpu": [
"ia32"
],
@ -1934,9 +1935,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
"version": "1.13.21",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.21.tgz",
"integrity": "sha512-DAnIw2J95TOW4Kr7NBx12vlZPW3QndbpFMmuC7x+fPoozoLpEscaDkiYhk7/sTtY9pubPMfHFPBORlbqyQCfOQ==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.14.0.tgz",
"integrity": "sha512-nm+JajGrTqUA6sEHdghDlHMNfH1WKSiuvljhdmBACW4ta4LC3gKurX2qZuiBARvPkephW9V/i5S8QPY1PzFEqg==",
"cpu": [
"x64"
],
@ -2461,6 +2462,7 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz",
"integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==",
"license": "MIT",
"peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@ -2470,6 +2472,7 @@
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz",
"integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==",
"license": "MIT",
"peer": true,
"peerDependencies": {
"@types/react": "^19.2.0"
}
@ -2488,9 +2491,9 @@
"license": "MIT"
},
"node_modules/@types/validator": {
"version": "13.15.3",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.3.tgz",
"integrity": "sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==",
"version": "13.15.4",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.4.tgz",
"integrity": "sha512-LSFfpSnJJY9wbC0LQxgvfb+ynbHftFo0tMsFOl/J4wexLnYMmDSPaj2ZyDv3TkfL1UePxPrxOWJfbiRS8mQv7A==",
"dev": true,
"license": "MIT"
},
@ -2540,6 +2543,7 @@
"integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.46.2",
"@typescript-eslint/types": "8.46.2",
@ -2846,13 +2850,15 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz",
"integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/acorn": {
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -3136,9 +3142,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
"version": "2.8.20",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz",
"integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==",
"version": "2.8.21",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.21.tgz",
"integrity": "sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@ -3188,6 +3194,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.19",
"caniuse-lite": "^1.0.30001751",
@ -3417,7 +3424,8 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/cva": {
"version": "1.0.0-beta.4",
@ -3732,9 +3740,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.240",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz",
"integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==",
"version": "1.5.243",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.243.tgz",
"integrity": "sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g==",
"dev": true,
"license": "ISC"
},
@ -4013,6 +4021,7 @@
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz",
"integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@ -4073,6 +4082,7 @@
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@ -4146,6 +4156,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.9",
@ -4342,16 +4353,16 @@
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/@eslint/js": {
"version": "9.38.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz",
"integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==",
"license": "MIT",
"node_modules/eslint/node_modules/@eslint/core": {
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz",
"integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==",
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://eslint.org/donate"
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
@ -4596,12 +4607,12 @@
"license": "ISC"
},
"node_modules/focus-trap": {
"version": "7.6.5",
"resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz",
"integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==",
"version": "7.6.6",
"resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.6.tgz",
"integrity": "sha512-v/Z8bvMCajtx4mEXmOo7QEsIzlIOqRXTIwgUfsFOF9gEsespdbD0AkPIka1bSXZ8Y8oZ+2IVDQZePkTfEHZl7Q==",
"license": "MIT",
"dependencies": {
"tabbable": "^6.2.0"
"tabbable": "^6.3.0"
}
},
"node_modules/focus-trap-react": {
@ -5008,9 +5019,9 @@
}
},
"node_modules/immer": {
"version": "10.1.3",
"resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz",
"integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==",
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz",
"integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==",
"license": "MIT",
"funding": {
"type": "opencollective",
@ -5580,6 +5591,7 @@
"integrity": "sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=14.0.0"
}
@ -6022,9 +6034,9 @@
"license": "MIT"
},
"node_modules/node-releases": {
"version": "2.0.26",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz",
"integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==",
"version": "2.0.27",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
"dev": true,
"license": "MIT"
},
@ -6302,6 +6314,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@ -6347,6 +6360,7 @@
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@ -6503,6 +6517,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
"integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
@ -6525,6 +6540,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@ -6586,6 +6602,7 @@
"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/use-sync-external-store": "^0.0.6",
"use-sync-external-store": "^1.4.0"
@ -6627,9 +6644,9 @@
}
},
"node_modules/react-simple-keyboard": {
"version": "3.8.131",
"resolved": "https://registry.npmjs.org/react-simple-keyboard/-/react-simple-keyboard-3.8.131.tgz",
"integrity": "sha512-gICYtaV38AU/E1PTTwzJOF6s5fu6Nu3GZQwnaSNB4VGOO3UwOn8rioDEFBLvjMWpP8kwfWp2of8xywY647rTxA==",
"version": "3.8.132",
"resolved": "https://registry.npmjs.org/react-simple-keyboard/-/react-simple-keyboard-3.8.132.tgz",
"integrity": "sha512-GoXK+6SRu72Jn8qT8fy+PxstIdZEACyIi/7zy0qXcrB6EJaN6zZk0/w3Sv3ALLwXqQd/3t3yUL4DQOwoNO1cbw==",
"license": "MIT",
"peerDependencies": {
"react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
@ -6682,7 +6699,8 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/redux-thunk": {
"version": "3.1.0",
@ -6918,9 +6936,9 @@
}
},
"node_modules/set-cookie-parser": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
"integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
"integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
"license": "MIT"
},
"node_modules/set-function-length": {
@ -7272,7 +7290,8 @@
"version": "4.1.16",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz",
"integrity": "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/tapable": {
"version": "2.3.0",
@ -7332,6 +7351,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@ -7508,6 +7528,7 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -7656,9 +7677,9 @@
}
},
"node_modules/validator": {
"version": "13.15.15",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz",
"integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==",
"version": "13.15.20",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.15.20.tgz",
"integrity": "sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==",
"license": "MIT",
"engines": {
"node": ">= 0.10"
@ -7691,6 +7712,7 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz",
"integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==",
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@ -7802,6 +7824,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@ -7950,6 +7973,7 @@
"integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==",
"dev": true,
"license": "MIT",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}

View File

@ -1,7 +1,7 @@
{
"name": "kvm-ui",
"private": true,
"version": "2025.10.24.2140",
"version": "2025.10.30.0830",
"type": "module",
"engines": {
"node": "^22.20.0"
@ -51,13 +51,13 @@
"react-hot-toast": "^2.6.0",
"react-icons": "^5.5.0",
"react-router": "^7.9.5",
"react-simple-keyboard": "^3.8.131",
"react-simple-keyboard": "^3.8.132",
"react-use-websocket": "^4.13.0",
"react-xtermjs": "^1.0.10",
"recharts": "^3.3.0",
"tailwind-merge": "^3.3.1",
"usehooks-ts": "^3.1.1",
"validator": "^13.15.15",
"validator": "^13.15.20",
"zustand": "^4.5.2"
},
"devDependencies": {
@ -76,7 +76,7 @@
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@types/semver": "^7.7.1",
"@types/validator": "^13.15.3",
"@types/validator": "^13.15.4",
"@typescript-eslint/eslint-plugin": "^8.46.2",
"@typescript-eslint/parser": "^8.46.2",
"@vitejs/plugin-react-swc": "^4.2.0",

View File

@ -873,7 +873,7 @@ export default function KvmIdRoute() {
style={{ animationDuration: "500ms" }}
className="animate-slideUpFade pointer-events-none absolute inset-0 flex items-center justify-center p-4"
>
<div className="relative h-full max-h-[720px] w-full max-w-[1280px] rounded-md">
<div className="relative h-full max-h-[720px] w-full max-w-7xl rounded-md">
{!!ConnectionStatusElement && ConnectionStatusElement}
</div>
</div>