diff --git a/.github/update.log b/.github/update.log index 201bd2c738..93c08b626c 100644 --- a/.github/update.log +++ b/.github/update.log @@ -793,3 +793,4 @@ Update On Thu Oct 10 20:36:48 CEST 2024 Update On Fri Oct 11 20:34:02 CEST 2024 Update On Sat Oct 12 20:32:54 CEST 2024 Update On Sun Oct 13 20:32:23 CEST 2024 +Update On Mon Oct 14 20:35:11 CEST 2024 diff --git a/clash-meta-android/design/src/main/res/values-vi/strings.xml b/clash-meta-android/design/src/main/res/values-vi/strings.xml new file mode 100644 index 0000000000..2ff4f708ce --- /dev/null +++ b/clash-meta-android/design/src/main/res/values-vi/strings.xml @@ -0,0 +1,239 @@ + + + Nhập thất bại + Cập nhật thành công + Cập nhật không thành công + Chạm để nhập... + Tính năng của Clash Meta + Cho phép Ipv6 + Cho phép lưu lượng ipv6 qua hệ thống Vpn + Gvisor + Mixed + Chế độ xếp chồng dữ liệu + Hệ thống + Clash Meta + Clash Meta + Clash Meta Core + Clash Meta + Clash Meta Wiki + Clash Meta + Clash Meta + Mới + Thông tin + Chỉ chấp nhận http(s) + Chế độ kiểm soát truy cập + Các gói kiểm soát truy cập + Định cấu hình quyền truy cập cho các ứng dụng + Hồ sơ cần được lưu trước khi kích hoạt + Cho phép tất cả các ứng dụng + Cho phép bỏ qua + Cho phép tất cả các ứng dụng bỏ qua kết nối VPN này + Cho phép Clash tự khởi động lại + Cho phép mạng LAN + Cho phép các ứng dụng đã chọn + Luôn tối + Luôn sáng + Ứng dụng + Nối hệ thống DNS + Ứng dụng bị lỗi + Ứng dụng thiếu các thành phần cần thiết, nguyên nhân thường là do tải xuống apk không đầy đủ. + Ứng dụng bị dừng + Ít nhất 15 phút hoặc để trống + Xác thực + Khởi động lại tự động + Thời gian tự động cập nhật + Tự động cập nhật (Phút) + Điều hướng + Địa chỉ ràng buộc + Chặn lặp + Chặn kết nối lặp lại + Duyệt qua tệp cấu hình và nhà cung cấp + Duyệt qua tệp + Bỏ qua mạng riêng + Bỏ qua các địa chỉ mạng riêng + Huỷ bỏ + Nhật ký Clash + Đóng + Tương thích + Đã sao chép + Tạo cấu hình + Chế độ tối + Gỡ lỗi + Mặc định + Máy chủ định danh mặc định + Độ trễ + Kiểm tra độ trễ + Xoá + Xóa tất cả nhật ký + Tất cả nhật ký lịch sử sẽ *MẤT* + Từ chối các ứng dụng đã chọn + Chi tiết + Chế độ trực tiếp + Vô hiệu hóa + DNS + Định tuyến qua DNS + Xử lý tất cả gói DNS + Tài liệu + Dự phòng miền + Quyên góp + Chưa sửa đổi + Tạo bản sao + Sửa + Trống + Tên trống + Bật + Chế độ nâng cao + Lỗi + Thoát mà không lưu + Tất cả thay đổi sẽ *MẤT* + Xuất + Nhập từ khay nhớ tạm + Bên ngoài + Fake-IP thành ánh xạ miền + Bộ lọc Fake-IP + Máy chủ tên dự phòng + Phản hồi + Tệp + Tệp đã xuất + Tên tệp + Tệp + Bộ lọc + Theo hệ thống (Android 10+) + Buộc bật + %d ngày trước + %d elements + Tìm nạp cấu hình từ \'%s\' + Nhà cung cấp tìm nạp \'%s\' + %d giờ trước + %d phút + %d phút trước + %d tháng trước + %s đang sử dụng + %1$s(%2$s) + %s được sử dụng + %s (Chưa lưu) + Cập nhật %s thành công + Cập nhật %1$s: %2$s + Cập nhật %1$s: %2$s + %d năm trước + Chung + Dự phòng GeoIP + Mã dự phòng GeoIP + Sự cố trên Github + Bản phát hành trên Github + Chế độ toàn cầu + Trợ giúp + Lịch sử + Hosts + HTTP + Cổng HTTP + Nhập + Nhập từ khay nhớ tạm + Nhập từ tệp + Nhập từ liên kết URL + Thông tin + Khởi tạo + Thời gian cài đặt + Giao diện + Tên tệp không hợp lệ + Tệp nhật ký không hợp lệ + Liên kết URL không hợp lệ + Dự phòng IPCIDR + IPv6 + Khoá + Từ khoá + Bố cục + Nghe + Đang tải + Mức nhật ký + Nhật ký + Nhật ký + IP thực với ánh xạ miền + Cổng Mixed + Chế độ + Chỉ hợp lệ cho phiên hiện tại + Thêm + Nhiều + Tên + Tên máy chủ + Chính sách máy chủ định danh + Mạng + Cấu hình mới + Không có cấu hình + Không thể chọn + Trống. Nhấn vào để thêm + OK + Tùy chọn không khả dụng cho đến khi Clash ngắt kết nối + Cài đặt thêm + Tên gói + Cấu hình + Tên cấu hình + Kết quả xử lý cấu hình + Trạng thái xử lý cấu hình + Trạng thái dịch vụ cấu hình + Trình cập nhật cấu hình + Cập nhật cấu hình + Liên kết URL cấu hình + Cấu hình + Thuộc tính + Tệp nhà cung cấp + Nhà cung cấp + Proxy + Không có nhóm nào được hiển thị + Vừa xong + Cổng Redirect + Cài đặt lại + Đổi tên + Đặt lại + Đặt lại cài đặt ghi đè + Tất cả cài đặt ghi đè sẽ bị hủy + Đảo ngược + Định tuyến lưu lượng hệ thống + Tự động định tuyến tất cả lưu lượng hệ thống qua VpnService + Quy tắc + Chế độ quy tắc + Đang kết nối + Lưu + Chế độ tập lệnh + Tìm kiếm + Chọn tất cả + Chọn Đảo ngược + Không chọn + Dịch vụ + Cài đặt + Không được để trống + Hiển thị lưu lượng truy cập + Tự động làm mới lưu lượng truy cập trong thông báo + Sideload GEOIP + Cơ sở dữ liệu GEOIP bên ngoài + Im lặng + Đơn + Cổng Socks + Sắp xếp theo + Nguồn + Đã ngắt kết nối + Strategy + Ứng dụng hệ thống + Proxy hệ thống + Đính kèm proxy,http vào hệ thống Vpn + Chạm để kết nối + Clash Meta là một phần mềm miễn phí và chúng tôi KHÔNG cung cấp bất kỳ dịch vụ trả phí nào cho nó + Chỉ chấp nhận cấu hình Clash bao gồm Proxy và Quy tắc + Cổng TProxy + Không thể khởi động thành phần VPN + Không có sẵn + Cập nhật + Cập nhật tất cả + Cập nhật thất bại + Cập nhật thành công + Thời gian cập nhật + Liên kết URL + Sử dụng tích hợp + Sử dụng Hosts + Giá trị + Đang xác minh + Đã cập nhật ứng dụng + Các cài đặt đã được đặt lại và các cấu hình cũ cần được lưu lại. + Tuỳ chọn VpnService + Cảnh báo + diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 125433869d..4886e3f7b4 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -29,7 +29,7 @@ "country-code-emoji": "2.3.0", "dayjs": "1.11.13", "framer-motion": "12.0.0-alpha.1", - "i18next": "23.15.2", + "i18next": "23.16.0", "jotai": "2.10.0", "json-schema": "0.4.0", "material-react-table": "3.0.1", @@ -52,7 +52,7 @@ "@csstools/normalize.css": "12.1.1", "@emotion/babel-plugin": "11.12.0", "@emotion/react": "11.13.3", - "@iconify/json": "2.2.259", + "@iconify/json": "2.2.260", "@monaco-editor/react": "4.6.0", "@tanstack/react-router": "1.65.0", "@tanstack/router-devtools": "1.65.0", diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index c8bc462d11..a0ebc62a40 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -166,16 +166,16 @@ importers: version: 2.0.2 ahooks: specifier: 3.8.1 - version: 3.8.1(react@19.0.0-rc-09111202-20241011) + version: 3.8.1(react@19.0.0-rc-cd22717c-20241013) ofetch: specifier: 1.4.1 version: 1.4.1 react: specifier: rc - version: 19.0.0-rc-09111202-20241011 + version: 19.0.0-rc-cd22717c-20241013 swr: specifier: 2.2.5 - version: 2.2.5(react@19.0.0-rc-09111202-20241011) + version: 2.2.5(react@19.0.0-rc-cd22717c-20241013) devDependencies: '@types/react': specifier: npm:types-react@rc @@ -185,16 +185,16 @@ importers: dependencies: '@dnd-kit/core': specifier: 6.1.0 - version: 6.1.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 6.1.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@dnd-kit/sortable': specifier: 8.0.0 - version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@dnd-kit/utilities': specifier: 3.2.2 - version: 3.2.2(react@19.0.0-rc-09111202-20241011) + version: 3.2.2(react@19.0.0-rc-cd22717c-20241013) '@emotion/styled': specifier: 11.13.0 - version: 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@juggle/resize-observer': specifier: 3.4.0 version: 3.4.0 @@ -203,13 +203,13 @@ importers: version: 0.3.0 '@mui/icons-material': specifier: 6.1.3 - version: 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@mui/lab': specifier: 6.0.0-beta.11 - version: 6.0.0-beta.11(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 6.0.0-beta.11(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@mui/material': specifier: 6.1.3 - version: 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@nyanpasu/interface': specifier: workspace:^ version: link:../interface @@ -218,7 +218,7 @@ importers: version: link:../ui '@tanstack/router-zod-adapter': specifier: 1.65.0 - version: 1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011))(zod@3.23.8) + version: 1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013))(zod@3.23.8) '@tauri-apps/api': specifier: 2.0.2 version: 2.0.2 @@ -227,10 +227,10 @@ importers: version: 7.0.15 ahooks: specifier: 3.8.1 - version: 3.8.1(react@19.0.0-rc-09111202-20241011) + version: 3.8.1(react@19.0.0-rc-cd22717c-20241013) allotment: specifier: 1.20.2 - version: 1.20.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 1.20.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) country-code-emoji: specifier: 2.3.0 version: 2.3.0 @@ -239,58 +239,58 @@ importers: version: 1.11.13 framer-motion: specifier: 12.0.0-alpha.1 - version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) i18next: - specifier: 23.15.2 - version: 23.15.2 + specifier: 23.16.0 + version: 23.16.0 jotai: specifier: 2.10.0 - version: 2.10.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 2.10.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) json-schema: specifier: 0.4.0 version: 0.4.0 material-react-table: specifier: 3.0.1 - version: 3.0.1(ddtozfjxwylixfiwxy7ptqpqna) + version: 3.0.1(2oi5dao5k6acau5jeicyle5flm) monaco-editor: specifier: 0.52.0 version: 0.52.0 mui-color-input: specifier: 4.0.1 - version: 4.0.1(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 4.0.1(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) react: specifier: rc - version: 19.0.0-rc-09111202-20241011 + version: 19.0.0-rc-cd22717c-20241013 react-dom: specifier: rc - version: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + version: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@19.0.0-rc-09111202-20241011) + version: 4.0.13(react@19.0.0-rc-cd22717c-20241013) react-fast-marquee: specifier: 1.6.5 - version: 1.6.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 1.6.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) react-hook-form-mui: specifier: 7.3.1 - version: 7.3.1(ys6qyhmibdgj3aiegp2mknsmkq) + version: 7.3.1(agt453dwgyjunypjf6prbgqys4) react-i18next: specifier: 15.0.3 - version: 15.0.3(i18next@23.15.2)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) react-markdown: specifier: 9.0.1 - version: 9.0.1(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 9.0.1(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) react-split-grid: specifier: 1.0.4 - version: 1.0.4(react@19.0.0-rc-09111202-20241011) + version: 1.0.4(react@19.0.0-rc-cd22717c-20241013) react-use: specifier: 17.5.1 - version: 17.5.1(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 17.5.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) swr: specifier: 2.2.5 - version: 2.2.5(react@19.0.0-rc-09111202-20241011) + version: 2.2.5(react@19.0.0-rc-cd22717c-20241013) virtua: specifier: 0.35.1 - version: 0.35.1(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 0.35.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) vite-bundle-visualizer: specifier: 1.2.1 version: 1.2.1(rollup@4.21.0) @@ -303,19 +303,19 @@ importers: version: 11.12.0 '@emotion/react': specifier: 11.13.3 - version: 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@iconify/json': - specifier: 2.2.259 - version: 2.2.259 + specifier: 2.2.260 + version: 2.2.260 '@monaco-editor/react': specifier: 4.6.0 - version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@tanstack/react-router': specifier: 1.65.0 - version: 1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@tanstack/router-devtools': specifier: 1.65.0 - version: 1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011))(csstype@3.1.3)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013))(csstype@3.1.3)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@tanstack/router-plugin': specifier: 1.65.0 version: 1.65.0(vite@5.4.8(@types/node@22.7.5)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.79.5)(stylus@0.62.0))(webpack-sources@3.2.3) @@ -417,19 +417,19 @@ importers: version: 0.3.0 '@mui/icons-material': specifier: 6.1.3 - version: 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@mui/lab': specifier: 6.0.0-beta.11 - version: 6.0.0-beta.11(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 6.0.0-beta.11(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@mui/material': specifier: 6.1.3 - version: 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@radix-ui/react-portal': specifier: 1.1.2 - version: 1.1.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 1.1.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@radix-ui/react-scroll-area': specifier: 1.2.0 - version: 1.2.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 1.2.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@tauri-apps/api': specifier: 2.0.2 version: 2.0.2 @@ -444,28 +444,28 @@ importers: version: 4.3.2(vite@5.4.8(@types/node@22.7.5)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.79.5)(stylus@0.62.0)) ahooks: specifier: 3.8.1 - version: 3.8.1(react@19.0.0-rc-09111202-20241011) + version: 3.8.1(react@19.0.0-rc-cd22717c-20241013) d3: specifier: 7.9.0 version: 7.9.0 framer-motion: specifier: 12.0.0-alpha.1 - version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) react: specifier: rc - version: 19.0.0-rc-09111202-20241011 + version: 19.0.0-rc-cd22717c-20241013 react-dom: specifier: rc - version: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + version: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@19.0.0-rc-09111202-20241011) + version: 4.0.13(react@19.0.0-rc-cd22717c-20241013) react-i18next: specifier: 15.0.3 - version: 15.0.3(i18next@23.15.2)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) react-use: specifier: 17.5.1 - version: 17.5.1(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + version: 17.5.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) vite: specifier: 5.4.8 version: 5.4.8(@types/node@22.7.5)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.79.5)(stylus@0.62.0) @@ -475,7 +475,7 @@ importers: devDependencies: '@emotion/react': specifier: 11.13.3 - version: 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + version: 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@types/d3-interpolate-path': specifier: 2.0.3 version: 2.0.3 @@ -1377,8 +1377,8 @@ packages: '@vue/compiler-sfc': optional: true - '@iconify/json@2.2.259': - resolution: {integrity: sha512-QA5chdx3Jw/jpPv6NrABJIbG6++572KocO/hyebEpSx0KYPc1f5dWkGG1tFu6v9NB7Xls8bXZHXak011Gvoiiw==} + '@iconify/json@2.2.260': + resolution: {integrity: sha512-0vVJBAJ8GOoS07b8yC6c8NHfFx1GJnM8xtebtyynQYZ0/60dxKi86imdNftq5oY/cFfvVUGlmBi/2HS+sxWsWA==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -4437,8 +4437,8 @@ packages: hyphenate-style-name@1.1.0: resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} - i18next@23.15.2: - resolution: {integrity: sha512-zcPSWzCvw6uKnuYHIqs4W7hTuB9e3AFcSdZgvCWoPXIZsBjBd4djN2/2uOHIB+1DFFkQnMBXvhNg7J3WyCuywQ==} + i18next@23.16.0: + resolution: {integrity: sha512-Ni3CG6c14teOogY19YNRl+kYaE/Rb59khy0VyHVn4uOZ97E2E/Yziyi6r3C3s9+wacjdLZiq/LLYyx+Cgd+FCw==} iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} @@ -5895,10 +5895,10 @@ packages: resolution: {integrity: sha512-FqHzVpsWddE5j0BtvjPiPGYiXWDat5EQWGl2oG8xVQs2zJ1KH0zHcu5a7ZdGVgKJWGvYl731J0/k/oOtFSiWfg==} hasBin: true - react-dom@19.0.0-rc-09111202-20241011: - resolution: {integrity: sha512-iGX/aJR6YjAHHUtmPNf2YmR8e2pYmlRL28tR/PO6VdIGBqNzzLMNnTEcgjlPPQ0rXBjI0IL7SJnOFYWmk3ZGjw==} + react-dom@19.0.0-rc-cd22717c-20241013: + resolution: {integrity: sha512-NzjTBOXygonUxLRQuUUW5V2QLGkAcyUwJoS8+UWxs089paMvQQfoRD51w65Ovgd2OEQ8Rm3HWx+82fvXiT0czQ==} peerDependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 react-error-boundary@4.0.13: resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} @@ -5987,8 +5987,8 @@ packages: react: '*' react-dom: '*' - react@19.0.0-rc-09111202-20241011: - resolution: {integrity: sha512-kAz5u4PAPQJI2VJzUrYC/p82CoPcl/KD7i1tHe+nu3RezaAvHGCZY339bLFMBzY91jnJoo07JQZ6UsqivtQ2vQ==} + react@19.0.0-rc-cd22717c-20241013: + resolution: {integrity: sha512-k28GszmyQ1tX/JmeLGZINq5KXiNy/MmN0fCAtcwF8a9INDyVYG0zATCRGJwaPB9WixmkuwPv1BfB1QBfJC7cNg==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -6287,8 +6287,8 @@ packages: sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - scheduler@0.25.0-rc-09111202-20241011: - resolution: {integrity: sha512-XIsordE2/I3s52ujwT5PZIxHMQca8L2ca6Gu3o0YHXDVTYucwXQW6m8/2fVKqfzoJRH1ne7/49M7/5Wick8qOA==} + scheduler@0.25.0-rc-cd22717c-20241013: + resolution: {integrity: sha512-MnsFR57bKcrYslnbCUsaUG0qBuAArk92VxE0zu6A2Usz38iIuL2uZLunqKlP1W47MF33GrRGDj1sXdPbFKIZfw==} screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -7813,29 +7813,29 @@ snapshots: '@ctrl/tinycolor@4.1.0': {} - '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-09111202-20241011)': + '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-cd22717c-20241013)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 tslib: 2.7.0 - '@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: - '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-09111202-20241011) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-09111202-20241011) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-cd22717c-20241013) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-cd22717c-20241013) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) tslib: 2.7.0 - '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: - '@dnd-kit/core': 6.1.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-09111202-20241011) - react: 19.0.0-rc-09111202-20241011 + '@dnd-kit/core': 6.1.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-cd22717c-20241013) + react: 19.0.0-rc-cd22717c-20241013 tslib: 2.7.0 - '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-09111202-20241011)': + '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-cd22717c-20241013)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 tslib: 2.7.0 '@dual-bundle/import-meta-resolve@4.1.0': {} @@ -7884,17 +7884,17 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.1 '@emotion/serialize': 1.3.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-09111202-20241011) + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-cd22717c-20241013) '@emotion/utils': 1.4.0 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -7924,16 +7924,16 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@emotion/serialize': 1.3.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-09111202-20241011) + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-cd22717c-20241013) '@emotion/utils': 1.4.0 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -7941,9 +7941,9 @@ snapshots: '@emotion/unitless@0.9.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-09111202-20241011)': + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-cd22717c-20241013)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 '@emotion/utils@1.4.0': {} @@ -8126,11 +8126,11 @@ snapshots: '@floating-ui/core': 1.6.1 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@floating-ui/dom': 1.6.5 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) '@floating-ui/utils@0.2.2': {} @@ -8163,7 +8163,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/json@2.2.259': + '@iconify/json@2.2.260': dependencies: '@iconify/types': 2.0.0 pathe: 1.1.2 @@ -8256,105 +8256,105 @@ snapshots: monaco-editor: 0.52.0 state-local: 1.0.7 - '@monaco-editor/react@4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@monaco-editor/react@4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@monaco-editor/loader': 1.4.0(monaco-editor@0.52.0) monaco-editor: 0.52.0 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) - '@mui/base@5.0.0-beta.58(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/base@5.0.0-beta.58(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.0.0-rc.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/utils': 6.0.0-rc.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 '@mui/core-downloads-tracker@6.1.3': {} - '@mui/icons-material@6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/icons-material@6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 + '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/lab@6.0.0-beta.11(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/lab@6.0.0-beta.11(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@mui/base': 5.0.0-beta.58(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/system': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/base': 5.0.0-beta.58(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/system': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@mui/core-downloads-tracker': 6.1.3 - '@mui/system': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/system': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.11 clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) react-is: 18.3.1 - react-transition-group: 4.4.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/private-theming@5.16.6(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/private-theming@5.16.6(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@mui/utils': 5.16.6(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/utils': 5.16.6(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/private-theming@6.1.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/private-theming@6.1.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@mui/utils': 6.1.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)': + '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@babel/runtime': 7.25.6 '@emotion/cache': 11.13.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) - '@mui/styled-engine@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)': + '@mui/styled-engine@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@babel/runtime': 7.25.6 '@emotion/cache': 11.13.1 @@ -8362,99 +8362,99 @@ snapshots: '@emotion/sheet': 1.4.0 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) - '@mui/system@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/system@5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@mui/private-theming': 5.16.6(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011) + '@mui/private-theming': 5.16.6(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 5.16.6(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/utils': 5.16.6(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 - '@mui/system@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/system@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@mui/private-theming': 6.1.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/styled-engine': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011) + '@mui/private-theming': 6.1.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/styled-engine': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013) '@mui/types': 7.2.18(types-react@19.0.0-rc.1) - '@mui/utils': 6.1.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/utils': 6.1.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@types/react': types-react@19.0.0-rc.1 '@mui/types@7.2.18(types-react@19.0.0-rc.1)': optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/utils@5.16.6(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/utils@5.16.6(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@mui/types': 7.2.18(types-react@19.0.0-rc.1) '@types/prop-types': 15.7.13 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 react-is: 18.3.1 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/utils@6.0.0-rc.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/utils@6.0.0-rc.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@mui/types': 7.2.18(types-react@19.0.0-rc.1) '@types/prop-types': 15.7.12 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 react-is: 18.3.1 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/utils@6.1.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/utils@6.1.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 '@mui/types': 7.2.18(types-react@19.0.0-rc.1) '@types/prop-types': 15.7.13 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 react-is: 18.3.1 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@mui/x-date-pickers@7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@mui/x-date-pickers@7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.6 - '@mui/base': 5.0.0-beta.58(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/utils': 5.16.6(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/base': 5.0.0-beta.58(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/utils': 5.16.6(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@types/react-transition-group': 4.4.11 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) - react-transition-group: 4.4.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) dayjs: 1.11.13 transitivePeerDependencies: - '@types/react' @@ -8741,82 +8741,82 @@ snapshots: '@radix-ui/primitive@1.1.0': {} - '@radix-ui/react-compose-refs@1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-compose-refs@1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-context@1.1.1(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-context@1.1.1(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-direction@1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-direction@1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-portal@1.1.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-portal@1.1.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-presence@1.1.1(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-presence@1.1.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-primitive@2.0.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-primitive@2.0.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-scroll-area@1.2.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-scroll-area@1.2.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-slot@1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-slot@1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-use-callback-ref@1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-callback-ref@1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@radix-ui/react-use-layout-effect@1.1.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-layout-effect@1.1.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1)': dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -9079,43 +9079,43 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@tanstack/history': 1.61.1 - '@tanstack/react-store': 0.5.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + '@tanstack/react-store': 0.5.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 optionalDependencies: '@tanstack/router-generator': 1.65.0 - '@tanstack/react-store@0.5.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@tanstack/react-store@0.5.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@tanstack/store': 0.5.5 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) - use-sync-external-store: 1.2.2(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) + use-sync-external-store: 1.2.2(react@19.0.0-rc-cd22717c-20241013) - '@tanstack/react-table@8.20.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@tanstack/react-table@8.20.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@tanstack/table-core': 8.20.5 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) - '@tanstack/react-virtual@3.10.6(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@tanstack/react-virtual@3.10.6(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@tanstack/virtual-core': 3.10.6 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) - '@tanstack/router-devtools@1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011))(csstype@3.1.3)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)': + '@tanstack/router-devtools@1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013))(csstype@3.1.3)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: - '@tanstack/react-router': 1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + '@tanstack/react-router': 1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) clsx: 2.1.1 goober: 2.1.14(csstype@3.1.3) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) transitivePeerDependencies: - csstype @@ -9152,9 +9152,9 @@ snapshots: - supports-color - webpack-sources - '@tanstack/router-zod-adapter@1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011))(zod@3.23.8)': + '@tanstack/router-zod-adapter@1.65.0(@tanstack/react-router@1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013))(zod@3.23.8)': dependencies: - '@tanstack/react-router': 1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + '@tanstack/react-router': 1.65.0(@tanstack/router-generator@1.65.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) zod: 3.23.8 '@tanstack/store@0.5.5': {} @@ -9707,14 +9707,14 @@ snapshots: clean-stack: 5.2.0 indent-string: 5.0.0 - ahooks@3.8.1(react@19.0.0-rc-09111202-20241011): + ahooks@3.8.1(react@19.0.0-rc-cd22717c-20241013): dependencies: '@babel/runtime': 7.25.6 dayjs: 1.11.13 intersection-observer: 0.12.2 js-cookie: 3.0.5 lodash: 4.17.21 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 react-fast-compare: 3.2.2 resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 @@ -9756,16 +9756,16 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - allotment@1.20.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + allotment@1.20.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: classnames: 2.5.1 eventemitter3: 5.0.1 lodash.clamp: 4.0.3 lodash.debounce: 4.0.8 lodash.isequal: 4.5.0 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) - use-resize-observer: 9.1.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) + use-resize-observer: 9.1.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) ansi-align@2.0.0: dependencies: @@ -11236,13 +11236,13 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + framer-motion@12.0.0-alpha.1(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: tslib: 2.7.0 optionalDependencies: '@emotion/is-prop-valid': 1.3.0 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) fs-extra@11.2.0: dependencies: @@ -11567,7 +11567,7 @@ snapshots: hyphenate-style-name@1.1.0: {} - i18next@23.15.2: + i18next@23.16.0: dependencies: '@babel/runtime': 7.25.6 @@ -11856,10 +11856,10 @@ snapshots: jju@1.4.0: {} - jotai@2.10.0(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1): + jotai@2.10.0(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1): optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 js-cookie@2.2.1: {} @@ -12108,19 +12108,19 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - material-react-table@3.0.1(ddtozfjxwylixfiwxy7ptqpqna): + material-react-table@3.0.1(2oi5dao5k6acau5jeicyle5flm): dependencies: - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/icons-material': 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/icons-material': 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) '@tanstack/match-sorter-utils': 8.19.4 - '@tanstack/react-table': 8.20.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) - '@tanstack/react-virtual': 3.10.6(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) + '@tanstack/react-table': 8.20.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) + '@tanstack/react-virtual': 3.10.6(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) highlight-words: 1.2.2 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) mathml-tag-names@2.1.3: {} @@ -12453,14 +12453,14 @@ snapshots: muggle-string@0.4.1: {} - mui-color-input@4.0.1(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1): + mui-color-input@4.0.1(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1): dependencies: '@ctrl/tinycolor': 4.1.0 - '@emotion/react': 11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + '@emotion/react': 11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: '@types/react': types-react@19.0.0-rc.1 @@ -12470,15 +12470,15 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nano-css@5.6.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + nano-css@5.6.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 inline-style-prefixer: 7.0.1 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.2 @@ -13018,50 +13018,50 @@ snapshots: - supports-color - utf-8-validate - react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011): + react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013): dependencies: - react: 19.0.0-rc-09111202-20241011 - scheduler: 0.25.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 + scheduler: 0.25.0-rc-cd22717c-20241013 - react-error-boundary@4.0.13(react@19.0.0-rc-09111202-20241011): + react-error-boundary@4.0.13(react@19.0.0-rc-cd22717c-20241013): dependencies: '@babel/runtime': 7.25.6 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 react-fast-compare@3.2.2: {} - react-fast-marquee@1.6.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + react-fast-marquee@1.6.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) - react-hook-form-mui@7.3.1(ys6qyhmibdgj3aiegp2mknsmkq): + react-hook-form-mui@7.3.1(agt453dwgyjunypjf6prbgqys4): dependencies: - '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-09111202-20241011 - react-hook-form: 7.52.1(react@19.0.0-rc-09111202-20241011) + '@mui/material': 6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-cd22717c-20241013 + react-hook-form: 7.52.1(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: - '@mui/icons-material': 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) - '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1) + '@mui/icons-material': 6.1.3(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) + '@mui/x-date-pickers': 7.9.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@mui/material@6.1.3(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1))(dayjs@1.11.13)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1) - react-hook-form@7.52.1(react@19.0.0-rc-09111202-20241011): + react-hook-form@7.52.1(react@19.0.0-rc-cd22717c-20241013): dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 - react-i18next@15.0.3(i18next@23.15.2)(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + react-i18next@15.0.3(i18next@23.16.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: '@babel/runtime': 7.25.6 html-parse-stringify: 3.0.1 - i18next: 23.15.2 - react: 19.0.0-rc-09111202-20241011 + i18next: 23.16.0 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) react-is@16.13.1: {} react-is@18.3.1: {} - react-markdown@9.0.1(react@19.0.0-rc-09111202-20241011)(types-react@19.0.0-rc.1): + react-markdown@9.0.1(react@19.0.0-rc-cd22717c-20241013)(types-react@19.0.0-rc.1): dependencies: '@types/hast': 3.0.4 '@types/react': types-react@19.0.0-rc.1 @@ -13069,7 +13069,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 mdast-util-to-hast: 13.1.0 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 remark-parse: 11.0.0 remark-rehype: 11.1.0 unified: 11.0.4 @@ -13080,27 +13080,27 @@ snapshots: react-refresh@0.14.2: {} - react-split-grid@1.0.4(react@19.0.0-rc-09111202-20241011): + react-split-grid@1.0.4(react@19.0.0-rc-cd22717c-20241013): dependencies: prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 split-grid: 1.0.11 - react-transition-group@4.4.5(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + react-transition-group@4.4.5(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: '@babel/runtime': 7.25.6 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) - react-universal-interface@0.6.2(react@19.0.0-rc-09111202-20241011)(tslib@2.7.0): + react-universal-interface@0.6.2(react@19.0.0-rc-cd22717c-20241013)(tslib@2.7.0): dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 tslib: 2.7.0 - react-use@17.5.1(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + react-use@17.5.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -13108,10 +13108,10 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011) - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) - react-universal-interface: 0.6.2(react@19.0.0-rc-09111202-20241011)(tslib@2.7.0) + nano-css: 5.6.2(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) + react-universal-interface: 0.6.2(react@19.0.0-rc-cd22717c-20241013)(tslib@2.7.0) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 @@ -13119,7 +13119,7 @@ snapshots: ts-easing: 0.2.0 tslib: 2.7.0 - react@19.0.0-rc-09111202-20241011: {} + react@19.0.0-rc-cd22717c-20241013: {} read-cache@1.0.0: dependencies: @@ -13416,7 +13416,7 @@ snapshots: sax@1.3.0: {} - scheduler@0.25.0-rc-09111202-20241011: {} + scheduler@0.25.0-rc-cd22717c-20241013: {} screenfull@5.2.0: {} @@ -13822,11 +13822,11 @@ snapshots: svg-tags@1.0.0: {} - swr@2.2.5(react@19.0.0-rc-09111202-20241011): + swr@2.2.5(react@19.0.0-rc-cd22717c-20241013): dependencies: client-only: 0.0.1 - react: 19.0.0-rc-09111202-20241011 - use-sync-external-store: 1.2.2(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + use-sync-external-store: 1.2.2(react@19.0.0-rc-cd22717c-20241013) synckit@0.9.1: dependencies: @@ -14263,15 +14263,15 @@ snapshots: dependencies: prepend-http: 1.0.4 - use-resize-observer@9.1.0(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + use-resize-observer@9.1.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: '@juggle/resize-observer': 3.4.0 - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) - use-sync-external-store@1.2.2(react@19.0.0-rc-09111202-20241011): + use-sync-external-store@1.2.2(react@19.0.0-rc-cd22717c-20241013): dependencies: - react: 19.0.0-rc-09111202-20241011 + react: 19.0.0-rc-cd22717c-20241013 utf-8-validate@5.0.10: dependencies: @@ -14294,10 +14294,10 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - virtua@0.35.1(react-dom@19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011))(react@19.0.0-rc-09111202-20241011): + virtua@0.35.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): optionalDependencies: - react: 19.0.0-rc-09111202-20241011 - react-dom: 19.0.0-rc-09111202-20241011(react@19.0.0-rc-09111202-20241011) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) vite-bundle-visualizer@1.2.1(rollup@4.21.0): dependencies: diff --git a/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h b/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h index 3fcae81fa4..4b3b3fe98c 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h +++ b/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h @@ -23,6 +23,16 @@ struct dentry; struct inode; struct file; +typedef enum rtl8367b_chip_e { + RTL8367B_CHIP_UNKNOWN, + /* Family B */ + RTL8367B_CHIP_RTL8367RB, + RTL8367B_CHIP_RTL8367R_VB, /* chip with exception in extif assignment */ +/* Family C */ + RTL8367B_CHIP_RTL8367RB_VB, + RTL8367B_CHIP_RTL8367S +} rtl8367b_chip_t; + struct rtl8366_mib_counter { unsigned base; unsigned offset; @@ -64,6 +74,7 @@ struct rtl8366_smi { u8 dbg_vlan_4k_page; #endif u32 phy_id; + rtl8367b_chip_t rtl8367b_chip; struct mii_bus *ext_mbus; }; diff --git a/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c index 5d3496ca3e..8eb0ca61d4 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c +++ b/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c @@ -1,5 +1,6 @@ /* - * Platform driver for the Realtek RTL8367R-VB ethernet switches + * Platform driver for Realtek RTL8367B family chips, i.e. RTL8367RB and RTL8367R-VB + * extended with support for RTL8367C family chips, i.e. RTL8367RB-VB and RTL8367S * * Copyright (C) 2012 Gabor Juhos * @@ -515,28 +516,19 @@ static int rtl8367b_write_phy_reg(struct rtl8366_smi *smi, static int rtl8367b_init_regs(struct rtl8366_smi *smi) { const struct rtl8367b_initval *initvals; - u32 chip_num; - u32 chip_ver; int count; - int err; - REG_WR(smi, RTL8367B_RTL_MAGIC_ID_REG, RTL8367B_RTL_MAGIC_ID_VAL); - REG_RD(smi, RTL8367B_CHIP_NUMBER_REG, &chip_num); - REG_RD(smi, RTL8367B_CHIP_VER_REG, &chip_ver); - - switch (chip_ver) { - case 0x1000: - case 0x1010: + switch (smi->rtl8367b_chip) { + case RTL8367B_CHIP_RTL8367RB: + case RTL8367B_CHIP_RTL8367R_VB: initvals = rtl8367b_initvals; count = ARRAY_SIZE(rtl8367b_initvals); break; - case 0x0020: - case 0x00A0: - if (chip_num == 0x6367) { - initvals = rtl8367c_initvals; - count = ARRAY_SIZE(rtl8367c_initvals); - } else return -ENODEV; - break + case RTL8367B_CHIP_RTL8367RB_VB: + case RTL8367B_CHIP_RTL8367S: + initvals = rtl8367c_initvals; + count = ARRAY_SIZE(rtl8367c_initvals); + break; default: return -ENODEV; } @@ -1308,10 +1300,10 @@ static int rtl8367b_detect(struct rtl8366_smi *smi) const char *chip_name = NULL; u32 chip_num; u32 chip_ver; - u32 chip_mode; int ret; - /* TODO: improve chip detection */ + smi->rtl8367b_chip = RTL8367B_CHIP_UNKNOWN; + rtl8366_smi_write_reg(smi, RTL8367B_RTL_MAGIC_ID_REG, RTL8367B_RTL_MAGIC_ID_VAL); @@ -1329,41 +1321,41 @@ static int rtl8367b_detect(struct rtl8366_smi *smi) return ret; } - ret = rtl8366_smi_read_reg(smi, RTL8367B_CHIP_MODE_REG, &chip_mode); - if (ret) { - dev_err(smi->parent, "unable to read %s register\n", - "chip mode"); - return ret; - } - switch (chip_ver) { case 0x0020: - if (chip_num == 0x6367) + if (chip_num == 0x6367) { chip_name = "8367RB-VB"; + smi->rtl8367b_chip = RTL8367B_CHIP_RTL8367RB_VB; + } break; case 0x00A0: - if (chip_num == 0x6367) + if (chip_num == 0x6367) { chip_name = "8367S"; + smi->rtl8367b_chip = RTL8367B_CHIP_RTL8367S; + } break; case 0x1000: chip_name = "8367RB"; + smi->rtl8367b_chip = RTL8367B_CHIP_RTL8367RB; break; case 0x1010: chip_name = "8367R-VB"; + smi->rtl8367b_chip = RTL8367B_CHIP_RTL8367R_VB; } if (!chip_name) { dev_err(smi->parent, - "unknown chip num:%04x ver:%04x, mode:%04x\n", - chip_num, chip_ver, chip_mode); + "unknown chip (num:%04x ver:%04x)\n", + chip_num, chip_ver); return -ENODEV; } - dev_info(smi->parent, "RTL%s chip found\n", chip_name); + dev_info(smi->parent, "RTL%s chip found (num:%04x ver:%04x)\n", chip_name, chip_num, chip_ver); + /* for the RTL8367R-VB chip, extif1 corresponds to cpu_port 5 */ if (of_property_present(smi->parent->of_node, "realtek,extif2")) smi->cpu_port = RTL8367B_CPU_PORT_NUM + 2; - else if (of_property_present(smi->parent->of_node, "realtek,extif1") && (chip_ver != 0x1010)) /* for the RTL8367R-VB chip, extif1 corresponds to cpu_port 5 */ + else if (of_property_present(smi->parent->of_node, "realtek,extif1") && (smi->rtl8367b_chip != RTL8367B_CHIP_RTL8367R_VB)) smi->cpu_port = RTL8367B_CPU_PORT_NUM + 1; dev_info(smi->parent, "CPU port: %u\n", smi->cpu_port); diff --git a/openwrt-packages/luci-app-filebrowser/Makefile b/openwrt-packages/luci-app-filebrowser/Makefile index 5f54825852..3abe46bba8 100644 --- a/openwrt-packages/luci-app-filebrowser/Makefile +++ b/openwrt-packages/luci-app-filebrowser/Makefile @@ -1,6 +1,8 @@ -# Copyright (C) 2018-2020 Lienol # -# This is free software, licensed under the Apache License, Version 2.0 . +# Copyright (C) 2021 ImmortalWrt +# +# +# This is free software, licensed under the GNU General Public License v3. # include $(TOPDIR)/rules.mk @@ -9,6 +11,11 @@ LUCI_TITLE:=LuCI Support for FileBrowser LUCI_DEPENDS:=+filebrowser LUCI_PKGARCH:=all +PKG_NAME:=luci-app-filebrowser +PKG_VERSION:=snapshot +PKG_RELEASE:=118071b + +PKG_LICENSE:=GPLv3 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/controller/filebrowser.lua b/openwrt-packages/luci-app-filebrowser/luasrc/controller/filebrowser.lua index aa62649fb5..c6ca9085b1 100644 --- a/openwrt-packages/luci-app-filebrowser/luasrc/controller/filebrowser.lua +++ b/openwrt-packages/luci-app-filebrowser/luasrc/controller/filebrowser.lua @@ -1,59 +1,19 @@ --- Copyright 2018-2020 Lienol --- Improve by xiaozhuai -module("luci.controller.filebrowser", package.seeall) - -local http = require "luci.http" -local api = require "luci.model.cbi.filebrowser.api" - -function index() - if not nixio.fs.access("/etc/config/filebrowser") then return end - - entry({"admin", "services"}, firstchild(), "Services", 44).dependent = false - entry({"admin", "services", "filebrowser"}, cbi("filebrowser/settings"), - _("File Browser"), 2).dependent = true - - entry({"admin", "services", "filebrowser", "check"}, call("action_check")).leaf = - true - entry({"admin", "services", "filebrowser", "download"}, call("action_download")).leaf = - true - entry({"admin", "services", "filebrowser", "status"}, call("act_status")).leaf = - true - entry({"admin", "services", "filebrowser", "get_log"}, call("get_log")).leaf = - true - entry({"admin", "services", "filebrowser", "clear_log"}, call("clear_log")).leaf = - true -end - -local function http_write_json(content) - http.prepare_content("application/json") - http.write_json(content or {code = 1}) -end - -function act_status() - local e = {} - e.status = luci.sys.call("ps -w | grep -v grep | grep 'filebrowser -a' >/dev/null") == 0 - http_write_json(e) -end - -function action_check() - local json = api.to_check() - http_write_json(json) -end - -function action_download() - local json = nil - local task = http.formvalue("task") - if task == "extract" then - json = api.to_extract(http.formvalue("file")) - elseif task == "move" then - json = api.to_move(http.formvalue("file")) - else - json = api.to_download(http.formvalue("url")) - end - http_write_json(json) -end - -function get_log() - luci.http.write(luci.sys.exec("[ -f '/var/log/filebrowser.log' ] && cat /var/log/filebrowser.log")) -end -function clear_log() luci.sys.call("echo '' > /var/log/filebrowser.log") end +module("luci.controller.filebrowser", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/filebrowser") then + return + end + entry({"admin", "nas"}, firstchild(), _("NAS") , 45).dependent = false + local page + page = entry({"admin", "nas", "filebrowser"}, cbi("filebrowser"), _("文件管理器"), 100) + page.dependent = true + entry({"admin","nas","filebrowser","status"},call("act_status")).leaf=true +end + +function act_status() + local e={} + e.running=luci.sys.call("pgrep filebrowser >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser.lua b/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser.lua new file mode 100644 index 0000000000..0a12e9cf72 --- /dev/null +++ b/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser.lua @@ -0,0 +1,42 @@ +m = Map("filebrowser", translate("文件管理器"), translate("FileBrowser是一个基于Go的在线文件管理器,助您方便的管理设备上的文件。")) + +m:section(SimpleSection).template = "filebrowser/filebrowser_status" + +s = m:section(TypedSection, "filebrowser") +s.addremove = false +s.anonymous = true + +enable = s:option(Flag, "enabled", translate("启用")) +enable.rmempty = false + +o = s:option(ListValue, "addr_type", translate("监听地址")) +o:value("local", translate("监听本机地址")) +o:value("lan", translate("监听局域网地址")) +o:value("wan", translate("监听全部地址")) +o.default = "lan" +o.rmempty = false + +o = s:option(Value, "port", translate("监听端口")) +o.placeholder = 8989 +o.default = 8989 +o.datatype = "port" +o.rmempty = false + +o = s:option(Value, "root_dir", translate("开放目录")) +o.placeholder = "/" +o.default = "/" +o.rmempty = false + +o = s:option(Value, "db_dir", translate("数据库目录")) +o.placeholder = "/etc" +o.default = "/etc" +o.rmempty = false +o.description = translate("普通用户请勿随意更改") + +o = s:option(Value, "db_name", translate("数据库名")) +o.placeholder = "filebrowser.db" +o.default = "filebrowser.db" +o.rmempty = false +o.description = translate("普通用户请勿随意更改") + +return m diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser/api.lua b/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser/api.lua deleted file mode 100644 index f47785f112..0000000000 --- a/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser/api.lua +++ /dev/null @@ -1,338 +0,0 @@ -local fs = require "nixio.fs" -local sys = require "luci.sys" -local uci = require"luci.model.uci".cursor() -local util = require "luci.util" -local i18n = require "luci.i18n" - -module("luci.model.cbi.filebrowser.api", package.seeall) - -local appname = "filebrowser" -local api_url = - "https://api.github.com/repos/filebrowser/filebrowser/releases/latest" - -local wget = "/usr/bin/wget" -local wget_args = { - "--no-check-certificate", "--quiet", "--timeout=10", "--tries=2" -} -local command_timeout = 300 - -local LEDE_BOARD = nil -local DISTRIB_TARGET = nil - -function uci_get_type(type, config, default) - value = uci:get_first(appname, type, config, default) or sys.exec( - "echo -n `uci -q get " .. appname .. ".@" .. type .. "[0]." .. - config .. "`") - if (value == nil or value == "") and (default and default ~= "") then - value = default - end - return value -end - -local function _unpack(t, i) - i = i or 1 - if t[i] ~= nil then return t[i], _unpack(t, i + 1) end -end - -local function exec(cmd, args, writer, timeout) - local os = require "os" - local nixio = require "nixio" - - local fdi, fdo = nixio.pipe() - local pid = nixio.fork() - - if pid > 0 then - fdo:close() - - if writer or timeout then - local starttime = os.time() - while true do - if timeout and os.difftime(os.time(), starttime) >= timeout then - nixio.kill(pid, nixio.const.SIGTERM) - return 1 - end - - if writer then - local buffer = fdi:read(2048) - if buffer and #buffer > 0 then - writer(buffer) - end - end - - local wpid, stat, code = nixio.waitpid(pid, "nohang") - - if wpid and stat == "exited" then return code end - - if not writer and timeout then nixio.nanosleep(1) end - end - else - local wpid, stat, code = nixio.waitpid(pid) - return wpid and stat == "exited" and code - end - elseif pid == 0 then - nixio.dup(fdo, nixio.stdout) - fdi:close() - fdo:close() - nixio.exece(cmd, args, nil) - nixio.stdout:close() - os.exit(1) - end -end - -local function compare_versions(ver1, comp, ver2) - local table = table - - local av1 = util.split(ver1, "[%.%-]", nil, true) - local av2 = util.split(ver2, "[%.%-]", nil, true) - - local max = table.getn(av1) - local n2 = table.getn(av2) - if (max < n2) then max = n2 end - - for i = 1, max, 1 do - local s1 = av1[i] or "" - local s2 = av2[i] or "" - - if comp == "~=" and (s1 ~= s2) then return true end - if (comp == "<" or comp == "<=") and (s1 < s2) then return true end - if (comp == ">" or comp == ">=") and (s1 > s2) then return true end - if (s1 ~= s2) then return false end - end - - return not (comp == "<" or comp == ">") -end - -local function auto_get_arch() - local arch = nixio.uname().machine or "" - if fs.access("/usr/lib/os-release") then - LEDE_BOARD = sys.exec( - "echo -n `grep 'LEDE_BOARD' /usr/lib/os-release | awk -F '[\\042\\047]' '{print $2}'`") - end - if fs.access("/etc/openwrt_release") then - DISTRIB_TARGET = sys.exec( - "echo -n `grep 'DISTRIB_TARGET' /etc/openwrt_release | awk -F '[\\042\\047]' '{print $2}'`") - end - - if arch == "mips" then - if LEDE_BOARD and LEDE_BOARD ~= "" then - if string.match(LEDE_BOARD, "ramips") == "ramips" then - arch = "ramips" - else - arch = sys.exec("echo '" .. LEDE_BOARD .. - "' | grep -oE 'ramips|ar71xx'") - end - elseif DISTRIB_TARGET and DISTRIB_TARGET ~= "" then - if string.match(DISTRIB_TARGET, "ramips") == "ramips" then - arch = "ramips" - else - arch = sys.exec("echo '" .. DISTRIB_TARGET .. - "' | grep -oE 'ramips|ar71xx'") - end - end - end - - return util.trim(arch) -end - -local function get_file_info(arch) - local file_tree = "" - local sub_version = "" - - if arch == "x86_64" then - file_tree = "amd64" - elseif arch == "aarch64" then - file_tree = "arm64" - elseif arch == "ramips" then - file_tree = "mipsle" - elseif arch == "ar71xx" then - file_tree = "mips" - elseif arch:match("^i[%d]86$") then - file_tree = "386" - elseif arch:match("^armv[5-8]") then - file_tree = "armv" - sub_version = arch:match("[5-8]") - if LEDE_BOARD and string.match(LEDE_BOARD, "bcm53xx") == "bcm53xx" then - sub_version = "5" - elseif DISTRIB_TARGET and string.match(DISTRIB_TARGET, "bcm53xx") == - "bcm53xx" then - sub_version = "5" - end - sub_version = "5" - end - - return file_tree, sub_version -end - -local function get_api_json(url) - local jsonc = require "luci.jsonc" - - local output = {} - -- exec(wget, { "-O-", url, _unpack(wget_args) }, - -- function(chunk) output[#output + 1] = chunk end) - -- local json_content = util.trim(table.concat(output)) - - local json_content = luci.sys.exec(wget .. - " --no-check-certificate --timeout=10 -t 1 -O- " .. - url) - - if json_content == "" then return {} end - - return jsonc.parse(json_content) or {} -end - -function get_version() return uci_get_type("global", "version", "0") end - -function to_check(arch) - if not arch or arch == "" then arch = auto_get_arch() end - - local file_tree, sub_version = get_file_info(arch) - - if file_tree == "" then - return { - code = 1, - error = i18n.translate( - "Can't determine ARCH, or ARCH not supported.") - } - end - - local json = get_api_json(api_url) - - if json.tag_name == nil then - return { - code = 1, - error = i18n.translate("Get remote version info failed.") - } - end - - local remote_version = json.tag_name:match("[^v]+") - - local needs_update = compare_versions(get_version(), "<", remote_version) - local html_url, download_url - - if needs_update then - html_url = json.html_url - for _, v in ipairs(json.assets) do - if v.name and v.name:match("linux%-" .. file_tree .. sub_version) then - download_url = v.browser_download_url - break - end - end - end - - if needs_update and not download_url then - return { - code = 1, - version = remote_version, - html_url = html_url, - error = i18n.translate( - "New version found, but failed to get new version download url.") - } - end - - return { - code = 0, - update = needs_update, - version = remote_version, - url = {html = html_url, download = download_url} - } -end - -function to_download(url) - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/filebrowser_download.*") - - local tmp_file = util.trim(util.exec( - "mktemp -u -t filebrowser_download.XXXXXX")) - - local result = exec(wget, {"-O", tmp_file, url, _unpack(wget_args)}, nil, - command_timeout) == 0 - - if not result then - exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_extract(file, subfix) - if not file or file == "" or not fs.access(file) then - return {code = 1, error = i18n.translate("File path required.")} - end - - sys.call("/bin/rm -rf /tmp/filebrowser_extract.*") - local tmp_dir = util.trim(util.exec( - "mktemp -d -t filebrowser_extract.XXXXXX")) - - local output = {} - exec("/bin/tar", {"-C", tmp_dir, "-zxvf", file}, - function(chunk) output[#output + 1] = chunk end) - - local files = util.split(table.concat(output)) - - exec("/bin/rm", {"-f", file}) - - if not new_file then - for _, f in pairs(files) do - if f:match("filebrowser") then - new_file = tmp_dir .. "/" .. util.trim(f) - break - end - end - end - - if not new_file then - exec("/bin/rm", {"-rf", tmp_dir}) - return { - code = 1, - error = i18n.translatef("Can't find client in file: %s", file) - } - end - - return {code = 0, file = new_file} -end - -function to_move(file) - if not file or file == "" or not fs.access(file) then - sys.call("/bin/rm -rf /tmp/filebrowser_extract.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - local executable_directory = - uci_get_type("global", "executable_directory", "/tmp") - luci.sys.exec("mkdir -p " .. executable_directory) - local client_path = executable_directory .. "/" .. appname - local client_path_bak - - if fs.access(client_path) then - client_path_bak = "/tmp/" .. appname .. ".bak" - exec("/bin/mv", {"-f", client_path, client_path_bak}) - end - - local result = exec("/bin/mv", {"-f", file, client_path}, nil, - command_timeout) == 0 - - if not result or not fs.access(client_path) then - if client_path_bak then - exec("/bin/mv", {"-f", client_path_bak, client_path}) - end - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", - client_path) - } - end - - exec("/bin/chmod", {"755", client_path}) - - if client_path_bak then exec("/bin/rm", {"-f", client_path_bak}) end - - sys.call("/bin/rm -rf /tmp/filebrowser_extract.*") - - return {code = 0} -end diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser/settings.lua b/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser/settings.lua deleted file mode 100644 index 2a26870cb6..0000000000 --- a/openwrt-packages/luci-app-filebrowser/luasrc/model/cbi/filebrowser/settings.lua +++ /dev/null @@ -1,59 +0,0 @@ -m = Map("filebrowser", translate("FileBrowser"), translate( - "File explorer is software that creates your own cloud that you can install on a server, point it to a path, and then access your files through a beautiful web interface. You have many features available!")) -m:append(Template("filebrowser/status")) - -s = m:section(TypedSection, "global", translate("Global Settings")) -s.anonymous = true -s.addremove = false - -o = s:option(Flag, "enable", translate("Enable")) -o.rmempty = false - -o = s:option(Value, "address", translate("Listen address")) -o.default = "0.0.0.0" -o.rmempty = false - -o = s:option(Value, "port", translate("Listen port")) -o.datatype = "port" -o.default = 8088 -o.rmempty = false - -o = s:option(Value, "database", translate("Database path")) -o.default = "/etc/filebrowser.db" -o.rmempty = false - -o = s:option(Value, "username", translate("Initial username")) -o.default = "admin" -o.rmempty = false - -o = s:option(Value, "password", translate("Initial password")) -o.default = "admin" -o.rmempty = false - -o = s:option(Value, "ssl_cert", translate("SSL cert")) -o.default = "" - -o = s:option(Value, "ssl_key", translate("SSL key")) -o.default = "" - -o = s:option(Value, "root_path", translate("Root path"), translate( - "Point to a path to access your files in the web interface, default is /root")) -o.default = "/root" -o.rmempty = false - -o = s:option(Value, "executable_directory", translate("Executable directory"), - translate( - "The file size is large, requiring at least 32M space. It is recommended to insert a usb flash drive or hard disk, or use it in the tmp directory
For example, /mnt/sda1
For example, /tmp")) -o.default = "/tmp" -o.rmempty = false - -o = s:option(Button, "_download", translate("Manually download"), translate( - "Make sure you have enough space.
Be sure to fill out the executable storage directory the first time you run it, and then save the application. Then manually download, otherwise can not use!")) -o.template = "filebrowser/download" -o.inputstyle = "apply" -o.btnclick = "downloadClick(this);" -o.id = "download_btn" - -m:append(Template("filebrowser/log")) - -return m diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/download.htm b/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/download.htm deleted file mode 100644 index c6c07cb342..0000000000 --- a/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/download.htm +++ /dev/null @@ -1,169 +0,0 @@ -<% -local dsp = require "luci.dispatcher" --%> - - - -<%+cbi/valueheader%> - <% if self:cfgvalue(section) ~= false then %> - " type="button"<%= - attr("name", cbid) .. - attr("id", self.id or cbid) .. - attr("value", self.inputtitle or self.title) .. - ifattr(self.btnclick, "onclick", self.btnclick) .. - ifattr(self.placeholder, "placeholder") - %> /> - - <% else %> - - - <% end %> -<%+cbi/valuefooter%> diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/filebrowser_status.htm b/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/filebrowser_status.htm new file mode 100644 index 0000000000..ef96cf77c3 --- /dev/null +++ b/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/filebrowser_status.htm @@ -0,0 +1,32 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/log.htm b/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/log.htm deleted file mode 100644 index 17a22c31ff..0000000000 --- a/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/log.htm +++ /dev/null @@ -1,31 +0,0 @@ - -
- - <%:Logs%> - - - -
diff --git a/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/status.htm b/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/status.htm deleted file mode 100644 index 727d3e19d8..0000000000 --- a/openwrt-packages/luci-app-filebrowser/luasrc/view/filebrowser/status.htm +++ /dev/null @@ -1,38 +0,0 @@ -<% -local dsp = require "luci.dispatcher" --%> - -
- <%:Running Status%> -
-
- -

<%:Collecting data...%>

-
-
-
- - diff --git a/openwrt-packages/luci-app-filebrowser/po/zh-cn/filebrowser.po b/openwrt-packages/luci-app-filebrowser/po/zh-cn/filebrowser.po deleted file mode 100644 index 4dd920ef11..0000000000 --- a/openwrt-packages/luci-app-filebrowser/po/zh-cn/filebrowser.po +++ /dev/null @@ -1,125 +0,0 @@ -msgid "File Browser" -msgstr "文件浏览器" - -msgid "File explorer is software that creates your own cloud that you can install on a server, point it to a path, and then access your files through a beautiful web interface. You have many features available!" -msgstr "文件浏览器是一种创建你自己的云的软件,你可以在服务器上安装它,将它指向一个路径,然后通过一个漂亮的web界面访问你的文件。您有许多可用的特性!" - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Enter interface" -msgstr "进入界面" - -msgid "Global Settings" -msgstr "全局设置" - -msgid "Enable" -msgstr "启用" - -msgid "Listen address" -msgstr "监听地址" - -msgid "Listen port" -msgstr "监听端口" - -msgid "Initial username" -msgstr "初始账户" - -msgid "Initial password" -msgstr "初始密码" - -msgid "SSL cert" -msgstr "SSL 证书" - -msgid "SSL key" -msgstr "SSL 私钥" - -msgid "Database path" -msgstr "数据库路径" - -msgid "Root path" -msgstr "指向路径" - -msgid "Point to a path to access your files in the web interface, default is /root" -msgstr "指向一个路径,可在web界面访问你的文件,默认为 /root" - -msgid "Executable directory" -msgstr "可执行文件存放目录" - -msgid "The file size is large, requiring at least 32M space. It is recommended to insert a usb flash drive or hard disk, or use it in the tmp directory
For example, /mnt/sda1
For example, /tmp" -msgstr "文件较大,至少需要32M空间。建议插入U盘或硬盘,或放入tmp目录里使用
例如:/mnt/sda1
例如:/tmp" - -msgid "Manually download" -msgstr "手动下载" - -msgid "Make sure you have enough space.
Be sure to fill out the executable storage directory the first time you run it, and then save the application. Then manually download, otherwise can not use!" -msgstr "请确保具有足够的空间。
第一次运行务必填好项目存放目录,然后保存应用。再手动下载,否则无法使用!" - -msgid "Logs" -msgstr "日志" - -msgid "Clear logs" -msgstr "清空日志" - -msgid "It is the latest version" -msgstr "已是最新版本" - -msgid "Download successful" -msgstr "下载成功" - -msgid "Click to download" -msgstr "点击下载" - -msgid "Updating..." -msgstr "更新中" - -msgid "Unexpected error" -msgstr "意外错误" - -msgid "Download, are you sure to close?" -msgstr "正在下载,你确认要关闭吗?" - -msgid "Downloading..." -msgstr "下载中" - -msgid "Unpacking..." -msgstr "解压中" - -msgid "Moving..." -msgstr "移动中" - -msgid "The latest version:" -msgstr "最新版本:" - -msgid "Can't determine ARCH, or ARCH not supported." -msgstr "无法确认ARCH架构,或是不支持。" - -msgid "Get remote version info failed." -msgstr "获取远程版本信息失败。" - -msgid "New version found, but failed to get new version download url." -msgstr "发现新版本,但未能获得新版本的下载地址。" - -msgid "Download url is required." -msgstr "请指定下载地址。" - -msgid "File download failed or timed out: %s" -msgstr "文件下载失败或超时:%s" - -msgid "File path required." -msgstr "请指定文件路径。" - -msgid "Can't find client in file: %s" -msgstr "无法在文件中找到客户端:%s" - -msgid "Client file is required." -msgstr "请指定客户端文件。" - -msgid "The client file is not suitable for current device." -msgstr "客户端文件不适合当前设备。" - -msgid "Can't move new file to path: %s" -msgstr "无法移动新文件到:%s" diff --git a/openwrt-packages/luci-app-filebrowser/root/etc/config/filebrowser b/openwrt-packages/luci-app-filebrowser/root/etc/config/filebrowser deleted file mode 100644 index 8cc2b3a0f2..0000000000 --- a/openwrt-packages/luci-app-filebrowser/root/etc/config/filebrowser +++ /dev/null @@ -1,13 +0,0 @@ - -config global - option address '0.0.0.0' - option port '8088' - option database '/etc/filebrowser.db' - option username 'admin' - option password 'admin' - option ssl_cert '' - option ssl_key '' - option root_path '/root' - option executable_directory '/tmp' - option enable '0' - diff --git a/openwrt-packages/luci-app-filebrowser/root/etc/init.d/filebrowser b/openwrt-packages/luci-app-filebrowser/root/etc/init.d/filebrowser deleted file mode 100755 index be23925304..0000000000 --- a/openwrt-packages/luci-app-filebrowser/root/etc/init.d/filebrowser +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh /etc/rc.common -# Copyright (C) 2018-2020 Lienol -# Improve by xiaozhuai - -START=99 - -LOG_PATH="/var/log/filebrowser.log" - -echolog() { - echo -e "$(date "+%Y-%m-%d %H:%M:%S"): $1" >> $LOG_PATH -} - -config_t_get() { - local index=0 - [ -n "$4" ] && index=$4 - local ret=$(uci get filebrowser.@$1[$index].$2 2>/dev/null) - echo ${ret:=$3} -} -start() { - ENABLED=$(config_t_get global enable 0) - [ "$ENABLED" = "0" ] && return - ADDRESS=$(config_t_get global address 0.0.0.0) - PORT=$(config_t_get global port 8088) - DATABASE=$(config_t_get global database /etc/filebrowser.db) - USERNAME=$(config_t_get global username admin) - PASSWORD=$(config_t_get global password admin) - SSL_CERT=$(config_t_get global ssl_cert) - SSL_KEY=$(config_t_get global ssl_key) - ROOT_PATH=$(config_t_get global root_path /root) - executable_directory=$(config_t_get global executable_directory /tmp) - [ ! -f "$executable_directory/filebrowser" ] && echolog "$executable_directory/filebrowser not exists, please download first" && exit - - SSL_PARAMS="" - [ -n "$SSL_CERT" ] && [ -n "$SSL_KEY" ] && SSL_PARAMS="-t $SSL_CERT -k $SSL_KEY" - PASSWORD="$($executable_directory/filebrowser hash "$PASSWORD")" - $executable_directory/filebrowser -a $ADDRESS -p $PORT -r $ROOT_PATH -d "$DATABASE" --username $USERNAME --password $PASSWORD $SSL_PARAMS -l $LOG_PATH >/dev/null 2>&1 & -} - -stop() { - ps -w | grep -v "grep" | grep "$executable_directory/filebrowser -a" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & - rm -rf $LOG_PATH -} - -restart() { - stop - sleep 1 - start -} diff --git a/openwrt-packages/luci-app-filebrowser/root/etc/uci-defaults/luci-app-filebrowser b/openwrt-packages/luci-app-filebrowser/root/etc/uci-defaults/luci-filebrowser old mode 100644 new mode 100755 similarity index 92% rename from openwrt-packages/luci-app-filebrowser/root/etc/uci-defaults/luci-app-filebrowser rename to openwrt-packages/luci-app-filebrowser/root/etc/uci-defaults/luci-filebrowser index df11e72220..8fece8810e --- a/openwrt-packages/luci-app-filebrowser/root/etc/uci-defaults/luci-app-filebrowser +++ b/openwrt-packages/luci-app-filebrowser/root/etc/uci-defaults/luci-filebrowser @@ -1,11 +1,11 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@filebrowser[-1] - add ucitrack filebrowser - set ucitrack.@filebrowser[-1].init=filebrowser - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@filebrowser[-1] + add ucitrack filebrowser + set ucitrack.@filebrowser[-1].init=filebrowser + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 \ No newline at end of file diff --git a/openwrt-packages/luci-app-filebrowser/root/usr/share/rpcd/acl.d/luci-app-filebrowser.json b/openwrt-packages/luci-app-filebrowser/root/usr/share/rpcd/acl.d/luci-app-filebrowser.json deleted file mode 100644 index e01bde3d4a..0000000000 --- a/openwrt-packages/luci-app-filebrowser/root/usr/share/rpcd/acl.d/luci-app-filebrowser.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-filebrowser": { - "description": "Grant UCI access for luci-app-filebrowser", - "read": { - "uci": [ "filebrowser" ] - }, - "write": { - "uci": [ "filebrowser" ] - } - } -} diff --git a/openwrt-packages/luci-app-gost/luasrc/controller/gost.lua b/openwrt-packages/luci-app-gost/luasrc/controller/gost.lua index 37f8af1f19..1105b08700 100644 --- a/openwrt-packages/luci-app-gost/luasrc/controller/gost.lua +++ b/openwrt-packages/luci-app-gost/luasrc/controller/gost.lua @@ -12,7 +12,6 @@ function index() local page page = entry({"admin", "services", "gost"}, cbi("gost"), _("Gost"), 100) page.dependent = true - page.acl_depends = { "luci-app-gost" } entry({"admin", "services", "gost", "status"},call("act_status")).leaf=true end diff --git a/openwrt-packages/luci-app-gost/po/zh-cn b/openwrt-packages/luci-app-gost/po/zh-cn deleted file mode 120000 index 8d69574ddd..0000000000 --- a/openwrt-packages/luci-app-gost/po/zh-cn +++ /dev/null @@ -1 +0,0 @@ -zh_Hans \ No newline at end of file diff --git a/openwrt-packages/luci-app-gost/po/zh_Hans/gost.po b/openwrt-packages/luci-app-gost/po/zh-cn/gost.po similarity index 100% rename from openwrt-packages/luci-app-gost/po/zh_Hans/gost.po rename to openwrt-packages/luci-app-gost/po/zh-cn/gost.po diff --git a/openwrt-packages/luci-app-filebrowser/po/zh_Hans b/openwrt-packages/luci-app-gost/po/zh_Hans similarity index 100% rename from openwrt-packages/luci-app-filebrowser/po/zh_Hans rename to openwrt-packages/luci-app-gost/po/zh_Hans diff --git a/openwrt-packages/luci-app-gost/root/usr/share/rpcd/acl.d/luci-app-gost.json b/openwrt-packages/luci-app-gost/root/usr/share/rpcd/acl.d/luci-app-gost.json deleted file mode 100644 index f5adf7e5cd..0000000000 --- a/openwrt-packages/luci-app-gost/root/usr/share/rpcd/acl.d/luci-app-gost.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-gost": { - "description": "Grant UCI access for luci-app-gost", - "read": { - "uci": [ "gost" ] - }, - "write": { - "uci": [ "gost" ] - } - } -} diff --git a/sing-box/go.mod b/sing-box/go.mod index ab3048ce85..eb098803c6 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -34,7 +34,7 @@ require ( github.com/sagernet/sing-shadowsocks v0.2.7 github.com/sagernet/sing-shadowsocks2 v0.2.0 github.com/sagernet/sing-shadowtls v0.1.4 - github.com/sagernet/sing-tun v0.4.0-rc.3 + github.com/sagernet/sing-tun v0.4.0-rc.3.0.20241014141023-07278fb4705b github.com/sagernet/sing-vmess v0.1.12 github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 github.com/sagernet/utls v1.6.7 diff --git a/sing-box/go.sum b/sing-box/go.sum index 31b29b6d6b..6c2b1b23e0 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -129,8 +129,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wK github.com/sagernet/sing-shadowsocks2 v0.2.0/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ= github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k= github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4= -github.com/sagernet/sing-tun v0.4.0-rc.3 h1:W/Odc87dGXkRhwRo2jhsKYHypNbajIcsGlIzDatmMKA= -github.com/sagernet/sing-tun v0.4.0-rc.3/go.mod h1:+lQdWhqD4atzrCgRhoyrxBCg1OBru/hAv2BT3kdgmGM= +github.com/sagernet/sing-tun v0.4.0-rc.3.0.20241014141023-07278fb4705b h1:a2VWOxv7uvIThhJyW6bB+D+bciLSkkqzq4bC4yg3U0g= +github.com/sagernet/sing-tun v0.4.0-rc.3.0.20241014141023-07278fb4705b/go.mod h1:+lQdWhqD4atzrCgRhoyrxBCg1OBru/hAv2BT3kdgmGM= github.com/sagernet/sing-vmess v0.1.12 h1:2gFD8JJb+eTFMoa8FIVMnknEi+vCSfaiTXTfEYAYAPg= github.com/sagernet/sing-vmess v0.1.12/go.mod h1:luTSsfyBGAc9VhtCqwjR+dt1QgqBhuYBCONB/POhF8I= github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ= diff --git a/small/luci-app-ssr-plus/Makefile b/small/luci-app-ssr-plus/Makefile index d07f167d83..fdc6a092b7 100644 --- a/small/luci-app-ssr-plus/Makefile +++ b/small/luci-app-ssr-plus/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-ssr-plus PKG_VERSION:=188 -PKG_RELEASE:=7 +PKG_RELEASE:=8 PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY \ diff --git a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua index 0f8cd034bc..9353f35e5b 100644 --- a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua +++ b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua @@ -109,6 +109,10 @@ o:depends("shunt_dns_mode", "2") o.rmempty = false o.default = "0" +o = s:option(Flag, "apple_optimization", translate("Apple domains optimization"), translate("For Apple domains equipped with Chinese mainland CDN, always responsive to Chinese CDN IP addresses")) +o.rmempty = false +o.default = "1" + o = s:option(Flag, "adblock", translate("Enable adblock")) o.rmempty = false diff --git a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua index c55e0ff096..1048aa495a 100644 --- a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua +++ b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -927,7 +927,6 @@ if is_finded("xray") then o:value(v, translate(v)) end o.rmempty = true - o:depends("xtls", true) o:depends({type = "v2ray", v2ray_protocol = "vless", transport = "tcp", tls = true}) o:depends({type = "v2ray", v2ray_protocol = "vless", transport = "tcp", reality = true}) diff --git a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua index 3b91739dc3..26de9baa40 100644 --- a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua +++ b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua @@ -134,7 +134,7 @@ o.description = translate("Custom DNS Server for mosdns") o = s:option(Flag, "mosdns_ipv6", translate("Disable IPv6 in MOSDNS query mode")) o:depends("pdnsd_enable", "3") o.rmempty = false -o.default = "0" +o.default = "1" if is_finded("chinadns-ng") then o = s:option(Value, "chinadns_forward", translate("Domestic DNS Server")) diff --git a/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po b/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po index 8184bee7d7..453848ab1f 100644 --- a/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po +++ b/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po @@ -459,6 +459,12 @@ msgstr "切换检查超时时间(秒)" msgid "Check Try Count" msgstr "切换检查重试次数" +msgid "Apple domains optimization" +msgstr "Apple 域名解析优化" + +msgid "For Apple domains equipped with Chinese mainland CDN, always responsive to Chinese CDN IP addresses" +msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址" + msgid "Enable adblock" msgstr "启用广告屏蔽" diff --git a/small/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/small/luci-app-ssr-plus/root/etc/init.d/shadowsocksr index b1570aaafd..d62f5ab37c 100755 --- a/small/luci-app-ssr-plus/root/etc/init.d/shadowsocksr +++ b/small/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -246,6 +246,12 @@ start_dns() { fi fi fi + + if [ "$(uci_get_by_type global apple_optimization 1)" == "1" ]; then + echolog "Apple 域名中国大陆 CDN 的 优化规则正在加载。" + cp -f /etc/ssrplus/applechina.conf $TMP_DNSMASQ_PATH/ + echolog "Apple 域名中国大陆 CDN 的 优化规则加载完毕。" + fi } gen_service_file() { #1-server.type 2-cfgname 3-file_path diff --git a/small/luci-app-ssr-plus/root/etc/ssrplus/applechina.conf b/small/luci-app-ssr-plus/root/etc/ssrplus/applechina.conf new file mode 100644 index 0000000000..bc8a7658fb --- /dev/null +++ b/small/luci-app-ssr-plus/root/etc/ssrplus/applechina.conf @@ -0,0 +1,173 @@ +server=/a1.mzstatic.com/114.114.114.114 +server=/a2.mzstatic.com/114.114.114.114 +server=/a3.mzstatic.com/114.114.114.114 +server=/a4.mzstatic.com/114.114.114.114 +server=/a5.mzstatic.com/114.114.114.114 +server=/adcdownload.apple.com.akadns.net/114.114.114.114 +server=/adcdownload.apple.com/114.114.114.114 +server=/amp-api-updates.apps.apple.com/114.114.114.114 +server=/amp-api.media.apple.com/114.114.114.114 +server=/api-p-ap-c.smoot.apple.com/114.114.114.114 +server=/api-p-ap-d.smoot.apple.com/114.114.114.114 +server=/api-p-ap-e.smoot.apple.com/114.114.114.114 +server=/app-site-association.cdn-apple.com/114.114.114.114 +server=/appldnld.apple.com/114.114.114.114 +server=/appldnld.g.aaplimg.com/114.114.114.114 +server=/appleid.cdn-apple.com/114.114.114.114 +server=/apps.apple.com/114.114.114.114 +server=/apps.mzstatic.com/114.114.114.114 +server=/bag-cdn.itunes-apple.com.akadns.net/114.114.114.114 +server=/cdn-cn1.apple-mapkit.com/114.114.114.114 +server=/cdn-cn2.apple-mapkit.com/114.114.114.114 +server=/cdn-cn3.apple-mapkit.com/114.114.114.114 +server=/cdn-cn4.apple-mapkit.com/114.114.114.114 +server=/cdn.apple-mapkit.com/114.114.114.114 +server=/cdn1.apple-mapkit.com/114.114.114.114 +server=/cdn2.apple-mapkit.com/114.114.114.114 +server=/cdn3.apple-mapkit.com/114.114.114.114 +server=/cdn4.apple-mapkit.com/114.114.114.114 +server=/cds-cdn.v.aaplimg.com/114.114.114.114 +server=/cds.apple.com.akadns.net/114.114.114.114 +server=/cds.apple.com/114.114.114.114 +server=/cdsassets.apple.com/114.114.114.114 +server=/cl1-cdn.origin-apple.com.akadns.net/114.114.114.114 +server=/cl1.apple.com/114.114.114.114 +server=/cl2-cn.apple.com/114.114.114.114 +server=/cl2.apple.com/114.114.114.114 +server=/cl3-cdn.origin-apple.com.akadns.net/114.114.114.114 +server=/cl3.apple.com/114.114.114.114 +server=/cl4-cdn.origin-apple.com.akadns.net/114.114.114.114 +server=/cl4-cn.apple.com/114.114.114.114 +server=/cl4.apple.com/114.114.114.114 +server=/cl5-cdn.origin-apple.com.akadns.net/114.114.114.114 +server=/cl5.apple.com/114.114.114.114 +server=/clientflow.apple.com.akadns.net/114.114.114.114 +server=/clientflow.apple.com/114.114.114.114 +server=/cn-smp-paymentservices.apple.com/114.114.114.114 +server=/configuration.apple.com.akadns.net/114.114.114.114 +server=/configuration.apple.com/114.114.114.114 +server=/crl.apple.com/114.114.114.114 +server=/cstat.apple.com/114.114.114.114 +server=/cstat.cdn-apple.com/114.114.114.114 +server=/dd-cdn.origin-apple.com.akadns.net/114.114.114.114 +server=/dejavu.apple.com/114.114.114.114 +server=/devstreaming-cdn.apple.com/114.114.114.114 +server=/download.developer.apple.com/114.114.114.114 +server=/experiments.apple.com/114.114.114.114 +server=/gs-loc-cn.apple.com/114.114.114.114 +server=/gs-loc.apple.com/114.114.114.114 +server=/gsp10-ssl-cn.ls.apple.com/114.114.114.114 +server=/gsp12-cn.ls.apple.com/114.114.114.114 +server=/gsp13-cn.ls.apple.com/114.114.114.114 +server=/gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114 +server=/gsp4-cn.ls.apple.com.edgekey.net/114.114.114.114 +server=/gsp4-cn.ls.apple.com/114.114.114.114 +server=/gsp5-cn.ls.apple.com/114.114.114.114 +server=/gsp85-cn-ssl.ls.apple.com/114.114.114.114 +server=/gspe19-2-cn-ssl.ls-apple.com.akadns.net/114.114.114.114 +server=/gspe19-2-cn-ssl.ls.apple.com/114.114.114.114 +server=/gspe19-cn-ssl.ls.apple.com/114.114.114.114 +server=/gspe19-cn.ls-apple.com.akadns.net/114.114.114.114 +server=/gspe19-cn.ls.apple.com/114.114.114.114 +server=/gspe21-ssl.ls.apple.com/114.114.114.114 +server=/gspe21.ls.apple.com/114.114.114.114 +server=/gspe35-ssl.ls.apple.com/114.114.114.114 +server=/gspe79-cn-ssl.ls.apple.com/114.114.114.114 +server=/guzzoni-apple-com.v.aaplimg.com/114.114.114.114 +server=/guzzoni.apple.com/114.114.114.114 +server=/guzzoni.smoot.apple.com/114.114.114.114 +server=/iadsdk.apple.com/114.114.114.114 +server=/icloud-cdn.icloud.com.akadns.net/114.114.114.114 +server=/icloud.cdn-apple.com/114.114.114.114 +server=/images.apple.com.akadns.net/114.114.114.114 +server=/images.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114 +server=/images.apple.com/114.114.114.114 +server=/init-kt.apple.com/114.114.114.114 +server=/init-p01md-lb.push-apple.com.akadns.net/114.114.114.114 +server=/init-p01md.apple.com/114.114.114.114 +server=/init-p01st-lb.push-apple.com.akadns.net/114.114.114.114 +server=/init-p01st.push.apple.com/114.114.114.114 +server=/init-s01st-lb.push-apple.com.akadns.net/114.114.114.114 +server=/init-s01st.push.apple.com/114.114.114.114 +server=/init.ess.apple.com/114.114.114.114 +server=/iosapps.itunes.g.aaplimg.com/114.114.114.114 +server=/ipcdn.apple.com/114.114.114.114 +server=/iphone-ld.apple.com/114.114.114.114 +server=/iphone-ld.origin-apple.com.akadns.net/114.114.114.114 +server=/is-ssl.mzstatic.com-cn-lb.itunes-apple.com.akadns.net/114.114.114.114 +server=/is1-ssl.mzstatic.com/114.114.114.114 +server=/is1.mzstatic.com/114.114.114.114 +server=/is2-ssl.mzstatic.com/114.114.114.114 +server=/is2.mzstatic.com/114.114.114.114 +server=/is3-ssl.mzstatic.com/114.114.114.114 +server=/is3.mzstatic.com/114.114.114.114 +server=/is4-ssl.mzstatic.com/114.114.114.114 +server=/is4.mzstatic.com/114.114.114.114 +server=/is5-ssl.mzstatic.com/114.114.114.114 +server=/is5.mzstatic.com/114.114.114.114 +server=/itunes-apple.com.akadns.net/114.114.114.114 +server=/itunes.apple.com/114.114.114.114 +server=/itunesconnect.apple.com/114.114.114.114 +server=/mesu-cdn.apple.com.akadns.net/114.114.114.114 +server=/mesu-china.apple.com.akadns.net/114.114.114.114 +server=/mesu.apple.com/114.114.114.114 +server=/ml.cdn-apple.com/114.114.114.114 +server=/music.apple.com/114.114.114.114 +server=/ocsp-lb.apple.com.akadns.net/114.114.114.114 +server=/ocsp.apple.com/114.114.114.114 +server=/ocsp2-lb.apple.com.akadns.net/114.114.114.114 +server=/ocsp2.apple.com/114.114.114.114 +server=/oscdn.apple.com/114.114.114.114 +server=/oscdn.origin-apple.com.akadns.net/114.114.114.114 +server=/osxapps.itunes.g.aaplimg.com/114.114.114.114 +server=/pancake.apple.com/114.114.114.114 +server=/pancake.cdn-apple.com.akadns.net/114.114.114.114 +server=/pba0.apple.com/114.114.114.114 +server=/probe.siri.apple.com/114.114.114.114 +server=/prod-support.apple-support.akadns.net/114.114.114.114 +server=/publicassets.cdn-apple.com/114.114.114.114 +server=/reserve-prime.apple.com/114.114.114.114 +server=/s.mzstatic.com/114.114.114.114 +server=/seed-sequoia.siri.apple.com/114.114.114.114 +server=/seed-swallow.siri.apple.com/114.114.114.114 +server=/seed.siri.apple.com/114.114.114.114 +server=/sequoia.apple.com/114.114.114.114 +server=/sh-pod2-smp-device.apple.com/114.114.114.114 +server=/shazam-insights.cdn-apple.com/114.114.114.114 +server=/smp-device-content.apple.com/114.114.114.114 +server=/static.gc.apple.com/114.114.114.114 +server=/stocks-sparkline-lb.apple.com.akadns.net/114.114.114.114 +server=/stocks-sparkline.apple.com/114.114.114.114 +server=/store.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114 +server=/store.apple.com.edgekey.net/114.114.114.114 +server=/store.apple.com/114.114.114.114 +server=/store.storeimages.apple.com.akadns.net/114.114.114.114 +server=/store.storeimages.cdn-apple.com/114.114.114.114 +server=/support-china.apple-support.akadns.net/114.114.114.114 +server=/support.apple.com/114.114.114.114 +server=/swallow-apple-com.v.aaplimg.com/114.114.114.114 +server=/swallow.apple.com/114.114.114.114 +server=/swcatalog-cdn.apple.com.akadns.net/114.114.114.114 +server=/swcatalog.apple.com/114.114.114.114 +server=/swcdn.apple.com/114.114.114.114 +server=/swcdn.g.aaplimg.com/114.114.114.114 +server=/swdist.apple.com.akadns.net/114.114.114.114 +server=/swdist.apple.com/114.114.114.114 +server=/swscan-cdn.apple.com.akadns.net/114.114.114.114 +server=/swscan.apple.com/114.114.114.114 +server=/sylvan.apple.com/114.114.114.114 +server=/tj-pod1-smp-device.apple.com/114.114.114.114 +server=/updates-http.cdn-apple.com.akadns.net/114.114.114.114 +server=/updates-http.cdn-apple.com/114.114.114.114 +server=/updates.cdn-apple.com/114.114.114.114 +server=/valid.apple.com/114.114.114.114 +server=/valid.origin-apple.com.akadns.net/114.114.114.114 +server=/weather-data.apple.com.akadns.net/114.114.114.114 +server=/weather-data.apple.com/114.114.114.114 +server=/weather-map.apple.com/114.114.114.114 +server=/weather-map2.apple.com/114.114.114.114 +server=/weatherkit.apple.com/114.114.114.114 +server=/www.apple.com.edgekey.net.globalredir.akadns.net/114.114.114.114 +server=/www.apple.com.edgekey.net/114.114.114.114 +server=/www.apple.com/114.114.114.114 +server=/xp.apple.com/114.114.114.114 diff --git a/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua b/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua index a6c2f7c601..34b0950432 100755 --- a/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua +++ b/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua @@ -362,10 +362,9 @@ local function processData(szType, content) result.vmess_id = url.user result.vless_encryption = params.encryption or "none" result.transport = params.type or "tcp" - result.tls = (params.security == "tls") and "1" or "0" + result.tls = (params.security == "tls" or params.security == "xtls") and "1" or "0" result.tls_host = params.sni - result.xtls = (params.security == "xtls") and "1" or nil - result.tls_flow = (result.tls == "1" or result.xtls == "1" or result.reality == "1") and params.flow or nil + result.tls_flow = (params.security == "tls" or params.security == "reality") and params.flow or nil result.fingerprint = params.fp result.reality = (params.security == "reality") and "1" or "0" result.reality_publickey = params.pbk and UrlDecode(params.pbk) or nil diff --git a/small/v2ray-core/Makefile b/small/v2ray-core/Makefile index 3496148823..9f623d18ff 100644 --- a/small/v2ray-core/Makefile +++ b/small/v2ray-core/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=5.20.0 +PKG_VERSION:=5.21.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2fly/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=2de8ac3429705f594ca1a75a2a0fca09820938c94e912370902f87bd72680693 +PKG_HASH:=880a929caff7b72ef9d3b9a3262cec0dff6566c2481989822a6b27fdaaeed975 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index 5a1542bffa..6cd475b336 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -30,13 +30,13 @@ define Download/geosite HASH:=f820556ed3aa02eb7eadba7a3743d7e6df8e9234785d0d82d2d1edce20fe4b3c endef -GEOSITE_IRAN_VER:=202410070035 +GEOSITE_IRAN_VER:=202410140035 GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER) define Download/geosite-ir URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/ URL_FILE:=iran.dat FILE:=$(GEOSITE_IRAN_FILE) - HASH:=be31e14b61dc3e98c9ac518686bc932b45aa04dd2f9491d18456417ba28f3b70 + HASH:=97d1efd7ce4e5318f9f44039f5945a6253d5a42f7f3b432d3da124703d4cda28 endef define Package/v2ray-geodata/template diff --git a/v2rayn/v2rayN/ServiceLib/Common/DownloaderHelper.cs b/v2rayn/v2rayN/ServiceLib/Common/DownloaderHelper.cs index fe468566f0..2aaa2371d6 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/DownloaderHelper.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/DownloaderHelper.cs @@ -36,7 +36,7 @@ namespace ServiceLib.Common } }; - using var downloader = new Downloader.DownloadService(downloadOpt); + await using var downloader = new Downloader.DownloadService(downloadOpt); downloader.DownloadFileCompleted += (sender, value) => { if (value.Error != null) @@ -46,12 +46,12 @@ namespace ServiceLib.Common }; using var cts = new CancellationTokenSource(); - using var stream = await downloader.DownloadFileTaskAsync(address: url, cts.Token).WaitAsync(TimeSpan.FromSeconds(timeout), cts.Token); + await using var stream = await downloader.DownloadFileTaskAsync(address: url, cts.Token).WaitAsync(TimeSpan.FromSeconds(timeout), cts.Token); using StreamReader reader = new(stream); downloadOpt = null; - return reader.ReadToEnd(); + return await reader.ReadToEndAsync(cts.Token); } public async Task DownloadDataAsync4Speed(IWebProxy webProxy, string url, IProgress progress, int timeout) @@ -72,11 +72,11 @@ namespace ServiceLib.Common } }; - DateTime totalDatetime = DateTime.Now; - int totalSecond = 0; + var totalDatetime = DateTime.Now; + var totalSecond = 0; var hasValue = false; double maxSpeed = 0; - using var downloader = new Downloader.DownloadService(downloadOpt); + await using var downloader = new Downloader.DownloadService(downloadOpt); //downloader.DownloadStarted += (sender, value) => //{ // if (progress != null) @@ -86,7 +86,7 @@ namespace ServiceLib.Common //}; downloader.DownloadProgressChanged += (sender, value) => { - TimeSpan ts = (DateTime.Now - totalDatetime); + var ts = (DateTime.Now - totalDatetime); if (progress != null && ts.Seconds > totalSecond) { hasValue = true; @@ -112,7 +112,7 @@ namespace ServiceLib.Common //progress.Report("......"); using var cts = new CancellationTokenSource(); cts.CancelAfter(timeout * 1000); - using var stream = await downloader.DownloadFileTaskAsync(address: url, cts.Token); + await using var stream = await downloader.DownloadFileTaskAsync(address: url, cts.Token); downloadOpt = null; } @@ -145,7 +145,7 @@ namespace ServiceLib.Common var progressPercentage = 0; var hasValue = false; - using var downloader = new Downloader.DownloadService(downloadOpt); + await using var downloader = new Downloader.DownloadService(downloadOpt); downloader.DownloadStarted += (sender, value) => { progress?.Report(0); diff --git a/v2rayn/v2rayN/ServiceLib/Common/FileManager.cs b/v2rayn/v2rayN/ServiceLib/Common/FileManager.cs index 4eb97a517e..70b093146a 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/FileManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/FileManager.cs @@ -23,7 +23,7 @@ namespace ServiceLib.Common { try { - using FileStream fs = File.Create(fileName); + using var fs = File.Create(fileName); using GZipStream input = new(new MemoryStream(content), CompressionMode.Decompress, false); input.CopyTo(fs); } @@ -38,8 +38,8 @@ namespace ServiceLib.Common try { FileInfo fileInfo = new(fileName); - using FileStream originalFileStream = fileInfo.OpenRead(); - using FileStream decompressedFileStream = File.Create(toName != null ? Path.Combine(toPath, toName) : toPath); + using var originalFileStream = fileInfo.OpenRead(); + using var decompressedFileStream = File.Create(toName != null ? Path.Combine(toPath, toName) : toPath); using GZipStream decompressionStream = new(originalFileStream, CompressionMode.Decompress); decompressionStream.CopyTo(decompressedFileStream); } @@ -54,7 +54,7 @@ namespace ServiceLib.Common return NonExclusiveReadAllText(path, Encoding.Default); } - public static string NonExclusiveReadAllText(string path, Encoding encoding) + private static string NonExclusiveReadAllText(string path, Encoding encoding) { try { @@ -73,8 +73,8 @@ namespace ServiceLib.Common { try { - using ZipArchive archive = ZipFile.OpenRead(fileName); - foreach (ZipArchiveEntry entry in archive.Entries) + using var archive = ZipFile.OpenRead(fileName); + foreach (var entry in archive.Entries) { if (entry.Length == 0) { @@ -110,7 +110,7 @@ namespace ServiceLib.Common } try { - using ZipArchive archive = ZipFile.OpenRead(fileName); + using var archive = ZipFile.OpenRead(fileName); return archive.Entries.Select(entry => entry.FullName).ToList(); } catch (Exception ex) @@ -149,13 +149,13 @@ namespace ServiceLib.Common throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}"); // Cache directories before we start copying - DirectoryInfo[] dirs = dir.GetDirectories(); + var dirs = dir.GetDirectories(); // Create the destination directory Directory.CreateDirectory(destinationDir); // Get the files in the source directory and copy to the destination directory - foreach (FileInfo file in dir.GetFiles()) + foreach (var file in dir.GetFiles()) { if (Utils.IsNotEmpty(ignoredName) && file.Name.Contains(ignoredName)) { @@ -165,16 +165,16 @@ namespace ServiceLib.Common { continue; } - string targetFilePath = Path.Combine(destinationDir, file.Name); + var targetFilePath = Path.Combine(destinationDir, file.Name); file.CopyTo(targetFilePath); } // If recursive and copying subdirectories, recursively call this method if (recursive) { - foreach (DirectoryInfo subDir in dirs) + foreach (var subDir in dirs) { - string newDestinationDir = Path.Combine(destinationDir, subDir.Name); + var newDestinationDir = Path.Combine(destinationDir, subDir.Name); CopyDirectory(subDir.FullName, newDestinationDir, true, ignoredName); } } diff --git a/v2rayn/v2rayN/ServiceLib/Common/HttpClientHelper.cs b/v2rayn/v2rayN/ServiceLib/Common/HttpClientHelper.cs index bd671feec1..cabc3f8529 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/HttpClientHelper.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/HttpClientHelper.cs @@ -27,7 +27,7 @@ namespace ServiceLib.Common try { - HttpResponseMessage response = await httpClient.GetAsync(url); + var response = await httpClient.GetAsync(url); return await response.Content.ReadAsStringAsync(); } catch @@ -84,8 +84,8 @@ namespace ServiceLib.Common var total = response.Content.Headers.ContentLength ?? -1L; var canReportProgress = total != -1 && progress != null; - using var stream = await response.Content.ReadAsStreamAsync(token); - using var file = File.Create(fileName); + await using var stream = await response.Content.ReadAsStreamAsync(token); + await using var file = File.Create(fileName); var totalRead = 0L; var buffer = new byte[1024 * 1024]; var progressPercentage = 0; @@ -98,7 +98,7 @@ namespace ServiceLib.Common totalRead += read; if (read == 0) break; - file.Write(buffer, 0, read); + await file.WriteAsync(buffer, 0, read, token); if (canReportProgress) { @@ -133,13 +133,13 @@ namespace ServiceLib.Common //var total = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L; //var canReportProgress = total != -1 && progress != null; - using var stream = await response.Content.ReadAsStreamAsync(token); + await using var stream = await response.Content.ReadAsStreamAsync(token); var totalRead = 0L; var buffer = new byte[1024 * 64]; var isMoreToRead = true; - string progressSpeed = string.Empty; - DateTime totalDatetime = DateTime.Now; - int totalSecond = 0; + var progressSpeed = string.Empty; + var totalDatetime = DateTime.Now; + var totalSecond = 0; do { @@ -168,7 +168,7 @@ namespace ServiceLib.Common totalRead += read; - TimeSpan ts = (DateTime.Now - totalDatetime); + var ts = (DateTime.Now - totalDatetime); if (progress != null && ts.Seconds > totalSecond) { totalSecond = ts.Seconds; diff --git a/v2rayn/v2rayN/ServiceLib/Common/Job.cs b/v2rayn/v2rayN/ServiceLib/Common/Job.cs index 0cd623fbb2..4acf752050 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/Job.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/Job.cs @@ -8,7 +8,7 @@ namespace ServiceLib.Common * http://stackoverflow.com/questions/6266820/working-example-of-createjobobject-setinformationjobobject-pinvoke-in-net */ - public class Job : IDisposable + public sealed class Job : IDisposable { private IntPtr handle = IntPtr.Zero; @@ -73,7 +73,7 @@ namespace ServiceLib.Common GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { if (disposed) return; disposed = true; diff --git a/v2rayn/v2rayN/ServiceLib/Common/JsonUtils.cs b/v2rayn/v2rayN/ServiceLib/Common/JsonUtils.cs index d7650d2c5a..40d0cdfc79 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/JsonUtils.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/JsonUtils.cs @@ -69,7 +69,7 @@ namespace ServiceLib.Common /// public static string Serialize(object? obj, bool indented = true) { - string result = string.Empty; + var result = string.Empty; try { if (obj == null) @@ -112,7 +112,7 @@ namespace ServiceLib.Common } try { - using FileStream file = File.Create(filePath); + using var file = File.Create(filePath); var options = new JsonSerializerOptions { diff --git a/v2rayn/v2rayN/ServiceLib/Common/QRCodeHelper.cs b/v2rayn/v2rayN/ServiceLib/Common/QRCodeHelper.cs index 7e6e0d085d..82d6125ef1 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/QRCodeHelper.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/QRCodeHelper.cs @@ -7,7 +7,7 @@ namespace ServiceLib.Common public static byte[]? GenQRCode(string? url) { using QRCodeGenerator qrGenerator = new(); - using QRCodeData qrCodeData = qrGenerator.CreateQrCode(url ?? string.Empty, QRCodeGenerator.ECCLevel.Q); + using var qrCodeData = qrGenerator.CreateQrCode(url ?? string.Empty, QRCodeGenerator.ECCLevel.Q); using PngByteQRCode qrCode = new(qrCodeData); return qrCode.GetGraphic(20); } diff --git a/v2rayn/v2rayN/ServiceLib/Common/QueryableExtension.cs b/v2rayn/v2rayN/ServiceLib/Common/QueryableExtension.cs index 767676566d..b8e9143323 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/QueryableExtension.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/QueryableExtension.cs @@ -17,7 +17,7 @@ namespace ServiceLib.Common private static IOrderedQueryable _OrderBy(IQueryable query, string propertyName, bool isDesc) { - string methodname = (isDesc) ? "OrderByDescendingInternal" : "OrderByInternal"; + var methodname = (isDesc) ? "OrderByDescendingInternal" : "OrderByInternal"; var memberProp = typeof(T).GetProperty(propertyName); diff --git a/v2rayn/v2rayN/ServiceLib/Common/SemanticVersion.cs b/v2rayn/v2rayN/ServiceLib/Common/SemanticVersion.cs index beea6acc28..fd236c89e5 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/SemanticVersion.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/SemanticVersion.cs @@ -28,14 +28,14 @@ } this.version = version.RemovePrefix('v'); - string[] parts = this.version.Split('.'); + var parts = this.version.Split('.'); if (parts.Length == 2) { this.major = int.Parse(parts[0]); this.minor = int.Parse(parts[1]); this.patch = 0; } - else if (parts.Length == 3 || parts.Length == 4) + else if (parts.Length is 3 or 4) { this.major = int.Parse(parts[0]); this.minor = int.Parse(parts[1]); diff --git a/v2rayn/v2rayN/ServiceLib/Common/SqliteHelper.cs b/v2rayn/v2rayN/ServiceLib/Common/SqliteHelper.cs index 9faa72baeb..ca34319ef1 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/SqliteHelper.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/SqliteHelper.cs @@ -11,7 +11,7 @@ namespace ServiceLib.Common private SQLiteConnection _db; private SQLiteAsyncConnection _dbAsync; private static readonly object objLock = new(); - public readonly string _configDB = "guiNDB.db"; + private readonly string _configDB = "guiNDB.db"; public SQLiteHelper() { diff --git a/v2rayn/v2rayN/ServiceLib/Common/StringEx.cs b/v2rayn/v2rayN/ServiceLib/Common/StringEx.cs index eb9bdafe38..81965adaad 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/StringEx.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/StringEx.cs @@ -25,21 +25,14 @@ namespace ServiceLib.Common return chars.Contains(s[0]); } - public static bool IsWhiteSpace(this string value) + private static bool IsWhiteSpace(this string value) { - foreach (char c in value) - { - if (char.IsWhiteSpace(c)) continue; - - return false; - } - return true; + return value.All(char.IsWhiteSpace); } public static IEnumerable NonWhiteSpaceLines(this TextReader reader) { - string? line; - while ((line = reader.ReadLine()) != null) + while (reader.ReadLine() is { } line) { if (line.IsWhiteSpace()) continue; yield return line; @@ -53,26 +46,12 @@ namespace ServiceLib.Common public static string RemovePrefix(this string value, char prefix) { - if (value.StartsWith(prefix)) - { - return value.Substring(1); - } - else - { - return value; - } + return value.StartsWith(prefix) ? value[1..] : value; } public static string RemovePrefix(this string value, string prefix) { - if (value.StartsWith(prefix)) - { - return value.Substring(prefix.Length); - } - else - { - return value; - } + return value.StartsWith(prefix) ? value[prefix.Length..] : value; } public static string UpperFirstChar(this string value) @@ -82,17 +61,12 @@ namespace ServiceLib.Common return string.Empty; } - return char.ToUpper(value[0]) + value.Substring(1); + return char.ToUpper(value[0]) + value[1..]; } public static string AppendQuotes(this string value) { - if (string.IsNullOrEmpty(value)) - { - return string.Empty; - } - - return $"\"{value}\""; + return string.IsNullOrEmpty(value) ? string.Empty : $"\"{value}\""; } } } \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Common/Utils.cs b/v2rayn/v2rayN/ServiceLib/Common/Utils.cs index d3dc3f6998..fc273dbe6b 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/Utils.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/Utils.cs @@ -2,7 +2,6 @@ using CliWrap.Buffered; using System.Collections.Specialized; using System.Diagnostics; -using System.IO.Compression; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; @@ -11,13 +10,12 @@ using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Security.Principal; using System.Text; -using System.Text.RegularExpressions; namespace ServiceLib.Common { public class Utils { - #region 资源Json操作 + #region 资源操作 /// /// 获取嵌入文本资源 @@ -26,12 +24,12 @@ namespace ServiceLib.Common /// public static string GetEmbedText(string res) { - string result = string.Empty; + var result = string.Empty; try { - Assembly assembly = Assembly.GetExecutingAssembly(); - using Stream? stream = assembly.GetManifestResourceStream(res); + var assembly = Assembly.GetExecutingAssembly(); + using var stream = assembly.GetManifestResourceStream(res); ArgumentNullException.ThrowIfNull(stream); using StreamReader reader = new(stream); result = reader.ReadToEnd(); @@ -51,11 +49,10 @@ namespace ServiceLib.Common { try { - if (!File.Exists(res)) + if (File.Exists(res)) { - return null; + return File.ReadAllText(res); } - return File.ReadAllText(res); } catch (Exception ex) { @@ -64,14 +61,15 @@ namespace ServiceLib.Common return null; } - #endregion 资源Json操作 + #endregion 资源操作 #region 转换函数 /// - /// List转逗号分隔的字符串 + /// 转逗号分隔的字符串 /// /// + /// /// public static string List2String(List? lst, bool wrap = false) { @@ -93,35 +91,40 @@ namespace ServiceLib.Common catch (Exception ex) { Logging.SaveLog(ex.Message, ex); - return string.Empty; } + return string.Empty; } /// - /// 逗号分隔的字符串,转List + /// 逗号分隔的字符串 /// /// /// - public static List String2List(string str) + public static List? String2List(string? str) { try { + if (str == null) + { + return null; + } + str = str.Replace(Environment.NewLine, ""); return new List(str.Split(',', StringSplitOptions.RemoveEmptyEntries)); } catch (Exception ex) { Logging.SaveLog(ex.Message, ex); - return []; } + return null; } /// - /// 逗号分隔的字符串,先排序后转List + /// 逗号分隔的字符串,先排序后转List /// /// /// - public static List String2ListSorted(string str) + public static List? String2ListSorted(string str) { try { @@ -133,8 +136,8 @@ namespace ServiceLib.Common catch (Exception ex) { Logging.SaveLog(ex.Message, ex); - return []; } + return null; } /// @@ -146,14 +149,14 @@ namespace ServiceLib.Common { try { - byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); + var plainTextBytes = Encoding.UTF8.GetBytes(plainText); return Convert.ToBase64String(plainTextBytes); } catch (Exception ex) { Logging.SaveLog("Base64Encode", ex); - return string.Empty; } + return string.Empty; } /// @@ -179,30 +182,24 @@ namespace ServiceLib.Common plainText = plainText.PadRight(plainText.Length + 4 - plainText.Length % 4, '='); } - byte[] data = Convert.FromBase64String(plainText); + var data = Convert.FromBase64String(plainText); return Encoding.UTF8.GetString(data); } catch (Exception ex) { Logging.SaveLog("Base64Decode", ex); - return string.Empty; } + return string.Empty; } - /// - /// 转Int - /// - /// - /// public static int ToInt(object? obj) { try { return Convert.ToInt32(obj ?? string.Empty); } - catch //(Exception ex) + catch { - //SaveLog(ex.Message, ex); return 0; } } @@ -213,50 +210,47 @@ namespace ServiceLib.Common { return Convert.ToBoolean(obj); } - catch //(Exception ex) + catch { - //SaveLog(ex.Message, ex); return false; } } - public static string ToString(object obj) + public static string ToString(object? obj) { try { return obj?.ToString() ?? string.Empty; } - catch// (Exception ex) + catch { - //SaveLog(ex.Message, ex); return string.Empty; } } /// - /// byte 转成 有两位小数点的 方便阅读的数据 - /// 比如 2.50 MB + /// byte 转成 有两位小数点的 方便阅读的数据 比如 2.50 MB /// /// bytes /// 转换之后的数据 /// 单位 - public static void ToHumanReadable(long amount, out double result, out string unit) + private static void ToHumanReadable(long amount, out double result, out string unit) { - uint factor = 1024u; + var factor = 1024u; //long KBs = amount / factor; - long KBs = amount; + var KBs = amount; if (KBs > 0) { // multi KB - long MBs = KBs / factor; + var MBs = KBs / factor; if (MBs > 0) { // multi MB - long GBs = MBs / factor; + var GBs = MBs / factor; if (GBs > 0) { // multi GB - long TBs = GBs / factor; + var TBs = GBs / factor; if (TBs > 0) { result = TBs + ((GBs % factor) / (factor + 0.0)); @@ -284,20 +278,18 @@ namespace ServiceLib.Common public static string HumanFy(long amount) { - ToHumanReadable(amount, out double result, out string unit); - return $"{string.Format("{0:f1}", result)} {unit}"; + ToHumanReadable(amount, out var result, out var unit); + return $"{result:f1} {unit}"; } public static string UrlEncode(string url) { return Uri.EscapeDataString(url); - //return HttpUtility.UrlEncode(url); } public static string UrlDecode(string url) { return Uri.UnescapeDataString(url); - //return HttpUtility.UrlDecode(url); } public static NameValueCollection ParseQueryString(string query) @@ -308,10 +300,10 @@ namespace ServiceLib.Common return result; } - var parts = query[1..].Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries); + var parts = query[1..].Split('&', StringSplitOptions.RemoveEmptyEntries); foreach (var part in parts) { - var keyValue = part.Split(['=']); + var keyValue = part.Split('='); if (keyValue.Length != 2) { continue; @@ -328,12 +320,12 @@ namespace ServiceLib.Common return result; } - public static string GetMD5(string str) + public static string GetMd5(string str) { - byte[] byteOld = Encoding.UTF8.GetBytes(str); - byte[] byteNew = MD5.HashData(byteOld); + var byteOld = Encoding.UTF8.GetBytes(str); + var byteNew = MD5.HashData(byteOld); StringBuilder sb = new(32); - foreach (byte b in byteNew) + foreach (var b in byteNew) { sb.Append(b.ToString("x2")); } @@ -373,12 +365,12 @@ namespace ServiceLib.Common { if (plainText.IsNullOrEmpty()) return false; var buffer = new Span(new byte[plainText.Length]); - return Convert.TryFromBase64String(plainText, buffer, out int _); + return Convert.TryFromBase64String(plainText, buffer, out var _); } public static string Convert2Comma(string text) { - if (Utils.IsNullOrEmpty(text)) + if (IsNullOrEmpty(text)) { return text; } @@ -396,16 +388,7 @@ namespace ServiceLib.Common /// public static bool IsNumeric(string oText) { - try - { - int var1 = ToInt(oText); - return true; - } - catch (Exception ex) - { - Logging.SaveLog(ex.Message, ex); - return false; - } + return oText.All(char.IsNumber); } public static bool IsNullOrEmpty(string? text) @@ -414,11 +397,7 @@ namespace ServiceLib.Common { return true; } - if (text == "null") - { - return true; - } - return false; + return text == "null"; } public static bool IsNotEmpty(string? text) @@ -426,41 +405,6 @@ namespace ServiceLib.Common return !string.IsNullOrEmpty(text); } - /// - /// 验证IP地址是否合法 - /// - /// - public static bool IsIP(string ip) - { - //如果为空 - if (IsNullOrEmpty(ip)) - { - return false; - } - - //清除要验证字符串中的空格 - //ip = ip.TrimEx(); - //可能是CIDR - if (ip.IndexOf(@"/") > 0) - { - string[] cidr = ip.Split('/'); - if (cidr.Length == 2) - { - if (!IsNumeric(cidr[0])) - { - return false; - } - ip = cidr[0]; - } - } - - //模式字符串 - string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"; - - //验证 - return IsMatch(ip, pattern); - } - /// /// 验证Domain地址是否合法 /// @@ -476,19 +420,9 @@ namespace ServiceLib.Common return Uri.CheckHostName(domain) == UriHostNameType.Dns; } - /// - /// 验证输入字符串是否与模式字符串匹配,匹配返回true - /// - /// 输入字符串 - /// 模式字符串 - public static bool IsMatch(string input, string pattern) - { - return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase); - } - public static bool IsIpv6(string ip) { - if (IPAddress.TryParse(ip, out IPAddress? address)) + if (IPAddress.TryParse(ip, out var address)) { return address.AddressFamily switch { @@ -504,43 +438,20 @@ namespace ServiceLib.Common #region 测速 - public static void SetSecurityProtocol(bool enableSecurityProtocolTls13) + private static bool PortInUse(int port) { - if (enableSecurityProtocolTls13) - { - ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13; - } - else - { - ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; - } - ServicePointManager.DefaultConnectionLimit = 256; - } - - public static bool PortInUse(int port) - { - bool inUse = false; try { - IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); - IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); - - var lstIpEndPoints = new List(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()); - - foreach (IPEndPoint endPoint in ipEndPoints) - { - if (endPoint.Port == port) - { - inUse = true; - break; - } - } + var ipProperties = IPGlobalProperties.GetIPGlobalProperties(); + var ipEndPoints = ipProperties.GetActiveTcpListeners(); + //var lstIpEndPoints = new List(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()); + return ipEndPoints.Any(endPoint => endPoint.Port == port); } catch (Exception ex) { Logging.SaveLog(ex.Message, ex); } - return inUse; + return false; } public static int GetFreePort(int defaultPort = 9090) @@ -554,7 +465,7 @@ namespace ServiceLib.Common TcpListener l = new(IPAddress.Loopback, 0); l.Start(); - int port = ((IPEndPoint)l.LocalEndpoint).Port; + var port = ((IPEndPoint)l.LocalEndpoint).Port; l.Stop(); return port; } @@ -578,23 +489,18 @@ namespace ServiceLib.Common { if (blFull) { - return string.Format("{0} - V{1} - {2}", - Global.AppName, - GetVersionInfo(), - File.GetLastWriteTime(GetExePath()).ToString("yyyy/MM/dd")); + return $"{Global.AppName} - V{GetVersionInfo()} - {File.GetLastWriteTime(GetExePath()):yyyy/MM/dd}"; } else { - return string.Format("{0}/{1}", - Global.AppName, - GetVersionInfo()); + return $"{Global.AppName}/{GetVersionInfo()}"; } } catch (Exception ex) { Logging.SaveLog(ex.Message, ex); - return Global.AppName; } + return Global.AppName; } public static string GetVersionInfo() @@ -614,7 +520,7 @@ namespace ServiceLib.Common /// 取得GUID /// /// - public static string GetGUID(bool full = true) + public static string GetGuid(bool full = true) { try { @@ -634,14 +540,6 @@ namespace ServiceLib.Common return string.Empty; } - public static string GetDownloadFileName(string url) - { - var fileName = Path.GetFileName(url); - fileName += "_temp"; - - return fileName; - } - public static bool IsGuidByParse(string strSrc) { return Guid.TryParse(strSrc, out _); @@ -667,12 +565,12 @@ namespace ServiceLib.Common public static Dictionary GetSystemHosts() { var systemHosts = new Dictionary(); - var hostfile = @"C:\Windows\System32\drivers\etc\hosts"; + var hostFile = @"C:\Windows\System32\drivers\etc\hosts"; try { - if (File.Exists(hostfile)) + if (File.Exists(hostFile)) { - var hosts = File.ReadAllText(hostfile).Replace("\r", ""); + var hosts = File.ReadAllText(hostFile).Replace("\r", ""); var hostsList = hosts.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var host in hostsList) @@ -693,10 +591,10 @@ namespace ServiceLib.Common public static async Task GetCliWrapOutput(string filePath, string? arg) { - return await GetCliWrapOutput(filePath, arg != null ? [arg] : null); + return await GetCliWrapOutput(filePath, arg != null ? new List() { arg } : null); } - public static async Task GetCliWrapOutput(string filePath, IEnumerable? args) + private static async Task GetCliWrapOutput(string filePath, IEnumerable? args) { try { @@ -736,7 +634,7 @@ namespace ServiceLib.Common /// public static string GetPath(string fileName) { - string startupPath = StartupPath(); + var startupPath = StartupPath(); if (IsNullOrEmpty(fileName)) { return startupPath; @@ -760,113 +658,104 @@ namespace ServiceLib.Common public static string GetTempPath(string filename = "") { - string _tempPath = Path.Combine(StartupPath(), "guiTemps"); - if (!Directory.Exists(_tempPath)) + var tempPath = Path.Combine(StartupPath(), "guiTemps"); + if (!Directory.Exists(tempPath)) { - Directory.CreateDirectory(_tempPath); + Directory.CreateDirectory(tempPath); } - if (Utils.IsNullOrEmpty(filename)) + if (IsNullOrEmpty(filename)) { - return _tempPath; + return tempPath; } else { - return Path.Combine(_tempPath, filename); + return Path.Combine(tempPath, filename); } } - public static string UnGzip(byte[] buf) - { - using MemoryStream sb = new(); - using GZipStream input = new(new MemoryStream(buf), CompressionMode.Decompress, false); - input.CopyTo(sb); - sb.Position = 0; - return new StreamReader(sb, Encoding.UTF8).ReadToEnd(); - } - public static string GetBackupPath(string filename) { - string _tempPath = Path.Combine(StartupPath(), "guiBackups"); - if (!Directory.Exists(_tempPath)) + var tempPath = Path.Combine(StartupPath(), "guiBackups"); + if (!Directory.Exists(tempPath)) { - Directory.CreateDirectory(_tempPath); + Directory.CreateDirectory(tempPath); } - return Path.Combine(_tempPath, filename); + return Path.Combine(tempPath, filename); } public static string GetConfigPath(string filename = "") { - string _tempPath = Path.Combine(StartupPath(), "guiConfigs"); - if (!Directory.Exists(_tempPath)) + var tempPath = Path.Combine(StartupPath(), "guiConfigs"); + if (!Directory.Exists(tempPath)) { - Directory.CreateDirectory(_tempPath); + Directory.CreateDirectory(tempPath); } if (Utils.IsNullOrEmpty(filename)) { - return _tempPath; + return tempPath; } else { - return Path.Combine(_tempPath, filename); + return Path.Combine(tempPath, filename); } } public static string GetBinPath(string filename, string? coreType = null) { - string _tempPath = Path.Combine(StartupPath(), "bin"); - if (!Directory.Exists(_tempPath)) + var tempPath = Path.Combine(StartupPath(), "bin"); + if (!Directory.Exists(tempPath)) { - Directory.CreateDirectory(_tempPath); + Directory.CreateDirectory(tempPath); } if (coreType != null) { - _tempPath = Path.Combine(_tempPath, coreType.ToString()); - if (!Directory.Exists(_tempPath)) + tempPath = Path.Combine(tempPath, coreType.ToString()); + if (!Directory.Exists(tempPath)) { - Directory.CreateDirectory(_tempPath); + Directory.CreateDirectory(tempPath); } } - if (Utils.IsNullOrEmpty(filename)) + if (IsNullOrEmpty(filename)) { - return _tempPath; + return tempPath; } else { - return Path.Combine(_tempPath, filename); + return Path.Combine(tempPath, filename); } } public static string GetLogPath(string filename = "") { - string _tempPath = Path.Combine(StartupPath(), "guiLogs"); - if (!Directory.Exists(_tempPath)) + var tempPath = Path.Combine(StartupPath(), "guiLogs"); + if (!Directory.Exists(tempPath)) { - Directory.CreateDirectory(_tempPath); + Directory.CreateDirectory(tempPath); } if (Utils.IsNullOrEmpty(filename)) { - return _tempPath; + return tempPath; } else { - return Path.Combine(_tempPath, filename); + return Path.Combine(tempPath, filename); } } public static string GetFontsPath(string filename = "") { - string _tempPath = Path.Combine(StartupPath(), "guiFonts"); - if (!Directory.Exists(_tempPath)) + var tempPath = Path.Combine(StartupPath(), "guiFonts"); + if (!Directory.Exists(tempPath)) { - Directory.CreateDirectory(_tempPath); + Directory.CreateDirectory(tempPath); } if (Utils.IsNullOrEmpty(filename)) { - return _tempPath; + return tempPath; } else { - return Path.Combine(_tempPath, filename); + return Path.Combine(tempPath, filename); } } @@ -882,14 +771,7 @@ namespace ServiceLib.Common public static string GetExeName(string name) { - if (IsWindows()) - { - return $"{name}.exe"; - } - else - { - return name; - } + return IsWindows() ? $"{name}.exe" : name; } public static bool IsAdministrator() @@ -901,7 +783,7 @@ namespace ServiceLib.Common else { var id = GetLinuxUserId().Result ?? "1000"; - if (int.TryParse(id, out int userId)) + if (int.TryParse(id, out var userId)) { return userId == 0; } @@ -914,7 +796,8 @@ namespace ServiceLib.Common private static async Task GetLinuxUserId() { - return await GetCliWrapOutput("/bin/bash", ["-c", "id -u"]); + var arg = new List() { "-c", "id -u" }; + return await GetCliWrapOutput("/bin/bash", arg); } #endregion Platform diff --git a/v2rayn/v2rayN/ServiceLib/Common/YamlUtils.cs b/v2rayn/v2rayN/ServiceLib/Common/YamlUtils.cs index f87fd63c68..94d572b56a 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/YamlUtils.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/YamlUtils.cs @@ -21,7 +21,7 @@ namespace ServiceLib.Common .Build(); try { - T obj = deserializer.Deserialize(str); + var obj = deserializer.Deserialize(str); return obj; } catch (Exception ex) @@ -36,9 +36,9 @@ namespace ServiceLib.Common /// /// /// - public static string ToYaml(Object? obj) + public static string ToYaml(object? obj) { - string result = string.Empty; + var result = string.Empty; if (obj == null) { return result; diff --git a/v2rayn/v2rayN/ServiceLib/Global.cs b/v2rayn/v2rayN/ServiceLib/Global.cs index d39955dd5c..2e269ae6b5 100644 --- a/v2rayn/v2rayN/ServiceLib/Global.cs +++ b/v2rayn/v2rayN/ServiceLib/Global.cs @@ -114,6 +114,11 @@ @"http://www.msftconnecttest.com/connecttest.txt", }; + public static readonly List GeoFilesSources = new() { + GeoUrl, + @"https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/{0}.dat", + }; + public static readonly Dictionary UserAgentTexts = new() { {"chrome","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" }, diff --git a/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs b/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs index bf3cb420ff..5f6ab3af5d 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs @@ -2,11 +2,14 @@ { public sealed class AppHandler { + #region Property + private static readonly Lazy _instance = new(() => new()); private Config _config; private int? _statePort; private int? _statePort2; private Job? _processJob; + private bool? _isAdministrator; public static AppHandler Instance => _instance.Value; public Config Config => _config; @@ -28,6 +31,17 @@ } } + public bool IsAdministrator + { + get + { + _isAdministrator ??= Utils.IsAdministrator(); + return _isAdministrator.Value; + } + } + + #endregion Property + #region Init public AppHandler() diff --git a/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs b/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs index 16dbfc5840..a574cbeb20 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/ConfigHandler.cs @@ -1,6 +1,5 @@ using System.Data; using System.Text.RegularExpressions; -using System.Web; namespace ServiceLib.Handler { @@ -494,7 +493,7 @@ namespace ServiceLib.Handler return -1; } var ext = Path.GetExtension(fileName); - string newFileName = $"{Utils.GetGUID()}{ext}"; + string newFileName = $"{Utils.GetGuid()}{ext}"; //newFileName = Path.Combine(Utile.GetTempPath(), newFileName); try @@ -934,7 +933,7 @@ namespace ServiceLib.Handler var maxSort = -1; if (Utils.IsNullOrEmpty(profileItem.indexId)) { - profileItem.indexId = Utils.GetGUID(false); + profileItem.indexId = Utils.GetGuid(false); maxSort = ProfileExHandler.Instance.GetMaxSort(); } if (!toFile && maxSort < 0) @@ -1002,7 +1001,7 @@ namespace ServiceLib.Handler public static int AddCustomServer4Multiple(Config config, List selecteds, ECoreType coreType, out string indexId) { - indexId = Utils.GetMD5(Global.CoreMultipleLoadConfigFileName); + indexId = Utils.GetMd5(Global.CoreMultipleLoadConfigFileName); string configPath = Utils.GetConfigPath(Global.CoreMultipleLoadConfigFileName); if (CoreConfigHandler.GenerateClientMultipleLoadConfig(config, configPath, selecteds, coreType, out string msg) != 0) { @@ -1341,7 +1340,7 @@ namespace ServiceLib.Handler try { var uri = new Uri(url); - var queryVars = HttpUtility.ParseQueryString(uri.Query); + var queryVars = Utils.ParseQueryString(uri.Query); subItem.remarks = queryVars["remarks"] ?? "import_sub"; } catch (UriFormatException) @@ -1378,7 +1377,7 @@ namespace ServiceLib.Handler if (Utils.IsNullOrEmpty(item.id)) { - item.id = Utils.GetGUID(false); + item.id = Utils.GetGuid(false); if (item.sort <= 0) { @@ -1461,7 +1460,7 @@ namespace ServiceLib.Handler { if (Utils.IsNullOrEmpty(item.id)) { - item.id = Utils.GetGUID(false); + item.id = Utils.GetGuid(false); } if (SQLiteHelper.Instance.Replace(item) > 0) @@ -1495,14 +1494,14 @@ namespace ServiceLib.Handler foreach (var item in lstRules) { - item.id = Utils.GetGUID(false); + item.id = Utils.GetGuid(false); } routingItem.ruleNum = lstRules.Count; routingItem.ruleSet = JsonUtils.Serialize(lstRules, false); if (Utils.IsNullOrEmpty(routingItem.id)) { - routingItem.id = Utils.GetGUID(false); + routingItem.id = Utils.GetGuid(false); } if (SQLiteHelper.Instance.Replace(routingItem) > 0) @@ -1711,7 +1710,7 @@ namespace ServiceLib.Handler { if (Utils.IsNullOrEmpty(item.id)) { - item.id = Utils.GetGUID(false); + item.id = Utils.GetGuid(false); } if (SQLiteHelper.Instance.Replace(item) > 0) diff --git a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/BaseFmt.cs b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/BaseFmt.cs index 3372cfc542..fc1bcda61f 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/BaseFmt.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/BaseFmt.cs @@ -197,7 +197,7 @@ namespace ServiceLib.Handler.Fmt protected static string WriteAllText(string strData, string ext = "json") { - var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.{ext}"); + var fileName = Utils.GetTempPath($"{Utils.GetGuid(false)}.{ext}"); File.WriteAllText(fileName, strData); return fileName; } diff --git a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/VmessFmt.cs b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/VmessFmt.cs index f172cd82a7..311462facc 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/VmessFmt.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/VmessFmt.cs @@ -70,12 +70,12 @@ item.network = Global.DefaultNetwork; item.headerType = Global.None; - item.configVersion = Utils.ToInt(vmessQRCode.v); + item.configVersion = vmessQRCode.v; item.remarks = Utils.ToString(vmessQRCode.ps); item.address = Utils.ToString(vmessQRCode.add); - item.port = Utils.ToInt(vmessQRCode.port); + item.port = vmessQRCode.port; item.id = Utils.ToString(vmessQRCode.id); - item.alterId = Utils.ToInt(vmessQRCode.aid); + item.alterId = vmessQRCode.aid; item.security = Utils.ToString(vmessQRCode.scy); item.security = Utils.IsNotEmpty(vmessQRCode.scy) ? vmessQRCode.scy : Global.DefaultSecurity; diff --git a/v2rayn/v2rayN/ServiceLib/Models/ConfigItems.cs b/v2rayn/v2rayN/ServiceLib/Models/ConfigItems.cs index bee32971e6..e4bbe112bd 100644 --- a/v2rayn/v2rayN/ServiceLib/Models/ConfigItems.cs +++ b/v2rayn/v2rayN/ServiceLib/Models/ConfigItems.cs @@ -140,6 +140,7 @@ { public string defIEProxyExceptions { get; set; } public string subConvertUrl { get; set; } = string.Empty; + public string? geoSourceUrl { get; set; } } [Serializable] diff --git a/v2rayn/v2rayN/ServiceLib/Models/ProfileItem.cs b/v2rayn/v2rayN/ServiceLib/Models/ProfileItem.cs index d36a90010e..954f491bc6 100644 --- a/v2rayn/v2rayN/ServiceLib/Models/ProfileItem.cs +++ b/v2rayn/v2rayN/ServiceLib/Models/ProfileItem.cs @@ -58,7 +58,7 @@ namespace ServiceLib.Models return summary; } - public List GetAlpn() + public List? GetAlpn() { if (Utils.IsNullOrEmpty(alpn)) { diff --git a/v2rayn/v2rayN/ServiceLib/Models/SingboxConfig.cs b/v2rayn/v2rayN/ServiceLib/Models/SingboxConfig.cs index 259bb39590..5eba73e133 100644 --- a/v2rayn/v2rayN/ServiceLib/Models/SingboxConfig.cs +++ b/v2rayn/v2rayN/ServiceLib/Models/SingboxConfig.cs @@ -120,10 +120,10 @@ public string? version { get; set; } public string? network { get; set; } public string? packet_encoding { get; set; } - public string[]? local_address { get; set; } + public List? local_address { get; set; } public string? private_key { get; set; } public string? peer_public_key { get; set; } - public int[]? reserved { get; set; } + public List? reserved { get; set; } public int? mtu { get; set; } public string? plugin { get; set; } public string? plugin_opts { get; set; } @@ -138,11 +138,11 @@ public class Tls4Sbox { public bool enabled { get; set; } - public string server_name { get; set; } + public string? server_name { get; set; } public bool? insecure { get; set; } - public List alpn { get; set; } - public Utls4Sbox utls { get; set; } - public Reality4Sbox reality { get; set; } + public List? alpn { get; set; } + public Utls4Sbox? utls { get; set; } + public Reality4Sbox? reality { get; set; } } public class Multiplex4Sbox diff --git a/v2rayn/v2rayN/ServiceLib/Models/V2rayConfig.cs b/v2rayn/v2rayN/ServiceLib/Models/V2rayConfig.cs index 6335db48cb..2849771951 100644 --- a/v2rayn/v2rayN/ServiceLib/Models/V2rayConfig.cs +++ b/v2rayn/v2rayN/ServiceLib/Models/V2rayConfig.cs @@ -647,12 +647,12 @@ namespace ServiceLib.Models /// /// /// - public string path { get; set; } + public string? path { get; set; } /// /// /// - public List host { get; set; } + public List? host { get; set; } } public class QuicSettings4Ray diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs index 9a0f92e69c..598eb57459 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs @@ -3004,6 +3004,15 @@ namespace ServiceLib.Resx { } } + /// + /// 查找类似 Geo files source (optional) 的本地化字符串。 + /// + public static string TbSettingsGeoFilesSource { + get { + return ResourceManager.GetString("TbSettingsGeoFilesSource", resourceCulture); + } + } + /// /// 查找类似 HTTP Port 的本地化字符串。 /// diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx index 8e4c65fb08..725481df30 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx @@ -1322,9 +1322,12 @@ Host filter - Active + Active Save Interface Layout + + Geo files source (optional) + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx index f1557ed960..e235565026 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx @@ -1324,4 +1324,7 @@ 保存界面布局 + + Geo文件来源(可选) + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx index 870dca42c6..b85c239d6a 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx @@ -1204,4 +1204,7 @@ 儲存介面佈局 + + Geo文件來源(可選) + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Sample/dns_singbox_normal b/v2rayn/v2rayN/ServiceLib/Sample/dns_singbox_normal index c0619ebf0c..7003f91f1b 100644 --- a/v2rayn/v2rayN/ServiceLib/Sample/dns_singbox_normal +++ b/v2rayn/v2rayN/ServiceLib/Sample/dns_singbox_normal @@ -3,13 +3,13 @@ { "tag": "remote", "address": "8.8.8.8", - "strategy": "ipv4_only", + "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "local", "address": "223.5.5.5", - "strategy": "ipv4_only", + "strategy": "prefer_ipv4", "detour": "direct" }, { diff --git a/v2rayn/v2rayN/ServiceLib/Sample/tun_singbox_dns b/v2rayn/v2rayN/ServiceLib/Sample/tun_singbox_dns index c0619ebf0c..7003f91f1b 100644 --- a/v2rayn/v2rayN/ServiceLib/Sample/tun_singbox_dns +++ b/v2rayn/v2rayN/ServiceLib/Sample/tun_singbox_dns @@ -3,13 +3,13 @@ { "tag": "remote", "address": "8.8.8.8", - "strategy": "ipv4_only", + "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "local", "address": "223.5.5.5", - "strategy": "ipv4_only", + "strategy": "prefer_ipv4", "detour": "direct" }, { diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs index 26839b1150..3e8dc82af1 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs @@ -678,8 +678,8 @@ namespace ServiceLib.Services.CoreConfig { outbound.private_key = node.id; outbound.peer_public_key = node.publicKey; - outbound.reserved = Utils.String2List(node.path).Select(int.Parse).ToArray(); - outbound.local_address = [.. Utils.String2List(node.requestHost)]; + outbound.reserved = Utils.String2List(node.path)?.Select(int.Parse).ToList(); + outbound.local_address = Utils.String2List(node.requestHost); outbound.mtu = Utils.ToInt(node.shortId.IsNullOrEmpty() ? Global.TunMtus.FirstOrDefault() : node.shortId); break; } @@ -732,7 +732,7 @@ namespace ServiceLib.Services.CoreConfig } else if (Utils.IsNotEmpty(node.requestHost)) { - server_name = Utils.String2List(node.requestHost)[0]; + server_name = Utils.String2List(node.requestHost)?.First(); } var tls = new Tls4Sbox() { diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs index 1b774111fa..97d951be84 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs @@ -829,7 +829,7 @@ namespace ServiceLib.Services.CoreConfig } else if (Utils.IsNotEmpty(host)) { - tlsSettings.serverName = Utils.String2List(host)[0]; + tlsSettings.serverName = Utils.String2List(host)?.First(); } streamSettings.tlsSettings = tlsSettings; } diff --git a/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs b/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs index 97d1080ec1..887ef88a03 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs @@ -30,7 +30,7 @@ namespace ServiceLib.Services { try { - Utils.SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); + SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); var progress = new Progress(); progress.ProgressChanged += (sender, value) => @@ -62,7 +62,7 @@ namespace ServiceLib.Services { try { - Utils.SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); + SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); UpdateCompleted?.Invoke(this, new ResultEventArgs(false, $"{ResUI.Downloading} {url}")); var progress = new Progress(); @@ -92,7 +92,7 @@ namespace ServiceLib.Services public async Task UrlRedirectAsync(string url, bool blProxy) { - Utils.SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); + SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); var webRequestHandler = new SocketsHttpHandler { AllowAutoRedirect = false, @@ -181,7 +181,7 @@ namespace ServiceLib.Services { try { - Utils.SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); + SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); var webProxy = GetWebProxy(blProxy); var client = new HttpClient(new SocketsHttpHandler() { @@ -226,7 +226,7 @@ namespace ServiceLib.Services { try { - Utils.SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); + SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13); var webProxy = GetWebProxy(blProxy); @@ -337,5 +337,18 @@ namespace ServiceLib.Services return false; } } + + private static void SetSecurityProtocol(bool enableSecurityProtocolTls13) + { + if (enableSecurityProtocolTls13) + { + ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13; + } + else + { + ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; + } + ServicePointManager.DefaultConnectionLimit = 256; + } } } \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs b/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs index c5034b6bb0..d821d1db9f 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/UpdateService.cs @@ -56,7 +56,7 @@ namespace ServiceLib.Services _updateFunc?.Invoke(false, args.Msg); url = args.Url; - fileName = Utils.GetTempPath(Utils.GetGUID()); + fileName = Utils.GetTempPath(Utils.GetGuid()); await downloadHandle.DownloadFileAsync(url, fileName, true, _timeout); } else @@ -108,7 +108,7 @@ namespace ServiceLib.Services url = args.Url; var ext = Path.GetExtension(url); - fileName = Utils.GetTempPath(Utils.GetGUID() + ext); + fileName = Utils.GetTempPath(Utils.GetGuid() + ext); await downloadHandle.DownloadFileAsync(url, fileName, true, _timeout); } else @@ -255,8 +255,8 @@ namespace ServiceLib.Services public async Task UpdateGeoFileAll(Config config, Action updateFunc) { - await UpdateGeoFile("geosite", _config, updateFunc); - await UpdateGeoFile("geoip", _config, updateFunc); + await UpdateGeoFile("geosite", config, updateFunc); + await UpdateGeoFile("geoip", config, updateFunc); _updateFunc?.Invoke(true, string.Format(ResUI.MsgDownloadGeoFileSuccessfully, "geo")); } @@ -450,8 +450,12 @@ namespace ServiceLib.Services { _config = config; _updateFunc = updateFunc; + + var geoUrl = string.IsNullOrEmpty(config?.constItem.geoSourceUrl) + ? Global.GeoUrl + : config.constItem.geoSourceUrl; var url = string.Format(Global.GeoUrl, geoName); - var fileName = Utils.GetTempPath(Utils.GetGUID()); + var fileName = Utils.GetTempPath(Utils.GetGuid()); DownloadService downloadHandle = new(); downloadHandle.UpdateCompleted += (sender2, args) => diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs index 09569c40f9..3b96c3da0a 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs @@ -85,7 +85,7 @@ namespace ServiceLib.ViewModels private async Task RemoteRestore() { DisplayOperationMsg(); - var fileName = Utils.GetTempPath(Utils.GetGUID()); + var fileName = Utils.GetTempPath(Utils.GetGuid()); var result = await WebDavHandler.Instance.GetRawFile(fileName); if (result) { diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs index 8ccb903325..a691647ea0 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs @@ -414,7 +414,7 @@ namespace ServiceLib.ViewModels var ret = await _updateView?.Invoke(EViewAction.OptionSettingWindow, null); if (ret == true) { - Locator.Current.GetService()?.InboundDisplayStaus(); + Locator.Current.GetService()?.InboundDisplayStatus(); Reload(); } } diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs index 93d611824d..ef6f67359c 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/OptionSettingViewModel.cs @@ -65,6 +65,7 @@ namespace ServiceLib.ViewModels [Reactive] public bool EnableHWA { get; set; } [Reactive] public string SubConvertUrl { get; set; } [Reactive] public int MainGirdOrientation { get; set; } + [Reactive] public string GeoFileSourceUrl { get; set; } #endregion UI @@ -164,6 +165,7 @@ namespace ServiceLib.ViewModels EnableHWA = _config.guiItem.enableHWA; SubConvertUrl = _config.constItem.subConvertUrl; MainGirdOrientation = (int)_config.uiItem.mainGirdOrientation; + GeoFileSourceUrl = _config.constItem.geoSourceUrl; #endregion UI @@ -316,6 +318,7 @@ namespace ServiceLib.ViewModels _config.guiItem.enableHWA = EnableHWA; _config.constItem.subConvertUrl = SubConvertUrl; _config.uiItem.mainGirdOrientation = (EGirdOrientation)MainGirdOrientation; + _config.constItem.geoSourceUrl = GeoFileSourceUrl; //systemProxy _config.systemProxyItem.systemProxyExceptions = systemProxyExceptions; diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs index 068a96b8e4..1a2419dfea 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleDetailsViewModel.cs @@ -34,7 +34,7 @@ namespace ServiceLib.ViewModels if (rulesItem.id.IsNullOrEmpty()) { - rulesItem.id = Utils.GetGUID(false); + rulesItem.id = Utils.GetGuid(false); rulesItem.outboundTag = Global.ProxyTag; rulesItem.enabled = true; SelectedSource = rulesItem; diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs index 215c78eefc..57692d9c0f 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs @@ -232,7 +232,7 @@ namespace ServiceLib.ViewModels var item = SelectedRouting; foreach (var it in _rules) { - it.id = Utils.GetGUID(false); + it.id = Utils.GetGuid(false); } item.ruleNum = _rules.Count; item.ruleSet = JsonUtils.Serialize(_rules, false); @@ -322,7 +322,7 @@ namespace ServiceLib.ViewModels } foreach (var rule in lstRules) { - rule.id = Utils.GetGUID(false); + rule.id = Utils.GetGuid(false); } if (blReplace) diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs index c76198f2fb..a93500bc09 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs @@ -10,8 +10,6 @@ namespace ServiceLib.ViewModels { public class StatusBarViewModel : MyReactiveObject { - private bool _isAdministrator { get; set; } - #region ObservableCollection private IObservableCollection _routingItems = new ObservableCollectionExtended(); @@ -108,19 +106,16 @@ namespace ServiceLib.ViewModels public StatusBarViewModel(Func>? updateView) { _config = AppHandler.Instance.Config; - _updateView = updateView; - if (_updateView != null) + if (updateView != null) { - MessageBus.Current.Listen(EMsgCommand.RefreshProfiles.ToString()) - .Subscribe(async x => await _updateView?.Invoke(EViewAction.DispatcherRefreshServersBiz, null)); + Init(updateView); } SelectedRouting = new(); SelectedServer = new(); - _isAdministrator = Utils.IsAdministrator(); - if (_config.tunModeItem.enableTun && _isAdministrator) + if (_config.tunModeItem.enableTun && AppHandler.Instance.IsAdministrator) { EnableTun = true; } @@ -130,7 +125,7 @@ namespace ServiceLib.ViewModels } RefreshRoutingsMenu(); - InboundDisplayStaus(); + InboundDisplayStatus(); ChangeSystemProxyAsync(_config.systemProxyItem.sysProxyType, true); #region WhenAnyValue && ReactiveCommand @@ -414,7 +409,7 @@ namespace ServiceLib.ViewModels { _config.tunModeItem.enableTun = EnableTun; // When running as a non-administrator, reboot to administrator mode - if (EnableTun && !_isAdministrator) + if (EnableTun && !AppHandler.Instance.IsAdministrator) { _config.tunModeItem.enableTun = false; Locator.Current.GetService()?.RebootAsAdmin(); @@ -429,19 +424,12 @@ namespace ServiceLib.ViewModels #region UI - public void InboundDisplayStaus() + public void InboundDisplayStatus() { StringBuilder sb = new(); sb.Append($"[{EInboundProtocol.socks}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks)}]"); sb.Append(" | "); - //if (_config.systemProxyItem.sysProxyType == ESysProxyType.ForcedChange) - //{ - // sb.Append($"[{Global.InboundHttp}({ResUI.SystemProxy}):{LazyConfig.Instance.GetLocalPort(Global.InboundHttp)}]"); - //} - //else - //{ sb.Append($"[{EInboundProtocol.http}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.http)}]"); - //} InboundDisplay = $"{ResUI.LabLocal}:{sb}"; if (_config.inbound[0].allowLANConn) diff --git a/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs index 5cc69809b9..660e686519 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs @@ -43,7 +43,7 @@ public partial class App : Application private void OnStartup(string[]? Args) { - var exePathKey = Utils.GetMD5(Utils.GetExePath()); + var exePathKey = Utils.GetMd5(Utils.GetExePath()); var rebootas = (Args ?? new string[] { }).Any(t => t == Global.RebootAs); //ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, exePathKey, out bool bCreatedNew); diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs index e7f35643bf..9c00aadf4f 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs @@ -272,7 +272,7 @@ namespace v2rayN.Desktop.Views private void btnGUID_Click(object? sender, RoutedEventArgs e) { txtId.Text = - txtId5.Text = Utils.GetGUID(); + txtId5.Text = Utils.GetGuid(); } private void SetHeaderType() diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs index 83933ef7ff..f4fd21c560 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs @@ -80,30 +80,35 @@ namespace v2rayN.Desktop.Views this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); - if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal) + switch (_config.uiItem.mainGirdOrientation) { - gridMain.IsVisible = true; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies.IsVisible).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections.IsVisible).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain.SelectedIndex).DisposeWith(disposables); - } - else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical) - { - gridMain1.IsVisible = true; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies1.IsVisible).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections1.IsVisible).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain1.SelectedIndex).DisposeWith(disposables); - } - else - { - gridMain2.IsVisible = true; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies2.IsVisible).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections2.IsVisible).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain2.SelectedIndex).DisposeWith(disposables); + case EGirdOrientation.Horizontal: + gridMain.IsVisible = true; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabMsgView.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections.IsVisible).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain.SelectedIndex).DisposeWith(disposables); + break; + + case EGirdOrientation.Vertical: + gridMain1.IsVisible = true; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabMsgView1.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies1.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections1.IsVisible).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain1.SelectedIndex).DisposeWith(disposables); + break; + + case EGirdOrientation.Tab: + default: + gridMain2.IsVisible = true; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies2.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections2.IsVisible).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain2.SelectedIndex).DisposeWith(disposables); + break; } }); - this.Title = $"{Utils.GetVersion()} - {(Utils.IsAdministrator() ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; + this.Title = $"{Utils.GetVersion()} - {(AppHandler.Instance.IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; if (Utils.IsWindows()) { menuGlobalHotkeySetting.IsVisible = false; @@ -115,26 +120,29 @@ namespace v2rayN.Desktop.Views menuGlobalHotkeySetting.IsVisible = false; } - if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal) + switch (_config.uiItem.mainGirdOrientation) { - tabProfiles.Content ??= new ProfilesView(this); - tabMsgView.Content ??= new MsgView(); - tabClashProxies.Content ??= new ClashProxiesView(); - tabClashConnections.Content ??= new ClashConnectionsView(); - } - else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical) - { - tabProfiles1.Content ??= new ProfilesView(this); - tabMsgView1.Content ??= new MsgView(); - tabClashProxies1.Content ??= new ClashProxiesView(); - tabClashConnections1.Content ??= new ClashConnectionsView(); - } - else - { - tabProfiles2.Content ??= new ProfilesView(this); - tabMsgView2.Content ??= new MsgView(); - tabClashProxies2.Content ??= new ClashProxiesView(); - tabClashConnections2.Content ??= new ClashConnectionsView(); + case EGirdOrientation.Horizontal: + tabProfiles.Content ??= new ProfilesView(this); + tabMsgView.Content ??= new MsgView(); + tabClashProxies.Content ??= new ClashProxiesView(); + tabClashConnections.Content ??= new ClashConnectionsView(); + break; + + case EGirdOrientation.Vertical: + tabProfiles1.Content ??= new ProfilesView(this); + tabMsgView1.Content ??= new MsgView(); + tabClashProxies1.Content ??= new ClashProxiesView(); + tabClashConnections1.Content ??= new ClashConnectionsView(); + break; + + case EGirdOrientation.Tab: + default: + tabProfiles2.Content ??= new ProfilesView(this); + tabMsgView2.Content ??= new MsgView(); + tabClashProxies2.Content ??= new ClashProxiesView(); + tabClashConnections2.Content ??= new ClashConnectionsView(); + break; } conTheme.Content ??= new ThemeSettingView(); diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml b/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml index ae63a5e349..a183fdf58c 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml @@ -32,7 +32,7 @@ Cursor="Hand" /> - + @@ -364,6 +364,7 @@ + @@ -610,6 +611,19 @@ Grid.Column="1" Width="300" Classes="Margin8" /> + + + diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs index dd52aa9219..2ff06d9b4b 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs @@ -83,6 +83,10 @@ namespace v2rayN.Desktop.Views { cmbSubConvertUrl.Items.Add(it); }); + Global.GeoFilesSources.ForEach(it => + { + cmbGetFilesSourceUrl.Items.Add(it); + }); foreach (EGirdOrientation it in Enum.GetValues(typeof(EGirdOrientation))) { cmbMainGirdOrientation.Items.Add(it.ToString()); @@ -132,6 +136,7 @@ namespace v2rayN.Desktop.Views this.Bind(ViewModel, vm => vm.SpeedPingTestUrl, v => v.cmbSpeedPingTestUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SubConvertUrl, v => v.cmbSubConvertUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.MainGirdOrientation, v => v.cmbMainGirdOrientation.SelectedIndex).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.GeoFileSourceUrl, v => v.cmbGetFilesSourceUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.notProxyLocalAddress, v => v.tognotProxyLocalAddress.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.systemProxyAdvancedProtocol, v => v.cmbsystemProxyAdvancedProtocol.SelectedValue).DisposeWith(disposables); diff --git a/v2rayn/v2rayN/v2rayN/App.xaml b/v2rayn/v2rayN/v2rayN/App.xaml index 844c6af97e..b5d2997d7f 100644 --- a/v2rayn/v2rayN/v2rayN/App.xaml +++ b/v2rayn/v2rayN/v2rayN/App.xaml @@ -24,23 +24,47 @@ + Bottom="8" + Left="8" + Right="8" + Top="8" /> + + + +