From caae0492eeb02770ed91a8b9bb62962510511cc4 Mon Sep 17 00:00:00 2001 From: peng Date: Mon, 10 Nov 2025 09:19:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=90=E4=BB=93=E5=BA=93=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crop-x-new/.dev-tools-config.json | 27 + crop-x-new/.dockerignore | 97 + crop-x-new/.env.example | 35 + crop-x-new/.eslintrc.cjs | 47 + crop-x-new/.gitignore | 113 + crop-x-new/.prettierignore | 18 + crop-x-new/.prettierrc | 12 + crop-x-new/CHANGELOG.md | 277 + crop-x-new/CONTRIBUTING.md | 382 + crop-x-new/DEVELOPMENT.md | 644 + crop-x-new/Dockerfile | 47 + crop-x-new/README.md | 322 + crop-x-new/components.json | 22 + crop-x-new/docs/开发项目规范.md | 1477 ++ crop-x-new/env/.env.dev | 26 + crop-x-new/env/.env.prod | 43 + crop-x-new/env/.env.test | 28 + crop-x-new/env/.env.uat | 30 + crop-x-new/eslint.config.mjs | 25 + crop-x-new/index.html | 13 + crop-x-new/next-env.d.ts | 6 + crop-x-new/next.config.js | 37 + crop-x-new/openapi-ts.config.ts | 17 + crop-x-new/package-lock.json | 14478 ++++++++++++++++ crop-x-new/package.json | 102 + crop-x-new/postcss.config.js | 6 + crop-x-new/scripts/build.cjs | 387 + crop-x-new/scripts/deploy.js | 44 + crop-x-new/scripts/generate-api.cjs | 388 + crop-x-new/scripts/openapi.json | 1 + crop-x-new/scripts/setup-dev-tools.js | 70 + .../basic/customers/page.tsx | 18 + .../basic/materials/page.tsx | 18 + .../(app)/agricultural-asset/basic/page.tsx | 18 + .../basic/suppliers/page.tsx | 18 + .../agricultural-asset/basic/tools/page.tsx | 18 + .../equipment/archive/page.tsx | 18 + .../equipment/depreciation/page.tsx | 18 + .../equipment/dispatch/page.tsx | 18 + .../equipment/disposal/page.tsx | 18 + .../equipment/maintenance/page.tsx | 18 + .../agricultural-asset/equipment/page.tsx | 18 + .../inventory/check/page.tsx | 18 + .../inventory/detail/page.tsx | 18 + .../agricultural-asset/inventory/in/page.tsx | 18 + .../inventory/location/page.tsx | 18 + .../agricultural-asset/inventory/page.tsx | 18 + .../inventory/suggest/page.tsx | 18 + .../inventory/warning/page.tsx | 18 + .../app/(app)/agricultural-asset/layout.tsx | 7 + .../src/app/(app)/agricultural-asset/page.tsx | 18 + .../purchase/order/page.tsx | 18 + .../agricultural-asset/purchase/page.tsx | 18 + .../agricultural-asset/purchase/plan/page.tsx | 18 + .../report/consumption/page.tsx | 18 + .../report/inventory/page.tsx | 18 + .../report/overview/page.tsx | 18 + .../(app)/agricultural-asset/report/page.tsx | 18 + .../requisition/apply/page.tsx | 18 + .../requisition/approval/page.tsx | 18 + .../requisition/checkout/page.tsx | 18 + .../agricultural-asset/requisition/page.tsx | 18 + .../requisition/record/page.tsx | 18 + .../return/history/page.tsx | 18 + .../(app)/agricultural-asset/return/page.tsx | 18 + .../return/process/page.tsx | 18 + .../return/register/page.tsx | 18 + .../return/settlement/page.tsx | 18 + .../archive/classification/page.tsx | 18 + .../archive/entry/page.tsx | 30 + .../agricultural-machinery/archive/page.tsx | 30 + .../archive/qrcode/page.tsx | 30 + .../data-analysis/analysis/page.tsx | 18 + .../data-analysis/comparison/page.tsx | 18 + .../data-analysis/page.tsx | 30 + .../driver-archive/info/page.tsx | 30 + .../driver-archive/page.tsx | 30 + .../driver-archive/task/page.tsx | 30 + .../(app)/agricultural-machinery/error.tsx | 35 + .../fault-diagnosis/alert-rules/page.tsx | 18 + .../fault-diagnosis/health/page.tsx | 18 + .../fault-diagnosis/page.tsx | 30 + .../fault-diagnosis/parameter/page.tsx | 18 + .../fault-diagnosis/warning/page.tsx | 18 + .../(app)/agricultural-machinery/layout.tsx | 7 + .../load-management/device/page.tsx | 30 + .../load-management/library/page.tsx | 30 + .../load-management/page.tsx | 30 + .../load-management/parameter/page.tsx | 30 + .../load-management/type/page.tsx | 30 + .../(app)/agricultural-machinery/loading.tsx | 10 + .../monitoring/location/page.tsx | 30 + .../monitoring/operation/page.tsx | 30 + .../monitoring/page.tsx | 30 + .../monitoring/status/page.tsx | 30 + .../app/(app)/agricultural-machinery/page.tsx | 93 + .../precision-operation/cockpit/page.tsx | 18 + .../precision-operation/dispatch/page.tsx | 18 + .../precision-operation/page.tsx | 30 + .../precision-operation/record/page.tsx | 18 + .../precision-operation/route/page.tsx | 18 + .../scheduling/assignment/page.tsx | 18 + .../scheduling/dispatch/page.tsx | 18 + .../scheduling/page.tsx | 30 + .../scheduling/playback/page.tsx | 18 + .../security/fence/page.tsx | 18 + .../agricultural-machinery/security/page.tsx | 30 + .../application/device-control/page.tsx | 18 + .../application/external-system/page.tsx | 18 + .../(app)/ai-crop-model/application/page.tsx | 18 + .../components/AddParameterDialog.tsx | 465 + .../DeleteParameterConfirmDialog.tsx | 55 + .../components/DeviceParameterStats.tsx | 103 + .../components/DeviceParameterTable.tsx | 221 + .../components/DeviceTypeSelector.tsx | 71 + .../components/ViewParameterDialog.tsx | 215 + .../components/deviceParameterReducer.tsx | 502 + .../device-parameter/page.tsx | 116 + .../components/AddDeviceTypeDialog.tsx | 133 + .../components/DeleteConfirmDialog.tsx | 41 + .../components/DeviceTypeStats.tsx | 56 + .../components/DeviceTypeTable.tsx | 125 + .../components/ViewDeviceTypeDialog.tsx | 75 + .../components/ViewParamsDialog.tsx | 102 + .../components/deviceTypeReducer.tsx | 411 + .../data-sense-center/device-type/page.tsx | 114 + .../components/AddDataSourceDialog.tsx | 238 + .../external/components/DataSourceCard.tsx | 197 + .../external/components/FilterPanel.tsx | 164 + .../components/StatisticsOverview.tsx | 78 + .../components/externalDataReducer.tsx | 223 + .../data-sense-center/external/page.tsx | 831 + .../data-sense-center/external/types.ts | 115 + .../data-sense-center/iot/page.tsx | 1252 ++ .../ai-crop-model/data-sense-center/page.tsx | 11 + .../fusion/components/DecisionBadges.tsx | 93 + .../fusion/components/DecisionFormDialog.tsx | 328 + .../components/DecisionFusionHeader.tsx | 48 + .../fusion/components/DecisionListCard.tsx | 181 + .../components/DecisionResultDialog.tsx | 215 + .../fusion/components/DeleteConfirmDialog.tsx | 38 + .../components/ExecuteConfirmDialog.tsx | 108 + .../fusion/components/ExecuteResultDialog.tsx | 97 + .../decision/fusion/components/data.ts | 193 + .../decision/fusion/components/types.ts | 86 + .../ai-crop-model/decision/fusion/page.tsx | 1445 ++ .../(app)/ai-crop-model/decision/log/page.tsx | 1165 ++ .../app/(app)/ai-crop-model/decision/page.tsx | 18 + .../decision/simulation/page.tsx | 1402 ++ .../knowledge/generation/page.tsx | 18 + .../(app)/ai-crop-model/knowledge/page.tsx | 18 + .../src/app/(app)/ai-crop-model/layout.tsx | 7 + .../components/ApplicationEditDialog.tsx | 517 + .../components/ApplicationGenerateDialog.tsx | 505 + .../ApplicationGenerationReducer.tsx | 180 + .../generation/components/ApplicationList.tsx | 303 + .../components/ApplicationRunDialog.tsx | 455 + .../model-application/generation/page.tsx | 303 + .../ai-crop-model/model-application/page.tsx | 18 + .../model-application/scheduling/page.tsx | 1118 ++ .../components/DependencyManageDialog.tsx | 217 + .../access/components/DeployConfigDialog.tsx | 226 + .../access/components/ModelDetailDialog.tsx | 257 + .../access/components/ModelEditDialog.tsx | 148 + .../components/PerformanceTuneDialog.tsx | 270 + .../components/PermissionManageDialog.tsx | 194 + .../access/components/ServiceConfigDialog.tsx | 89 + .../access/components/VersionManageDialog.tsx | 192 + .../model-integration/access/page.tsx | 759 + .../management/components/AddModelDialog.tsx | 276 + .../components/DeleteModelDialog.tsx | 245 + .../management/components/ModelAnalytics.tsx | 139 + .../components/ModelConfigDialog.tsx | 450 + .../components/ModelServiceList.tsx | 382 + .../components/PerformanceDialog.tsx | 465 + .../components/PermissionDialog.tsx | 294 + .../management/components/RedeployDialog.tsx | 223 + .../components/modelIntegrationReducer.tsx | 390 + .../model-integration/management/page.tsx | 356 + .../model-integration/management/types.ts | 53 + .../ai-crop-model/model-integration/page.tsx | 18 + .../ai-crop-model/monitoring/alert/page.tsx | 18 + .../ai-crop-model/monitoring/audit/page.tsx | 18 + .../ai-crop-model/monitoring/model/page.tsx | 18 + .../(app)/ai-crop-model/monitoring/page.tsx | 18 + .../src/app/(app)/ai-crop-model/page.tsx | 18 + .../dashboard/components/DecisionMap.tsx | 187 + .../dashboard/components/DecisionTrends.tsx | 86 + .../dashboard/components/LatestDecisions.tsx | 157 + .../dashboard/components/StatisticsCards.tsx | 101 + .../components/aiDecisionDashboardReducer.tsx | 446 + .../ai-crop-model/support/dashboard/page.tsx | 104 + .../ai-crop-model/support/detail/page.tsx | 1684 ++ .../app/(app)/ai-crop-model/support/page.tsx | 18 + .../src/app/(app)/central-config/layout.tsx | 11 + .../log/components/MessageLogFilter.tsx | 64 + .../log/components/MessageLogStats.tsx | 44 + .../log/components/MessageLogTable.tsx | 152 + .../message/log/mock/mockData.ts | 115 + .../(app)/central-config/message/log/page.tsx | 139 + .../app/(app)/central-config/message/page.tsx | 26 + .../send/components/MessageInstructions.tsx | 17 + .../send/components/MessagePreviewDialog.tsx | 122 + .../send/components/MessageSendTable.tsx | 154 + .../send/components/MessageStatsCards.tsx | 42 + .../send/components/SendMessageDialog.tsx | 258 + .../message/send/components/index.ts | 5 + .../central-config/message/send/page.tsx | 493 + .../central-config/message/send/types.ts | 12 + .../components/MessageTemplateDialog.tsx | 179 + .../components/MessageTemplateHeader.tsx | 30 + .../components/MessageTemplateInfo.tsx | 22 + .../components/MessageTemplateList.tsx | 128 + .../components/MessageTemplateSearch.tsx | 48 + .../components/MessageTemplateTestDialog.tsx | 121 + .../message/template/components/index.ts | 6 + .../central-config/message/template/page.tsx | 269 + .../central-config/message/template/types.ts | 14 + .../monitor/login-log/components/index.ts | 1 + .../login-log/components/loginLogApi.ts | 196 + .../central-config/monitor/login-log/page.tsx | 404 + .../components/NetworkLogDetailDialog.tsx | 191 + .../components/NetworkLogFilters.tsx | 62 + .../network-log/components/NetworkLogInfo.tsx | 20 + .../components/NetworkLogService.ts | 338 + .../components/NetworkLogStats.tsx | 51 + .../components/NetworkLogTable.tsx | 133 + .../monitor/network-log/components/index.ts | 8 + .../monitor/network-log/page.tsx | 139 + .../monitor/operation-log/components/index.ts | 1 + .../components/operationLogApi.ts | 212 + .../monitor/operation-log/page.tsx | 378 + .../app/(app)/central-config/monitor/page.tsx | 30 + .../performance/components/CpuMetricCard.tsx | 40 + .../performance/components/DiskMetricCard.tsx | 51 + .../performance/components/JvmInfoCard.tsx | 53 + .../components/MemoryMetricCard.tsx | 47 + .../components/PerformanceInstructions.tsx | 20 + .../components/PerformanceTrendChart.tsx | 42 + .../performance/components/TomcatInfoCard.tsx | 48 + .../monitor/performance/components/index.ts | 7 + .../monitor/performance/page.tsx | 274 + .../src/app/(app)/central-config/page.tsx | 13 + .../components/LoginHistory.tsx | 23 + .../components/NotificationSettings.tsx | 64 + .../components/PasswordSecurity.tsx | 54 + .../components/SecurityOverview.tsx | 188 + .../components/SecurityQuestions.tsx | 42 + .../components/TrustedDevices.tsx | 55 + .../components/TwoFactorAuth.tsx | 42 + .../personal-center/account-security/page.tsx | 549 + .../personal-center/account-security/types.ts | 58 + .../central-config/personal-center/page.tsx | 22 + .../components/PersonalInfoForm.tsx | 207 + .../components/PersonalInfoHeader.tsx | 102 + .../components/PersonalInfoStats.tsx | 144 + .../personal-center/personal-info/page.tsx | 446 + .../personal-center/personal-info/types.ts | 35 + .../category/components/CategoryFilters.tsx | 50 + .../components/CategoryFormDialog.tsx | 137 + .../components/CategoryInstructions.tsx | 23 + .../category/components/CategoryTree.tsx | 114 + .../central-config/system/category/page.tsx | 306 + .../central-config/system/category/reducer.ts | 94 + .../central-config/system/category/types.ts | 53 + .../dictionary/components/CategoryForm.tsx | 159 + .../dictionary/components/CategoryList.tsx | 211 + .../components/DeleteConfirmDialog.tsx | 84 + .../central-config/system/dictionary/page.tsx | 385 + .../system/dictionary/reducer.ts | 109 + .../central-config/system/dictionary/types.ts | 67 + .../app/(app)/central-config/system/page.tsx | 26 + .../settings/components/CopyrightInfoCard.tsx | 35 + .../settings/components/FeatureToggleCard.tsx | 39 + .../components/PasswordPolicyCard.tsx | 67 + .../settings/components/PlatformInfoCard.tsx | 60 + .../components/RegionalSettingsCard.tsx | 69 + .../components/SessionManagementCard.tsx | 45 + .../settings/components/SettingsInfoCard.tsx | 20 + .../components/SystemAnnouncementCard.tsx | 22 + .../system/settings/components/index.ts | 8 + .../central-config/system/settings/page.tsx | 168 + .../components/AuditHistoryDetailDialog.tsx | 352 + .../components/AuditHistoryFilters.tsx | 84 + .../components/AuditHistoryInstructions.tsx | 23 + .../components/AuditHistoryList.tsx | 93 + .../components/AuditHistoryStatsCards.tsx | 49 + .../components/auditHistoryApi.ts | 243 + .../components/auditHistoryReducer.tsx | 125 + .../tenant/audit-history/page.tsx | 666 + .../tenant/audit-history/page.tsx.tmp | 525 + .../tenant/audit-history/types.ts | 107 + .../components/AuditPagination.tsx | 83 + .../components/AuditSearchAndFilter.tsx | 68 + .../components/AuditStatsCards.tsx | 72 + .../components/EnterpriseAuditTable.tsx | 121 + .../components/EnterpriseDetailDialog.tsx | 297 + .../components/EnterpriseList.tsx | 83 + .../components/SearchFilters.tsx | 50 + .../components/enterpriseAuditApi.ts | 279 + .../tenant/enterprise-audit/page.tsx | 484 + .../tenant/enterprise-audit/types.ts | 71 + .../components/AuditStatusAlert.tsx | 57 + .../components/BankInfoForm.tsx | 132 + .../components/BasicInfoForm.tsx | 128 + .../components/EnterpriseInfoHeader.tsx | 47 + .../components/LegalInfoForm.tsx | 122 + .../components/OperationTips.tsx | 23 + .../components/OtherInfoForm.tsx | 178 + .../enterprise-info/components/SystemInfo.tsx | 44 + .../components/enterpriseInfoApi.ts | 220 + .../tenant/enterprise-info/page.tsx | 269 + .../tenant/enterprise-info/types.ts | 55 + .../components/CreateEnterpriseDialog.tsx | 212 + .../components/enterpriseApi.ts | 352 + .../components/enterpriseReducer.tsx | 164 + .../tenant/enterprise-management/page.tsx | 714 + .../app/(app)/central-config/tenant/page.tsx | 30 + .../components/UserDetailDialog.tsx | 288 + .../components/UserFormDialog.tsx | 138 + .../user-management/components/UserList.tsx | 245 + .../components/UserManagementFilters.tsx | 62 + .../components/UserManagementHeader.tsx | 28 + .../components/UserManagementStatsCards.tsx | 51 + .../components/userManagementApi.ts | 194 + .../tenant/user-management/page.tsx | 456 + .../tenant/user-management/types.ts | 104 + .../components/DepartmentDeleteDialog.tsx | 70 + .../components/DepartmentFormDialog.tsx | 321 + .../components/DepartmentHeader.tsx | 32 + .../components/DepartmentInstructions.tsx | 66 + .../components/DepartmentStatsCards.tsx | 77 + .../department/components/DepartmentTree.tsx | 234 + .../department/components/departmentApi.ts | 323 + .../components/departmentCreateApi.ts | 207 + .../central-config/user/department/page.tsx | 513 + .../central-config/user/department/types.ts | 60 + .../components/EmployeeDetailDialog.tsx | 170 + .../components/EmployeeFormDialog.tsx | 229 + .../components/EmployeeManagementHeader.tsx | 26 + .../EmployeeManagementStatsCards.tsx | 43 + .../user/employee/components/employeeApi.ts | 498 + .../central-config/user/employee/page.tsx | 740 + .../central-config/user/employee/types.ts | 86 + .../user/menu/components/MenuFormDialog.tsx | 160 + .../menu/components/MenuManagementHeader.tsx | 25 + .../components/MenuManagementInstructions.tsx | 21 + .../components/MenuManagementStatsCards.tsx | 57 + .../user/menu/components/MenuTree.tsx | 213 + .../(app)/central-config/user/menu/page.tsx | 463 + .../(app)/central-config/user/menu/types.ts | 16 + .../app/(app)/central-config/user/page.tsx | 30 + .../components/PermissionManagementHeader.tsx | 24 + .../central-config/user/permission/page.tsx | 414 + .../central-config/user/permission/types.ts | 37 + .../user/role/components/RoleDetailDialog.tsx | 122 + .../user/role/components/RoleFormDialog.tsx | 246 + .../role/components/RoleManagementHeader.tsx | 24 + .../components/RoleManagementInstructions.tsx | 19 + .../components/RoleManagementStatsCards.tsx | 43 + .../user/role/components/roleApi.ts | 283 + .../(app)/central-config/user/role/page.tsx | 612 + .../(app)/central-config/user/role/types.ts | 403 + .../src/app/(app)/central-config/映射关系.md | 347 + .../archive/aggregation/page.tsx | 18 + .../(app)/farming-operation/archive/page.tsx | 18 + .../farming-operation/archive/trace/page.tsx | 18 + .../farming-operation/archive/view/page.tsx | 18 + .../farming-operation/calendar/gantt/page.tsx | 18 + .../(app)/farming-operation/calendar/page.tsx | 18 + .../calendar/progress/page.tsx | 18 + .../farming-operation/calendar/view/page.tsx | 18 + .../farming-operation/execution/log/page.tsx | 18 + .../farming-operation/execution/page.tsx | 18 + .../execution/record/page.tsx | 18 + .../farming-operation/execution/type/page.tsx | 18 + .../farming-operation/issue/assign/page.tsx | 18 + .../issue/collaborate/page.tsx | 18 + .../(app)/farming-operation/issue/page.tsx | 18 + .../farming-operation/issue/report/page.tsx | 18 + .../knowledge/category/page.tsx | 18 + .../knowledge/management/page.tsx | 18 + .../farming-operation/knowledge/page.tsx | 18 + .../knowledge/search/page.tsx | 18 + .../app/(app)/farming-operation/layout.tsx | 7 + .../src/app/(app)/farming-operation/page.tsx | 159 + .../performance/hours/page.tsx | 18 + .../farming-operation/performance/page.tsx | 18 + .../performance/schedule/page.tsx | 18 + .../performance/staff/page.tsx | 18 + .../performance/statistics/page.tsx | 18 + .../planning/allocation/page.tsx | 18 + .../planning/creation/page.tsx | 18 + .../(app)/farming-operation/planning/page.tsx | 18 + .../planning/progress/page.tsx | 18 + .../task/assignment/page.tsx | 18 + .../task/management/page.tsx | 18 + .../task/monitoring/page.tsx | 18 + .../app/(app)/farming-operation/task/page.tsx | 18 + .../task/statistics/page.tsx | 18 + .../components/ControlPanel.tsx | 141 + .../components/DataAnalysis.tsx | 131 + .../layer-sampling/components/DataTable.tsx | 64 + .../layer-sampling/components/UsageGuide.tsx | 26 + .../components/Visualization3D.tsx | 260 + .../components/layerSamplingReducer.tsx | 66 + .../analysis/layer-sampling/page.tsx | 107 + .../(app)/land-information/analysis/page.tsx | 18 + .../components/AddSamplePointDialog.tsx | 338 + .../components/DeleteConfirmDialog.tsx | 60 + .../components/EditSamplePointDialog.tsx | 344 + .../soil-data/components/LayerDataDialog.tsx | 165 + .../components/ProfileInformation.tsx | 194 + .../soil-data/components/SamplePointsList.tsx | 184 + .../soil-data/components/SoilDataContent.tsx | 215 + .../components/SpatialDistribution.tsx | 142 + .../components/StatisticalAnalysis.tsx | 246 + .../soil-data/components/StatisticsCards.tsx | 81 + .../soil-data/components/UsageGuide.tsx | 27 + .../soil-data/components/soilDataReducer.tsx | 500 + .../analysis/soil-data/page.tsx | 26 + .../components/SoilQualityAnalysis.tsx | 862 + .../components/soilQualityService.ts | 558 + .../soil-quality/components/soilTypes.ts | 256 + .../analysis/soil-quality/page.tsx | 7 + .../LandClassificationManagement.tsx | 618 + .../components/LandTagManagement.tsx | 216 + .../components/landClassificationReducer.tsx | 44 + .../archive/classification/page.tsx | 311 + .../context/components/FilterPanel.tsx | 167 + .../context/components/StatisticsResults.tsx | 267 + .../context/components/UsageExamples.tsx | 20 + .../components/landStatisticsReducer.tsx | 187 + .../land-information/archive/context/page.tsx | 490 + .../manage/components/LandAttachments.tsx | 51 + .../manage/components/LandAttributes.tsx | 135 + .../manage/components/LandBasicInfo.tsx | 103 + .../manage/components/LandMapContainer.tsx | 255 + .../manage/components/LandOwnershipInfo.tsx | 78 + .../manage/components/LandVersionHistory.tsx | 513 + .../land-information/archive/manage/page.tsx | 1211 ++ .../(app)/land-information/archive/page.tsx | 18 + .../statistics/components/FilterPanel.tsx | 174 + .../components/StatisticsResults.tsx | 250 + .../statistics/components/UsageExamples.tsx | 17 + .../components/landStatisticsReducer.tsx | 137 + .../archive/statistics/page.tsx | 427 + .../chart/components/FieldSelector.tsx | 74 + .../chart/components/MapComparison.tsx | 59 + .../chart/components/RadarChart.tsx | 101 + .../chart/components/ReportGenerator.tsx | 41 + .../chart/components/ReportList.tsx | 93 + .../chart/components/YieldNutrientCharts.tsx | 105 + .../components/chartComparisonReducer.tsx | 350 + .../comparison/chart/page.tsx | 119 + .../indicator/components/BasicProperties.tsx | 71 + .../indicator/components/FieldSelector.tsx | 123 + .../indicator/components/ManagementStatus.tsx | 99 + .../components/NaturalConditions.tsx | 146 + .../components/SuitabilityEvaluation.tsx | 149 + .../components/multiDimensionReducer.tsx | 153 + .../comparison/indicator/page.tsx | 235 + .../land-information/comparison/page.tsx | 18 + .../report/components/FieldSelector.tsx | 95 + .../report/components/ReportList.tsx | 93 + .../report/components/ReportPreview.tsx | 303 + .../components/reportComparisonReducer.tsx | 209 + .../comparison/report/page.tsx | 307 + .../src/app/(app)/land-information/layout.tsx | 7 + .../draw/components/AdvancedEditorPromo.tsx | 33 + .../map/draw/components/DrawingTools.tsx | 613 + .../map/draw/components/EditingTools.tsx | 934 + .../map/draw/components/FieldEntryDialog.tsx | 397 + .../map/draw/components/UsageGuide.tsx | 154 + .../map/draw/components/drawEditReducer.tsx | 193 + .../(app)/land-information/map/draw/page.tsx | 192 + .../map/gis/components/FeatureDescription.tsx | 42 + .../map/gis/components/MapContainer.tsx | 104 + .../map/gis/components/MapInfoPanel.tsx | 77 + .../map/gis/components/SelectedFieldInfo.tsx | 58 + .../map/gis/components/gisMapReducer.tsx | 111 + .../(app)/land-information/map/gis/page.tsx | 93 + .../app/(app)/land-information/map/page.tsx | 18 + .../satellite/components/FieldSatellite.tsx | 873 + .../components/satelliteImageService.ts | 352 + .../satellite/components/satelliteTypes.ts | 76 + .../land-information/map/satellite/page.tsx | 7 + .../spatial-query/components/ExportDialog.tsx | 316 + .../spatial-query/components/MapPicker.tsx | 491 + .../spatial-query/components/QueryPanel.tsx | 393 + .../spatial-query/components/ResultsPanel.tsx | 344 + .../components/spatialQueryReducer.tsx | 260 + .../components/spatialQueryUtils.tsx | 466 + .../map/spatial-query/page.tsx | 1778 ++ .../environment/components/DataTrends.tsx | 207 + .../environment/components/DeviceDialog.tsx | 298 + .../components/DeviceManagement.tsx | 109 + .../environment/components/DeviceOverview.tsx | 60 + .../components/RealTimeMonitoring.tsx | 167 + .../environmentMonitoringReducer.tsx | 247 + .../monitoring/environment/page.tsx | 229 + .../land-information/monitoring/page.tsx | 18 + .../weather/components/ControlPanel.tsx | 78 + .../components/RealtimeWeatherCards.tsx | 155 + .../weather/components/UsageGuide.tsx | 27 + .../weather/components/WeatherAlerts.tsx | 86 + .../weather/components/WeatherAnalysis.tsx | 227 + .../weather/components/WeatherCharts.tsx | 227 + .../weather/components/WeatherContent.tsx | 125 + .../weather/components/WeatherForecast.tsx | 160 + .../weather/components/WeatherHistory.tsx | 243 + .../weather/components/weatherDataReducer.tsx | 479 + .../monitoring/weather/page.tsx | 27 + .../src/app/(app)/land-information/page.tsx | 147 + .../risk/disposal/components/FieldFilter.tsx | 31 + .../risk/disposal/components/StatusStats.tsx | 64 + .../risk/disposal/components/WarningList.tsx | 188 + .../disposal/components/WorkflowDialog.tsx | 394 + .../disposal/components/WorkflowGuide.tsx | 105 + .../disposal/components/disposalReducer.tsx | 523 + .../land-information/risk/disposal/page.tsx | 107 + .../land-information/risk/monitoring/page.tsx | 401 + .../app/(app)/land-information/risk/page.tsx | 18 + .../(app)/land-information/risk/push/page.tsx | 678 + .../auto/components/AnalysisCharts.tsx | 306 + .../auto/components/AnalysisControlPanel.tsx | 285 + .../auto/components/AnalysisReport.tsx | 506 + .../auto/components/AnalysisResults.tsx | 334 + .../auto/components/BatchAnalysisPanel.tsx | 375 + .../auto/components/BatchEvaluationPanel.tsx | 411 + .../auto/components/EvaluationModel.tsx | 235 + .../auto/components/FactorConfiguration.tsx | 253 + .../auto/components/FactorWeights.tsx | 243 + .../auto/components/LandBlockSelector.tsx | 299 + .../components/SpatialAnalysisContent.tsx | 40 + .../auto/components/SpatialDistribution.tsx | 212 + .../auto/components/WeightConfiguration.tsx | 299 + .../auto/components/batchAnalysisService.tsx | 614 + .../components/spatialAnalysisReducer.tsx | 621 + .../suitability/auto/page.tsx | 459 + .../components/MultiFactorEvaluation.tsx | 700 + .../components/cropKnowledgeBase.ts | 565 + .../components/multiFactorService.ts | 328 + .../components/multiFactorTypes.ts | 192 + .../suitability/multiFactor/page.tsx | 7 + .../land-information/suitability/page.tsx | 18 + .../components/CropRecommendations.tsx | 441 + .../components/FieldEnvironmentOverview.tsx | 152 + .../components/KnowledgeBaseDialog.tsx | 409 + .../components/cropRecommendReducer.tsx | 124 + .../suitability/recommend/page.tsx | 188 + crop-x-new/src/app/(app)/layout.tsx | 12 + .../fertilizer/history-data/page.tsx | 30 + .../fertilizer/level-setting/page.tsx | 30 + .../fertilizer/stirring-control/page.tsx | 30 + .../fertilizer/water-control/page.tsx | 30 + .../(app)/water-fertilizer-control/layout.tsx | 7 + .../monitoring/alert-logic/page.tsx | 30 + .../monitoring/notification-push/page.tsx | 30 + .../monitoring/threshold-alert/page.tsx | 30 + .../(app)/water-fertilizer-control/page.tsx | 30 + .../smart/auto/page.tsx | 30 + .../smart/history/page.tsx | 30 + .../smart/manual/page.tsx | 30 + .../smart/model-config/page.tsx | 30 + .../smart/realtime/page.tsx | 30 + .../wf-control/fertilizer-history/page.tsx | 30 + .../wf-control/params/page.tsx | 30 + .../wf-control/tank-realtime/page.tsx | 30 + .../wf-control/valve-control/page.tsx | 30 + .../wf-control/valve-history/page.tsx | 30 + .../wf-control/valve-realtime/page.tsx | 30 + .../wf-management/component/page.tsx | 30 + .../wf-management/device/page.tsx | 30 + .../wf-management/mapping/page.tsx | 30 + .../wf-management/parameter/page.tsx | 30 + crop-x-new/src/app/(auth)/layout.tsx | 16 + .../app/(auth)/login/components/LoginForm.tsx | 398 + .../(auth)/login/components/authReducer.tsx | 161 + crop-x-new/src/app/(auth)/login/page.tsx | 64 + crop-x-new/src/app/(auth)/register/layout.tsx | 17 + crop-x-new/src/app/(auth)/register/page.tsx | 561 + crop-x-new/src/app/error.tsx | 34 + crop-x-new/src/app/layout.tsx | 1371 ++ crop-x-new/src/app/loading.tsx | 10 + crop-x-new/src/app/not-found.tsx | 113 + crop-x-new/src/app/page.tsx | 10 + crop-x-new/src/components/app-sidebar.tsx | 162 + .../src/components/auth/AuthContext.tsx | 341 + .../src/components/auth/CaptchaInput.tsx | 190 + .../components/auth/ClientAuthInterceptor.tsx | 57 + .../src/components/auth/LoadingScreen.tsx | 52 + .../components/auth/SmartFieldBackground.tsx | 441 + .../components/PaginationComponent.tsx | 221 + .../components/SearchFormComponent.tsx | 172 + .../searchFormPaginationReducer.tsx | 196 + .../common/searchFormPagination/index.ts | 38 + .../common/searchFormPagination/page.tsx | 327 + .../src/components/field/MapPointPicker.tsx | 238 + crop-x-new/src/components/layouts/Main.tsx | 16 + crop-x-new/src/components/layouts/Navbar.tsx | 352 + .../components/layouts/SideBar/SideBar.tsx | 113 + .../components/layouts/SideBar/SideBarOld.tsx | 267 + .../SideBar/components/LeftSidebar.tsx | 232 + .../SideBar/components/MainContent.tsx | 71 + .../src/components/layouts/ThemeToggle.tsx | 50 + .../layouts/components/MessageBell.tsx | 282 + .../layouts/components/UserProfile.tsx | 109 + .../layouts/components/auth/AuthContext.tsx | 185 + .../layouts/components/lib/utils.ts | 6 + .../layouts/components/ui/badge.tsx | 36 + .../layouts/components/ui/button.tsx | 56 + .../layouts/components/ui/dialog.tsx | 120 + .../layouts/components/ui/popover.tsx | 29 + .../layouts/components/ui/scroll-area.tsx | 46 + crop-x-new/src/components/layouts/index.css | 6 + crop-x-new/src/components/search-form.tsx | 28 + crop-x-new/src/components/shared/BaseMap.tsx | 388 + crop-x-new/src/components/ui/accordion.tsx | 56 + crop-x-new/src/components/ui/alert-dialog.tsx | 139 + crop-x-new/src/components/ui/alert.tsx | 59 + crop-x-new/src/components/ui/aspect-ratio.tsx | 5 + crop-x-new/src/components/ui/avatar.tsx | 50 + crop-x-new/src/components/ui/badge.tsx | 36 + crop-x-new/src/components/ui/breadcrumb.tsx | 109 + crop-x-new/src/components/ui/button-group.tsx | 83 + crop-x-new/src/components/ui/button.tsx | 60 + crop-x-new/src/components/ui/calendar.tsx | 213 + crop-x-new/src/components/ui/card.tsx | 79 + crop-x-new/src/components/ui/carousel.tsx | 260 + crop-x-new/src/components/ui/chart.tsx | 367 + crop-x-new/src/components/ui/checkbox.tsx | 28 + crop-x-new/src/components/ui/collapsible.tsx | 9 + crop-x-new/src/components/ui/command.tsx | 153 + crop-x-new/src/components/ui/context-menu.tsx | 198 + .../src/components/ui/data-pagination.tsx | 188 + crop-x-new/src/components/ui/dialog.tsx | 122 + crop-x-new/src/components/ui/drawer.tsx | 116 + .../src/components/ui/dropdown-menu.tsx | 255 + crop-x-new/src/components/ui/empty.tsx | 104 + crop-x-new/src/components/ui/field.tsx | 244 + crop-x-new/src/components/ui/form.tsx | 176 + crop-x-new/src/components/ui/hover-card.tsx | 27 + crop-x-new/src/components/ui/input-group.tsx | 168 + crop-x-new/src/components/ui/input-otp.tsx | 69 + crop-x-new/src/components/ui/input.tsx | 21 + crop-x-new/src/components/ui/item.tsx | 193 + crop-x-new/src/components/ui/kbd.tsx | 28 + crop-x-new/src/components/ui/label.tsx | 24 + crop-x-new/src/components/ui/menubar.tsx | 254 + .../src/components/ui/navigation-menu.tsx | 128 + crop-x-new/src/components/ui/pagination.tsx | 117 + crop-x-new/src/components/ui/popover.tsx | 29 + crop-x-new/src/components/ui/progress.tsx | 28 + crop-x-new/src/components/ui/radio-group.tsx | 42 + crop-x-new/src/components/ui/resizable.tsx | 45 + crop-x-new/src/components/ui/scroll-area.tsx | 46 + crop-x-new/src/components/ui/select.tsx | 160 + crop-x-new/src/components/ui/separator.tsx | 26 + crop-x-new/src/components/ui/sheet.tsx | 139 + crop-x-new/src/components/ui/sidebar.tsx | 726 + crop-x-new/src/components/ui/skeleton.tsx | 13 + crop-x-new/src/components/ui/slider.tsx | 26 + crop-x-new/src/components/ui/sonner.tsx | 45 + crop-x-new/src/components/ui/spinner.tsx | 16 + crop-x-new/src/components/ui/switch.tsx | 27 + crop-x-new/src/components/ui/table.tsx | 117 + crop-x-new/src/components/ui/tabs.tsx | 53 + crop-x-new/src/components/ui/textarea.tsx | 22 + crop-x-new/src/components/ui/toggle-group.tsx | 61 + crop-x-new/src/components/ui/toggle.tsx | 43 + crop-x-new/src/components/ui/tooltip.tsx | 59 + .../src/components/version-switcher.tsx | 62 + crop-x-new/src/config/constants.ts | 60 + crop-x-new/src/config/features.ts | 85 + crop-x-new/src/env/index.ts | 289 + crop-x-new/src/hooks/use-mobile.ts | 19 + crop-x-new/src/hooks/useDebounce.ts | 17 + crop-x-new/src/hooks/useElementHeight.ts | 101 + crop-x-new/src/hooks/useLocalStorage.ts | 56 + crop-x-new/src/hooks/useTheme.ts | 58 + crop-x-new/src/hooks/useViewHeight.ts | 57 + crop-x-new/src/lib/api/client.gen.ts | 19 + crop-x-new/src/lib/api/client/client.gen.ts | 268 + crop-x-new/src/lib/api/client/index.ts | 26 + crop-x-new/src/lib/api/client/types.gen.ts | 268 + crop-x-new/src/lib/api/client/utils.gen.ts | 332 + crop-x-new/src/lib/api/core/auth.gen.ts | 42 + .../src/lib/api/core/bodySerializer.gen.ts | 100 + crop-x-new/src/lib/api/core/params.gen.ts | 153 + .../src/lib/api/core/pathSerializer.gen.ts | 181 + .../lib/api/core/queryKeySerializer.gen.ts | 136 + .../src/lib/api/core/serverSentEvents.gen.ts | 264 + crop-x-new/src/lib/api/core/types.gen.ts | 118 + crop-x-new/src/lib/api/core/utils.gen.ts | 143 + crop-x-new/src/lib/api/index.ts | 4 + crop-x-new/src/lib/api/sdk.gen.ts | 2382 +++ crop-x-new/src/lib/api/types.gen.ts | 8322 +++++++++ crop-x-new/src/lib/clipboard.ts | 31 + crop-x-new/src/lib/gisMapEngine.ts | 593 + crop-x-new/src/lib/leafletLoader.ts | 98 + crop-x-new/src/lib/mapLoader.ts | 146 + crop-x-new/src/lib/spatialDataService.ts | 937 + crop-x-new/src/lib/usePagination.ts | 78 + crop-x-new/src/lib/utils.ts | 6 + crop-x-new/src/stores/index.ts | 9 + crop-x-new/src/stores/modules/ai-model.ts | 396 + crop-x-new/src/stores/modules/asset.ts | 370 + crop-x-new/src/stores/modules/auth.ts | 92 + crop-x-new/src/stores/modules/config.ts | 675 + crop-x-new/src/stores/modules/global.ts | 145 + crop-x-new/src/stores/modules/irrigation.ts | 458 + crop-x-new/src/stores/modules/land.ts | 344 + crop-x-new/src/stores/modules/machinery.ts | 305 + crop-x-new/src/stores/modules/operation.ts | 400 + crop-x-new/src/stores/useLayoutStore.ts | 65 + crop-x-new/src/styles/body.css | 43 + crop-x-new/src/styles/globals.css | 289 + crop-x-new/src/types/ai-model.ts | 76 + crop-x-new/src/types/auth.ts | 81 + crop-x-new/src/types/index.ts | 414 + crop-x-new/src/types/message.ts | 61 + crop-x-new/src/types/monitor.ts | 112 + crop-x-new/src/types/profile.ts | 27 + crop-x-new/src/types/style.d.ts | 9 + crop-x-new/src/types/system-params.ts | 77 + crop-x-new/src/types/user-management.ts | 163 + crop-x-new/src/utils/token.ts | 11 + crop-x-new/tailwind.config.js | 85 + crop-x-new/temp_file.tsx | 415 + crop-x-new/tsconfig.json | 88 + crop-x-new/tsconfig.node.json | 10 + crop-x-new/vite.config.ts | 51 + 733 files changed, 141413 insertions(+) create mode 100644 crop-x-new/.dev-tools-config.json create mode 100644 crop-x-new/.dockerignore create mode 100644 crop-x-new/.env.example create mode 100644 crop-x-new/.eslintrc.cjs create mode 100644 crop-x-new/.gitignore create mode 100644 crop-x-new/.prettierignore create mode 100644 crop-x-new/.prettierrc create mode 100644 crop-x-new/CHANGELOG.md create mode 100644 crop-x-new/CONTRIBUTING.md create mode 100644 crop-x-new/DEVELOPMENT.md create mode 100644 crop-x-new/Dockerfile create mode 100644 crop-x-new/README.md create mode 100644 crop-x-new/components.json create mode 100644 crop-x-new/docs/开发项目规范.md create mode 100644 crop-x-new/env/.env.dev create mode 100644 crop-x-new/env/.env.prod create mode 100644 crop-x-new/env/.env.test create mode 100644 crop-x-new/env/.env.uat create mode 100644 crop-x-new/eslint.config.mjs create mode 100644 crop-x-new/index.html create mode 100644 crop-x-new/next-env.d.ts create mode 100644 crop-x-new/next.config.js create mode 100644 crop-x-new/openapi-ts.config.ts create mode 100644 crop-x-new/package-lock.json create mode 100644 crop-x-new/package.json create mode 100644 crop-x-new/postcss.config.js create mode 100644 crop-x-new/scripts/build.cjs create mode 100644 crop-x-new/scripts/deploy.js create mode 100644 crop-x-new/scripts/generate-api.cjs create mode 100644 crop-x-new/scripts/openapi.json create mode 100644 crop-x-new/scripts/setup-dev-tools.js create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/basic/customers/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/basic/materials/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/basic/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/basic/suppliers/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/basic/tools/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/equipment/archive/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/equipment/depreciation/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/equipment/dispatch/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/equipment/disposal/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/equipment/maintenance/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/equipment/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/inventory/check/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/inventory/detail/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/inventory/in/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/inventory/location/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/inventory/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/inventory/suggest/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/inventory/warning/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/layout.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/purchase/order/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/purchase/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/purchase/plan/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/report/consumption/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/report/inventory/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/report/overview/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/report/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/requisition/apply/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/requisition/approval/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/requisition/checkout/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/requisition/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/requisition/record/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/return/history/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/return/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/return/process/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/return/register/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-asset/return/settlement/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/archive/classification/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/archive/entry/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/archive/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/archive/qrcode/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/analysis/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/comparison/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/info/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/task/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/error.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/alert-rules/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/health/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/parameter/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/warning/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/layout.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/load-management/device/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/load-management/library/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/load-management/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/load-management/parameter/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/load-management/type/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/loading.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/monitoring/location/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/monitoring/operation/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/monitoring/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/monitoring/status/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/cockpit/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/dispatch/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/record/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/route/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/scheduling/assignment/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/scheduling/dispatch/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/scheduling/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/scheduling/playback/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/security/fence/page.tsx create mode 100644 crop-x-new/src/app/(app)/agricultural-machinery/security/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/application/device-control/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/application/external-system/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/application/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/AddParameterDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/DeleteParameterConfirmDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/DeviceParameterStats.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/DeviceParameterTable.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/DeviceTypeSelector.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/ViewParameterDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/deviceParameterReducer.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/components/AddDeviceTypeDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/components/DeleteConfirmDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/components/DeviceTypeStats.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/components/DeviceTypeTable.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/components/ViewDeviceTypeDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/components/ViewParamsDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/components/deviceTypeReducer.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-type/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/external/components/AddDataSourceDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/external/components/DataSourceCard.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/external/components/FilterPanel.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/external/components/StatisticsOverview.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/external/components/externalDataReducer.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/external/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/external/types.ts create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/iot/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/DecisionBadges.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/DecisionFormDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/DecisionFusionHeader.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/DecisionListCard.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/DecisionResultDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/DeleteConfirmDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/ExecuteConfirmDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/ExecuteResultDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/data.ts create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/components/types.ts create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/fusion/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/log/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/decision/simulation/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/knowledge/generation/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/knowledge/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/layout.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/generation/components/ApplicationEditDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/generation/components/ApplicationGenerateDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/generation/components/ApplicationGenerationReducer.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/generation/components/ApplicationList.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/generation/components/ApplicationRunDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/generation/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-application/scheduling/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/DependencyManageDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/DeployConfigDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/ModelDetailDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/ModelEditDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/PerformanceTuneDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/PermissionManageDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/ServiceConfigDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/components/VersionManageDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/access/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/AddModelDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/DeleteModelDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/ModelAnalytics.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/ModelConfigDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/ModelServiceList.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/PerformanceDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/PermissionDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/RedeployDialog.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/components/modelIntegrationReducer.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/management/types.ts create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/model-integration/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/monitoring/alert/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/monitoring/audit/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/monitoring/model/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/monitoring/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/dashboard/components/DecisionMap.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/dashboard/components/DecisionTrends.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/dashboard/components/LatestDecisions.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/dashboard/components/StatisticsCards.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/dashboard/components/aiDecisionDashboardReducer.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/dashboard/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/detail/page.tsx create mode 100644 crop-x-new/src/app/(app)/ai-crop-model/support/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/layout.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/log/components/MessageLogFilter.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/log/components/MessageLogStats.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/log/components/MessageLogTable.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/log/mock/mockData.ts create mode 100644 crop-x-new/src/app/(app)/central-config/message/log/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/components/MessageInstructions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/components/MessagePreviewDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/components/MessageSendTable.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/components/MessageStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/components/SendMessageDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/components/index.ts create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/send/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/components/MessageTemplateDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/components/MessageTemplateHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/components/MessageTemplateInfo.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/components/MessageTemplateList.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/components/MessageTemplateSearch.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/components/MessageTemplateTestDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/components/index.ts create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/message/template/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/login-log/components/index.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/login-log/components/loginLogApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/login-log/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/components/NetworkLogDetailDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/components/NetworkLogFilters.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/components/NetworkLogInfo.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/components/NetworkLogService.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/components/NetworkLogStats.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/components/NetworkLogTable.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/components/index.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/network-log/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/operation-log/components/index.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/operation-log/components/operationLogApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/operation-log/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/CpuMetricCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/DiskMetricCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/JvmInfoCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/MemoryMetricCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/PerformanceInstructions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/PerformanceTrendChart.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/TomcatInfoCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/components/index.ts create mode 100644 crop-x-new/src/app/(app)/central-config/monitor/performance/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/components/LoginHistory.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/components/NotificationSettings.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/components/PasswordSecurity.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/components/SecurityOverview.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/components/SecurityQuestions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/components/TrustedDevices.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/components/TwoFactorAuth.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/account-security/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/personal-info/components/PersonalInfoForm.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/personal-info/components/PersonalInfoHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/personal-info/components/PersonalInfoStats.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/personal-info/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/personal-center/personal-info/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/system/category/components/CategoryFilters.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/category/components/CategoryFormDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/category/components/CategoryInstructions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/category/components/CategoryTree.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/category/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/category/reducer.ts create mode 100644 crop-x-new/src/app/(app)/central-config/system/category/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/system/dictionary/components/CategoryForm.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/dictionary/components/CategoryList.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/dictionary/components/DeleteConfirmDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/dictionary/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/dictionary/reducer.ts create mode 100644 crop-x-new/src/app/(app)/central-config/system/dictionary/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/system/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/CopyrightInfoCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/FeatureToggleCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/PasswordPolicyCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/PlatformInfoCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/RegionalSettingsCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/SessionManagementCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/SettingsInfoCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/SystemAnnouncementCard.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/components/index.ts create mode 100644 crop-x-new/src/app/(app)/central-config/system/settings/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/components/AuditHistoryDetailDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/components/AuditHistoryFilters.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/components/AuditHistoryInstructions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/components/AuditHistoryList.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/components/AuditHistoryStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/components/auditHistoryApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/components/auditHistoryReducer.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/page.tsx.tmp create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/audit-history/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/AuditPagination.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/AuditSearchAndFilter.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/AuditStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/EnterpriseAuditTable.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/EnterpriseDetailDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/EnterpriseList.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/SearchFilters.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/components/enterpriseAuditApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-audit/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/AuditStatusAlert.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/BankInfoForm.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/BasicInfoForm.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/EnterpriseInfoHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/LegalInfoForm.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/OperationTips.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/OtherInfoForm.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/SystemInfo.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/components/enterpriseInfoApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-info/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-management/components/CreateEnterpriseDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-management/components/enterpriseApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-management/components/enterpriseReducer.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/enterprise-management/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/components/UserDetailDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/components/UserFormDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/components/UserList.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/components/UserManagementFilters.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/components/UserManagementHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/components/UserManagementStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/components/userManagementApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/tenant/user-management/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/DepartmentDeleteDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/DepartmentFormDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/DepartmentHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/DepartmentInstructions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/DepartmentStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/DepartmentTree.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/departmentApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/components/departmentCreateApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/department/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/employee/components/EmployeeDetailDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/employee/components/EmployeeFormDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/employee/components/EmployeeManagementHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/employee/components/EmployeeManagementStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/employee/components/employeeApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/employee/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/employee/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/menu/components/MenuFormDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/menu/components/MenuManagementHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/menu/components/MenuManagementInstructions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/menu/components/MenuManagementStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/menu/components/MenuTree.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/menu/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/menu/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/permission/components/PermissionManagementHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/permission/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/permission/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/components/RoleDetailDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/components/RoleFormDialog.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/components/RoleManagementHeader.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/components/RoleManagementInstructions.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/components/RoleManagementStatsCards.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/components/roleApi.ts create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/page.tsx create mode 100644 crop-x-new/src/app/(app)/central-config/user/role/types.ts create mode 100644 crop-x-new/src/app/(app)/central-config/映射关系.md create mode 100644 crop-x-new/src/app/(app)/farming-operation/archive/aggregation/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/archive/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/archive/trace/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/archive/view/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/calendar/gantt/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/calendar/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/calendar/progress/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/calendar/view/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/execution/log/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/execution/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/execution/record/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/execution/type/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/issue/assign/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/issue/collaborate/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/issue/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/issue/report/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/knowledge/category/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/knowledge/management/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/knowledge/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/knowledge/search/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/layout.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/performance/hours/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/performance/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/performance/schedule/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/performance/staff/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/performance/statistics/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/planning/allocation/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/planning/creation/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/planning/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/planning/progress/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/task/assignment/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/task/management/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/task/monitoring/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/task/page.tsx create mode 100644 crop-x-new/src/app/(app)/farming-operation/task/statistics/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/layer-sampling/components/ControlPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/layer-sampling/components/DataAnalysis.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/layer-sampling/components/DataTable.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/layer-sampling/components/UsageGuide.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/layer-sampling/components/Visualization3D.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/layer-sampling/components/layerSamplingReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/layer-sampling/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/AddSamplePointDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/DeleteConfirmDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/EditSamplePointDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/LayerDataDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/ProfileInformation.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/SamplePointsList.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/SoilDataContent.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/SpatialDistribution.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/StatisticalAnalysis.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/StatisticsCards.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/UsageGuide.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/components/soilDataReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-data/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-quality/components/SoilQualityAnalysis.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-quality/components/soilQualityService.ts create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-quality/components/soilTypes.ts create mode 100644 crop-x-new/src/app/(app)/land-information/analysis/soil-quality/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/classification/components/LandClassificationManagement.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/classification/components/LandTagManagement.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/classification/components/landClassificationReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/classification/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/context/components/FilterPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/context/components/StatisticsResults.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/context/components/UsageExamples.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/context/components/landStatisticsReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/context/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/manage/components/LandAttachments.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/manage/components/LandAttributes.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/manage/components/LandBasicInfo.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/manage/components/LandMapContainer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/manage/components/LandOwnershipInfo.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/manage/components/LandVersionHistory.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/manage/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/statistics/components/FilterPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/statistics/components/StatisticsResults.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/statistics/components/UsageExamples.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/statistics/components/landStatisticsReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/archive/statistics/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/components/FieldSelector.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/components/MapComparison.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/components/RadarChart.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/components/ReportGenerator.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/components/ReportList.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/components/YieldNutrientCharts.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/components/chartComparisonReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/chart/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/indicator/components/BasicProperties.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/indicator/components/FieldSelector.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/indicator/components/ManagementStatus.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/indicator/components/NaturalConditions.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/indicator/components/SuitabilityEvaluation.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/indicator/components/multiDimensionReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/indicator/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/report/components/FieldSelector.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/report/components/ReportList.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/report/components/ReportPreview.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/report/components/reportComparisonReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/comparison/report/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/layout.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/draw/components/AdvancedEditorPromo.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/draw/components/DrawingTools.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/draw/components/EditingTools.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/draw/components/FieldEntryDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/draw/components/UsageGuide.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/draw/components/drawEditReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/draw/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/gis/components/FeatureDescription.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/gis/components/MapContainer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/gis/components/MapInfoPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/gis/components/SelectedFieldInfo.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/gis/components/gisMapReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/gis/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/satellite/components/FieldSatellite.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/satellite/components/satelliteImageService.ts create mode 100644 crop-x-new/src/app/(app)/land-information/map/satellite/components/satelliteTypes.ts create mode 100644 crop-x-new/src/app/(app)/land-information/map/satellite/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/spatial-query/components/ExportDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/spatial-query/components/MapPicker.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/spatial-query/components/QueryPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/spatial-query/components/ResultsPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/spatial-query/components/spatialQueryReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/spatial-query/components/spatialQueryUtils.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/map/spatial-query/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/environment/components/DataTrends.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/environment/components/DeviceDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/environment/components/DeviceManagement.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/environment/components/DeviceOverview.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/environment/components/RealTimeMonitoring.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/environment/components/environmentMonitoringReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/environment/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/ControlPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/RealtimeWeatherCards.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/UsageGuide.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/WeatherAlerts.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/WeatherAnalysis.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/WeatherCharts.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/WeatherContent.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/WeatherForecast.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/WeatherHistory.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/components/weatherDataReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/monitoring/weather/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/disposal/components/FieldFilter.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/disposal/components/StatusStats.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/disposal/components/WarningList.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/disposal/components/WorkflowDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/disposal/components/WorkflowGuide.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/disposal/components/disposalReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/disposal/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/monitoring/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/risk/push/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/AnalysisCharts.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/AnalysisControlPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/AnalysisReport.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/AnalysisResults.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/BatchAnalysisPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/BatchEvaluationPanel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/EvaluationModel.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/FactorConfiguration.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/FactorWeights.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/LandBlockSelector.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/SpatialAnalysisContent.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/SpatialDistribution.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/WeightConfiguration.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/batchAnalysisService.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/components/spatialAnalysisReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/auto/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/multiFactor/components/MultiFactorEvaluation.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/multiFactor/components/cropKnowledgeBase.ts create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/multiFactor/components/multiFactorService.ts create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/multiFactor/components/multiFactorTypes.ts create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/multiFactor/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/page.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/recommend/components/CropRecommendations.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/recommend/components/FieldEnvironmentOverview.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/recommend/components/KnowledgeBaseDialog.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/recommend/components/cropRecommendReducer.tsx create mode 100644 crop-x-new/src/app/(app)/land-information/suitability/recommend/page.tsx create mode 100644 crop-x-new/src/app/(app)/layout.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/fertilizer/history-data/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/fertilizer/level-setting/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/fertilizer/stirring-control/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/fertilizer/water-control/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/layout.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/monitoring/alert-logic/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/monitoring/notification-push/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/monitoring/threshold-alert/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/smart/auto/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/smart/history/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/smart/manual/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/smart/model-config/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/smart/realtime/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-control/fertilizer-history/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-control/params/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-control/tank-realtime/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-control/valve-control/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-control/valve-history/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-control/valve-realtime/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-management/component/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-management/device/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-management/mapping/page.tsx create mode 100644 crop-x-new/src/app/(app)/water-fertilizer-control/wf-management/parameter/page.tsx create mode 100644 crop-x-new/src/app/(auth)/layout.tsx create mode 100644 crop-x-new/src/app/(auth)/login/components/LoginForm.tsx create mode 100644 crop-x-new/src/app/(auth)/login/components/authReducer.tsx create mode 100644 crop-x-new/src/app/(auth)/login/page.tsx create mode 100644 crop-x-new/src/app/(auth)/register/layout.tsx create mode 100644 crop-x-new/src/app/(auth)/register/page.tsx create mode 100644 crop-x-new/src/app/error.tsx create mode 100644 crop-x-new/src/app/layout.tsx create mode 100644 crop-x-new/src/app/loading.tsx create mode 100644 crop-x-new/src/app/not-found.tsx create mode 100644 crop-x-new/src/app/page.tsx create mode 100644 crop-x-new/src/components/app-sidebar.tsx create mode 100644 crop-x-new/src/components/auth/AuthContext.tsx create mode 100644 crop-x-new/src/components/auth/CaptchaInput.tsx create mode 100644 crop-x-new/src/components/auth/ClientAuthInterceptor.tsx create mode 100644 crop-x-new/src/components/auth/LoadingScreen.tsx create mode 100644 crop-x-new/src/components/auth/SmartFieldBackground.tsx create mode 100644 crop-x-new/src/components/common/searchFormPagination/components/PaginationComponent.tsx create mode 100644 crop-x-new/src/components/common/searchFormPagination/components/SearchFormComponent.tsx create mode 100644 crop-x-new/src/components/common/searchFormPagination/components/searchFormPaginationReducer.tsx create mode 100644 crop-x-new/src/components/common/searchFormPagination/index.ts create mode 100644 crop-x-new/src/components/common/searchFormPagination/page.tsx create mode 100644 crop-x-new/src/components/field/MapPointPicker.tsx create mode 100644 crop-x-new/src/components/layouts/Main.tsx create mode 100644 crop-x-new/src/components/layouts/Navbar.tsx create mode 100644 crop-x-new/src/components/layouts/SideBar/SideBar.tsx create mode 100644 crop-x-new/src/components/layouts/SideBar/SideBarOld.tsx create mode 100644 crop-x-new/src/components/layouts/SideBar/components/LeftSidebar.tsx create mode 100644 crop-x-new/src/components/layouts/SideBar/components/MainContent.tsx create mode 100644 crop-x-new/src/components/layouts/ThemeToggle.tsx create mode 100644 crop-x-new/src/components/layouts/components/MessageBell.tsx create mode 100644 crop-x-new/src/components/layouts/components/UserProfile.tsx create mode 100644 crop-x-new/src/components/layouts/components/auth/AuthContext.tsx create mode 100644 crop-x-new/src/components/layouts/components/lib/utils.ts create mode 100644 crop-x-new/src/components/layouts/components/ui/badge.tsx create mode 100644 crop-x-new/src/components/layouts/components/ui/button.tsx create mode 100644 crop-x-new/src/components/layouts/components/ui/dialog.tsx create mode 100644 crop-x-new/src/components/layouts/components/ui/popover.tsx create mode 100644 crop-x-new/src/components/layouts/components/ui/scroll-area.tsx create mode 100644 crop-x-new/src/components/layouts/index.css create mode 100644 crop-x-new/src/components/search-form.tsx create mode 100644 crop-x-new/src/components/shared/BaseMap.tsx create mode 100644 crop-x-new/src/components/ui/accordion.tsx create mode 100644 crop-x-new/src/components/ui/alert-dialog.tsx create mode 100644 crop-x-new/src/components/ui/alert.tsx create mode 100644 crop-x-new/src/components/ui/aspect-ratio.tsx create mode 100644 crop-x-new/src/components/ui/avatar.tsx create mode 100644 crop-x-new/src/components/ui/badge.tsx create mode 100644 crop-x-new/src/components/ui/breadcrumb.tsx create mode 100644 crop-x-new/src/components/ui/button-group.tsx create mode 100644 crop-x-new/src/components/ui/button.tsx create mode 100644 crop-x-new/src/components/ui/calendar.tsx create mode 100644 crop-x-new/src/components/ui/card.tsx create mode 100644 crop-x-new/src/components/ui/carousel.tsx create mode 100644 crop-x-new/src/components/ui/chart.tsx create mode 100644 crop-x-new/src/components/ui/checkbox.tsx create mode 100644 crop-x-new/src/components/ui/collapsible.tsx create mode 100644 crop-x-new/src/components/ui/command.tsx create mode 100644 crop-x-new/src/components/ui/context-menu.tsx create mode 100644 crop-x-new/src/components/ui/data-pagination.tsx create mode 100644 crop-x-new/src/components/ui/dialog.tsx create mode 100644 crop-x-new/src/components/ui/drawer.tsx create mode 100644 crop-x-new/src/components/ui/dropdown-menu.tsx create mode 100644 crop-x-new/src/components/ui/empty.tsx create mode 100644 crop-x-new/src/components/ui/field.tsx create mode 100644 crop-x-new/src/components/ui/form.tsx create mode 100644 crop-x-new/src/components/ui/hover-card.tsx create mode 100644 crop-x-new/src/components/ui/input-group.tsx create mode 100644 crop-x-new/src/components/ui/input-otp.tsx create mode 100644 crop-x-new/src/components/ui/input.tsx create mode 100644 crop-x-new/src/components/ui/item.tsx create mode 100644 crop-x-new/src/components/ui/kbd.tsx create mode 100644 crop-x-new/src/components/ui/label.tsx create mode 100644 crop-x-new/src/components/ui/menubar.tsx create mode 100644 crop-x-new/src/components/ui/navigation-menu.tsx create mode 100644 crop-x-new/src/components/ui/pagination.tsx create mode 100644 crop-x-new/src/components/ui/popover.tsx create mode 100644 crop-x-new/src/components/ui/progress.tsx create mode 100644 crop-x-new/src/components/ui/radio-group.tsx create mode 100644 crop-x-new/src/components/ui/resizable.tsx create mode 100644 crop-x-new/src/components/ui/scroll-area.tsx create mode 100644 crop-x-new/src/components/ui/select.tsx create mode 100644 crop-x-new/src/components/ui/separator.tsx create mode 100644 crop-x-new/src/components/ui/sheet.tsx create mode 100644 crop-x-new/src/components/ui/sidebar.tsx create mode 100644 crop-x-new/src/components/ui/skeleton.tsx create mode 100644 crop-x-new/src/components/ui/slider.tsx create mode 100644 crop-x-new/src/components/ui/sonner.tsx create mode 100644 crop-x-new/src/components/ui/spinner.tsx create mode 100644 crop-x-new/src/components/ui/switch.tsx create mode 100644 crop-x-new/src/components/ui/table.tsx create mode 100644 crop-x-new/src/components/ui/tabs.tsx create mode 100644 crop-x-new/src/components/ui/textarea.tsx create mode 100644 crop-x-new/src/components/ui/toggle-group.tsx create mode 100644 crop-x-new/src/components/ui/toggle.tsx create mode 100644 crop-x-new/src/components/ui/tooltip.tsx create mode 100644 crop-x-new/src/components/version-switcher.tsx create mode 100644 crop-x-new/src/config/constants.ts create mode 100644 crop-x-new/src/config/features.ts create mode 100644 crop-x-new/src/env/index.ts create mode 100644 crop-x-new/src/hooks/use-mobile.ts create mode 100644 crop-x-new/src/hooks/useDebounce.ts create mode 100644 crop-x-new/src/hooks/useElementHeight.ts create mode 100644 crop-x-new/src/hooks/useLocalStorage.ts create mode 100644 crop-x-new/src/hooks/useTheme.ts create mode 100644 crop-x-new/src/hooks/useViewHeight.ts create mode 100644 crop-x-new/src/lib/api/client.gen.ts create mode 100644 crop-x-new/src/lib/api/client/client.gen.ts create mode 100644 crop-x-new/src/lib/api/client/index.ts create mode 100644 crop-x-new/src/lib/api/client/types.gen.ts create mode 100644 crop-x-new/src/lib/api/client/utils.gen.ts create mode 100644 crop-x-new/src/lib/api/core/auth.gen.ts create mode 100644 crop-x-new/src/lib/api/core/bodySerializer.gen.ts create mode 100644 crop-x-new/src/lib/api/core/params.gen.ts create mode 100644 crop-x-new/src/lib/api/core/pathSerializer.gen.ts create mode 100644 crop-x-new/src/lib/api/core/queryKeySerializer.gen.ts create mode 100644 crop-x-new/src/lib/api/core/serverSentEvents.gen.ts create mode 100644 crop-x-new/src/lib/api/core/types.gen.ts create mode 100644 crop-x-new/src/lib/api/core/utils.gen.ts create mode 100644 crop-x-new/src/lib/api/index.ts create mode 100644 crop-x-new/src/lib/api/sdk.gen.ts create mode 100644 crop-x-new/src/lib/api/types.gen.ts create mode 100644 crop-x-new/src/lib/clipboard.ts create mode 100644 crop-x-new/src/lib/gisMapEngine.ts create mode 100644 crop-x-new/src/lib/leafletLoader.ts create mode 100644 crop-x-new/src/lib/mapLoader.ts create mode 100644 crop-x-new/src/lib/spatialDataService.ts create mode 100644 crop-x-new/src/lib/usePagination.ts create mode 100644 crop-x-new/src/lib/utils.ts create mode 100644 crop-x-new/src/stores/index.ts create mode 100644 crop-x-new/src/stores/modules/ai-model.ts create mode 100644 crop-x-new/src/stores/modules/asset.ts create mode 100644 crop-x-new/src/stores/modules/auth.ts create mode 100644 crop-x-new/src/stores/modules/config.ts create mode 100644 crop-x-new/src/stores/modules/global.ts create mode 100644 crop-x-new/src/stores/modules/irrigation.ts create mode 100644 crop-x-new/src/stores/modules/land.ts create mode 100644 crop-x-new/src/stores/modules/machinery.ts create mode 100644 crop-x-new/src/stores/modules/operation.ts create mode 100644 crop-x-new/src/stores/useLayoutStore.ts create mode 100644 crop-x-new/src/styles/body.css create mode 100644 crop-x-new/src/styles/globals.css create mode 100644 crop-x-new/src/types/ai-model.ts create mode 100644 crop-x-new/src/types/auth.ts create mode 100644 crop-x-new/src/types/index.ts create mode 100644 crop-x-new/src/types/message.ts create mode 100644 crop-x-new/src/types/monitor.ts create mode 100644 crop-x-new/src/types/profile.ts create mode 100644 crop-x-new/src/types/style.d.ts create mode 100644 crop-x-new/src/types/system-params.ts create mode 100644 crop-x-new/src/types/user-management.ts create mode 100644 crop-x-new/src/utils/token.ts create mode 100644 crop-x-new/tailwind.config.js create mode 100644 crop-x-new/temp_file.tsx create mode 100644 crop-x-new/tsconfig.json create mode 100644 crop-x-new/tsconfig.node.json create mode 100644 crop-x-new/vite.config.ts diff --git a/crop-x-new/.dev-tools-config.json b/crop-x-new/.dev-tools-config.json new file mode 100644 index 0000000..1fb15e7 --- /dev/null +++ b/crop-x-new/.dev-tools-config.json @@ -0,0 +1,27 @@ +{ + "tools": { + "eslint": { + "enabled": false, + "description": "ESLint代码检查工具", + "configFile": ".eslintrc.cjs", + "ignoreFile": ".eslintignore" + }, + "prettier": { + "enabled": false, + "description": "Prettier代码格式化工具", + "configFile": ".prettierrc", + "ignoreFile": ".prettierignore" + }, + "husky": { + "enabled": false, + "description": "Git hooks工具", + "hooksDir": ".husky" + } + }, + "scripts": { + "setup": "node scripts/setup-dev-tools.js", + "enable": "node scripts/setup-dev-tools.js --enable", + "disable": "node scripts/setup-dev-tools.js --disable" + }, + "note": "将enabled设置为true来启用对应的开发工具,或运行 npm run scripts:enable 来启用所有工具" +} \ No newline at end of file diff --git a/crop-x-new/.dockerignore b/crop-x-new/.dockerignore new file mode 100644 index 0000000..6bc5fc7 --- /dev/null +++ b/crop-x-new/.dockerignore @@ -0,0 +1,97 @@ +# Dependencies +node_modules +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Build outputs +dist +build +.output +.nuxt +.next +.vite +.cache + +# Development files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# IDE files +.vscode +.idea +*.swp +*.swo +*~ + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Git +.git +.gitignore +.gitattributes + +# Logs +logs +*.log + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Documentation +README.md +CHANGELOG.md +LICENSE.md +docs + +# Config files that shouldn't be in container +.eslintrc* +.prettierrc* +prettier.config.js +.editorconfig + +# Testing +jest.config.js +cypress +test +tests + +# Misc +.turbo +.vercel +.netlify + +# TypeScript +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Package manager lock files (keep package-lock.json but ignore others) +yarn.lock +pnpm-lock.yaml + +# Docker +Dockerfile +docker-compose*.yml +.dockerignore \ No newline at end of file diff --git a/crop-x-new/.env.example b/crop-x-new/.env.example new file mode 100644 index 0000000..5b24214 --- /dev/null +++ b/crop-x-new/.env.example @@ -0,0 +1,35 @@ +# 环境配置示例文件 +# 复制此文件为 .env.local 并根据实际情况修改配置 + +# 当前环境: development, test, production +NODE_ENV=development + +# API 服务器地址 (用于 API 代码生成) +API_BASE_URL=http://localhost:8080 + +# React 应用配置 (用于前端运行时) +REACT_APP_API_URL=http://localhost:8080 + +# OpenAPI 文档地址 +REACT_APP_OPENAPI_URL=http://localhost:8080/openapi.json + +# 其他可选配置 +# REACT_APP_API_KEY=your-api-key-here +# REACT_APP_DEBUG=true + +# 不同环境配置示例: +# +# 开发环境: +# NODE_ENV=development +# API_BASE_URL=http://localhost:8080 +# REACT_APP_API_URL=http://localhost:8080 +# +# 测试环境: +# NODE_ENV=test +# API_BASE_URL=http://test-api.example.com +# REACT_APP_API_URL=http://test-api.example.com +# +# 生产环境: +# NODE_ENV=production +# API_BASE_URL=https://api.example.com +# REACT_APP_API_URL=https://api.example.com \ No newline at end of file diff --git a/crop-x-new/.eslintrc.cjs b/crop-x-new/.eslintrc.cjs new file mode 100644 index 0000000..b15529b --- /dev/null +++ b/crop-x-new/.eslintrc.cjs @@ -0,0 +1,47 @@ +// ESLint配置文件 - 需要通过 .dev-tools-config.json 启用 +// 运行 `npm run scripts:enable` 来启用ESLint + +const fs = require('fs'); +const path = require('path'); + +// 检查开发工具配置 +const configPath = path.join(__dirname, '.dev-tools-config.json'); +let eslintEnabled = false; + +try { + const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); + eslintEnabled = config.tools?.eslint?.enabled === true; +} catch (error) { + console.warn('⚠️ 无法读取开发工具配置,ESLint将被禁用'); +} + +// 如果ESLint被禁用,返回空配置 +if (!eslintEnabled) { + console.log('ℹ️ ESLint已在配置中被禁用,如需启用请运行: npm run scripts:enable'); + module.exports = {}; + return; +} + +// ESLint正常配置 +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + '@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs', 'node_modules'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], + '@typescript-eslint/no-explicit-any': 'warn', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + }, +}; \ No newline at end of file diff --git a/crop-x-new/.gitignore b/crop-x-new/.gitignore new file mode 100644 index 0000000..07f1780 --- /dev/null +++ b/crop-x-new/.gitignore @@ -0,0 +1,113 @@ +# Dependencies +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Production builds +.next/ +out/ +dist/ +build/ + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# API 相关文件 +# 忽略从服务器下载的临时 OpenAPI JSON 文件 +api/v1-from-server.json + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ +*.lcov + +# nyc test coverage +.nyc_output + +# Dependency directories +jspm_packages/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt + +# Storybook build outputs +.out +.storybook-out + +# Temporary folders +tmp/ +temp/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Local development +.local + +# TypeScript +*.tsbuildinfo \ No newline at end of file diff --git a/crop-x-new/.prettierignore b/crop-x-new/.prettierignore new file mode 100644 index 0000000..a3aa6c1 --- /dev/null +++ b/crop-x-new/.prettierignore @@ -0,0 +1,18 @@ +node_modules +dist +build +*.log +.env +.env.local +.env.development.local +.env.test.local +.env.production.local +coverage +.nyc_output +.cache +.temp +.vscode +.idea +package-lock.json +yarn.lock +pnpm-lock.yaml \ No newline at end of file diff --git a/crop-x-new/.prettierrc b/crop-x-new/.prettierrc new file mode 100644 index 0000000..11e3564 --- /dev/null +++ b/crop-x-new/.prettierrc @@ -0,0 +1,12 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "bracketSpacing": true, + "bracketSameLine": false, + "arrowParens": "avoid", + "endOfLine": "lf" +} \ No newline at end of file diff --git a/crop-x-new/CHANGELOG.md b/crop-x-new/CHANGELOG.md new file mode 100644 index 0000000..e5ecf41 --- /dev/null +++ b/crop-x-new/CHANGELOG.md @@ -0,0 +1,277 @@ +# 更新日志 + +所有重要的项目变更都会记录在此文件中。 + +格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/), +项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 + +## [未发布] + +### 计划中 +- 完整的UI组件库集成 +- 农业管理专用组件开发 +- 视觉一致性验证系统 +- 完整的测试覆盖 +- 国际化支持 + +## [1.0.0] - 2024-01-20 + +### 🎉 首次发布 + +#### ✨ 新增功能 +- **完整的项目基础架构** + - React 18 + Vite 6 + TypeScript 技术栈 + - shadcn/ui + Tailwind CSS UI框架 + - 完整的开发工具链(可选启用) + - 标准化的项目目录结构 + +- **React应用完整实现** + - main.tsx 应用入口文件 + - App.tsx 主应用组件(包含完整管理系统界面) + - 欢迎页面和系统状态展示 + - 技术栈展示和快速操作 + - 主题切换功能 + - 响应式布局设计 + +- **开发工具配置** + - ESLint + Prettier 代码质量工具 + - 可选的开发工具开关控制 + - VSCode 工作区配置 + - 自动化代码格式化和检查 + +- **构建优化** + - Vite 6 构建配置优化 + - 代码分割和懒加载 + - 热重载优化(<2秒响应时间) + - 生产环境构建优化 + +- **样式系统** + - 农业主题色彩系统 + - 响应式设计支持 + - 深色/浅色主题切换 + - 完整的设计令牌 + +- **类型系统** + - 完整的 TypeScript 类型定义 + - 农业管理领域模型 + - API 响应类型定义 + - 组件 Props 类型规范 + +- **工具函数库** + - 日期时间处理工具 + - 数据格式化函数 + - 农机状态映射 + - 通用工具函数 + +- **自定义 Hooks** + - useTheme 主题管理 + - useLocalStorage 本地存储 + - useDebounce 防抖处理 + - 扩展中... + +- **项目文档** + - 详细的 README.md + - 完整的开发指南 + - 贡献指南和行为准则 + - API 文档(规划中) + +#### 🏗️ 架构改进 +- 模块化的项目结构 +- 组件驱动的开发模式 +- 类型安全的开发体验 +- 可扩展的架构设计 + +#### 📦 依赖管理 +- **核心依赖**: + - React 18.3.1 + - Vite 6.3.5 + - TypeScript 5.6.2 + - Tailwind CSS 3.4.13 + +- **UI组件库**: + - 完整的 Radix UI 组件集合 + - shadcn/ui 组件库基础 + - Lucide React 图标库 + +- **开发工具**: + - ESLint 9.11.1 + - Prettier 3.3.3 + - Husky 9.1.6(可选) + +#### 🎨 设计系统 +- 农业绿色主题 (#16a34a) +- 一致的视觉语言 +- 响应式断点系统 +- 无障碍设计支持 + +#### 📚 文档完善 +- **README.md**: 项目介绍和快速开始 +- **DEVELOPMENT.md**: 详细的开发指南 +- **CONTRIBUTING.md**: 贡献流程和规范 +- **CHANGELOG.md**: 变更记录 + +#### 🔧 开发体验 +- 热重载开发服务器 +- TypeScript 严格模式 +- 自动代码格式化 +- 智能代码补全 + +### 🎯 功能模块规划 + +#### 🚜 农机管理 (Machinery) +- [x] 模块结构搭建 +- [x] 基础组件框架 +- [ ] 农机档案管理 +- [ ] 驾驶员管理 +- [ ] 负载管理 +- [ ] 运行监控 +- [ ] 故障管理 +- [ ] 作业管理 +- [ ] 数据分析 +- [ ] 调度管理 +- [ ] 安全管理 + +#### 🌾 地块管理 (Field) +- [x] 模块结构搭建 +- [ ] 地块档案 +- [ ] 土壤信息管理 +- [ ] 作物管理 +- [ ] 种植计划 + +#### 📋 农事管理 (Operation) +- [x] 模块结构搭建 +- [ ] 作业计划 +- [ ] 进度跟踪 +- [ ] 成本核算 +- [ ] 产量预测 + +#### 💰 资产管理 (Asset) +- [x] 模块结构搭建 +- [ ] 设备资产管理 +- [ ] 库存管理 +- [ ] 采购管理 +- [ ] 维护记录 + +#### 🤖 AI模型 (AI Model) +- [x] 模块结构搭建 +- [ ] 智能预测 +- [ ] 图像识别 +- [ ] 数据分析 +- [ ] 决策支持 + +#### 💧 灌溉控制 (Irrigation) +- [x] 模块结构搭建 +- [ ] 智能灌溉 +- [ ] 水资源管理 +- [ ] 设备控制 +- [ ] 用水统计 + +#### ⚙️ 配置管理 (Config) +- [x] 模块结构搭建 +- [ ] 系统配置 +- [ ] 用户管理 +- [ ] 权限设置 +- [ ] 数据字典 + +### 🚀 性能指标 + +- **构建时间**: < 30秒 +- **热重载**: < 2秒 +- **首屏加载**: < 3秒(目标) +- **代码分割**: 按模块自动分割 +- **包大小**: 优化中... + +### 🔒 安全性 +- TypeScript 类型安全 +- 输入验证框架 +- XSS 防护 +- CSRF 保护(规划中) + +### 🌍 国际化 +- 中文界面支持 +- 英文界面(规划中) +- 多语言切换(规划中) + +### 📱 兼容性 +- **现代浏览器**: Chrome 90+, Firefox 88+, Safari 14+, Edge 90+ +- **移动端**: iOS Safari 14+, Chrome Mobile 90+ +- **响应式**: 完整的移动端适配 + +### 🧪 测试覆盖 +- **单元测试**: 规划中 +- **集成测试**: 规划中 +- **E2E测试**: 规划中 +- **视觉回归测试**: 规划中 + +## 📈 版本规划 + +### [1.1.0] - 计划中 +- 完整的UI组件库实现 +- 农机管理核心功能 +- 基础数据可视化 +- 用户认证系统 + +### [1.2.0] - 计划中 +- 地块管理功能 +- 农事管理功能 +- 移动端适配优化 +- API 集成 + +### [1.3.0] - 计划中 +- 资产管理功能 +- AI 模型集成 +- 高级数据分析 +- 报表系统 + +### [2.0.0] - 计划中 +- 完整的功能覆盖 +- 微服务架构 +- 实时数据同步 +- 第三方系统集成 + +## 🏷️ 标签说明 + +- `✨ 新增功能`: 新的功能特性 +- `🔧 改进`: 现有功能的改进 +- `🐛 修复`: Bug修复 +- `📚 文档`: 文档相关变更 +- `🎨 样式`: UI/UX 相关变更 +- `⚡ 性能`: 性能优化 +- `🔒 安全`: 安全相关修复 +- `💥 破坏性变更`: 不兼容的API变更 +- `🗑️ 废弃`: 功能的废弃 + +## 🤝 贡献者 + +感谢所有为项目做出贡献的开发者! + +- **主要贡献者**: [@your-username](https://github.com/your-username) +- **项目维护**: [@maintainer](https://github.com/maintainer) + +### 贡献统计 + +- 代码提交: XX 次 +- 功能添加: XX 个 +- Bug修复: XX 个 +- 文档更新: XX 次 + +## 📞 反馈和支持 + +如果您有任何问题或建议,请通过以下方式联系我们: + +- **GitHub Issues**: [项目Issues页面](https://github.com/your-username/agriculture-management/issues) +- **GitHub Discussions**: [讨论区](https://github.com/your-username/agriculture-management/discussions) +- **邮箱**: support@example.com + +## 🔗 相关链接 + +- [项目主页](https://github.com/your-username/agriculture-management) +- [在线演示](https://demo.example.com) +- [API 文档](https://docs.example.com/api) +- [设计规范](https://design.example.com) + +--- + +**注意**: 本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/) 规范。 + +📅 **最后更新**: 2024-01-20 \ No newline at end of file diff --git a/crop-x-new/CONTRIBUTING.md b/crop-x-new/CONTRIBUTING.md new file mode 100644 index 0000000..9ba63e8 --- /dev/null +++ b/crop-x-new/CONTRIBUTING.md @@ -0,0 +1,382 @@ +# 贡献指南 + +感谢您对智慧农业生产管理系统项目的关注!我们欢迎所有形式的贡献,包括但不限于代码贡献、问题反馈、文档改进和功能建议。 + +## 📋 目录 + +- [行为准则](#行为准则) +- [如何贡献](#如何贡献) +- [开发流程](#开发流程) +- [代码规范](#代码规范) +- [提交规范](#提交规范) +- [问题报告](#问题报告) +- [功能请求](#功能请求) +- [代码审查](#代码审查) +- [发布流程](#发布流程) + +## 🤝 行为准则 + +### 我们的承诺 + +为了营造一个开放和友好的环境,我们作为贡献者和维护者承诺让每个人都能参与我们的项目和社区。 + +### 我们的标准 + +积极行为包括: + +- 使用友好和包容的语言 +- 尊重不同的观点和经验 +- 优雅地接受建设性批评 +- 关注对社区最有利的事情 +- 对其他社区成员表示同理心 + +不可接受的行为包括: + +- 使用性化的语言或图像 +- 人身攻击或政治攻击 +- 公开或私下骚扰 +- 未经明确许可发布他人的私人信息 +- 其他在专业环境中可能被认为不当的行为 + +## 🚀 如何贡献 + +### 1. 准备工作 + +```bash +# Fork 项目到您的GitHub账户 +# 克隆您的fork +git clone https://github.com/your-username/agriculture-management.git + +# 添加上游仓库 +git remote add upstream https://github.com/original-owner/agriculture-management.git + +# 安装依赖 +cd agriculture-management +npm install + +# 启动开发环境 +npm run dev +``` + +### 2. 选择贡献方式 + +- 🐛 **报告Bug**: 发现问题并创建详细的问题报告 +- 💡 **功能建议**: 提出新功能或改进建议 +- 📝 **文档改进**: 完善项目文档 +- 💻 **代码贡献**: 修复bug或实现新功能 + +## 🔄 开发流程 + +### 1. 创建分支 + +```bash +# 确保master分支是最新的 +git checkout master +git pull upstream master + +# 创建功能分支 +git checkout -b feature/your-feature-name +# 或 +git checkout -b fix/your-bug-fix +``` + +### 2. 开发过程 + +```bash +# 启用开发工具(可选) +npm run scripts:enable + +# 进行开发 +# ... + +# 运行测试 +npm run test + +# 代码检查 +npm run lint + +# 类型检查 +npm run type-check + +# 格式化代码 +npm run format +``` + +### 3. 提交更改 + +```bash +# 添加更改 +git add . + +# 提交(遵循提交规范) +git commit -m "feat(component): add new machinery status component" + +# 推送到您的fork +git push origin feature/your-feature-name +``` + +### 4. 创建Pull Request + +1. 访问GitHub上的fork页面 +2. 点击"New Pull Request" +3. 选择正确的分支 +4. 填写PR模板 +5. 提交Pull Request + +## 📏 代码规范 + +### TypeScript规范 + +```typescript +// ✅ 好的示例 +interface MachineryData { + id: string + name: string + status: MachineryStatus + lastMaintenance?: Date +} + +const getMachineryStatus = async (id: string): Promise => { + const response = await fetch(`/api/machinery/${id}`) + return response.json() +} + +// ❌ 避免的写法 +const getData = (id) => { + return fetch('/api/machinery/' + id).then(r => r.json()) +} +``` + +### React组件规范 + +```typescript +// ✅ 函数式组件 + TypeScript +interface MachineryCardProps { + machinery: MachineryData + onEdit?: (machinery: MachineryData) => void + className?: string +} + +export const MachineryCard: React.FC = ({ + machinery, + onEdit, + className +}) => { + const handleEdit = useCallback(() => { + onEdit?.(machinery) + }, [machinery, onEdit]) + + return ( +
+ {/* 组件内容 */} +
+ ) +} +``` + +### 样式规范 + +```typescript +// ✅ 使用Tailwind CSS + cn工具 +import { cn } from '@/lib/utils' + +const Button = ({ variant = 'primary', className, ...props }) => ( + + + ) +} +``` + +### 组件样式规范 + +```css +/* 优先使用Tailwind CSS类名 */ +.example-component { + @apply rounded-lg border border-gray-200 p-4 bg-white shadow-sm; +} + +.example-title { + @apply text-lg font-semibold text-gray-900 mb-2; +} + +/* 必要时使用传统CSS */ +.example-component:hover { + transform: translateY(-1px); + transition: transform 0.2s ease; +} +``` + +### shadcn/ui组件使用 + +```typescript +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { Badge } from '@/components/ui/badge' + +export const MachineryCard = ({ machinery }) => { + return ( + + + {machinery.name} + + {machinery.status} + + + + {/* 内容 */} + + + ) +} +``` + +## 🔄 状态管理 + +### useState使用 + +```typescript +const [formData, setFormData] = useState({ + name: '', + email: '', + phone: '' +}) + +// 更新对象状态 +const handleChange = (field: string, value: string) => { + setFormData(prev => ({ + ...prev, + [field]: value + })) +} +``` + +### useReducer使用 + +```typescript +type State = { + count: number + loading: boolean +} + +type Action = + | { type: 'increment' } + | { type: 'decrement' } + | { type: 'setLoading'; payload: boolean } + +const reducer = (state: State, action: Action): State => { + switch (action.type) { + case 'increment': + return { ...state, count: state.count + 1 } + case 'decrement': + return { ...state, count: state.count - 1 } + case 'setLoading': + return { ...state, loading: action.payload } + default: + return state + } +} + +const [state, dispatch] = useReducer(reducer, { + count: 0, + loading: false +}) +``` + +### 自定义Hooks + +```typescript +// src/hooks/useApi.ts +import { useState, useEffect } from 'react' + +export function useApi(url: string) { + const [data, setData] = useState(null) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + + useEffect(() => { + const fetchData = async () => { + try { + setLoading(true) + const response = await fetch(url) + const result = await response.json() + setData(result) + } catch (err) { + setError(err.message) + } finally { + setLoading(false) + } + } + + fetchData() + }, [url]) + + return { data, loading, error } +} +``` + +## 🎨 样式指南 + +### Tailwind CSS最佳实践 + +```typescript +// ✅ 使用cn工具函数合并类名 +import { cn } from '@/lib/utils' + +const Button = ({ variant = 'primary', className, ...props }) => { + return ( + + + ) +} +``` + +## 🌐 API集成 + +### API配置 + +```typescript +// src/config/api.ts +export const API_CONFIG = { + baseUrl: import.meta.env.VITE_API_BASE_URL, + timeout: 10000 +} + +export const apiClient = { + get: (url: string): Promise => { + return fetch(`${API_CONFIG.baseUrl}${url}`).then(res => res.json()) + }, + + post: (url: string, data: any): Promise => { + return fetch(`${API_CONFIG.baseUrl}${url}`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(data) + }).then(res => res.json()) + } +} +``` + +### 数据获取Hook + +```typescript +// src/hooks/useMachinery.ts +import { useState, useEffect } from 'react' +import { apiClient } from '@/config/api' + +export function useMachinery() { + const [machinery, setMachinery] = useState([]) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + + useEffect(() => { + apiClient.get('/machinery') + .then(setMachinery) + .catch(setError) + .finally(() => setLoading(false)) + }, []) + + return { machinery, loading, error } +} +``` + +## 🧪 测试指南 + +### 单元测试示例 + +```typescript +// src/components/__tests__/Button.test.tsx +import { render, screen, fireEvent } from '@testing-library/react' +import { Button } from '../Button' + +describe('Button', () => { + it('renders correctly', () => { + render() + expect(screen.getByRole('button')).toBeInTheDocument() + }) + + it('calls onClick when clicked', () => { + const handleClick = jest.fn() + render() + + fireEvent.click(screen.getByRole('button')) + expect(handleClick).toHaveBeenCalledTimes(1) + }) +}) +``` + +### Hook测试 + +```typescript +// src/hooks/__tests__/useCounter.test.ts +import { renderHook, act } from '@testing-library/react' +import { useCounter } from '../useCounter' + +describe('useCounter', () => { + it('initializes with default value', () => { + const { result } = renderHook(() => useCounter()) + expect(result.current.count).toBe(0) + }) + + it('increments count', () => { + const { result } = renderHook(() => useCounter()) + + act(() => { + result.current.increment() + }) + + expect(result.current.count).toBe(1) + }) +}) +``` + +## 🐛 调试技巧 + +### React DevTools + +安装 React Developer Tools 浏览器扩展: + +```bash +# 检查组件状态 +# 查看组件层次结构 +# 性能分析 +``` + +### VSCode调试配置 + +```json +// .vscode/launch.json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug React", + "type": "node", + "request": "launch", + "program": "${workspaceFolder}/node_modules/.bin/vite", + "args": ["--mode", "development"], + "env": { + "NODE_ENV": "development" + } + } + ] +} +``` + +### 常用调试代码 + +```typescript +// 开发环境调试 +if (import.meta.env.DEV) { + console.log('Debug info:', data) +} + +// 性能监控 +console.time('component-render') +// ... 组件渲染逻辑 +console.timeEnd('component-render') + +// 网络请求调试 +const debugFetch = async (url: string) => { + console.log(`Fetching: ${url}`) + const start = performance.now() + + try { + const response = await fetch(url) + const data = await response.json() + console.log(`Fetched in ${performance.now() - start}ms`, data) + return data + } catch (error) { + console.error(`Fetch failed after ${performance.now() - start}ms`, error) + throw error + } +} +``` + +## ❓ 常见问题 + +### Q: 如何添加新的UI组件? + +A: +1. 在 `src/components/ui/` 下创建组件文件 +2. 使用 shadcn/ui 设计规范 +3. 添加 TypeScript 类型定义 +4. 编写组件文档 + +### Q: 如何处理表单验证? + +A: 推荐使用 react-hook-form + zod: + +```typescript +import { useForm } from 'react-hook-form' +import { zodResolver } from '@hookform/resolvers/zod' +import { z } from 'zod' + +const schema = z.object({ + name: z.string().min(1, '名称不能为空'), + email: z.string().email('邮箱格式不正确') +}) + +const { register, handleSubmit, formState: { errors } } = useForm({ + resolver: zodResolver(schema) +}) +``` + +### Q: 如何优化性能? + +A: +1. 使用 React.memo 避免不必要的重渲染 +2. 使用 useMemo 和 useCallback 缓存计算结果 +3. 实现虚拟列表处理大数据 +4. 使用代码分割减少初始加载时间 + +### Q: 如何处理国际化? + +A: 项目支持多语言配置: + +```typescript +// src/config/i18n.ts +export const locales = { + 'zh-CN': '简体中文', + 'en-US': 'English' +} + +export const translations = { + 'zh-CN': { + 'machinery.title': '农机管理', + 'machinery.status.running': '运行中' + }, + 'en-US': { + 'machinery.title': 'Machinery Management', + 'machinery.status.running': 'Running' + } +} +``` + +### Q: 如何配置开发工具? + +A: 使用项目提供的脚本: + +```bash +# 查看状态 +npm run scripts:setup + +# 启用工具 +npm run scripts:enable + +# 禁用工具 +npm run scripts:disable +``` + +## 📚 更多资源 + +- [React 官方文档](https://react.dev/) +- [TypeScript 手册](https://www.typescriptlang.org/docs/) +- [Tailwind CSS 文档](https://tailwindcss.com/docs) +- [shadcn/ui 组件库](https://ui.shadcn.com/) +- [Vite 构建工具](https://vitejs.dev/) + +--- + +💡 **提示**: 如果遇到问题,请先查看常见问题部分,或联系项目维护者获取帮助。 \ No newline at end of file diff --git a/crop-x-new/Dockerfile b/crop-x-new/Dockerfile new file mode 100644 index 0000000..99f3f9e --- /dev/null +++ b/crop-x-new/Dockerfile @@ -0,0 +1,47 @@ +FROM registry.dev.maimaiag.com/library/node:20-alpine AS base +RUN npm config set registry https://registry.npmmirror.com/ + +# Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json package-lock.json ./ +RUN npm ci --registry=https://registry.npmmirror.com/ + + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +RUN npm run build + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 + +ENV HOSTNAME="0.0.0.0" + +CMD ["node", "server.js"] \ No newline at end of file diff --git a/crop-x-new/README.md b/crop-x-new/README.md new file mode 100644 index 0000000..4201c9b --- /dev/null +++ b/crop-x-new/README.md @@ -0,0 +1,322 @@ +# 智慧农业生产管理系统 + +基于 React 18 + Vite 6 + TypeScript + shadcn/ui 构建的现代化农业管理平台。 + +## 🌟 项目特色 + +- 🚀 **现代化技术栈**: React 18 + Vite 6 + TypeScript +- 🎨 **优美UI设计**: 基于 shadcn/ui + Tailwind CSS +- 📱 **响应式布局**: 支持桌面端和移动端 +- 🌾 **农业专业化**: 针对农业生产场景定制 +- 🔧 **开发工具**: ESLint + Prettier + Husky(可选启用) +- 📊 **数据可视化**: 集成 Recharts 图表库 + +## 🏗️ 技术架构 + +### 核心技术栈 + +- **前端框架**: React 18.3.1 +- **构建工具**: Vite 6.3.5 +- **类型系统**: TypeScript 5.6.2 +- **UI组件库**: shadcn/ui + Radix UI +- **样式方案**: Tailwind CSS 3.4.13 +- **状态管理**: React Context + Hooks +- **路由系统**: 自定义基于路径的路由 +- **图表库**: Recharts 2.15.2 +- **图标库**: Lucide React 0.487.0 +- **日期处理**: date-fns 4.1.0 + +### 项目结构 + +``` +crop-x/ +├── 📄 public/ # 静态资源 +├── 📄 src/ +│ ├── 📄 components/ # 组件目录 +│ │ ├── ui/ # shadcn/ui基础组件 +│ │ ├── common/ # 通用业务组件 +│ │ └── layouts/ # 布局组件 +│ ├── 📄 pages/ # 页面组件 +│ │ ├── machinery/ # 农机管理 +│ │ ├── field/ # 地块管理 +│ │ ├── operation/ # 农事管理 +│ │ ├── asset/ # 资产管理 +│ │ ├── ai-model/ # AI模型 +│ │ ├── irrigation/ # 灌溉控制 +│ │ └── config/ # 配置管理 +│ ├── 📄 hooks/ # 自定义Hooks +│ ├── 📄 lib/ # 工具库 +│ ├── 📄 config/ # 配置文件 +│ ├── 📄 types/ # 类型定义 +│ ├── 📄 utils/ # 工具函数 +│ ├── 📄 assets/ # 资源文件 +│ ├── 📄 styles/ # 样式文件 +│ └── 📄 App.tsx # 主应用组件 +├── 📄 docs/ # 文档目录 +├── 📄 scripts/ # 构建脚本 +└── 📄 .vscode/ # VSCode配置 +``` + +## 🚀 快速开始 + +### 环境要求 + +- Node.js >= 18.0.0 +- npm >= 8.0.0 + +### 安装依赖 + +```bash +npm install +``` + +### 开发环境 + +```bash +npm run dev +``` + +项目将在 http://localhost:3000 启动(如果端口被占用会自动切换) + +**✅ React应用验证**: +- 启动时间: < 2秒(实测2012ms) +- 热重载: 正常工作 +- 主题切换: 支持深色/浅色模式 +- 响应式设计: 支持桌面端和移动端 + +### 构建生产版本 + +```bash +npm run build +``` + +### 预览生产版本 + +```bash +npm run preview +``` + +## 🛠️ 开发工具 + +项目配置了可选的开发工具链,默认禁用,可通过以下命令启用: + +### 查看开发工具状态 + +```bash +npm run scripts:setup +``` + +### 启用所有开发工具 + +```bash +npm run scripts:enable +``` + +### 禁用所有开发工具 + +```bash +npm run scripts:disable +``` + +### 代码检查 + +```bash +# ESLint检查 +npm run lint + +# ESLint自动修复 +npm run lint:fix +``` + +### 代码格式化 + +```bash +# Prettier格式化 +npm run format + +# 检查格式 +npm run format:check +``` + +### 类型检查 + +```bash +npm run type-check +``` + +## 📁 功能模块 + +### 🚜 农机管理 (Machinery) +- 农机档案管理 +- 驾驶员管理 +- 负载管理 +- 运行监控 +- 故障管理 +- 作业管理 +- 数据分析 +- 调度管理 +- 安全管理 + +### 🌾 地块管理 (Field) +- 地块档案 +- 土壤信息 +- 作物管理 +- 种植计划 + +### 📋 农事管理 (Operation) +- 作业计划 +- 进度跟踪 +- 成本核算 +- 产量预测 + +### 💰 资产管理 (Asset) +- 设备资产 +- 库存管理 +- 采购管理 +- 维护记录 + +### 🤖 AI模型 (AI Model) +- 智能预测 +- 图像识别 +- 数据分析 +- 决策支持 + +### 💧 灌溉控制 (Irrigation) +- 智能灌溉 +- 水资源管理 +- 设备控制 +- 用水统计 + +### ⚙️ 配置管理 (Config) +- 系统配置 +- 用户管理 +- 权限设置 +- 数据字典 + +## 🎨 设计系统 + +### 颜色系统 + +- **主色调**: 农业绿色 (#16a34a) +- **辅助色**: 技术蓝色 (#3b82f6) +- **状态色**: 运行(绿)、空闲(灰)、维护(黄)、故障(红)、离线(深灰) + +### 组件规范 + +- 基于 shadcn/ui 组件库 +- 遵循 Material Design 设计规范 +- 支持深色/浅色主题切换 +- 完整的无障碍支持 + +## 🔧 配置说明 + +### 环境变量 + +```bash +# API地址 +VITE_API_BASE_URL=http://localhost:8080/api + +# 应用标题 +VITE_APP_TITLE=智慧农业生产管理系统 + +# 开发模式 +VITE_DEV_MODE=true +``` + +### 开发工具配置 + +通过 `.dev-tools-config.json` 文件控制开发工具的启用状态: + +```json +{ + "tools": { + "eslint": { "enabled": false }, + "prettier": { "enabled": false }, + "husky": { "enabled": false } + } +} +``` + +## 📖 开发指南 + +### 添加新页面 + +1. 在对应模块下创建页面组件 +2. 在路由配置中添加路由规则 +3. 在菜单配置中添加菜单项 + +### 添加新组件 + +1. 在 `src/components/ui/` 下创建UI组件 +2. 遵循 shadcn/ui 设计规范 +3. 添加 TypeScript 类型定义 +4. 编写组件文档和使用示例 + +### 样式规范 + +- 使用 Tailwind CSS 类名 +- 遵循 BEM 命名规范 +- 响应式设计优先 +- 支持深色模式 + +## 🧪 测试 + +```bash +# 运行测试 +npm run test + +# 运行测试覆盖率 +npm run test:coverage +``` + +## 📤 部署 + +### Docker部署 + +```bash +# 构建镜像 +docker build -t agriculture-management . + +# 运行容器 +docker run -p 3000:3000 agriculture-management +``` + +### 传统部署 + +```bash +# 构建项目 +npm run build + +# 部署build目录到Web服务器 +``` + +## 📝 更新日志 + +### v1.0.0 (2024-01-20) +- ✨ 初始版本发布 +- 🚀 完成基础架构搭建 +- 🎨 集成shadcn/ui组件库 +- 📱 实现响应式设计 +- 🌾 添加农业专业化功能 + +## 🤝 贡献指南 + +1. Fork 项目 +2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) +3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) +4. 推送到分支 (`git push origin feature/AmazingFeature`) +5. 创建 Pull Request + +## 📄 许可证 + +本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 + +## 📞 联系我们 + +- 项目地址: [GitHub Repository](https://github.com/your-username/agriculture-management) +- 问题反馈: [Issues](https://github.com/your-username/agriculture-management/issues) +- 邮箱: your-email@example.com + +--- + +⭐ 如果这个项目对你有帮助,请给我们一个星标! \ No newline at end of file diff --git a/crop-x-new/components.json b/crop-x-new/components.json new file mode 100644 index 0000000..566c7e3 --- /dev/null +++ b/crop-x-new/components.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/styles/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "registries": {} +} diff --git a/crop-x-new/docs/开发项目规范.md b/crop-x-new/docs/开发项目规范.md new file mode 100644 index 0000000..069d686 --- /dev/null +++ b/crop-x-new/docs/开发项目规范.md @@ -0,0 +1,1477 @@ +# 开发项目规范 + +## 通用开发规约 + +### 1. 文件头部注释规范(filekorolheader) + +**规范要求:** +所有页面文件(page.tsx)必须在最上方添加filekorolheader注释,说明文件对应的页面功能、路径和用途。 + +**格式标准:** +```tsx +/** + * filekorolheader: [页面名称] - [功能描述] + * 功能:[主要功能列表] + * 路径:[页面路由路径] + * 规范:[遵循的特殊规范说明] + */ +``` + +**示例:** +```tsx +/** + * filekorolheader: 物联设备数据接入页面 - IoT设备数据管理中心 + * 功能:设备列表管理、实时数据监控、数据对比分析、报告生成 + * 路径:/ai-crop-model/data-sense-center/iot + * 规范:遵循crop-x/docs/开发项目规范.md,使用useReducer状态管理,shadcn语义化样式 + */ +``` + +**实施要点:** +- 必须放在文件最顶部,在'use client'之前 +- 页面名称要准确反映业务功能 +- 功能描述要简明扼要,列出核心功能 +- 路径必须是完整的路由路径 +- 如有特殊规范遵循,需要在规范字段说明 + +--- + +## path:land-information/archive/statistics,name:统计分析页面开发经验 + +### 总体开发经验总结 + +在实现统计分析页面过程中,我们遵循了以下8条核心开发规范,确保代码质量、可维护性和用户体验的一致性。 + +### 1. shadcn 样式系统优先原则 + +**经验总结:** +- 优先使用shadcn的语义化颜色类(如 `bg-card`、`bg-background`)替代硬编码的Tailwind CSS颜色 +- 避免使用 `bg-red-500` 等具体颜色值,改用 `bg-red-50 dark:bg-red-950` 等语义化类 +- 统计卡片使用 `bg-green-50 dark:bg-green-950` 等主题感知的背景色 + +**最佳实践:** +```tsx +// ✅ 推荐写法 + + + +// ❌ 避免写法 + + +``` + +### 2. 标签组件样式精确还原原则 + +**经验总结:** +- 严格按照参考文件实现标签的边框和颜色样式 +- 使用 `style` 属性精确控制颜色,确保1:1还原视觉效果 +- 不同类型的标签有特定的样式特征需要保持一致 + +**关键实现:** +```tsx +// 土壤类型标签:前缀彩色圆点 +
+ +// 种植模式标签:前缀emoji + 固定绿色边框 +{mode.emoji} +style={{ + backgroundColor: filters.plantingModes.includes(mode.key) ? '#16a34a' : 'transparent', + borderColor: '#16a34a', +}} + +// 自定义标签:纯色边框背景 +style={{ + backgroundColor: filters.tags.includes(tag.name) ? tag.color : 'transparent', + borderColor: tag.color, +}} +``` + +### 3. 最小化修改原则 + +**经验总结:** +- 严格遵循参考文件的功能边界,不添加多余功能 +- 保持与原有系统的功能一致性 +- 避免过度设计,专注核心功能实现 + +**实施要点:** +- 只实现参考文件中明确展示的功能 +- 保持相同的用户交互流程 +- 维持原有的数据结构和逻辑 + +### 4. 暗色主题全面支持原则 + +**经验总结:** +- 所有组件都必须支持暗色主题切换 +- 使用 `dark:` 前缀提供暗色模式样式 +- 确保在暗色主题下的可读性和视觉效果 + +**实现模式:** +```tsx +// 统计卡片暗色主题 + +
+ +// 背景和边框暗色主题 + + +``` + +### 5. useReducer 状态管理架构原则 + +**经验总结:** +- 使用useReducer实现复杂状态管理,避免prop drilling +- 通过dispatch实现跨组件状态同步 +- 集中化状态逻辑,提高代码可维护性 + +**架构模式:** +```tsx +// Reducer定义 +export interface LandStatisticsState { + fields: Land[]; + filters: FilterCondition; + statistics: StatisticsResult | null; + chartType: 'bar' | 'pie'; +} + +// Action类型定义 +export type LandStatisticsAction = + | { type: 'SET_FIELDS'; payload: Land[] } + | { type: 'UPDATE_FILTER'; payload: { key: keyof FilterCondition; value: any } } + | { type: 'SET_STATISTICS'; payload: StatisticsResult | null }; + +// 状态同步使用 +const handleFilterChange = (key: keyof FilterCondition, value: any) => { + dispatch({ type: 'UPDATE_FILTER', payload: { key, value } }); +}; +``` + +### 6. 模块化组件架构原则 + +**经验总结:** +- 每个页面建立独立的components文件夹 +- 按功能职责拆分组件,确保单一职责 +- 组件间通过props和回调函数通信 + +**目录结构示例:** +``` +src/app/(app)/land-information/archive/statistics/ +├── page.tsx # 主页面 +└── components/ + ├── landStatisticsReducer.tsx # 状态管理 + ├── FilterPanel.tsx # 筛选面板 + ├── StatisticsResults.tsx # 统计结果 + └── UsageExamples.tsx # 使用示例 +``` + +### 7. 完整依赖引用实现原则 + +**经验总结:** +- 仔细分析参考文件的import依赖,确保完整实现 +- 将所有引用的组件都实现在components目录中 +- 保持与参考文件相同的组件结构和功能 + +**依赖检查清单:** +- UI组件:Card, Button, Badge, Input, Label等 +- 图标组件:lucide-react图标 +- 图表组件:recharts相关组件 +- 工具函数:toast通知等 + +### 8. 1:1 功能还原实现原则 + +**经验总结:** +- 严格按照参考文件的功能逻辑实现 +- 保持相同的用户交互体验 +- 确保数据流和业务逻辑的一致性 + +**关键实现要点:** +- 筛选条件的多选逻辑 +- 数据统计的计算方法 +- 图表切换和显示逻辑 +- 数据导出功能 + +## 开发工具和最佳实践 + +### 推荐工具链 +- **状态管理**:React useReducer +- **UI组件库**:shadcn/ui +- **样式系统**:Tailwind CSS + 语义化颜色 +- **图表库**:Recharts +- **图标库**:Lucide React +- **通知系统**:Sonner + +### 代码质量保证 +- TypeScript严格类型检查 +- ESLint代码规范检查 +- 组件props类型定义完整 +- 状态管理逻辑清晰可维护 + +### 测试数据管理 +- localStorage数据持久化 +- 完整的测试数据覆盖所有业务场景 +- 数据初始化和清理机制完善 + +通过遵循这些开发规范,我们可以确保代码的一致性、可维护性和用户体验的统一性。 + +--- +### 9.注意乱码原则 +生成的代码注意看看有没有乱码,必须遵守utf-8编码 +### 10.接口调用原则。 +接口必须调用 D:\code\repotest\smart-crop-ui\crop-x\src\lib\api\sdk.gen.ts 这个里面的接口 +比如 /api/v1/departments/tree 这个路径,就是要调用export const getDepartmentTreeApiV1DepartmentsDepartmentsTreeGet = (options?: Options) => { + return (options?.client ?? client).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/api/v1/departments/departments/tree', + ...options + }); +}; +实际使用的时候,要参考D:\code\repotest\smart-crop-ui\crop-x\src\app\(app)\central-config\tenant\audit-history\components\auditHistoryApi.ts 里面 +import { + getTenantAuditLogsApiV1TenantsAuditLogsGet, +} from "@/lib/api/sdk.gen"; 这个引入和用法。 + +### 11.Next.js 文件命名规范原则 + +**规范要求:** +所有文件名必须严格遵循 Next.js 的文件命名规范,确保路由系统和页面组件能够正确识别。 + +**规范标准:** + +#### 页面文件命名规范 +- **页面文件**:必须使用 `page.tsx` 作为页面文件名 +- **布局文件**:必须使用 `layout.tsx` 作为布局文件名 +- **加载状态**:必须使用 `loading.tsx` 作为加载状态文件名 +- **错误处理**:必须使用 `error.tsx` 作为错误处理文件名 +- **未找到页面**:必须使用 `not-found.tsx` 作为404页面文件名 + +#### 路由参数文件命名规范 +- **动态路由**:使用 `[param].tsx` 格式,如 `[id].tsx` +- **可选参数**:使用 `[[param]].tsx` 格式 +- **全部匹配**:使用 `[...param].tsx` 格式 +- **可选全部匹配**:使用 `[[...param]].tsx` 格式 + +#### 组件和工具文件命名规范 +- **React 组件**:使用 PascalCase 命名,如 `UserProfile.tsx` +- **工具函数**:使用 camelCase 命名,如 `dateUtils.ts` +- **类型定义**:使用 camelCase 命名,如 `userTypes.ts` +- **常量文件**:使用 UPPER_SNAKE_CASE 命名,如 `API_CONSTANTS.ts` + +**示例目录结构:** +``` +src/app/(app)/land-information/ +├── layout.tsx # 布局文件 +├── page.tsx # 主页面 +├── loading.tsx # 加载状态 +├── error.tsx # 错误处理 +└── archive/ + ├── page.tsx # 归档页面 + ├── statistics/ + │ ├── page.tsx # 统计页面 + │ └── components/ + │ ├── FilterPanel.tsx # 组件:PascalCase + │ └── statisticsReducer.tsx # 工具文件:camelCase + └── [id]/ + └── page.tsx # 动态路由页面 +``` + +**实施要点:** +- 严格遵循文件命名规范,不得随意修改文件名 +- 页面文件必须使用 `page.tsx`,不能使用其他名称 +- 动态路由参数必须使用方括号 `[param]` 格式 +- 组件和工具文件遵循通用的 JavaScript/TypeScript 命名规范 + +## path:land-information/archive/statistics,name:统计分析页面开发经验与问题解决 + +### 问题1:图表横轴显示不完整 + +**问题描述:** +- 初始实现中,图表只显示有数据的土壤类型和种植模式 +- 没有数据的项目在横轴上不显示,导致图表看起来不完整 + +**原始需求分析:** +- 土壤类型分布应显示所有定义的土壤类型,即使数量为0 +- 种植模式分布应显示所有定义的种植模式,提供完整的分类视图 + +**解决方案:** +- 修改数据计算逻辑,从"基于筛选结果生成数据"改为"基于所有定义的分类生成数据" +- 使用 `state.soilTypes.map()` 和 `state.plantingModes.map()` 确保显示所有定义的分类 + +**代码改进对比:** +```tsx +// ❌ 初始实现(只显示有数据的分类) +const soilTypeMap = new Map(); +filteredFields.forEach(f => { + const current = soilTypeMap.get(f.soilType) || { count: 0, area: 0 }; + soilTypeMap.set(f.soilType, { + count: current.count + 1, + area: current.area + f.area, + }); +}); +const soilTypeDistribution = Array.from(soilTypeMap.entries()).map(([key, value]) => ({ + name: state.soilTypes.find(s => s.key === key)?.name || key, + count: value.count, + area: value.area, + color: state.soilTypes.find(s => s.key === key)?.color || '#6b7280', +})); + +// ✅ 最终实现(显示所有定义的分类,包括数量为0的) +const soilTypeDistribution = state.soilTypes.map(soilType => { + const count = filteredFields.filter(f => f.soilType === soilType.key).length; + const area = filteredFields + .filter(f => f.soilType === soilType.key) + .reduce((sum, f) => sum + f.area, 0); + return { + name: soilType.name, + count, + area, + color: soilType.color, + }; +}); +``` + +### 问题2:标签字体粗细不符合视觉要求 + +**问题描述:** +- 筛选标签(土壤类型、种植模式、自定义标签)的字体过粗 +- 用户反馈需要调整为细字体,以匹配参考文件的视觉效果 + +**原始需求分析:** +- 参考文件显示的是细字效果,需要精确还原视觉体验 +- 字体粗细影响整体UI的美观和专业度 + +**解决方案:** +- 给所有Badge组件添加 `font-light` 类名 +- 保持其他样式(颜色、边框、悬停效果)不变,只调整字体粗细 + +**代码改进:** +```tsx +// ❌ 初始实现 + + {type.name} + + +// ✅ 最终实现(添加字体细体) + + {type.name} + +``` + +### 问题3:测试数据覆盖不完整影响演示效果 + +**问题描述:** +- localStorage中存在旧数据,导致某些土壤类型和种植模式没有对应的地块数据 +- 部分图表项目显示为空或缺失,影响演示效果和用户体验 + +**原始需求分析:** +- 所有土壤类型和种植模式都应该有对应的测试数据 +- 确保图表能完整展示所有分类的统计数据,即使是0也要显示 +- 为用户提供完整的演示环境 + +**解决方案:** +- 创建完整的测试数据集,覆盖所有7种土壤类型和5种种植模式 +- 在 `loadData` 函数中初始化这些测试数据,确保首次访问时有完整数据 +- 通过localStorage持久化,确保数据在页面刷新后仍然存在 + +**测试数据设计原则:** +```tsx +const testFields = [ + { + id: '1', + code: 'TD001', + name: '东区沙质土试验田', + area: 85.5, + location: '东区1号地块', + soilType: 'sandy', // 沙质土 + plantingMode: 'conventional', // 传统种植 + tags: ['有机种植', '高产示范', '滴灌设施'], + // ...其他完整字段 + }, + // 总计10个地块,确保每个土壤类型和种植模式都有覆盖 + // 沙质土(2个)、黏质土(2个)、壤质土(2个)、泥炭土(1个)、石灰质土(1个)、粉质土(1个)、岩石土(1个) + // 传统种植(3个)、有机种植(3个)、温室种植(2个)、水培种植(1个)、气培种植(1个) +]; +``` + +### 问题4:语义化颜色类使用存在不一致 + +**问题描述:** +- 部分组件仍使用硬编码的Tailwind颜色类 +- 没有充分利用shadcn的语义化颜色系统 +- 在暗色主题下可能存在兼容性问题 + +**原始需求分析:** +- 优先使用 `bg-gray` 等语义化颜色类 +- 避免写死的Tailwind CSS样式,提高主题一致性 +- 建立统一的颜色使用标准 + +**解决方案:** +- 全面检查并替换硬编码颜色为语义化颜色类 +- 统计卡片使用 `bg-green-50 dark:bg-green-950` 等主题感知背景色 +- 确保在暗色主题下的可读性和视觉效果一致性 + +**颜色使用改进:** +```tsx +// ❌ 不一致的硬编码实现 + +
+ + +// ✅ 统一的语义化颜色实现 + +
+ + +``` + +### 问题5:多组件状态同步和数据管理复杂性 + +**问题描述:** +- 多个组件之间需要共享状态,使用prop传递会导致代码复杂且难以维护 +- 数据更新时容易出现状态不一致的问题 +- 缺乏集中化的状态管理机制 + +**原始需求分析:** +- 使用useReducer实现集中化状态管理 +- 确保组件间数据同步的可靠性和性能 +- 简化组件间的通信逻辑 + +**解决方案:** +- 设计完整的状态管理架构,包括状态接口、Action类型和Reducer函数 +- 通过dispatch实现跨组件状态更新,避免prop drilling +- 使用localStorage进行数据持久化,确保页面刷新后状态保持 +- 建立清晰的数据流和状态更新模式 + +**状态管理架构设计:** +```tsx +// 完整的状态接口定义 +export interface LandStatisticsState { + fields: Land[]; + tags: LandTag[]; + soilTypes: SoilType[]; + plantingModes: PlantingMode[]; + filters: FilterCondition; + statistics: StatisticsResult | null; + chartType: 'bar' | 'pie'; +} + +// 细粒度的Action类型定义 +export type LandStatisticsAction = + | { type: 'SET_FIELDS'; payload: Land[] } + | { type: 'SET_TAGS'; payload: LandTag[] } + | { type: 'SET_SOIL_TYPES'; payload: SoilType[] } + | { type: 'SET_PLANTING_MODES'; payload: PlantingMode[] } + | { type: 'SET_FILTERS'; payload: FilterCondition } + | { type: 'UPDATE_FILTER'; payload: { key: keyof FilterCondition; value: any } } + | { type: 'TOGGLE_ARRAY_FILTER'; payload: { key: 'soilTypes' | 'plantingModes' | 'tags'; value: string } } + | { type: 'CLEAR_FILTERS' } + | { type: 'SET_STATISTICS'; payload: StatisticsResult | null } + | { type: 'SET_CHART_TYPE'; payload: 'bar' | 'pie' }; + +// 跨组件状态同步实现 +const handleFilterChange = (key: keyof FilterCondition, value: any) => { + dispatch({ type: 'UPDATE_FILTER', payload: { key, value } }); +}; + +const handleToggleArrayFilter = (key: 'soilTypes' | 'plantingModes' | 'tags', value: string) => { + const currentArray = state.filters[key]; + const newArray = currentArray.includes(value) + ? currentArray.filter(v => v !== value) + : [...currentArray, value]; + dispatch({ type: 'TOGGLE_ARRAY_FILTER', payload: { key, value } }); +}; +``` + +## 开发经验对比总结 + +### 与原始要求的差异分析 + +| 原始要求 | 实际实现 | 差异说明 | 解决过程 | +|---------|---------|---------|---------| +| 使用shadcn语义化样式 | 完全实现 + 统一规范 | 需要建立统一的使用标准 | 全面替换硬编码颜色,建立语义化颜色使用指南 | +| 1:1还原标签样式 | 精确还原 + 字体优化 | 字体粗细需要调整以匹配视觉 | 添加font-light类名,保持样式一致性 | +| 不动无关内容 | 完全遵循 | 严格保持功能边界,不添加多余功能 | 只实现参考文件中的明确功能 | +| 暗色主题支持 | 全面支持 | 需要系统化处理所有UI组件 | 使用dark:前缀系统化处理暗色主题 | +| useReducer状态管理 | 架构实现 + 最佳实践 | 需要设计状态同步机制和数据持久化 | 建立完整的状态管理架构和同步机制 | +| 模块化组件 | 完全拆分 | 需要合理的组件职责划分和通信机制 | 按功能领域拆分组件,通过props和回调通信 | +| 完整依赖引用 | 1:1还原 | 需要仔细分析引用关系和依赖完整性 | 建立依赖检查清单,确保所有引用组件完整实现 | +| 1:1功能还原 | 完整实现 | 需要精确还原业务逻辑和用户体验 | 严格对照参考文件实现所有功能 | + +### 关键学习点和改进 + +1. **数据完整性思维**:不仅要实现功能,还要考虑数据的完整性和演示效果的完整性 + - 学会了从用户体验角度思考数据展示的完整性 + - 理解了即使count为0也应该显示的重要性 + +2. **细节精确把控**:字体粗细、颜色、边框等视觉细节需要精确还原 + - 培养了对UI细节的敏感度 + - 掌握了通过用户反馈快速迭代优化的方法 + +3. **状态管理设计**:useReducer不仅是技术选择,更是架构设计决策 + - 深入理解了状态管理的架构设计原则 + - 掌握了跨组件状态同步的最佳实践 + +4. **渐进式优化**:在开发过程中根据反馈不断调整和改进 + - 学会了灵活应对开发过程中的需求变化 + - 建立了基于反馈的快速响应机制 + +5. **文档化习惯**:将开发过程中的经验和教训记录下来,形成知识积累 + - 认识到文档化对团队协作和知识传承的重要性 + - 建立了完整的开发规范文档体系 + +--- + +## path:land-information/map/gis,name:GIS地图管理开发经验与问题解决 + +### 总体开发经验总结 + +GIS地图管理页面的开发过程是一个复杂的技术集成挑战,涉及到第三方地图库的集成、异步资源加载、多层级组件交互等多个技术难点。通过这次开发,我们建立了一套完整的GIS应用开发模式,特别是在处理真实地图数据源和优雅降级方面积累了宝贵经验。 + +### 问题1:地图组件初始化时缺少真实地图数据源 + +**问题描述:** +- 初始实现的BaseMap组件只是简单的模拟展示,无法加载真实的卫星图像 +- 用户反馈参考文件可以看到真实的卫星图,但当前页面只显示占位符 +- 缺乏对真实地图服务商的集成支持 + +**原始需求分析:** +- 需要支持真实的卫星影像显示,而不是简单的占位地图 +- 必须支持多种地图图层切换(卫星、电子、地形、混合) +- 需要完整的地图交互功能,包括缩放、平移、全屏等 + +**解决方案:** +- 复制完整的GISMapEngine实现,支持多种地图提供商 +- 实现leafletLoader动态加载器,支持异步加载地图库 +- 建立真实地图瓦片数据源连接,包括ArcGIS卫星影像和OpenStreetMap + +**代码实现对比:** +```tsx +// ❌ 初始简化实现 +export class GISMapEngine { + constructor(map: any) { + this.map = map; // 只是一个模拟对象 + } + addPolygon(polygon: MapPolygon): void { + this.polygons.set(polygon.id, polygon); // 没有真实渲染 + } +} + +// ✅ 最终完整实现 +export class GISMapEngine { + constructor(config: MapConfig) { + this.provider = config.provider; + this.initialize(config); // 真实初始化流程 + } + + private async initLeaflet(config: MapConfig) { + // 动态加载Leaflet库 + if (!window.L) { + await this.loadLeaflet(); + } + // 创建真实地图实例 + this.map = window.L.map(this.container).setView([center[1], center[0]], zoom); + // 设置真实瓦片图层 + this.getLeafletLayer(layer).addTo(this.map); + } +} +``` + +### 问题2:地图库异步加载和依赖管理复杂性 + +**问题描述:** +- 地图库(Leaflet)需要从CDN异步加载,存在加载失败风险 +- 地图组件需要在库加载完成后才能初始化,存在时序问题 +- 多个地图组件可能重复加载同一资源,造成性能浪费 + +**原始需求分析:** +- 确保地图库能够可靠加载,提供良好的用户体验 +- 处理加载失败的情况,提供优雅的降级方案 +- 优化资源加载性能,避免重复加载 + +**解决方案:** +- 创建leafletLoader统一管理地图库的加载过程 +- 实现加载状态管理和重试机制 +- 建立全局加载状态缓存,避免重复加载 + +**关键实现代码:** +```tsx +// leafletLoader.ts - 统一加载管理 +export const preloadLeaflet = (): Promise => { + return new Promise((resolve) => { + if (leafletLoaded || window.L) { + resolve(true); + return; + } + + if (leafletLoading) { + // 等待正在进行的加载完成 + const checkInterval = setInterval(() => { + if (leafletLoaded || window.L) { + clearInterval(checkInterval); + resolve(true); + } + }, 100); + return; + } + + // 执行实际加载过程 + const script = document.createElement('script'); + script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js'; + script.onload = () => { leafletLoaded = true; resolve(true); }; + script.onerror = () => { resolve(false); }; + document.head.appendChild(script); + }); +}; +``` + +### 问题3:地图组件与状态管理的深度集成 + +**问题描述:** +- 地图组件需要与useReducer状态管理深度集成 +- 地图的异步初始化过程与React生命周期存在冲突 +- 地图事件回调与状态更新的时序同步问题 + +**原始需求分析:** +- 地图操作需要能够更新全局状态(如选中地块、图层切换) +- 状态变化需要能够反映到地图显示上 +- 需要处理地图组件的清理和资源释放 + +**解决方案:** +- 使用useImperativeHandle暴露地图实例方法给父组件 +- 实现地图引擎的引用管理,确保状态同步 +- 建立完整的生命周期管理,包括组件卸载时的资源清理 + +**状态管理集成代码:** +```tsx +// BaseMap组件中的状态集成 +useImperativeHandle(ref, () => ({ + getMapEngine: () => mapEngineRef.current, + addMarker: (marker: Marker) => { + mapEngineRef.current?.addMarker(marker); + }, + addPolygon: (polygon: Polygon) => { + mapEngineRef.current?.addPolygon(polygon); + }, + setCenter: (position: MapPosition, zoom?: number) => { + mapEngineRef.current?.setCenter(position, zoom); + }, +})); + +// 组件卸载时的资源清理 +useEffect(() => { + return () => { + if (mapEngineRef.current) { + mapEngineRef.current.destroy(); + } + }; +}, []); +``` + +### 问题4:真实地图数据源的集成和配置 + +**问题描述:** +- 需要集成多种真实的地图瓦片数据源 +- 不同地图服务商的API格式和坐标系统存在差异 +- 需要处理地图瓦片的加载性能和缓存策略 + +**原始需求分析:** +- 提供真实的卫星影像、电子地图、地形图等多种图层 +- 确保地图数据的准确性和时效性 +- 优化地图加载性能,提供流畅的用户体验 + +**解决方案:** +- 集成多个开源地图数据源,确保服务的可靠性 +- 统一不同数据源的坐标系统和API格式 +- 实现智能的图层切换和缓存机制 + +**地图数据源配置:** +```tsx +private getLeafletLayer(layer: MapLayer) { + const baseLayers: Record = { + // ArcGIS卫星影像 - 真实卫星图 + satellite: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + // OpenStreetMap - 开源电子地图 + street: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + // OpenTopoMap - 开源地形图 + terrain: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', + // 混合图层使用卫星影像作为基础 + hybrid: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + }; + + return window.L.tileLayer(baseLayers[layer], { + attribution: '© OpenStreetMap contributors', + maxZoom: 18, + }); +} +``` + +### 问题5:地图交互功能的完整实现 + +**问题描述:** +- 需要实现地块多边形的渲染和交互 +- 地图标记点的添加和点击事件处理 +- 地图控件(缩放、图层切换、全屏等)的集成 + +**原始需求分析:** +- 地块需要在地图上以彩色多边形形式显示 +- 点击地块需要触发选择事件和状态更新 +- 提供完整的地图导航和操作功能 + +**解决方案:** +- 使用地图引擎的Polygon和Marker API实现地块渲染 +- 建立事件处理机制,连接地图交互和状态管理 +- 集成完整的地图控件套件,提供专业级用户体验 + +**交互功能实现:** +```tsx +// 地块多边形渲染 +const polygon: Polygon = { + id: field.id, + path: field.coordinates, + fillColor: field.color, + strokeColor: field.color, + fillOpacity: 0.3, + strokeWeight: 2, + onClick: () => { + onFieldSelect(field); // 更新全局状态 + toast.success(`已选择: ${field.name}`); + }, +}; +engine.addPolygon(polygon); + +// 地块标记点渲染 +const marker: Marker = { + id: `marker-${field.id}`, + position: { lat: centerLat, lng: centerLng }, + title: field.name, + color: field.color, + onClick: () => { + onFieldSelect(field); + toast.success(`已选择: ${field.name}`); + }, +}; +engine.addMarker(marker); +``` + +## 开发经验对比总结 + +### 与原始要求的差异分析 + +| 原始要求 | 实际实现 | 差异说明 | 解决过程 | +|---------|---------|---------|---------| +| 1:1还原地图功能 | 完整实现 + 真实数据源 | 需要集成真实地图服务商和瓦片数据 | 建立完整的地图引擎架构,支持多种数据源 | +| 第三方库集成 | 专业级集成 | 需要处理异步加载、错误处理、性能优化 | 实现统一加载器和优雅降级机制 | +| 组件状态管理 | 深度集成 + 生命周期管理 | 地图组件与React状态系统需要深度集成 | 使用useImperativeHandle和引用管理 | +| 交互功能实现 | 完整交互套件 | 需要实现多边形、标记、控件等完整功能 | 集成地图引擎API,建立事件处理机制 | + +### 关键学习点和改进 + +1. **第三方库集成思维**:学会了如何可靠地集成和管理复杂的第三方JavaScript库 + - 掌握了异步加载、错误处理、优雅降级的完整流程 + - 理解了库版本管理和兼容性处理的重要性 + +2. **地图API应用经验**:深入了解了Web地图开发的技术栈和最佳实践 + - 学会了瓦片地图的原理和多种数据源的使用 + - 掌握了地图交互事件的处理和状态同步机制 + +3. **React高级模式应用**:在复杂组件中应用了useImperativeHandle、useRef等高级React模式 + - 深入理解了React组件的暴露方法和引用传递机制 + - 掌握了复杂组件生命周期管理的最佳实践 + +4. **性能优化意识**:建立了地图应用的性能优化思维 + - 学会了资源懒加载和缓存策略的设计 + - 理解了大型第三方库对应用性能的影响和优化方法 + +5. **用户体验设计**:在技术实现中始终考虑用户体验 + - 建立了加载状态和错误处理的设计模式 + - 掌握了优雅降级和渐进增强的实现方法 + +6. **架构设计能力**:设计了可扩展的地图应用架构 + - 建立了插件化的地图引擎设计 + +--- + +## path:src/app/(app)/land-information/map/draw,name:数字化绘制与编辑页面开发经验 + +### 1. **复杂状态管理设计** +- **useReducer 模式应用**:使用 useReducer 管理复杂的编辑状态,包含多个布尔状态、数组和对象 +- **状态结构设计**:设计了包含高级编辑器状态、活动标签页、地块数据、保存对话框等的状态结构 +- **Action 设计模式**:采用类型安全的 Action 设计,支持状态更新、字段管理、对话框控制等操作 + +### 2. **组件化架构设计** +- **模块化组件结构**:将复杂功能拆分为6个独立组件,每个组件负责单一职责 + - `drawEditReducer.tsx`:状态管理核心 + - `DrawingTools.tsx`:绘制工具组件 + - `EditingTools.tsx`:编辑工具组件 + - `FieldEntryDialog.tsx`:地块信息录入对话框 + - `UsageGuide.tsx`:使用指南组件 + - `AdvancedEditorPromo.tsx`:高级编辑器推广组件 +- **组件通信设计**:通过 props 和回调函数实现组件间的数据传递和事件处理 + +### 3. **Canvas 绘图技术实现** +- **多种绘制模式**:实现点、线、多边形、矩形等多种绘制模式 +- **实时交互反馈**:支持鼠标移动吸附、节点高亮、实时预览等功能 +- **几何计算算法**: + - Shoelace 公式计算多边形面积 + - 坐标距离计算周长 + - 点在多边形内判断算法 + - 自相交检测算法 + +### 4. **高级编辑功能实现** +- **节点编辑**:支持拖拽节点、添加节点、删除节点 +- **地块分割**:绘制分割线将地块分成两部分,支持垂直和水平分割 +- **地块合并**:多地块选择和凸包算法合并 +- **历史记录管理**:实现撤销/重做功能,支持操作历史追踪 + +### 5. **用户体验设计** +- **分步骤操作引导**:为复杂操作提供详细的操作步骤说明 +- **实时状态反馈**:Toast 通知、状态栏显示、操作确认等 +- **键盘快捷键支持**:Ctrl+Z 撤销、Ctrl+S 保存、Delete 清除、Esc 取消 +- **视觉状态管理**:选中高亮、禁用状态、加载状态等 + +### 6. **数据管理与持久化** +- **表单验证设计**:完整的表单验证逻辑,支持必填项检查和格式验证 +- **本地存储集成**:与 localStorage 集成,支持地块数据的持久化 +- **自动数据生成**:地块编号、名称的自动生成逻辑 +- **标签管理功能**:支持标签的添加、删除和展示 + +### 7. **技术规范遵循** +- **shadcn/ui 语义样式**:使用 `bg-card`、`bg-muted`、`text-muted-foreground` 等语义化样式 +- **暗色主题支持**:完整支持暗色主题,使用 `dark:` 前缀 +- **TypeScript 类型安全**:完整的类型定义,确保类型安全 +- **响应式设计**:支持不同屏幕尺寸的适配 + +### 8. **开发效率提升** +- **组件复用设计**:通用组件可在其他页面复用 +- **配置化参数**:画布尺寸、吸附距离等参数可配置 +- **错误处理机制**:完善的错误处理和用户提示 +- **代码组织结构**:清晰的文件结构和命名规范 + +### 9. **性能优化考虑** +- **事件处理优化**:使用 useCallback 避免不必要的重渲染 +- **状态更新策略**:合理的状态更新时机和批量处理 +- **Canvas 渲染优化**:减少不必要的重绘和计算 + +### 10. **可扩展性设计** +- **插件化架构**:编辑工具采用插件化设计,易于扩展新功能 +- **接口标准化**:统一的接口设计,便于功能模块替换 +- **配置化开发**:支持通过配置文件调整功能和行为 + - 理解了复杂应用中的组件分层和职责划分 + +--- + +## path:src/components/common/searchFormPagination,name:搜索、表格、分页三合一组件使用心得 + +### 组件概述 + +SearchFormPagination 是一个高度可配置的复合组件,集成了搜索表单、数据表格和分页功能。该组件采用了现代React开发模式,通过配置驱动的方式实现复杂数据展示页面的快速开发。 + +### 架构设计 + +#### 1. 组件层次结构 + +``` +SearchFormPagination (主组件) +├── SearchFormComponent (搜索表单) +│ ├── Input (文本搜索框) +│ └── Select (下拉选择框) +├── Card (表格容器) +│ ├── Table (数据表格) +│ │ ├── TableHeader (表头) +│ │ └── TableBody (表体) +│ └── PaginationComponent (分页组件) +└── LoadingOverlay (加载遮罩) +``` + +#### 2. 核心文件结构 + +``` +src/components/common/searchFormPagination/ +├── index.ts # 主组件导出 +├── page.tsx # SearchFormPagination主组件 +├── components/ +│ ├── SearchFormComponent.tsx # 搜索表单组件 +│ ├── PaginationComponent.tsx # 分页组件 +│ └── searchFormPaginationReducer.tsx # 状态管理(可选) +``` + +### 核心功能特性 + +#### 1. 搜索表单功能 + +**防抖搜索机制**: +```tsx +// 关键实现:300ms防抖,避免频繁API调用 +useEffect(() => { + const timer = setTimeout(() => { + onFiltersChangeRef.current(localFilters); + }, 300); + + return () => clearTimeout(timer); +}, [localFilters]); +``` + +**多字段配置支持**: +```tsx +const searchFields: SearchFieldConfig[] = [ + { + key: 'search', + type: 'text', + placeholder: '搜索企业名称、编码...', + }, + { + key: 'audit_status', + type: 'select', + defaultValue: 'all', + options: [ + { value: 'all', label: '全部状态' }, + { value: 'draft', label: '草稿' }, + // ...更多选项 + ], + }, +]; +``` + +#### 2. 表格展示功能 + +**动态列配置**: +```tsx +const columns: TableColumnConfig[] = [ + { + key: 'name', + label: '企业名称', + sortable: true, // 支持排序 + render: (value, row) => ( +
{value}
+ ), + }, + { + key: 'status', + label: '状态', + render: (value) => getStatusBadge(value), // 自定义渲染 + }, +]; +``` + +**加载状态处理**: +```tsx +// 表格加载遮罩 - 提升用户体验 +{loading && ( +
+
+ + 加载中... +
+
+)} +``` + +#### 3. 分页功能 + +**完整分页配置**: +```tsx +interface PaginationConfig { + page: number; + size: number; + total: number; + totalPages: number; + hasNext: boolean; + hasPrev: boolean; +} + + +``` + +**智能分页逻辑**: +- 当只有一页数据时,分页按钮隐藏但每页条数选择器仍显示 +- 支持页码跳转和快速导航 +- 分页操作时保持当前搜索条件 + +### 使用示例 + +#### 完整调用示例 + +```tsx +import { SearchFormPagination } from '@/components/common/searchFormPagination'; + +export default function EnterpriseManagement() { + const [enterprises, setEnterprises] = useState([]); + const [loading, setLoading] = useState(false); + const [pagination, setPagination] = useState({ + page: 1, + size: 10, + total: 0, + totalPages: 0, + hasNext: false, + hasPrev: false, + }); + + // 搜索字段配置 + const searchFields = [ + { + key: 'search', + label: '搜索', + type: 'text', + placeholder: '搜索企业名称、编码...', + }, + { + key: 'audit_status', + label: '审核状态', + type: 'select', + defaultValue: 'all', + options: [ + { value: 'all', label: '全部状态' }, + { value: 'draft', label: '草稿' }, + { value: 'pending', label: '待审核' }, + { value: 'approved', label: '审核通过' }, + ], + }, + ]; + + // 表格列配置 + const columns = [ + { + key: 'name', + label: '企业名称', + sortable: true, + render: (value) =>
{value}
, + }, + { + key: 'auditStatus', + label: '审核状态', + render: (value) => getAuditStatusBadge(value), + }, + { + key: 'actions', + label: '操作', + render: (_, row) => ( +
+ + +
+ ), + }, + ]; + + // 数据加载函数 + const loadEnterprises = useCallback(async (params) => { + try { + setLoading(true); + const response = await fetchTenants(params); + setEnterprises(response.data); + setPagination({ + page: response.page, + size: response.size, + total: response.total, + totalPages: response.total_pages, + hasNext: response.has_next, + hasPrev: response.has_prev, + }); + } catch (error) { + console.error('Failed to load enterprises:', error); + } finally { + setLoading(false); + } + }, []); + + // 搜索处理 + const handleSearch = useCallback((filters) => { + loadEnterprises({ + filters, + pagination: { page: 1, size: pagination.size }, + }); + }, [loadEnterprises, pagination.size]); + + // 分页处理 + const handlePageChange = useCallback((page) => { + setPagination(prev => ({ ...prev, page })); + loadEnterprises({ + pagination: { page, size: pagination.size }, + filters: searchFilters, + }); + }, [loadEnterprises, pagination.size]); + + return ( +
+ 新建企业} + searchFields={searchFields} + columns={columns} + data={enterprises} + loading={loading} + error={null} + pagination={pagination} + onPageChange={handlePageChange} + onSizeChange={handleSizeChange} + onSearch={handleSearch} + emptyIcon={} + emptyText="暂无企业数据" + /> +
+ ); +} +``` + +### 接口定义 + +#### SearchFieldConfig - 搜索字段配置 + +```tsx +interface SearchFieldConfig { + key: string; // 字段标识 + label: string; // 显示标签 + type: 'text' | 'select'; // 字段类型 + placeholder?: string; // 占位符文本 + options?: Array<{ value: string; label: string }>; // 下拉选项 + defaultValue?: string; // 默认值 +} +``` + +#### TableColumnConfig - 表格列配置 + +```tsx +interface TableColumnConfig { + key: string; // 数据字段名 + label: string; // 表头显示文本 + sortable?: boolean; // 是否支持排序 + width?: string; // 列宽设置 + render?: (value: any, row: any, index: number) => React.ReactNode; // 自定义渲染 +} +``` + +#### SearchFormPaginationProps - 主组件属性 + +```tsx +interface SearchFormPaginationProps { + // 搜索配置 + searchFields: SearchFieldConfig[]; + onSearch?: (filters: Record) => void; + + // 表格配置 + columns: TableColumnConfig[]; + data?: T[]; + loading?: boolean; + error?: string | null; + + // 分页配置 + pagination?: PaginationConfig; + onPageChange?: (page: number) => void; + onSizeChange?: (size: number) => void; + onSort?: (sortBy: string, sortOrder: 'asc' | 'desc') => void; + + // UI配置 + formTitle?: string; + formRightContent?: React.ReactNode; + emptyIcon?: React.ReactNode; + emptyText?: string; + showSizeSelector?: boolean; + showPageInfo?: boolean; +} +``` + +### 最佳实践 + +#### 1. 性能优化 + +**使用 useCallback 优化函数引用**: +```tsx +// ✅ 正确做法:使用 useCallback 避免重复渲染 +const handleSearch = useCallback((filters) => { + loadEnterprises({ filters }); +}, [loadEnterprises]); + +const handlePageChange = useCallback((page) => { + loadEnterprises({ page, size: pagination.size }); +}, [loadEnterprises, pagination.size]); + +// ❌ 错误做法:每次渲染都创建新函数 +const handleSearch = (filters) => { + loadEnterprises({ filters }); +}; +``` + +**统一数据重载函数**: +```tsx +// ✅ 推荐:统一的数据重载逻辑,避免代码重复 +const reloadData = useCallback(() => { + const reloadParams = { + filters: searchFilters, + pagination: { + page: pagination.page, + size: pagination.size + } + }; + loadEnterprises(reloadParams); +}, [loadEnterprises, searchFilters, pagination]); + +// 在多个地方使用 +const handleCreateSuccess = () => reloadData(); +const confirmStatusChange = async () => { + await enableTenant(tenantId); + reloadData(); +}; +``` + +#### 2. 状态管理 + +**合理的状态依赖**: +```tsx +// ✅ 正确:包含所有必要的依赖 +const handlePageChange = useCallback((page: number) => { + loadEnterprises({ + filters: searchFilters, // 确保搜索条件不会丢失 + pagination: { page, size: pagination.size } + }); +}, [loadEnterprises, searchFilters, pagination.size]); +``` + +#### 3. 错误处理 + +**完善的错误状态处理**: +```tsx + +``` + +#### 4. 扩展性设计 + +**新增字段的简单步骤**: +1. 在 `searchFields` 数组中添加新配置 +2. 确保后端API支持新的查询参数 +3. 无需修改任何组件逻辑 + +```tsx +// 添加新的下拉框只需一行配置 +{ + key: 'enterprise_status', + label: '企业状态', + type: 'select', + defaultValue: 'all', + options: [ + { value: 'all', label: '全部状态' }, + { value: 'active', label: '启用' }, + { value: 'inactive', label: '禁用' }, + ], +} +``` + +### 技术特点 + +#### 1. 类型安全 +- 完整的 TypeScript 类型定义 +- 泛型支持,确保数据类型一致性 +- 严格的接口约束 + +#### 2. 用户体验优化 +- 防抖搜索,避免频繁请求 +- 加载状态遮罩,提供视觉反馈 +- 分页状态保持,避免搜索条件丢失 +- 响应式设计,适配不同屏幕尺寸 + +#### 3. 可维护性 +- 配置驱动,减少硬编码 +- 组件化设计,职责单一 +- 完善的错误处理机制 + +#### 4. 可扩展性 +- 插件化的字段配置 +- 自定义渲染函数支持 +- 多种配置选项 + +### 常见问题解决 + +#### 1. 分页后搜索条件丢失 + +**问题**:切换页码或每页条数时,搜索条件被重置 + +**解决方案**: +```tsx +const handlePageChange = useCallback((page) => { + // 确保传递当前的搜索条件 + loadEnterprises({ + filters: searchFilters, // 关键:传递搜索条件 + pagination: { page, size: pagination.size } + }); +}, [loadEnterprises, searchFilters, pagination.size]); +``` + +#### 2. 频繁API调用问题 + +**问题**:用户快速输入时触发过多API请求 + +**解决方案**:组件内置300ms防抖机制,无需额外处理 + +#### 3. 加载状态处理 + +**问题**:数据加载时用户体验不佳 + +**解决方案**: +```tsx + +``` + +### 性能优化最佳实践 + +#### 1. 事件驱动模式 + +**原则**:避免使用setTimeout,尽可能减少useEffect,使用事件驱动来实现状态更新。 + +**最佳实践**: +```tsx +// ❌ 避免写法:使用setTimeout和过多useEffect +useEffect(() => { + const timer = setTimeout(() => { + loadData(); + }, 300); + return () => clearTimeout(timer); +}, [filters]); + +useEffect(() => { + if (page > 1) { + loadData(); + } +}, [page]); + +// ✅ 推荐写法:事件驱动,直接调用 +const handleSearch = useCallback((filters) => { + setSearchFilters(filters); + loadData({ filters, pagination: { page: 1, size: pagination.size } }); +}, [loadData, pagination.size]); + +const handlePageChange = useCallback((page) => { + setPagination(prev => ({ ...prev, page })); + loadData({ filters: searchFilters, pagination: { page, size: pagination.size } }); +}, [loadData, searchFilters, pagination.size]); +``` + +#### 2. 函数依赖优化 + +**原则**:减少useCallback和useMemo的依赖项,通过参数传递而非依赖外部状态。 + +**最佳实践**: +```tsx +// ❌ 避免写法:过多依赖项导致函数频繁重新创建 +const loadData = useCallback(async () => { + // 依赖filters, pagination, sortBy等 +}, [filters, pagination, sortBy]); + +// ✅ 推荐写法:无依赖项,通过参数传递 +const loadData = useCallback(async (params) => { + // 使用params.filters, params.pagination等 +}, []); // 空依赖数组 +``` + +#### 3. 搜索防抖优化 + +**原则**:下拉框选择立即触发,文本输入使用防抖,避免不必要的延迟。 + +**实现方式**: +```tsx +// SearchFormComponent中的优化实现 +const handleInputChange = (key: string, value: string, fieldType: 'text' | 'select') => { + const newFilters = { ...localFilters, [key]: value }; + setLocalFilters(newFilters); + + // 下拉框选择立即触发查询,文本输入使用防抖 + if (fieldType === 'select') { + onFiltersChangeRef.current(newFilters); // 立即执行 + } + // 文本输入的防抖在useEffect中处理 +}; +``` + +### 组件设计原则 + +#### 1. 排序功能简化 + +**设计决策**:SearchFormPagination组件不再支持表头排序功能。 + +**原因**: +- 简化组件复杂度,提高性能 +- 减少不必要的交互,专注核心功能(搜索、展示、分页) +- 避免排序逻辑与业务逻辑耦合 + +**替代方案**: +- 如需排序功能,在业务页面层面实现 +- 通过下拉框或其他UI控件提供排序选项 + +#### 2. 接口简化 + +**删除的排序相关接口**: +```tsx +// ❌ 已删除的接口 +interface TableColumnConfig { + sortable?: boolean; // 删除 + // ... +} + +interface SearchFormPaginationProps { + sortBy?: string; // 删除 + sortOrder?: 'asc' | 'desc'; // 删除 + onSort?: (sortBy: string, sortOrder: 'asc' | 'desc') => void; // 删除 + // ... +} +``` + +#### 3. 表头渲染简化 + +**删除的排序交互**: +- 删除了表头的点击事件处理 +- 删除了排序箭头图标显示 +- 删除了鼠标悬停样式效果 + +### 重构指南 + +如果要重构或基于此组件开发新功能,请遵循以下原则: + +1. **保持接口兼容性**:不要破坏现有的props接口 +2. **扩展而非修改**:通过新的配置项而非修改现有逻辑来添加功能 +3. **类型安全**:确保所有新功能都有完整的TypeScript类型定义 +4. **测试覆盖**:新功能应该有相应的测试用例 +5. **文档更新**:及时更新使用文档和接口说明 +6. **性能优先**:采用事件驱动模式,避免不必要的useEffect和setTimeout +7. **功能专注**:保持组件职责单一,避免功能过度复杂化 + +### 总结 + +SearchFormPagination 组件通过配置驱动的方式,极大地简化了复杂数据展示页面的开发工作。其核心优势在于: + +- **高度可配置**:通过配置而非代码实现功能定制 +- **性能优化**:事件驱动模式,无setTimeout依赖,最小化useEffect使用 +- **用户体验**:下拉框立即响应,文本输入智能防抖 +- **易于扩展**:新增功能只需要修改配置,无需修改组件逻辑 +- **类型安全**:完整的 TypeScript 支持 +- **功能专注**:专注搜索、展示、分页核心功能,避免过度设计 + +该组件可以作为项目中所有数据展示页面的标准解决方案,显著提升开发效率和代码质量。 \ No newline at end of file diff --git a/crop-x-new/env/.env.dev b/crop-x-new/env/.env.dev new file mode 100644 index 0000000..8be0fea --- /dev/null +++ b/crop-x-new/env/.env.dev @@ -0,0 +1,26 @@ +# 开发环境配置 +NODE_ENV=development + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.dev.maimaiag.com + +# 后端 API 地址 +BACKEND_BASE_URL=https://gitea-admin-hm-smart-agri-app.dev.maimaiag.com/ + +# OpenAPI 生成配置 +API_BASE_URL=https://gitea-admin-hm-smart-agri-app.dev.maimaiag.com + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=true + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=开发环境 \ No newline at end of file diff --git a/crop-x-new/env/.env.prod b/crop-x-new/env/.env.prod new file mode 100644 index 0000000..4846d46 --- /dev/null +++ b/crop-x-new/env/.env.prod @@ -0,0 +1,43 @@ +# 生产环境配置 +NODE_ENV=production + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.prod.maimaiag.com + +# 后端 API 地址 +BACKEND_BASE_URL=https://cavin-smart-crop-backend-app.prod.maimaiag.com + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=false + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=生产环境 + +# 生产环境特有配置 +API_TIMEOUT=30000 +ENABLE_ERROR_LOGGING=true +ENABLE_PERFORMANCE_MONITORING=true +ENABLE_USER_BEHAVIOR_TRACKING=true +ENABLE_ANALYTICS=true + +# 安全配置 +SENTRY_DSN=https://your-sentry-dsn.prod@sentry.io/project-id +CDN_BASE_URL=https://cdn.cavin-smart-crop.com + +# 功能开关 +ENABLE_MAINTENANCE_MODE=false +ENABLE_NEW_FEATURES=true +ENABLE_BETA_FEATURES=false + +# 缓存配置 +CACHE_TTL=3600 +ENABLE_SERVICE_WORKER=true \ No newline at end of file diff --git a/crop-x-new/env/.env.test b/crop-x-new/env/.env.test new file mode 100644 index 0000000..affb77f --- /dev/null +++ b/crop-x-new/env/.env.test @@ -0,0 +1,28 @@ +# 测试环境配置 +NODE_ENV=test + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.test.maimaiag.com + +# 后端 API 地址 +BACKEND_BASE_URL=http://pengcode.tech:8080 + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=true + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=测试环境 + +# 其他测试环境特有配置 +API_TIMEOUT=15000 +ENABLE_ERROR_LOGGING=true +ENABLE_PERFORMANCE_MONITORING=true \ No newline at end of file diff --git a/crop-x-new/env/.env.uat b/crop-x-new/env/.env.uat new file mode 100644 index 0000000..2226ac9 --- /dev/null +++ b/crop-x-new/env/.env.uat @@ -0,0 +1,30 @@ +# UAT (用户验收测试) 环境配置 +NODE_ENV=production + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.uat.maimaiag.com + +# 后端 API 地址 +BACKEND_BASE_URL=https://cavin-smart-crop-backend-app.uat.maimaiag.com + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=false + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=UAT 环境 + +# UAT 特有配置 +API_TIMEOUT=20000 +ENABLE_ERROR_LOGGING=true +ENABLE_PERFORMANCE_MONITORING=true +ENABLE_USER_BEHAVIOR_TRACKING=true +SENTRY_DSN=https://your-sentry-dsn.uat@sentry.io/project-id \ No newline at end of file diff --git a/crop-x-new/eslint.config.mjs b/crop-x-new/eslint.config.mjs new file mode 100644 index 0000000..719cea2 --- /dev/null +++ b/crop-x-new/eslint.config.mjs @@ -0,0 +1,25 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), + { + ignores: [ + "node_modules/**", + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ], + }, +]; + +export default eslintConfig; diff --git a/crop-x-new/index.html b/crop-x-new/index.html new file mode 100644 index 0000000..ea1dd85 --- /dev/null +++ b/crop-x-new/index.html @@ -0,0 +1,13 @@ + + + + + + + 智慧农业生产管理系统 + + +
+ + + \ No newline at end of file diff --git a/crop-x-new/next-env.d.ts b/crop-x-new/next-env.d.ts new file mode 100644 index 0000000..c4b7818 --- /dev/null +++ b/crop-x-new/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +import "./.next/dev/types/routes.d.ts"; + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/crop-x-new/next.config.js b/crop-x-new/next.config.js new file mode 100644 index 0000000..ee9ebcc --- /dev/null +++ b/crop-x-new/next.config.js @@ -0,0 +1,37 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + typescript: { + ignoreBuildErrors: true, // TODO: 暂时完全禁用TypeScript类型检查 + }, + eslint: { + ignoreDuringBuilds: true, // TODO: 暂时禁用eslint校验错误 + }, + transpilePackages: ['lucide-react'], + output: 'standalone', + // 修复CSS构建问题 + experimental: { + // forceSwcTransforms: true, + }, + // 新的 Turbopack 配置 + turbopack: { + rules: { + '*.svg': { + loaders: ['@svgr/webpack'], + as: '*.js', + }, + }, + }, + // 解决工作区根目录问题 + outputFileTracingRoot: process.cwd(), + // 添加代理配置解决CORS问题 + async rewrites() { + return [ + { + source: '/api/:path*', + destination: 'https://gitea-admin-hm-smart-agri-app.dev.maimaiag.com/api/:path*', + }, + ]; + }, +}; + +export default nextConfig; \ No newline at end of file diff --git a/crop-x-new/openapi-ts.config.ts b/crop-x-new/openapi-ts.config.ts new file mode 100644 index 0000000..f03d69a --- /dev/null +++ b/crop-x-new/openapi-ts.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from "@hey-api/openapi-ts"; + +// 获取环境变量配置 +const baseUrl = process.env.API_BASE_URL || 'http://localhost:8080'; + +export default defineConfig({ + client: "@hey-api/client-fetch", + input: `${baseUrl}/openapi.json`, + output: "./src/lib/api", + schemas: { + name: "types.gen.ts", + }, + services: { + name: "sdk.gen.ts", + }, + clientName: "client.gen.ts", +}); \ No newline at end of file diff --git a/crop-x-new/package-lock.json b/crop-x-new/package-lock.json new file mode 100644 index 0000000..f7d43f4 --- /dev/null +++ b/crop-x-new/package-lock.json @@ -0,0 +1,14478 @@ +{ + "name": "智慧农业生产管理系统", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "智慧农业生产管理系统", + "version": "0.1.0", + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-aspect-ratio": "^1.1.7", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.7", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/postcss": "^4.1.14", + "axios": "^1.12.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.487.0", + "next": "^16.0.1", + "next-themes": "^0.4.6", + "openapi-fetch": "^0.15.0", + "qrcode": "*", + "react": "^19.2.0", + "react-day-picker": "^9.11.1", + "react-dom": "^19.2.0", + "react-hook-form": "^7.65.0", + "react-resizable-panels": "^2.1.9", + "recharts": "^2.15.4", + "sonner": "^2.0.7", + "tailwind-merge": "^3.3.1", + "tailwindcss-animate": "^1.0.7", + "vaul": "^1.1.2", + "zod": "^4.1.12", + "zustand": "^5.0.8" + }, + "devDependencies": { + "@hey-api/client-fetch": "^0.13.1", + "@hey-api/openapi-ts": "^0.86.6", + "@tailwindcss/postcss": "^4", + "@tailwindcss/vite": "^4.1.14", + "@types/node": "^20.10.0", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", + "@vitejs/plugin-react-swc": "^3.10.2", + "autoprefixer": "^10.4.20", + "eslint": "^9.11.1", + "eslint-config-next": "15.5.6", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.12", + "husky": "^9.1.6", + "install": "^0.13.0", + "lint-staged": "^15.2.10", + "node-fetch": "^3.3.2", + "npm": "^11.6.2", + "openapi-typescript": "^7.10.1", + "postcss": "^8.4.47", + "prettier": "^3.3.3", + "tailwindcss": "^4.1.14", + "typescript": "^5.9.3", + "vite": "^6.4.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "license": "MIT" + }, + "node_modules/@emnapi/core": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/@emnapi/core/-/core-1.6.0.tgz", + "integrity": "sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@hey-api/client-fetch": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/@hey-api/client-fetch/-/client-fetch-0.13.1.tgz", + "integrity": "sha512-29jBRYNdxVGlx5oewFgOrkulZckpIpBIRHth3uHFn1PrL2ucMy52FvWOY3U3dVx2go1Z3kUmMi6lr07iOpUqqA==", + "deprecated": "Starting with v0.73.0, this package is bundled directly inside @hey-api/openapi-ts.", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/hey-api" + }, + "peerDependencies": { + "@hey-api/openapi-ts": "< 2" + } + }, + "node_modules/@hey-api/codegen-core": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@hey-api/codegen-core/-/codegen-core-0.3.1.tgz", + "integrity": "sha512-iLG9uRJdmQf83sCZ8WsDR6RXQep0X+D1t1mxuzhrSS9zVL4NvnjTQD6PNnQNPymJyss/mdPf7f7kbmcCK7DVmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/hey-api" + }, + "peerDependencies": { + "typescript": ">=5.5.3" + } + }, + "node_modules/@hey-api/json-schema-ref-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@hey-api/json-schema-ref-parser/-/json-schema-ref-parser-1.2.1.tgz", + "integrity": "sha512-inPeksRLq+j3ArnuGOzQPQE//YrhezQG0+9Y9yizScBN2qatJ78fIByhEgKdNAbtguDCn4RPxmEhcrePwHxs4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/hey-api" + } + }, + "node_modules/@hey-api/openapi-ts": { + "version": "0.86.6", + "resolved": "https://registry.npmmirror.com/@hey-api/openapi-ts/-/openapi-ts-0.86.6.tgz", + "integrity": "sha512-D+iv0mKMqQT2DbuGgPch4nCMb6oBbItvAnOc3glHUDABOe7xkSwdgNWjzeWBadNZsQ+n38QCgBTely9HOPmKjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hey-api/codegen-core": "^0.3.1", + "@hey-api/json-schema-ref-parser": "1.2.1", + "ansi-colors": "4.1.3", + "c12": "3.3.1", + "color-support": "1.1.3", + "commander": "14.0.1", + "handlebars": "4.7.8", + "open": "10.2.0", + "semver": "7.7.2" + }, + "bin": { + "openapi-ts": "bin/run.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/hey-api" + }, + "peerDependencies": { + "typescript": ">=5.5.3" + } + }, + "node_modules/@hey-api/openapi-ts/node_modules/commander": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-14.0.1.tgz", + "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@hey-api/openapi-ts/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/@hookform/resolvers/-/resolvers-5.2.2.tgz", + "integrity": "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", + "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", + "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", + "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", + "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", + "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", + "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", + "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", + "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", + "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", + "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", + "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", + "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", + "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", + "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", + "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", + "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", + "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.5.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", + "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.4", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", + "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", + "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmmirror.com/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@next/env": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/env/-/env-16.0.1.tgz", + "integrity": "sha512-LFvlK0TG2L3fEOX77OC35KowL8D7DlFF45C0OvKMC4hy8c/md1RC4UMNDlUGJqfCoCS2VWrZ4dSE6OjaX5+8mw==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.5.6", + "resolved": "https://registry.npmmirror.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.6.tgz", + "integrity": "sha512-YxDvsT2fwy1j5gMqk3ppXlsgDopHnkM4BoxSVASbvvgh5zgsK8lvWerDzPip8k3WVzsTZ1O7A7si1KNfN4OZfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.1.tgz", + "integrity": "sha512-R0YxRp6/4W7yG1nKbfu41bp3d96a0EalonQXiMe+1H9GTHfKxGNCGFNWUho18avRBPsO8T3RmdWuzmfurlQPbg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.1.tgz", + "integrity": "sha512-kETZBocRux3xITiZtOtVoVvXyQLB7VBxN7L6EPqgI5paZiUlnsgYv4q8diTNYeHmF9EiehydOBo20lTttCbHAg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.1.tgz", + "integrity": "sha512-hWg3BtsxQuSKhfe0LunJoqxjO4NEpBmKkE+P2Sroos7yB//OOX3jD5ISP2wv8QdUwtRehMdwYz6VB50mY6hqAg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.1.tgz", + "integrity": "sha512-UPnOvYg+fjAhP3b1iQStcYPWeBFRLrugEyK/lDKGk7kLNua8t5/DvDbAEFotfV1YfcOY6bru76qN9qnjLoyHCQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.1.tgz", + "integrity": "sha512-Et81SdWkcRqAJziIgFtsFyJizHoWne4fzJkvjd6V4wEkWTB4MX6J0uByUb0peiJQ4WeAt6GGmMszE5KrXK6WKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.1.tgz", + "integrity": "sha512-qBbgYEBRrC1egcG03FZaVfVxrJm8wBl7vr8UFKplnxNRprctdP26xEv9nJ07Ggq4y1adwa0nz2mz83CELY7N6Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.1.tgz", + "integrity": "sha512-cPuBjYP6I699/RdbHJonb3BiRNEDm5CKEBuJ6SD8k3oLam2fDRMKAvmrli4QMDgT2ixyRJ0+DTkiODbIQhRkeQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.1.tgz", + "integrity": "sha512-XeEUJsE4JYtfrXe/LaJn3z1pD19fK0Q6Er8Qoufi+HqvdO4LEPyCxLUt4rxA+4RfYo6S9gMlmzCMU2F+AatFqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmmirror.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", + "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.10", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", + "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.16", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.15", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.7", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.14", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", + "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@redocly/ajv": { + "version": "8.11.3", + "resolved": "https://registry.npmmirror.com/@redocly/ajv/-/ajv-8.11.3.tgz", + "integrity": "sha512-4P3iZse91TkBiY+Dx5DUgxQ9GXkVJf++cmI0MOyLDxV9b5MUBI4II6ES8zA5JCbO72nKAJxWrw4PUPW+YP3ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/config": { + "version": "0.22.2", + "resolved": "https://registry.npmmirror.com/@redocly/config/-/config-0.22.2.tgz", + "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.34.5", + "resolved": "https://registry.npmmirror.com/@redocly/openapi-core/-/openapi-core-1.34.5.tgz", + "integrity": "sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.22.0", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.5", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "minimatch": "^5.0.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">=9.5.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", + "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", + "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", + "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", + "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", + "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", + "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", + "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", + "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", + "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", + "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.14.0.tgz", + "integrity": "sha512-WJFej426qe4RWOm9MMtP4V3CV4AucXolQty+GRgAWLgQXmpCuwzs7hEpxxhSc/znXUSxum9d/P/32MW0FlAAlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@swc/core": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz", + "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.24" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.13.5", + "@swc/core-darwin-x64": "1.13.5", + "@swc/core-linux-arm-gnueabihf": "1.13.5", + "@swc/core-linux-arm64-gnu": "1.13.5", + "@swc/core-linux-arm64-musl": "1.13.5", + "@swc/core-linux-x64-gnu": "1.13.5", + "@swc/core-linux-x64-musl": "1.13.5", + "@swc/core-win32-arm64-msvc": "1.13.5", + "@swc/core-win32-ia32-msvc": "1.13.5", + "@swc/core-win32-x64-msvc": "1.13.5" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz", + "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz", + "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz", + "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz", + "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz", + "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz", + "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz", + "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz", + "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.13.5", + "resolved": "https://registry.npmmirror.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz", + "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz", + "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.14.tgz", + "integrity": "sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.0", + "lightningcss": "1.30.1", + "magic-string": "^0.30.19", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.14" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.14.tgz", + "integrity": "sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.5.1" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.14", + "@tailwindcss/oxide-darwin-arm64": "4.1.14", + "@tailwindcss/oxide-darwin-x64": "4.1.14", + "@tailwindcss/oxide-freebsd-x64": "4.1.14", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.14", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.14", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.14", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.14", + "@tailwindcss/oxide-linux-x64-musl": "4.1.14", + "@tailwindcss/oxide-wasm32-wasi": "4.1.14", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.14", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.14" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.14.tgz", + "integrity": "sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.14.tgz", + "integrity": "sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.14.tgz", + "integrity": "sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.14.tgz", + "integrity": "sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.14.tgz", + "integrity": "sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.14.tgz", + "integrity": "sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.14.tgz", + "integrity": "sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.14.tgz", + "integrity": "sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.14.tgz", + "integrity": "sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.14.tgz", + "integrity": "sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.5", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.14", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.14.tgz", + "integrity": "sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.14.tgz", + "integrity": "sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.14.tgz", + "integrity": "sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.14", + "@tailwindcss/oxide": "4.1.14", + "postcss": "^8.4.41", + "tailwindcss": "4.1.14" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.14.tgz", + "integrity": "sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.14", + "@tailwindcss/oxide": "4.1.14", + "tailwindcss": "4.1.14" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.22.tgz", + "integrity": "sha512-hRnu+5qggKDSyWHlnmThnUqg62l29Aj/6vcYgUaSFL9oc7DVjeWEQN3PRgdSc6F8d9QRMWkf36CLMch1Do/+RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.26.tgz", + "integrity": "sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.1.tgz", + "integrity": "sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/type-utils": "8.46.1", + "@typescript-eslint/utils": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.46.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.1.tgz", + "integrity": "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.1.tgz", + "integrity": "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.1", + "@typescript-eslint/types": "^8.46.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.1.tgz", + "integrity": "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.1.tgz", + "integrity": "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.1.tgz", + "integrity": "sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/utils": "8.46.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.1.tgz", + "integrity": "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.1.tgz", + "integrity": "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.46.1", + "@typescript-eslint/tsconfig-utils": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.1.tgz", + "integrity": "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.1.tgz", + "integrity": "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", + "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.27", + "@swc/core": "^1.12.11" + }, + "peerDependencies": { + "vite": "^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.11.0", + "resolved": "https://registry.npmmirror.com/axe-core/-/axe-core-4.11.0.tgz", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.17.tgz", + "integrity": "sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c12": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/c12/-/c12-3.3.1.tgz", + "integrity": "sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmmirror.com/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmmirror.com/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.237", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.237.tgz", + "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==", + "dev": true, + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "resolved": "https://registry.npmmirror.com/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", + "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.5.6", + "resolved": "https://registry.npmmirror.com/eslint-config-next/-/eslint-config-next-15.5.6.tgz", + "integrity": "sha512-cGr3VQlPsZBEv8rtYp4BpG1KNXDqGvPo9VC1iaCgIA11OfziC/vczng+TnAS3WpRIR3Q5ye/6yl+CRUuZ1fPGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.5.6", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz", + "integrity": "sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-equals": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.2.tgz", + "integrity": "sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/input-otp": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/input-otp/-/input-otp-1.4.2.tgz", + "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/install": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", + "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmmirror.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lint-staged": { + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", + "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lucide-react": { + "version": "0.487.0", + "resolved": "https://registry.npmmirror.com/lucide-react/-/lucide-react-0.487.0.tgz", + "integrity": "sha512-aKqhOQ+YmFnwq8dWgGjOuLc8V1R9/c/yOd+zDY4+ohsR2Jo05lSGc3WsstYPIzcTpeosN7LoCkLReUUITvaIvw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmmirror.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "16.0.1", + "resolved": "https://registry.npmmirror.com/next/-/next-16.0.1.tgz", + "integrity": "sha512-e9RLSssZwd35p7/vOa+hoDFggUZIUbZhIUSLZuETCwrCVvxOs87NamoUzT+vbcNAL8Ld9GobBnWOA6SbV/arOw==", + "license": "MIT", + "dependencies": { + "@next/env": "16.0.1", + "@swc/helpers": "0.5.15", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=20.9.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "16.0.1", + "@next/swc-darwin-x64": "16.0.1", + "@next/swc-linux-arm64-gnu": "16.0.1", + "@next/swc-linux-arm64-musl": "16.0.1", + "@next/swc-linux-x64-gnu": "16.0.1", + "@next/swc-linux-x64-musl": "16.0.1", + "@next/swc-win32-arm64-msvc": "16.0.1", + "@next/swc-win32-x64-msvc": "16.0.1", + "sharp": "^0.34.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmmirror.com/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/next/node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.25.tgz", + "integrity": "sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.6.2.tgz", + "integrity": "sha512-7iKzNfy8lWYs3zq4oFPa8EXZz5xt9gQNKJZau3B1ErLBb6bF7sBJ00x09485DOvRT2l5Gerbl3VlZNT57MxJVA==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], + "dev": true, + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.1.6", + "@npmcli/config": "^10.4.2", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.1", + "@npmcli/promise-spawn": "^8.0.3", + "@npmcli/redact": "^3.2.2", + "@npmcli/run-script": "^10.0.0", + "@sigstore/tuf": "^4.0.0", + "abbrev": "^3.0.1", + "archy": "~1.0.0", + "cacache": "^20.0.1", + "chalk": "^5.6.2", + "ci-info": "^4.3.1", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^11.0.3", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^9.0.2", + "ini": "^5.0.0", + "init-package-json": "^8.2.2", + "is-cidr": "^6.0.1", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.0.9", + "libnpmexec": "^10.1.8", + "libnpmfund": "^7.0.9", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.0.9", + "libnpmpublish": "^11.1.2", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.2", + "make-fetch-happen": "^15.0.2", + "minimatch": "^10.0.3", + "minipass": "^7.1.1", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^11.4.2", + "nopt": "^8.1.0", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.2", + "npm-package-arg": "^13.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-profile": "^12.0.0", + "npm-registry-fetch": "^19.0.0", + "npm-user-validate": "^3.0.0", + "p-map": "^7.0.3", + "pacote": "^21.0.3", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^4.1.0", + "semver": "^7.7.3", + "spdx-expression-parse": "^4.0.0", + "ssri": "^12.0.0", + "supports-color": "^10.2.2", + "tar": "^7.5.1", + "text-table": "~0.2.0", + "tiny-relative-date": "^2.0.2", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^6.0.2", + "which": "^5.0.0" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^5.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.4.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.1.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^11.0.3", + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^21.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "7.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^11.0.3", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "3.2.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "10.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "6.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "20.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^11.0.3", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.3.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "5.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "11.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "9.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", + "semver": "^7.7.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^6.0.2" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "10.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "5.0.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/isexe": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.0.9", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.6", + "@npmcli/installed-package-contents": "^3.0.0", + "binary-extensions": "^3.0.0", + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.1.8", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.6", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "read": "^4.0.0", + "semver": "^7.3.7", + "signal-exit": "^4.1.0", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.9", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.6" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.0.9", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.6", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "11.2.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "15.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "10.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "11.4.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/agent": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "19.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/jackspeak": { + "version": "3.4.3", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "14.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-scurry": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "7.1.2", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "13.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "11.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "12.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "19.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "7.0.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/npm/node_modules/pacote": { + "version": "21.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^12.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^2.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.22", + "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "12.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "10.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "7.5.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.15", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.0.0", + "debug": "^4.4.1", + "make-fetch-happen": "^15.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/which": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmmirror.com/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-fetch": { + "version": "0.15.0", + "resolved": "https://registry.npmmirror.com/openapi-fetch/-/openapi-fetch-0.15.0.tgz", + "integrity": "sha512-OjQUdi61WO4HYhr9+byCPMj0+bgste/LtSBEcV6FzDdONTs7x0fWn8/ndoYwzqCsKWIxEZwo4FN/TG1c1rI8IQ==", + "license": "MIT", + "dependencies": { + "openapi-typescript-helpers": "^0.0.15" + } + }, + "node_modules/openapi-typescript": { + "version": "7.10.1", + "resolved": "https://registry.npmmirror.com/openapi-typescript/-/openapi-typescript-7.10.1.tgz", + "integrity": "sha512-rBcU8bjKGGZQT4K2ekSTY2Q5veOQbVG/lTKZ49DeCyT9z62hM2Vj/LLHjDHC9W7LJG8YMHcdXpRZDqC1ojB/lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.34.5", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.2.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" + } + }, + "node_modules/openapi-typescript-helpers": { + "version": "0.0.15", + "resolved": "https://registry.npmmirror.com/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz", + "integrity": "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==", + "license": "MIT" + }, + "node_modules/openapi-typescript/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/openapi-typescript/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-2.0.0.tgz", + "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz", + "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/react": { + "version": "19.2.0", + "resolved": "https://registry.npmmirror.com/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-day-picker": { + "version": "9.11.1", + "resolved": "https://registry.npmmirror.com/react-day-picker/-/react-day-picker-9.11.1.tgz", + "integrity": "sha512-l3ub6o8NlchqIjPKrRFUCkTUEq6KwemQlfv3XZzzwpUeGwmDJ+0u0Upmt38hJyd7D/vn2dQoOoLV/qAp0o3uUw==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "date-fns": "^4.1.0", + "date-fns-jalali": "^4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.0", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.65.0", + "resolved": "https://registry.npmmirror.com/react-hook-form/-/react-hook-form-7.65.0.tgz", + "integrity": "sha512-xtOzDz063WcXvGWaHgLNrNzlsdFgtUWcb32E6WFaGTd7kPZG3EeDusjdZfUsPwKCKVXy1ZlntifaHZ4l8pAsmw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable-panels": { + "version": "2.1.9", + "resolved": "https://registry.npmmirror.com/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", + "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmmirror.com/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/recharts/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", + "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.4", + "@rollup/rollup-android-arm64": "4.52.4", + "@rollup/rollup-darwin-arm64": "4.52.4", + "@rollup/rollup-darwin-x64": "4.52.4", + "@rollup/rollup-freebsd-arm64": "4.52.4", + "@rollup/rollup-freebsd-x64": "4.52.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", + "@rollup/rollup-linux-arm-musleabihf": "4.52.4", + "@rollup/rollup-linux-arm64-gnu": "4.52.4", + "@rollup/rollup-linux-arm64-musl": "4.52.4", + "@rollup/rollup-linux-loong64-gnu": "4.52.4", + "@rollup/rollup-linux-ppc64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-musl": "4.52.4", + "@rollup/rollup-linux-s390x-gnu": "4.52.4", + "@rollup/rollup-linux-x64-gnu": "4.52.4", + "@rollup/rollup-linux-x64-musl": "4.52.4", + "@rollup/rollup-openharmony-arm64": "4.52.4", + "@rollup/rollup-win32-arm64-msvc": "4.52.4", + "@rollup/rollup-win32-ia32-msvc": "4.52.4", + "@rollup/rollup-win32-x64-gnu": "4.52.4", + "@rollup/rollup-win32-x64-msvc": "4.52.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", + "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/sonner": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/sonner/-/sonner-2.0.7.tgz", + "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmmirror.com/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.14.tgz", + "integrity": "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==", + "license": "MIT" + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.0.tgz", + "integrity": "sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmmirror.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.1.12", + "resolved": "https://registry.npmmirror.com/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zustand": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/zustand/-/zustand-5.0.8.tgz", + "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/crop-x-new/package.json b/crop-x-new/package.json new file mode 100644 index 0000000..2ffbcde --- /dev/null +++ b/crop-x-new/package.json @@ -0,0 +1,102 @@ +{ + "name": "智慧农业生产管理系统", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "lint:fix": "eslint . --ext ts,tsx --fix", + "type-check": "tsc --noEmit", + "api:generate": "node scripts/generate-api.cjs", + "deploy": "node scripts/deploy.js", + "build:dev": "node scripts/build.cjs dev", + "build:test": "node scripts/build.cjs test", + "build:uat": "node scripts/build.cjs uat", + "build:prod": "node scripts/build.cjs prod" + }, + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-aspect-ratio": "^1.1.7", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.7", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/postcss": "^4.1.14", + "axios": "^1.12.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.487.0", + "next": "^16.0.1", + "next-themes": "^0.4.6", + "openapi-fetch": "^0.15.0", + "qrcode": "*", + "react": "^19.2.0", + "react-day-picker": "^9.11.1", + "react-dom": "^19.2.0", + "react-hook-form": "^7.65.0", + "react-resizable-panels": "^2.1.9", + "recharts": "^2.15.4", + "sonner": "^2.0.7", + "tailwind-merge": "^3.3.1", + "tailwindcss-animate": "^1.0.7", + "vaul": "^1.1.2", + "zod": "^4.1.12", + "zustand": "^5.0.8" + }, + "devDependencies": { + "@hey-api/client-fetch": "^0.13.1", + "@hey-api/openapi-ts": "^0.86.6", + "@tailwindcss/postcss": "^4", + "@tailwindcss/vite": "^4.1.14", + "@types/node": "^20.10.0", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", + "@vitejs/plugin-react-swc": "^3.10.2", + "autoprefixer": "^10.4.20", + "eslint": "^9.11.1", + "eslint-config-next": "15.5.6", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.12", + "husky": "^9.1.6", + "install": "^0.13.0", + "lint-staged": "^15.2.10", + "node-fetch": "^3.3.2", + "npm": "^11.6.2", + "openapi-typescript": "^7.10.1", + "postcss": "^8.4.47", + "prettier": "^3.3.3", + "tailwindcss": "^4.1.14", + "typescript": "^5.9.3", + "vite": "^6.4.0" + } +} diff --git a/crop-x-new/postcss.config.js b/crop-x-new/postcss.config.js new file mode 100644 index 0000000..1c87846 --- /dev/null +++ b/crop-x-new/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +} diff --git a/crop-x-new/scripts/build.cjs b/crop-x-new/scripts/build.cjs new file mode 100644 index 0000000..0101d2e --- /dev/null +++ b/crop-x-new/scripts/build.cjs @@ -0,0 +1,387 @@ +/** + * 统一构建脚本 + * + * 整合环境设置、API生成和Next.js构建的完整构建流程 + * 支持多环境构建:dev, test, uat, prod + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync, spawn } = require('child_process'); + +// ANSI 颜色代码 +const colors = { + reset: '\x1b[0m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + cyan: '\x1b[36m', + white: '\x1b[37m' +}; + +// 日志函数 +function log(message, color = 'white') { + console.log(`${colors[color]}${message}${colors.reset}`); +} + +function logSuccess(message) { + log(`✓ ${message}`, 'green'); +} + +function logError(message) { + log(`✗ ${message}`, 'red'); +} + +function logInfo(message) { + log(`ℹ ${message}`, 'blue'); +} + +function logStep(message) { + log(`🔄 ${message}`, 'cyan'); +} + +function logWarning(message) { + log(`⚠ ${message}`, 'yellow'); +} + +/** + * 获取命令行参数中的环境 + */ +function getEnvironmentFromArgs() { + const args = process.argv.slice(2); + + // 查找 --env 参数 + const envArg = args.find(arg => arg.startsWith('--env=')); + if (envArg) { + return envArg.split('=')[1]; + } + + // 查找直接的参数 + const directEnv = args[0]; + if (['dev', 'test', 'uat', 'prod'].includes(directEnv)) { + return directEnv; + } + + return null; +} + +/** + * 验证环境名称 + */ +function validateEnvironment(env) { + const validEnvs = ['dev', 'test', 'uat', 'prod']; + if (!validEnvs.includes(env)) { + logError(`无效的环境名称: ${env}`); + logInfo(`支持的环境: ${validEnvs.join(', ')}`); + return false; + } + return true; +} + +/** + * 复制环境配置文件 + */ +function copyEnvironmentConfig(env) { + logStep(`设置 ${env} 环境配置`); + + const envDir = path.join(process.cwd(), 'env'); + const sourceFile = path.join(envDir, `.env.${env}`); + const targetFile = path.join(process.cwd(), '.env.local'); + + // 检查源文件是否存在 + if (!fs.existsSync(sourceFile)) { + logError(`环境配置文件不存在: ${sourceFile}`); + return false; + } + + try { + // 复制文件 + fs.copyFileSync(sourceFile, targetFile); + logSuccess(`已复制环境配置: ${env}`); + + return true; + } catch (error) { + logError(`复制环境配置文件失败: ${error.message}`); + return false; + } +} + +/** + * 清理缓存目录 + */ +function cleanCache() { + logStep('清理缓存目录'); + + const dirsToClean = ['.next', 'node_modules/.cache']; + + dirsToClean.forEach(dir => { + const dirPath = path.join(process.cwd(), dir); + if (fs.existsSync(dirPath)) { + try { + fs.rmSync(dirPath, { recursive: true, force: true }); + logSuccess(`已清理: ${dir}`); + } catch (error) { + logWarning(`清理 ${dir} 失败: ${error.message}`); + } + } + }); +} + +/** + * 生成API客户端代码 + */ +function generateApi(env) { + logStep('生成API客户端代码'); + + try { + // 设置环境变量 + const apiBaseUrl = getApiBaseUrl(env); + process.env.API_BASE_URL = apiBaseUrl; + + logInfo(`API服务器: ${apiBaseUrl}`); + + // 执行API生成脚本 + execSync('node scripts/generate-api.cjs', { + stdio: 'inherit', + cwd: process.cwd() + }); + + logSuccess('API客户端代码生成完成'); + return true; + } catch (error) { + logError(`API生成失败: ${error.message}`); + return false; + } +} + +/** + * 从环境配置文件中读取配置 + */ +function getEnvConfigFromFile(env) { + try { + // 读取对应环境配置文件 + const envFilePath = path.join(process.cwd(), 'env', `.env.${env}`); + + if (!fs.existsSync(envFilePath)) { + logWarning(`环境配置文件不存在: ${envFilePath}`); + return { + FRONTEND_BASE_URL: 'http://localhost:3000', + BACKEND_BASE_URL: 'http://localhost:8080', + ENV_DESCRIPTION: `${env}环境` + }; + } + + const envContent = fs.readFileSync(envFilePath, 'utf8'); + const lines = envContent.split('\n'); + + const config = { + FRONTEND_BASE_URL: 'http://localhost:3000', + BACKEND_BASE_URL: 'http://localhost:8080', + ENV_DESCRIPTION: `${env}环境` + }; + + // 解析配置文件 + for (const line of lines) { + if (line.startsWith('FRONTEND_BASE_URL=')) { + config.FRONTEND_BASE_URL = line.split('=')[1].trim(); + } else if (line.startsWith('BACKEND_BASE_URL=')) { + config.BACKEND_BASE_URL = line.split('=')[1].trim(); + logInfo(`从 ${envFilePath} 读取到后端地址: ${config.BACKEND_BASE_URL}`); + } else if (line.startsWith('ENV_DESCRIPTION=')) { + config.ENV_DESCRIPTION = line.split('=')[1].trim(); + } + } + + return config; + } catch (error) { + logError(`读取环境配置失败: ${error.message}`); + return { + FRONTEND_BASE_URL: 'http://localhost:3000', + BACKEND_BASE_URL: 'http://localhost:8080', + ENV_DESCRIPTION: `${env}环境` + }; + } +} + +/** + * 获取API基础URL - 从环境配置文件中读取 + */ +function getApiBaseUrl(env) { + const config = getEnvConfigFromFile(env); + return config.BACKEND_BASE_URL; +} + +/** + * 获取前端基础URL - 从环境配置文件中读取 + */ +function getFrontendUrl(env) { + const config = getEnvConfigFromFile(env); + return config.FRONTEND_BASE_URL; +} + +/** + * Next.js 构建 + */ +function buildNext(env) { + logStep('执行 Next.js 构建'); + + try { + // 设置环境变量 + process.env.NODE_ENV = 'production'; // 所有构建都使用 production 模式 + process.env.NEXT_PUBLIC_ENV = env; + + // 执行构建 + execSync('npm run build', { + stdio: 'inherit', + cwd: process.cwd() + }); + + logSuccess('Next.js 构建完成'); + return true; + } catch (error) { + logError(`Next.js 构建失败: ${error.message}`); + return false; + } +} + +/** + * 显示构建信息 + */ +function showBuildInfo(env, totalTime) { + const envConfig = getEnvConfigFromFile(env); + + log('='.repeat(60), 'green'); + logSuccess(`构建完成!总耗时: ${totalTime}ms`); + logSuccess(`环境: ${envConfig.ENV_DESCRIPTION} (${env})`); + logSuccess(`前端地址: ${envConfig.FRONTEND_BASE_URL}`); + logSuccess(`后端地址: ${envConfig.BACKEND_BASE_URL}`); + logSuccess('构建产物: .next 目录'); + log('='.repeat(60), 'green'); + + logInfo('部署建议:'); + logInfo(` 将 .next 目录和 package.json 部署到 ${envConfig.ENV_DESCRIPTION}`); + if (env !== 'dev') { + logInfo(` 确保环境变量 NODE_ENV=production 和 NEXT_PUBLIC_ENV=${env}`); + } +} + +/** + * 显示帮助信息 + */ +function showHelp() { + log('用法: node scripts/build.cjs [环境] [选项]', 'cyan'); + log(''); + log('环境:', 'yellow'); + log(' dev 开发环境', 'white'); + log(' test 测试环境', 'white'); + log(' uat UAT 环境', 'white'); + log(' prod 生产环境', 'white'); + log(''); + log('选项:', 'yellow'); + log(' --env= 指定环境 (与直接指定环境等效)', 'white'); + log(' --clean 构建前清理缓存', 'white'); + log(' --skip-api 跳过API生成', 'white'); + log(' --skip-build 跳过Next.js构建(仅设置环境)', 'white'); + log(' --help 显示此帮助信息', 'white'); + log(''); + log('示例:', 'yellow'); + log(' node scripts/build.cjs dev # 开发环境完整构建', 'white'); + log(' node scripts/build.cjs test --clean # 测试环境清理缓存后构建', 'white'); + log(' node scripts/build.cjs prod --skip-api # 生产环境跳过API生成构建', 'white'); + log(' node scripts/build.cjs uat --skip-build # UAT环境仅设置环境和API生成', 'white'); + log(''); +} + +/** + * 主函数 + */ +function main() { + const startTime = Date.now(); + + log('='.repeat(60), 'cyan'); + log('统一构建脚本', 'cyan'); + log('整合环境设置、API生成和Next.js构建', 'cyan'); + log('='.repeat(60), 'cyan'); + + // 检查帮助参数 + if (process.argv.includes('--help') || process.argv.includes('-h')) { + showHelp(); + process.exit(0); + } + + // 获取环境参数 + let env = getEnvironmentFromArgs(); + if (!env) { + logError('请指定环境参数'); + logInfo('使用 --help 查看帮助信息'); + process.exit(1); + } + + // 验证环境 + if (!validateEnvironment(env)) { + process.exit(1); + } + + // 解析选项 + const shouldClean = process.argv.includes('--clean'); + const skipApi = process.argv.includes('--skip-api'); + const skipBuild = process.argv.includes('--skip-build'); + + logInfo(`目标环境: ${env}`); + logInfo(`工作目录: ${process.cwd()}`); + + try { + // 1. 设置环境配置 + const envSuccess = copyEnvironmentConfig(env); + if (!envSuccess) { + process.exit(1); + } + + // 2. 清理缓存(可选) + if (shouldClean) { + cleanCache(); + } + + // 3. 生成API客户端(可选) + if (!skipApi) { + const apiSuccess = generateApi(env); + if (!apiSuccess) { + process.exit(1); + } + } else { + logInfo('跳过API生成'); + } + + // 4. Next.js 构建(可选) + if (!skipBuild) { + const buildSuccess = buildNext(env); + if (!buildSuccess) { + process.exit(1); + } + } else { + logInfo('跳过Next.js构建'); + } + + const totalTime = Date.now() - startTime; + showBuildInfo(env, totalTime); + + } catch (error) { + const totalTime = Date.now() - startTime; + logError(`构建失败 (${totalTime}ms): ${error.message}`); + process.exit(1); + } +} + +// 执行主函数 +if (require.main === module) { + main(); +} + +module.exports = { + copyEnvironmentConfig, + generateApi, + buildNext, + validateEnvironment, + getEnvironmentFromArgs +}; \ No newline at end of file diff --git a/crop-x-new/scripts/deploy.js b/crop-x-new/scripts/deploy.js new file mode 100644 index 0000000..d411a5e --- /dev/null +++ b/crop-x-new/scripts/deploy.js @@ -0,0 +1,44 @@ +import axios from 'axios'; +var data = JSON.stringify({ + "namespace": "argo", + "template_name": "repo-runtime-workflow", + "parameters": { + "git-schema": "http", + "git-domain": "gitea-service-http.cropflow-dev.svc.cluster.local:3000", + "git-user": "cavin", + "git-repo": "smart-crop-ui", + "git-revision": "main", + "git-pat": "b6c02bf1aec73d7bbbfbe590ea37564a29c4bd5d", + "docker-image-domain": "172.16.102.3:30648", + "docker-dockerfile-path": "./Dockerfile.crop-x", + "resource-cpu-limit": "500m", + "resource-memory-limit": "512Mi", + "resource-gpu-mem-limit": "", + "resource-mount-path": "/data", + "resource-mount-capacity": "", + "app-namespace": "argo", + "app-env-vars": "", + "app-ingress-host": ".dev.maimaiag.com", + "app-container-port": "3000", + "security-scan-enabled": "false" + } +}); + +var config = { + method: 'post', + url: 'https://gitea-admin-argo-workflow-api-app.dev.maimaiag.com/api/v1/workflows/from-template', + headers: { + 'Content-Type': 'application/json' + }, + data : data +}; + +axios(config) +.then(function (response) { + + let url = `https://gitea-admin-argo-workflow-api-app.dev.maimaiag.com/api/v1/workflows/${response.data.name}/log` + console.log(`打开 ${url} 查看日志`); +}) +.catch(function (error) { + console.log(error); +}); diff --git a/crop-x-new/scripts/generate-api.cjs b/crop-x-new/scripts/generate-api.cjs new file mode 100644 index 0000000..f039808 --- /dev/null +++ b/crop-x-new/scripts/generate-api.cjs @@ -0,0 +1,388 @@ +/** + * 简化的 API 生成脚本 + * + * 这个脚本现在主要负责: + * 1. 使用 @hey-api/openapi-ts 命令生成客户端代码 + * 2. 环境配置通过 openapi-ts.config.ts 处理 + */ + +const fs = require('fs'); +const path = require('path'); + +// 从环境配置文件中读取 API_BASE_URL +function getApiBaseUrl() { + try { + // 首先尝试从 env/.env.dev 文件读取 + const envDevPath = path.join(process.cwd(), 'env', '.env.dev'); + if (fs.existsSync(envDevPath)) { + const envContent = fs.readFileSync(envDevPath, 'utf8'); + const apiBaseUrlMatch = envContent.match(/API_BASE_URL=([^\r\n]+)/); + + if (apiBaseUrlMatch && apiBaseUrlMatch[1]) { + return apiBaseUrlMatch[1].trim(); + } + } + + // 如果上面的文件不存在,尝试从 TypeScript 环境配置文件读取 + const envConfigPath = path.join(process.cwd(), 'src', 'env', 'index.ts'); + if (fs.existsSync(envConfigPath)) { + const envContent = fs.readFileSync(envConfigPath, 'utf8'); + const devConfigMatch = envContent.match(/dev:\s*\{[\s\S]*?BACKEND_BASE_URL:\s*['"`]([^'"`]+)['"`]/); + + if (devConfigMatch && devConfigMatch[1]) { + return devConfigMatch[1].trim(); + } + } + + throw new Error('无法找到 API_BASE_URL 或 BACKEND_BASE_URL 配置'); + } catch (error) { + console.log(`读取环境配置失败: ${error.message}`); + return 'http://localhost:8080'; // 默认值 + } +} + +// 获取 API 基础 URL +const API_BASE_URL = getApiBaseUrl(); + +// 设置环境变量供后续使用 +process.env.API_BASE_URL = API_BASE_URL; + +// ANSI 颜色代码 +const colors = { + reset: '\x1b[0m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + magenta: '\x1b[35m', + cyan: '\x1b[36m', + white: '\x1b[37m' +}; + +// 日志函数 +function log(message, color = 'white') { + console.log(`${colors[color]}${message}${colors.reset}`); +} + +function logSuccess(message) { + log(`✓ ${message}`, 'green'); +} + +function logError(message) { + log(`✗ ${message}`, 'red'); +} + +function logWarning(message) { + log(`⚠ ${message}`, 'yellow'); +} + +function logInfo(message) { + log(`ℹ ${message}`, 'blue'); +} + +// 显示环境配置信息 +logInfo(`当前环境: ${process.env.NODE_ENV || 'development'}`); +logInfo(`API 服务器: ${API_BASE_URL}`); +logInfo(`已从 env/.env.dev 读取 API_BASE_URL 配置`); + +/** + * 检查自定义文件是否存在 + * 如果某些文件已经被自定义,我们不希望覆盖它们 + */ +function checkCustomFiles() { + const customFiles = [ + 'client.gen.ts' // 客户端文件通常是自定义的 + ]; + + const outputDir = path.join(process.cwd(), 'src', 'lib', 'api'); + const existingCustomFiles = []; + + for (const file of customFiles) { + const filePath = path.join(outputDir, file); + if (fs.existsSync(filePath)) { + // 检查文件是否包含自定义内容的标识 + const content = fs.readFileSync(filePath, 'utf8'); + + // 检查是否有自定义配置的标识 + const customIndicators = [ + 'getBaseUrl', + 'createDynamicClient', + 'getCurrentClientConfig', + // 可以添加更多自定义标识 + ]; + + const hasCustomContent = customIndicators.some(indicator => + content.includes(indicator) + ); + + if (hasCustomContent) { + existingCustomFiles.push(file); + logWarning(`检测到自定义文件: ${file}`); + } + } + } + + return existingCustomFiles; +} + +/** + * 备份自定义文件 + */ +function backupCustomFiles(customFiles) { + if (customFiles.length === 0) return; + + logInfo('备份自定义文件...'); + const outputDir = path.join(process.cwd(), 'src', 'lib', 'api'); + const backupDir = path.join(process.cwd(), 'src', 'lib', 'api', 'backup'); + + // 创建备份目录 + if (!fs.existsSync(backupDir)) { + fs.mkdirSync(backupDir, { recursive: true }); + } + + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const timestampedBackupDir = path.join(backupDir, `backup-${timestamp}`); + fs.mkdirSync(timestampedBackupDir); + + for (const file of customFiles) { + const srcPath = path.join(outputDir, file); + const destPath = path.join(timestampedBackupDir, file); + fs.copyFileSync(srcPath, destPath); + logInfo(` 备份: ${file} -> backup/${timestamp}/${file}`); + } + + logSuccess(`自定义文件已备份到: backup/${timestamp}/`); +} + +/** + * 恢复自定义文件 + */ +function restoreCustomFiles(customFiles) { + if (customFiles.length === 0) return; + + logInfo('恢复自定义文件...'); + const outputDir = path.join(process.cwd(), 'src', 'lib', 'api'); + const backupDir = path.join(process.cwd(), 'src', 'lib', 'api', 'backup'); + + // 找到最新的备份目录 + const backupDirs = fs.existsSync(backupDir) + ? fs.readdirSync(backupDir) + .filter(name => name.startsWith('backup-')) + .sort() + .reverse() + : []; + + if (backupDirs.length === 0) { + logWarning('没有找到备份文件,跳过恢复'); + return; + } + + const latestBackupDir = path.join(backupDir, backupDirs[0]); + + for (const file of customFiles) { + const srcPath = path.join(latestBackupDir, file); + const destPath = path.join(outputDir, file); + + if (fs.existsSync(srcPath)) { + fs.copyFileSync(srcPath, destPath); + logInfo(` 恢复: ${file}`); + } + } + + logSuccess('自定义文件已恢复'); +} + +/** + * 下载并保存 openapi.json 文件到本地 + */ +function downloadOpenApiJson() { + return new Promise((resolve, reject) => { + const https = require('https'); + const fs = require('fs'); + const path = require('path'); + + const fileUrl = `${API_BASE_URL}/openapi.json`; + const outputPath = path.join(process.cwd(), 'scripts', 'openapi.json'); + + logInfo(`下载 OpenAPI 规范文件: ${fileUrl}`); + + const startTime = Date.now(); + + // 创建 HTTPS 代理(如果需要,可以忽略 SSL 证书验证) + const agent = new https.Agent({ + rejectUnauthorized: false // 跳过 SSL 证书验证 + }); + + https.get(fileUrl, { agent }, (response) => { + if (response.statusCode !== 200) { + reject(new Error(`HTTP ${response.statusCode}: ${response.statusMessage}`)); + return; + } + + let data = ''; + + response.on('data', (chunk) => { + data += chunk; + }); + + response.on('end', () => { + try { + // 验证 JSON 格式 + JSON.parse(data); + + // 写入文件 + fs.writeFileSync(outputPath, data, 'utf8'); + const executionTime = Date.now() - startTime; + logSuccess(`OpenAPI 规范已保存到: scripts/openapi.json (${executionTime}ms)`); + resolve(); + } catch (error) { + reject(new Error(`JSON 格式错误: ${error.message}`)); + } + }); + }).on('error', (error) => { + reject(error); + }); + }); +} + +/** + * 使用 openapi-ts 命令生成客户端代码 + */ +function generateWithOpenApiTS() { + return new Promise((resolve, reject) => { + logInfo('使用 @hey-api/openapi-ts 生成客户端代码...'); + + const { exec } = require('child_process'); + const command = 'npx @hey-api/openapi-ts'; + + logInfo(`执行命令: ${command}`); + + const startTime = Date.now(); + + exec(command, { cwd: process.cwd() }, (error, stdout, stderr) => { + const executionTime = Date.now() - startTime; + + if (error) { + logError(`openapi-ts 执行失败 (${executionTime}ms)`); + logError(`错误信息: ${error.message}`); + if (stderr) { + logError(`stderr: ${stderr}`); + } + reject(error); + return; + } + + if (stderr) { + logWarning(`stderr: ${stderr}`); + } + + logSuccess(`openapi-ts 执行成功 (${executionTime}ms)`); + if (stdout) { + logInfo(`输出: ${stdout}`); + } + + resolve(); + }); + }); +} + +/** + * 验证生成的文件 + */ +function validateGeneratedFiles() { + try { + logInfo('验证生成的文件...'); + const outputDir = path.join(process.cwd(), 'src', 'lib', 'api'); + + if (!fs.existsSync(outputDir)) { + throw new Error('输出目录不存在'); + } + + const files = fs.readdirSync(outputDir); + logInfo(`输出目录包含 ${files.length} 个文件:`); + + const requiredFiles = ['types.gen.ts', 'sdk.gen.ts', 'index.ts']; + const generatedFiles = []; + + for (const file of files) { + const filePath = path.join(outputDir, file); + const stats = fs.statSync(filePath); + + // 只显示文件,不显示目录 + if (stats.isFile()) { + const size = (stats.size / 1024).toFixed(2); + logInfo(` 📄 ${file} (${size} KB)`); + generatedFiles.push(file); + } + } + + // 检查必要文件 + const missingFiles = requiredFiles.filter(file => !generatedFiles.includes(file)); + if (missingFiles.length > 0) { + logWarning(`缺少期望的文件: ${missingFiles.join(', ')}`); + } else { + logSuccess('所有期望的文件都已生成'); + } + + return true; + } catch (error) { + logError(`验证生成的文件失败: ${error.message}`); + return false; + } +} + +/** + * 主函数 + */ +async function main() { + const startTime = Date.now(); + + log('='.repeat(60), 'cyan'); + log('API 客户端代码生成脚本', 'cyan'); + log('基于 @hey-api/openapi-ts', 'cyan'); + log('='.repeat(60), 'cyan'); + + try { + // 检查是否有自定义文件 + const customFiles = checkCustomFiles(); + + if (customFiles.length > 0) { + logInfo('检测到自定义文件,将在生成前进行备份'); + backupCustomFiles(customFiles); + } + + // 下载 openapi.json 文件到本地 + await downloadOpenApiJson(); + + // 使用 openapi-ts 生成代码 + await generateWithOpenApiTS(); + + // 恢复自定义文件 + if (customFiles.length > 0) { + restoreCustomFiles(customFiles); + } + + // 验证生成的文件 + if (!validateGeneratedFiles()) { + logWarning('文件验证发现问题,但生成过程已完成'); + } + + const totalTime = Date.now() - startTime; + logSuccess(`API 客户端代码生成完成!总耗时: ${totalTime}ms`); + logSuccess('生成的文件位于 src/lib/api/ 目录'); + + if (customFiles.length > 0) { + logInfo('自定义文件已保持不变,避免覆盖手动配置'); + } + + } catch (error) { + const totalTime = Date.now() - startTime; + logError(`脚本执行失败 (${totalTime}ms): ${error.message}`); + process.exit(1); + } +} + +// 执行主函数 +if (require.main === module) { + main(); +} \ No newline at end of file diff --git a/crop-x-new/scripts/openapi.json b/crop-x-new/scripts/openapi.json new file mode 100644 index 0000000..8a0453e --- /dev/null +++ b/crop-x-new/scripts/openapi.json @@ -0,0 +1 @@ +{"openapi":"3.1.0","info":{"title":"鸿蒙智慧农业平台","description":"鸿蒙智慧农业SaaS平台 - 多租户多子系统FastAPI应用","version":"1.0.0"},"paths":{"/api/v1/auth/register":{"post":{"tags":["认证"],"summary":"用户注册","description":"用户注册","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/register-with-company":{"post":{"tags":["认证"],"summary":"用户注册并创建企业","description":"用户注册并创建企业","operationId":"register_with_company_api_v1_auth_register_with_company_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateWithCompany"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/captcha":{"get":{"tags":["认证"],"summary":"获取验证码","description":"获取登录验证码","operationId":"get_captcha_api_v1_auth_captcha_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptchaResponse"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["认证"],"summary":"用户登录","description":"用户登录(需要验证码)","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLoginWithCaptcha"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["认证"],"summary":"刷新令牌","description":"刷新访问令牌","operationId":"refresh_token_api_v1_auth_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["认证"],"summary":"用户登出","description":"用户登出","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Logout Api V1 Auth Logout Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/me":{"get":{"tags":["认证"],"summary":"获取当前用户信息","description":"获取当前用户信息","operationId":"get_current_user_info_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["认证"],"summary":"更新当前用户信息","description":"更新当前用户信息","operationId":"update_current_user_api_v1_auth_me_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/change-password":{"post":{"tags":["认证"],"summary":"修改密码","description":"修改密码","operationId":"change_password_api_v1_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdatePassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Change Password Api V1 Auth Change Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/verify-token":{"post":{"tags":["认证"],"summary":"验证令牌","description":"验证用户令牌有效性","operationId":"verify_user_token_api_v1_auth_verify_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Verify User Token Api V1 Auth Verify Token Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users":{"get":{"tags":["用户管理"],"summary":"获取用户列表","description":"获取用户列表(需要管理员权限)","operationId":"get_users_api_v1_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"搜索关键词","title":"Search"},"description":"搜索关键词"},{"name":"is_active","in":"query","required":false,"schema":{"type":"boolean","description":"是否活跃","title":"Is Active"},"description":"是否活跃"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_UserResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["用户管理"],"summary":"创建用户","description":"创建用户(需要管理员权限)","operationId":"create_user_api_v1_users_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}":{"get":{"tags":["用户管理"],"summary":"获取用户详情","description":"获取用户详情(需要管理员权限)","operationId":"get_user_api_v1_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["用户管理"],"summary":"更新用户","description":"更新用户(需要管理员权限)","operationId":"update_user_api_v1_users__user_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["用户管理"],"summary":"删除用户","description":"删除用户(需要管理员权限)","operationId":"delete_user_api_v1_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Delete User Api V1 Users User Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/activate":{"post":{"tags":["用户管理"],"summary":"激活用户","description":"激活用户(需要管理员权限)","operationId":"activate_user_api_v1_users__user_id__activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Activate User Api V1 Users User Id Activate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/deactivate":{"post":{"tags":["用户管理"],"summary":"停用用户","description":"停用用户(需要管理员权限)","operationId":"deactivate_user_api_v1_users__user_id__deactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Deactivate User Api V1 Users User Id Deactivate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/stats/summary":{"get":{"tags":["用户管理"],"summary":"获取用户统计信息","description":"获取用户统计信息(需要管理员权限)","operationId":"get_user_stats_api_v1_users_stats_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get User Stats Api V1 Users Stats Summary Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/departments/options":{"get":{"tags":["用户管理"],"summary":"获取部门选择列表","description":"获取部门选择列表(用于用户管理中的部门选择,仅限 tenant scope 用户访问)","operationId":"get_department_options_api_v1_users_departments_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DepartmentResponse"},"type":"array","title":"Response Get Department Options Api V1 Users Departments Options Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/permissions/permissions":{"get":{"tags":["用户管理"],"summary":"获取系统权限列表","description":"获取系统权限列表(需要系统权限)","operationId":"get_system_permissions_api_v1_users_permissions_permissions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"搜索关键词","title":"Search"},"description":"搜索关键词"},{"name":"group","in":"query","required":false,"schema":{"type":"string","description":"权限分组过滤","title":"Group"},"description":"权限分组过滤"},{"name":"resource","in":"query","required":false,"schema":{"type":"string","description":"资源过滤","title":"Resource"},"description":"资源过滤"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_Permission_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/permissions/roles":{"get":{"tags":["用户管理"],"summary":"获取角色列表","description":"获取角色列表(支持租户和系统角色)","operationId":"get_roles_api_v1_users_permissions_roles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"搜索关键词","title":"Search"},"description":"搜索关键词"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_Role_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["用户管理"],"summary":"创建角色","description":"创建角色","operationId":"create_role_api_v1_users_permissions_roles_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/permissions/roles/{role_id}":{"get":{"tags":["用户管理"],"summary":"获取角色详情","description":"获取角色详情","operationId":"get_role_api_v1_users_permissions_roles__role_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["用户管理"],"summary":"更新角色","description":"更新角色","operationId":"update_role_api_v1_users_permissions_roles__role_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["用户管理"],"summary":"删除角色","description":"删除角色","operationId":"delete_role_api_v1_users_permissions_roles__role_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Delete Role Api V1 Users Permissions Roles Role Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/permissions/users/{user_id}/roles":{"post":{"tags":["用户管理"],"summary":"为用户分配角色","description":"为用户分配角色(会替换用户现有角色)","operationId":"assign_roles_to_user_api_v1_users_permissions_users__user_id__roles_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRoleAssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["用户管理"],"summary":"获取用户角色列表","description":"获取用户的角色列表","operationId":"get_user_roles_api_v1_users_permissions_users__user_id__roles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"title":"Response Get User Roles Api V1 Users Permissions Users User Id Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/permissions/users/{user_id}/roles/{role_id}":{"delete":{"tags":["用户管理"],"summary":"移除用户角色","description":"移除用户的特定角色","operationId":"remove_user_role_api_v1_users_permissions_users__user_id__roles__role_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Remove User Role Api V1 Users Permissions Users User Id Roles Role Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/system/users":{"post":{"tags":["用户管理"],"summary":"创建系统级用户","description":"创建系统级用户(需要系统权限)","operationId":"create_system_user_api_v1_users_system_users_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["用户管理"],"summary":"获取所有用户账户列表","description":"获取所有用户账户列表(需要系统权限)\n\n支持以下功能:\n- 分页查询\n- 多条件搜索过滤(支持企业名称模糊搜索)\n- 系统用户和租户超级用户管理","operationId":"list_system_users_api_v1_users_system_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"搜索关键词(用户名、邮箱、全名、手机号、企业名称)","title":"Search"},"description":"搜索关键词(用户名、邮箱、全名、手机号、企业名称)"},{"name":"is_active","in":"query","required":false,"schema":{"type":"boolean","description":"是否活跃","title":"Is Active"},"description":"是否活跃"},{"name":"tenant_id","in":"query","required":false,"schema":{"type":"string","description":"租户id","title":"Tenant Id"},"description":"租户id"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_UserListResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/system/users/{user_id}":{"get":{"tags":["用户管理"],"summary":"获取系统用户信息","description":"获取系统用户信息(需要系统权限)","operationId":"get_system_user_api_v1_users_system_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["用户管理"],"summary":"更新系统用户信息","description":"更新系统用户信息(需要系统权限)","operationId":"update_system_user_api_v1_users_system_users__user_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["用户管理"],"summary":"删除系统用户","description":"删除系统用户(需要系统权限)","operationId":"delete_system_user_api_v1_users_system_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Delete System User Api V1 Users System Users User Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/system/users/stats/summary":{"get":{"tags":["用户管理"],"summary":"获取系统用户统计信息","description":"获取系统用户统计信息(需要系统权限)","operationId":"get_system_user_stats_api_v1_users_system_users_stats_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get System User Stats Api V1 Users System Users Stats Summary Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/system/users/{user_id}/activate":{"post":{"tags":["用户管理"],"summary":"激活系统用户","description":"激活系统用户(需要系统权限)","operationId":"activate_system_user_api_v1_users_system_users__user_id__activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Activate System User Api V1 Users System Users User Id Activate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/system/users/{user_id}/deactivate":{"post":{"tags":["用户管理"],"summary":"停用系统用户","description":"停用系统用户(需要系统权限)","operationId":"deactivate_system_user_api_v1_users_system_users__user_id__deactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Deactivate System User Api V1 Users System Users User Id Deactivate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants":{"post":{"tags":["租户管理"],"summary":"创建租户","description":"创建新租户","operationId":"create_tenant_api_v1_tenants_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["租户管理"],"summary":"查询企业列表","description":"获取租户列表","operationId":"list_tenants_api_v1_tenants_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"企业名称、编码(模糊查询)","title":"Search"},"description":"企业名称、编码(模糊查询)"},{"name":"audit_status","in":"query","required":false,"schema":{"type":"string","description":"审核状态","title":"Audit Status"},"description":"审核状态"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_TenantResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/audit-logs":{"get":{"tags":["租户管理"],"summary":"获取租户审计日志","description":"获取租户审计日志","operationId":"get_tenant_audit_logs_api_v1_tenants_audit_logs_get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"type":"string","description":"租户id","title":"Tenant Id"},"description":"租户id"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"搜索关键词(用户名、邮箱、全名、手机号、企业名称)","title":"Search"},"description":"搜索关键词(用户名、邮箱、全名、手机号、企业名称)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_TenantAuditLogResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/me":{"get":{"tags":["租户管理"],"summary":"获取当前租户信息","description":"获取当前登录租户的详细信息","operationId":"get_current_tenant_api_v1_tenants_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/submit":{"post":{"tags":["租户管理"],"summary":"提交租户审核","description":"提交租户审核","operationId":"submit_tenant_audit_api_v1_tenants_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/{tenant_id}":{"get":{"tags":["租户管理"],"summary":"获取企业详情","description":"获取租户详情","operationId":"get_tenant_api_v1_tenants__tenant_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["租户管理"],"summary":"删除租户(软删除)","description":"删除租户(软删除)","operationId":"delete_tenant_api_v1_tenants__tenant_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseResponse_bool_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/{tenant_id}/audit":{"post":{"tags":["租户管理"],"summary":"审核租户","description":"审核租户","operationId":"audit_tenant_api_v1_tenants__tenant_id__audit_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/{tenant_id}/disable":{"patch":{"tags":["租户管理"],"summary":"禁用租户","description":"禁用租户","operationId":"disable_tenant_api_v1_tenants__tenant_id__disable_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/{tenant_id}/enable":{"patch":{"tags":["租户管理"],"summary":"启用租户","description":"启用租户","operationId":"enable_tenant_api_v1_tenants__tenant_id__enable_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/anonymous/list":{"get":{"tags":["租户管理"],"summary":"匿名查询租户列表","description":"匿名查询租户列表 - 只返回已审核通过的租户ID、编码和名称","operationId":"list_anonymous_tenants_api_v1_tenants_anonymous_list_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"企业名称、编码(模糊查询)","title":"Search"},"description":"企业名称、编码(模糊查询)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_TenantAnonymousResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/departments":{"post":{"tags":["部门管理"],"summary":"创建部门","description":"创建新的部门","operationId":"create_department_api_v1_departments_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepartmentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepartmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["部门管理"],"summary":"获取部门列表","description":"分页获取部门列表,支持状态过滤和模糊查询","operationId":"get_departments_api_v1_departments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":10,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"排序方向","default":"desc","title":"Sort Order"},"description":"排序方向"},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"状态过滤","title":"Status Filter"},"description":"状态过滤"},{"name":"name_like","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"部门名称模糊查询","title":"Name Like"},"description":"部门名称模糊查询"},{"name":"code_like","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"部门编码模糊查询","title":"Code Like"},"description":"部门编码模糊查询"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_DepartmentResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/departments/tree":{"get":{"tags":["部门管理"],"summary":"获取部门树形结构","description":"获取部门树形结构(一级部门及其子部门)","operationId":"get_department_tree_api_v1_departments_tree_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DepartmentTreeResponse-Output"},"type":"array","title":"Response Get Department Tree Api V1 Departments Tree Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/departments/{department_id}":{"get":{"tags":["部门管理"],"summary":"获取部门详情","description":"根据ID获取部门详情","operationId":"get_department_api_v1_departments__department_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"department_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Department Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepartmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["部门管理"],"summary":"更新部门","description":"更新部门信息","operationId":"update_department_api_v1_departments__department_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"department_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Department Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepartmentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepartmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["部门管理"],"summary":"删除部门","description":"删除部门(需要先删除所有子部门和用户关联)","operationId":"delete_department_api_v1_departments__department_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"department_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Department Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/departments/{department_id}/order":{"patch":{"tags":["部门管理"],"summary":"更新部门排序","description":"更新部门排序索引","operationId":"update_department_order_api_v1_departments__department_id__order_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"department_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Department Id"}},{"name":"order_index","in":"query","required":true,"schema":{"type":"integer","minimum":0,"description":"排序索引","title":"Order Index"},"description":"排序索引"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepartmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/departments/{department_id}/status":{"patch":{"tags":["部门管理"],"summary":"更新部门状态","description":"启用或停用部门","operationId":"update_department_status_api_v1_departments__department_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"department_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Department Id"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","description":"状态: active/inactive","title":"Status"},"description":"状态: active/inactive"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepartmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/departments/{department_id}/users-count":{"get":{"tags":["部门管理"],"summary":"获取部门用户数量","description":"获取部门下的用户数量","operationId":"get_department_users_count_api_v1_departments__department_id__users_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"department_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Department Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/login/login-logs":{"get":{"tags":["日志管理","日志管理","登录日志"],"summary":"获取登录日志列表","description":"获取登录日志列表","operationId":"list_login_logs_api_v1_logs_login_login_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":10,"title":"Size"},"description":"每页数量"},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"关键词搜索","title":"Keyword"},"description":"关键词搜索"},{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Time"},"description":"开始时间"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Time"},"description":"结束时间"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"},{"name":"ip_address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IP地址","title":"Ip Address"},"description":"IP地址"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"登录状态","title":"Status"},"description":"登录状态"},{"name":"method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"登录方式","title":"Method"},"description":"登录方式"},{"name":"is_suspicious","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"是否可疑","title":"Is Suspicious"},"description":"是否可疑"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Login Logs Api V1 Logs Login Login Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/login/login-logs/statistics":{"get":{"tags":["日志管理","日志管理","登录日志"],"summary":"获取登录统计信息","description":"获取登录统计信息","operationId":"get_login_statistics_api_v1_logs_login_login_logs_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始日期","title":"Start Date"},"description":"开始日期"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束日期","title":"End Date"},"description":"结束日期"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginLogStatistics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/login/login-logs/export":{"get":{"tags":["日志管理","日志管理","登录日志"],"summary":"导出登录日志","description":"导出登录日志","operationId":"export_login_logs_api_v1_logs_login_login_logs_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Time"},"description":"开始时间"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Time"},"description":"结束时间"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(csv|excel)$","description":"导出格式","default":"csv","title":"Format"},"description":"导出格式"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/login/login-logs/suspicious":{"get":{"tags":["日志管理","日志管理","登录日志"],"summary":"获取可疑登录记录","description":"获取可疑登录记录","operationId":"get_suspicious_logins_api_v1_logs_login_login_logs_suspicious_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Suspicious Logins Api V1 Logs Login Login Logs Suspicious Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/login/login-logs/failed-attempts":{"get":{"tags":["日志管理","日志管理","登录日志"],"summary":"获取失败登录尝试","description":"获取失败登录尝试","operationId":"get_failed_login_attempts_api_v1_logs_login_login_logs_failed_attempts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"},{"name":"username","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户名","title":"Username"},"description":"用户名"},{"name":"ip_address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IP地址","title":"Ip Address"},"description":"IP地址"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Failed Login Attempts Api V1 Logs Login Login Logs Failed Attempts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/login/login-logs/user/{user_id}/history":{"get":{"tags":["日志管理","日志管理","登录日志"],"summary":"获取用户登录历史","description":"获取用户登录历史","operationId":"get_user_login_history_api_v1_logs_login_login_logs_user__user_id__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"记录数量限制","default":50,"title":"Limit"},"description":"记录数量限制"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Login History Api V1 Logs Login Login Logs User User Id History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/operation/operation-logs":{"get":{"tags":["日志管理","日志管理","操作日志"],"summary":"获取操作日志列表","description":"获取操作日志列表","operationId":"list_operation_logs_api_v1_logs_operation_operation_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"关键词搜索","title":"Keyword"},"description":"关键词搜索"},{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Time"},"description":"开始时间"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Time"},"description":"结束时间"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"},{"name":"operation_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"操作类型","title":"Operation Type"},"description":"操作类型"},{"name":"module","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"操作模块","title":"Module"},"description":"操作模块"},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"操作动作","title":"Action"},"description":"操作动作"},{"name":"request_method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"请求方法","title":"Request Method"},"description":"请求方法"},{"name":"response_status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"响应状态码","title":"Response Status"},"description":"响应状态码"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_OperationLogResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/operation/operation-logs/statistics":{"get":{"tags":["日志管理","日志管理","操作日志"],"summary":"获取操作统计信息","description":"获取操作统计信息","operationId":"get_operation_statistics_api_v1_logs_operation_operation_logs_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始日期","title":"Start Date"},"description":"开始日期"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束日期","title":"End Date"},"description":"结束日期"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperationLogStatistics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/operation/operation-logs/export":{"get":{"tags":["日志管理","日志管理","操作日志"],"summary":"导出操作日志","description":"导出操作日志","operationId":"export_operation_logs_api_v1_logs_operation_operation_logs_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Time"},"description":"开始时间"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Time"},"description":"结束时间"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(csv|excel)$","description":"导出格式","default":"csv","title":"Format"},"description":"导出格式"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/operation/operation-logs/errors":{"get":{"tags":["日志管理","日志管理","操作日志"],"summary":"获取错误操作记录","description":"获取错误操作记录","operationId":"get_error_operations_api_v1_logs_operation_operation_logs_errors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"},{"name":"module","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"操作模块","title":"Module"},"description":"操作模块"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Error Operations Api V1 Logs Operation Operation Logs Errors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/operation/operation-logs/module/{module}/history":{"get":{"tags":["日志管理","日志管理","操作日志"],"summary":"获取模块操作记录","description":"获取模块操作记录","operationId":"get_module_operations_api_v1_logs_operation_operation_logs_module__module__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"module","in":"path","required":true,"schema":{"type":"string","title":"Module"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"},{"name":"operation_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"操作类型","title":"Operation Type"},"description":"操作类型"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Module Operations Api V1 Logs Operation Operation Logs Module Module History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/operation/operation-logs/user/{user_id}/history":{"get":{"tags":["日志管理","日志管理","操作日志"],"summary":"获取用户操作历史","description":"获取用户操作历史","operationId":"get_user_operation_history_api_v1_logs_operation_operation_logs_user__user_id__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"记录数量限制","default":50,"title":"Limit"},"description":"记录数量限制"},{"name":"module","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"操作模块","title":"Module"},"description":"操作模块"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Operation History Api V1 Logs Operation Operation Logs User User Id History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/network/network-logs":{"get":{"tags":["日志管理","日志管理","网络日志"],"summary":"获取网络日志列表","description":"获取网络日志列表","operationId":"list_network_logs_api_v1_logs_network_network_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":10,"title":"Size"},"description":"每页数量"},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"关键词搜索","title":"Keyword"},"description":"关键词搜索"},{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Time"},"description":"开始时间"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Time"},"description":"结束时间"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"},{"name":"ip_address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IP地址","title":"Ip Address"},"description":"IP地址"},{"name":"request_method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"请求方法","title":"Request Method"},"description":"请求方法"},{"name":"request_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"请求路径","title":"Request Path"},"description":"请求路径"},{"name":"response_status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"响应状态码","title":"Response Status"},"description":"响应状态码"},{"name":"is_error","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"是否错误","title":"Is Error"},"description":"是否错误"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Network Logs Api V1 Logs Network Network Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/network/network-logs/statistics":{"get":{"tags":["日志管理","日志管理","网络日志"],"summary":"获取网络统计信息","description":"获取网络统计信息","operationId":"get_network_statistics_api_v1_logs_network_network_logs_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始日期","title":"Start Date"},"description":"开始日期"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束日期","title":"End Date"},"description":"结束日期"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkLogStatistics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/network/network-logs/export":{"get":{"tags":["日志管理","日志管理","网络日志"],"summary":"导出网络日志","description":"导出网络日志","operationId":"export_network_logs_api_v1_logs_network_network_logs_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Time"},"description":"开始时间"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Time"},"description":"结束时间"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(csv|excel)$","description":"导出格式","default":"csv","title":"Format"},"description":"导出格式"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/network/network-logs/errors":{"get":{"tags":["日志管理","日志管理","网络日志"],"summary":"获取错误请求记录","description":"获取错误请求记录","operationId":"get_error_requests_api_v1_logs_network_network_logs_errors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"},{"name":"status_code","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"特定状态码","title":"Status Code"},"description":"特定状态码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Error Requests Api V1 Logs Network Network Logs Errors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/network/network-logs/slow":{"get":{"tags":["日志管理","日志管理","网络日志"],"summary":"获取慢请求记录","description":"获取慢请求记录","operationId":"get_slow_requests_api_v1_logs_network_network_logs_slow_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"threshold_seconds","in":"query","required":false,"schema":{"type":"number","maximum":60.0,"minimum":0.1,"description":"阈值(秒)","default":2.0,"title":"Threshold Seconds"},"description":"阈值(秒)"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Slow Requests Api V1 Logs Network Network Logs Slow Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/network/network-logs/ip/{ip_address}/activity":{"get":{"tags":["日志管理","日志管理","网络日志"],"summary":"获取IP活动记录","description":"获取IP活动记录","operationId":"get_ip_activity_api_v1_logs_network_network_logs_ip__ip_address__activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ip_address","in":"path","required":true,"schema":{"type":"string","title":"Ip Address"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Ip Activity Api V1 Logs Network Network Logs Ip Ip Address Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/network/network-logs/endpoint/{endpoint}/statistics":{"get":{"tags":["日志管理","日志管理","网络日志"],"summary":"获取端点统计信息","description":"获取端点统计信息","operationId":"get_endpoint_statistics_api_v1_logs_network_network_logs_endpoint__endpoint__statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint","in":"path","required":true,"schema":{"type":"string","title":"Endpoint"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Endpoint Statistics Api V1 Logs Network Network Logs Endpoint Endpoint Statistics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/query/{log_type}":{"get":{"tags":["日志管理","日志管理","日志查询"],"summary":"统一日志搜索接口","description":"统一日志搜索接口","operationId":"search_logs_api_v1_logs_query__log_type__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_type","in":"path","required":true,"schema":{"type":"string","title":"Log Type"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":10,"title":"Size"},"description":"每页数量"},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"关键词搜索","title":"Keyword"},"description":"关键词搜索"},{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Time"},"description":"开始时间"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Time"},"description":"结束时间"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"用户ID","title":"User Id"},"description":"用户ID"},{"name":"ip_address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IP地址","title":"Ip Address"},"description":"IP地址"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Logs Api V1 Logs Query Log Type Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/query/{log_type}/export":{"post":{"tags":["日志管理","日志管理","日志查询"],"summary":"统一日志导出接口","description":"统一日志导出接口","operationId":"export_logs_api_v1_logs_query__log_type__export_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_type","in":"path","required":true,"schema":{"type":"string","title":"Log Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/query/statistics/comprehensive":{"get":{"tags":["日志管理","日志管理","日志查询"],"summary":"获取综合统计信息","description":"获取综合统计信息","operationId":"get_comprehensive_statistics_api_v1_logs_query_statistics_comprehensive_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始日期","title":"Start Date"},"description":"开始日期"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束日期","title":"End Date"},"description":"结束日期"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Comprehensive Statistics Api V1 Logs Query Statistics Comprehensive Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/query/user/{user_id}/activity":{"get":{"tags":["日志管理","日志管理","日志查询"],"summary":"获取用户活动摘要","description":"获取用户活动摘要","operationId":"get_user_activity_summary_api_v1_logs_query_user__user_id__activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"时间范围(小时)","default":24,"title":"Hours"},"description":"时间范围(小时)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Activity Summary Api V1 Logs Query User User Id Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/query/cleanup":{"post":{"tags":["日志管理","日志管理","日志查询"],"summary":"清理旧日志记录","description":"清理旧日志记录","operationId":"cleanup_old_logs_api_v1_logs_query_cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"保留天数","default":90,"title":"Days"},"description":"保留天数"},{"name":"log_types","in":"query","required":false,"schema":{"type":"string","description":"日志类型,逗号分隔","default":"login,operation,network","title":"Log Types"},"description":"日志类型,逗号分隔"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cleanup Old Logs Api V1 Logs Query Cleanup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/send":{"post":{"tags":["消息系统","消息发送"],"summary":"发送消息","description":"发送消息\n\n- **message_type**: 消息类型 (email/sms/inbox/push)\n- **recipients**: 接收者列表\n- **subject**: 消息主题(可选)\n- **content**: 消息内容\n- **template_id**: 模板ID(可选)\n- **variables**: 模板变量(可选)\n- **priority**: 消息优先级(low/normal/high/urgent)\n- **scheduled_at**: 计划发送时间(可选)","operationId":"send_message_api_v1_messages_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSendRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/messages/schedule":{"post":{"tags":["消息系统","消息发送"],"summary":"发送定时消息","description":"发送定时消息\n\n与实时发送相同,但必须指定 scheduled_at 参数","operationId":"schedule_message_api_v1_messages_schedule_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSendRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/messages/{message_id}/cancel":{"delete":{"tags":["消息系统","消息发送"],"summary":"取消定时消息","description":"取消定时消息\n\n- **message_id**: 消息ID","operationId":"cancel_scheduled_message_api_v1_messages__message_id__cancel_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/{message_id}/retry":{"post":{"tags":["消息系统","消息发送"],"summary":"重试失败的消息","description":"重试失败的消息\n\n- **message_id**: 消息ID","operationId":"retry_failed_message_api_v1_messages__message_id__retry_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/inbox":{"get":{"tags":["消息系统","消息发送"],"summary":"获取用户站内信列表","description":"获取当前用户的站内信列表\n\n- **is_read**: 是否已读(可选)\n- **page**: 页码,默认为1\n- **page_size**: 每页数量,默认为20,最大为100","operationId":"get_user_inbox_messages_api_v1_messages_inbox_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"is_read","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Read"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_InboxMessageResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/inbox/{message_id}/read":{"post":{"tags":["消息系统","消息发送"],"summary":"标记站内信为已读","description":"标记站内信为已读\n\n- **message_id**: 消息ID","operationId":"mark_message_as_read_api_v1_messages_inbox__message_id__read_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/inbox/unread-count":{"get":{"tags":["消息系统","消息发送"],"summary":"获取未读消息数量","description":"获取当前用户的未读消息数量","operationId":"get_unread_message_count_api_v1_messages_inbox_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/messages/inbox/read-all":{"post":{"tags":["消息系统","消息发送"],"summary":"标记所有消息为已读","description":"标记当前用户的所有站内信为已读","operationId":"mark_all_messages_as_read_api_v1_messages_inbox_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/messages/test-email-config":{"post":{"tags":["消息���统","消息发送"],"summary":"测试邮件配置","description":"测试邮件配置是否有效","operationId":"test_email_config_api_v1_messages_test_email_config_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recipient","in":"query","required":true,"schema":{"type":"string","description":"测试邮件接收地址","title":"Recipient"},"description":"测试邮件接收地址"},{"name":"is_html","in":"query","required":false,"schema":{"type":"boolean","description":"是否HTML","default":true,"title":"Is Html"},"description":"是否HTML"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionConfig"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailConfigTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/templates":{"post":{"tags":["消息系统","消息模板"],"summary":"创建消息模板","description":"创建消息模板\n\n- **name**: 模板名称\n- **description**: 模板描述(可选)\n- **message_type**: 消息类型\n- **subject**: 消息主题(可选)\n- **content**: 模板内容\n- **template_type**: 模板类型(system/custom)","operationId":"create_template_api_v1_messages_templates_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageTemplateCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["消息系统","消息模板"],"summary":"获取模板列表","description":"获取消息模板列表\n\n- **page**: 页码\n- **size**: 每页数量\n- **order_by**: 排序字段\n- **sort_order**: 排序方向\n- **message_type**: 按消息类型过滤\n- **template_type**: 按模板类型过滤\n- **is_active**: 按启用状态过滤","operationId":"list_templates_api_v1_messages_templates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/MessageType"},{"type":"null"}],"description":"消息类型","title":"Message Type"},"description":"消息类型"},{"name":"template_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/TemplateType"},{"type":"null"}],"description":"模板类型","title":"Template Type"},"description":"模板类型"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"是否启用","title":"Is Active"},"description":"是否启用"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_MessageTemplateResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/templates/{template_id}":{"get":{"tags":["消息系统","消息模板"],"summary":"获取模板详情","description":"获取模板详情\n\n- **template_id**: 模板ID","operationId":"get_template_api_v1_messages_templates__template_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["消息系统","消息模板"],"summary":"更新模板","description":"更新模板\n\n- **template_id**: 模板ID\n- **name**: 模板名称(可选)\n- **description**: 模板描述(可选)\n- **subject**: 消息主题(可选)\n- **content**: 模板内容(可选)\n- **is_active**: 是否启用(可选)","operationId":"update_template_api_v1_messages_templates__template_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageTemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["消息系统","消息模板"],"summary":"删除模板","description":"删除模板\n\n- **template_id**: 模板ID","operationId":"delete_template_api_v1_messages_templates__template_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/templates/{template_id}/test":{"post":{"tags":["消息系统","消息模板"],"summary":"测试模板渲染","description":"测试模板渲染\n\n- **template_id**: 模板ID\n- **test_variables**: 测试变量","operationId":"test_template_api_v1_messages_templates__template_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Test Variables"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs":{"get":{"tags":["消息系统","消息日志"],"summary":"获取消息日志列表","description":"获取消息日志列表\n\n根据查询条件获取消息发送记录列表,支持按消息类型、发送状态、接收者、时间范围等条件过滤。\n\n- **page**: 页码\n- **size**: 每页数量\n- **order_by**: 排序字段\n- **sort_order**: 排序方向\n- **message_type**: 按消息类型过滤\n- **status**: 按发送状态过滤\n- **recipient**: 按接收者过滤\n- **start_date**: 开始时间\n- **end_date**: 结束时间","operationId":"list_message_logs_api_v1_messages_logs_message_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/MessageType"},{"type":"null"}],"description":"消息类型","title":"Message Type"},"description":"消息类型"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/MessageStatus"},{"type":"null"}],"description":"发送状态","title":"Status"},"description":"发送状态"},{"name":"recipient","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"接收者","title":"Recipient"},"description":"接收者"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"开始时间","title":"Start Date"},"description":"开始时间"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"结束时间","title":"End Date"},"description":"结束时间"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_MessageLogResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs/{message_id}":{"get":{"tags":["消息系统","消息日志"],"summary":"获取消息详情","description":"获取消息详情\n\n根据消息ID获取详细的发送记录信息,包括消息内容、发送状态、时间戳等。\n\n- **message_id**: 消息ID","operationId":"get_message_log_api_v1_messages_logs_message_logs__message_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs/{message_id}/receipts":{"get":{"tags":["消息系统","消息日志"],"summary":"获取消息接收记录","description":"获取消息接收记录\n\n获取指定消息的所有接收记录,包括接收者、阅读状态、阅读时间等信息。\n\n- **message_id**: 消息ID","operationId":"get_message_receipts_api_v1_messages_logs_message_logs__message_id__receipts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageReceiptResponse"},"title":"Response Get Message Receipts Api V1 Messages Logs Message Logs Message Id Receipts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs/{message_id}/read":{"post":{"tags":["消息系统","消息日志"],"summary":"标记消息为已读","description":"标记消息为已读\n\n- **message_id**: 消息ID\n- **recipient**: 接收者","operationId":"mark_message_as_read_api_v1_messages_logs_message_logs__message_id__read_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}},{"name":"recipient","in":"query","required":true,"schema":{"type":"string","description":"接收者","title":"Recipient"},"description":"接收者"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs/statistics/overview":{"get":{"tags":["消息系统","消息日志"],"summary":"获取消息统计概览","description":"获取消息统计概览\n\n- **days**: 统计天数","operationId":"get_message_statistics_api_v1_messages_logs_message_logs_statistics_overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"统计天数","default":30,"title":"Days"},"description":"统计天数"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs/statistics/recipient/{recipient}":{"get":{"tags":["消息系统","消息日志"],"summary":"获取接收者统计","description":"获取接收者统计\n\n- **recipient**: 接收者\n- **days**: 统计天数","operationId":"get_recipient_statistics_api_v1_messages_logs_message_logs_statistics_recipient__recipient__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recipient","in":"path","required":true,"schema":{"type":"string","title":"Recipient"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"统计天数","default":30,"title":"Days"},"description":"统计天数"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs/unread/count":{"get":{"tags":["消息系统","消息日志"],"summary":"获取未读消息数量","description":"获取未读消息数量\n\n- **recipient**: 接收者","operationId":"get_unread_count_api_v1_messages_logs_message_logs_unread_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recipient","in":"query","required":false,"schema":{"type":"string","description":"接收者","title":"Recipient"},"description":"接收者"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/logs/message-logs/cleanup":{"post":{"tags":["消息系统","消息日志"],"summary":"清理旧日志","description":"清理旧日志\n\n清理指定天数之前的消息日志和接收记录。\n\n- **days**: 保留天数,默认90天","operationId":"cleanup_old_logs_api_v1_messages_logs_message_logs_cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"保留天数","default":90,"title":"Days"},"description":"保留天数"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/configs/configs":{"get":{"tags":["消息系统","外部服务配置"],"summary":"获取外部服务配置列表","description":"获取外部服务配置列表\n\n- **service_type**: 服务类型过滤 (可选)\n- **is_active**: 是否启用过滤 (可选)","operationId":"list_external_service_configs_api_v1_messages_configs_configs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"service_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ExternalServiceType"},{"type":"null"}],"title":"Service Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExternalServiceConfigResponse"},"title":"Response List External Service Configs Api V1 Messages Configs Configs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["消息系统","外部服务配置"],"summary":"创建外部服务配置","description":"创建外部服务配置\n\n- **name**: 服务名称\n- **service_type**: 服务类型\n- **config**: 服务配置 (JSON格式)\n- **is_active**: 是否启用\n- **is_default**: 是否默认服务","operationId":"create_external_service_config_api_v1_messages_configs_configs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalServiceConfigCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalServiceConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/configs/configs/{config_id}":{"get":{"tags":["消息系统","外部服务配置"],"summary":"获取外部服务配置详情","description":"获取外部服务配置详情\n\n- **config_id**: 配置ID","operationId":"get_external_service_config_api_v1_messages_configs_configs__config_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalServiceConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["消息系统","外部服务配置"],"summary":"更新外部服务配置","description":"更新外部服务配置\n\n- **config_id**: 配置ID\n- **config_data**: 更新数据","operationId":"update_external_service_config_api_v1_messages_configs_configs__config_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalServiceConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalServiceConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["消息系统","外部服务配置"],"summary":"删除外部服务配置","description":"删除外部服务配置\n\n- **config_id**: 配置ID","operationId":"delete_external_service_config_api_v1_messages_configs_configs__config_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/configs/configs/{config_id}/set-default":{"post":{"tags":["消息系统","外部服务配置"],"summary":"设置默认服务","description":"设置默认服务\n\n- **config_id**: 配置ID","operationId":"set_default_service_api_v1_messages_configs_configs__config_id__set_default_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalServiceConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/configs/configs/{config_id}/health-check":{"post":{"tags":["消息系统","外部服务配置"],"summary":"检查服务健康状态","description":"检查服务健康状态\n\n- **config_id**: 配置ID","operationId":"check_service_health_api_v1_messages_configs_configs__config_id__health_check_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/health":{"get":{"tags":["系统管理"],"summary":"基础健康检查","description":"基础健康检查","operationId":"health_check_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Check Api V1 Health Get"}}}}}}},"/api/v1/health/detailed":{"get":{"tags":["系统管理"],"summary":"详细健康检查","description":"详细健康检查,包含数据库连接状态","operationId":"detailed_health_check_api_v1_health_detailed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Detailed Health Check Api V1 Health Detailed Get"}}}}}}},"/api/v1/system/info":{"get":{"tags":["系统管理"],"summary":"获取系统信息","description":"获取系统基本信息","operationId":"get_system_info_api_v1_system_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get System Info Api V1 System Info Get"}}}}}}},"/api/v1/system/stats":{"get":{"tags":["系统管理"],"summary":"获取系统统计信息","description":"获取系统统计信息","operationId":"get_system_stats_api_v1_system_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get System Stats Api V1 System Stats Get"}}}}}}},"/api/v1/system/config":{"get":{"tags":["系统管理"],"summary":"获取系统配置","description":"获取公开的系统配置","operationId":"get_system_config_api_v1_system_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get System Config Api V1 System Config Get"}}}}}}},"/api/v1/system/metrics":{"get":{"tags":["系统管理"],"summary":"获取系统性能指标","description":"获取系统性能指标\n\n需要超级管理员权限访问\n\n- **sanitize**: 是否对敏感数据进行脱敏处理(默认:True)","operationId":"get_system_metrics_api_v1_system_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sanitize","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Sanitize"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system/metrics/summary":{"get":{"tags":["系统管理"],"summary":"获取性能指标摘要","description":"获取系统性能指标摘要\n\n需要超级管理员权限访问","operationId":"get_performance_summary_api_v1_system_metrics_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceMetricsSummary"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/settings":{"post":{"tags":["管理员设置","管理员设置"],"summary":"创建管理员设置","description":"创建新的管理员设置项","operationId":"create_admin_setting_api_v1_admin_settings_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettingsCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["管理员设置","管理员设置"],"summary":"获取管理员设置列表","description":"分页获取管理员设置列表","operationId":"list_admin_settings_api_v1_admin_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":20,"title":"Size"},"description":"每页数量"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段","title":"Order By"},"description":"排序字段"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"排序方向 (asc/desc)","default":"desc","title":"Sort Order"},"description":"排序方向 (asc/desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_AdminSettingsResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/settings/{key}":{"get":{"tags":["管理员设置","管理员设置"],"summary":"获取管理员设置","description":"根据键名获取指定的管理员设置","operationId":"get_admin_setting_api_v1_admin_settings__key__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["管理员设置","管理员设置"],"summary":"更新管理员设置","description":"更新指定的管理员设置项","operationId":"update_admin_setting_api_v1_admin_settings__key__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettingsUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["管理员设置","管理员设置"],"summary":"删除管理员设置","description":"删除指定的管理员设置项","operationId":"delete_admin_setting_api_v1_admin_settings__key__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health Check","description":"健康检查","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdminSettingsCreateRequest":{"properties":{"key":{"type":"string","maxLength":255,"minLength":1,"title":"Key","description":"设置键名"},"json_value":{"additionalProperties":true,"type":"object","title":"Json Value","description":"设置值JSON数据"}},"type":"object","required":["key","json_value"],"title":"AdminSettingsCreateRequest","description":"创建管理员设置请求"},"AdminSettingsResponse":{"properties":{"id":{"type":"string","title":"Id","description":"设置ID"},"key":{"type":"string","title":"Key","description":"设置键名"},"json_value":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Json Value","description":"设置值JSON数据"}},"type":"object","required":["key"],"title":"AdminSettingsResponse","description":"管理员设置响应"},"AdminSettingsUpdateRequest":{"properties":{"json_value":{"additionalProperties":true,"type":"object","title":"Json Value","description":"设置值JSON数据"}},"type":"object","required":["json_value"],"title":"AdminSettingsUpdateRequest","description":"更新管理员设置请求"},"ApplicationMetrics":{"properties":{"request_count":{"type":"integer","minimum":0.0,"title":"Request Count","description":"请求总数"},"error_count":{"type":"integer","minimum":0.0,"title":"Error Count","description":"错误数量"},"avg_response_time":{"type":"number","minimum":0.0,"title":"Avg Response Time","description":"平均响应时间(毫秒)"},"active_connections":{"type":"integer","minimum":0.0,"title":"Active Connections","description":"活跃连接数"},"database_connections":{"additionalProperties":{"type":"integer"},"type":"object","title":"Database Connections","description":"数据库连接池状态"}},"type":"object","required":["request_count","error_count","avg_response_time","active_connections"],"title":"ApplicationMetrics","description":"应用性能指标模型"},"AuditStatus":{"type":"string","enum":["草稿","待审核","已通过","已拒绝"],"title":"AuditStatus","description":"审核状态枚举"},"BaseResponse_bool_":{"properties":{"success":{"type":"boolean","title":"Success","description":"请求是否成功","default":true},"code":{"type":"string","title":"Code","description":"业务状态码","default":"SUCCESS"},"message":{"type":"string","title":"Message","description":"响应消息","default":"操作成功"},"data":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Data","description":"响应数据"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id","description":"请求追踪ID"}},"type":"object","title":"BaseResponse[bool]"},"CPUInfo":{"properties":{"usage_percent":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Usage Percent","description":"CPU 使用率百分比"},"core_count":{"type":"integer","minimum":1.0,"title":"Core Count","description":"CPU 核心数量"},"load_avg_1min":{"type":"number","minimum":0.0,"title":"Load Avg 1Min","description":"1分钟负载平均值"},"load_avg_5min":{"type":"number","minimum":0.0,"title":"Load Avg 5Min","description":"5分钟负载平均值"},"load_avg_15min":{"type":"number","minimum":0.0,"title":"Load Avg 15Min","description":"15分钟负载平均值"}},"type":"object","required":["usage_percent","core_count","load_avg_1min","load_avg_5min","load_avg_15min"],"title":"CPUInfo","description":"CPU 信息模型"},"CaptchaResponse":{"properties":{"captcha_id":{"type":"string","title":"Captcha Id","description":"验证码ID"},"image":{"type":"string","title":"Image","description":"验证码图片(base64)"}},"type":"object","required":["captcha_id","image"],"title":"CaptchaResponse","description":"验证码响应模型"},"CompanyScale":{"type":"string","enum":["小型(50人以下)","中型(50-300人)","大型(300人以上)"],"title":"CompanyScale","description":"公司规模枚举"},"ConnectionConfig":{"properties":{"MAIL_USERNAME":{"type":"string","title":"Mail Username"},"MAIL_PASSWORD":{"type":"string","format":"password","title":"Mail Password","writeOnly":true},"MAIL_PORT":{"type":"integer","title":"Mail Port"},"MAIL_SERVER":{"type":"string","title":"Mail Server"},"MAIL_STARTTLS":{"type":"boolean","title":"Mail Starttls"},"MAIL_SSL_TLS":{"type":"boolean","title":"Mail Ssl Tls"},"MAIL_DEBUG":{"type":"integer","exclusiveMaximum":2.0,"exclusiveMinimum":-1.0,"title":"Mail Debug","default":0},"MAIL_FROM":{"type":"string","format":"email","title":"Mail From"},"MAIL_FROM_NAME":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mail From Name"},"TEMPLATE_FOLDER":{"anyOf":[{"type":"string","format":"directory-path"},{"type":"null"}],"title":"Template Folder"},"SUPPRESS_SEND":{"type":"integer","exclusiveMaximum":2.0,"exclusiveMinimum":-1.0,"title":"Suppress Send","default":0},"USE_CREDENTIALS":{"type":"boolean","title":"Use Credentials","default":true},"VALIDATE_CERTS":{"type":"boolean","title":"Validate Certs","default":true},"TIMEOUT":{"type":"integer","title":"Timeout","default":60},"LOCAL_HOSTNAME":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Local Hostname"},"CERT_BUNDLE":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cert Bundle"}},"additionalProperties":false,"type":"object","required":["MAIL_USERNAME","MAIL_PASSWORD","MAIL_PORT","MAIL_SERVER","MAIL_STARTTLS","MAIL_SSL_TLS","MAIL_FROM"],"title":"ConnectionConfig"},"DepartmentCreate":{"properties":{"code":{"type":"string","maxLength":50,"minLength":1,"title":"Code","description":"部门编码"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"部门名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"部门描述"},"manager_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Manager Name","description":"部门负责人姓名"},"manager_phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Manager Phone","description":"部门负责人联系电话"},"manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Manager Email","description":"部门负责人邮箱"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id","description":"父部门ID"},"order_index":{"type":"integer","minimum":0.0,"title":"Order Index","description":"排序索引","default":0},"status":{"type":"string","title":"Status","description":"部门状态:active-启用, inactive-停用","default":"active"}},"type":"object","required":["code","name"],"title":"DepartmentCreate","description":"创建部门模式"},"DepartmentResponse":{"properties":{"code":{"type":"string","maxLength":50,"minLength":1,"title":"Code","description":"部门编码"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"部门名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"部门描述"},"manager_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Manager Name","description":"部门负责人姓名"},"manager_phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Manager Phone","description":"部门负责人联系电话"},"manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Manager Email","description":"部门负责人邮箱"},"id":{"type":"string","format":"uuid","title":"Id","description":"部门ID"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id","description":"租户ID"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id","description":"父部门ID"},"order_index":{"type":"integer","title":"Order Index","description":"排序索引"},"status":{"type":"string","title":"Status","description":"部门状态"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"创建人"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By","description":"更新人"}},"type":"object","required":["code","name","id","order_index","status","created_at","updated_at"],"title":"DepartmentResponse","description":"部门响应模式"},"DepartmentTreeResponse-Input":{"properties":{"code":{"type":"string","maxLength":50,"minLength":1,"title":"Code","description":"部门编码"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"部门名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"部门描述"},"manager_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Manager Name","description":"部门负责人姓名"},"manager_phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Manager Phone","description":"部门负责人联系电话"},"manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Manager Email","description":"部门负责人邮箱"},"id":{"type":"string","format":"uuid","title":"Id","description":"部门ID"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id","description":"租户ID"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id","description":"父部门ID"},"order_index":{"type":"integer","title":"Order Index","description":"排序索引"},"status":{"type":"string","title":"Status","description":"部门状态"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"创建人"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By","description":"更新人"},"children":{"items":{"$ref":"#/components/schemas/DepartmentTreeResponse-Input"},"type":"array","title":"Children","description":"子部门列表"}},"type":"object","required":["code","name","id","order_index","status","created_at","updated_at"],"title":"DepartmentTreeResponse","description":"部门树形响应模式"},"DepartmentTreeResponse-Output":{"properties":{"code":{"type":"string","maxLength":50,"minLength":1,"title":"Code","description":"部门编码"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"部门名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"部门描述"},"manager_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Manager Name","description":"部门负责人姓名"},"manager_phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Manager Phone","description":"部门负责人联系电话"},"manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Manager Email","description":"部门负责人邮箱"},"id":{"type":"string","format":"uuid","title":"Id","description":"部门ID"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id","description":"租户ID"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id","description":"父部门ID"},"order_index":{"type":"integer","title":"Order Index","description":"排序索引"},"status":{"type":"string","title":"Status","description":"部门状态"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"创建人"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By","description":"更新人"},"children":{"items":{"$ref":"#/components/schemas/DepartmentTreeResponse-Output"},"type":"array","title":"Children","description":"子部门列表"}},"type":"object","required":["code","name","id","order_index","status","created_at","updated_at"],"title":"DepartmentTreeResponse","description":"部门树形响应模式"},"DepartmentUpdate":{"properties":{"code":{"anyOf":[{"type":"string","maxLength":50,"minLength":1},{"type":"null"}],"title":"Code","description":"部门编码"},"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name","description":"部门名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"部门描述"},"manager_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Manager Name","description":"部门负责人姓名"},"manager_phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Manager Phone","description":"部门负责人联系电话"},"manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Manager Email","description":"部门负责人邮箱"},"order_index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Order Index","description":"排序索引"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"部门状态"}},"type":"object","title":"DepartmentUpdate","description":"更新部门模式"},"DiskInfo":{"properties":{"total_bytes":{"type":"integer","minimum":0.0,"title":"Total Bytes","description":"总磁盘空间字节数"},"used_bytes":{"type":"integer","minimum":0.0,"title":"Used Bytes","description":"已用磁盘空间字节数"},"free_bytes":{"type":"integer","minimum":0.0,"title":"Free Bytes","description":"可用磁盘空间字节数"},"usage_percent":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Usage Percent","description":"磁盘使用率百分比"},"partitions":{"items":{"$ref":"#/components/schemas/DiskPartitionInfo"},"type":"array","title":"Partitions","description":"磁盘分区列表"}},"type":"object","required":["total_bytes","used_bytes","free_bytes","usage_percent"],"title":"DiskInfo","description":"磁盘信息模型"},"DiskPartitionInfo":{"properties":{"device":{"type":"string","title":"Device","description":"设备名称"},"mountpoint":{"type":"string","title":"Mountpoint","description":"挂载点"},"total_bytes":{"type":"integer","minimum":0.0,"title":"Total Bytes","description":"总空间字节数"},"used_bytes":{"type":"integer","minimum":0.0,"title":"Used Bytes","description":"已用空间字节数"},"free_bytes":{"type":"integer","minimum":0.0,"title":"Free Bytes","description":"可用空间字节数"},"usage_percent":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Usage Percent","description":"使用率百分比"}},"type":"object","required":["device","mountpoint","total_bytes","used_bytes","free_bytes","usage_percent"],"title":"DiskPartitionInfo","description":"磁盘分区信息模型"},"EmailConfigTestResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"测试是否成功"},"message":{"type":"string","title":"Message","description":"测试结果消息"},"config_valid":{"type":"boolean","title":"Config Valid","description":"邮件配置是否有效"},"connection_test":{"type":"boolean","title":"Connection Test","description":"连接测试是否通过"},"delivery_test":{"type":"boolean","title":"Delivery Test","description":"投递测试是否通过"},"error_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Details","description":"错误详情(如果有)"}},"type":"object","required":["success","message","config_valid","connection_test","delivery_test"],"title":"EmailConfigTestResponse","description":"邮件配置测试响应"},"ExternalServiceConfigCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"服务名称"},"service_type":{"$ref":"#/components/schemas/ExternalServiceType","description":"服务类型"},"config":{"type":"string","title":"Config","description":"服务配置 (JSON格式)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"服务描述"},"is_active":{"type":"boolean","title":"Is Active","description":"是否启用","default":true},"is_default":{"type":"boolean","title":"Is Default","description":"是否默认服务","default":false}},"type":"object","required":["name","service_type","config"],"title":"ExternalServiceConfigCreate","description":"外部服务配置创建请求"},"ExternalServiceConfigResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"配置ID"},"name":{"type":"string","title":"Name","description":"服务名称"},"service_type":{"$ref":"#/components/schemas/ExternalServiceType","description":"服务类型"},"config":{"type":"string","title":"Config","description":"服务配置"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"服务描述"},"is_active":{"type":"boolean","title":"Is Active","description":"是否启用"},"is_default":{"type":"boolean","title":"Is Default","description":"是否默认服务"},"is_healthy":{"type":"boolean","title":"Is Healthy","description":"是否健康"},"last_health_check":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Health Check","description":"最后健康检查时间"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"}},"type":"object","required":["id","name","service_type","config","is_active","is_default","is_healthy","created_at","updated_at"],"title":"ExternalServiceConfigResponse","description":"外部服务配置响应"},"ExternalServiceConfigUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name","description":"服务名称"},"config":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config","description":"服务配置 (JSON格式)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"服务描述"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"是否启用"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","description":"是否默认服务"}},"type":"object","title":"ExternalServiceConfigUpdate","description":"外部服务配置更新请求"},"ExternalServiceType":{"type":"string","enum":["smtp","sms_provider","push_service"],"title":"ExternalServiceType","description":"外部服务类型枚举"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InboxMessageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"消息ID"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject","description":"消息主题"},"content":{"type":"string","title":"Content","description":"消息内容"},"priority":{"$ref":"#/components/schemas/MessagePriority","description":"消息优先级"},"is_read":{"type":"boolean","title":"Is Read","description":"是否已读"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At","description":"阅读时间"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At","description":"发送时间"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"message_type":{"$ref":"#/components/schemas/MessageType","description":"消息类型"},"recipient":{"type":"string","title":"Recipient","description":"接收者号码"},"recipient_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Name","description":"接收者名字"},"retry_count":{"type":"integer","title":"Retry Count","description":"重试次数"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason","description":"失败原因"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At","description":"计划发送时间"}},"additionalProperties":false,"type":"object","required":["id","content","priority","is_read","created_at","message_type","recipient","retry_count"],"title":"InboxMessageResponse","description":"站内信响应"},"InvoiceType":{"type":"string","enum":["普通发票","增值税专用发票","电子发票"],"title":"InvoiceType","description":"发票类型枚举"},"LogExportRequest":{"properties":{"start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time","description":"开始时间"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"结束时间"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"用户ID"},"format":{"type":"string","pattern":"^(csv|excel)$","title":"Format","description":"导出格式","default":"csv"}},"type":"object","title":"LogExportRequest","description":"日志导出请求"},"LoginLogStatistics":{"properties":{"total_logins":{"type":"integer","title":"Total Logins","description":"总登录次数"},"successful_logins":{"type":"integer","title":"Successful Logins","description":"成功登录次数"},"failed_logins":{"type":"integer","title":"Failed Logins","description":"失败登录次数"},"suspicious_logins":{"type":"integer","title":"Suspicious Logins","description":"可疑登录次数"},"success_rate":{"type":"number","title":"Success Rate","description":"成功率"},"method_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Method Distribution","description":"登录方式分布"},"daily_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Daily Distribution","description":"每日登录分布"}},"type":"object","required":["total_logins","successful_logins","failed_logins","suspicious_logins","success_rate","method_distribution","daily_distribution"],"title":"LoginLogStatistics","description":"登录日志统计"},"MemoryInfo":{"properties":{"total_bytes":{"type":"integer","minimum":0.0,"title":"Total Bytes","description":"总内存字节数"},"used_bytes":{"type":"integer","minimum":0.0,"title":"Used Bytes","description":"已用内存字节数"},"available_bytes":{"type":"integer","minimum":0.0,"title":"Available Bytes","description":"可用内存字节数"},"usage_percent":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Usage Percent","description":"内存使用率百分比"},"swap_total_bytes":{"type":"integer","minimum":0.0,"title":"Swap Total Bytes","description":"交换空间总字节数"},"swap_used_bytes":{"type":"integer","minimum":0.0,"title":"Swap Used Bytes","description":"交换空间已用字节数"},"swap_usage_percent":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Swap Usage Percent","description":"交换空间使用率百分比"}},"type":"object","required":["total_bytes","used_bytes","available_bytes","usage_percent","swap_total_bytes","swap_used_bytes","swap_usage_percent"],"title":"MemoryInfo","description":"内存信息模型"},"MessageLogResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"消息ID"},"message_type":{"$ref":"#/components/schemas/MessageType","description":"消息类型"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject","description":"消息主题"},"recipients":{"items":{"type":"string"},"type":"array","title":"Recipients","description":"接收者列表"},"status":{"type":"string","title":"Status","description":"发送状态"},"priority":{"$ref":"#/components/schemas/MessagePriority","description":"消息优先级"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At","description":"计划发送时间"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At","description":"实际发送时间"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason","description":"失败原因"},"retry_count":{"type":"integer","title":"Retry Count","description":"重试次数"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"}},"type":"object","required":["id","message_type","recipients","status","priority","retry_count","created_at"],"title":"MessageLogResponse","description":"消息日志响应"},"MessagePriority":{"type":"string","enum":["low","normal","high","urgent"],"title":"MessagePriority","description":"消息优先级枚举"},"MessageReceiptResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"接收记录ID"},"message_id":{"type":"string","format":"uuid","title":"Message Id","description":"消息ID"},"recipient":{"type":"string","title":"Recipient","description":"接收者"},"is_read":{"type":"boolean","title":"Is Read","description":"是否已读"},"is_delivered":{"type":"boolean","title":"Is Delivered","description":"是否已投递"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At","description":"阅读时间"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At","description":"投递时间"},"external_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Status","description":"外部服务状态"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"}},"type":"object","required":["id","message_id","recipient","is_read","is_delivered","created_at"],"title":"MessageReceiptResponse","description":"消息接收记录响应"},"MessageSendRequest":{"properties":{"message_type":{"$ref":"#/components/schemas/MessageType","description":"消息类型"},"recipients":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Recipients","description":"接收者列表"},"subject":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Subject","description":"消息主题"},"content":{"type":"string","minLength":1,"title":"Content","description":"消息内容"},"template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id","description":"模板ID"},"variables":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Variables","description":"模板变量"},"priority":{"$ref":"#/components/schemas/MessagePriority","description":"消息优先级","default":"normal"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At","description":"计划发送时间"}},"type":"object","required":["message_type","recipients","content"],"title":"MessageSendRequest","description":"消息发送请求"},"MessageSendResponse":{"properties":{"message_id":{"type":"string","format":"uuid","title":"Message Id","description":"消息ID"},"status":{"type":"string","title":"Status","description":"发送状态"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At","description":"计划发送时间"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"}},"type":"object","required":["message_id","status","created_at"],"title":"MessageSendResponse","description":"消息发送响应"},"MessageStatus":{"type":"string","enum":["pending","sending","sent","delivered","failed","cancelled"],"title":"MessageStatus","description":"消息状态枚举"},"MessageTemplateCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"模板名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"模板描述"},"message_type":{"$ref":"#/components/schemas/MessageType","description":"消息类型"},"subject":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Subject","description":"消息主题"},"content":{"type":"string","minLength":1,"title":"Content","description":"模板内容"},"template_type":{"$ref":"#/components/schemas/TemplateType","description":"模板类型","default":"custom"}},"type":"object","required":["name","message_type","content"],"title":"MessageTemplateCreate","description":"消息模板创建请求"},"MessageTemplateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"模板ID"},"name":{"type":"string","title":"Name","description":"模板名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"模板描述"},"message_type":{"$ref":"#/components/schemas/MessageType","description":"消息类型"},"template_type":{"$ref":"#/components/schemas/TemplateType","description":"模板类型"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject","description":"消息主题"},"content":{"type":"string","title":"Content","description":"模板内容"},"variables":{"items":{"type":"string"},"type":"array","title":"Variables","description":"模板变量列表"},"is_active":{"type":"boolean","title":"Is Active","description":"是否启用"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"}},"type":"object","required":["id","name","message_type","template_type","content","variables","is_active","created_at","updated_at"],"title":"MessageTemplateResponse","description":"消息模板响应"},"MessageTemplateUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name","description":"模板名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"模板描述"},"subject":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Subject","description":"消息主题"},"content":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Content","description":"模板内容"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"是否启用"}},"type":"object","title":"MessageTemplateUpdate","description":"消息模板更新请求"},"MessageType":{"type":"string","enum":["email","sms","inbox","push"],"title":"MessageType","description":"消息类型枚举"},"NetworkInfo":{"properties":{"interfaces":{"items":{"$ref":"#/components/schemas/NetworkInterfaceInfo"},"type":"array","title":"Interfaces","description":"网络接口列表"},"connections_count":{"type":"integer","minimum":0.0,"title":"Connections Count","description":"连接数量"}},"type":"object","required":["connections_count"],"title":"NetworkInfo","description":"网络信息模型"},"NetworkInterfaceInfo":{"properties":{"name":{"type":"string","title":"Name","description":"接口名称"},"is_up":{"type":"boolean","title":"Is Up","description":"接口是否启用"},"bytes_sent":{"type":"integer","minimum":0.0,"title":"Bytes Sent","description":"发送字节数"},"bytes_recv":{"type":"integer","minimum":0.0,"title":"Bytes Recv","description":"接收字节数"},"packets_sent":{"type":"integer","minimum":0.0,"title":"Packets Sent","description":"发送包数"},"packets_recv":{"type":"integer","minimum":0.0,"title":"Packets Recv","description":"接收包数"}},"type":"object","required":["name","is_up","bytes_sent","bytes_recv","packets_sent","packets_recv"],"title":"NetworkInterfaceInfo","description":"网络接口信息模型"},"NetworkLogStatistics":{"properties":{"total_requests":{"type":"integer","title":"Total Requests","description":"总请求数"},"error_requests":{"type":"integer","title":"Error Requests","description":"错误请求数"},"slow_requests":{"type":"integer","title":"Slow Requests","description":"慢请求数"},"error_rate":{"type":"number","title":"Error Rate","description":"错误率"},"slow_request_rate":{"type":"number","title":"Slow Request Rate","description":"慢请求率"},"method_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Method Distribution","description":"请求方法分布"},"status_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Status Distribution","description":"状态码分布"}},"type":"object","required":["total_requests","error_requests","slow_requests","error_rate","slow_request_rate","method_distribution","status_distribution"],"title":"NetworkLogStatistics","description":"网络日志统计"},"OperationLogResponse":{"properties":{"id":{"type":"string","title":"Id","description":"日志ID"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"},"username":{"type":"string","title":"Username","description":"用户名"},"user_id":{"type":"string","title":"User Id","description":"用户ID"},"operation_type":{"type":"string","title":"Operation Type","description":"操作类型"},"module":{"type":"string","title":"Module","description":"操作模块"},"action":{"type":"string","title":"Action","description":"操作动作"},"request_method":{"type":"string","title":"Request Method","description":"请求方法"},"request_url":{"type":"string","title":"Request Url","description":"请求URL"},"request_headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request Headers","description":"请求头"},"request_body":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request Body","description":"请求体"},"request_params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request Params","description":"请求参数"},"response_status":{"type":"integer","title":"Response Status","description":"响应状态码"},"response_body":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response Body","description":"响应体"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"错误信息"},"processing_time":{"type":"number","title":"Processing Time","description":"处理时间"}},"type":"object","required":["id","created_at","updated_at","username","user_id","operation_type","module","action","request_method","request_url","response_status","processing_time"],"title":"OperationLogResponse","description":"操作日志响应"},"OperationLogStatistics":{"properties":{"total_operations":{"type":"integer","title":"Total Operations","description":"总操作次数"},"error_operations":{"type":"integer","title":"Error Operations","description":"错误操作次数"},"error_rate":{"type":"number","title":"Error Rate","description":"错误率"},"type_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Type Distribution","description":"操作类型分布"},"module_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Module Distribution","description":"模块分布"}},"type":"object","required":["total_operations","error_operations","error_rate","type_distribution","module_distribution"],"title":"OperationLogStatistics","description":"操作日志统计"},"PagedResponse_AdminSettingsResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminSettingsResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[AdminSettingsResponse]"},"PagedResponse_DepartmentResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DepartmentResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当��数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[DepartmentResponse]"},"PagedResponse_InboxMessageResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InboxMessageResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[InboxMessageResponse]"},"PagedResponse_MessageLogResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MessageLogResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[MessageLogResponse]"},"PagedResponse_MessageTemplateResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MessageTemplateResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[MessageTemplateResponse]"},"PagedResponse_OperationLogResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OperationLogResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[OperationLogResponse]"},"PagedResponse_Permission_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Permission"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[Permission]"},"PagedResponse_Role_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Role"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[Role]"},"PagedResponse_TenantAnonymousResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TenantAnonymousResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[TenantAnonymousResponse]"},"PagedResponse_TenantAuditLogResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TenantAuditLogResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[TenantAuditLogResponse]"},"PagedResponse_TenantResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TenantResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[TenantResponse]"},"PagedResponse_UserListResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserListResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[UserListResponse]"},"PagedResponse_UserResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserResponse"},"type":"array","title":"Data","description":"数据列表"},"total":{"type":"integer","title":"Total","description":"数据总数"},"page":{"type":"integer","title":"Page","description":"当前页数"},"size":{"type":"integer","title":"Size","description":"当前数量"},"total_pages":{"type":"integer","title":"Total Pages","description":"总页数"},"has_next":{"type":"boolean","title":"Has Next","description":"是否有下一页"},"has_prev":{"type":"boolean","title":"Has Prev","description":"是否有上一页"}},"type":"object","required":["total","page","size","total_pages","has_next","has_prev"],"title":"PagedResponse[UserResponse]"},"PerformanceMetricsSummary":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"数据收集时间戳"},"cpu_usage":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Cpu Usage","description":"CPU 使用率"},"memory_usage":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Memory Usage","description":"内存使用率"},"disk_usage":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Disk Usage","description":"磁盘使用率"},"system_load":{"type":"number","minimum":0.0,"title":"System Load","description":"系统负载"},"status":{"type":"string","title":"Status","description":"系统状态"}},"type":"object","required":["timestamp","cpu_usage","memory_usage","disk_usage","system_load","status"],"title":"PerformanceMetricsSummary","description":"性能指标摘要模型"},"Permission":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"权限名称"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"权限描述"},"group":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Group","description":"权限分组"},"resource":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Resource","description":"资源名称"},"action":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Action","description":"操作名称"},"id":{"type":"string","format":"uuid","title":"Id"},"is_system":{"type":"boolean","title":"Is System"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"resource_action":{"type":"string","title":"Resource Action","description":"资源:操作格式"}},"type":"object","required":["name","id","is_system","created_at","updated_at","resource_action"],"title":"Permission","description":"权限响应模型"},"PythonRuntimeInfo":{"properties":{"version":{"type":"string","title":"Version","description":"Python 版本"},"implementation":{"type":"string","title":"Implementation","description":"Python 实现"},"memory_usage_bytes":{"type":"integer","minimum":0.0,"title":"Memory Usage Bytes","description":"内存使用字节数"},"gc_stats":{"additionalProperties":true,"type":"object","title":"Gc Stats","description":"垃圾回收统计"}},"type":"object","required":["version","implementation","memory_usage_bytes"],"title":"PythonRuntimeInfo","description":"Python 运行时信息模型"},"Role":{"properties":{"name":{"type":"string","maxLength":50,"minLength":1,"title":"Name","description":"角色名称"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"角色描述"},"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["name","id","tenant_id","created_at","updated_at"],"title":"Role","description":"角色响应模型"},"RoleCreate":{"properties":{"name":{"type":"string","maxLength":50,"minLength":1,"title":"Name","description":"角色名称"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"角色描述"},"permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Permission Ids","description":"权限ID列表"}},"type":"object","required":["name"],"title":"RoleCreate","description":"创建角色模型"},"RoleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":50,"minLength":1},{"type":"null"}],"title":"Name","description":"角色名称"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"角色描述"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"是否激活"},"permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Permission Ids","description":"权限ID列表"}},"type":"object","title":"RoleUpdate","description":"更新角色模型"},"SystemMetricsResponse":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"数据收集时间戳"},"cpu":{"$ref":"#/components/schemas/CPUInfo","description":"CPU 信息"},"memory":{"$ref":"#/components/schemas/MemoryInfo","description":"内存信息"},"disk":{"$ref":"#/components/schemas/DiskInfo","description":"磁盘信息"},"network":{"$ref":"#/components/schemas/NetworkInfo","description":"网络信息"},"python_runtime":{"$ref":"#/components/schemas/PythonRuntimeInfo","description":"Python 运行时信息"},"application":{"$ref":"#/components/schemas/ApplicationMetrics","description":"应用性能指标"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"元数据"}},"type":"object","required":["timestamp","cpu","memory","disk","network","python_runtime","application"],"title":"SystemMetricsResponse","description":"系统性能指标响应模型"},"TemplateType":{"type":"string","enum":["system","custom"],"title":"TemplateType","description":"模板类型枚举"},"TenantAnonymousResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"租户ID"},"tenant_code":{"type":"string","title":"Tenant Code","description":"租户编码"},"company_name":{"type":"string","title":"Company Name","description":"企业名称"},"audit_status":{"$ref":"#/components/schemas/AuditStatus","description":"审核状态"}},"additionalProperties":false,"type":"object","required":["id","tenant_code","company_name","audit_status"],"title":"TenantAnonymousResponse","description":"租户匿名查询响应模型 - 只包含ID和名称"},"TenantAuditLogResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"日志ID"},"action":{"type":"string","title":"Action","description":"操作类型"},"action_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action By","description":"操作人"},"action_time":{"type":"string","format":"date-time","title":"Action Time","description":"操作时间"},"snapshot_company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Company Name","description":"企业名称快照"},"snapshot_company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Company Type","description":"企业类型快照"},"snapshot_province":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Province","description":"省份快照"},"snapshot_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot City","description":"城市快照"},"snapshot_district":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot District","description":"区县快照"},"snapshot_detailed_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Detailed Address","description":"详细地址快照"},"snapshot_registrant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Registrant","description":"登记人快照"},"snapshot_contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Contact Phone","description":"联系电话快照"},"snapshot_bank_account":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Bank Account","description":"银行账号快照"},"snapshot_bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Bank Name","description":"开户行快照"},"snapshot_bank_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Bank Full Name","description":"开户行全称快照"},"snapshot_bank_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Bank Address","description":"开户行地址快照"},"snapshot_social_credit_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Social Credit Code","description":"社会信用代码快照"},"snapshot_legal_person_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Legal Person Name","description":"法人姓名快照"},"snapshot_audit_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Audit Status","description":"审核状态快照"},"snapshot_audit_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Audit Comment","description":"审核备注快照"},"snapshot_company_scale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Company Scale","description":"公司规模快照"},"snapshot_registered_capital":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Snapshot Registered Capital","description":"注册资本快照"},"change_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Summary","description":"变更摘要描述"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address","description":"操作IP地址"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent","description":"用户代理"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id","description":"请求追踪ID"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"}},"additionalProperties":false,"type":"object","required":["id","action","action_time","created_at"],"title":"TenantAuditLogResponse","description":"租户审计日志响应模型"},"TenantAuditRequest":{"properties":{"audit_status":{"$ref":"#/components/schemas/AuditStatus","description":"审核状态"},"audit_comment":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Audit Comment","description":"审核备注"}},"additionalProperties":false,"type":"object","required":["audit_status"],"title":"TenantAuditRequest","description":"租户审核请求模型"},"TenantCreateRequest":{"properties":{"company_name":{"type":"string","maxLength":200,"minLength":2,"title":"Company Name","description":"企业名称"},"tenant_code":{"type":"string","maxLength":200,"minLength":2,"title":"Tenant Code","description":"企业编码"},"company_type":{"$ref":"#/components/schemas/TenantType","description":"企业类型"}},"additionalProperties":false,"type":"object","required":["company_name","tenant_code","company_type"],"title":"TenantCreateRequest","description":"创建租户请求模型"},"TenantResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"租户ID"},"tenant_code":{"type":"string","title":"Tenant Code","description":"租户编码"},"is_active":{"type":"boolean","title":"Is Active","description":"是否活跃"},"company_name":{"type":"string","title":"Company Name","description":"企业名称"},"company_type":{"anyOf":[{"$ref":"#/components/schemas/TenantType"},{"type":"null"}],"description":"企业类型"},"province":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Province","description":"省份"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"城市"},"district":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"District","description":"区县"},"detailed_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detailed Address","description":"详细地址"},"registrant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant","description":"登记人"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone","description":"联系电话(已脱敏)"},"bank_account":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Account","description":"银行账号(已脱敏)"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name","description":"开户行"},"bank_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Full Name","description":"开户行全称"},"bank_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Address","description":"开户行地址"},"social_credit_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Social Credit Code","description":"社会信用代码(已脱敏)"},"legal_person_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Person Name","description":"法人姓名(已脱敏)"},"company_scale":{"anyOf":[{"$ref":"#/components/schemas/CompanyScale"},{"type":"null"}],"description":"公司规模"},"registered_capital":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Registered Capital","description":"注册资本(万元)"},"established_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Established Date","description":"成立时间"},"invoice_type":{"anyOf":[{"$ref":"#/components/schemas/InvoiceType"},{"type":"null"}],"description":"发票类型"},"business_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Scope","description":"经营范围"},"submit_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Submit Time","description":"提交时间"},"audit_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Audit Time","description":"审核时间"},"auditor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auditor","description":"审核人"},"audit_status":{"$ref":"#/components/schemas/AuditStatus","description":"审核状态"},"audit_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audit Comment","description":"审核备注"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"}},"additionalProperties":false,"type":"object","required":["id","tenant_code","is_active","company_name","audit_status","created_at","updated_at"],"title":"TenantResponse","description":"租户响应模型(已脱敏)"},"TenantType":{"type":"string","enum":["个体工商户","有限责任公司","股份有限公司","合伙企业","其他"],"title":"TenantType","description":"企业类型枚举"},"TenantUpdateRequest":{"properties":{"company_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":2},{"type":"null"}],"title":"Company Name","description":"企业名称"},"company_type":{"anyOf":[{"$ref":"#/components/schemas/TenantType"},{"type":"null"}],"description":"企业类型"},"province":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Province","description":"省份"},"city":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"City","description":"城市"},"district":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"District","description":"区县"},"detailed_address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Detailed Address","description":"详细地址"},"registrant":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Registrant","description":"登记人"},"contact_phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Contact Phone","description":"联系电话"},"bank_account":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Bank Account","description":"银行账号"},"bank_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Bank Name","description":"开户行"},"bank_full_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Bank Full Name","description":"开户行全称"},"bank_address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bank Address","description":"开户行地址"},"bank_permit_image":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bank Permit Image","description":"开户许可证图片路径"},"social_credit_code":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Social Credit Code","description":"社会信用代码"},"business_license_image":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Business License Image","description":"营业执照图片路径"},"legal_person_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Legal Person Name","description":"法人姓名"},"id_card_front_image":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Id Card Front Image","description":"身份证正面图片"},"id_card_back_image":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Id Card Back Image","description":"身份证反面图片"},"company_scale":{"anyOf":[{"$ref":"#/components/schemas/CompanyScale"},{"type":"null"}],"description":"公司规模"},"registered_capital":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Registered Capital","description":"注册资本(万元)"},"established_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Established Date","description":"成立时间"},"invoice_type":{"anyOf":[{"$ref":"#/components/schemas/InvoiceType"},{"type":"null"}],"description":"发票类型"},"business_scope":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Business Scope","description":"经营范围"}},"additionalProperties":false,"type":"object","title":"TenantUpdateRequest","description":"更新租户请求模型"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token","description":"访问令牌"},"refresh_token":{"type":"string","title":"Refresh Token","description":"刷新令牌"},"token_type":{"type":"string","title":"Token Type","description":"令牌类型","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In","description":"过期时间(秒)"}},"type":"object","required":["access_token","refresh_token","expires_in"],"title":"Token","description":"令牌模型"},"User":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"邮箱地址"},"username":{"type":"string","maxLength":100,"minLength":3,"title":"Username","description":"用户名"},"full_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Full Name","description":"全名"},"phone":{"type":"string","maxLength":20,"title":"Phone","description":"手机号"},"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"is_active":{"type":"boolean","title":"Is Active"},"is_superuser":{"type":"boolean","title":"Is Superuser"},"is_verified":{"type":"boolean","title":"Is Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"bio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bio"},"display_name":{"type":"string","title":"Display Name","description":"显示名称"},"department_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department Id","description":"部门ID"},"department_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department Name","description":"部门名称"}},"type":"object","required":["email","username","phone","id","tenant_id","is_active","is_superuser","is_verified","created_at","updated_at","last_login_at","avatar_url","bio","display_name"],"title":"User","description":"用户响应模型"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"邮箱地址"},"username":{"type":"string","maxLength":100,"minLength":3,"title":"Username","description":"用户名"},"full_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Full Name","description":"全名"},"phone":{"type":"string","maxLength":20,"title":"Phone","description":"手机号"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password","description":"密码"},"tenant_id":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Tenant Id","description":"租户ID"},"scope":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Scope","description":"用户作用域","default":"tenant"},"department_id":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Department Id","description":"部门ID"},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"是否超级用户","default":false}},"type":"object","required":["email","username","phone","password"],"title":"UserCreate","description":"创建用户模型"},"UserCreateWithCompany":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"邮箱地址"},"username":{"type":"string","maxLength":100,"minLength":3,"title":"Username","description":"用户名"},"full_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Full Name","description":"全名"},"phone":{"type":"string","maxLength":20,"title":"Phone","description":"手机号"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password","description":"密码"},"company_name":{"type":"string","maxLength":200,"minLength":2,"title":"Company Name","description":"企业名称"},"tenant_code":{"type":"string","maxLength":200,"minLength":2,"title":"Tenant Code","description":"企业编码","default":"e21afae5-611e-4723-9aa4-3a0d181d7e02"}},"type":"object","required":["email","username","phone","password","company_name"],"title":"UserCreateWithCompany","description":"创建用户并注册企业模型"},"UserListResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"用户ID"},"username":{"type":"string","title":"Username","description":"用户名"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"姓名"},"phone":{"type":"string","title":"Phone","description":"电话"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"企业名称"},"user_type":{"type":"string","title":"User Type","description":"用户类型: system/tenant"},"status":{"type":"string","title":"Status","description":"状态: active/inactive"},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"是否超级用户"},"user_type_str":{"type":"string","title":"User Type Str","description":"用户类型描述"}},"type":"object","required":["id","username","phone","user_type","status","is_superuser","user_type_str"],"title":"UserListResponse","description":"用户列表响应模型 - 用于系统用户管理接口"},"UserLoginWithCaptcha":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"用户名、邮箱或手机号"},"password":{"type":"string","title":"Password","description":"密码"},"captcha_id":{"type":"string","title":"Captcha Id","description":"验证码ID"},"captcha_text":{"type":"string","maxLength":6,"minLength":4,"title":"Captcha Text","description":"验证码文本"}},"type":"object","required":["identifier","password","captcha_id","captcha_text"],"title":"UserLoginWithCaptcha","description":"带验证码的用户登录模型"},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"用户ID"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id","description":"租户ID"},"email":{"type":"string","title":"Email","description":"邮箱地址"},"username":{"type":"string","title":"Username","description":"用户名"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"全名"},"phone":{"type":"string","title":"Phone","description":"手机号"},"is_active":{"type":"boolean","title":"Is Active","description":"是否激活"},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"是否超级用户"},"is_verified":{"type":"boolean","title":"Is Verified","description":"是否已验证"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"创建时间"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"更新时间"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At","description":"最后登录时间"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"头像URL"},"bio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bio","description":"个人简介"},"display_name":{"type":"string","title":"Display Name","description":"显示名称"},"department_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department Id","description":"部门ID"},"department_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department Name","description":"部门名称"},"scope":{"type":"string","title":"Scope","description":"用户作用域"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"企业名称"}},"type":"object","required":["id","email","username","phone","is_active","is_superuser","is_verified","created_at","updated_at","display_name","scope"],"title":"UserResponse","description":"用户响应模型 - 用于API响应"},"UserRoleAssignRequest":{"properties":{"role_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Role Ids","description":"要分配的角色ID列表"}},"type":"object","required":["role_ids"],"title":"UserRoleAssignRequest","description":"用户角色分配请求模型"},"UserRoleResponse":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id","description":"用户ID"},"username":{"type":"string","title":"Username","description":"用户名"},"email":{"type":"string","title":"Email","description":"邮箱"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"全名"},"roles":{"items":{"$ref":"#/components/schemas/Role"},"type":"array","title":"Roles","description":"用户角色列表"},"assigned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Assigned At","description":"分配时间"}},"type":"object","required":["user_id","username","email"],"title":"UserRoleResponse","description":"用户角色分配响应模型"},"UserUpdate":{"properties":{"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email","description":"邮箱地址"},"full_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Full Name","description":"全名"},"phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Phone","description":"手机号"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"头像URL"},"bio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bio","description":"个人简介"},"department_id":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Department Id","description":"部门ID"}},"type":"object","title":"UserUpdate","description":"更新用户模型"},"UserUpdatePassword":{"properties":{"current_password":{"type":"string","title":"Current Password","description":"当前密码"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password","description":"新密码"}},"type":"object","required":["current_password","new_password"],"title":"UserUpdatePassword","description":"更新密码模型"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}} \ No newline at end of file diff --git a/crop-x-new/scripts/setup-dev-tools.js b/crop-x-new/scripts/setup-dev-tools.js new file mode 100644 index 0000000..85d1a76 --- /dev/null +++ b/crop-x-new/scripts/setup-dev-tools.js @@ -0,0 +1,70 @@ +#!/usr/bin/env node + +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// 读取开发工具配置 +const configPath = path.join(__dirname, '../.dev-tools-config.json'); +const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); + +// 获取命令行参数 +const args = process.argv.slice(2); +const enableAll = args.includes('--enable'); +const disableAll = args.includes('--disable'); + +console.log('🔧 开发工具设置脚本'); +console.log('===================='); + +// 更新配置文件 +function updateConfig(config) { + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + console.log('✅ 配置文件已更新'); +} + +// 检查工具状态 +function checkToolStatus(toolName, toolConfig) { + return toolConfig.enabled ? '✅ 已启用' : '❌ 已禁用'; +} + +// 设置工具状态 +function setToolStatus(toolName, enabled) { + config.tools[toolName].enabled = enabled; + const status = enabled ? '启用' : '禁用'; + console.log(`${enabled ? '✅' : '❌'} ${toolName}: ${status}`); +} + +// 主逻辑 +if (enableAll) { + console.log('🔓 启用所有开发工具...'); + Object.keys(config.tools).forEach(toolName => { + setToolStatus(toolName, true); + }); + updateConfig(config); + console.log('\n🎉 所有开发工具已启用!运行以下命令使用:'); + console.log(' npm run lint # ESLint检查'); + console.log(' npm run lint:fix # ESLint自动修复'); + console.log(' npm run format # Prettier格式化'); + console.log(' npm run format:check # Prettier检查'); +} else if (disableAll) { + console.log('🔒 禁用所有开发工具...'); + Object.keys(config.tools).forEach(toolName => { + setToolStatus(toolName, false); + }); + updateConfig(config); + console.log('\n🛌 所有开发工具已禁用!'); +} else { + console.log('📊 当前开发工具状态:'); + Object.entries(config.tools).forEach(([toolName, toolConfig]) => { + console.log(` ${checkToolStatus(toolName, toolConfig)} ${toolName} - ${toolConfig.description}`); + }); + + console.log('\n📖 使用说明:'); + console.log(' npm run scripts:setup # 查看当前状态'); + console.log(' npm run scripts:enable # 启用所有工具'); + console.log(' npm run scripts:disable # 禁用所有工具'); + console.log('\n💡 提示:也可以直接编辑 .dev-tools-config.json 文件来单独控制每个工具'); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/basic/customers/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/basic/customers/page.tsx new file mode 100644 index 0000000..2bf9eb4 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/basic/customers/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function CustomersPage() { + return ( +
+ +

客户信息

+
+

+ 页面路径: /agricultural-asset/basic/customers +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/basic/materials/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/basic/materials/page.tsx new file mode 100644 index 0000000..8b9a849 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/basic/materials/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function MaterialsPage() { + return ( +
+ +

物料信息

+
+

+ 页面路径: /agricultural-asset/basic/materials +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/basic/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/basic/page.tsx new file mode 100644 index 0000000..d4ea61f --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/basic/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function BasicPage() { + return ( +
+ +

基础信息管理

+
+

+ 页面路径: /agricultural-asset/basic +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/basic/suppliers/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/basic/suppliers/page.tsx new file mode 100644 index 0000000..9cb8605 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/basic/suppliers/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function SuppliersPage() { + return ( +
+ +

供应商信息

+
+

+ 页面路径: /agricultural-asset/basic/suppliers +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/basic/tools/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/basic/tools/page.tsx new file mode 100644 index 0000000..127081a --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/basic/tools/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ToolsPage() { + return ( +
+ +

农具信息

+
+

+ 页面路径: /agricultural-asset/basic/tools +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/equipment/archive/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/equipment/archive/page.tsx new file mode 100644 index 0000000..c105885 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/equipment/archive/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ArchivePage() { + return ( +
+ +

设备档案

+
+

+ 页面路径: /agricultural-asset/equipment/archive +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/equipment/depreciation/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/equipment/depreciation/page.tsx new file mode 100644 index 0000000..2f275a6 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/equipment/depreciation/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function DepreciationPage() { + return ( +
+ +

设备折旧

+
+

+ 页面路径: /agricultural-asset/equipment/depreciation +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/equipment/dispatch/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/equipment/dispatch/page.tsx new file mode 100644 index 0000000..aae24a8 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/equipment/dispatch/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function DispatchPage() { + return ( +
+ +

设备调度

+
+

+ 页面路径: /agricultural-asset/equipment/dispatch +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/equipment/disposal/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/equipment/disposal/page.tsx new file mode 100644 index 0000000..482166c --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/equipment/disposal/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function DisposalPage() { + return ( +
+ +

设备处置

+
+

+ 页面路径: /agricultural-asset/equipment/disposal +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/equipment/maintenance/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/equipment/maintenance/page.tsx new file mode 100644 index 0000000..09a5bd3 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/equipment/maintenance/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function MaintenancePage() { + return ( +
+ +

设备维护

+
+

+ 页面路径: /agricultural-asset/equipment/maintenance +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/equipment/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/equipment/page.tsx new file mode 100644 index 0000000..3dc8d93 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/equipment/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function EquipmentPage() { + return ( +
+ +

农资农具管理

+
+

+ 页面路径: /agricultural-asset/equipment +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/inventory/check/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/inventory/check/page.tsx new file mode 100644 index 0000000..ea3ac3e --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/inventory/check/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function CheckPage() { + return ( +
+ +

库存盘点

+
+

+ 页面路径: /agricultural-asset/inventory/check +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/inventory/detail/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/inventory/detail/page.tsx new file mode 100644 index 0000000..02b77a2 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/inventory/detail/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function DetailPage() { + return ( +
+ +

库存明细

+
+

+ 页面路径: /agricultural-asset/inventory/detail +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/inventory/in/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/inventory/in/page.tsx new file mode 100644 index 0000000..d732853 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/inventory/in/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function InPage() { + return ( +
+ +

入库管理

+
+

+ 页面路径: /agricultural-asset/inventory/in +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/inventory/location/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/inventory/location/page.tsx new file mode 100644 index 0000000..e195263 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/inventory/location/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function LocationPage() { + return ( +
+ +

库位管理

+
+

+ 页面路径: /agricultural-asset/inventory/location +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/inventory/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/inventory/page.tsx new file mode 100644 index 0000000..ff069f0 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/inventory/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function InventoryPage() { + return ( +
+ +

库存管理

+
+

+ 页面路径: /agricultural-asset/inventory +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/inventory/suggest/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/inventory/suggest/page.tsx new file mode 100644 index 0000000..9331eb2 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/inventory/suggest/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function SuggestPage() { + return ( +
+ +

补货建议

+
+

+ 页面路径: /agricultural-asset/inventory/suggest +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/inventory/warning/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/inventory/warning/page.tsx new file mode 100644 index 0000000..61a9392 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/inventory/warning/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function WarningPage() { + return ( +
+ +

库存预警

+
+

+ 页面路径: /agricultural-asset/inventory/warning +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/layout.tsx b/crop-x-new/src/app/(app)/agricultural-asset/layout.tsx new file mode 100644 index 0000000..e2b7a39 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/layout.tsx @@ -0,0 +1,7 @@ +export default function AgriculturalAssetLayout({ + children, +}: { + children: React.ReactNode +}) { + return <>{children} +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/page.tsx new file mode 100644 index 0000000..d8b2bcb --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function AgriculturalAssetPage() { + return ( +
+ +

农业资产管理

+
+

+ 页面路径: /agricultural-asset +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/purchase/order/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/purchase/order/page.tsx new file mode 100644 index 0000000..c647cdc --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/purchase/order/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function OrderPage() { + return ( +
+ +

采购订单

+
+

+ 页面路径: /agricultural-asset/purchase/order +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/purchase/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/purchase/page.tsx new file mode 100644 index 0000000..32ad4e0 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/purchase/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function PurchasePage() { + return ( +
+ +

采购管理

+
+

+ 页面路径: /agricultural-asset/purchase +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/purchase/plan/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/purchase/plan/page.tsx new file mode 100644 index 0000000..7cec763 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/purchase/plan/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function PlanPage() { + return ( +
+ +

采购计划

+
+

+ 页面路径: /agricultural-asset/purchase/plan +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/report/consumption/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/report/consumption/page.tsx new file mode 100644 index 0000000..6db97d6 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/report/consumption/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ConsumptionPage() { + return ( +
+ +

消耗报表

+
+

+ 页面路径: /agricultural-asset/report/consumption +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/report/inventory/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/report/inventory/page.tsx new file mode 100644 index 0000000..2152844 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/report/inventory/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function InventoryReportPage() { + return ( +
+ +

库存报表

+
+

+ 页面路径: /agricultural-asset/report/inventory +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/report/overview/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/report/overview/page.tsx new file mode 100644 index 0000000..3751e22 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/report/overview/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function OverviewPage() { + return ( +
+ +

总览报表

+
+

+ 页面路径: /agricultural-asset/report/overview +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/report/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/report/page.tsx new file mode 100644 index 0000000..416df08 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/report/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ReportPage() { + return ( +
+ +

可视化报表

+
+

+ 页面路径: /agricultural-asset/report +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/requisition/apply/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/requisition/apply/page.tsx new file mode 100644 index 0000000..213f299 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/requisition/apply/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ApplyPage() { + return ( +
+ +

领用申请

+
+

+ 页面路径: /agricultural-asset/requisition/apply +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/requisition/approval/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/requisition/approval/page.tsx new file mode 100644 index 0000000..55902b9 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/requisition/approval/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ApprovalPage() { + return ( +
+ +

领用审批

+
+

+ 页面路径: /agricultural-asset/requisition/approval +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/requisition/checkout/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/requisition/checkout/page.tsx new file mode 100644 index 0000000..eefc8c5 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/requisition/checkout/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function CheckoutPage() { + return ( +
+ +

领用发放

+
+

+ 页面路径: /agricultural-asset/requisition/checkout +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/requisition/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/requisition/page.tsx new file mode 100644 index 0000000..1617fe5 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/requisition/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function RequisitionPage() { + return ( +
+ +

物资领用

+
+

+ 页面路径: /agricultural-asset/requisition +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/requisition/record/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/requisition/record/page.tsx new file mode 100644 index 0000000..5f3eeb3 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/requisition/record/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function RecordPage() { + return ( +
+ +

领用记录

+
+

+ 页面路径: /agricultural-asset/requisition/record +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/return/history/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/return/history/page.tsx new file mode 100644 index 0000000..305c257 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/return/history/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function HistoryPage() { + return ( +
+ +

归还历史

+
+

+ 页面路径: /agricultural-asset/return/history +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/return/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/return/page.tsx new file mode 100644 index 0000000..7834257 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/return/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ReturnPage() { + return ( +
+ +

物资归还

+
+

+ 页面路径: /agricultural-asset/return +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/return/process/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/return/process/page.tsx new file mode 100644 index 0000000..6527f03 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/return/process/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ProcessPage() { + return ( +
+ +

归还处理

+
+

+ 页面路径: /agricultural-asset/return/process +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/return/register/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/return/register/page.tsx new file mode 100644 index 0000000..67323bd --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/return/register/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function RegisterPage() { + return ( +
+ +

归还登记

+
+

+ 页面路径: /agricultural-asset/return/register +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-asset/return/settlement/page.tsx b/crop-x-new/src/app/(app)/agricultural-asset/return/settlement/page.tsx new file mode 100644 index 0000000..b62dff8 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-asset/return/settlement/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function SettlementPage() { + return ( +
+ +

归还结算

+
+

+ 页面路径: /agricultural-asset/return/settlement +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/archive/classification/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/archive/classification/page.tsx new file mode 100644 index 0000000..dde070f --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/archive/classification/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ClassificationPage() { + return ( +
+ +

农机分类管理

+
+

+ 页面路径: /agricultural-machinery/archive/classification +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/archive/entry/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/archive/entry/page.tsx new file mode 100644 index 0000000..145bb99 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/archive/entry/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { FileText } from 'lucide-react'; + +export default function AgriculturalMachineryEntryPage() { + return ( +
+ +
+ +

农机录入维护

+
+
+

+ 农机设备信息录入、编辑和维护管理界面。支持农机基本信息、技术参数、购置信息等全面管理。 +

+
+

+ 页面路径: /agricultural-machinery/archive/entry +

+

+ 主要功能: 农机设备信息录入、档案编辑、状态更新、设备台账管理 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/archive/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/archive/page.tsx new file mode 100644 index 0000000..2b14643 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/archive/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Package } from 'lucide-react'; + +export default function ArchivePage() { + return ( +
+ +
+ +

农机档案

+
+
+

+ 农机档案管理模块用于管理农业机械的基础信息和档案资料。 +

+
+

+ 页面路径: /agricultural-machinery/archive +

+

+ 主要功能:农机信息录入、分类管理、二维码生成等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/archive/qrcode/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/archive/qrcode/page.tsx new file mode 100644 index 0000000..543012a --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/archive/qrcode/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { QrCode } from 'lucide-react'; + +export default function AgriculturalMachineryQrCodePage() { + return ( +
+ +
+ +

农机二维码管理

+
+
+

+ 农机设备二维码生成和管理平台。支持设备身份识别、信息追溯、移动端扫描查询等功能。 +

+
+

+ 页面路径: /agricultural-machinery/archive/qrcode +

+

+ 主要功能: 二维码生成、批量打印、扫描验证、设备信息追溯 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/analysis/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/analysis/page.tsx new file mode 100644 index 0000000..9579542 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/analysis/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function AnalysisPage() { + return ( +
+ +

作业数据分析

+
+

+ 页面路径: /agricultural-machinery/data-analysis/analysis +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/comparison/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/comparison/page.tsx new file mode 100644 index 0000000..3c3c7c0 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/comparison/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ComparisonPage() { + return ( +
+ +

历史数据对比

+
+

+ 页面路径: /agricultural-machinery/data-analysis/comparison +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/page.tsx new file mode 100644 index 0000000..fa3cb8f --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/data-analysis/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { PieChart } from 'lucide-react'; + +export default function DataAnalysisPage() { + return ( +
+ +
+ +

数据管理与分析报告

+
+
+

+ 数据管理与分析报告模块用于农机作业数据的分析、统计和报告生成。 +

+
+

+ 页面路径: /agricultural-machinery/data-analysis +

+

+ 主要功能:作业数据分析、历史数据对比、报告生成等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/info/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/info/page.tsx new file mode 100644 index 0000000..80e54b6 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/info/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { User } from 'lucide-react'; + +export default function DriverInfoManagementPage() { + return ( +
+ +
+ +

驾驶员信息管理

+
+
+

+ 农机驾驶员档案信息管理系统。包括驾驶员基本信息、资质证书、培训记录、考核情况等。 +

+
+

+ 页面路径: /agricultural-machinery/driver-archive/info +

+

+ 主要功能: 驾驶员档案管理、资质认证、培训记录、证书到期提醒 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/page.tsx new file mode 100644 index 0000000..880cc25 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { User } from 'lucide-react'; + +export default function DriverArchivePage() { + return ( +
+ +
+ +

驾驶员档案

+
+
+

+ 驾驶员档案管理模块用于管理农机驾驶员的基本信息、资质认证和工作记录。 +

+
+

+ 页面路径: /agricultural-machinery/driver-archive +

+

+ 主要功能:驾驶员信息管理、资质审核、任务分配等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/task/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/task/page.tsx new file mode 100644 index 0000000..51afebf --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/driver-archive/task/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Calendar } from 'lucide-react'; + +export default function DriverTaskManagementPage() { + return ( +
+ +
+ +

驾驶员任务管理

+
+
+

+ 驾驶员作业任务分配和执行管理系统。支持任务派发、进度跟踪、绩效评估等功能。 +

+
+

+ 页面路径: /agricultural-machinery/driver-archive/task +

+

+ 主要功能: 任务分配、作业安排、进度监控、绩效考核、工时统计 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/error.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/error.tsx new file mode 100644 index 0000000..8a4889d --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/error.tsx @@ -0,0 +1,35 @@ +'use client' + +import { useEffect } from 'react' + +export default function AgriculturalMachineryError({ + error, + reset, +}: { + error: Error & { digest?: string } + reset: () => void +}) { + useEffect(() => { + console.error('农机管理系统错误:', error) + }, [error]) + + return ( +
+
+
🚙
+

+ 农机系统出现了错误 +

+

+ {error.message || '未知系统错误'} +

+ +
+
+ ) +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/alert-rules/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/alert-rules/page.tsx new file mode 100644 index 0000000..78856ac --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/alert-rules/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function AlertRulesPage() { + return ( +
+ +

故障预警规则

+
+

+ 页面路径: /agricultural-machinery/fault-diagnosis/alert-rules +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/health/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/health/page.tsx new file mode 100644 index 0000000..826e1bb --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/health/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function HealthPage() { + return ( +
+ +

设备健康管理

+
+

+ 页面路径: /agricultural-machinery/fault-diagnosis/health +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/page.tsx new file mode 100644 index 0000000..7d40f0b --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Zap } from 'lucide-react'; + +export default function FaultDiagnosisPage() { + return ( +
+ +
+ +

远程诊断与故障预警

+
+
+

+ 远程诊断与故障预警模块用于农机设备的健康监测、故障预警和远程诊断。 +

+
+

+ 页面路径: /agricultural-machinery/fault-diagnosis +

+

+ 主要功能:故障预警规则、预警管理、设备健康监控等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/parameter/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/parameter/page.tsx new file mode 100644 index 0000000..0044590 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/parameter/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ParameterPage() { + return ( +
+ +

设备参数监控

+
+

+ 页面路径: /agricultural-machinery/fault-diagnosis/parameter +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/warning/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/warning/page.tsx new file mode 100644 index 0000000..37742ad --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/fault-diagnosis/warning/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function WarningPage() { + return ( +
+ +

故障预警管理

+
+

+ 页面路径: /agricultural-machinery/fault-diagnosis/warning +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/layout.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/layout.tsx new file mode 100644 index 0000000..1e801b7 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/layout.tsx @@ -0,0 +1,7 @@ +export default function AgriculturalMachineryLayout({ + children, +}: { + children: React.ReactNode +}) { + return <>{children} +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/load-management/device/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/device/page.tsx new file mode 100644 index 0000000..90648b8 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/device/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Cog } from 'lucide-react'; + +export default function LoadDeviceManagementPage() { + return ( +
+ +
+ +

负载设备管理

+
+
+

+ 农机负载设备的日常管理和维护系统。支持设备状态监控、维护计划、备件管理等。 +

+
+

+ 页面路径: /agricultural-machinery/load-management/device +

+

+ 主要功能: 设备台账、维护管理、故障记录、备件库存、状态监控 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/load-management/library/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/library/page.tsx new file mode 100644 index 0000000..62c9054 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/library/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Database } from 'lucide-react'; + +export default function LoadDeviceLibraryPage() { + return ( +
+ +
+ +

负载设备库

+
+
+

+ 农机负载设备信息库管理系统。建立完整的负载设备档案,支持设备查询和对比分析。 +

+
+

+ 页面路径: /agricultural-machinery/load-management/library +

+

+ 主要功能: 设备信息库、技术规格、性能参数、设备选型推荐 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/load-management/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/page.tsx new file mode 100644 index 0000000..3af9f05 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Settings } from 'lucide-react'; + +export default function LoadManagementPage() { + return ( +
+ +
+ +

农机负载管理

+
+
+

+ 农机负载管理模块用于管理农机设备的负载配置、参数设置和设备库管理。 +

+
+

+ 页面路径: /agricultural-machinery/load-management +

+

+ 主要功能:负载类型管理、参数配置、设备库管理等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/load-management/parameter/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/parameter/page.tsx new file mode 100644 index 0000000..51bb888 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/parameter/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Settings } from 'lucide-react'; + +export default function LoadParameterManagementPage() { + return ( +
+ +
+ +

负载参数管理

+
+
+

+ 农机负载设备参数配置和优化管理。支持作业参数调整、性能优化、标准配置等。 +

+
+

+ 页面路径: /agricultural-machinery/load-management/parameter +

+

+ 主要功能: 参数配置、性能调优、作业标准设置、参数模板管理 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/load-management/type/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/type/page.tsx new file mode 100644 index 0000000..3d34e6b --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/load-management/type/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Package } from 'lucide-react'; + +export default function LoadTypeManagementPage() { + return ( +
+ +
+ +

负载类型管理

+
+
+

+ 农机负载设备类型分类和管理系统。支持播种、施肥、收割等各类作业负载的类型定义。 +

+
+

+ 页面路径: /agricultural-machinery/load-management/type +

+

+ 主要功能: 负载类型定义、作业分类、设备规格配置、类型参数设置 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/loading.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/loading.tsx new file mode 100644 index 0000000..02bf776 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/loading.tsx @@ -0,0 +1,10 @@ +export default function AgriculturalMachineryLoading() { + return ( +
+
+
+

正在加载农机管理系统...

+
+
+ ) +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/location/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/location/page.tsx new file mode 100644 index 0000000..965d367 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/location/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { MapPin } from 'lucide-react'; + +export default function RealTimeLocationMonitoringPage() { + return ( +
+ +
+ +

实时定位监控

+
+
+

+ 农机设备实时GPS定位和轨迹监控系统。提供地图可视化、位置追踪、历史轨迹回放等功能。 +

+
+

+ 页面路径: /agricultural-machinery/monitoring/location +

+

+ 主要功能: GPS定位、地图显示、实时轨迹、位置历史、电子围栏 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/operation/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/operation/page.tsx new file mode 100644 index 0000000..9d4d019 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/operation/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { BarChart3 } from 'lucide-react'; + +export default function OperationDataMonitoringPage() { + return ( +
+ +
+ +

作业数据监控

+
+
+

+ 农机作业数据采集和分析监控。实时收集作业数据,监控作业质量和效率指标。 +

+
+

+ 页面路径: /agricultural-machinery/monitoring/operation +

+

+ 主要功能: 数据采集、作业监控、质量分析、效率统计、报表生成 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/page.tsx new file mode 100644 index 0000000..0360448 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Navigation } from 'lucide-react'; + +export default function MonitoringPage() { + return ( +
+ +
+ +

设备实时监控与定位

+
+
+

+ 设备实时监控与定位模块用于实时监控农机设备的位置、状态和作业数据。 +

+
+

+ 页面路径: /agricultural-machinery/monitoring +

+

+ 主要功能:实时定位监控、作业状态监控、数据监控等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/status/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/status/page.tsx new file mode 100644 index 0000000..347bfc1 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/monitoring/status/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Activity } from 'lucide-react'; + +export default function WorkStatusMonitoringPage() { + return ( +
+ +
+ +

作业状态监控

+
+
+

+ 农机设备作业状态实时监控系统。跟踪设备运行状态、作业进度、工作效率等关键指标。 +

+
+

+ 页面路径: /agricultural-machinery/monitoring/status +

+

+ 主要功能: 状态监控、作业跟踪、效率分析、异常报警、状态统计 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/page.tsx new file mode 100644 index 0000000..90a62c4 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/page.tsx @@ -0,0 +1,93 @@ +import Link from 'next/link' + +export default function AgriculturalMachineryPage() { + return ( +
+
+

+ 智能农机管理系统 +

+

+ 管理农机设备档案、监控实时状态、优化调度方案 +

+ +
+ +

+ 📋 农机档案录入与维护 +

+

+ 农机设备信息管理 +

+ + + +

+ 📍 实时位置追踪 +

+

+ 农机设备定位监控 +

+ + + +

+ 📅 任务分配 +

+

+ 农机作业任务分配 +

+ +
+
+ +
+
+

+ 📊 农机状态概览 +

+
+
+ 运行中 + 12 台 +
+
+ 空闲中 + 8 台 +
+
+ 维护中 + 3 台 +
+
+
+ +
+

+ 🔧 快速操作 +

+
+ + + +
+
+
+
+ ) +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/cockpit/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/cockpit/page.tsx new file mode 100644 index 0000000..65d5998 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/cockpit/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function CockpitPage() { + return ( +
+ +

作业驾驶舱

+
+

+ 页面路径: /agricultural-machinery/precision-operation/cockpit +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/dispatch/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/dispatch/page.tsx new file mode 100644 index 0000000..8253deb --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/dispatch/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function DispatchPage() { + return ( +
+ +

作业计划调度

+
+

+ 页面路径: /agricultural-machinery/precision-operation/dispatch +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/page.tsx new file mode 100644 index 0000000..c8aab9d --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Target } from 'lucide-react'; + +export default function PrecisionOperationPage() { + return ( +
+ +
+ +

精准作业管理与支持

+
+
+

+ 精准作业管理与支持模块用于管理农机的精准作业、路径规划和作业调度。 +

+
+

+ 页面路径: /agricultural-machinery/precision-operation +

+

+ 主要功能:作业记录管理、路径规划、作业调度、作业驾驶舱等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/record/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/record/page.tsx new file mode 100644 index 0000000..4b68ea6 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/record/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function RecordPage() { + return ( +
+ +

作业记录管理

+
+

+ 页面路径: /agricultural-machinery/precision-operation/record +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/route/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/route/page.tsx new file mode 100644 index 0000000..c35daad --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/precision-operation/route/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function RoutePage() { + return ( +
+ +

路径规划管理

+
+

+ 页面路径: /agricultural-machinery/precision-operation/route +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/assignment/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/assignment/page.tsx new file mode 100644 index 0000000..811d9fb --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/assignment/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function AssignmentPage() { + return ( +
+ +

任务分配管理

+
+

+ 页面路径: /agricultural-machinery/scheduling/assignment +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/dispatch/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/dispatch/page.tsx new file mode 100644 index 0000000..cc3263a --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/dispatch/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function DispatchPage() { + return ( +
+ +

实时调度管理

+
+

+ 页面路径: /agricultural-machinery/scheduling/dispatch +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/page.tsx new file mode 100644 index 0000000..9db2cc6 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Calendar } from 'lucide-react'; + +export default function SchedulingPage() { + return ( +
+ +
+ +

农机管理与调度

+
+
+

+ 农机管理与调度模块用于农机的任务分配、实时调度和轨迹回放管理。 +

+
+

+ 页面路径: /agricultural-machinery/scheduling +

+

+ 主要功能:任务分配管理、实时调度管理、轨迹回放等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/playback/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/playback/page.tsx new file mode 100644 index 0000000..3e5a393 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/scheduling/playback/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function PlaybackPage() { + return ( +
+ +

轨迹回放管理

+
+

+ 页面路径: /agricultural-machinery/scheduling/playback +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/security/fence/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/security/fence/page.tsx new file mode 100644 index 0000000..976b5c4 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/security/fence/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function FencePage() { + return ( +
+ +

地理围栏管理

+
+

+ 页面路径: /agricultural-machinery/security/fence +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/agricultural-machinery/security/page.tsx b/crop-x-new/src/app/(app)/agricultural-machinery/security/page.tsx new file mode 100644 index 0000000..f8a87d9 --- /dev/null +++ b/crop-x-new/src/app/(app)/agricultural-machinery/security/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { Card } from '@/components/ui/card'; +import { Shield } from 'lucide-react'; + +export default function SecurityPage() { + return ( +
+ +
+ +

安全与安防

+
+
+

+ 安全与安防模块用于农机的安全管理、地理围栏和安全防护。 +

+
+

+ 页面路径: /agricultural-machinery/security +

+

+ 主要功能:地理围栏管理、安全监控、防护设置等 +

+
+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/ai-crop-model/application/device-control/page.tsx b/crop-x-new/src/app/(app)/ai-crop-model/application/device-control/page.tsx new file mode 100644 index 0000000..895d35f --- /dev/null +++ b/crop-x-new/src/app/(app)/ai-crop-model/application/device-control/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function DeviceControlPage() { + return ( +
+ +

设备控制

+
+

+ 页面路径: /ai-crop-model/application/device-control +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/ai-crop-model/application/external-system/page.tsx b/crop-x-new/src/app/(app)/ai-crop-model/application/external-system/page.tsx new file mode 100644 index 0000000..49e05c7 --- /dev/null +++ b/crop-x-new/src/app/(app)/ai-crop-model/application/external-system/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ExternalSystemPage() { + return ( +
+ +

外部系统

+
+

+ 页面路径: /ai-crop-model/application/external-system +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/ai-crop-model/application/page.tsx b/crop-x-new/src/app/(app)/ai-crop-model/application/page.tsx new file mode 100644 index 0000000..36fc9c8 --- /dev/null +++ b/crop-x-new/src/app/(app)/ai-crop-model/application/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { Card } from '@/components/ui/card'; + +export default function ApplicationPage() { + return ( +
+ +

决策应用

+
+

+ 页面路径: /ai-crop-model/application +

+
+
+
+ ); +} \ No newline at end of file diff --git a/crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/AddParameterDialog.tsx b/crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/AddParameterDialog.tsx new file mode 100644 index 0000000..7cf085b --- /dev/null +++ b/crop-x-new/src/app/(app)/ai-crop-model/data-sense-center/device-parameter/components/AddParameterDialog.tsx @@ -0,0 +1,465 @@ +/** + * filekorolheader: 添加/编辑参数对话框 - 参数模板配置组件 + * 功能:新增参数、编辑参数信息、表单验证、不同类型参数配置 + * 路径:/ai-crop-model/data-sense-center/device-parameter/components + * 规范:遵循crop-x/docs/开发项目规范.md,使用shadcn语义化样式 + */ + +import { useState, useEffect } from 'react'; +import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Textarea } from '@/components/ui/textarea'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; +import { Switch } from '@/components/ui/switch'; +import { ParameterDefinition, DeviceType, DeviceParameterAction } from './deviceParameterReducer'; +import { Save, X, Plus } from 'lucide-react'; +import { toast } from 'sonner'; + +interface AddParameterDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + editingParam: ParameterDefinition | null; + selectedType: DeviceType | null; + dispatch: React.Dispatch; +} + +interface ParamForm { + key: string; + label: string; + type: 'string' | 'number' | 'boolean' | 'select'; + required: boolean; + defaultValue: string; + unit: string; + min: string; + max: string; + description: string; + options: { label: string; value: string }[]; +} + +export function AddParameterDialog({ open, onOpenChange, editingParam, selectedType, dispatch }: AddParameterDialogProps) { + const [paramForm, setParamForm] = useState({ + key: '', + label: '', + type: 'string', + required: false, + defaultValue: '', + unit: '', + min: '', + max: '', + description: '', + options: [] + }); + + const [optionLabel, setOptionLabel] = useState(''); + const [optionValue, setOptionValue] = useState(''); + const [errors, setErrors] = useState>>({}); + + useEffect(() => { + if (editingParam) { + setParamForm({ + key: editingParam.key, + label: editingParam.label, + type: editingParam.type, + required: editingParam.required || false, + defaultValue: editingParam.defaultValue?.toString() || '', + unit: editingParam.unit || '', + min: editingParam.min?.toString() || '', + max: editingParam.max?.toString() || '', + description: editingParam.description || '', + options: editingParam.options || [] + }); + } else { + setParamForm({ + key: '', + label: '', + type: 'string', + required: false, + defaultValue: '', + unit: '', + min: '', + max: '', + description: '', + options: [] + }); + } + setErrors({}); + setOptionLabel(''); + setOptionValue(''); + }, [editingParam, open]); + + const validateForm = (): boolean => { + const newErrors: Partial> = {}; + + if (!paramForm.key.trim()) { + newErrors.key = '请输入参数标识'; + } + + if (!paramForm.label.trim()) { + newErrors.label = '请输入参数名称'; + } + + // 检查参数标识是否重复(编辑时除外) + if (!editingParam || editingParam.key !== paramForm.key) { + const exists = selectedType?.parameterDefinitions?.some(p => p.key === paramForm.key.trim()); + if (exists) { + newErrors.key = '参数标识已存在'; + } + } + + // 验证数字类型的范围 + if (paramForm.type === 'number') { + if (paramForm.min && paramForm.max) { + const min = parseFloat(paramForm.min); + const max = parseFloat(paramForm.max); + if (min >= max) { + newErrors.max = '最大值必须大于最小值'; + } + } + } + + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }; + + const handleSaveParam = () => { + if (!selectedType) return; + + if (!validateForm()) { + return; + } + + try { + // 构建新参数 + const newParam: ParameterDefinition = { + key: paramForm.key.trim(), + label: paramForm.label.trim(), + type: paramForm.type, + required: paramForm.required, + description: paramForm.description.trim() + }; + + // 根据类型设置默认值和属性 + if (paramForm.type === 'number') { + newParam.defaultValue = paramForm.defaultValue ? parseFloat(paramForm.defaultValue) : 0; + if (paramForm.unit) newParam.unit = paramForm.unit; + if (paramForm.min) newParam.min = parseFloat(paramForm.min); + if (paramForm.max) newParam.max = parseFloat(paramForm.max); + } else if (paramForm.type === 'boolean') { + newParam.defaultValue = paramForm.defaultValue === 'true' || paramForm.defaultValue === true; + } else if (paramForm.type === 'select') { + newParam.options = paramForm.options; + newParam.defaultValue = paramForm.defaultValue || (paramForm.options[0]?.value || ''); + } else { + newParam.defaultValue = paramForm.defaultValue; + } + + if (editingParam) { + dispatch({ type: 'UPDATE_PARAMETER', payload: newParam }); + } else { + dispatch({ type: 'ADD_PARAMETER', payload: newParam }); + } + + onOpenChange(false); + } catch (error) { + console.error('保存失败:', error); + toast.error('保存失败,请重试'); + } + }; + + const handleAddOption = () => { + if (!optionLabel.trim() || !optionValue.trim()) { + toast.error('请填写选项标签和值'); + return; + } + + const newOption = { label: optionLabel.trim(), value: optionValue.trim() }; + setParamForm({ + ...paramForm, + options: [...paramForm.options, newOption] + }); + setOptionLabel(''); + setOptionValue(''); + }; + + const handleRemoveOption = (index: number) => { + setParamForm({ + ...paramForm, + options: paramForm.options.filter((_, i) => i !== index) + }); + }; + + const handleInputChange = (field: keyof ParamForm, value: any) => { + setParamForm(prev => ({ ...prev, [field]: value })); + // 清除该字段的错误 + if (errors[field]) { + setErrors(prev => ({ ...prev, [field]: undefined })); + } + }; + + return ( + + + + + {editingParam ? '编辑参数' : '新增参数'} + + + 为 {selectedType?.name} 配置参数定义 + + + +
+ {/* 基本信息 */} +
+
+ + handleInputChange('key', e.target.value)} + placeholder="例如:temperature" + disabled={!!editingParam} + className={errors.key ? 'border-red-500' : ''} + /> + {errors.key && ( +

{errors.key}

+ )} +

+ 英文标识,用于数据传输 +

+
+ +
+ + handleInputChange('label', e.target.value)} + placeholder="例如:温度" + className={errors.label ? 'border-red-500' : ''} + /> + {errors.label && ( +

{errors.label}

+ )} +
+
+ +
+
+ + +
+ +
+ +
+ handleInputChange('required', checked)} + /> + +
+
+
+ + {/* 根据类型显示不同字段 */} + {paramForm.type === 'number' && ( +
+
+ + handleInputChange('unit', e.target.value)} + placeholder="例如:°C" + /> +
+
+ + handleInputChange('min', e.target.value)} + placeholder="最小值" + /> +
+
+ + handleInputChange('max', e.target.value)} + placeholder="最大值" + className={errors.max ? 'border-red-500' : ''} + /> + {errors.max && ( +

{errors.max}

+ )} +
+
+ )} + + {/* 选择类型的选项配置 */} + {paramForm.type === 'select' && ( +
+ +
+
+ setOptionLabel(e.target.value)} + placeholder="选项标签(显示文本)" + className="flex-1" + /> + setOptionValue(e.target.value)} + placeholder="选项值" + className="flex-1" + /> + +
+ + {paramForm.options.length > 0 && ( +
+

已添加的选项:

+ {paramForm.options.map((option, index) => ( +
+ + {option.label} ({option.value}) + + +
+ ))} +
+ )} +
+
+ )} + + {/* 默认值 */} +
+ + {paramForm.type === 'boolean' ? ( + + ) : paramForm.type === 'select' && paramForm.options.length > 0 ? ( + + ) : ( + handleInputChange('defaultValue', e.target.value)} + placeholder="参数默认值" + /> + )} +
+ + {/* 描述 */} +
+ +