commit 2bcb72244894f31327b57c33cbabbc139a358ddd Author: liu <2302563948@qq.com> Date: Sat May 30 17:38:49 2026 +0800 first commit diff --git a/.ai/guidelines/xinadmin.md b/.ai/guidelines/xinadmin.md new file mode 100644 index 0000000..bfe6dc7 --- /dev/null +++ b/.ai/guidelines/xinadmin.md @@ -0,0 +1,147 @@ +# XinAdmin + +XinAdmin is a full-stack development framework: PHP8.2 + Laravel12 + React19 + TypeScript + Ant Design6 + Zustand + Tailwind CSS4. Licensed under MIT, free for commercial use without authorization. + +## Built-in Features + +- Dashboard: Echarts-based dashboards with demo pages +- Administrators: Backend user management with groups, permissions, and settings +- Role & Department Management: Role-based menu permission control, enterprise org structure +- System Settings: Visual form-based server variable configuration +- File Management: Backend file manager with folders, multi-select, grouping +- Dictionary Management: Maintenance of frequently used static data +- Mail & Storage Configuration: Visual config and testing for Laravel mail/filesystem +- AI Configuration: Visual config and testing for Laravel AI SDK +- Frontend Members: Permission, grouping, lists, balance records + +# AnnoRoute + +AnnoRoute is a PHP 8 Attribute-based route registration module. Routes are declared via controller annotations — no manual route files needed. Sanctum auth and permission verification are auto-integrated. + +## Usage + +- `#[GetRoute]` / `#[PostRoute]` / `#[PutRoute]` / `#[DeleteRoute]` on methods declare HTTP routes +- The `authorize` parameter controls access: `'query'` becomes ability `prefix.query`, `false` makes a route public +- `#[RequestAttribute]` params: `routePrefix`, `abilitiesPrefix`, `middleware` (string|array), `authGuard` (?string) +- Method attributes share: `route` (path appended to prefix), `authorize` (string|bool), `middleware`, `where` (regex array) +- Final route = `routePrefix + route`; final ability = `abilitiesPrefix + '.' + authorize` +- When `authorize` is not falsy, `auth:sanctum` + `authGuard` + `abilities:` middleware are auto-assembled +- Extend `Modules\Common\Http\Controllers\BaseController` for `success()` / `error()` response helpers + +# Frontend + +Source lives in `web/`. Bundled with Vite, outputting to `public/`. Package manager: pnpm. + +## Directory Structure + +| Directory | Purpose | +|-----------|---------| +| `web/api/` | Typed Axios wrappers per backend module | +| `web/components/` | Reusable UI: `AuthButton`, `DictTag`, `IconFont`, `XinForm`, `XinTable` | +| `web/domain/` | TypeScript interfaces for API models | +| `web/hooks/` | `useAuth`, `useLanguage`, `useMobile`, `useRequest` | +| `web/layout/` | Layout engine (4 modes), menu, header, breadcrumbs, theme | +| `web/locales/` | i18n (i18next), zh_CN + en_US | +| `web/pages/` | Auto-discovered page components (file-system routing) | +| `web/router/` | React Router v7 `createBrowserRouter` | +| `web/stores/` | Zustand: `global` (app/theme), `user` (auth/perms), `dict` (cache) | +| `web/utils/` | Axios instance with dedup, auth headers, error handling | + +## Key Conventions + +- Path alias `@/` → `web/` +- Zustand stores: `State` + `Actions` → `persist` + `devtools` → localStorage +- Access stores via selector: `useXxxStore(state => state.field)` +- All user-facing text via `useTranslation()` (react-i18next) +- Locale files mirror page paths: `pages/system/user.tsx` → `locales/zh_CN/system/user.ts`, key prefix `system.user` +- All keys dot-separated, double quotes, 2-space indent. See `@skill:xinadmin-development` for details +- Permission checks: `` or `useAuth().auth('permission')` +- HTTP client auto-attaches `Authorization: Bearer`, `User-Language`, handles 401 auto-logout +- Pages in `web/pages/` are auto-routed; `index.tsx` maps to parent directory; root `/` → `/dashboard/analysis` +- Pages outside layout: add to `excludePaths` array in router config + +# Antd + +Ant Design 6 is the UI component library. Components are imported from `antd` and themed via `` with tokens from `web/layout/theme.ts`. + +## Key Conventions + +- Use `antd` MCP tools (`antd_info`, `antd_doc`, `antd_demo`) to verify component APIs before writing code +- Never use deprecated props or components — check with `antd_changelog` when upgrading or referencing older examples +- Theme tokens flow: `web/layout/theme.ts` → `` → Ant Design components +- Common components: `Table`, `Form`, `Modal`, `Drawer`, `Button`, `Input`, `Select`, `DatePicker`, `Switch`, `Tag`, `Card`, `App` ... + +# Layout + +Wraps authenticated pages. Supports 4 modes set via global store: `side` (default), `top`, `mix`, `columns`. + +Menus are fetched from `/system/menu` and stored in `LayoutContext` (React Context). Menu type: `'menu'` (folder), `'route'` (page), `'rule'` (perm-only). Server filters by user role — no client-side filtering needed. Labels support i18n via `node.local`. + +Theme tokens (20+ properties) are managed in `web/layout/theme.ts`, applied via Ant Design ``, persisted to localStorage under `global-storage`. + +# XinForm And XinTable + +Two declarative JSON-driven CRUD components. Define columns once with metadata — the same definition drives table display, search form, and create/edit forms. + +## XinForm + +Use for settings/config pages or standalone forms. Supports 3 layout modes: `'Form'` (inline), `'ModalForm'`, `'DrawerForm'`. + +```tsx +New} + modalProps={{ title: 'Create User', width: 600 }} + onFinish={async (values) => { await save(values); return true; }} +/> +``` + +Key `FormColumn` fields: `dataIndex` (supports nested paths `['a','b']`), `valueType` (26 types: `text`, `password`, `select`, `date`, `switch`, etc.), `fieldProps`, `fieldRender` (custom render), `dependency` (field linkage: `{ dependencies, visible?, disabled?, fieldProps? }`), `hideIn*` visibility flags. + +`formRef` exposes `open()`, `close()`, `isOpen()`, `setLoading()` plus all Ant Design `FormInstance` methods. + +## XinTable + +Use for standard CRUD pages (list + create + update + delete). Auto-handles API calls, permissions, search, and toolbar. + +```tsx + + api="/system/user" + columns={[ + { title: 'ID', dataIndex: 'id', hideInForm: true, width: 80 }, + { title: 'Username', dataIndex: 'username', valueType: 'text', rules: [{ required: true }] }, + { title: 'Status', dataIndex: 'status', valueType: 'radio', render: (v) => {v === 1 ? 'Active' : 'Inactive'} }, + ]} + rowKey="id" + accessName="system.user" + formProps={{ grid: true, colProps: { span: 12 }, layout: 'vertical' }} + modalProps={{ width: 800 }} +/> +``` + +Required props: `api` (REST endpoint), `accessName` (permission prefix), `rowKey` (PK field), `columns`. + +Default REST behavior — `GET {api}` for list, `POST {api}` for create, `PUT {api}/{id}` for update, `DELETE {api}/{id}` for delete. Add/edit/delete buttons auto-wrapped in ``. + +Customize with: `handleRequest` (full custom fetch), `requestParams` (transform before send), `handleFinish` (custom submit), `actionBarRender` / `toolBarRender` / `operateRender` (slot overrides). + +## Choosing Between Them + +- **XinTable**: Full CRUD pages (users, roles, dicts, files) +- **XinForm** (inline/ModalForm): Settings pages with a single form (mail, storage, AI config) +- **XinForm** (ModalForm + trigger): Add/edit without a table (dept management) +- Use `hideInForm` / `hideInTable` / `hideInSearch` to control per-context visibility + +# Development Workflow + +When building a new CRUD feature, follow this four-phase workflow. See `@skill:xinadmin-development` for complete details. + +1. **Database Migration** — create table structure, indexes, foreign keys +2. **Backend** — Controller (AnnoRoute attributes), Model, FormRequest +3. **Frontend** — Page (file-system routing), Domain types, API wrappers, i18n +4. **Menu & Permissions** — seeder menu entry + rules, menu translation keys diff --git a/.ai/skills/xinadmin-development/SKILL.md b/.ai/skills/xinadmin-development/SKILL.md new file mode 100644 index 0000000..153012c --- /dev/null +++ b/.ai/skills/xinadmin-development/SKILL.md @@ -0,0 +1,53 @@ +--- +name: xinadmin-development +description: "TRIGGER when building a new CRUD module or feature in XinAdmin. Covers the full-stack development flow: database migrations, backend controller/model/form-request with AnnoRoute attribute routing, XinForm/XinTable frontend pages, and menu rules and permissions in seeder. Also activate when the user references AnnoRoute attribute routing, #[GetRoute]/#[PostRoute]/#[PutRoute]/#[DeleteRoute] attributes, XinAdmin controller patterns, or XinAdmin CRUD page development." +license: MIT +--- + +# XinAdmin Development + +Best practices for building features in XinAdmin, organized by topic. Each rule teaches what to do and why. + +## Consistency First + +Before applying any rule, check what the application already does. XinAdmin has established patterns — the best choice is the one the codebase already uses, even if another pattern would be theoretically better. + +Check sibling controllers, related pages, or existing seed data for established patterns. If one exists, follow it — don't introduce a second way. These rules are defaults for when no pattern exists yet, not overrides. + +## Quick Reference + +### 1. CRUD Development Workflow → `rules/crud-workflow.md` + +End-to-end flow for building a new feature in four phases: + +- **Phase 1:** Database migration — `php artisan make:migration` +- **Phase 2:** Backend — Controller with AnnoRoute attributes, Eloquent model, FormRequest +- **Phase 3:** Frontend — Domain types, API wrappers, i18n, XinTable page component +- **Phase 4:** Menu routes, permission rules in `SysUserSeeder`, menu translations + +### 2. AnnoRoute Attribute Routing → `rules/annoroute.md` + +- `#[RequestAttribute]` on the controller class sets shared prefix and permission prefix +- `#[GetRoute]` / `#[PostRoute]` / `#[PutRoute]` / `#[DeleteRoute]` on methods declare HTTP routes +- `authorize` parameter controls access: `'query'` → ability `prefix.query`, `false` → public route +- `where` parameter for route parameter regex constraints +- Route registration via `AnnoRoute->register(path)` in ServiceProvider `boot()` +- Controller MUST have `#[RequestAttribute]` to be discovered +- Inherit `BaseController` for `success()` / `error()` response helpers + +### 3. i18n Locale Conventions → `rules/i18n-conventions.md` + +- Locale files mirror page paths: `pages/system/user.tsx` → `locales/zh_CN/system/user.ts`, prefix `system.user` +- `index.tsx` pages drop `/index`: `pages/ai/chat/index.tsx` → `locales/zh_CN/ai/chat.ts`, prefix `ai.chat` +- Shared component translations go in `components/` directory: `xin.form.*`, `xin.table.*`, `xin.crud.*` +- Layout translations go in `layout/` directory: `layout.*` +- Standalone files (`menu.ts`, `login.ts`) stay at locale root +- All keys dot-separated, double quotes, 2-space indent + +## How to Apply + +Always use a sub-agent to read rule files and explore this skill's content. + +1. Identify what you're building (new CRUD → workflow + annoroute; routing only → annoroute) +2. Check sibling files for existing patterns — follow those first per Consistency First +3. Work through the phases in order — each builds on the last \ No newline at end of file diff --git a/.ai/skills/xinadmin-development/rules/annoroute.md b/.ai/skills/xinadmin-development/rules/annoroute.md new file mode 100644 index 0000000..f8ad8fd --- /dev/null +++ b/.ai/skills/xinadmin-development/rules/annoroute.md @@ -0,0 +1,213 @@ +# AnnoRoute Attribute Routing + +AnnoRoute is a PHP 8 Attribute-based route registration module built into XinAdmin. Routes are declared via controller annotations, with automatic Sanctum authentication and permission verification integration. + +## Core Concepts + +### Route Composition + +The final route URL is: `RequestAttribute.routePrefix` + `methodAttribute.route` + +```php +#[RequestAttribute('/system/user', 'system.user')] +class SysUserController extends BaseController +{ + #[GetRoute('/role', 'role')] + public function role(): JsonResponse { } +} +// Final route: GET /system/user/role +``` + +The final permission string is: `RequestAttribute.abilitiesPrefix` + `.` + `methodAttribute.authorize` + +```php +// abilitiesPrefix = "system.user", authorize = "role" +// Final ability: "system.user.role" +``` + +### Route Registration + +Routes are registered by scanning directories for `*Controller.php` files. In your ServiceProvider: + +```php +use Modules\AnnoRoute\AnnoRoute; + +public function boot(AnnoRoute $annoRoute): void +{ + $annoRoute->register(base_path('modules/YourModule/Http/Controllers')); +} +``` + +The scanner reads each controller file, extracts namespace + class name, then uses reflection to find and register attributes. Only classes with `#[RequestAttribute]` are registered. + +## Attribute Reference + +### Class-Level: `#[RequestAttribute]` + +Defines the shared prefix and auth configuration for all routes within the controller. + +```php +use Modules\AnnoRoute\Attribute\RequestAttribute; + +#[RequestAttribute( + routePrefix: '/admin/user', + abilitiesPrefix: 'admin.user', + middleware: 'log', // string or array — additional middleware for all routes + authGuard: 'admin', // optional — Sanctum guard provider +)] +class UserController { } +``` + +| Parameter | Type | Default | Description | +|-------------------|------------------|---------|--------------------------------------------------| +| `routePrefix` | `string` | `''` | URL prefix shared by all routes in this controller | +| `abilitiesPrefix` | `string` | `''` | Prefix for permission ability strings | +| `middleware` | `string\|array` | `''` | Additional middleware applied to every route | +| `authGuard` | `?string` | `null` | Sanctum auth guard provider name | + +### Method-Level Attributes + +#### `#[GetRoute]` / `#[PostRoute]` / `#[PutRoute]` / `#[DeleteRoute]` + +All method attributes share an identical constructor signature: + +```php +use Modules\AnnoRoute\Attribute\{GetRoute, PostRoute, PutRoute, DeleteRoute}; + +#[GetRoute( + route: '/{id}', + authorize: 'update', + middleware: 'throttle:10,1', + where: ['id' => '[0-9]+'], +)] +public function show(int $id): JsonResponse { } +``` + +| Parameter | Type | Default | Description | +|--------------|------------------|---------|----------------------------------------------------------------| +| `route` | `string` | `''` | Route path appended to the class `routePrefix` | +| `authorize` | `string\|bool` | `true` | Permission ability string; `false` disables auth entirely | +| `middleware` | `string\|array` | `''` | Route-specific middleware | +| `where` | `array` | `[]` | Regex constraints for route parameters, e.g. `['id' => '[0-9]+']` | + +### Authorization Behavior + +When `authorize` is not `false` or empty, these middleware are automatically added: + +1. `auth:sanctum` — Sanctum authentication +2. `authGuard:{guard}` — guard check (or `authGuard` without a specific guard) +3. `abilities:{prefix}.{authorize}` — permission check + +When `authorize` is `false`, no auth middleware is applied (public route). + +## Usage Examples + +### Basic CRUD Controller + +```php +use Modules\AnnoRoute\Attribute\{RequestAttribute, GetRoute, PostRoute, PutRoute, DeleteRoute}; + +#[RequestAttribute('/system/dict', 'system.dict')] +class SysDictController extends BaseController +{ + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + // GET /system/dict — ability: system.dict.query + return $this->success($data); + } + + #[PostRoute(authorize: 'create')] + public function create(FormRequest $request): JsonResponse + { + // POST /system/dict — ability: system.dict.create + return $this->success(); + } + + #[PutRoute(route: '/{id}', authorize: 'update', where: ['id' => '[0-9]+'])] + public function update(int $id, FormRequest $request): JsonResponse + { + // PUT /system/dict/123 — ability: system.dict.update + return $this->success(); + } + + #[DeleteRoute(route: '/{id}', authorize: 'delete', where: ['id' => '[0-9]+'])] + public function delete(int $id): JsonResponse + { + // DELETE /system/dict/123 — ability: system.dict.delete + return $this->success(); + } +} +``` + +### Public Routes (No Auth) + +```php +#[GetRoute('/public-data', authorize: false)] +public function publicData(): JsonResponse +{ + return $this->success($data); +} +``` + +### Custom Route Path + +When the method route is empty string (default), the controller routePrefix is the full route: + +```php +#[RequestAttribute('/dashboard', 'dashboard')] +class DashboardController extends BaseController +{ + #[GetRoute(authorize: 'index')] + public function index(): JsonResponse + { + // GET /dashboard — ability: dashboard.index + } +} +``` + +### Additional Middleware + +```php +#[GetRoute('/export', 'export', middleware: 'throttle:5,1')] +public function export(): JsonResponse { } + +#[PostRoute('/batch', 'batch', middleware: ['log', 'transaction'])] +public function batchProcess(): JsonResponse { } +``` + +### Route with Multiple Parameters + +```php +#[GetRoute( + route: '/{deptId}/user/{userId}', + authorize: 'detail', + where: ['deptId' => '[0-9]+', 'userId' => '[0-9]+'], +)] +public function detail(int $deptId, int $userId): JsonResponse { } +``` + +## Key Rules + +- Namespace: `Modules\AnnoRoute\Attribute\` +- Controller classes MUST use `#[RequestAttribute]` to be discovered; methods are only registered when the class has this attribute +- Method attributes: `GetRoute`, `PostRoute`, `PutRoute`, `DeleteRoute` +- Route registration: `AnnoRoute->register(path)` in ServiceProvider `boot()` +- Scanner only looks for `*Controller.php` files +- All auth middleware is auto-assembled — only declare `authorize` strings, not auth middleware directly +- Inherit `BaseController` for the `success()` / `error()` response helpers +- Controllers must return `Illuminate\Http\JsonResponse` + +## Common Pitfalls + +### Forgetting #[RequestAttribute] on the Class + +If the class attribute is missing, no routes from that controller will be registered — regardless of method attributes. + +### Duplicate Route Prefix + +The final route is `routePrefix + route`. Convention is leading slash on both — they concatenate directly (no double slash). + +### authorize vs abilitiesPrefix + +The full permission string is `abilitiesPrefix.authorize`. If `abilitiesPrefix` is empty, the raw `authorize` value is used. Omitting `abilitiesPrefix` means you must pass the full ability string in each method's `authorize`. diff --git a/.ai/skills/xinadmin-development/rules/crud-workflow.md b/.ai/skills/xinadmin-development/rules/crud-workflow.md new file mode 100644 index 0000000..a146989 --- /dev/null +++ b/.ai/skills/xinadmin-development/rules/crud-workflow.md @@ -0,0 +1,205 @@ +# CRUD Development Workflow + +The standard end-to-end workflow for building a new feature in XinAdmin follows four phases. Each phase builds on the last — always work in order. + +## Phase 1: Database Migration + +Create the database table structure. + +``` +php artisan make:migration create_xxx_table +``` + +- Define columns, indexes, and foreign keys in the migration file +- Use `$table->id()` for auto-increment or `$table->string('id', 36)->primary()` for UUIDs +- Use `constrained()` for foreign keys referencing other tables +- Run `php artisan migrate` to apply + +## Phase 2: Backend — Controller, Model, FormRequest + +### Controller + +Create the controller in the appropriate module under `modules/{Module}/Http/Controllers/`. Use AnnoRoute attributes for routing and authorization: + +```php +#[RequestAttribute('/system/xxx', 'system.xxx')] +class XxxController extends BaseController +{ + protected array $searchField = ['name' => 'like']; + protected array $quickSearchField = ['name']; + + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + $params = $request->all(); + $perPage = (int) ($params['pageSize'] ?? 10); + $data = $this->buildSearch($params, Model::query()) + ->orderBy('id', 'desc') + ->paginate($perPage); + return $this->success($data->toArray()); + } + + #[PostRoute(authorize: 'create')] + public function create(FormRequest $request): JsonResponse { } + + #[PutRoute(route: '/{id}', authorize: 'update', where: ['id' => '[0-9]+'])] + public function update(int $id, FormRequest $request): JsonResponse { } + + #[DeleteRoute(route: '/{id}', authorize: 'delete', where: ['id' => '[0-9]+'])] + public function delete(int $id): JsonResponse { } +} +``` + +**Key points:** +- `#[RequestAttribute]` sets route prefix and permission prefix — AnnoRoute auto-registers routes (see `rules/annoroute.md`) +- Always use `->paginate($perPage)->toArray()` and pass to `$this->success()` — the PaginationProvider returns `{ data, total, pageSize, current }` which XinTable expects +- Use `$this->buildSearch()` for filter/keyword/sort query building +- Return `$this->success()` or `$this->error()` from BaseController + +### Model + +Create or reuse the Eloquent model: + +```php +class XxxModel extends Model +{ + protected $table = 'xxx'; + protected $fillable = ['name', 'status', /* ... */]; + protected $casts = ['status' => 'integer']; +} +``` + +### FormRequest + +Create for validation on create/update: + +```bash +php artisan make:request XxxFormRequest +``` + +Place in `modules/{Module}/Http/Requests/`. Define `rules()` and `messages()`. Inject via controller method parameter for auto-validation. + +## Phase 3: Frontend — Page, Domain, API, i18n + +### Domain (`web/domain/`) + +TypeScript interfaces matching backend model fields: + +```typescript +export interface IXxx { + id?: number; + name?: string; + status?: number; + created_at?: string; + updated_at?: string; +} +``` + +### API (`web/api/{module}/`) + +Typed Axios wrappers for each endpoint. Use `createAxios` from `@/utils/request`: + +```typescript +import createAxios from '@/utils/request'; + +export async function getList(params?: Record) { + return createAxios>({ url: '/system/xxx', method: 'get', params }); +} +``` + +XinTable handles list/create/update/delete automatically — custom API functions are only needed for additional endpoints. + +### i18n (`web/locales/{zh_CN,en_US}/`) + +Translation keys for the page. Each feature gets its own file: + +```typescript +export default { + 'xxx.page.title': 'XXX Management', + 'xxx.id': 'ID', + 'xxx.name': 'Name', + // ... +}; +``` + +Register in `web/locales/{zh_CN,en_US}/index.ts` by importing and spreading into the default export. + +### Page (`web/pages/{module}/xxx/index.tsx`) + +Use `` for standard CRUD list pages: + +```tsx +import XinTable from '@/components/XinTable'; +import type { XinTableColumn } from '@/components/XinTable/typings'; +import type { IXxx } from '@/domain/xxx'; +import { useTranslation } from 'react-i18next'; + +export default function XxxPage() { + const { t } = useTranslation(); + + const columns: XinTableColumn[] = [ + { title: t('xxx.id'), dataIndex: 'id', hideInForm: true, width: 80 }, + { title: t('xxx.name'), dataIndex: 'name', valueType: 'text', + rules: [{ required: true, message: t('xxx.name.required') }] }, + ]; + + return ( + <> + {t('xxx.page.title')} + + api="/system/xxx" + columns={columns} + rowKey="id" + accessName="system.xxx" + formProps={{ grid: true, colProps: { span: 12 }, layout: 'vertical' }} + modalProps={{ width: 800 }} + /> + + ); +} +``` + +File-system routing auto-maps: `web/pages/system/xxx/index.tsx` → `/system/xxx` + +## Phase 4: Menu Routes and Permissions + +Add the menu entry in `database/seeders/SysUserSeeder.php` under the appropriate parent menu: + +```php +[ + 'type' => "route", + 'key' => "system.xxx", + 'name' => "XXX Management", + "path" => "/system/xxx", + 'local' => "menu.system.xxx", + 'children' => [ + ['type' => 'rule', 'name' => '查询列表', 'key' => 'system.xxx.query'], + ['type' => 'rule', 'name' => '新增', 'key' => 'system.xxx.create'], + ['type' => 'rule', 'name' => '更新', 'key' => 'system.xxx.update'], + ['type' => 'rule', 'name' => '删除', 'key' => 'system.xxx.delete'], + ] +], +``` + +Add the menu translation key in `web/locales/{zh_CN,en_US}/menu.ts`: + +```text +"menu.system.xxx": "XXX Management", +``` + +After seeding, the super admin role (role_id=1) automatically gets all permissions via the seeder's auto-assignment logic. + +Run `php artisan db:seed --class=SysUserSeeder` to apply. + +## Quick Checklist + +1. Migration → `database/migrations/` +2. Controller → `modules/{Module}/Http/Controllers/` (with AnnoRoute attributes) +3. Model → `modules/{Module}/Models/` or vendor model +4. FormRequest → `modules/{Module}/Http/Requests/` (for create/update validation) +5. Domain types → `web/domain/xxx.ts` +6. API wrappers → `web/api/{module}/xxx.ts` +7. i18n files → `web/locales/{zh_CN,en_US}/xxx.ts` + register in `index.ts` +8. Page component → `web/pages/{module}/xxx/index.tsx` +9. Menu entry + rules → `database/seeders/SysUserSeeder.php` +10. Menu translation → `web/locales/{zh_CN,en_US}/menu.ts` diff --git a/.ai/skills/xinadmin-development/rules/i18n-conventions.md b/.ai/skills/xinadmin-development/rules/i18n-conventions.md new file mode 100644 index 0000000..96fac5f --- /dev/null +++ b/.ai/skills/xinadmin-development/rules/i18n-conventions.md @@ -0,0 +1,101 @@ +# i18n Conventions + +Locale files must follow a consistent directory structure and naming convention. All keys are dot-separated, organized by module prefix matching the page path. + +## Directory Structure + +Locale files mirror page paths, with special directories for components and layout: + +``` +web/locales/zh_CN/ (en_US mirrors exactly) +├── index.ts # Aggregates all modules +├── menu.ts # Standalone files (no page path prefix) +├── login.ts +├── dashboard/ # dashboard/*.tsx pages +│ ├── analysis.ts +│ ├── monitor.ts +│ └── workplace.ts +├── system/ # system/*.tsx pages +│ ├── info.ts +│ ├── user.ts +│ ├── rule.ts +│ └── ... +├── ai/ # ai/*.tsx pages +│ ├── chat.ts +│ ├── conversation.ts +│ └── agent.ts +├── user/ # user/*.tsx pages +│ └── profile.ts +├── components/ # Shared component translations +│ ├── xin-form.ts +│ ├── xin-table.ts +│ └── xin-crud.ts +└── layout/ # Layout translations + └── layout.ts +``` + +## Key Naming Rules + +### 1. Page translations follow page path + +The key prefix equals the page file path (without extension, `/index` dropped): + +| Page file | Locale file | Key prefix | +|-----------|-------------|------------| +| `pages/system/info.tsx` | `locales/zh_CN/system/info.ts` | `system.info` | +| `pages/system/user.tsx` | `locales/zh_CN/system/user.ts` | `system.user` | +| `pages/system/dict/index.tsx` | `locales/zh_CN/system/dict.ts` | `system.dict` | +| `pages/ai/chat/index.tsx` | `locales/zh_CN/ai/chat.ts` | `ai.chat` | +| `pages/dashboard/analysis.tsx` | `locales/zh_CN/dashboard/analysis.ts` | `dashboard.analysis` | + +### 2. `index.tsx` pages drop "/index" + +`pages/ai/chat/index.tsx` → file goes at `ai/chat.ts`, not `ai/chat/index.ts`. + +### 3. Components go in `components/` directory + +| Component | Locale file | Key prefix | +|-----------|-------------|------------| +| `XinForm` + sub-components | `components/xin-form.ts` | `xin.form` | +| `XinTable` + sub-components | `components/xin-table.ts` | `xin.table` | +| XinCrud shared keys | `components/xin-crud.ts` | `xin.crud` | + +### 4. Layout goes in `layout/` directory + +Layout translations are in `layout/layout.ts` with prefix `layout.*`. + +### 5. Standalone files stay at root + +Files without a page path prefix (like `menu.ts`, `login.ts`) stay at the root of the locale directory. + +## File Format + +```typescript +export default { + // Section comment (Chinese in zh_CN, English in en_US) + "prefix.page.title": "页面标题", + "prefix.field.name": "字段名", + "prefix.field.name.required": "字段名为必填项", +}; +``` + +- **Quotes**: Always double quotes for keys and values +- **Indentation**: 2 spaces +- **Trailing commas**: Yes (after last entry) +- **Comments**: Section comments in the locale's own language +- **No `index.ts` files** inside subdirectories — only at the language root for aggregation + +## Registering New Files + +Import and spread new locale files in the language root `index.ts`: + +```typescript +import moduleName from "./path/to/file"; + +export default { + ...moduleName, + // ... other modules +}; +``` + +Both `zh_CN/index.ts` and `en_US/index.ts` must be updated identically. diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ae3a05a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,24 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{ts,tsx,js,jsx,mjs,cjs}] +indent_style = space +indent_size = 2 + +[*.{css,scss,sass,less}] +indent_style = space +indent_size = 2 + +[*.{html,htm}] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = space +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..fdd5275 --- /dev/null +++ b/.env.example @@ -0,0 +1,51 @@ +# 网站基本配置 +APP_NAME=XinAdmin +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_TIMEZONE=UTC +APP_URL=http://localhost:8000 + +VITE_BASE_URL=$APP_URL + +# 密码加密算法因子 +BCRYPT_ROUNDS=12 + +# 日志配置 +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +# 数据库配置 +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD=root + +# redis配置 +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +# 队列配置 +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +MEMCACHED_HOST=127.0.0.1 + +# 系统设置 +SETTING_CACHE_KEY=settings + +# 邮件配置 +MAIL_MAILER=smtp +MAIL_HOST= +MAIL_PORT= +MAIL_USERNAME= +MAIL_PASSWORD= +MAIL_FROM_ADDRESS= +MAIL_FROM_NAME= diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..dd8c0d5 --- /dev/null +++ b/.env.production @@ -0,0 +1 @@ +VITE_BASE_URL=/index.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..230e10a --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/dist +/.idea +/.vscode +/vendor +/dist-ssr +/.phpunit.cache +/node_modules +/public/storage +/storage/*.key +/.claude + +hot +.env +*.log +*.local diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..8c6715a --- /dev/null +++ b/.mcp.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "laravel-boost": { + "command": "php", + "args": [ + "artisan", + "boost:mcp" + ] + } + } +} \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..0bfd037 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,310 @@ + +=== .ai/xinadmin rules === + +# XinAdmin + +XinAdmin is a full-stack development framework: PHP8.2 + Laravel12 + React19 + TypeScript + Ant Design6 + Zustand + Tailwind CSS4. Licensed under MIT, free for commercial use without authorization. + +## Built-in Features + +- Dashboard: Echarts-based dashboards with demo pages +- Administrators: Backend user management with groups, permissions, and settings +- Role & Department Management: Role-based menu permission control, enterprise org structure +- System Settings: Visual form-based server variable configuration +- File Management: Backend file manager with folders, multi-select, grouping +- Dictionary Management: Maintenance of frequently used static data +- Mail & Storage Configuration: Visual config and testing for Laravel mail/filesystem +- AI Configuration: Visual config and testing for Laravel AI SDK +- Frontend Members: Permission, grouping, lists, balance records + +# AnnoRoute + +AnnoRoute is a PHP 8 Attribute-based route registration module. Routes are declared via controller annotations — no manual route files needed. Sanctum auth and permission verification are auto-integrated. + +## Usage + +- `#[GetRoute]` / `#[PostRoute]` / `#[PutRoute]` / `#[DeleteRoute]` on methods declare HTTP routes +- The `authorize` parameter controls access: `'query'` becomes ability `prefix.query`, `false` makes a route public +- `#[RequestAttribute]` params: `routePrefix`, `abilitiesPrefix`, `middleware` (string|array), `authGuard` (?string) +- Method attributes share: `route` (path appended to prefix), `authorize` (string|bool), `middleware`, `where` (regex array) +- Final route = `routePrefix + route`; final ability = `abilitiesPrefix + '.' + authorize` +- When `authorize` is not falsy, `auth:sanctum` + `authGuard` + `abilities:` middleware are auto-assembled +- Extend `Modules\Common\Http\Controllers\BaseController` for `success()` / `error()` response helpers + +# Frontend + +Source lives in `web/`. Bundled with Vite, outputting to `public/`. Package manager: pnpm. + +## Directory Structure + +| Directory | Purpose | +|-----------|---------| +| `web/api/` | Typed Axios wrappers per backend module | +| `web/components/` | Reusable UI: `AuthButton`, `DictTag`, `IconFont`, `XinForm`, `XinTable` | +| `web/domain/` | TypeScript interfaces for API models | +| `web/hooks/` | `useAuth`, `useLanguage`, `useMobile`, `useRequest` | +| `web/layout/` | Layout engine (4 modes), menu, header, breadcrumbs, theme | +| `web/locales/` | i18n (i18next), zh_CN + en_US | +| `web/pages/` | Auto-discovered page components (file-system routing) | +| `web/router/` | React Router v7 `createBrowserRouter` | +| `web/stores/` | Zustand: `global` (app/theme), `user` (auth/perms), `dict` (cache) | +| `web/utils/` | Axios instance with dedup, auth headers, error handling | + +## Key Conventions + +- Path alias `@/` → `web/` +- Zustand stores: `State` + `Actions` → `persist` + `devtools` → localStorage +- Access stores via selector: `useXxxStore(state => state.field)` +- All user-facing text via `useTranslation()` (react-i18next) +- Locale files mirror page paths: `pages/system/user.tsx` → `locales/zh_CN/system/user.ts`, key prefix `system.user` +- All keys dot-separated, double quotes, 2-space indent. See `@skill:xinadmin-development` for details +- Permission checks: `` or `useAuth().auth('permission')` +- HTTP client auto-attaches `Authorization: Bearer`, `User-Language`, handles 401 auto-logout +- Pages in `web/pages/` are auto-routed; `index.tsx` maps to parent directory; root `/` → `/dashboard/analysis` +- Pages outside layout: add to `excludePaths` array in router config + +# Antd + +Ant Design 6 is the UI component library. Components are imported from `antd` and themed via `` with tokens from `web/layout/theme.ts`. + +## Key Conventions + +- Use `antd` MCP tools (`antd_info`, `antd_doc`, `antd_demo`) to verify component APIs before writing code +- Never use deprecated props or components — check with `antd_changelog` when upgrading or referencing older examples +- Theme tokens flow: `web/layout/theme.ts` → `` → Ant Design components +- Common components: `Table`, `Form`, `Modal`, `Drawer`, `Button`, `Input`, `Select`, `DatePicker`, `Switch`, `Tag`, `Card`, `App` ... + +# Layout + +Wraps authenticated pages. Supports 4 modes set via global store: `side` (default), `top`, `mix`, `columns`. + +Menus are fetched from `/system/menu` and stored in `LayoutContext` (React Context). Menu type: `'menu'` (folder), `'route'` (page), `'rule'` (perm-only). Server filters by user role — no client-side filtering needed. Labels support i18n via `node.local`. + +Theme tokens (20+ properties) are managed in `web/layout/theme.ts`, applied via Ant Design ``, persisted to localStorage under `global-storage`. + +# XinForm And XinTable + +Two declarative JSON-driven CRUD components. Define columns once with metadata — the same definition drives table display, search form, and create/edit forms. + +## XinForm + +Use for settings/config pages or standalone forms. Supports 3 layout modes: `'Form'` (inline), `'ModalForm'`, `'DrawerForm'`. + +```tsx +New} + modalProps={{ title: 'Create User', width: 600 }} + onFinish={async (values) => { await save(values); return true; }} +/> +``` + +Key `FormColumn` fields: `dataIndex` (supports nested paths `['a','b']`), `valueType` (26 types: `text`, `password`, `select`, `date`, `switch`, etc.), `fieldProps`, `fieldRender` (custom render), `dependency` (field linkage: `{ dependencies, visible?, disabled?, fieldProps? }`), `hideIn*` visibility flags. + +`formRef` exposes `open()`, `close()`, `isOpen()`, `setLoading()` plus all Ant Design `FormInstance` methods. + +## XinTable + +Use for standard CRUD pages (list + create + update + delete). Auto-handles API calls, permissions, search, and toolbar. + +```tsx + + api="/system/user" + columns={[ + { title: 'ID', dataIndex: 'id', hideInForm: true, width: 80 }, + { title: 'Username', dataIndex: 'username', valueType: 'text', rules: [{ required: true }] }, + { title: 'Status', dataIndex: 'status', valueType: 'radio', render: (v) => {v === 1 ? 'Active' : 'Inactive'} }, + ]} + rowKey="id" + accessName="system.user" + formProps={{ grid: true, colProps: { span: 12 }, layout: 'vertical' }} + modalProps={{ width: 800 }} +/> +``` + +Required props: `api` (REST endpoint), `accessName` (permission prefix), `rowKey` (PK field), `columns`. + +Default REST behavior — `GET {api}` for list, `POST {api}` for create, `PUT {api}/{id}` for update, `DELETE {api}/{id}` for delete. Add/edit/delete buttons auto-wrapped in ``. + +Customize with: `handleRequest` (full custom fetch), `requestParams` (transform before send), `handleFinish` (custom submit), `actionBarRender` / `toolBarRender` / `operateRender` (slot overrides). + +## Choosing Between Them + +- **XinTable**: Full CRUD pages (users, roles, dicts, files) +- **XinForm** (inline/ModalForm): Settings pages with a single form (mail, storage, AI config) +- **XinForm** (ModalForm + trigger): Add/edit without a table (dept management) +- Use `hideInForm` / `hideInTable` / `hideInSearch` to control per-context visibility + +# Development Workflow + +When building a new CRUD feature, follow this four-phase workflow. See `@skill:xinadmin-development` for complete details. + +1. **Database Migration** — create table structure, indexes, foreign keys +2. **Backend** — Controller (AnnoRoute attributes), Model, FormRequest +3. **Frontend** — Page (file-system routing), Domain types, API wrappers, i18n +4. **Menu & Permissions** — seeder menu entry + rules, menu translation keys + +=== foundation rules === + +# Laravel Boost Guidelines + +The Laravel Boost guidelines are specifically curated by Laravel maintainers for this application. These guidelines should be followed closely to ensure the best experience when building Laravel applications. + +## Foundational Context + +This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions. + +- php - 8.3 +- laravel/ai (AI) - v0 +- laravel/framework (LARAVEL) - v13 +- laravel/prompts (PROMPTS) - v0 +- laravel/sanctum (SANCTUM) - v4 +- laravel/boost (BOOST) - v2 +- laravel/mcp (MCP) - v0 +- laravel/pail (PAIL) - v1 +- laravel/sail (SAIL) - v1 +- phpunit/phpunit (PHPUNIT) - v12 +- react (REACT) - v19 +- eslint (ESLINT) - v9 +- tailwindcss (TAILWINDCSS) - v4 + +## Skills Activation + +This project has domain-specific skills available in `**/skills/**`. You MUST activate the relevant skill whenever you work in that domain—don't wait until you're stuck. + +## Conventions + +- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming. +- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`. +- Check for existing components to reuse before writing a new one. + +## Verification Scripts + +- Do not create verification scripts or tinker when tests cover that functionality and prove they work. Unit and feature tests are more important. + +## Application Structure & Architecture + +- Stick to existing directory structure; don't create new base folders without approval. +- Do not change the application's dependencies without approval. + +## Frontend Bundling + +- If the user doesn't see a frontend change reflected in the UI, it could mean they need to run `pnpm run build`, `pnpm run dev`, or `composer run dev`. Ask them. + +## Documentation Files + +- You must only create documentation files if explicitly requested by the user. + +## Replies + +- Be concise in your explanations - focus on what's important rather than explaining obvious details. + +=== boost rules === + +# Laravel Boost + +## Tools + +- Laravel Boost is an MCP server with tools designed specifically for this application. Prefer Boost tools over manual alternatives like shell commands or file reads. +- Use `database-query` to run read-only queries against the database instead of writing raw SQL in tinker. +- Use `database-schema` to inspect table structure before writing migrations or models. +- Use `get-absolute-url` to resolve the correct scheme, domain, and port for project URLs. Always use this before sharing a URL with the user. +- Use `browser-logs` to read browser logs, errors, and exceptions. Only recent logs are useful, ignore old entries. + +## Searching Documentation (IMPORTANT) + +- Always use `search-docs` before making code changes. Do not skip this step. It returns version-specific docs based on installed packages automatically. +- Pass a `packages` array to scope results when you know which packages are relevant. +- Use multiple broad, topic-based queries: `['rate limiting', 'routing rate limiting', 'routing']`. Expect the most relevant results first. +- Do not add package names to queries because package info is already shared. Use `test resource table`, not `filament 4 test resource table`. + +### Search Syntax + +1. Use words for auto-stemmed AND logic: `rate limit` matches both "rate" AND "limit". +2. Use `"quoted phrases"` for exact position matching: `"infinite scroll"` requires adjacent words in order. +3. Combine words and phrases for mixed queries: `middleware "rate limit"`. +4. Use multiple queries for OR logic: `queries=["authentication", "middleware"]`. + +## Artisan + +- Run Artisan commands directly via the command line (e.g., `php artisan route:list`). Use `php artisan list` to discover available commands and `php artisan [command] --help` to check parameters. +- Inspect routes with `php artisan route:list`. Filter with: `--method=GET`, `--name=users`, `--path=api`, `--except-vendor`, `--only-vendor`. +- Read configuration values using dot notation: `php artisan config:show app.name`, `php artisan config:show database.default`. Or read config files directly from the `config/` directory. + +## Tinker + +- Execute PHP in app context for debugging and testing code. Do not create models without user approval, prefer tests with factories instead. Prefer existing Artisan commands over custom tinker code. +- Always use single quotes to prevent shell expansion: `php artisan tinker --execute 'Your::code();'` + - Double quotes for PHP strings inside: `php artisan tinker --execute 'User::where("active", true)->count();'` + +=== php rules === + +# PHP + +- Always use curly braces for control structures, even for single-line bodies. +- Use PHP 8 constructor property promotion: `public function __construct(public GitHub $github) { }`. Do not leave empty zero-parameter `__construct()` methods unless the constructor is private. +- Use explicit return type declarations and type hints for all method parameters: `function isAccessible(User $user, ?string $path = null): bool` +- Use TitleCase for Enum keys: `FavoritePerson`, `BestLake`, `Monthly`. +- Prefer PHPDoc blocks over inline comments. Only add inline comments for exceptionally complex logic. +- Use array shape type definitions in PHPDoc blocks. + +=== deployments rules === + +# Deployment + +- Laravel can be deployed using [Laravel Cloud](https://cloud.laravel.com/), which is the fastest way to deploy and scale production Laravel applications. + +=== laravel/core rules === + +# Do Things the Laravel Way + +- Use `php artisan make:` commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using `php artisan list` and check their parameters with `php artisan [command] --help`. +- If you're creating a generic PHP class, use `php artisan make:class`. +- Pass `--no-interaction` to all Artisan commands to ensure they work without user input. You should also pass the correct `--options` to ensure correct behavior. + +### Model Creation + +- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things, using `php artisan make:model --help` to check the available options. + +## APIs & Eloquent Resources + +- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention. + +## URL Generation + +- When generating links to other pages, prefer named routes and the `route()` function. + +## Testing + +- When creating models for tests, use the factories for the models. Check if the factory has custom states that can be used before manually setting up the model. +- Faker: Use methods such as `$this->faker->word()` or `fake()->randomDigit()`. Follow existing conventions whether to use `$this->faker` or `fake()`. +- When creating tests, make use of `php artisan make:test [options] {name}` to create a feature test, and pass `--unit` to create a unit test. Most tests should be feature tests. + +## Vite Error + +- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run `pnpm run build` or ask the user to run `pnpm run dev` or `composer run dev`. + +=== phpunit/core rules === + +# PHPUnit + +- This application uses PHPUnit for testing. All tests must be written as PHPUnit classes. Use `php artisan make:test --phpunit {name}` to create a new test. +- If you see a test using "Pest", convert it to PHPUnit. +- Every time a test has been updated, run that singular test. +- When the tests relating to your feature are passing, ask the user if they would like to also run the entire test suite to make sure everything is still passing. +- Tests should cover all happy paths, failure paths, and edge cases. +- You must not remove any tests or test files from the tests directory without approval. These are not temporary or helper files; these are core to the application. + +## Running Tests + +- Run the minimal number of tests, using an appropriate filter, before finalizing. +- To run all tests: `php artisan test --compact`. +- To run all tests in a file: `php artisan test --compact tests/Feature/ExampleTest.php`. +- To filter on a particular test name: `php artisan test --compact --filter=testName` (recommended after making a change to a related file). + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f96a8a0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 XinAdmin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/app/Exceptions/ExceptionsHandler.php b/app/Exceptions/ExceptionsHandler.php new file mode 100644 index 0000000..6b7f6e9 --- /dev/null +++ b/app/Exceptions/ExceptionsHandler.php @@ -0,0 +1,101 @@ + function (HttpResponseException $e) { + return response()->json($e->toArray(), $e->getCode()); + }, + MissingAbilityException::class => function ($e) { + return $this->notification( + 'No Permission', + __('system.error.no_permission'), + ShowType::WARN_NOTIFICATION + ); + }, + AuthenticationException::class => function ($e) { + return response()->json([ + 'msg' => __('user.not_login'), + 'success' => false + ], 401); + }, + NotFoundHttpException::class => function ($e) { + return $this->notification( + 'Route Not Exist', + __('system.error.route_not_exist'), + ShowType::WARN_NOTIFICATION + ); + }, + ValidationException::class => function (ValidationException $e) { + return response()->json([ + 'msg' => $e->validator->errors()->first(), + 'showType' => ShowType::WARN_MESSAGE->value, + 'success' => false, + ]); + }, + ]; + + foreach ($exceptionHandlers as $exceptionType => $handler) { + if ($e instanceof $exceptionType) { + $response = $handler($e); + break; + } + } + + if (!isset($response)) { + $debug = config('app.debug'); + $data = [ + 'msg' => $e->getMessage(), + 'showType' => ShowType::ERROR_MESSAGE->value, + 'success' => false, + ]; + + if ($debug) { + $data += [ + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'trace' => $e->getTrace(), + 'code' => $e->getCode(), + ]; + } + + $response = response()->json($data); + } + + $response->headers->set('Access-Control-Allow-Origin', '*'); + $response->headers->set('Access-Control-Allow-Credentials', 'true'); + $response->headers->set('Access-Control-Max-Age', 1800); + $response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); + $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, User-Language'); + + return $response; + } +} diff --git a/app/Exceptions/HttpResponseException.php b/app/Exceptions/HttpResponseException.php new file mode 100644 index 0000000..f9c180f --- /dev/null +++ b/app/Exceptions/HttpResponseException.php @@ -0,0 +1,54 @@ +msg = $data['msg'] ?? ''; + $this->success = $data['success'] ?? true; + if (empty($data['showType']) && $this->success) { + $this->showType = ShowType::SUCCESS_MESSAGE; + } elseif (empty($data['showType']) && ! $this->success) { + $this->showType = ShowType::ERROR_MESSAGE; + } else { + $this->showType = ShowType::from($data['showType']); + } + $this->data = $data['data'] ?? []; + parent::__construct($data['msg'] ?? '', $code); + } + + public function toArray(): array + { + return [ + 'data' => $this->data, + 'success' => $this->success, + 'msg' => $this->msg, + 'showType' => $this->showType->value, + ]; + } +} diff --git a/app/Exceptions/RepositoryException.php b/app/Exceptions/RepositoryException.php new file mode 100644 index 0000000..5143f29 --- /dev/null +++ b/app/Exceptions/RepositoryException.php @@ -0,0 +1,10 @@ +success(compact('web_setting')); + } + + /** 用户登录 */ + #[PostRoute('/login')] + public function login(Request $request): JsonResponse + { + $credentials = $request->validate([ + 'username' => 'required|min:4|alphaDash', + 'password' => 'required|min:4|alphaDash', + ]); + if (Auth::guard('users')->attempt($credentials, true)) { + $data = $request->user('users') + ->createToken($credentials['username']) + ->toArray(); + return $this->success($data, __('user.login_success')); + } + return $this->error(__('user.login_error')); + } + + /** 用户注册 */ + #[PostRoute('/register')] + public function register(UserRegisterRequest $request): JsonResponse + { + $data = $request->validated(); + $model = new UserModel; + $model->username = $data['username']; + $model->password = password_hash($data['password'], PASSWORD_DEFAULT); + $model->email = $data['email']; + if ($model->save()) { + return $this->success(); + } + + return $this->error('创建用户失败'); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..9edba34 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,68 @@ +user(); + return $this->success(compact('info')); + } + + #[PostRoute('/logout')] + public function logout(): JsonResponse + { + $user_id = auth('users')->id(); + $model = new UserModel; + if ($model->logout($user_id)) { + return $this->success('退出登录成功'); + } else { + return $this->error($model->getErrorMsg()); + } + } + + #[PutRoute] + public function setUserInfo(UserUpdateInfoRequest $request): JsonResponse + { + UserModel::where('user_id', auth('user')->id())->update($request->validated()); + + return $this->error('更新成功'); + } + + #[PostRoute('/setPwd')] + public function setPassword(Request $request): JsonResponse + { + $data = $request->validate([ + 'oldPassword' => 'required|string|max:20', + 'newPassword' => 'required|string|min:6|max:20', + 'rePassword' => 'required|same:newPassword', + ]); + $user_id = auth('user')->id(); + $user = UserModel::query()->find($user_id); + if (! password_verify($data['oldPassword'], $user['password'])) { + return $this->error('旧密码不正确!'); + } + $user->password = password_hash($data['newPassword'], PASSWORD_DEFAULT); + if ($user->save()) { + return $this->success('更新成功'); + } + + return $this->error('更新失败'); + } +} diff --git a/app/Http/Requests/UserRegisterRequest.php b/app/Http/Requests/UserRegisterRequest.php new file mode 100644 index 0000000..95d8851 --- /dev/null +++ b/app/Http/Requests/UserRegisterRequest.php @@ -0,0 +1,18 @@ + 'required|min:4|alphaDash', + 'password' => 'required|min:4|alphaDash', + 'rePassword' => 'required|min:4|same:password', + 'email' => 'required|email', + ]; + } +} diff --git a/app/Http/Requests/UserUpdateInfoRequest.php b/app/Http/Requests/UserUpdateInfoRequest.php new file mode 100644 index 0000000..fe0c559 --- /dev/null +++ b/app/Http/Requests/UserUpdateInfoRequest.php @@ -0,0 +1,20 @@ + 'required|min:4|max:20', + 'nickname' => 'required|min:4|max:20', + 'gender' => 'required', + 'email' => 'required|email', + 'avatar_id' => 'required|integer', + 'mobile' => 'required|regex:/^1[34578]\d{9}$/', + ]; + } +} diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php new file mode 100644 index 0000000..c278ccd --- /dev/null +++ b/app/Models/UserModel.php @@ -0,0 +1,32 @@ +app->bind(ExceptionsHandler::class, \App\Exceptions\ExceptionsHandler::class); + } + + /** + * Bootstrap any application services. + */ + public function boot(AnnoRoute $annoRoute): void + { + // 注册路由 + $annoRoute->register(app_path('Http/Controllers')); + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..8e04b42 --- /dev/null +++ b/artisan @@ -0,0 +1,15 @@ +#!/usr/bin/env php +handleCommand(new ArgvInput); + +exit($status); diff --git a/boost.json b/boost.json new file mode 100644 index 0000000..2409fdc --- /dev/null +++ b/boost.json @@ -0,0 +1,16 @@ +{ + "agents": [ + "claude_code" + ], + "cloud": false, + "guidelines": true, + "mcp": true, + "nightwatch": false, + "sail": false, + "skills": [ + "ai-sdk-development", + "laravel-best-practices", + "tailwindcss-development", + "xinadmin-development" + ] +} diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..98de0b1 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,43 @@ +withRouting( + commands: __DIR__.'/../routes/console.php' + ) + ->withMiddleware(function (Middleware $middleware) { + // 全局跨域中间件 + $middleware->append(AllowCrossDomainMiddleware::class); + $middleware->append(LanguageMiddleware::class); + // 全局中间件 — 从缓存加载 DB 应用设置到 config() 运行时 + $middleware->append(LoadAppSettingsMiddleware::class); + $middleware->alias([ + 'login_log' => LoginLogMiddleware::class, + 'abilities' => CheckAbilities::class, + 'ability' => CheckForAnyAbility::class, + 'authGuard' => AuthGuardMiddleware::class, + ]); + // 未登录响应 + $middleware->redirectGuestsTo(function (Request $request) { + return response()->json([ + 'success' => false, + 'msg' => __('user.not_login') + ], 401); + }); + }) + ->withCommands([ + GenerateRouteHelperCommand::class, + ]) + ->withExceptions(function (Exceptions $exceptions) {})->create(); diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..22c0ed9 --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,17 @@ +=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "https://github.com/awslabs/aws-crt-php", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" + }, + "time": "2024-10-18T22:15:13+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "3.383.1", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "56b7ff3ff9e086eb3945bf31e75c97cde5ab531a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/56b7ff3ff9e086eb3945bf31e75c97cde5ab531a", + "reference": "56b7ff3ff9e086eb3945bf31e75c97cde5ab531a", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.2.3", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/promises": "^2.0", + "guzzlehttp/psr7": "^2.4.5", + "mtdowling/jmespath.php": "^2.8.0", + "php": ">=8.1", + "psr/http-message": "^1.0 || ^2.0", + "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "composer/composer": "^2.7.8", + "dms/phpunit-arraysubset-asserts": "^v0.5.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-sockets": "*", + "phpunit/phpunit": "^10.0", + "psr/cache": "^2.0 || ^3.0", + "psr/simple-cache": "^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", + "yoast/phpunit-polyfills": "^2.0" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-pcntl": "To use client-side monitoring", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Aws\\": "src/" + }, + "exclude-from-classmap": [ + "src/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "https://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "https://aws.amazon.com/sdk-for-php", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://github.com/aws/aws-sdk-php/discussions", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.383.1" + }, + "time": "2026-05-29T18:13:12+00:00" + }, + { + "name": "brick/math", + "version": "0.14.8", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629", + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629", + "shasum": "" + }, + "require": { + "php": "^8.2" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.14.8" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2026-02-10T14:33:43+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "shasum": "" + }, + "require": { + "php": "^8.2|^8.3|^8.4|^8.5" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2025-10-31T18:51:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-12-03T09:33:47+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:43:20+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.10.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "7c8d84b39e680315f687e8662a9d6fb0865c5148" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7c8d84b39e680315f687e8662a9d6fb0865c5148", + "reference": "7c8d84b39e680315f687e8662a9d6fb0865c5148", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "guzzlehttp/test-server": "^0.4", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2026-05-27T11:53:46+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "09e8a212562fb1fb6a512c4156ed71525969d6c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/09e8a212562fb1fb6a512c4156ed71525969d6c2", + "reference": "09e8a212562fb1fb6a512c4156ed71525969d6c2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2026-05-20T22:57:30+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.10.4", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "d2a1a094e396da8957e797489fddaf860c340cfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/d2a1a094e396da8957e797489fddaf860c340cfc", + "reference": "d2a1a094e396da8957e797489fddaf860c340cfc", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.10.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2026-05-29T12:59:07+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "eef7f87bab6f204eba3c39224d8075c70c637946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/eef7f87bab6f204eba3c39224d8075c70c637946", + "reference": "eef7f87bab6f204eba3c39224d8075c70c637946", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.6" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2026-05-23T22:00:21+00:00" + }, + { + "name": "laravel/ai", + "version": "v0.7.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/ai.git", + "reference": "9154118af9328132f5a17e41c70fdcd0a4f21eec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/ai/zipball/9154118af9328132f5a17e41c70fdcd0a4f21eec", + "reference": "9154118af9328132f5a17e41c70fdcd0a4f21eec", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "^3.339", + "illuminate/console": "^12.0|^13.0", + "illuminate/container": "^12.0|^13.0", + "illuminate/contracts": "^12.0|^13.0", + "illuminate/database": "^12.0|^13.0", + "illuminate/filesystem": "^12.0|^13.0", + "illuminate/json-schema": "^12.0|^13.0", + "illuminate/support": "^12.0|^13.0", + "laravel/prompts": "^0.3.6", + "laravel/serializable-closure": "^2.0", + "php": "^8.3" + }, + "require-dev": { + "laravel/pint": "^1.26", + "mockery/mockery": "^1.6.12", + "orchestra/testbench": "^10.6|^11.0", + "pestphp/pest": "^3.0|^4.0", + "pestphp/pest-plugin-laravel": "^3.0|^4.0", + "phpstan/phpstan": "^2.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Ai\\AiServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Laravel\\Ai\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The official AI SDK for Laravel.", + "homepage": "https://github.com/laravel/ai", + "keywords": [ + "ai", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/ai/issues", + "source": "https://github.com/laravel/ai" + }, + "time": "2026-05-28T19:11:59+00:00" + }, + { + "name": "laravel/framework", + "version": "v13.12.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "6ac27a7fcfa728250c9f77921cb8fb955546b591" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/6ac27a7fcfa728250c9f77921cb8fb955546b591", + "reference": "6ac27a7fcfa728250c9f77921cb8fb955546b591", + "shasum": "" + }, + "require": { + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^2.0.10", + "league/commonmark": "^2.8.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/error-handler": "^7.4.0 || ^8.0.0", + "symfony/finder": "^7.4.0 || ^8.0.0", + "symfony/http-foundation": "^7.4.0 || ^8.0.0", + "symfony/http-kernel": "^7.4.0 || ^8.0.0", + "symfony/mailer": "^7.4.0 || ^8.0.0", + "symfony/mime": "^7.4.0 || ^8.0.0", + "symfony/polyfill-php84": "^1.36", + "symfony/polyfill-php85": "^1.36", + "symfony/polyfill-php86": "^1.36", + "symfony/process": "^7.4.5 || ^8.0.5", + "symfony/routing": "^7.4.0 || ^8.0.0", + "symfony/uid": "^7.4.0 || ^8.0.0", + "symfony/var-dumper": "^7.4.0 || ^8.0.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1 || 2.0", + "psr/log-implementation": "1.0 || 2.0 || 3.0", + "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "guzzlehttp/psr7": "^2.9", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^11.0.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "rector/rector": "^2.3", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", + "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", + "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "13.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2026-05-26T23:39:26+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.18", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a19af51bb144bf87f08397921fa619f85c7d4e72", + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0|^8.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.18" + }, + "time": "2026-05-19T00:47:18+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v4.3.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "2a9bccc18e9907808e0018dd15fa643937886b1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/2a9bccc18e9907808e0018dd15fa643937886b1e", + "reference": "2a9bccc18e9907808e0018dd15fa643937886b1e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/contracts": "^11.0|^12.0|^13.0", + "illuminate/database": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.2", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.15|^10.8|^11.0", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2026-04-30T11:46:25+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.13", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2026-04-16T14:03:50+00:00" + }, + { + "name": "laravel/tinker", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "4faba77764bd33411735936acdf30446d058c78b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", + "reference": "4faba77764bd33411735936acdf30446d058c78b", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "psy/psysh": "^0.12.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5|^11.5" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v3.0.2" + }, + "time": "2026-03-17T14:54:13+00:00" + }, + { + "name": "league/commonmark", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.9-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2026-03-19T13:16:38+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.34.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e", + "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.34.0" + }, + "time": "2026-05-14T10:28:08+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + }, + "time": "2026-01-23T15:30:45+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-08T20:05:35+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-01-02T08:56:05+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.33" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "files": [ + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" + }, + "time": "2024-09-04T18:46:31+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.11.4", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", + "kylekatarnls/multi-tester": "^2.5.3", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbonphp.github.io/carbon/", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2026-04-07T09:57:54+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.5" + }, + "time": "2026-02-23T03:47:12+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.4", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.5", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.1.4" + }, + "time": "2026-05-11T20:49:54+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.4.4 || ^8.0.4" + }, + "require-dev": { + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "It's like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2026-02-16T23:10:27+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:41:33+00:00" + }, + { + "name": "predis/predis", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "99c253733dee9447d26257dc669d33d5ac84713d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/99c253733dee9447d26257dc669d33d5ac84713d", + "reference": "99c253733dee9447d26257dc669d33d5ac84713d", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0 || ~9.4.4" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net", + "role": "Creator & Maintainer" + }, + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis client for PHP.", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "support": { + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2022-06-08T13:14:56+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.23", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4dcc0f08047d52bbde475eda481146fd8e27e1a4", + "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" + }, + "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.23" + }, + "time": "2026-05-23T13:41:31+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "8429c78ca35a09f27565311b98101e2826affde0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.2" + }, + "time": "2025-12-14T04:43:48+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/674fa3b98e21531dd040e613479f5f6fa8f32111", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/console", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/85095d2573eaefaf35e40b9513a9bf09f72cd217", + "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-24T08:56:14+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b75663ed96cf4756e28e3105476f220f92886cc4", + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-18T13:18:21+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-13T15:52:40+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e4a2e29753c7801f7a8340e066cfa788f3bc8101", + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-18T13:18:21+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T13:30:16+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d721ea61b4a5fba8c5b6e7c1feda19efea144b50", + "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.4.11" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-11T16:38:44+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "e0be088d22278583a82da281886e8c3592fbf149" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", + "reference": "e0be088d22278583a82da281886e8c3592fbf149", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "bc354f47c62301e990b7874fa662326368508e2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/bc354f47c62301e990b7874fa662326368508e2c", + "reference": "bc354f47c62301e990b7874fa662326368508e2c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-24T11:20:33+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "9df847980c436451f4f51d1284491bb4356dd989" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9df847980c436451f4f51d1284491bb4356dd989", + "reference": "9df847980c436451f4f51d1284491bb4356dd989", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-27T08:31:43+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "5cefb712a25f320579615ba9e1942abaeade7dff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/5cefb712a25f320579615ba9e1942abaeade7dff", + "reference": "5cefb712a25f320579615ba9e1942abaeade7dff", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.4.12" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-20T07:20:23+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "a845722765c4f6b2ce88beaf4f4479975b186770" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/a845722765c4f6b2ce88beaf4f4479975b186770", + "reference": "a845722765c4f6b2ce88beaf4f4479975b186770", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T16:22:37+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T05:58:03+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "dc21118016c039a66235cf93d96b435ffb282412" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412", + "reference": "dc21118016c039a66235cf93d96b435ffb282412", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T15:22:23+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.38.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:48:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/14c5439eec4ccff081ac14eca2dc57feb2a66d92", + "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "8339098cae28673c15cce00d80734af0453054e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/8339098cae28673c15cce00d80734af0453054e2", + "reference": "8339098cae28673c15cce00d80734af0453054e2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T02:25:22+00:00" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.38.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", + "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php86\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php86/tree/v1.38.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T11:52:35+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/process", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "f5804be144caceb570f6747519999636b664f24c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/f5804be144caceb570f6747519999636b664f24c", + "reference": "f5804be144caceb570f6747519999636b664f24c", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T16:05:06+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/3a162171bb008e5e0f15dce6581373a4c0e8390d", + "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-24T11:20:33+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-28T09:44:51+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", + "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T15:23:29+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.4.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/ada7578c30dd5feaa8259cff3e885069ea81ddde", + "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5.3|^3.3" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.4.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-06T11:19:24+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T13:30:16+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "2676b524340abcfe4d6151ec698463cebafee439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/2676b524340abcfe4d6151ec698463cebafee439", + "reference": "2676b524340abcfe4d6151ec698463cebafee439", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-30T15:19:22+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-30T13:44:50+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.4", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:49:13+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2026-04-26T05:33:54+00:00" + } + ], + "packages-dev": [ + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/boost", + "version": "v2.4.8", + "source": { + "type": "git", + "url": "https://github.com/laravel/boost.git", + "reference": "d11d720cf9537f8d236a11d973e99563a598ec9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/boost/zipball/d11d720cf9537f8d236a11d973e99563a598ec9c", + "reference": "d11d720cf9537f8d236a11d973e99563a598ec9c", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^7.9", + "illuminate/console": "^11.45.3|^12.41.1|^13.0", + "illuminate/contracts": "^11.45.3|^12.41.1|^13.0", + "illuminate/routing": "^11.45.3|^12.41.1|^13.0", + "illuminate/support": "^11.45.3|^12.41.1|^13.0", + "laravel/mcp": "^0.5.1|^0.6.0|~0.7.0,<0.7.1", + "laravel/prompts": "^0.3.10", + "laravel/roster": "^0.5.0", + "php": "^8.2" + }, + "require-dev": { + "laravel/pint": "^1.27.0", + "mockery/mockery": "^1.6.12", + "orchestra/testbench": "^9.15.0|^10.6|^11.0", + "pestphp/pest": "^2.36.0|^3.8.4|^4.1.5", + "phpstan/phpstan": "^2.1.27", + "rector/rector": "^2.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Boost\\BoostServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Boost\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Laravel Boost accelerates AI-assisted development by providing the essential context and structure that AI needs to generate high-quality, Laravel-specific code.", + "homepage": "https://github.com/laravel/boost", + "keywords": [ + "ai", + "dev", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/boost/issues", + "source": "https://github.com/laravel/boost" + }, + "time": "2026-05-19T20:09:50+00:00" + }, + { + "name": "laravel/mcp", + "version": "v0.7.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/mcp.git", + "reference": "3513b4feca5f1678be4d2261dcfa8e456436d02a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/mcp/zipball/3513b4feca5f1678be4d2261dcfa8e456436d02a", + "reference": "3513b4feca5f1678be4d2261dcfa8e456436d02a", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/console": "^11.45.3|^12.41.1|^13.0", + "illuminate/container": "^11.45.3|^12.41.1|^13.0", + "illuminate/contracts": "^11.45.3|^12.41.1|^13.0", + "illuminate/http": "^11.45.3|^12.41.1|^13.0", + "illuminate/json-schema": "^12.41.1|^13.0", + "illuminate/routing": "^11.45.3|^12.41.1|^13.0", + "illuminate/support": "^11.45.3|^12.41.1|^13.0", + "illuminate/validation": "^11.45.3|^12.41.1|^13.0", + "php": "^8.2" + }, + "require-dev": { + "laravel/pint": "^1.20", + "orchestra/testbench": "^9.15|^10.8|^11.0", + "pestphp/pest": "^3.8.5|^4.3.2", + "phpstan/phpstan": "^2.1.27", + "rector/rector": "^2.2.4" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Mcp": "Laravel\\Mcp\\Server\\Facades\\Mcp" + }, + "providers": [ + "Laravel\\Mcp\\Server\\McpServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Mcp\\": "src/", + "Laravel\\Mcp\\Server\\": "src/Server/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Rapidly build MCP servers for your Laravel applications.", + "homepage": "https://github.com/laravel/mcp", + "keywords": [ + "laravel", + "mcp" + ], + "support": { + "issues": "https://github.com/laravel/mcp/issues", + "source": "https://github.com/laravel/mcp" + }, + "time": "2026-04-21T10:23:03+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-05-20T22:24:57+00:00" + }, + { + "name": "laravel/roster", + "version": "v0.5.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/roster.git", + "reference": "5089de7615f72f78e831590ff9d0435fed0102bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/roster/zipball/5089de7615f72f78e831590ff9d0435fed0102bb", + "reference": "5089de7615f72f78e831590ff9d0435fed0102bb", + "shasum": "" + }, + "require": { + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/contracts": "^11.0|^12.0|^13.0", + "illuminate/routing": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.2", + "symfony/yaml": "^7.2|^8.0" + }, + "require-dev": { + "laravel/pint": "^1.14", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.0|^10.0|^11.0", + "pestphp/pest": "^3.0|^4.1", + "phpstan/phpstan": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Roster\\RosterServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Roster\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Detect packages & approaches in use within a Laravel project", + "homepage": "https://github.com/laravel/roster", + "keywords": [ + "dev", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/roster/issues", + "source": "https://github.com/laravel/roster" + }, + "time": "2026-03-05T07:58:43+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.61.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "68ef35015630fe510432e63e11e21749006df688" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/68ef35015630fe510432e63e11e21749006df688", + "reference": "68ef35015630fe510432e63e11e21749006df688", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0|^8.0", + "symfony/yaml": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0", + "phpstan/phpstan": "^2.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2026-05-23T23:33:57+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.4", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.8 || ^8.0.8" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.9.6", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1", + "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2026-04-21T14:04:20+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "12.5.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "876099a072646c7745f673d7aeab5382c4439691" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/876099a072646c7745f673d7aeab5382c4439691", + "reference": "876099a072646c7745f673d7aeab5382c4439691", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.0.3", + "sebastian/lines-of-code": "^4.0", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^2.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2026-04-15T08:23:17+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" + } + ], + "time": "2026-02-02T14:04:18+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^12.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:58+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:16+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "8.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:38+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "12.5.28", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "5895d05f5bf421ed230fbd76e1277e4b8955def4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5895d05f5bf421ed230fbd76e1277e4b8955def4", + "reference": "5895d05f5bf421ed230fbd76e1277e4b8955def4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.6", + "phpunit/php-file-iterator": "^6.0.1", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.1", + "sebastian/comparator": "^7.1.8", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.1.2", + "sebastian/exporter": "^7.0.3", + "sebastian/global-state": "^8.0.2", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", + "sebastian/type": "^6.0.4", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.28" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsoring.html", + "type": "other" + } + ], + "time": "2026-05-27T14:01:10+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "4.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" + } + ], + "time": "2026-05-17T05:29:34+00:00" + }, + { + "name": "sebastian/comparator", + "version": "7.1.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "7c65c1e79836812819705b473a90c12399542485" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485", + "reference": "7c65c1e79836812819705b473a90c12399542485", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-05-21T04:45:25+00:00" + }, + { + "name": "sebastian/complexity", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:46+00:00" + }, + { + "name": "sebastian/environment", + "version": "8.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.26" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:40:20+00:00" + }, + { + "name": "sebastian/exporter", + "version": "7.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/recursion-context": "^7.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2026-05-20T04:37:17+00:00" + }, + { + "name": "sebastian/global-state", + "version": "8.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "ef1377171613d09edd25b7816f05be8313f9115d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", + "reference": "ef1377171613d09edd25b7816f05be8313f9115d", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" + } + ], + "time": "2025-08-29T11:29:25+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.7.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", + "type": "tidelift" + } + ], + "time": "2026-05-19T16:22:07+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:57:48+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:17+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:44:59+00:00" + }, + { + "name": "sebastian/type", + "version": "6.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "82ff822c2edc46724be9f7411d3163021f602773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773", + "reference": "82ff822c2edc46724be9f7411d3163021f602773", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2026-05-20T06:45:45+00:00" + }, + { + "name": "sebastian/version", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T05:00:38+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "a7ec3b1156faf8815db7683ec7c1e7338e6f977c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a7ec3b1156faf8815db7683ec7c1e7338e6f977c", + "reference": "a7ec3b1156faf8815db7683ec7c1e7338e6f977c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T06:06:12+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^8.1" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-12-08T11:19:18+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.3", + "ext-bcmath": "*", + "ext-curl": "*", + "ext-pdo": "*", + "ext-redis": "*" + }, + "platform-dev": {}, + "plugin-api-version": "2.9.0" +} diff --git a/config/ai.php b/config/ai.php new file mode 100644 index 0000000..90b535d --- /dev/null +++ b/config/ai.php @@ -0,0 +1,143 @@ + 'openai', + 'default_for_images' => 'gemini', + 'default_for_audio' => 'openai', + 'default_for_transcription' => 'openai', + 'default_for_embeddings' => 'openai', + 'default_for_reranking' => 'cohere', + + /* + |-------------------------------------------------------------------------- + | Caching + |-------------------------------------------------------------------------- + | + | Below you may configure caching strategies for AI related operations + | such as embedding generation. You are free to adjust these values + | based on your application's available caching stores and needs. + | + */ + + 'caching' => [ + 'embeddings' => [ + 'cache' => false, + 'store' => env('CACHE_STORE', 'redis'), + ], + ], + + /* + |-------------------------------------------------------------------------- + | AI Providers + |-------------------------------------------------------------------------- + | + | Below are each of your AI providers defined for this application. Each + | represents an AI provider and API key combination which can be used + | to perform tasks like text, image, and audio creation via agents. + | + */ + + 'providers' => [ + 'anthropic' => [ + 'driver' => 'anthropic', + 'key' => env('ANTHROPIC_API_KEY'), + 'url' => env('ANTHROPIC_URL', 'https://api.anthropic.com/v1'), + ], + + 'azure' => [ + 'driver' => 'azure', + 'key' => env('AZURE_OPENAI_API_KEY'), + 'url' => env('AZURE_OPENAI_URL'), + 'api_version' => env('AZURE_OPENAI_API_VERSION', '2025-04-01-preview'), + 'deployment' => env('AZURE_OPENAI_DEPLOYMENT', 'gpt-4o'), + 'embedding_deployment' => env('AZURE_OPENAI_EMBEDDING_DEPLOYMENT', 'text-embedding-3-small'), + 'image_deployment' => env('AZURE_OPENAI_IMAGE_DEPLOYMENT', 'gpt-image-1'), + ], + + 'bedrock' => [ + 'driver' => 'bedrock', + 'region' => env('AWS_BEDROCK_REGION', 'us-east-1'), + 'key' => env('AWS_BEARER_TOKEN_BEDROCK'), + 'access_key_id' => env('AWS_ACCESS_KEY_ID'), + 'secret_access_key' => env('AWS_SECRET_ACCESS_KEY'), + 'session_token' => env('AWS_SESSION_TOKEN'), + 'use_default_credential_provider' => env('AWS_USE_DEFAULT_CREDENTIALS', true), + ], + + 'cohere' => [ + 'driver' => 'cohere', + 'key' => env('COHERE_API_KEY'), + ], + + 'deepseek' => [ + 'driver' => 'deepseek', + 'key' => env('DEEPSEEK_API_KEY'), + ], + + 'eleven' => [ + 'driver' => 'eleven', + 'key' => env('ELEVENLABS_API_KEY'), + ], + + 'gemini' => [ + 'driver' => 'gemini', + 'key' => env('GEMINI_API_KEY'), + 'url' => env('GEMINI_URL', 'https://generativelanguage.googleapis.com/v1beta/'), + ], + + 'groq' => [ + 'driver' => 'groq', + 'key' => env('GROQ_API_KEY'), + ], + + 'jina' => [ + 'driver' => 'jina', + 'key' => env('JINA_API_KEY'), + ], + + 'mistral' => [ + 'driver' => 'mistral', + 'key' => env('MISTRAL_API_KEY'), + ], + + 'ollama' => [ + 'driver' => 'ollama', + 'key' => env('OLLAMA_API_KEY', ''), + 'url' => env('OLLAMA_URL', 'http://localhost:11434'), + ], + + 'openai' => [ + 'driver' => 'openai', + 'key' => env('OPENAI_API_KEY'), + 'url' => env('OPENAI_URL', 'https://api.openai.com/v1'), + ], + + 'openrouter' => [ + 'driver' => 'openrouter', + 'key' => env('OPENROUTER_API_KEY'), + ], + + 'voyageai' => [ + 'driver' => 'voyageai', + 'key' => env('VOYAGEAI_API_KEY'), + ], + + 'xai' => [ + 'driver' => 'xai', + 'key' => env('XAI_API_KEY'), + ], + ], + +]; diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..f467267 --- /dev/null +++ b/config/app.php @@ -0,0 +1,126 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => env('APP_TIMEZONE', 'UTC'), + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..e685d21 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,126 @@ + [ + 'guard' => 'sys_users', + 'passwords' => 'sys_users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'sys_users' => [ + 'driver' => 'session', + 'provider' => 'sys_users', + ], + 'users' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'sys_users' => [ + 'driver' => 'eloquent', + 'model' => \Modules\SystemUser\Models\SysUserModel::class + ], + 'users' => [ + 'driver' => 'eloquent', + 'model' => \App\Models\UserModel::class + ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'sys_users' => [ + 'driver' => 'cache', + 'provider' => 'sys_users', + 'store' => 'sys_passwords', + 'expire' => 60, + 'throttle' => 60, + ], + 'users' => [ + 'driver' => 'cache', + 'provider' => 'users', + 'store' => 'passwords', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..f3a033f --- /dev/null +++ b/config/cache.php @@ -0,0 +1,108 @@ + env('CACHE_STORE', 'redis'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'sys_cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE', 'sys_cache_locks'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..3944395 --- /dev/null +++ b/config/database.php @@ -0,0 +1,173 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'sys_migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..0c365e1 --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,89 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + 'local' => [ + 'driver' => 'local', + 'root' => public_path('storage'), + 'url' => env('FILESYSTEM_LOCAL_URL', env('APP_URL').'/storage'), + 'visibility' => 'public', + 'throw' => false, + ], + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + 'ftp' => [ + 'driver' => 'ftp', + 'host' => env('FTP_HOST'), + 'username' => env('FTP_USERNAME'), + 'password' => env('FTP_PASSWORD'), + 'port' => env('FTP_PORT', 21), + 'root' => env('FTP_ROOT', ''), + 'passive' => env('FTP_PASSIVE', true), + 'ssl' => env('FTP_SSL', false), + 'timeout' => env('FTP_TIMEOUT', 30), + 'throw' => false, + ], + 'sftp' => [ + 'driver' => 'sftp', + 'host' => env('SFTP_HOST'), + 'username' => env('SFTP_USERNAME'), + 'password' => env('SFTP_PASSWORD'), + 'port' => env('SFTP_PORT', 22), + 'root' => env('SFTP_ROOT', ''), + 'timeout' => env('SFTP_TIMEOUT', 30), + 'privateKey' => env('SFTP_PRIVATE_KEY'), + 'passphrase' => env('SFTP_PASSPHRASE'), + 'throw' => false, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..c5a4f81 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,138 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + 'log' => [ + 'driver' => 'single', + 'path' => storage_path('logs/log.log'), + 'level' => 'debug', + ], + + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..3fd233e --- /dev/null +++ b/config/mail.php @@ -0,0 +1,116 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + 'mailgun' => [ + 'transport' => 'mailgun', + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'smtp' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL', 'stack'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => explode(",", env('MAIL_FAILOVER_MAILERS', 'smtp,log')), + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => explode(",", env('MAIL_ROUNDROBIN_MAILERS', 'ses,postmark')), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + +]; diff --git a/config/models.php b/config/models.php new file mode 100644 index 0000000..7d305f7 --- /dev/null +++ b/config/models.php @@ -0,0 +1,537 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Model Files Location + |-------------------------------------------------------------------------- + | + | We need a location to store your new generated files. All files will be + | placed within this directory. When you turn on base files, they will + | be placed within a Base directory inside this location. + | + */ + + 'path' => app_path('Models'), + + /* + |-------------------------------------------------------------------------- + | Model Namespace + |-------------------------------------------------------------------------- + | + | Every generated model will belong to this namespace. It is suggested + | that this namespace should follow PSR-4 convention and be very + | similar to the path of your models defined above. + | + */ + + 'namespace' => 'App\Models', + + /* + |-------------------------------------------------------------------------- + | Parent Class + |-------------------------------------------------------------------------- + | + | All Eloquent models should inherit from Eloquent Model class. However, + | you can define a custom Eloquent model that suits your needs. + | As an example one custom model has been added for you which + | will allow you to create custom database castings. + | + */ + + 'parent' => Illuminate\Database\Eloquent\Model::class, + + /* + |-------------------------------------------------------------------------- + | Traits + |-------------------------------------------------------------------------- + | + | Sometimes you may want to append certain traits to all your models. + | If that is what you need, you may list them bellow. + | As an example we have a BitBooleans trait which will treat MySQL bit + | data type as booleans. You might probably not need it, but it is + | an example of how you can customize your models. + | + */ + + 'use' => [ + // Reliese\Database\Eloquent\BitBooleans::class, + // Reliese\Database\Eloquent\BlamableBehavior::class, + ], + + /* + |-------------------------------------------------------------------------- + | Model Connection + |-------------------------------------------------------------------------- + | + | If you wish your models had appended the connection from which they + | were generated, you should set this value to true and your + | models will have the connection property filled. + | + */ + + 'connection' => false, + + /* + |-------------------------------------------------------------------------- + | Timestamps + |-------------------------------------------------------------------------- + | + | If your tables have CREATED_AT and UPDATED_AT timestamps you may + | enable them and your models will fill their values as needed. + | You can also specify which fields should be treated as timestamps + | in case you don't follow the naming convention Eloquent uses. + | If your table doesn't have these fields, timestamps will be + | disabled for your model. + | + */ + + 'timestamps' => true, + + // 'timestamps' => [ + // 'enabled' => true, + // 'fields' => [ + // 'CREATED_AT' => 'created_at', + // 'UPDATED_AT' => 'updated_at', + // ] + // ], + + /* + |-------------------------------------------------------------------------- + | Soft Deletes + |-------------------------------------------------------------------------- + | + | If your tables support soft deletes with a DELETED_AT attribute, + | you can enable them here. You can also specify which field + | should be treated as a soft delete attribute in case you + | don't follow the naming convention Eloquent uses. + | If your table doesn't have this field, soft deletes will be + | disabled for your model. + | + */ + + 'soft_deletes' => true, + + // 'soft_deletes' => [ + // 'enabled' => true, + // 'field' => 'deleted_at', + // ], + + /* + |-------------------------------------------------------------------------- + | Date Format + |-------------------------------------------------------------------------- + | + | Here you may define your models' date format. The following format + | is the default format Eloquent uses. You won't see it in your + | models unless you change it to a more convenient value. + | + */ + + 'date_format' => 'Y-m-d H:i:s', + + /* + |-------------------------------------------------------------------------- + | Pagination + |-------------------------------------------------------------------------- + | + | Here you may define how many models Eloquent should display when + | paginating them. The default number is 15, so you might not + | see this number in your models unless you change it. + | + */ + + 'per_page' => 15, + + /* + |-------------------------------------------------------------------------- + | Base Files + |-------------------------------------------------------------------------- + | + | By default, your models will be generated in your models path, but + | when you generate them again they will be replaced by new ones. + | You may want to customize your models and, at the same time, be + | able to generate them as your tables change. For that, you + | can enable base files. These files will be replaced whenever + | you generate them, but your customized files will not be touched. + | + */ + + 'base_files' => false, + + /* + |-------------------------------------------------------------------------- + | Snake Attributes + |-------------------------------------------------------------------------- + | + | Eloquent treats your model attributes as snake cased attributes, but + | if you have camel-cased fields in your database you can disable + | that behaviour and use camel case attributes in your models. + | + */ + + 'snake_attributes' => true, + + /* + |-------------------------------------------------------------------------- + | Indent options + |-------------------------------------------------------------------------- + | + | As default indention is done with tabs, but you can change it by setting + | this to the amount of spaces you that you want to use for indentation. + | Usually you will use 4 spaces instead of tabs. + | + */ + + 'indent_with_space' => 0, + + /* + |-------------------------------------------------------------------------- + | Qualified Table Names + |-------------------------------------------------------------------------- + | + | If some of your tables have cross-database relationships (probably in + | MySQL), you can make sure your models take into account their + | respective database schema. + | + | Can Either be NULL, FALSE or TRUE + | TRUE: Schema name will be prepended on the table + | FALSE:Table name will be set without schema name. + | NULL: Table name will follow laravel pattern, + | i.e. if class name(plural) matches table name, then table name will not be added + */ + + 'qualified_tables' => false, + + /* + |-------------------------------------------------------------------------- + | Hidden Attributes + |-------------------------------------------------------------------------- + | + | When casting your models into arrays or json, the need to hide some + | attributes sometimes arise. If your tables have some fields you + | want to hide, you can define them bellow. + | Some fields were defined for you. + | + */ + + 'hidden' => [ + '*secret*', '*password', '*token', + ], + + /* + |-------------------------------------------------------------------------- + | Mass Assignment Guarded Attributes + |-------------------------------------------------------------------------- + | + | You may want to protect some fields from mass assignment. You can + | define them bellow. Some fields were defined for you. + | Your fillable attributes will be those which are not in the list + | excluding your models' primary keys. + | + */ + + 'guarded' => [ + // 'created_by', 'updated_by' + ], + + /* + |-------------------------------------------------------------------------- + | Casts + |-------------------------------------------------------------------------- + | + | You may want to specify which of your table fields should be cast as + | something other than a string. For instance, you may want a + | text field be cast as an array or and object. + | + | You may define column patterns which will be cast using the value + | assigned. We have defined some fields for you. Feel free to + | modify them to fit your needs. + | + */ + + 'casts' => [ + '*_json' => 'json', + ], + + /* + |-------------------------------------------------------------------------- + | Excluded Tables + |-------------------------------------------------------------------------- + | + | When performing the generation of models you may want to skip some of + | them, because you don't want a model for them or any other reason. + | You can define those tables bellow. The migrations table was + | filled for you, since you may not want a model for it. + | + */ + + 'except' => [ + 'sys_cache', + 'sys_cache_locks', + 'sys_token', + 'migrations', + 'sys_failed_jobs', + 'password_resets', + 'personal_access_tokens', + 'password_reset_tokens', + ], + + /* + |-------------------------------------------------------------------------- + | Specified Tables + |-------------------------------------------------------------------------- + | + | You can specify specific tables. This will generate the models only + | for selected tables, ignoring the rest. + | + */ + + 'only' => [ + // 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Table Prefix + |-------------------------------------------------------------------------- + | + | If you have a prefix on your table names but don't want it in the model + | and relation names, specify it here. + | + */ + + 'table_prefix' => '', + + /* + |-------------------------------------------------------------------------- + | Lower table name before doing studly + |-------------------------------------------------------------------------- + | + | If tables names are capitalised using studly produces incorrect name + | this can help fix it ie TABLE_NAME now becomes TableName + | + */ + + 'lower_table_name_first' => false, + + /* + |-------------------------------------------------------------------------- + | Model Names + |-------------------------------------------------------------------------- + | + | By default the generator will create models with names that match your tables. + | However, if you wish to manually override the naming, you can specify a mapping + | here between table and model names. + | + | Example: + | A table called 'billing_invoices' will generate a model called `BillingInvoice`, + | but you'd prefer it to generate a model called 'Invoice'. Therefore, you'd add + | the following array key and value: + | 'billing_invoices' => 'Invoice', + */ + + 'model_names' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Relation Name Strategy + |-------------------------------------------------------------------------- + | + | How the relations should be named in your models. + | + | 'related' Use the related table as the relation name. + | (post.author --> user.id) + generates Post::user() and User::posts() + | + | 'foreign_key' Use the foreign key as the relation name. + | This can help to provide more meaningful relationship names, and avoids naming conflicts + | if you have more than one relationship between two tables. + | (post.author_id --> user.id) + | generates Post::author() and User::posts_where_author() + | (post.editor_id --> user.id) + | generates Post::editor() and User::posts_where_editor() + | ID suffixes can be omitted from foreign keys. + | (post.author --> user.id) + | (post.editor --> user.id) + | generates the same as above. + | Where the foreign key matches the related table name, it behaves as per the 'related' strategy. + | (post.user_id --> user.id) + | generates Post::user() and User::posts() + */ + + 'relation_name_strategy' => 'related', + // 'relation_name_strategy' => 'foreign_key', + + /* + |-------------------------------------------------------------------------- + | Determines need or not to generate constants with properties names like + | + | ... + | const AGE = 'age'; + | const USER_NAME = 'user_name'; + | ... + | + | that later can be used in QueryBuilder like + | + | ... + | $builder->select([User::USER_NAME])->where(User::AGE, '<=', 18); + | ... + | + | that helps to avoid typos in strings when typing field names and allows to use + | code competition with available model's field names. + */ + 'with_property_constants' => false, + + /* + |-------------------------------------------------------------------------- + | Optionally includes a full list of columns in the base generated models, + | which can be used to avoid making calls like + | + | ... + | \Illuminate\Support\Facades\Schema::getColumnListing + | ... + | + | which can be slow, especially for large tables. + */ + 'with_column_list' => false, + + /* + |-------------------------------------------------------------------------- + | Disable Pluralization Name + |-------------------------------------------------------------------------- + | + | You can disable pluralization tables and relations + | + */ + 'pluralize' => true, + + /* + |-------------------------------------------------------------------------- + | Disable Pluralization Except For Certain Tables + |-------------------------------------------------------------------------- + | + | You can enable pluralization for certain tables + | + */ + 'override_pluralize_for' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Move $hidden property to base files + |-------------------------------------------------------------------------- + | When base_files is true you can set hidden_in_base_files to true + | if you want the $hidden to be generated in base files + | + */ + 'hidden_in_base_files' => false, + + /* + |-------------------------------------------------------------------------- + | Move $fillable property to base files + |-------------------------------------------------------------------------- + | When base_files is true you can set fillable_in_base_files to true + | if you want the $fillable to be generated in base files + | + */ + 'fillable_in_base_files' => false, + + /* + |-------------------------------------------------------------------------- + | Generate return types for relation methods. + |-------------------------------------------------------------------------- + | When enable_return_types is set to true, return type declarations are added + | to all generated relation methods for your models. + | + | NOTE: This requires PHP 7.0 or later. + | + */ + 'enable_return_types' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Database Specifics + |-------------------------------------------------------------------------- + | + | In this section you may define the default configuration for each model + | that will be generated from a specific database. You can also nest + | table specific configurations. + | These values will override those defined in the section above. + | + */ + + // 'shop' => [ + // 'path' => app_path(), + // 'namespace' => 'App', + // 'snake_attributes' => false, + // 'qualified_tables' => true, + // 'use' => [ + // Reliese\Database\Eloquent\BitBooleans::class, + // ], + // 'except' => ['migrations'], + // 'only' => ['users'], + // // Table Specifics Bellow: + // 'user' => [ + // // Don't use any default trait + // 'use' => [], + // ] + // ], + + /* + |-------------------------------------------------------------------------- + | Connection Specifics + |-------------------------------------------------------------------------- + | + | In this section you may define the default configuration for each model + | that will be generated from a specific connection. You can also nest + | database and table specific configurations. + | + | You may wish to use connection specific config for setting a parent + | model with a read only setup, or enforcing a different set of rules + | for a connection, e.g. using snake_case naming over CamelCase naming. + | + | This supports nesting with the following key configuration values, in + | reverse precedence order (i.e. the last one found becomes the value). + | + | connections.{connection_name}.property + | connections.{connection_name}.{database_name}.property + | connections.{connection_name}.{table_name}.property + | connections.{connection_name}.{database_name}.{table_name}.property + | + | These values will override those defined in the section above. + | + */ + +// 'connections' => [ +// 'read_only_external' => [ +// 'parent' => \App\Models\ReadOnlyModel::class, +// 'connection' => true, +// 'users' => [ +// 'connection' => false, +// ], +// 'my_other_database' => [ +// 'password_resets' => [ +// 'connection' => false, +// ] +// ] +// ], +// ], +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..0df24c8 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,112 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'sys_jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'sys_job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'sys_failed_jobs', + ], + +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100644 index 0000000..764a82f --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,83 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. This will override any values set in the token's + | "expires_at" attribute, but first-party sessions are not affected. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Token Prefix + |-------------------------------------------------------------------------- + | + | Sanctum can prefix new tokens in order to take advantage of numerous + | security scanning initiatives maintained by open source platforms + | that notify developers if they commit tokens into repositories. + | + | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning + | + */ + + 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class, + 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class, + 'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..4ffd6cc --- /dev/null +++ b/config/services.php @@ -0,0 +1,45 @@ + [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'token' => env('AWS_SESSION_TOKEN'), + ], + + 'resend' => [ + 'key' => env('RESEND_KEY'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + + 'mailgun' => [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..b209e78 --- /dev/null +++ b/config/session.php @@ -0,0 +1,217 @@ + env('SESSION_DRIVER', 'redis'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain and all subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + +]; diff --git a/database/database.sqlite b/database/database.sqlite new file mode 100644 index 0000000..e69de29 diff --git a/database/migrations/2025_01_01_000001_create_sys_user_table.php b/database/migrations/2025_01_01_000001_create_sys_user_table.php new file mode 100644 index 0000000..361e6eb --- /dev/null +++ b/database/migrations/2025_01_01_000001_create_sys_user_table.php @@ -0,0 +1,159 @@ +increments('id')->comment('系统用户ID'); + $table->string('username', 20)->unique()->comment('用户名'); + $table->string('password', 100)->comment('密码'); + $table->string('nickname', 20)->default('')->comment('昵称'); + $table->integer('avatar_id')->nullable()->comment('头像'); + $table->integer('sex')->default(0)->comment('性别(男、女)'); + $table->string('bio', 255)->default('')->nullable()->comment('个人简介'); + $table->string('mobile', 20)->default('')->comment('手机号'); + $table->string('email', 50)->unique()->comment('邮箱'); + $table->timestamp('email_verified_at')->nullable(); + $table->integer('dept_id')->default(0)->comment('部门ID'); + $table->string('login_ip', 60)->default('')->comment('最后登录IP'); + $table->timestamp('login_time')->nullable()->comment('最后登录时间'); + $table->integer('status')->default(1)->comment('状态(1正常 0停用)'); + $table->rememberToken(); + $table->timestamps(); + $table->softDeletes(); + $table->comment('系统用户表'); + }); + } + + // 系统用户角色表 + if (! Schema::hasTable('sys_role')) { + Schema::create('sys_role', function (Blueprint $table) { + $table->increments('id')->comment('角色ID'); + $table->string('name', 20)->default('')->comment('角色名称'); + $table->integer('sort')->default(0)->comment('排序'); + $table->string('description', 100)->default('')->comment('角色描述'); + $table->integer('status')->default(1)->comment('状态(1正常 0停用)'); + $table->timestamps(); + $table->comment('系统用户角色表'); + }); + } + + // 系统用户角色中间表 + if (! Schema::hasTable('sys_user_role')) { + Schema::create('sys_user_role', function (Blueprint $table) { + $table->integer('user_id')->comment('用户ID'); + $table->integer('role_id')->comment('角色ID'); + $table->unique(['user_id', 'role_id'], 'user_role_unique'); + $table->comment('系统用户角色关联表'); + }); + } + + // 系统用户部门表 + if (! Schema::hasTable('sys_dept')) { + Schema::create('sys_dept', function (Blueprint $table) { + $table->increments('id')->comment('部门ID'); + $table->integer('parent_id')->default(0)->comment('父级ID'); + $table->string('name', 100)->default('')->comment('部门名称'); + $table->string('code', 100)->unique()->default('')->comment('部门编码'); + $table->tinyInteger('type')->default(0)->comment('部门类型 0:公司 1:部门 2:岗位'); + $table->integer('sort')->default(0)->comment('排序'); + $table->string('phone', '20')->default('')->nullable()->comment('部门电话'); + $table->string('email', '50')->default('')->nullable()->comment('部门邮箱'); + $table->string('address', '255')->default('')->nullable()->comment('部门地址'); + $table->string('remark', '255')->default('')->nullable()->comment('备注'); + $table->integer('status')->default(0)->comment('部门状态(0正常 1停用)'); + $table->timestamps(); + $table->softDeletes(); + $table->comment('系统用户部门表'); + }); + } + + // 系统用户权限表 + if (! Schema::hasTable('sys_rule')) { + Schema::create('sys_rule', function (Blueprint $table) { + $table->increments('id')->comment('权限ID'); + $table->integer('parent_id')->default(0)->comment('父级ID'); + $table->string('type', 20)->comment("类型:'menu' | 'route' | 'rule'"); + $table->string('key', 100)->unique()->comment('唯一标识'); + $table->string('name', 100)->comment('名称'); + $table->string('path', 100)->nullable()->comment('路径'); + $table->string('icon', 100)->nullable()->comment('图标'); + $table->integer('order')->default(0)->comment('排序'); + $table->string('local', 100)->nullable()->comment('语言包'); + $table->integer('status')->default(1)->comment('状态:1、正常,0、禁用'); + $table->integer('hidden')->default(1)->comment('显示:1、显示,0、隐藏'); + $table->integer('link')->default(0)->comment('是否外链:1、是,0、否'); + $table->timestamps(); + $table->comment('系统用户权限表'); + }); + } + + // 角色权限关联表 + if (! Schema::hasTable('sys_role_rule')) { + Schema::create('sys_role_rule', function (Blueprint $table) { + $table->integer('role_id')->comment('角色ID'); + $table->integer('rule_id')->comment('权限ID'); + $table->primary(['role_id', 'rule_id'], 'role_rule_primary'); + $table->comment('角色权限关联表'); + }); + } + + // 登录日志表 + if (! Schema::hasTable('sys_login_record')) { + Schema::create('sys_login_record', function (Blueprint $table) { + $table->increments('id')->comment('记录ID'); + $table->string('username', 20)->default('')->comment('用户名'); + $table->integer('user_id')->comment('用户ID'); + $table->string('ipaddr', 60)->default('')->comment('登录IP'); + $table->string('login_location', 255)->default('')->comment('登录地点'); + $table->string('browser', 255)->default('')->comment('浏览器'); + $table->string('os', 255)->default('')->comment('操作系统'); + $table->string('status', 1)->default('0')->comment('登录状态(0成功 1失败)'); + $table->string('msg', 255)->default('')->comment('提示消息'); + $table->timestamp('login_time')->comment('登录时间'); + $table->comment('系统用户登录日志表'); + }); + } + + // token 表 + if (! Schema::hasTable('sys_access_token')) { + Schema::create('sys_access_token', function (Blueprint $table) { + $table->id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + $table->comment('token table'); + }); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sys_user'); + Schema::dropIfExists('sys_rule'); + Schema::dropIfExists('sys_dept'); + Schema::dropIfExists('sys_role'); + Schema::dropIfExists('sys_user_role'); + Schema::dropIfExists('sys_role_rule'); + Schema::dropIfExists('sys_login_record'); + Schema::dropIfExists('sys_access_token'); + } +}; diff --git a/database/migrations/2025_01_01_000003_create_dict_table.php b/database/migrations/2025_01_01_000003_create_dict_table.php new file mode 100644 index 0000000..1810c29 --- /dev/null +++ b/database/migrations/2025_01_01_000003_create_dict_table.php @@ -0,0 +1,51 @@ +increments('id'); + $table->string('name', 100)->comment('字典名称'); + $table->string('code', 100)->unique()->comment('字典编码'); + $table->string('describe', 500)->nullable()->comment('字典描述'); + $table->unsignedTinyInteger('status')->default(0)->comment('状态:0正常 1停用'); + $table->unsignedInteger('sort')->default(0)->comment('排序'); + $table->timestamps(); + $table->comment('字典类型表'); + }); + } + if (! Schema::hasTable('sys_dict_item')) { + Schema::create('sys_dict_item', function (Blueprint $table) { + $table->increments('id'); + $table->unsignedBigInteger('dict_id')->comment('字典ID'); + $table->string('label', 100)->comment('字典标签'); + $table->string('value', 100)->comment('字典键值'); + $table->string('color', 50)->default('default')->comment('颜色'); + $table->unsignedTinyInteger('status')->default(0)->comment('状态:0正常 1停用'); + $table->unsignedInteger('sort')->default(0)->comment('排序'); + $table->timestamps(); + $table->index('dict_id'); + $table->comment('字典数据表'); + }); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sys_dict'); + Schema::dropIfExists('sys_dict_item'); + } +}; diff --git a/database/migrations/2025_01_01_000004_create_file_table.php b/database/migrations/2025_01_01_000004_create_file_table.php new file mode 100644 index 0000000..ff0865d --- /dev/null +++ b/database/migrations/2025_01_01_000004_create_file_table.php @@ -0,0 +1,53 @@ +increments('id')->comment('文件ID'); + $table->integer('group_id')->default(0)->comment('文件分组ID'); + $table->integer('channel')->default(10)->comment('上传来源(10:系统用户 20:App用户端)'); + $table->string('disk', 10)->comment('存储方式'); + $table->integer('file_type')->comment('文件类型'); + $table->string('file_name', 255)->comment('文件名称'); + $table->string('file_path', 255)->comment('文件路径'); + $table->integer('file_size')->comment('文件大小(字节)'); + $table->string('file_ext', 20)->comment('文件扩展名'); + $table->integer('uploader_id')->comment('上传者用户ID'); + $table->softDeletes(); + $table->timestamps(); + $table->comment('文件表'); + }); + } + if (! Schema::hasTable('sys_file_group')) { + Schema::create('sys_file_group', function (Blueprint $table) { + $table->increments('id')->comment('文件分组ID'); + $table->integer('parent_id')->default(0)->comment('上级ID'); + $table->string('name', 50)->comment('文件名称'); + $table->integer('sort')->comment('分组排序'); + $table->string('describe', 500)->nullable()->comment('分组描述'); + $table->timestamps(); + $table->comment('文件分组表'); + }); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sys_file'); + Schema::dropIfExists('sys_file_group'); + } +}; diff --git a/database/migrations/2025_01_01_000005_create_site_config_table.php b/database/migrations/2025_01_01_000005_create_site_config_table.php new file mode 100644 index 0000000..1207e20 --- /dev/null +++ b/database/migrations/2025_01_01_000005_create_site_config_table.php @@ -0,0 +1,51 @@ +bigIncrements('id'); + $table->string('key', 50)->comment('设置项标示'); + $table->string('title', 50)->comment('设置标题'); + $table->string('describe', 500)->nullable()->default('')->comment('设置项描述'); + $table->string('values', 255)->nullable()->default('')->comment('设置值'); + $table->string('type', 50)->comment('设置类型'); + $table->string('options', 500)->nullable()->comment('options配置'); + $table->string('props', 500)->nullable()->comment('props配置'); + $table->integer('group_id')->comment('分组ID'); + $table->integer('sort')->comment('排序'); + $table->timestamps(); + $table->comment('系统设置表'); + $table->unique(['key', 'group_id']); + }); + } + if (! Schema::hasTable('sys_config_group')) { + Schema::create('sys_config_group', function (Blueprint $table) { + $table->increments('id'); + $table->string('title', 50)->comment('分组标题'); + $table->string('key', 50)->comment('分组KEY'); + $table->string('remark', 255)->nullable()->comment('备注描述'); + $table->timestamps(); + $table->comment('设置分组表'); + }); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sys_config_items'); + Schema::dropIfExists('sys_config_group'); + } +}; diff --git a/database/migrations/2025_01_01_000008_create_user_table.php b/database/migrations/2025_01_01_000008_create_user_table.php new file mode 100644 index 0000000..d6aa67f --- /dev/null +++ b/database/migrations/2025_01_01_000008_create_user_table.php @@ -0,0 +1,36 @@ +increments('id')->comment('用户ID'); + $table->string('username', 20)->unique()->comment('用户名'); + $table->string('password', 100)->comment('密码'); + $table->string('nickname', 20)->default('')->comment('昵称'); + $table->string('email', 50)->default('')->comment('邮箱'); + $table->timestamp('email_verified_at')->nullable(); + $table->rememberToken(); + $table->timestamps(); + $table->comment('APP用户表'); + }); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('user'); + } +}; diff --git a/database/migrations/2025_01_01_000009_create_jobs_table.php b/database/migrations/2025_01_01_000009_create_jobs_table.php new file mode 100644 index 0000000..3c6aa89 --- /dev/null +++ b/database/migrations/2025_01_01_000009_create_jobs_table.php @@ -0,0 +1,57 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('sys_job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('sys_failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sys_jobs'); + Schema::dropIfExists('sys_job_batches'); + Schema::dropIfExists('sys_failed_jobs'); + } +}; diff --git a/database/migrations/2025_01_01_000011_create_app_settings_table.php b/database/migrations/2025_01_01_000011_create_app_settings_table.php new file mode 100644 index 0000000..e15225d --- /dev/null +++ b/database/migrations/2025_01_01_000011_create_app_settings_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('key')->unique()->index()->comment('配置键(点号表示法)'); + $table->tinyInteger('type')->index()->comment('类型枚举:10=String 15=Bool 20=Number 30=Array 40=Object 50=EncryptedString'); + $table->integer('n')->nullable()->comment('数字/布尔值'); + $table->string('s')->nullable()->comment('字符串值'); + $table->text('e')->nullable()->comment('扩展值:JSON/序列化/加密'); + $table->text('description')->nullable()->comment('描述'); + $table->timestamps(); + $table->comment('应用配置表(el-settings 风格列式类型存储)'); + }); + } + } + + public function down(): void + { + Schema::dropIfExists('sys_app_settings'); + } +}; diff --git a/database/migrations/2026_05_24_032929_create_agents_table.php b/database/migrations/2026_05_24_032929_create_agents_table.php new file mode 100644 index 0000000..2a78d4f --- /dev/null +++ b/database/migrations/2026_05_24_032929_create_agents_table.php @@ -0,0 +1,70 @@ +id(); + $table->string('namespace', 500)->unique()->comment('完整类命名空间'); + $table->string('icon', 100)->nullable()->comment('图标'); + $table->string('name', 100)->comment('显示名称'); + $table->text('description')->nullable()->comment('描述'); + $table->json('tags')->nullable()->comment('标签'); + $table->boolean('enabled')->default(true)->comment('是否启用'); + $table->timestamps(); + }); + } + + if (! Schema::hasTable('agent_conversations')) { + Schema::create('agent_conversations', function (Blueprint $table) { + $table->string('id', 36)->primary(); + $table->foreignId('user_id')->nullable(); + $table->string('title'); + $table->timestamps(); + + $table->index(['user_id', 'updated_at']); + }); + } + + if (! Schema::hasTable('agent_conversation_messages')) { + Schema::create('agent_conversation_messages', function (Blueprint $table) { + $table->string('id', 36)->primary(); + $table->string('conversation_id', 36)->index(); + $table->foreignId('user_id')->nullable(); + $table->string('agent'); + $table->string('role', 25); + $table->text('content'); + $table->text('attachments'); + $table->text('tool_calls'); + $table->text('tool_results'); + $table->text('usage'); + $table->text('meta'); + $table->timestamps(); + + $table->index(['conversation_id', 'user_id', 'updated_at'], 'conversation_index'); + $table->index(['user_id']); + }); + } + + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('agents'); + Schema::dropIfExists('agent_conversations'); + Schema::dropIfExists('agent_conversation_messages'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..80bc06d --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,20 @@ +call([ + SysUserSeeder::class, + SysDataSeeder::class, + SysAgentSeeder::class, + ]); + } +} diff --git a/database/seeders/SysAgentSeeder.php b/database/seeders/SysAgentSeeder.php new file mode 100644 index 0000000..43be5bc --- /dev/null +++ b/database/seeders/SysAgentSeeder.php @@ -0,0 +1,40 @@ + 'Modules\SystemAgent\Ai\Agents\XinChatAgent', + 'name' => 'Xin Chat', + 'icon' => 'https://file.xinadmin.cn/file/favicons.ico', + 'description' => 'XinAdmin 默认 AI 助手,支持多轮对话和上下文记忆。', + 'tags' => ['XinChat', '智能对话'], + 'enabled' => true, + ], + [ + 'namespace' => 'Modules\SystemTool\Ai\Agents\TestAgent', + 'name' => 'Test Chat', + 'icon' => 'https://file.xinadmin.cn/file/favicons.ico', + 'description' => '测试智能体,用于开发调试。', + 'enabled' => false, + ], + ]; + + foreach ($agents as $agent) { + AgentModel::firstOrCreate( + ['namespace' => $agent['namespace']], + $agent + ); + } + } +} diff --git a/database/seeders/SysDataSeeder.php b/database/seeders/SysDataSeeder.php new file mode 100644 index 0000000..a43d47f --- /dev/null +++ b/database/seeders/SysDataSeeder.php @@ -0,0 +1,61 @@ +insert([ + ['id' => 1, 'title' => '网站设置', 'key' => 'web', 'remark' => '网站基础设置', 'created_at' => $date, 'updated_at' => $date] + ]); + DB::table('sys_config_items')->insert([ + ['id' => 1, 'group_id' => 1, 'key' => 'title', 'title' => '网站标题', 'describe' => '网站标题,用于展示在网站logo旁边和登录页面以及网页title中', 'values' => 'Xin Admin', 'type' => 'Input','options' => "", 'sort' => 0, 'created_at' => $date, 'updated_at' => $date,], + ['id' => 2, 'group_id' => 1, 'key' => 'logo', 'title' => '网站LOGO', 'describe' => '网站的LOGO,用于标识网站', 'values' => 'https://file.xinadmin.cn/file/favicons.ico', 'type' => 'Input','options' => "", 'sort' => 1, 'created_at' => $date, 'updated_at' => $date,], + ['id' => 3, 'group_id' => 1, 'key' => 'subtitle', 'title' => '网站副标题', 'describe' => '网站副标题,展示在登录页面标题的下面', 'values' => 'Xin Admin 快速开发框架', 'type' => 'Input','options' => "", 'sort' => 2, 'created_at' => $date, 'updated_at' => $date,], + ['id' => 4, 'group_id' => 1, 'key' => 'describe', 'title' => '网站描述', 'describe' => '网站的基本描述', 'values' => '没有描述', 'type' => 'TextArea','options' => "", 'sort' => 2, 'created_at' => $date, 'updated_at' => $date,], + ]); + // 字典类型初始数据 + DB::table('sys_dict')->insert([ + ['id' => 1, 'name' => '用户性别', 'code' => 'sys_user_sex', 'describe' => '用户性别字典', 'status' => 0, 'sort' => 1, 'created_at' => $date, 'updated_at' => $date], + ['id' => 2, 'name' => '菜单状态', 'code' => 'sys_show_hide', 'describe' => '菜单状态字典', 'status' => 0, 'sort' => 2, 'created_at' => $date, 'updated_at' => $date], + ['id' => 3, 'name' => '系统开关', 'code' => 'sys_normal_disable', 'describe' => '系统开关字典', 'status' => 0, 'sort' => 3, 'created_at' => $date, 'updated_at' => $date], + ['id' => 4, 'name' => '权限类型', 'code' => 'sys_rule_type', 'describe' => '系统权限类型字典', 'status' => 0, 'sort' => 4, 'created_at' => $date, 'updated_at' => $date], + ]); + // 字典数据初始数据 + DB::table('sys_dict_item')->insert([ + // 用户性别 + ['id' => 1, 'dict_id' => 1, 'label' => '男', 'value' => '0', 'color' => 'blue', 'status' => 0, 'sort' => 1, 'created_at' => $date, 'updated_at' => $date], + ['id' => 2, 'dict_id' => 1, 'label' => '女', 'value' => '1', 'color' => 'magenta', 'status' => 0, 'sort' => 2, 'created_at' => $date, 'updated_at' => $date], + ['id' => 3, 'dict_id' => 1, 'label' => '未知', 'value' => '2', 'color' => 'default', 'status' => 0, 'sort' => 3, 'created_at' => $date, 'updated_at' => $date], + // 菜单状态 + ['id' => 4, 'dict_id' => 2, 'label' => '显示', 'value' => '0', 'color' => 'green', 'status' => 0, 'sort' => 1, 'created_at' => $date, 'updated_at' => $date], + ['id' => 5, 'dict_id' => 2, 'label' => '隐藏', 'value' => '1', 'color' => 'red', 'status' => 0, 'sort' => 2, 'created_at' => $date, 'updated_at' => $date], + // 系统开关 + ['id' => 6, 'dict_id' => 3, 'label' => '正常', 'value' => '0', 'color' => 'green', 'status' => 0, 'sort' => 1, 'created_at' => $date, 'updated_at' => $date], + ['id' => 7, 'dict_id' => 3, 'label' => '停用', 'value' => '1', 'color' => 'red', 'status' => 0, 'sort' => 2, 'created_at' => $date, 'updated_at' => $date], + // 权限类型 + ['id' => 8, 'dict_id' => 4, 'label' => '路由', 'value' => 'route', 'color' => 'blue', 'status' => 0, 'sort' => 1, 'created_at' => $date, 'updated_at' => $date], + ['id' => 9, 'dict_id' => 4, 'label' => '菜单项', 'value' => 'menu', 'color' => 'green', 'status' => 0, 'sort' => 2, 'created_at' => $date, 'updated_at' => $date], + ['id' => 10, 'dict_id' => 4, 'label' => '权限', 'value' => 'rule', 'color' => 'orange', 'status' => 0, 'sort' => 3, 'created_at' => $date, 'updated_at' => $date], + ]); + // 文件初始化数据 + DB::table('sys_file_group')->insert([ + ['id' => 1, 'name' => '默认分组', 'sort' => 0, 'describe' => '默认分组', 'created_at' => $date, 'updated_at' => $date], + ['id' => 2, 'name' => '用户头像', 'sort' => 1, 'describe' => '用户头像分组', 'created_at' => $date, 'updated_at' => $date], + ['id' => 3, 'name' => '系统图片', 'sort' => 2, 'describe' => '系统图片分组', 'created_at' => $date, 'updated_at' => $date], + ['id' => 4, 'name' => '用户上传', 'sort' => 3, 'describe' => '用户上传分组', 'created_at' => $date, 'updated_at' => $date], + ['id' => 5, 'name' => '系统附件', 'sort' => 4, 'describe' => '系统附件分组', 'created_at' => $date, 'updated_at' => $date], + ['id' => 6, 'name' => '其他文件', 'sort' => 5, 'describe' => '其他文件分组', 'created_at' => $date, 'updated_at' => $date], + ['id' => 7, 'name' => '临时文件', 'sort' => 6, 'describe' => '临时文件分组,用于存放临时上传的文件', 'created_at' => $date, 'updated_at' => $date], + ]); + } +} diff --git a/database/seeders/SysUserSeeder.php b/database/seeders/SysUserSeeder.php new file mode 100644 index 0000000..6ee15ca --- /dev/null +++ b/database/seeders/SysUserSeeder.php @@ -0,0 +1,432 @@ +insert([ + [ + 'id' => 1, + 'username' => 'admin', + 'nickname' => '管理员', + 'email' => Str::random(10).'@example.com', + 'password' => Hash::make('123456'), + 'dept_id' => 1, + 'avatar_id' => 1, + 'email_verified_at' => now(), + 'remember_token' => Str::random(10), + 'created_at' => $date, + 'updated_at' => $date, + ], + [ + 'id' => 2, + 'username' => 'user', + 'nickname' => '财务', + 'email' => Str::random(10).'@example.com', + 'password' => Hash::make('123456'), + 'dept_id' => 2, + 'avatar_id' => 1, + 'email_verified_at' => now(), + 'remember_token' => Str::random(10), + 'created_at' => $date, + 'updated_at' => $date, + ] + ]); + DB::table('sys_role')->insert([ + ['id' => 1, 'name' => '超级管理员', 'created_at' => $date, 'updated_at' => $date], + ['id' => 2, 'name' => '财务', 'created_at' => $date, 'updated_at' => $date], + ['id' => 3, 'name' => '电商总监', 'created_at' => $date, 'updated_at' => $date], + ['id' => 4, 'name' => '市场运营', 'created_at' => $date, 'updated_at' => $date], + ]); + DB::table('sys_dept')->insert([ + [ + 'id' => 1, + 'name' => '新时代股份有限公司', + 'code' => 'A01', + 'type' => 0, + 'parent_id' => 0, + 'sort' => 0, + 'phone' => '19999999999', + 'email' => Str::random(10).'@example.com', + 'address' => '北京市海淀区某某街道103号', + 'remark' => '总公司', + 'created_at' => $date, + 'updated_at' => $date + ], + [ + 'id' => 2, + 'name' => '新时代软件技术(洛阳)有限公司', + 'code' => 'A01-B01', + 'type' => 0, + 'parent_id' => 1, + 'sort' => 0, + 'phone' => '19999999999', + 'email' => Str::random(10).'@example.com', + 'address' => '河南省洛阳市龙门区某某街道99号', + 'remark' => '洛阳市分公司', + 'created_at' => $date, + 'updated_at' => $date + ], + [ + 'id' => 3, + 'name' => '新时代智能科技(郑州)有限公司', + 'code' => 'A01-B02', + 'type' => 0, + 'parent_id' => 1, + 'sort' => 0, + 'phone' => '19999999999', + 'email' => Str::random(10).'@example.com', + 'address' => '河南省郑州市二七区某某街道69号', + 'remark' => '郑州市分公司', + 'created_at' => $date, + 'updated_at' => $date + ], + [ + 'id' => 4, + 'name' => '新征程科技(南阳)有限公司', + 'code' => 'A01-B03', + 'type' => 0, + 'parent_id' => 1, + 'sort' => 2, + 'phone' => '19999999999', + 'email' => Str::random(10).'@example.com', + 'address' => '河南省南阳市卧龙区某某街道77号', + 'remark' => '南阳市分公司', + 'created_at' => $date, + 'updated_at' => $date + ], + [ + 'id' => 5, + 'name' => '新时代投资发展有限公司', + 'code' => 'B01', + 'type' => 0, + 'parent_id' => 0, + 'sort' => 2, + 'phone' => '19999999999', + 'email' => Str::random(10).'@example.com', + 'address' => '北京市海淀区人民路666号', + 'remark' => '我们坚信,卓越的投资在于发现价值,而卓越的投资管理在于创造价值。我们立志成为科技创业者身边最懂业务、最能赋能、最长情的资本伙伴,共同将创新的火种,转化为引领行业的参天大树。', + 'created_at' => $date, + 'updated_at' => $date + ], + ]); + + $rules = [ + [ + 'type' => 'menu', + 'name' => '仪表盘', + 'key' => 'dashboard', + 'icon' => 'PieChartOutlined', + 'local' => 'menu.dashboard', + 'children' => [ + [ + 'type' => 'route', + 'name' => '分析页', + 'local' => "menu.analysis", + 'key' => 'dashboard.analysis', + 'path' => '/dashboard/analysis', + ] + ] + ], + [ + 'type' => 'menu', + 'name' => 'AI', + 'local' => "menu.ai", + 'icon' => "OpenAIOutlined", + 'key' => "ai", + 'children' => [ + [ + 'type' => "route", + 'key' => "ai.chat", + 'name' => "AI对话", + "path" => "/ai/chat", + 'local' => "menu.ai.chat", + 'children' => [ + ['type' => 'rule', 'name' => '发送消息', 'key' => 'ai.chat.send'], + ['type' => 'rule', 'name' => '会话列表', 'key' => 'ai.chat.conversations'], + ['type' => 'rule', 'name' => '消息列表', 'key' => 'ai.chat.messages'], + ['type' => 'rule', 'name' => '删除会话', 'key' => 'ai.chat.delete'], + ] + ], + [ + 'type' => "route", + 'key' => "ai.conversation", + 'name' => "会话管理", + "path" => "/ai/conversation", + 'local' => "menu.ai.conversation", + 'children' => [ + ['type' => 'rule', 'name' => '查询会话列表', 'key' => 'ai.conversation.query'], + ['type' => 'rule', 'name' => '删除会话', 'key' => 'ai.conversation.delete'], + ] + ], + [ + 'type' => "route", + 'key' => "ai.agent", + 'name' => "Agent 管理", + "path" => "/ai/agent", + 'local' => "menu.ai.agent", + 'children' => [ + ['type' => 'rule', 'name' => '查询列表', 'key' => 'ai.agent.query'], + ['type' => 'rule', 'name' => '更新 Agent', 'key' => 'ai.agent.update'], + ] + ], + ] + ], + [ + 'type' => "menu", + 'name' => "系统管理", + 'local' => "menu.system", + 'icon' => "SettingOutlined", + 'key' => "system", + 'children' => [ + [ + 'type' => "route", + 'key' => "system.user", + 'name' => "用户管理", + 'path' => "/system/user", + 'local' => "menu.system.user", + 'children' => [ + ['type' => 'rule', 'name' => '查询列表', 'key' => 'system.user.query'], + ['type' => 'rule', 'name' => '新增用户', 'key' => 'system.user.create'], + ['type' => 'rule', 'name' => '修改用户', 'key' => 'system.user.update'], + ['type' => 'rule', 'name' => '删除用户', 'key' => 'system.user.delete'], + ['type' => 'rule', 'name' => '重置用户密码', 'key' => 'system.user.resetPassword'], + ['type' => 'rule', 'name' => '获取角色选项', 'key' => 'system.user.role'], + ['type' => 'rule', 'name' => '获取部门选项', 'key' => 'system.user.dept'], + ] + ], + [ + 'type' => "route", + 'key' => "system.dept", + 'name' => "部门管理", + 'path' => "/system/dept", + 'local' => "menu.system.dept", + 'children' => [ + ['type' => 'rule', 'name' => '获取部门列表', 'key' => 'system.dept.query'], + ['type' => 'rule', 'name' => '新建部门', 'key' => 'system.dept.create'], + ['type' => 'rule', 'name' => '更新部门信息', 'key' => 'system.dept.update'], + ['type' => 'rule', 'name' => '删除部门', 'key' => 'system.dept.delete'], + ['type' => 'rule', 'name' => '获取部门用户', 'key' => 'system.dept.users'], + ] + ], + [ + 'type' => "route", + 'key' => "system.role", + 'name' => "角色管理", + 'path' => "/system/role", + 'local' => "menu.system.role", + 'children' => [ + ['type' => 'rule', 'name' => '新增角色', 'key' => 'system.role.create'], + ['type' => 'rule', 'name' => '查询角色列表', 'key' => 'system.role.query'], + ['type' => 'rule', 'name' => '更新角色信息', 'key' => 'system.role.update'], + ['type' => 'rule', 'name' => '删除角色', 'key' => 'system.role.delete'], + ['type' => 'rule', 'name' => '设置启用状态', 'key' => 'system.role.status'], + ['type' => 'rule', 'name' => '获取角色用户', 'key' => 'system.role.users'], + ['type' => 'rule', 'name' => '设置角色权限', 'key' => 'system.role.setRule'], + ['type' => 'rule', 'name' => '获取权限选项', 'key' => 'system.role.ruleList'], + ] + ], + [ + 'type' => "route", + 'key' => "system.rule", + 'name' => "菜单管理", + 'path' => "/system/rule", + 'local' => "menu.system.rule", + 'children' => [ + ['type' => 'rule', 'name' => '获取权限列表', 'key' => 'system.rule.query'], + ['type' => 'rule', 'name' => '创建权限规则', 'key' => 'system.rule.create'], + ['type' => 'rule', 'name' => '更新权限规则', 'key' => 'system.rule.update'], + ['type' => 'rule', 'name' => '删除权限规则', 'key' => 'system.rule.delete'], + ['type' => 'rule', 'name' => '获取父级权限', 'key' => 'system.rule.parentQuery'], + ['type' => 'rule', 'name' => '设置显示状态', 'key' => 'system.rule.show'], + ['type' => 'rule', 'name' => '设置启用状态', 'key' => 'system.rule.status'], + ] + ], + [ + 'type' => "route", + 'name' => "文件管理", + 'local' => "menu.system.file", + 'key' => "system.file", + 'path' => "/system/file", + 'children' => [ + ['type' => 'rule', 'name' => '获取文件夹', 'key' => 'system.file.group.query'], + ['type' => 'rule', 'name' => '新增文件夹', 'key' => 'system.file.group.create'], + ['type' => 'rule', 'name' => '编辑文件夹', 'key' => 'system.file.group.update'], + ['type' => 'rule', 'name' => '删除文件夹', 'key' => 'system.file.group.delete'], + ['type' => 'rule', 'name' => '查询文件列表', 'key' => 'system.file.list.query'], + ['type' => 'rule', 'name' => '上传文件', 'key' => 'system.file.list.upload'], + ['type' => 'rule', 'name' => '下载文件', 'key' => 'system.file.list.download'], + ['type' => 'rule', 'name' => '删除文件', 'key' => 'system.file.list.delete'], + ['type' => 'rule', 'name' => '永久删除文件', 'key' => 'system.file.list.force-delete'], + ['type' => 'rule', 'name' => '恢复文件', 'key' => 'system.file.list.restore'], + ['type' => 'rule', 'name' => '查看回收站', 'key' => 'system.file.list.trashed'], + ['type' => 'rule', 'name' => '清空回收站', 'key' => 'system.file.list.clean-trashed'], + ['type' => 'rule', 'name' => '复制文件', 'key' => 'system.file.list.copy'], + ['type' => 'rule', 'name' => '移动文件', 'key' => 'system.file.list.move'], + ['type' => 'rule', 'name' => '重命名文件', 'key' => 'system.file.list.rename'] + ], + ], + [ + 'type' => "route", + 'name' => "系统字典", + 'local' => "menu.system.dict", + 'key' => "system.dict", + 'path' => "/system/dict", + 'children' => [ + ['type' => 'rule', 'name' => '字典列表', 'key' => 'system.dict.list.query'], + ['type' => 'rule', 'name' => '新增字典', 'key' => 'system.dict.list.create'], + ['type' => 'rule', 'name' => '删除字典', 'key' => 'system.dict.list.delete'], + ['type' => 'rule', 'name' => '更新字典', 'key' => 'system.dict.list.update'], + ['type' => 'rule', 'name' => '字典项列表', 'key' => 'system.dict.item.query'], + ['type' => 'rule', 'name' => '字典项新增', 'key' => 'system.dict.item.create'], + ['type' => 'rule', 'name' => '字典项编辑', 'key' => 'system.dict.item.update'], + ['type' => 'rule', 'name' => '字典项删除', 'key' => 'system.dict.item.delete'], + ] + ], + [ + 'type' => "route", + 'name' => "系统配置", + 'local' => "menu.system.config", + 'key' => "system.config", + 'path' => "/system/config", + 'children' => [ + ['type' => 'rule', 'name' => '配置列表', 'key' => 'system.config.items.query'], + ['type' => 'rule', 'name' => '新增配置', 'key' => 'system.config.items.create'], + ['type' => 'rule', 'name' => '编辑配置', 'key' => 'system.config.items.update'], + ['type' => 'rule', 'name' => '删除配置', 'key' => 'system.config.items.delete'], + ['type' => 'rule', 'name' => '保存配置', 'key' => 'system.config.items.save'], + ['type' => 'rule', 'name' => '刷新配置', 'key' => 'system.config.items.refresh'], + ['type' => 'rule', 'name' => '配置组编辑', 'key' => 'system.config.group.update'], + ['type' => 'rule', 'name' => '配置组删除', 'key' => 'system.config.items.item.delete'], + ['type' => 'rule', 'name' => '配置组列表', 'key' => 'system.config.group.query'], + ['type' => 'rule', 'name' => '配置组新增', 'key' => 'system.config.group.create'], + ] + ], + [ + 'type' => 'route', + 'key' => 'system.mail', + 'name' => '邮件配置', + 'path' => '/system/mail', + 'local' => 'menu.system.mail', + 'children' => [ + ['type' => 'rule', 'name' => '获取配置', 'key' => 'system.mail.config'], + ['type' => 'rule', 'name' => '保存配置', 'key' => 'system.mail.save'], + ['type' => 'rule', 'name' => '发送测试', 'key' => 'system.mail.test'], + ] + ], + [ + 'type' => 'route', + 'key' => 'system.storage', + 'name' => '存储配置', + 'path' => '/system/storage', + 'local' => 'menu.system.storage', + 'children' => [ + ['type' => 'rule', 'name' => '获取配置', 'key' => 'system.storage.config'], + ['type' => 'rule', 'name' => '保存配置', 'key' => 'system.storage.save'], + ['type' => 'rule', 'name' => '测试连接', 'key' => 'system.storage.test'], + ] + ], + [ + 'type' => 'route', + 'key' => 'system.ai', + 'name' => 'AI 配置', + 'path' => '/system/ai', + 'local' => 'menu.system.ai', + 'children' => [ + ['type' => 'rule', 'name' => '获取可用AI列表', 'key' => 'system.ai.list'], + ['type' => 'rule', 'name' => '获取AI配置', 'key' => 'system.ai.config'], + ['type' => 'rule', 'name' => '保存AI配置', 'key' => 'system.ai.save'], + ['type' => 'rule', 'name' => '测试连接', 'key' => 'system.ai.test'], + ] + ], + [ + 'type' => "route", + 'name' => "系统信息", + 'local' => "menu.system.info", + 'key' => "system.info", + 'path' => "/system/info", + ] + ] + ], + [ + 'type' => 'route', + 'name' => 'XinAdmin', + 'local' => "menu.xin-admin", + 'key' => "xin-admin", + 'icon' => "LinkOutlined", + 'link' => 1, + 'path' => 'https://xinadmin.cn', + ] + ]; + + $this->insertRules($rules); + + DB::table('sys_role_rule')->insertUsing( + ['role_id', 'rule_id'], + DB::table('sys_rule') + ->where('status', 1) + ->select(DB::raw('1 as role_id'), 'id') + ); + + DB::table('sys_user_role')->insert([ + [ + 'user_id' => 1, + 'role_id' => 1, + ], + [ + 'user_id' => 2, + 'role_id' => 2, + ] + ]); + } + + + /** + * 递归插入权限规则数据 + * + * @param array $rules 规则数据 + * @param int $pid 父级ID,默认为0(顶级) + * @return void + */ + function insertRules(array $rules, int $pid = 0): void + { + $order = 0; + foreach ($rules as $rule) { + // 准备插入数据 + $insertData = [ + 'parent_id' => $pid, + 'type' => $rule['type'], + 'key' => $rule['key'], + 'name' => $rule['name'], + 'path' => $rule['path'] ?? '', + 'icon' => $rule['icon'] ?? '', + 'order' => $order++, + 'local' => $rule['local'] ?? '', + 'status' => 1, + 'hidden' => 1, + 'link' => $rule['link'] ?? 0, + 'created_at' => now(), + 'updated_at' => now(), + ]; + + // 插入数据并获取插入的ID + $currentId = DB::table('sys_rule')->insertGetId($insertData); + + // 如果有子菜单,递归插入 + if (!empty($rule['children']) && is_array($rule['children'])) { + $this->insertRules($rule['children'], $currentId); + } + } + } +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..c11667b --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,31 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist', 'node_modules'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + "@typescript-eslint/no-explicit-any": ["off"], + "react-hooks/exhaustive-deps": "off", + "@typescript-eslint/no-unused-vars": "off" + }, + }, +) diff --git a/index.html b/index.html new file mode 100644 index 0000000..4c5e53f --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + XinAdmin + + +
+ + + diff --git a/lang/en/auth.php b/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/lang/en/pagination.php b/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/en/passwords.php b/lang/en/passwords.php new file mode 100644 index 0000000..fad3a7d --- /dev/null +++ b/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset.', + 'sent' => 'We have emailed your password reset link.', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/lang/en/system.php b/lang/en/system.php new file mode 100644 index 0000000..74454fb --- /dev/null +++ b/lang/en/system.php @@ -0,0 +1,30 @@ + [ + 'image' => 'image', + 'audio' => 'audio', + 'video' => 'video', + 'zip' => 'zip', + 'document' => 'document', + 'annex' => 'annex', + 'size_limit' => 'The file size exceeds the limit', + 'ext_limit' => 'The file extension is not allowed :ext', + 'upload_failed' => 'Upload failed', + 'not_found' => 'File not found', + 'delete_failed' => 'Delete failed', + 'download_failed' => 'Download failed', + 'invalid_visibility' => 'Invalid visibility setting', + ], + 'error' => [ + 'no_permission' => 'Sorry, you do not have this permission at the moment, please contact the administrator', + 'route_not_exist' => 'Route does not exist', + ], + 'data_not_exist' => 'Data does not exist', +]; diff --git a/lang/en/user.php b/lang/en/user.php new file mode 100644 index 0000000..4b04e8b --- /dev/null +++ b/lang/en/user.php @@ -0,0 +1,31 @@ + 'Please log in first', + 'user_not_exist' => 'User does not exist, please register first', + 'password_error' => 'Password error', + 'admin_login' => 'Admin Login', + 'admin_logout' => 'Admin Logout', + 'login_success' => 'Login Success', + 'login_error' => 'Login Error, Please check your username and password', + 'logout_success' => 'Logout Success', + 'old_password_error' => 'Old password error', + 'user_is_disabled' => 'User is disabled', + 'invalid_token' => 'Invalid Token', + 'refresh_token_expired' => 'Refresh Token Expired, Please login again', + + 'recharge_success' => 'Recharge Success', + 'reset_password' => 'Reset Password Success', +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..dddc947 --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,194 @@ + 'The :attribute field must be accepted.', + 'accepted_if' => 'The :attribute field must be accepted when :other is :value.', + 'active_url' => 'The :attribute field must be a valid URL.', + 'after' => 'The :attribute field must be a date after :date.', + 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.', + 'alpha' => 'The :attribute field must only contain letters.', + 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.', + 'alpha_num' => 'The :attribute field must only contain letters and numbers.', + 'array' => 'The :attribute field must be an array.', + 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.', + 'before' => 'The :attribute field must be a date before :date.', + 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute field must have between :min and :max items.', + 'file' => 'The :attribute field must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute field must be between :min and :max.', + 'string' => 'The :attribute field must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'can' => 'The :attribute field contains an unauthorized value.', + 'confirmed' => 'The :attribute field confirmation does not match.', + 'contains' => 'The :attribute field is missing a required value.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute field must be a valid date.', + 'date_equals' => 'The :attribute field must be a date equal to :date.', + 'date_format' => 'The :attribute field must match the format :format.', + 'decimal' => 'The :attribute field must have :decimal decimal places.', + 'declined' => 'The :attribute field must be declined.', + 'declined_if' => 'The :attribute field must be declined when :other is :value.', + 'different' => 'The :attribute field and :other must be different.', + 'digits' => 'The :attribute field must be :digits digits.', + 'digits_between' => 'The :attribute field must be between :min and :max digits.', + 'dimensions' => 'The :attribute field has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.', + 'email' => 'The :attribute field must be a valid email address.', + 'ends_with' => 'The :attribute field must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'extensions' => 'The :attribute field must have one of the following extensions: :values.', + 'file' => 'The :attribute field must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute field must have more than :value items.', + 'file' => 'The :attribute field must be greater than :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than :value.', + 'string' => 'The :attribute field must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute field must have :value items or more.', + 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than or equal to :value.', + 'string' => 'The :attribute field must be greater than or equal to :value characters.', + ], + 'hex_color' => 'The :attribute field must be a valid hexadecimal color.', + 'image' => 'The :attribute field must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field must exist in :other.', + 'integer' => 'The :attribute field must be an integer.', + 'ip' => 'The :attribute field must be a valid IP address.', + 'ipv4' => 'The :attribute field must be a valid IPv4 address.', + 'ipv6' => 'The :attribute field must be a valid IPv6 address.', + 'json' => 'The :attribute field must be a valid JSON string.', + 'list' => 'The :attribute field must be a list.', + 'lowercase' => 'The :attribute field must be lowercase.', + 'lt' => [ + 'array' => 'The :attribute field must have less than :value items.', + 'file' => 'The :attribute field must be less than :value kilobytes.', + 'numeric' => 'The :attribute field must be less than :value.', + 'string' => 'The :attribute field must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute field must not have more than :value items.', + 'file' => 'The :attribute field must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be less than or equal to :value.', + 'string' => 'The :attribute field must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute field must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute field must not have more than :max items.', + 'file' => 'The :attribute field must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute field must not be greater than :max.', + 'string' => 'The :attribute field must not be greater than :max characters.', + ], + 'max_digits' => 'The :attribute field must not have more than :max digits.', + 'mimes' => 'The :attribute field must be a file of type: :values.', + 'mimetypes' => 'The :attribute field must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute field must have at least :min items.', + 'file' => 'The :attribute field must be at least :min kilobytes.', + 'numeric' => 'The :attribute field must be at least :min.', + 'string' => 'The :attribute field must be at least :min characters.', + ], + 'min_digits' => 'The :attribute field must have at least :min digits.', + 'missing' => 'The :attribute field must be missing.', + 'missing_if' => 'The :attribute field must be missing when :other is :value.', + 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', + 'missing_with' => 'The :attribute field must be missing when :values is present.', + 'missing_with_all' => 'The :attribute field must be missing when :values are present.', + 'multiple_of' => 'The :attribute field must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute field format is invalid.', + 'numeric' => 'The :attribute field must be a number.', + 'password' => [ + 'letters' => 'The :attribute field must contain at least one letter.', + 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute field must contain at least one number.', + 'symbols' => 'The :attribute field must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], + 'present' => 'The :attribute field must be present.', + 'present_if' => 'The :attribute field must be present when :other is :value.', + 'present_unless' => 'The :attribute field must be present unless :other is :value.', + 'present_with' => 'The :attribute field must be present when :values is present.', + 'present_with_all' => 'The :attribute field must be present when :values are present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute field format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', + 'required_if_declined' => 'The :attribute field is required when :other is declined.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute field must match :other.', + 'size' => [ + 'array' => 'The :attribute field must contain :size items.', + 'file' => 'The :attribute field must be :size kilobytes.', + 'numeric' => 'The :attribute field must be :size.', + 'string' => 'The :attribute field must be :size characters.', + ], + 'starts_with' => 'The :attribute field must start with one of the following: :values.', + 'string' => 'The :attribute field must be a string.', + 'timezone' => 'The :attribute field must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'uppercase' => 'The :attribute field must be uppercase.', + 'url' => 'The :attribute field must be a valid URL.', + 'ulid' => 'The :attribute field must be a valid ULID.', + 'uuid' => 'The :attribute field must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/zh/auth.php b/lang/zh/auth.php new file mode 100644 index 0000000..7bf27d5 --- /dev/null +++ b/lang/zh/auth.php @@ -0,0 +1,20 @@ + '锁提供的凭据不匹配我们的记录。', + 'password' => '输入的密码不正确。', + 'throttle' => '登录尝试次数过多。请在:秒后重试。', + +]; diff --git a/lang/zh/pagination.php b/lang/zh/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/lang/zh/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/zh/passwords.php b/lang/zh/passwords.php new file mode 100644 index 0000000..b3ef1d7 --- /dev/null +++ b/lang/zh/passwords.php @@ -0,0 +1,22 @@ + '您的密码已重置。', + 'sent' => '我们已经通过电子邮件发送了您的密码重置链接。', + 'throttled' => '请稍候再试。', + 'token' => '此密码重置令牌无效。', + 'user' => "我们找不到有那个邮箱地址的用户。", + +]; diff --git a/lang/zh/system.php b/lang/zh/system.php new file mode 100644 index 0000000..a5cab73 --- /dev/null +++ b/lang/zh/system.php @@ -0,0 +1,30 @@ + [ + 'image' => '图片', + 'audio' => '音频', + 'video' => '视频', + 'zip' => '压缩包', + 'document' => '文档', + 'annex' => '附件', + 'size_limit' => '文件大小超出限制', + 'ext_limit' => '文件扩展名不允许 :ext', + 'upload_failed' => '上传失败', + 'not_found' => '文件不存在', + 'delete_failed' => '删除失败', + 'download_failed' => '下载失败', + 'invalid_visibility' => '无效的可见性设置', + ], + 'error' => [ + 'no_permission' => '对不起,你暂时没有该权限,请联系管理员', + 'route_not_exist' => '路由不存在', + ], + 'data_not_exist' => '数据不存在', +]; diff --git a/lang/zh/user.php b/lang/zh/user.php new file mode 100644 index 0000000..7116a66 --- /dev/null +++ b/lang/zh/user.php @@ -0,0 +1,31 @@ + '请先登录', + 'user_not_exist' => '用户不存在,请先注册', + 'password_error' => '密码错误', + 'admin_login' => '管理员登录', + 'admin_logout' => '管理员退出', + 'login_success' => '登录成功', + 'login_error' => '登录失败,用户名或者密码错误!', + 'logout_success' => '退出成功', + 'old_password_error' => '旧密码错误', + 'user_is_disabled' => '用户已被禁用', + 'invalid_token' => '无效的令牌', + 'refresh_token_expired' => '刷新令牌已过期,请重新登录', + + 'recharge_success' => '充值成功', + 'reset_password' => '重置密码成功', + +]; diff --git a/lang/zh/validation.php b/lang/zh/validation.php new file mode 100644 index 0000000..fcd9a17 --- /dev/null +++ b/lang/zh/validation.php @@ -0,0 +1,191 @@ + ':attribute 必须被接受。', + 'accepted_if' => '当 :other 为 :value 时,:attribute 必须被接受。', + 'active_url' => ':attribute 必须是一个有效的 URL。', + 'after' => ':attribute 必须是一个在 :date 之后的日期。', + 'after_or_equal' => ':attribute 必须是一个在 :date 之后或相等的日期。', + 'alpha' => ':attribute 只能包含字母。', + 'alpha_dash' => ':attribute 只能包含字母、数字、破折号和下划线。', + 'alpha_num' => ':attribute 只能包含字母和数字。', + 'array' => ':attribute 必须是一个数组。', + 'ascii' => ':attribute 只能包含单字节字母数字字符和符号。', + 'before' => ':attribute 必须是一个在 :date 之前的日期。', + 'before_or_equal' => ':attribute 必须是一个在 :date 之前或相等的日期。', + 'between' => [ + 'array' => ':attribute 必须包含 :min 到 :max 个项目。', + 'file' => ':attribute 必须介于 :min 到 :max KB 之间。', + 'numeric' => ':attribute 必须介于 :min 到 :max 之间。', + 'string' => ':attribute 必须介于 :min 到 :max 个字符之间。', + ], + 'boolean' => ':attribute 必须为 true 或 false。', + 'can' => ':attribute 包含未授权的值。', + 'confirmed' => ':attribute 确认不匹配。', + 'contains' => ':attribute 缺少必需的值。', + 'current_password' => '密码不正确。', + 'date' => ':attribute 必须是一个有效的日期。', + 'date_equals' => ':attribute 必须是一个等于 :date 的日期。', + 'date_format' => ':attribute 必须符合格式 :format。', + 'decimal' => ':attribute 必须有 :decimal 位小数。', + 'declined' => ':attribute 必须被拒绝。', + 'declined_if' => '当 :other 为 :value 时,:attribute 必须被拒绝。', + 'different' => ':attribute 和 :other 必须不同。', + 'digits' => ':attribute 必须是 :digits 位数字。', + 'digits_between' => ':attribute 必须介于 :min 到 :max 位数字之间。', + 'dimensions' => ':attribute 具有无效的图片尺寸。', + 'distinct' => ':attribute 具有重复的值。', + 'doesnt_end_with' => ':attribute 不能以以下之一结尾::values。', + 'doesnt_start_with' => ':attribute 不能以以下之一开头::values。', + 'email' => ':attribute 必须是一个有效的电子邮件地址。', + 'ends_with' => ':attribute 必须以以下之一结尾::values。', + 'enum' => '所选的 :attribute 无效。', + 'exists' => '所选的 :attribute 无效。', + 'extensions' => ':attribute 必须具有以下扩展名之一::values。', + 'file' => ':attribute 必须是一个文件。', + 'filled' => ':attribute 必须有一个值。', + 'gt' => [ + 'array' => ':attribute 必须包含超过 :value 个项目。', + 'file' => ':attribute 必须大于 :value KB。', + 'numeric' => ':attribute 必须大于 :value。', + 'string' => ':attribute 必须大于 :value 个字符。', + ], + 'gte' => [ + 'array' => ':attribute 必须包含 :value 个项目或更多。', + 'file' => ':attribute 必须大于或等于 :value KB。', + 'numeric' => ':attribute 必须大于或等于 :value。', + 'string' => ':attribute 必须大于或等于 :value 个字符。', + ], + 'hex_color' => ':attribute 必须是一个有效的十六进制颜色。', + 'image' => ':attribute 必须是一张图片。', + 'in' => '所选的 :attribute 无效。', + 'in_array' => ':attribute 必须在 :other 中存在。', + 'integer' => ':attribute 必须是一个整数。', + 'ip' => ':attribute 必须是一个有效的 IP 地址。', + 'ipv4' => ':attribute 必须是一个有效的 IPv4 地址。', + 'ipv6' => ':attribute 必须是一个有效的 IPv6 地址。', + 'json' => ':attribute 必须是一个有效的 JSON 字符串。', + 'list' => ':attribute 必须是一个列表。', + 'lowercase' => ':attribute 必须是小写字母。', + 'lt' => [ + 'array' => ':attribute 必须包含少于 :value 个项目。', + 'file' => ':attribute 必须小于 :value KB。', + 'numeric' => ':attribute 必须小于 :value。', + 'string' => ':attribute 必须小于 :value 个字符。', + ], + 'lte' => [ + 'array' => ':attribute 必须包含不超过 :value 个项目。', + 'file' => ':attribute 必须小于或等于 :value KB。', + 'numeric' => ':attribute 必须小于或等于 :value。', + 'string' => ':attribute 必须小于或等于 :value 个字符。', + ], + 'mac_address' => ':attribute 必须是一个有效的 MAC 地址。', + 'max' => [ + 'array' => ':attribute 不能包含超过 :max 个项目。', + 'file' => ':attribute 不能大于 :max KB。', + 'numeric' => ':attribute 不能大于 :max。', + 'string' => ':attribute 不能大于 :max 个字符。', + ], + 'max_digits' => ':attribute 不能超过 :max 位数字。', + 'mimes' => ':attribute 必须是一个类型为 :values 的文件。', + 'mimetypes' => ':attribute 必须是一个类型为 :values 的文件。', + 'min' => [ + 'array' => ':attribute 必须包含至少 :min 个项目。', + 'file' => ':attribute 必须至少为 :min KB。', + 'numeric' => ':attribute 必须至少为 :min。', + 'string' => ':attribute 必须至少为 :min 个字符。', + ], + 'min_digits' => ':attribute 必须至少为 :min 位数字。', + 'missing' => ':attribute 必须缺失。', + 'missing_if' => '当 :other 为 :value 时,:attribute 必须缺失。', + 'missing_unless' => '除非 :other 为 :value,否则 :attribute 必须缺失。', + 'missing_with' => '当 :values 存在时,:attribute 必须缺失。', + 'missing_with_all' => '当 :values 存在时,:attribute 必须缺失。', + 'multiple_of' => ':attribute 必须是 :value 的倍数。', + 'not_in' => '所选的 :attribute 无效。', + 'not_regex' => ':attribute 格式无效。', + 'numeric' => ':attribute 必须是一个数字。', + 'password' => [ + 'letters' => ':attribute 必须包含至少一个字母。', + 'mixed' => ':attribute 必须包含至少一个大写字母和一个小写字母。', + 'numbers' => ':attribute 必须包含至少一个数字。', + 'symbols' => ':attribute 必须包含至少一个符号。', + 'uncompromised' => '给定的 :attribute 已出现在数据泄露中。请选择不同的 :attribute。', + ], + 'present' => ':attribute 必须存在。', + 'present_if' => '当 :other 为 :value 时,:attribute 必须存在。', + 'present_unless' => '除非 :other 为 :value,否则 :attribute 必须存在。', + 'present_with' => '当 :values 存在时,:attribute 必须存在。', + 'present_with_all' => '当 :values 存在时,:attribute 必须存在。', + 'prohibited' => ':attribute 被禁止。', + 'prohibited_if' => '当 :other 为 :value 时,:attribute 被禁止。', + 'prohibited_unless' => '除非 :other 在 :values 中,否则 :attribute 被禁止。', + 'prohibits' => ':attribute 禁止 :other 存在。', + 'regex' => ':attribute 格式无效。', + 'required' => ':attribute 是必填项。', + 'required_array_keys' => ':attribute 必须包含以下条目::values。', + 'required_if' => '当 :other 为 :value 时,:attribute 是必填项。', + 'required_if_accepted' => '当 :other 被接受时,:attribute 是必填项。', + 'required_if_declined' => '当 :other 被拒绝时,:attribute 是必填项。', + 'required_unless' => '除非 :other 在 :values 中,否则 :attribute 是必填项。', + 'required_with' => '当 :values 存在时,:attribute 是必填项。', + 'required_with_all' => '当 :values 存在时,:attribute 是必填项。', + 'required_without' => '当 :values 不存在时,:attribute 是必填项。', + 'required_without_all' => '当 :values 都不存在时,:attribute 是必填项。', + 'same' => ':attribute 必须与 :other 匹配。', + 'size' => [ + 'array' => ':attribute 必须包含 :size 个项目。', + 'file' => ':attribute 必须为 :size KB。', + 'numeric' => ':attribute 必须为 :size。', + 'string' => ':attribute 必须为 :size 个字符。', + ], + 'starts_with' => ':attribute 必须以以下之一开头::values。', + 'string' => ':attribute 必须是一个字符串。', + 'timezone' => ':attribute 必须是一个有效的时区。', + 'unique' => ':attribute 已被占用。', + 'uploaded' => ':attribute 上传失败。', + 'uppercase' => ':attribute 必须是大写字母。', + 'url' => ':attribute 必须是一个有效的 URL。', + 'ulid' => ':attribute 必须是一个有效的 ULID。', + 'uuid' => ':attribute 必须是一个有效的 UUID。', + + /* + |-------------------------------------------------------------------------- + | 自定义验证语言行 + |-------------------------------------------------------------------------- + | + | 在这里,您可以为属性指定自定义验证消息,使用 "attribute.rule" 的命名约定。 + | 这样可以快速为给定的属性规则指定特定的自定义语言行。 + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => '自定义消息', + ], + ], + + /* + |-------------------------------------------------------------------------- + | 自定义验证属性 + |-------------------------------------------------------------------------- + | + | 以下语言行用于将我们的属性占位符替换为更友好的内容,例如将 "email" 替换为 "电子邮件地址"。 + | 这有助于使我们的消息更具表现力。 + | + */ + + 'attributes' => [], + +]; \ No newline at end of file diff --git a/modules/AnnoRoute/AnnoRoute.php b/modules/AnnoRoute/AnnoRoute.php new file mode 100644 index 0000000..ff7644a --- /dev/null +++ b/modules/AnnoRoute/AnnoRoute.php @@ -0,0 +1,16 @@ +registerFromPath($p); + } + } + + /** + * 从指定路径注册路由 + */ + private function registerFromPath(string $path): void + { + if (!is_dir($path)) { + return; + } + + + $finder = new Finder(); + $finder->files() + ->in($path) + ->name('*Controller.php'); + + foreach ($finder as $controller) { + $className = $this->getClassNameFromFile( + $controller->getRealPath(), + $controller->getPath() + ); + if ($className && class_exists($className)) { + RouteRegisterService::register($className); + } + } + } + + /** + * 从文件路径和所在目录解析类名 + */ + private function getClassNameFromFile(string $filePath, string $fileDir): ?string + { + // 读取文件内容获取命名空间 + $content = file_get_contents($filePath); + + if (!preg_match('/namespace\s+([^;]+);/', $content, $namespaceMatch)) { + // 没有命名空间,尝试使用 PSR-0 规则 + return $this->guessClassNameFromPath($filePath, $fileDir); + } + + $namespace = trim($namespaceMatch[1]); + $className = basename($filePath, '.php'); + + return $namespace . '\\' . $className; + } + + /** + * 当文件没有命名空间时,通过路径猜测类名 + */ + private function guessClassNameFromPath(string $filePath, string $fileDir): ?string + { + // 获取相对于项目根目录的路径 + $basePath = base_path(); + $relativePath = str_replace($basePath, '', $fileDir); + + // 将路径转换为命名空间 + $namespace = str_replace('/', '\\', ltrim($relativePath, '/')); + + // 移除开头的反斜杠并转换路径分隔符 + $namespace = trim($namespace, '\\'); + + $className = basename($filePath, '.php'); + + // 如果命名空间为空,直接返回类名 + if (empty($namespace)) { + return $className; + } + + return $namespace . '\\' . $className; + } +} diff --git a/modules/AnnoRoute/Attribute/DeleteRoute.php b/modules/AnnoRoute/Attribute/DeleteRoute.php new file mode 100644 index 0000000..d8a80c4 --- /dev/null +++ b/modules/AnnoRoute/Attribute/DeleteRoute.php @@ -0,0 +1,28 @@ + '[0-9]+'] + * + * Route parameter constraints, this attribute is used to specify regex constraints for route parameters, + * for example: ['id' => '[0-9]+'] + * + * @var array + */ + public array $where = []; + + /** + * 成功响应 + * @param $msg array|string + * @return JsonResponse + */ + protected static function success(array|string $msg = ''): JsonResponse + { + if (is_array($msg)) { + $data = $msg; + $msg = ''; + } else { + $data = []; + } + return response()->json([ + 'success' => true, + 'data' => $data, + 'showType' => ShopTypeEnum::SUCCESS_MESSAGE->value, + 'msg' => $msg, + ]); + } +} diff --git a/modules/AnnoRoute/RouteRegisterService.php b/modules/AnnoRoute/RouteRegisterService.php new file mode 100644 index 0000000..d4acbdc --- /dev/null +++ b/modules/AnnoRoute/RouteRegisterService.php @@ -0,0 +1,147 @@ +getAttributes()); + if($classAttr->isEmpty()) return; + + $classAttrName = $classAttr->map->getName(); + if(! $classAttrName->contains(RequestAttribute::class)) { + return; + } + $requestMapping = $classAttr->first(fn ($item) => $item->getName() == RequestAttribute::class); + $routeInstance = $requestMapping->newInstance(); + // 默认参数 + $routePrefix = $routeInstance->routePrefix ?? ''; + $authGuard = $routeInstance->authGuard ?? null; + $abilitiesPrefix = $routeInstance->abilitiesPrefix ?? ''; + $middleware = self::registerMiddleware($routeInstance->middleware); + + $methods = $classRef->getMethods(); + + foreach ($methods as $method) { + // 方法注解 + $attributes = $method->getAttributes(); + if(empty($attributes)) { + continue; + } + $methodName = $method->getName(); + + foreach ($attributes as $attribute) { + if (in_array($attribute->getName(), self::$mapping)) { + $instance = $attribute->newInstance(); + self::registerRoute( + $instance, + $methodName, + $className, + $authGuard, + $middleware, + $routePrefix, + $abilitiesPrefix, + ); + } + } + } + } catch (ReflectionException $e) { + echo $e->getMessage(); + } + } + + /** + * 注册路由 + * @param BaseAttribute $instance + * @param string $method + * @param string $className + * @param string|null $authGuard + * @param array $middleware + * @param string $routePrefix + * @param string $abilitiesPrefix + * @return void + */ + private static function registerRoute( + BaseAttribute $instance, + string $method, + string $className, + string $authGuard = null, + array $middleware = [], + string $routePrefix = '', + string $abilitiesPrefix = '' + ): void + { + $authorize = $instance->authorize; + + $authMiddleware = []; + if (!empty($authorize)) { + $authMiddleware[] = 'auth:sanctum'; + if(! empty($authGuard) ) { + $authMiddleware[] = 'authGuard:' . $authGuard; + } else { + $authMiddleware[] = 'authGuard'; + } + if (is_string($authorize) && !empty($abilitiesPrefix)) { + $authMiddleware[] = 'abilities:' . $abilitiesPrefix . '.' . $authorize; + } else { + $authMiddleware[] = 'abilities:' . $authorize; + } + } + + $middleware = array_merge($authMiddleware, self::registerMiddleware($instance->middleware), $middleware); + $route = Route::{Str::lower($instance->httpMethod)}( + $routePrefix . $instance->route, + [$className, $method] + )->middleware(array_unique($middleware)); + + if (!empty($instance->where)) { + $route->where($instance->where); + } + } + + /** + * 获取中间件 + * @param $middleware + * @return string[] + */ + private static function registerMiddleware($middleware): array + { + if(empty($middleware)) { + return []; + } + if(is_array($middleware)) { + return $middleware; + } + if (is_string($middleware)) { + return [$middleware]; + } + return []; + } +} diff --git a/modules/AnnoRoute/RouteServiceProvider.php b/modules/AnnoRoute/RouteServiceProvider.php new file mode 100644 index 0000000..02e1968 --- /dev/null +++ b/modules/AnnoRoute/RouteServiceProvider.php @@ -0,0 +1,12 @@ +app->bind(AnnoRoute::class, AnnoRouteService::class); + } +} diff --git a/modules/Common/Console/Commands/GenerateRouteHelperCommand.php b/modules/Common/Console/Commands/GenerateRouteHelperCommand.php new file mode 100644 index 0000000..6be08ce --- /dev/null +++ b/modules/Common/Console/Commands/GenerateRouteHelperCommand.php @@ -0,0 +1,262 @@ + 'get', + PostRoute::class => 'post', + PutRoute::class => 'put', + DeleteRoute::class => 'delete', + ]; + + /** @var array> */ + private array $controllerRoutes = []; + + public function handle(): int + { + $paths = [ + app_path('Http/Controllers'), + base_path('modules'), + ]; + + $totalRoutes = 0; + + foreach ($paths as $path) { + if (!is_dir($path)) { + continue; + } + + $finder = new Finder(); + $finder->files()->in($path)->name('*Controller.php'); + + foreach ($finder as $file) { + $className = $this->getClassNameFromFile( + $file->getRealPath(), + $file->getPath() + ); + + if ($className && class_exists($className)) { + $routes = $this->scanController($className); + if (!empty($routes)) { + $this->controllerRoutes[$className] = $routes; + $totalRoutes += count($routes); + } + } + } + } + + if (empty($this->controllerRoutes)) { + $this->warn('No annotation routes found.'); + return self::SUCCESS; + } + + $this->writeHelperFile(); + $this->info("Routes generated to: " . base_path('routes/api.php')); + $this->info("Found {$totalRoutes} routes."); + + return self::SUCCESS; + } + + private function scanController(string $className): array + { + $routes = []; + + try { + $classRef = new ReflectionClass($className); + } catch (ReflectionException) { + return $routes; + } + + $classAttrs = collect($classRef->getAttributes()); + if ($classAttrs->isEmpty()) { + return $routes; + } + + $hasRequestAttr = $classAttrs->some( + fn($attr) => $attr->getName() === RequestAttribute::class + ); + if (!$hasRequestAttr) { + return $routes; + } + + $requestAttr = $classAttrs->first( + fn($attr) => $attr->getName() === RequestAttribute::class + ); + $requestInstance = $requestAttr->newInstance(); + $routePrefix = $requestInstance->routePrefix ?? ''; + $authGuard = $requestInstance->authGuard ?? null; + $abilitiesPrefix = $requestInstance->abilitiesPrefix ?? ''; + $classMiddleware = $this->normalizeMiddleware($requestInstance->middleware); + + foreach ($classRef->getMethods() as $method) { + $attrs = $method->getAttributes(); + if (empty($attrs)) { + continue; + } + + $methodName = $method->getName(); + + foreach ($attrs as $attr) { + if (in_array($attr->getName(), self::$mapping)) { + $instance = $attr->newInstance(); + + $authMiddleware = $this->buildAuthMiddleware( + $instance->authorize, + $authGuard, + $abilitiesPrefix, + ); + + $allMiddleware = array_values(array_unique(array_merge( + $authMiddleware, + $this->normalizeMiddleware($instance->middleware), + $classMiddleware, + ))); + + $routes[] = [ + 'method' => self::$httpMethodMap[$attr->getName()], + 'uri' => $instance->route, + 'prefix' => trim($routePrefix, '/'), + 'controller' => $className, + 'action' => $methodName, + 'middleware' => $allMiddleware, + ]; + } + } + } + + return $routes; + } + + private function buildAuthMiddleware(string|bool $authorize, ?string $authGuard, string $abilitiesPrefix): array + { + if (empty($authorize) || $authorize === false) { + return []; + } + + $authMiddleware = ['auth:sanctum']; + + if (!empty($authGuard)) { + $authMiddleware[] = 'authGuard:' . $authGuard; + } else { + $authMiddleware[] = 'authGuard'; + } + + if (is_string($authorize) && !empty($abilitiesPrefix)) { + $authMiddleware[] = 'abilities:' . $abilitiesPrefix . '.' . $authorize; + } else { + $authMiddleware[] = 'abilities:' . (is_string($authorize) ? $authorize : ''); + } + + return $authMiddleware; + } + + private function normalizeMiddleware(string|array $middleware): array + { + if (empty($middleware)) { + return []; + } + if (is_array($middleware)) { + return $middleware; + } + return [$middleware]; + } + + private function getClassNameFromFile(string $filePath, string $fileDir): ?string + { + $content = file_get_contents($filePath); + + if (!preg_match('/namespace\s+([^;]+);/', $content, $namespaceMatch)) { + return $this->guessClassNameFromPath($filePath, $fileDir); + } + + $namespace = trim($namespaceMatch[1]); + $className = basename($filePath, '.php'); + + return $namespace . '\\' . $className; + } + + private function guessClassNameFromPath(string $filePath, string $fileDir): ?string + { + $basePath = base_path(); + $relativePath = str_replace($basePath, '', $fileDir); + $namespace = str_replace('/', '\\', ltrim($relativePath, '/')); + $namespace = trim($namespace, '\\'); + $className = basename($filePath, '.php'); + + return empty($namespace) ? $className : $namespace . '\\' . $className; + } + + private function writeHelperFile(): void + { + $outputPath = base_path('routes/api.php'); + + $lines = [ + 'controllerRoutes as $className => $routes) { + $prefix = $routes[0]['prefix']; + + $shortName = substr(strrchr($className, '\\'), 1); + $lines[] = "// {$shortName}"; + + $chain = "Route::controller({$className}::class)"; + if ($prefix !== '') { + $chain .= "->prefix('{$prefix}')"; + } + $chain .= '->group(function () {'; + $lines[] = $chain; + + foreach ($routes as $route) { + $uri = $route['uri']; + if ($uri === '') { + $uri = '/'; + } + + $middlewareStr = ''; + if (!empty($route['middleware'])) { + $middlewareStr = "->middleware(['" . implode("', '", $route['middleware']) . "'])"; + } + + $lines[] = " Route::{$route['method']}('{$uri}', '{$route['action']}'){$middlewareStr};"; + } + + $lines[] = '});'; + $lines[] = ''; + } + + File::put($outputPath, implode("\n", $lines)); + } +} diff --git a/modules/Common/Enum/ShowType.php b/modules/Common/Enum/ShowType.php new file mode 100644 index 0000000..5c855a9 --- /dev/null +++ b/modules/Common/Enum/ShowType.php @@ -0,0 +1,29 @@ + $v) { + if (! $v) { + continue; + } + $model->whereIn($k, $v); + } + unset($params['filter']); + } + + // 构建查询 + foreach ($this->searchField ?? [] as $key => $op) { + if (isset($params[$key]) && $params[$key] != '') { + if (in_array($op, ['=', '>', '<>', '<', '>=', '<='])) { + $model->where($key, $op, $params[$key]); + + continue; + } + if ($op == 'like') { + $model->where($key, $op, '%'.$params[$key].'%'); + + continue; + } + if ($op == 'afterLike') { + $model->where($key, $op, $params[$key].'%'); + + continue; + } + if ($op == 'beforeLike') { + $model->where($key, $op, '%'.$params[$key]); + + continue; + } + if ($op == 'date') { + $date = date('Y-m-d', strtotime($params[$key])); + $model->whereDate($key, $date); + + continue; + } + if ($op == 'betweenDate') { + if (is_array($params[$key])) { + $start = $params[$key][0]; + $end = $params[$key][1]; + $model->whereDate($key, '>=', $start); + $model->whereDate($key, '<=', $end); + } + } + } + } + + // 快速搜索 + if (isset($params['keywordSearch']) && $params['keywordSearch'] != '') { + $quickSearchArr = $this->quickSearchField ?? []; + if (count($quickSearchArr) > 0) { + $model->whereAny( + $quickSearchArr, + 'like', + '%'.str_replace('%', '\%', $params['keywordSearch']).'%' + ); + } + } + + // 构建排序 + if (isset($params['sorter']) && $params['sorter']) { + if(is_array($params['sorter'])) { + $sorter = $params['sorter']; + } else { + $sorter = json_decode($params['sorter'], true); + } + if (count($sorter) > 0) { + $column = array_keys($sorter)[0]; + $direction = $sorter[$column] == 'ascend' ? 'asc' : 'desc'; + $model->orderBy($column, $direction); + } + } + + return $model; + } + + +} diff --git a/modules/Common/Http/Requests/BaseFormRequest.php b/modules/Common/Http/Requests/BaseFormRequest.php new file mode 100644 index 0000000..730fbea --- /dev/null +++ b/modules/Common/Http/Requests/BaseFormRequest.php @@ -0,0 +1,23 @@ +isMethod('PUT') || $this->isMethod('PATCH')) { + return true; + } + + return false; + } + +} diff --git a/modules/Common/Middlewares/AllowCrossDomainMiddleware.php b/modules/Common/Middlewares/AllowCrossDomainMiddleware.php new file mode 100644 index 0000000..f19fc68 --- /dev/null +++ b/modules/Common/Middlewares/AllowCrossDomainMiddleware.php @@ -0,0 +1,34 @@ +headers->set('Access-Control-Allow-Origin', '*'); + $response->headers->set('Access-Control-Allow-Credentials', 'true'); + $response->headers->set('Access-Control-Max-Age', 1800); + $response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); + $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, User-Language'); + + // 如果是预检请求, 返回 204 + if ($request->isMethod('OPTIONS')) { + return response()->json([], 204, $response->headers->all()); + } + + return $response; + } +} diff --git a/modules/Common/Middlewares/LanguageMiddleware.php b/modules/Common/Middlewares/LanguageMiddleware.php new file mode 100644 index 0000000..575f478 --- /dev/null +++ b/modules/Common/Middlewares/LanguageMiddleware.php @@ -0,0 +1,91 @@ + 'en', // 英语 + 'zh' => 'zh', // 简体中文 + 'jp' => 'ja', // 日语 + ]; + + /** + * 默认语言 + */ + protected string $defaultLanguage = 'zh'; + + /** + * Handle an incoming request. + */ + public function handle(Request $request, Closure $next) + { + // 获取当前语言 + $locale = $this->getLocale($request); + // 设置应用语言 + App::setLocale($locale); + // 让请求继续处理 + return $next($request); + } + + /** + * 获取当前语言设置 + */ + protected function getLocale(Request $request): string + { + // 优先级 1: URL 参数 (例如 ?lang=en) + if ($request->has('lang')) { + $lang = $request->get('lang'); + if ($this->isSupported($lang)) { + return $lang; + } + } + + // 优先级 2: User-Language 头 + $browserLocale = $this->getBrowserLocale($request); + if ($browserLocale && $this->isSupported($browserLocale)) { + return $browserLocale; + } + + // 优先级 3: Session 中存储的语言 + if (Session::has('locale')) { + $lang = Session::get('locale'); + if ($this->isSupported($lang)) { + return $lang; + } + } + + // 优先级 4: 配置文件中的默认语言 + return config('app.locale', $this->defaultLanguage); + } + + /** + * 从 User-Language 头中获取浏览器偏好语言 + */ + protected function getBrowserLocale(Request $request): ?string + { + $acceptLanguage = $request->header('User-Language'); + + if (!$acceptLanguage) { + return null; + } + + return $acceptLanguage; + } + + /** + * 检查语言是否被支持 + */ + protected function isSupported(string $locale): bool + { + return array_key_exists($locale, $this->supportedLanguages); + } +} diff --git a/modules/Common/Providers/PaginationProvider.php b/modules/Common/Providers/PaginationProvider.php new file mode 100644 index 0000000..a17cfd2 --- /dev/null +++ b/modules/Common/Providers/PaginationProvider.php @@ -0,0 +1,35 @@ +app->bind('Illuminate\Pagination\LengthAwarePaginator', function ($app, $options) { + return new class( + $options['items'], + $options['total'], + $options['perPage'], + $options['currentPage'], + $options['options'] + ) extends LengthAwarePaginator { + public function toArray(): array + { + return [ + 'data' => $this->items(), + 'total' => $this->total(), + 'pageSize' => $this->perPage(), + 'current' => $this->currentPage(), + ]; + } + }; + }); + } +} diff --git a/modules/Common/Trait/RequestJson.php b/modules/Common/Trait/RequestJson.php new file mode 100644 index 0000000..f506eb7 --- /dev/null +++ b/modules/Common/Trait/RequestJson.php @@ -0,0 +1,155 @@ +value; + $success = false; + return response()->json(compact('description', 'success', 'msg', 'showType', 'placement')); + } + + /** + * 返回 Json 响应 + * + * @param bool $success 响应状态 + * @param array $data 响应数据 + * @param string $msg 响应内容 + */ + protected static function renderJson( + bool $success = true, + array $data = [], + string $msg = '', + ShopTypeEnum $showTypeEnum = ShopTypeEnum::SUCCESS_MESSAGE + ): JsonResponse { + $showType = $showTypeEnum->value; + + return response()->json(compact('data', 'success', 'msg', 'showType')); + } + + /** + * 抛出 API 数据 + * + * @param bool $success 响应状态 + * @param mixed $data 返回数据 + * @param string $msg 响应内容 + * @param ShopTypeEnum $showTypeEnum + */ + public static function renderThrow( + bool $success = true, + array $data = [], + string $msg = '', + ShopTypeEnum $showTypeEnum = ShopTypeEnum::SUCCESS_MESSAGE + ) { + $showType = $showTypeEnum->value; + throw new HttpResponseException(compact('data', 'success', 'msg', 'showType')); + } +} diff --git a/modules/Common/helpers.php b/modules/Common/helpers.php new file mode 100644 index 0000000..750984f --- /dev/null +++ b/modules/Common/helpers.php @@ -0,0 +1,69 @@ + 'id', + 'parent_id' => 'parent_id', + 'children' => 'children' + ]); + $data = []; + foreach ($list as $k => $item) { + if ($item[$params['parent_id']] == $parentId) { + $children = getTreeData($list, $item[$params['id']]); + !empty($children) && $item[$params['children']] = $children; + $data[] = $item; + unset($list[$k]); + } + } + return $data; + } +} diff --git a/modules/SystemAgent/Ai/Agents/XinChatAgent.php b/modules/SystemAgent/Ai/Agents/XinChatAgent.php new file mode 100644 index 0000000..a55edd6 --- /dev/null +++ b/modules/SystemAgent/Ai/Agents/XinChatAgent.php @@ -0,0 +1,24 @@ +get(); + return $this->success($agents->toArray()); + } + + #[GetRoute('/{id}', authorize: 'query', where: ['id' => '[0-9]+'])] + public function show(int $id): JsonResponse + { + $agent = AgentModel::find($id); + if (! $agent) { + return $this->error('Agent not found'); + } + return $this->success($agent->toArray()); + } + + #[PutRoute('/{id}', authorize: 'update', where: ['id' => '[0-9]+'])] + public function update(int $id, Request $request): JsonResponse + { + $enabled = $request->boolean('enabled', true); + $model = AgentModel::find($id); + if (! $model) { + return $this->error('Agent not found'); + } + $model->enabled = $enabled; + $model->save(); + return $this->success(); + } +} diff --git a/modules/SystemAgent/Http/Controllers/ChatController.php b/modules/SystemAgent/Http/Controllers/ChatController.php new file mode 100644 index 0000000..a6341e0 --- /dev/null +++ b/modules/SystemAgent/Http/Controllers/ChatController.php @@ -0,0 +1,128 @@ +validate([ + 'message' => 'required|string|max:10000', + 'conversation_id' => 'nullable|string|max:36', + 'agent_id' => 'nullable|integer|exists:agents,id', + ]); + + $message = $request->input('message'); + $conversationId = $request->input('conversation_id'); + $agentId = $request->input('agent_id'); + $user = $request->user(); + + try { + if ($agentId) { + $agentModel = AgentModel::findOrFail($agentId); + $agentClass = $agentModel->namespace; + $agent = $agentClass::make(); + } else { + $agent = XinChatAgent::make(); + } + + if ($conversationId) { + // 继续已有会话 + $response = $agent + ->continue($conversationId, as: $user) + ->stream($message); + } else { + // 新建会话 + $response = $agent + ->forUser($user) + ->stream($message); + } + + return $response; + } catch (\Throwable $e) { + return $this->error('AI 响应失败:' . $e->getMessage()); + } + } + + /** + * 获取当前用户的会话列表 + */ + #[GetRoute('/conversations', 'conversations')] + public function conversations(Request $request): JsonResponse + { + $user = $request->user(); + + $conversations = $user->conversations() + ->latest('updated_at') + ->get() + ->map(fn ($conversation) => [ + 'key' => $conversation->id, + 'label' => $conversation->title, + 'updated_at' => $conversation->updated_at->toISOString(), + ]); + + return $this->success($conversations->toArray()); + } + + /** + * 获取指定会话的消息列表 + */ + #[GetRoute('/messages/{conversationId}', 'messages')] + public function messages(Request $request, string $conversationId): JsonResponse + { + $user = $request->user(); + + $conversation = $user->conversations()->find($conversationId); + + if (! $conversation) { + return $this->error('会话不存在'); + } + + $messages = $conversation->messages() + ->oldest() + ->get() + ->map(fn ($msg) => [ + 'key' => $msg->id, + 'role' => $msg->role, + 'content' => $msg->content, + 'created_at' => $msg->created_at->toISOString(), + ]); + + return $this->success($messages->toArray()); + } + + /** + * 删除指定会话 + */ + #[DeleteRoute('/messages/{conversationId}', 'delete')] + public function deleteConversation(Request $request, string $conversationId): JsonResponse + { + $user = $request->user(); + + $conversation = $user->conversations()->find($conversationId); + + if (! $conversation) { + return $this->error('会话不存在'); + } + + $conversation->delete(); + + return $this->success('会话已删除'); + } +} diff --git a/modules/SystemAgent/Http/Controllers/ConversationController.php b/modules/SystemAgent/Http/Controllers/ConversationController.php new file mode 100644 index 0000000..539b54f --- /dev/null +++ b/modules/SystemAgent/Http/Controllers/ConversationController.php @@ -0,0 +1,119 @@ + 'like', + ]; + + protected array $quickSearchField = ['title']; + + /** + * 会话列表 + */ + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + $params = $request->all(); + $perPage = (int) ($params['pageSize'] ?? 10); + $query = Conversation::query()->withCount('messages'); + + $data = $this->buildSearch($params, $query) + ->orderBy('updated_at', 'desc') + ->paginate($perPage); + + $userIds = $data->pluck('user_id')->filter()->unique(); + $users = SysUserModel::whereIn('id', $userIds)->pluck('username', 'id'); + + $data = $data->through(function ($conversation) use ($users) { + return [ + 'id' => $conversation->id, + 'user_id' => $conversation->user_id, + 'username' => $users[$conversation->user_id] ?? '', + 'title' => $conversation->title, + 'message_count' => $conversation->messages_count, + 'created_at' => $conversation->created_at?->toISOString(), + 'updated_at' => $conversation->updated_at?->toISOString(), + ]; + }); + + return $this->success($data->toArray()); + } + + /** + * 删除会话 + */ + #[DeleteRoute(route: '/{id}', authorize: 'delete', where: ['id' => '[a-zA-Z0-9\-]+'])] + public function delete(string $id): JsonResponse + { + $conversation = Conversation::find($id); + + if (! $conversation) { + return $this->error('会话不存在'); + } + + $conversation->delete(); + + return $this->success('会话已删除'); + } + + /** + * 获取会话消息列表 + */ + #[GetRoute('/{id}/messages', authorize: 'query', where: ['id' => '[a-zA-Z0-9\-]+'])] + public function messages(string $id, Request $request): JsonResponse + { + $conversation = Conversation::find($id); + + if (! $conversation) { + return $this->error('会话不存在'); + } + + $perPage = (int) $request->input('pageSize', 20); + $data = $conversation->messages() + ->orderBy('created_at') + ->paginate($perPage) + ->toArray(); + + return $this->success($data); + } + + /** + * 获取会话详情 + */ + #[GetRoute('/{id}', authorize: 'query', where: ['id' => '[a-zA-Z0-9\-]+'])] + public function show(string $id): JsonResponse + { + $conversation = Conversation::withCount('messages')->find($id); + + if (! $conversation) { + return $this->error('会话不存在'); + } + + $user = $conversation->user_id + ? SysUserModel::find($conversation->user_id) + : null; + + return $this->success([ + 'id' => $conversation->id, + 'user_id' => $conversation->user_id, + 'username' => $user?->username ?? '', + 'title' => $conversation->title, + 'message_count' => $conversation->messages_count, + 'created_at' => $conversation->created_at?->toISOString(), + 'updated_at' => $conversation->updated_at?->toISOString(), + ]); + } +} diff --git a/modules/SystemAgent/Http/Requests/AgentFormRequest.php b/modules/SystemAgent/Http/Requests/AgentFormRequest.php new file mode 100644 index 0000000..67225fe --- /dev/null +++ b/modules/SystemAgent/Http/Requests/AgentFormRequest.php @@ -0,0 +1,29 @@ + 'required|boolean', + 'name' => 'nullable|max:100', + 'description' => 'nullable|max:1000', + ]; + } + + public function messages(): array + { + return [ + 'enabled.required' => '启用状态不能为空', + 'enabled.boolean' => '启用状态格式错误', + 'name.max' => '名称不能超过100个字符', + 'description.max' => '描述不能超过1000个字符', + ]; + } +} diff --git a/modules/SystemAgent/Models/AgentModel.php b/modules/SystemAgent/Models/AgentModel.php new file mode 100644 index 0000000..076ac15 --- /dev/null +++ b/modules/SystemAgent/Models/AgentModel.php @@ -0,0 +1,26 @@ + 'array', + 'enabled' => 'boolean', + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; +} diff --git a/modules/SystemAgent/Providers/SystemAgentServiceProvider.php b/modules/SystemAgent/Providers/SystemAgentServiceProvider.php new file mode 100644 index 0000000..05913e6 --- /dev/null +++ b/modules/SystemAgent/Providers/SystemAgentServiceProvider.php @@ -0,0 +1,14 @@ +register(base_path('modules/SystemAgent/Http/Controllers')); + } +} diff --git a/modules/SystemTool/Ai/Agents/TestAgent.php b/modules/SystemTool/Ai/Agents/TestAgent.php new file mode 100644 index 0000000..76bbf9c --- /dev/null +++ b/modules/SystemTool/Ai/Agents/TestAgent.php @@ -0,0 +1,45 @@ + [ + 'command' => 'command -v reasonix', + ], + Platform::Windows => [ + 'command' => 'cmd /c where reasonix 2>nul', + ], + }; + } + + public function projectDetectionConfig(): array + { + return [ + 'paths' => ['.reasonix'], + 'files' => ['REASONIX.md'], + ]; + } + + public function mcpInstallationStrategy(): McpInstallationStrategy + { + return McpInstallationStrategy::FILE; + } + + public function mcpConfigPath(): string + { + return config('boost.agents.reasonix.mcp_config_path', '.mcp.json'); + } + + public function guidelinesPath(): string + { + return config('boost.agents.reasonix.guidelines_path', 'REASONIX.md'); + } + + public function skillsPath(): string + { + return config('boost.agents.reasonix.skills_path', '.reasonix/skills'); + } +} diff --git a/modules/SystemTool/Attributes/Setting.php b/modules/SystemTool/Attributes/Setting.php new file mode 100644 index 0000000..207d06e --- /dev/null +++ b/modules/SystemTool/Attributes/Setting.php @@ -0,0 +1,19 @@ +> + */ + protected static array $definitions = []; + + /** + * 从 #[Setting] Attribute 解析设置定义 + * + * @return array + */ + public static function getDefinition(): array + { + $class = static::class; + + if (! isset(self::$definitions[$class])) { + $reflection = new ReflectionClass($class); + $attributes = $reflection->getAttributes(Setting::class); + $definition = []; + + foreach ($attributes as $attribute) { + /** @var Setting $instance */ + $instance = $attribute->newInstance(); + $definition[$instance->config] = [ + 'config' => $instance->config, + 'type' => $instance->type->value, + 'description' => $instance->description, + ]; + } + + self::$definitions[$class] = $definition; + } + + return self::$definitions[$class]; + } + + /** + * 判断某个 key 是否在本类的定义中 + */ + public static function hasDefinitionKey(string $key): bool + { + return array_key_exists($key, static::getDefinition()); + } + + /** + * 获取数据库表名 + */ + public static function getTableName(): string + { + return config('app_settings.table', 'sys_app_settings'); + } + + /** + * 将本类的所有配置项定义同步到 应用配置 表 + * + * - 新 key 插入,值来自当前 config() 的默认值 + * - 已有 key 只更新 description,不覆盖值 + * - 部署时在 migration 中调用 + */ + public static function init(): void + { + $definition = static::getDefinition(); + $table = static::getTableName(); + + foreach ($definition as $key => $setting) { + $exists = DB::table($table)->where('key', $key)->exists(); + + if (! $exists) { + $value = static::getConfigValue($key); + static::set($key, $value); + } else { + DB::table($table) + ->where('key', $key) + ->update([ + 'description' => $setting['description'] ?? null, + 'updated_at' => now(), + ]); + } + } + } + + /** + * 读取配置值 + * + * @throws InvalidArgumentException 当 key 未定义时 + */ + public static function get(string $key, mixed $default = null): mixed + { + if (! static::hasDefinitionKey($key)) { + throw new InvalidArgumentException("Setting key '{$key}' is not defined in " . static::class); + } + + return static::getCacheValue($key, function () use ($key, $default) { + return static::getDBValue($key, function () use ($key, $default) { + return static::setCacheValue( + key: $key, + value: static::getConfigValue($key, $default), + ); + }); + }); + } + + /** + * 写入配置值 → DB + Cache + * + * @throws InvalidArgumentException 当 key 未定义或类型不匹配时 + */ + public static function set(string $key, mixed $value): void + { + if (! static::hasDefinitionKey($key)) { + throw new InvalidArgumentException("Setting key '{$key}' is not defined in " . static::class); + } + + static::setDBValue($key, $value); + static::setCacheValue($key, $value); + + // 当前请求立即生效(中间件在下一个请求才会重新加载) + config([$key => $value]); + + // 清除聚合缓存,使下次请求通过中间件重新从 DB 加载 + Cache::forget(self::AGGREGATE_CACHE_KEY); + } + + /** + * 从 Laravel config 读取(最终 fallback) + */ + public static function getConfigValue(string $key, mixed $default = null): mixed + { + return config($key, $default); + } + + /** + * 从缓存读取 + * + * @param mixed $default 默认值或闭包 (fn() => mixed) + */ + public static function getCacheValue(string $key, mixed $default = null): mixed + { + if ($default instanceof \Closure) { + return Cache::rememberForever('app-setting-' . $key, $default); + } + + return Cache::get('app-setting-' . $key, $default); + } + + /** + * 写入缓存 + */ + public static function setCacheValue(string $key, mixed $value, ?int $ttl = null): mixed + { + if ($ttl !== null) { + Cache::put('app-setting-' . $key, $value, $ttl); + } else { + Cache::forever('app-setting-' . $key, $value); + } + + return $value; + } + + /** + * 将本类所有配置项从 DB 加载到 Laravel config() 运行时 + * + * 调用后 config('filesystems.default') 等可直接返回 DB 值。 + * 在 getConfig() 批量读取场景下避免逐个 get() 的开销。 + */ + public static function reloadIntoConfig(): void + { + $table = static::getTableName(); + $rows = DB::table($table)->whereIn('key', array_keys(static::getDefinition()))->get(); + + foreach ($rows as $row) { + $value = match ((int) $row->type) { + ESettingType::String->value => $row->s, + ESettingType::Bool->value => is_null($row->n) ? null : (bool) $row->n, + ESettingType::Number->value => is_null($row->n) ? null : (int) $row->n, + ESettingType::Array->value => is_null($row->e) ? null : json_decode($row->e, true), + ESettingType::Object->value => is_null($row->e) ? null : unserialize(base64_decode($row->e)), + ESettingType::EncryptedString->value => is_null($row->e) ? null : \Illuminate\Support\Facades\Crypt::decrypt(base64_decode($row->e)), + default => $row->s ?? null, + }; + + config([$row->key => $value]); + } + } + + /** + * 清除某个 key 的缓存 + */ + public static function forgetCache(string $key): void + { + Cache::forget('app-setting-' . $key); + + // 同时清除聚合缓存,保持一致性 + Cache::forget(self::AGGREGATE_CACHE_KEY); + } + + + /** + * 从数据库读取(按类型自动转换) + * + * @param mixed $default 默认值或闭包 + */ + public static function getDBValue(string $key, mixed $default = null): mixed + { + $rec = DB::table(static::getTableName())->where('key', $key)->first(); + + if (! $rec) { + return $default instanceof \Closure ? $default() : value($default); + } + + return match ((int) $rec->type) { + ESettingType::String->value => $rec->s, + ESettingType::Bool->value => is_null($rec->n) ? null : (bool) $rec->n, + ESettingType::Number->value => is_null($rec->n) ? null : (int) $rec->n, + ESettingType::Array->value => is_null($rec->e) ? null : json_decode($rec->e, true), + ESettingType::Object->value => is_null($rec->e) ? null : unserialize(base64_decode($rec->e)), + ESettingType::EncryptedString->value => is_null($rec->e) ? null : Crypt::decrypt(base64_decode($rec->e)), + default => $rec->s ?? $rec->value ?? null, + }; + } + + /** + * 写入数据库(按类型选择列) + * + * @throws InvalidArgumentException + */ + public static function setDBValue(string $key, mixed $value): void + { + $definition = static::getDefinition(); + + if (! isset($definition[$key])) { + throw new InvalidArgumentException("Setting key '{$key}' is not defined in " . static::class); + } + + $type = $definition[$key]['type']; + $description = $definition[$key]['description'] ?? null; + $table = static::getTableName(); + + $data = [ + 'key' => $key, + 'type' => $type, + 'description' => $description, + 'updated_at' => now(), + ]; + + switch ((int) $type) { + case ESettingType::String->value: + if (! is_string($value) && ! is_null($value)) { + throw new InvalidArgumentException("Value for '{$key}' must be a string."); + } + $data['s'] = $value; + $data['n'] = null; + $data['e'] = null; + break; + + case ESettingType::Bool->value: + if (! is_bool($value) && ! is_null($value)) { + throw new InvalidArgumentException("Value for '{$key}' must be a boolean."); + } + $data['n'] = is_null($value) ? null : (int) $value; + $data['s'] = null; + $data['e'] = null; + break; + + case ESettingType::Number->value: + if (! is_numeric($value) && ! is_null($value)) { + throw new InvalidArgumentException("Value for '{$key}' must be a number."); + } + $data['n'] = $value; + $data['s'] = null; + $data['e'] = null; + break; + + case ESettingType::Array->value: + if (! is_array($value) && ! is_null($value)) { + throw new InvalidArgumentException("Value for '{$key}' must be an array."); + } + $data['e'] = is_null($value) ? null : json_encode($value, JSON_UNESCAPED_UNICODE); + $data['s'] = null; + $data['n'] = null; + break; + + case ESettingType::Object->value: + if (! is_object($value) && ! is_null($value)) { + throw new InvalidArgumentException("Value for '{$key}' must be an object."); + } + $data['e'] = is_null($value) ? null : base64_encode(serialize($value)); + $data['s'] = null; + $data['n'] = null; + break; + + case ESettingType::EncryptedString->value: + if (! is_string($value) && ! is_null($value)) { + throw new InvalidArgumentException("Value for '{$key}' must be a string."); + } + $data['e'] = is_null($value) ? null : base64_encode(Crypt::encrypt($value)); + $data['s'] = null; + $data['n'] = null; + break; + + default: + throw new InvalidArgumentException("Unknown setting type '{$type}' for key '{$key}'."); + } + + $exists = DB::table($table)->where('key', $key)->exists(); + + if ($exists) { + DB::table($table)->where('key', $key)->update($data); + } else { + $data['created_at'] = now(); + DB::table($table)->insert($data); + } + } + + /** + * 从数据库删除某个配置项 + */ + public static function deleteDBValue(string $key): void + { + DB::table(static::getTableName())->where('key', $key)->delete(); + } +} diff --git a/modules/SystemTool/Enum/ESettingType.php b/modules/SystemTool/Enum/ESettingType.php new file mode 100644 index 0000000..7217905 --- /dev/null +++ b/modules/SystemTool/Enum/ESettingType.php @@ -0,0 +1,42 @@ + __('system.file.image'), + self::AUDIO => __('system.file.audio'), + self::VIDEO => __('system.file.video'), + self::ZIP => __('system.file.zip'), + self::DOCUMENT => __('system.file.document'), + self::ANNEX => __('system.file.annex'), + }; + } + + /** + * 获取预览地址 + */ + public function previewPath(): string + { + return match ($this) { + self::IMAGE => 'static/image.svg', + self::AUDIO => 'static/audio.svg', + self::VIDEO => 'static/video.svg', + self::ZIP => 'static/zip.svg', + self::DOCUMENT => 'static/document.svg', + self::ANNEX => 'static/annex.svg', + }; + } + + /** + * 根据扩展名推断文件类型 + */ + public static function guessFromExtension(string $extension): self + { + $extension = strtolower($extension); + + foreach (self::cases() as $case) { + if ($case === self::ANNEX) continue; // 跳过 OTHER + + if (in_array($extension, $case->fileExt())) { + return $case; + } + } + + return self::ANNEX; + } + + /** + * 文件扩展名 + */ + public function fileExt(): array|string + { + return match ($this) { + self::IMAGE => ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'avif', 'webp', 'svg', 'ico'], + self::AUDIO => ['mp3', 'wma', 'wav', 'ape', 'flac', 'ogg', 'aac'], + self::VIDEO => ['mp4', 'mov', 'wmv', 'flv', 'avl', 'webm', 'mkv'], + self::DOCUMENT => ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'md', 'csv'], + self::ZIP => ['zip', 'rar', '7z', 'tar', 'gz'], + self::ANNEX => '*', + }; + } +} diff --git a/modules/SystemTool/Enum/SiteConfigType.php b/modules/SystemTool/Enum/SiteConfigType.php new file mode 100644 index 0000000..f87501c --- /dev/null +++ b/modules/SystemTool/Enum/SiteConfigType.php @@ -0,0 +1,88 @@ + '输入框', + self::TEXTAREA => '文本域', + self::INPUT_NUMBER => '数字输入框', + self::SWITCH => '开关', + self::RADIO => '单选框', + self::CHECKBOX => '复选框', + }; + } + + /** + * 判断是否为数字类型 + */ + public function isNumeric(): bool + { + return match($this) { + self::INPUT_NUMBER => true, + default => false, + }; + } + + /** + * 判断是否为布尔类型 + */ + public function isBoolean(): bool + { + return match($this) { + self::SWITCH => true, + default => false, + }; + } + + /** + * 判断是否为数组类型 + */ + public function isArray(): bool + { + return match($this) { + self::CHECKBOX => true, + default => false, + }; + } + + /** + * 获取所有前端组件类型 + */ + public static function getFrontendTypes(): array + { + return [ + self::INPUT->value, + self::TEXTAREA->value, + self::INPUT_NUMBER->value, + self::SWITCH->value, + self::RADIO->value, + self::CHECKBOX->value, + ]; + } + + /** + * 从字符串创建枚举实例(宽松匹配) + */ + public static function fromString(string $type): ?self + { + return self::tryFrom($type); + } +} diff --git a/modules/SystemTool/Http/Controllers/SysAiController.php b/modules/SystemTool/Http/Controllers/SysAiController.php new file mode 100644 index 0000000..3f2a7ef --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysAiController.php @@ -0,0 +1,183 @@ +success(compact('default')); + } + + /** + * 获取 AI 配置(从 DB 加载已保存的值,fallback 到 config 文件) + */ + #[GetRoute('/config', 'config')] + public function getConfig(): JsonResponse + { + $ai = config('ai'); + + return $this->success([ + 'default' => $ai['default'] ?? 'openai', + 'providers' => $ai['providers'] ?? [], + ]); + } + + /** + * 保存 AI 配置到数据库 + */ + #[PostRoute('/save', 'save')] + public function saveConfig(): JsonResponse + { + $data = request()->all(); + + try { + // 默认驱动 + AiSettings::set('ai.default', $data['default'] ?? 'openai'); + + // 各供应商配置 + $providers = $data['providers'] ?? []; + + // Anthropic + if (isset($providers['anthropic'])) { + $p = $providers['anthropic']; + AiSettings::set('ai.providers.anthropic.key', $p['key'] ?? ''); + if (isset($p['url'])) { + AiSettings::set('ai.providers.anthropic.url', $p['url']); + } + } + + // Azure + if (isset($providers['azure'])) { + $p = $providers['azure']; + AiSettings::set('ai.providers.azure.key', $p['key'] ?? ''); + AiSettings::set('ai.providers.azure.url', $p['url'] ?? ''); + AiSettings::set('ai.providers.azure.api_version', $p['api_version'] ?? '2025-04-01-preview'); + AiSettings::set('ai.providers.azure.deployment', $p['deployment'] ?? 'gpt-4o'); + AiSettings::set('ai.providers.azure.embedding_deployment', $p['embedding_deployment'] ?? 'text-embedding-3-small'); + AiSettings::set('ai.providers.azure.image_deployment', $p['image_deployment'] ?? 'gpt-image-1'); + } + + // Bedrock + if (isset($providers['bedrock'])) { + $p = $providers['bedrock']; + AiSettings::set('ai.providers.bedrock.region', $p['region'] ?? 'us-east-1'); + AiSettings::set('ai.providers.bedrock.key', $p['key'] ?? ''); + AiSettings::set('ai.providers.bedrock.access_key_id', $p['access_key_id'] ?? ''); + AiSettings::set('ai.providers.bedrock.secret_access_key', $p['secret_access_key'] ?? ''); + AiSettings::set('ai.providers.bedrock.session_token', $p['session_token'] ?? ''); + } + + // Cohere + if (isset($providers['cohere'])) { + AiSettings::set('ai.providers.cohere.key', $providers['cohere']['key'] ?? ''); + } + + // DeepSeek + if (isset($providers['deepseek'])) { + AiSettings::set('ai.providers.deepseek.key', $providers['deepseek']['key'] ?? ''); + } + + // ElevenLabs + if (isset($providers['eleven'])) { + AiSettings::set('ai.providers.eleven.key', $providers['eleven']['key'] ?? ''); + } + + // Gemini + if (isset($providers['gemini'])) { + $p = $providers['gemini']; + AiSettings::set('ai.providers.gemini.key', $p['key'] ?? ''); + if (isset($p['url'])) { + AiSettings::set('ai.providers.gemini.url', $p['url']); + } + } + + // Groq + if (isset($providers['groq'])) { + AiSettings::set('ai.providers.groq.key', $providers['groq']['key'] ?? ''); + } + + // Jina + if (isset($providers['jina'])) { + AiSettings::set('ai.providers.jina.key', $providers['jina']['key'] ?? ''); + } + + // Mistral + if (isset($providers['mistral'])) { + AiSettings::set('ai.providers.mistral.key', $providers['mistral']['key'] ?? ''); + } + + // Ollama + if (isset($providers['ollama'])) { + $p = $providers['ollama']; + AiSettings::set('ai.providers.ollama.key', $p['key'] ?? ''); + AiSettings::set('ai.providers.ollama.url', $p['url'] ?? 'http://localhost:11434'); + } + + // OpenAI + if (isset($providers['openai'])) { + $p = $providers['openai']; + AiSettings::set('ai.providers.openai.key', $p['key'] ?? ''); + if (isset($p['url'])) { + AiSettings::set('ai.providers.openai.url', $p['url']); + } + } + + // OpenRouter + if (isset($providers['openrouter'])) { + AiSettings::set('ai.providers.openrouter.key', $providers['openrouter']['key'] ?? ''); + } + + // VoyageAI + if (isset($providers['voyageai'])) { + AiSettings::set('ai.providers.voyageai.key', $providers['voyageai']['key'] ?? ''); + } + + // xAI + if (isset($providers['xai'])) { + AiSettings::set('ai.providers.xai.key', $providers['xai']['key'] ?? ''); + } + + // 清除 Laravel 配置缓存 + Artisan::call('config:clear'); + + return $this->success('保存成功'); + } catch (\Throwable $e) { + return $this->error('保存失败:' . $e->getMessage()); + } + } + + /** + * 测试 AI 供应商连接 + */ + #[PostRoute('/test', 'test')] + public function testConnection(Request $request): StreamableAgentResponse | JsonResponse + { + try { + $agent = TestAgent::make()->forUser($request->user()); + return $agent->stream('Hello, Who are you?'); + } catch (\Throwable $e) { + return $this->error('连接测试失败: ' . $e->getMessage()); + } + } +} diff --git a/modules/SystemTool/Http/Controllers/SysConfigGroupController.php b/modules/SystemTool/Http/Controllers/SysConfigGroupController.php new file mode 100644 index 0000000..9776909 --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysConfigGroupController.php @@ -0,0 +1,90 @@ +all(); + $query = SysConfigGroupModel::query(); + + if (!empty($params['keywordSearch'])) { + $query->whereAny( + ['title', 'remark', 'key'], + 'like', + '%' . str_replace('%', '\%', $params['keywordSearch']) . '%' + ); + } + + $data = $query->get()->toArray(); + return $this->success($data); + } + + /** 创建设置分组 */ + #[PostRoute(authorize: 'create')] + public function create(SysConfigGroupFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysConfigGroupModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑设置分组 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysConfigGroupFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysConfigGroupModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除设置分组 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + $model = SysConfigGroupModel::find($id); + if (empty($model)) { + return $this->error(); + } + $count = $model->settings()->count(); + if ($count > 0) { + throw new RepositoryException('当前分组有未删除的设置项!'); + } + $model->delete(); + return $this->success(); + } +} diff --git a/modules/SystemTool/Http/Controllers/SysConfigItemsController.php b/modules/SystemTool/Http/Controllers/SysConfigItemsController.php new file mode 100644 index 0000000..561b339 --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysConfigItemsController.php @@ -0,0 +1,118 @@ + '=', + ]; + + /** 查询设置项列表 */ + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + $params = $request->all(); + if (empty($params['group_id'])) { + throw new RepositoryException('请选择设置分组'); + } + $query = SysConfigItemsModel::query(); + $data = $this->buildSearch($params, $query) + ->orderBy('sort', 'desc') + ->get() + ->toArray(); + return $this->success($data); + } + + /** 创建设置项 */ + #[PostRoute(authorize: 'create')] + public function create(SysConfigItemsFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysConfigItemsModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑设置项 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysConfigItemsFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysConfigItemsModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除设置项 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + $model = SysConfigItemsModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->delete(); + return $this->success(); + } + + /** 批量保存设置 */ + #[PutRoute('/save', 'save')] + public function save(): JsonResponse + { + $configs = request()->input('configs'); + if (empty($configs) || !is_array($configs)) { + return $this->error('请提供设置数据'); + } + + $result = SysConfigService::batchSetConfig($configs); + + if ($result['success']) { + SysConfigService::refreshConfig(); + return $this->success('保存成功'); + } + + // 收集失败项的名称用于提示 + $failedTitles = array_column($result['errors'], 'title'); + $message = '部分设置保存失败:' . implode('、', $failedTitles); + return $this->success(['errors' => $result['errors']], $message); + } + + /** 刷新设置 */ + #[PostRoute('/refreshCache', 'refresh')] + public function refreshCache(): JsonResponse + { + SysConfigService::refreshConfig(); + return $this->success('重载成功'); + } +} diff --git a/modules/SystemTool/Http/Controllers/SysDictController.php b/modules/SystemTool/Http/Controllers/SysDictController.php new file mode 100644 index 0000000..ce14d00 --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysDictController.php @@ -0,0 +1,97 @@ + '=' + ]; + + /** 查询字典列表 */ + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + $params = $request->all(); + $pageSize = $params['pageSize'] ?? 10; + $query = SysDictModel::query(); + $data = $this->buildSearch($params, $query) + ->paginate($pageSize) + ->toArray(); + return $this->success($data); + } + + /** 创建字典 */ + #[PostRoute(authorize: 'create')] + public function create(SysDictFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysDictModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑字典 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysDictFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysDictModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除字典 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + $model = SysDictModel::find($id); + if (empty($model)) { + throw new RepositoryException('字典不存在'); + } + $count = $model->dictItems()->count(); + if ($count > 0) { + throw new RepositoryException('字典包含子项,请先删除子项!'); + } + $model->delete(); + return $this->success(); + } + + /** 获取所有字典数据 */ + #[GetRoute('/all', false)] + public function all(): JsonResponse + { + $data = SysDictModel::getAllDictWithItems(); + return $this->success($data); + } +} diff --git a/modules/SystemTool/Http/Controllers/SysDictItemController.php b/modules/SystemTool/Http/Controllers/SysDictItemController.php new file mode 100644 index 0000000..2719c4b --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysDictItemController.php @@ -0,0 +1,87 @@ + '=', + 'status' => '=' + ]; + + public function __construct() {} + + /** 查询字典项列表 */ + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + $params = $request->all(); + $pageSize = $params['pageSize'] ?? 10; + $query = SysDictItemModel::query(); + $data = $this->buildSearch($params, $query) + ->paginate($pageSize) + ->toArray(); + return $this->success($data); + } + + /** 创建字典项 */ + #[PostRoute(authorize: 'create')] + public function create(SysDictItemFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysDictItemModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑字典项 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysDictItemFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysDictItemModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除字典项 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + $model = SysDictItemModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->delete(); + return $this->success(); + } +} diff --git a/modules/SystemTool/Http/Controllers/SysFileController.php b/modules/SystemTool/Http/Controllers/SysFileController.php new file mode 100644 index 0000000..cb58cc5 --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysFileController.php @@ -0,0 +1,183 @@ + '=', + 'name' => 'like', + 'file_type' => '=', + ]; + + public function __construct( + protected SysFileService $service + ) {} + + /** 查询文件列表 */ + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + $params = $request->all(); + $pageSize = $params['pageSize'] ?? 10; + $query = SysFileModel::query(); + $data = $this->buildSearch($params, $query) + ->paginate($pageSize) + ->toArray(); + return $this->success($data); + } + + /** 上传文件 */ + #[PostRoute('/upload', 'upload')] + public function uploadImage(Request $request): JsonResponse + { + $data = $request->validate([ + 'file' => 'required|file', + 'group_id' => [ + 'required', 'integer', + function ($attribute, $value, $fail) { + if ($value == 0) { + return; + } + if (!\DB::table('sys_file_group')->where('id', $value)->exists()) { + $fail('所选的分组 ID 不存在。'); + } + }, + ], + ]); + $result = $this->service->upload( + $data['file'], + $data['group_id'], + 10, + Auth::id() + ); + return $this->success($result); + } + + /** 获取回收站文件列表 */ + #[GetRoute('/trashed', 'trashed')] + public function trashed(): JsonResponse + { + $list = $this->service->getTrashedList(request()->all()); + return $this->success($list); + } + + /** 删除文件(软删除) */ + #[DeleteRoute('/{id}', authorize: 'delete', where: ['id' => '[0-9]+'])] + public function delete(int $id): JsonResponse + { + $this->service->delete($id); + return $this->success(); + } + + /** 批量删除文件 */ + #[DeleteRoute('/batch/delete', 'delete')] + public function batchDelete(Request $request): JsonResponse + { + $ids = $request->input('ids', []); + $count = $this->service->batchDelete($ids); + return $this->success(['count' => $count]); + } + + /** 彻底删除文件 */ + #[DeleteRoute('/force-delete/{id}', 'force-delete', where: ['id' => '[0-9]+'])] + public function forceDelete(int $id): JsonResponse + { + $this->service->forceDelete($id); + return $this->success(); + } + + /** 批量彻底删除文件 */ + #[DeleteRoute('/batch/force-delete', 'force-delete')] + public function batchForceDelete(Request $request): JsonResponse + { + $ids = $request->input('ids', []); + $count = $this->service->batchForceDelete($ids); + return $this->success(['count' => $count]); + } + + /** 恢复文件 */ + #[PostRoute('/restore/{id}', 'restore', where: ['id' => '[0-9]+'])] + public function restore(int $id): JsonResponse + { + $this->service->restore($id); + return $this->success(); + } + + /** 批量恢复文件 */ + #[PostRoute('/batch/restore', 'restore')] + public function batchRestore(Request $request): JsonResponse + { + $ids = $request->input('ids', []); + $count = $this->service->batchRestore($ids); + return $this->success(['count' => $count]); + } + + /** 复制文件 */ + #[PostRoute('/copy', 'copy')] + public function copy(SysFileMoveOrCopyRequest $request): JsonResponse + { + $data = $request->validated(); + if(! is_array($data['ids'])) { + $result = $this->service->copy($data['ids'], $data['group_id']); + } else { + $result = $this->service->batchCopy($data['ids'], $data['group_id']); + } + return $this->success($result); + } + + /** 移动文件 */ + #[PostRoute('/move', 'move')] + public function move(SysFileMoveOrCopyRequest $request): JsonResponse + { + $data = $request->validated(); + if(! is_array($data['ids'])) { + $result = $this->service->move($data['ids'], $data['group_id']); + } else { + $result = $this->service->batchMove($data['ids'], $data['group_id']); + } + return $this->success($result); + } + + /** 重命名文件 */ + #[PutRoute('/rename/{id}', 'rename', where: ['id' => '[0-9]+'])] + public function rename(int $id, Request $request): JsonResponse + { + $newName = $request->input('name'); + $this->service->rename($id, $newName); + return $this->success(); + } + + /** 下载文件 */ + #[GetRoute('/download/{id}', false, where: ['id' => '[0-9]+'])] + public function download(int $id): StreamedResponse + { + return $this->service->download($id); + } + + /** 清空回收站文件 */ + #[DeleteRoute('/clean/trashed', 'clean-trashed')] + public function cleanTrashed(Request $request): JsonResponse + { + $count = $this->service->cleanTrashed(); + return $this->success(['count' => $count]); + } +} diff --git a/modules/SystemTool/Http/Controllers/SysFileGroupController.php b/modules/SystemTool/Http/Controllers/SysFileGroupController.php new file mode 100644 index 0000000..209b8be --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysFileGroupController.php @@ -0,0 +1,89 @@ +orderBy('sort', 'asc'); + $keywordSearch = request()->input('keywordSearch', ''); + if (isset($keywordSearch) && $keywordSearch != '') { + $query->whereAny( + ['name'], + 'like', + '%' . str_replace('%', '\%', $keywordSearch) . '%' + ); + return $this->success($query->get()->toArray()); + } + $group = $query->get()->toArray(); + return $this->success(getTreeData($group)); + } + + /** 创建文件分组 */ + #[PostRoute(authorize: 'create')] + public function create(SysFileGroupFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysFileGroupModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑文件分组 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysFileGroupFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysFileGroupModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除文件分组 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + $model = SysFileGroupModel::find($id); + if (empty($model)) { + throw new RepositoryException('Model not found'); + } + if ($model->countFiles > 0) { + throw new RepositoryException('该文件夹下存在文件,无法删除'); + } + $model->delete(); + return $this->success(); + } +} diff --git a/modules/SystemTool/Http/Controllers/SysIndexController.php b/modules/SystemTool/Http/Controllers/SysIndexController.php new file mode 100644 index 0000000..c586313 --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysIndexController.php @@ -0,0 +1,22 @@ +success($web_setting); + } + +} diff --git a/modules/SystemTool/Http/Controllers/SysMailController.php b/modules/SystemTool/Http/Controllers/SysMailController.php new file mode 100644 index 0000000..f238d90 --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysMailController.php @@ -0,0 +1,150 @@ + 'single', + 'mailers' => $mailers + ]; + if($mode === 'failover' || $mode == 'roundrobin') { + $other['mode'] = $mode; + $mail['default'] = $mailers[0] ?? 'smtp'; + } + return $this->success([ + 'other' => $other, + 'mail' => $mail, + 'services' => config('services') + ]); + } + + /** + * 保存邮件配置到数据库 + * + * 使用 MailSettings::set() 将每个配置项写入 应用配置 表, + * 写入后自动更新缓存,并通过全局中间件同步到 config() 运行时。 + */ + #[PostRoute('/save', 'save')] + public function saveConfig(): JsonResponse + { + $data = request()->all(); + + // 解析前端提交的数据结构 + $other = $data['other'] ?? []; + $mail = $data['mail'] ?? []; + $services = $data['services'] ?? []; + + // 确定模式并构建 mailers 配置 + $mode = $other['mode'] ?? 'single'; + $selectedMailers = $other['mailers'] ?? []; + + try { + // 邮件默认驱动 + if ($mode === 'single') { + MailSettings::set('mail.default', $mail['default'] ?? 'smtp'); + } elseif ($mode === 'failover') { + MailSettings::set('mail.default', 'failover'); + MailSettings::set('mail.mailers.failover.mailers', $selectedMailers); + } elseif ($mode === 'roundrobin') { + MailSettings::set('mail.default', 'roundrobin'); + MailSettings::set('mail.mailers.roundrobin.mailers', $selectedMailers); + } + + // SMTP 配置 + if (isset($mail['mailers']['smtp'])) { + $smtp = $mail['mailers']['smtp']; + MailSettings::set('mail.mailers.smtp.host', $smtp['host'] ?? '127.0.0.1'); + MailSettings::set('mail.mailers.smtp.port', (int) ($smtp['port'] ?? 587)); + MailSettings::set('mail.mailers.smtp.username', $smtp['username'] ?? ''); + MailSettings::set('mail.mailers.smtp.password', $smtp['password'] ?? ''); + } + + // 发件人配置 + if (isset($mail['from'])) { + MailSettings::set('mail.from.address', $mail['from']['address'] ?? ''); + MailSettings::set('mail.from.name', $mail['from']['name'] ?? ''); + } + + // 日志驱动配置 + if (isset($mail['mailers']['log'])) { + MailSettings::set('mail.mailers.log.channel', $mail['mailers']['log']['channel'] ?? 'stack'); + } + + // 第三方服务配置 + if (isset($services['postmark'])) { + MailSettings::set('services.postmark.token', $services['postmark']['token'] ?? ''); + } + if (isset($services['ses'])) { + MailSettings::set('services.ses.key', $services['ses']['key'] ?? ''); + MailSettings::set('services.ses.secret', $services['ses']['secret'] ?? ''); + MailSettings::set('services.ses.region', $services['ses']['region'] ?? 'us-east-1'); + MailSettings::set('services.ses.token', $services['ses']['token'] ?? ''); + } + if (isset($services['resend'])) { + MailSettings::set('services.resend.key', $services['resend']['key'] ?? ''); + } + if (isset($services['mailgun'])) { + MailSettings::set('services.mailgun.domain', $services['mailgun']['domain'] ?? ''); + MailSettings::set('services.mailgun.secret', $services['mailgun']['secret'] ?? ''); + MailSettings::set('services.mailgun.endpoint', $services['mailgun']['endpoint'] ?? 'api.mailgun.net'); + } + + // 清除 Laravel 配置缓存 + Artisan::call('config:clear'); + + return $this->success('保存成功'); + } catch (\Throwable $e) { + return $this->error('保存失败:' . $e->getMessage()); + } + } + + /** + * 发送测试邮件 + */ + #[PostRoute('/test', 'test')] + public function sendTest(): JsonResponse + { + $to = request()->input('to'); + if (empty($to)) { + return $this->error('请输入收件人邮箱'); + } + try { + Mail::raw('这是一封来自 Xin Admin 的测试邮件,用于验证邮件服务配置是否正确。', function ($message) use ($to) { + $message->to($to) + ->subject('Xin Admin 邮件配置测试'); + }); + return $this->success('测试邮件发送成功'); + } catch (\Throwable $e) { + return $this->error('发送失败: ' . $e->getMessage()); + } + } + +} diff --git a/modules/SystemTool/Http/Controllers/SysStorageController.php b/modules/SystemTool/Http/Controllers/SysStorageController.php new file mode 100644 index 0000000..e54376d --- /dev/null +++ b/modules/SystemTool/Http/Controllers/SysStorageController.php @@ -0,0 +1,184 @@ + $disks['local']['root'] ?? storage_path('app/public'), + 'url' => $disks['local']['url'] ?? config('app.url') . '/storage', + 'visibility' => $disks['local']['visibility'] ?? 'public', + ]; + + // S3 / OSS 配置 + $s3 = [ + 'key' => $disks['s3']['key'] ?? '', + 'secret' => $disks['s3']['secret'] ?? '', + 'region' => $disks['s3']['region'] ?? '', + 'bucket' => $disks['s3']['bucket'] ?? '', + 'url' => $disks['s3']['url'] ?? '', + 'endpoint' => $disks['s3']['endpoint'] ?? '', + 'use_path_style_endpoint' => $disks['s3']['use_path_style_endpoint'] ?? false, + ]; + + // FTP 配置 + $ftp = [ + 'host' => $disks['ftp']['host'] ?? '', + 'username' => $disks['ftp']['username'] ?? '', + 'password' => $disks['ftp']['password'] ?? '', + 'port' => $disks['ftp']['port'] ?? 21, + 'root' => $disks['ftp']['root'] ?? '', + 'passive' => $disks['ftp']['passive'] ?? true, + 'ssl' => $disks['ftp']['ssl'] ?? false, + 'timeout' => $disks['ftp']['timeout'] ?? 30, + ]; + + // SFTP 配置 + $sftp = [ + 'host' => $disks['sftp']['host'] ?? '', + 'username' => $disks['sftp']['username'] ?? '', + 'password' => $disks['sftp']['password'] ?? '', + 'port' => $disks['sftp']['port'] ?? 22, + 'root' => $disks['sftp']['root'] ?? '', + 'timeout' => $disks['sftp']['timeout'] ?? 30, + 'private_key' => $disks['sftp']['privateKey'] ?? '', + 'passphrase' => $disks['sftp']['passphrase'] ?? '', + ]; + + return $this->success([ + 'default' => $default, + 'local' => $local, + 's3' => $s3, + 'ftp' => $ftp, + 'sftp' => $sftp, + ]); + } + + /** + * 保存存储配置到数据库 + * + * 使用 StorageSettings::set() 将每个配置项写入 应用配置 表, + * 写入后自动更新缓存,并通过全局中间件同步到 config() 运行时。 + */ + #[PostRoute('/save', 'save')] + public function saveConfig(): JsonResponse + { + $data = request()->all(); + + $default = $data['default'] ?? 'local'; + $local = $data['local'] ?? []; + $s3 = $data['s3'] ?? []; + $ftp = $data['ftp'] ?? []; + $sftp = $data['sftp'] ?? []; + + try { + // 默认存储驱动 + StorageSettings::set('filesystems.default', $default); + + // 本地存储 + if (!empty($local['url'])) { + StorageSettings::set('filesystems.disks.local.url', $local['url']); + } + + // S3 + if ($default === 's3' || !empty($s3['key'])) { + StorageSettings::set('filesystems.disks.s3.key', $s3['key'] ?? ''); + StorageSettings::set('filesystems.disks.s3.secret', $s3['secret'] ?? ''); + StorageSettings::set('filesystems.disks.s3.region', $s3['region'] ?? ''); + StorageSettings::set('filesystems.disks.s3.bucket', $s3['bucket'] ?? ''); + StorageSettings::set('filesystems.disks.s3.url', $s3['url'] ?? ''); + StorageSettings::set('filesystems.disks.s3.endpoint', $s3['endpoint'] ?? ''); + StorageSettings::set('filesystems.disks.s3.use_path_style_endpoint', (bool) ($s3['use_path_style_endpoint'] ?? false)); + } + + // FTP + if ($default === 'ftp' || !empty($ftp['host'])) { + StorageSettings::set('filesystems.disks.ftp.host', $ftp['host'] ?? ''); + StorageSettings::set('filesystems.disks.ftp.username', $ftp['username'] ?? ''); + StorageSettings::set('filesystems.disks.ftp.password', $ftp['password'] ?? ''); + StorageSettings::set('filesystems.disks.ftp.port', (int) ($ftp['port'] ?? 21)); + StorageSettings::set('filesystems.disks.ftp.root', $ftp['root'] ?? ''); + StorageSettings::set('filesystems.disks.ftp.passive', (bool) ($ftp['passive'] ?? true)); + StorageSettings::set('filesystems.disks.ftp.ssl', (bool) ($ftp['ssl'] ?? false)); + StorageSettings::set('filesystems.disks.ftp.timeout', (int) ($ftp['timeout'] ?? 30)); + } + + // SFTP + if ($default === 'sftp' || !empty($sftp['host'])) { + StorageSettings::set('filesystems.disks.sftp.host', $sftp['host'] ?? ''); + StorageSettings::set('filesystems.disks.sftp.username', $sftp['username'] ?? ''); + StorageSettings::set('filesystems.disks.sftp.password', $sftp['password'] ?? ''); + StorageSettings::set('filesystems.disks.sftp.port', (int) ($sftp['port'] ?? 22)); + StorageSettings::set('filesystems.disks.sftp.root', $sftp['root'] ?? ''); + StorageSettings::set('filesystems.disks.sftp.timeout', (int) ($sftp['timeout'] ?? 30)); + StorageSettings::set('filesystems.disks.sftp.privateKey', $sftp['private_key'] ?? ''); + StorageSettings::set('filesystems.disks.sftp.passphrase', $sftp['passphrase'] ?? ''); + } + + // 清除 Laravel 配置缓存 + Artisan::call('config:clear'); + + return $this->success('保存成功'); + } catch (\Throwable $e) { + return $this->error('保存失败:' . $e->getMessage()); + } + } + + /** + * 测试存储连接 + */ + #[PostRoute('/test', 'test')] + public function testConnection(): JsonResponse + { + $disk = request()->input('disk', 'local'); + + try { + $storage = Storage::disk($disk); + $testFile = 'storage_test_' . time() . '.txt'; + $testContent = 'XinAdmin 存储测试文件 - ' . date('Y-m-d H:i:s'); + + // 测试写入 + $storage->put($testFile, $testContent); + + // 测试读取 + $readContent = $storage->get($testFile); + if ($readContent !== $testContent) { + return $this->error('读取测试失败:内容不匹配'); + } + + // 测试删除 + $storage->delete($testFile); + + return $this->success('存储连接测试成功'); + } catch (\Throwable $e) { + return $this->error('连接测试失败: ' . $e->getMessage()); + } + } + +} diff --git a/modules/SystemTool/Http/Middleware/LoadAppSettingsMiddleware.php b/modules/SystemTool/Http/Middleware/LoadAppSettingsMiddleware.php new file mode 100644 index 0000000..f3f2f48 --- /dev/null +++ b/modules/SystemTool/Http/Middleware/LoadAppSettingsMiddleware.php @@ -0,0 +1,68 @@ +loadAllFromDB(); + }); + + // 写入 Laravel config() 运行时 + foreach ($settings as $key => $value) { + config([$key => $value]); + } + + return $next($request); + } + + /** + * 从数据库加载所有应用设置,按类型转换后返回 key → value 数组 + */ + protected function loadAllFromDB(): array + { + $rows = DB::table(SettingsDefinition::getTableName())->get(); + $result = []; + + foreach ($rows as $row) { + $result[$row->key] = match ((int) $row->type) { + ESettingType::String->value => $row->s, + ESettingType::Bool->value => is_null($row->n) ? null : (bool) $row->n, + ESettingType::Number->value => is_null($row->n) ? null : (int) $row->n, + ESettingType::Array->value => is_null($row->e) ? null : json_decode($row->e, true), + ESettingType::Object->value => is_null($row->e) ? null : unserialize(base64_decode($row->e)), + ESettingType::EncryptedString->value => is_null($row->e) ? null : Crypt::decrypt(base64_decode($row->e)), + default => $row->s ?? null, + }; + } + + return $result; + } +} diff --git a/modules/SystemTool/Http/Requests/SysConfigGroupFormRequest.php b/modules/SystemTool/Http/Requests/SysConfigGroupFormRequest.php new file mode 100644 index 0000000..a442b67 --- /dev/null +++ b/modules/SystemTool/Http/Requests/SysConfigGroupFormRequest.php @@ -0,0 +1,39 @@ +isUpdate()) { + return [ + 'key' => 'required|unique:sys_config_group,key', + 'title' => 'required', + 'remark' => 'sometimes|required', + ]; + } else { + $id = $this->route('id'); + return [ + 'key' => ['required', Rule::unique('sys_config_group', 'key')->ignore($id)], + 'title' => 'required', + 'remark' => 'sometimes|required', + ]; + } + } + + public function messages(): array + { + return [ + 'key.required' => '键名字段是必填的', + 'key.unique' => '键名已存在', + 'title.required' => '标题字段是必填的', + 'remark.required' => '备注字段是必填的', + ]; + } +} diff --git a/modules/SystemTool/Http/Requests/SysConfigItemsFormRequest.php b/modules/SystemTool/Http/Requests/SysConfigItemsFormRequest.php new file mode 100644 index 0000000..27b1ccd --- /dev/null +++ b/modules/SystemTool/Http/Requests/SysConfigItemsFormRequest.php @@ -0,0 +1,72 @@ + 'required|string', + 'key' => ['required', 'string', 'min:2', 'max:255'], + 'group_id' => 'required|exists:sys_config_group,id', + 'type' => ['required', 'string', new ConfigTypeRule], + 'describe' => 'nullable|string', + 'options' => [ + 'sometimes', + 'nullable', + 'string', + 'regex:/^(?:[^=\n]+=[^=\n]+)(?:\n[^=\n]+=[^=\n]+)*$/', + ], + 'props' => [ + 'sometimes', + 'nullable', + 'string', + 'regex:/^(?:[^=\n]+=[^=\n]+)(?:\n[^=\n]+=[^=\n]+)*$/', + ], + 'sort' => 'nullable|integer', + 'values' => 'nullable|string', + ]; + + if (!$this->isUpdate()) { + $rules['key'][] = function ($attribute, $value, $fail) { + $groupId = $this->input('group_id'); + $exists = SysConfigItemsModel::query() + ->where('group_id', $groupId) + ->where('key', $value) + ->exists(); + if ($exists) { + $fail('该键名在此分组中已存在'); + } + }; + } + + return $rules; + } + + public function messages(): array + { + return [ + 'title.required' => '标题字段是必填的', + 'title.string' => '标题字段必须是字符串', + 'key.required' => '键名字段是必填的', + 'key.string' => '键名字段必填是字符串', + 'key.min' => '键名至少需要 :min 个字符', + 'key.max' => '键名不能超过 :max 个字符', + 'group_id.required' => '分组ID是必填的', + 'group_id.exists' => '选择的分组不存在', + 'type.required' => '类型字段是必填的', + 'describe.string' => '描述必须是字符串', + 'options.regex' => '选项格式不正确,应为 key=value 格式,多个用换行分隔', + 'props.regex' => '属性格式不正确,应为 key=value 格式,多个用换行分隔', + 'sort.integer' => '排序必须是整数', + 'values.string' => '值必须是字符串', + ]; + } +} diff --git a/modules/SystemTool/Http/Requests/SysDictFormRequest.php b/modules/SystemTool/Http/Requests/SysDictFormRequest.php new file mode 100644 index 0000000..ac2cb18 --- /dev/null +++ b/modules/SystemTool/Http/Requests/SysDictFormRequest.php @@ -0,0 +1,52 @@ +isUpdate()) { + return [ + 'name' => 'required|max:100', + 'code' => 'required|max:100|unique:sys_dict,code', + 'describe' => 'nullable|max:500', + 'status' => 'required|in:0,1', + 'sort' => 'nullable|integer|min:0', + ]; + } else { + $id = $this->route('id'); + return [ + 'name' => 'required|max:100', + 'code' => [ + 'required', + 'max:100', + Rule::unique('sys_dict', 'code')->ignore($id) + ], + 'describe' => 'nullable|max:500', + 'status' => 'required|in:0,1', + 'sort' => 'nullable|integer|min:0', + ]; + } + } + + public function messages(): array + { + return [ + 'name.required' => '字典名称不能为空', + 'name.max' => '字典名称不能超过100个字符', + 'code.required' => '字典编码不能为空', + 'code.max' => '字典编码不能超过100个字符', + 'code.unique' => '字典编码已存在', + 'status.required' => '状态不能为空', + 'status.in' => '状态格式错误', + 'sort.integer' => '排序必须为整数', + 'sort.min' => '排序不能小于0', + ]; + } +} diff --git a/modules/SystemTool/Http/Requests/SysDictItemFormRequest.php b/modules/SystemTool/Http/Requests/SysDictItemFormRequest.php new file mode 100644 index 0000000..b65457f --- /dev/null +++ b/modules/SystemTool/Http/Requests/SysDictItemFormRequest.php @@ -0,0 +1,67 @@ +isUpdate()) { + $dict_id = $this->input('dict_id'); + return [ + 'dict_id' => 'required|exists:sys_dict,id', + 'label' => 'required|max:100', + 'value' => [ + 'required', + 'max:100', + Rule::unique('sys_dict_item')->where(function ($query) use ($dict_id) { + return $query->where('dict_id', $dict_id); + }) + ], + 'color' => 'nullable|string', + 'status' => 'required|in:0,1', + 'sort' => 'nullable|integer|min:0', + ]; + } else { + $id = $this->route('id'); + $dict_id = $this->input('dict_id'); + return [ + 'dict_id' => 'required|exists:sys_dict,id', + 'label' => 'required|max:100', + 'value' => [ + 'required', + 'max:100', + Rule::unique('sys_dict_item')->where(function ($query) use ($dict_id) { + return $query->where('dict_id', $dict_id); + })->ignore($id) + ], + 'color' => 'nullable|string', + 'status' => 'required|in:0,1', + 'sort' => 'nullable|integer|min:0', + ]; + } + } + + public function messages(): array + { + return [ + 'dict_id.required' => '字典ID不能为空', + 'dict_id.exists' => '字典不存在', + 'label.required' => '字典标签不能为空', + 'label.max' => '字典标签不能超过100个字符', + 'value.required' => '字典键值不能为空', + 'value.max' => '字典键值不能超过100个字符', + 'value.unique' => '该字典下已存在相同的键值', + 'color.in' => '颜色格式错误', + 'status.required' => '状态不能为空', + 'status.in' => '状态格式错误', + 'sort.integer' => '排序必须为整数', + 'sort.min' => '排序不能小于0', + ]; + } +} diff --git a/modules/SystemTool/Http/Requests/SysFileGroupFormRequest.php b/modules/SystemTool/Http/Requests/SysFileGroupFormRequest.php new file mode 100644 index 0000000..a730d10 --- /dev/null +++ b/modules/SystemTool/Http/Requests/SysFileGroupFormRequest.php @@ -0,0 +1,50 @@ +isUpdate()) { + return [ + 'parent_id' => [ + 'required', + 'integer', + function ($attribute, $value, $fail) { + if ($value != 0 && !DB::table('sys_file_group')->where('id', $value)->exists()) { + $fail('选择的上级分组不存在。'); + } + }, + ], + 'name' => 'required|string|max:255', + 'describe' => 'sometimes|string|max:500', + 'sort' => 'sometimes|integer|min:0', + ]; + } else { + return [ + 'name' => 'required|string|max:255', + 'describe' => 'sometimes|string|max:500', + 'sort' => 'sometimes|integer|min:0', + ]; + } + } + + public function messages(): array + { + return [ + 'name.required' => '分组名称不能为空', + 'name.string' => '分组名称必须是字符串', + 'name.max' => '分组名称不能超过50个字符', + 'sort.integer' => '分组排序必须是整数', + 'sort.min' => '分组排序不能为负数', + 'describe.string' => '分组描述必须是字符串', + 'describe.max' => '分组描述不能超过500个字符', + ]; + } +} diff --git a/modules/SystemTool/Http/Requests/SysFileMoveOrCopyRequest.php b/modules/SystemTool/Http/Requests/SysFileMoveOrCopyRequest.php new file mode 100644 index 0000000..3f8f752 --- /dev/null +++ b/modules/SystemTool/Http/Requests/SysFileMoveOrCopyRequest.php @@ -0,0 +1,44 @@ + [ + 'required', + 'integer', + function ($attribute, $value, $fail) { + if ($value != 0 && !DB::table('sys_file_group')->where('id', $value)->exists()) { + $fail('选择的上级部门不存在。'); + } + }, + ], + 'ids' => [ + 'required', + function ($attribute, $value, $fail) { + // 检查是否为数字 + if (is_numeric($value)) { + return; + } + // 检查是否为数字数组 + if (is_array($value)) { + foreach ($value as $item) { + if (!is_numeric($item)) { + $fail("$attribute 中的元素必须全部是数字"); + return; + } + } + return; + } + $fail("$attribute 必须是数字或数字数组"); + }, + ] + ]; + } +} diff --git a/modules/SystemTool/Models/SysConfigGroupModel.php b/modules/SystemTool/Models/SysConfigGroupModel.php new file mode 100644 index 0000000..8e700c7 --- /dev/null +++ b/modules/SystemTool/Models/SysConfigGroupModel.php @@ -0,0 +1,29 @@ +hasMany(SysConfigItemsModel::class ,'group_id', 'id'); + } + +} diff --git a/modules/SystemTool/Models/SysConfigItemsModel.php b/modules/SystemTool/Models/SysConfigItemsModel.php new file mode 100644 index 0000000..dafc417 --- /dev/null +++ b/modules/SystemTool/Models/SysConfigItemsModel.php @@ -0,0 +1,84 @@ + 'int', + 'sort' => 'int', + ]; + + protected $fillable = [ + 'key', + 'title', + 'describe', + 'values', + 'type', + 'options', + 'props', + 'group_id', + 'sort', + ]; + + protected $appends = ['options_json', 'props_json']; + + /** + * 关联设置 + * @return BelongsTo + */ + public function group(): BelongsTo + { + return $this->belongsTo(SysConfigGroupModel::class, 'id', 'group_id'); + } + + public function getOptionsJsonAttribute(): string + { + if(empty($this->options)) { + return "{}"; + } + $data = []; + $value = explode("\n", $this->options); + foreach ($value as $item) { + $item = explode('=',$item); + if(count($item) < 2) { + continue; + } + $data[] = [ + 'label' => $item[1], + 'value' => $item[0] + ]; + } + return json_encode($data); + } + + public function getPropsJsonAttribute(): string + { + if(empty($this->props)) { + return "{}"; + } + $data = []; + $value = explode("\n",$this->props); + foreach ($value as $item) { + $item = explode('=',$item); + if(count($item) < 2) { + continue; + } + if($item[1] === 'false') { + $data[$item[0]] = false; + }elseif ($item[1] === 'true') { + $data[$item[0]] = true; + }else { + $data[$item[0]] = $item[1]; + } + } + return json_encode($data); + } +} diff --git a/modules/SystemTool/Models/SysDictItemModel.php b/modules/SystemTool/Models/SysDictItemModel.php new file mode 100644 index 0000000..35b6c8f --- /dev/null +++ b/modules/SystemTool/Models/SysDictItemModel.php @@ -0,0 +1,38 @@ + 'integer', + 'status' => 'integer', + 'sort' => 'integer', + 'created_at' => 'datetime', + 'updated_at' => 'datetime' + ]; + + /** + * 字典项关联字典表 + */ + public function dict(): BelongsTo + { + return $this->belongsTo(SysDictModel::class, 'dict_id', 'id'); + } +} diff --git a/modules/SystemTool/Models/SysDictModel.php b/modules/SystemTool/Models/SysDictModel.php new file mode 100644 index 0000000..9ae431a --- /dev/null +++ b/modules/SystemTool/Models/SysDictModel.php @@ -0,0 +1,70 @@ + 'integer', + 'sort' => 'integer', + 'created_at' => 'datetime', + 'updated_at' => 'datetime' + ]; + + /** + * 关联字典子项 + */ + public function dictItems(): HasMany + { + return $this->hasMany(SysDictItemModel::class, 'dict_id', 'id') + ->orderBy('sort') + ->orderBy('id'); + } + + /** + * 获取所有字典及其子项 + * @return array + */ + public static function getAllDictWithItems(): array + { + return static::with('dictItems') + ->where('status', 0) + ->orderBy('sort') + ->orderBy('id') + ->get() + ->map(function ($dict) { + return [ + 'id' => $dict->id, + 'name' => $dict->name, + 'code' => $dict->code, + 'describe' => $dict->describe, + 'status' => $dict->status, + 'sort' => $dict->sort, + 'dict_items' => $dict->dictItems->filter(fn($item) => $item->status === 0)->map(function ($item) { + return [ + 'id' => $item->id, + 'label' => $item->label, + 'value' => $item->value, + 'color' => $item->color, + 'sort' => $item->sort, + ]; + })->values()->toArray(), + ]; + })->toArray(); + } +} diff --git a/modules/SystemTool/Models/SysFileGroupModel.php b/modules/SystemTool/Models/SysFileGroupModel.php new file mode 100644 index 0000000..7cc2e56 --- /dev/null +++ b/modules/SystemTool/Models/SysFileGroupModel.php @@ -0,0 +1,62 @@ + 'int', + 'parent_id' => 'int' + ]; + + protected $fillable = [ + 'name', + 'parent_id', + 'sort', + 'describe', + ]; + + protected $appends = ['countFiles']; + + /** + * 获取父级分组 + */ + public function parent(): BelongsTo + { + return $this->belongsTo(self::class, 'parent_id', 'id'); + } + + /** + * 获取子级分组 + */ + public function children(): HasMany + { + return $this->hasMany(self::class, 'parent_id', 'id'); + } + + /** + * 获取分组下的文件 + */ + public function files(): HasMany + { + return $this->hasMany(SysFileModel::class, 'group_id', 'id'); + } + + /** + * 获取分组下的文件数量 + */ + public function getCountFilesAttribute(): int + { + return $this->files()->count(); + } +} diff --git a/modules/SystemTool/Models/SysFileModel.php b/modules/SystemTool/Models/SysFileModel.php new file mode 100644 index 0000000..3bdbf92 --- /dev/null +++ b/modules/SystemTool/Models/SysFileModel.php @@ -0,0 +1,109 @@ + 'int', + 'channel' => 'int', + 'file_type' => 'int', + 'file_size' => 'int', + 'uploader_id' => 'int', + ]; + + protected $fillable = [ + 'group_id', + 'disk', + 'channel', + 'file_type', + 'file_name', + 'file_path', + 'file_size', + 'file_ext', + 'uploader_id', + ]; + + protected $appends = ['preview_url', 'file_url']; + + /** + * 获取文件所属分组 + */ + public function group(): BelongsTo + { + return $this->belongsTo(SysFileGroupModel::class, 'group_id', 'id'); + } + + /** + * 获取上传者 + * 根据channel字段判断是系统用户还是App用户 + */ + public function uploader(): BelongsTo + { + // channel 10:系统用户 20:App用户端 + if ($this->channel == 10) { + return $this->belongsTo(SysUserModel::class, 'uploader_id', 'id'); + } else { + return $this->belongsTo(UserModel::class, 'uploader_id', 'id'); + } + } + + protected function previewUrl(): Attribute + { + return new Attribute( + get: function ($value, array $data) { + try { + // 图片类型:直接返回图片URL作为预览 + if ($data['file_type'] === FileType::IMAGE->value) { + if($data['disk'] === 'local') { + return Storage::disk($data['disk'])->url($data['file_path']); + } + return Storage::disk($data['disk'])->temporaryUrl( + $data['file_path'], now()->plus(minutes: 5) + ); + } + $fileType = FileType::tryFrom($data['file_type']); + // 其他类型:返回默认类型图标 + $previewPath = $fileType?->previewPath() ?? FileType::ANNEX->previewPath(); + return config('app.url') . '/' . $previewPath; + + } catch (\Throwable $e) { + // 发生异常时返回默认图标 + return config('app.url') . '/' . FileType::ANNEX->previewPath(); + } + } + ); + } + + /** + * 获取文件访问URL + */ + protected function fileUrl(): Attribute + { + return new Attribute( + get: function ($value, array $data) { + try { + return Storage::disk($data['disk'])->url($data['file_path']); + } catch (\Throwable $e) { + return null; + } + } + ); + } +} diff --git a/modules/SystemTool/Providers/SystemToolServiceProvider.php b/modules/SystemTool/Providers/SystemToolServiceProvider.php new file mode 100644 index 0000000..29c943d --- /dev/null +++ b/modules/SystemTool/Providers/SystemToolServiceProvider.php @@ -0,0 +1,45 @@ +app->singleton(SysConfigService::class, SysConfigService::class); + } + + /** + * Bootstrap any application services. + */ + public function boot(AnnoRoute $annoRoute): void + { + Boost::registerAgent('reasonix', Reasonix::class); + + // 注册路由 + $annoRoute->register(base_path('modules/SystemTool/Http/Controllers')); + + try { + DB::connection()->getPDO(); + if (Schema::hasTable('sys_setting_items')) { + // 刷新系统设置缓存 + SysConfigService::refreshConfig(); + } + } catch (Exception $e) { + + } + } +} diff --git a/modules/SystemTool/Rules/ConfigTypeRule.php b/modules/SystemTool/Rules/ConfigTypeRule.php new file mode 100644 index 0000000..7495e32 --- /dev/null +++ b/modules/SystemTool/Rules/ConfigTypeRule.php @@ -0,0 +1,23 @@ +get(); + $settings = []; + + foreach ($groups as $group) { + $settings[$group->key] = []; + foreach ($group->settings as $setting) { + // 根据类型自动转换值 + $settings[$group->key][$setting->key] = self::castValue($setting->values, $setting->type); + } + } + + // 使用带过期时间的缓存,而非永久缓存 + Cache::put(self::getCacheKey(), $settings, self::CACHE_TTL); + + Log::info('系统配置缓存已刷新', ['settings_count' => count($settings)]); + return true; + } catch (\Throwable $e) { + Log::error('刷新系统配置缓存失败', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString() + ]); + return false; + } + } + + /** + * 获取设置 + * @param string|null $name 设置名称,格式:'group.key' 或 'group',为null时返回所有配置 + * @param mixed $default 默认值 + * @return mixed + */ + public static function getConfig(?string $name = null, mixed $default = null): mixed + { + $settings = Cache::get(self::getCacheKey()); + + // 缓存不存在时重新加载 + if (empty($settings)) { + self::refreshConfig(); + $settings = Cache::get(self::getCacheKey(), []); + } + + // 返回所有配置 + if (is_null($name)) { + return $settings; + } + + // 解析配置路径 + $keys = explode('.', $name); + + // 支持多级获取:group.key 或 group + if (count($keys) === 2) { + return $settings[$keys[0]][$keys[1]] ?? $default; + } elseif (count($keys) === 1) { + return $settings[$keys[0]] ?? $default; + } + + return $default; + } + + /** + * 设置配置项(更新配置并刷新缓存) + * @param int $id 设置ID + * @param mixed $value 设置值 + * @return bool + */ + public static function setConfig(int $id, mixed $value): bool + { + try { + + // 查找设置组和设置项 + $setting = SysConfigItemsModel::find($id); + if (!$setting) { + throw new \RuntimeException("设置项不存在: {$id}"); + } + + // 更新值 + $setting->values = is_array($value) || is_object($value) ? json_encode($value) : (string)$value; + $setting->save(); + + return true; + } catch (\Throwable $e) { + Log::error('设置配置项失败', [ + 'id' => $id, + 'value' => $value, + 'error' => $e->getMessage() + ]); + return false; + } + } + + /** + * 批量保存设置项 + * + * 先验证所有 ID 是否存在,再在事务内统一更新。 + * 任一保存失败则全部回滚。 + * + * @param array $settings [['id' => int, 'values' => mixed], ...] + * @return array{success: bool, errors: array} + */ + public static function batchSetConfig(array $settings): array + { + $errors = []; + $ids = array_column($settings, 'id'); + $items = SysConfigItemsModel::whereIn('id', $ids)->get()->keyBy('id'); + + // 先验证所有 ID 是否存在,收集缺失项信息 + foreach ($settings as $item) { + $id = (int)$item['id']; + if (!$items->has($id)) { + $errors[] = [ + 'key' => "unknown_{$id}", + 'title' => "未知设置(ID: {$id})", + ]; + } + } + + if (!empty($errors)) { + return ['success' => false, 'errors' => $errors]; + } + + // 事务内执行批量更新 + try { + DB::transaction(function () use ($settings, $items) { + foreach ($settings as $item) { + $id = (int)$item['id']; + $model = $items->get($id); + $value = $item['value']; + $model->values = is_array($value) || is_object($value) ? json_encode($value) : (string)$value; + $model->save(); + } + }); + return ['success' => true, 'errors' => []]; + } catch (\Throwable $e) { + Log::error('批量保存设置项事务失败', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]); + // 事务已回滚,收集所有项的报告信息 + foreach ($settings as $item) { + $id = (int)$item['id']; + $model = $items->get($id); + $errors[] = [ + 'key' => $model ? $model->key : "unknown_{$id}", + 'title' => $model ? $model->title : "未知设置(ID: {$id})", + ]; + } + return ['success' => false, 'errors' => $errors]; + } + } + + /** + * 检查配置项是否存在 + * @param string $name + * @return bool + */ + public static function has(string $name): bool + { + $keys = explode('.', $name); + $settings = Cache::get(self::getCacheKey(), []); + + if (count($keys) === 2) { + return isset($settings[$keys[0]][$keys[1]]); + } elseif (count($keys) === 1) { + return isset($settings[$keys[0]]); + } + + return false; + } + + /** + * 清除设置缓存 + * @return bool + */ + public static function clearCache(): bool + { + return Cache::forget(self::getCacheKey()); + } + + /** + * 根据类型转换值 + * @param mixed $value 原始值 + * @param string $type 类型(对应前端表单组件类型) + * @return mixed + */ + private static function castValue(mixed $value, string $type): mixed + { + // 空值直接返回 + if (is_null($value) || $value === '') { + return $value; + } + + // 尝试转换为枚举类型 + $settingType = SiteConfigType::fromString($type); + + // 如果无法识别类型,返回字符串 + if (is_null($settingType)) { + return (string)$value; + } + + // 使用枚举判断进行类型转换 + if ($settingType->isNumeric()) { + return is_numeric($value) + ? (str_contains((string)$value, '.') ? (float)$value : (int)$value) + : $value; + } + + if ($settingType->isBoolean()) { + return self::toBool($value); + } + + if ($settingType->isArray()) { + return self::toArrayValue($value); + } + + return (string)$value; + } + + /** + * 转换为布尔值 + * @param mixed $value + * @return bool + */ + private static function toBool(mixed $value): bool + { + if (is_bool($value)) { + return $value; + } + + if (is_numeric($value)) { + return (bool)(int)$value; + } + + if (is_string($value)) { + $value = strtolower(trim($value)); + return in_array($value, ['true', '1', 'yes', 'on'], true); + } + + return filter_var($value, FILTER_VALIDATE_BOOLEAN); + } + + /** + * 转换为数组值(兼容 Checkbox、JSON、Array 类型) + * @param mixed $value + * @return array|bool + */ + private static function toArrayValue(mixed $value): array|bool + { + // 如果是 JSON 字符串,尝试解析为数组 + if (is_string($value)) { + $decoded = json_decode($value, true); + if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) { + return $decoded; + } + // Checkbox 单个值转为布尔 + return self::toBool($value); + } + + // 已经是数组直接返回 + if (is_array($value)) { + return $value; + } + + // 其他情况转为布尔(Checkbox 单选) + return self::toBool($value); + } + + /** + * 获取缓存KEY + * @return string + */ + private static function getCacheKey(): string + { + return config('site_config.cache_key', 'site_config'); + } +} diff --git a/modules/SystemTool/Services/SysFileService.php b/modules/SystemTool/Services/SysFileService.php new file mode 100644 index 0000000..05c725f --- /dev/null +++ b/modules/SystemTool/Services/SysFileService.php @@ -0,0 +1,477 @@ +paginate($pageSize) + ->toArray(); + } + + /** + * 获取存储磁盘实例 + */ + protected function disk($disk = null): FilesystemAdapter + { + if(!$disk) { + $disk = config('filesystems.default'); + } + if ($disk === 's3' && !self::isS3Configured()) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.storage.s3_not_configured')]); + } + /** @var FilesystemAdapter */ + return Storage::disk($disk); + } + + /** + * 生成存储路径 + */ + protected function generateStoragePath(string $extension): string + { + return date('Ymd') . '/' . uniqid() . '.' . $extension; + } + + /** + * 上传文件 + * @param UploadedFile $file 文件 + * @param int $groupId 分组 ID + * @param int $channel 上传来源 0:匿名用户,10:后台用户,20:APP用户 + * @param int|null $user_id 上传用户 ID + * @return array + */ + public function upload(UploadedFile $file, int $groupId = 0, int $channel = 0, ?int $user_id = null): array + { + // 文件扩展名 + $fileExt = strtolower($file->getClientOriginalExtension() ?: $file->extension()); + + if (empty($fileExt)) { + throw new HttpResponseException(['success' => false, 'msg' => '无法识别的文件扩展名']); + } + // 推断文件类型 + $fileType = FileType::guessFromExtension($fileExt); + // 获取储存路径 + $storagePath = $this->generateStoragePath($fileExt); + // 获取磁盘 + $disk = StorageSettings::get('filesystems.default', 'local'); + // 存储文件并设置可见性 + $stored = $this->disk($disk)->put($storagePath, $file->getContent(), 'public'); + if (!$stored) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.upload_failed')]); + } + // 保存到数据库 + $model = new SysFileModel(); + $model->disk = $disk; + $model->group_id = $groupId; + $model->channel = $channel; + $model->file_type = $fileType->value; + $model->file_path = $storagePath; + $model->file_name = $file->getClientOriginalName(); + $model->file_size = $file->getSize(); + $model->file_ext = $fileExt; + $model->uploader_id = $user_id; + $model->save(); + return $model->toArray(); + } + + /** + * 软删除文件(移入回收站) + */ + public function delete(int $id): bool + { + $file = SysFileModel::find($id); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + return (bool) $file->delete(); + } + + /** + * 批量软删除文件 + */ + public function batchDelete(array $fileIds): int + { + return SysFileModel::whereIn('id', $fileIds)->delete(); + } + + /** + * 恢复已删除的文件 + */ + public function restore(int $fileId): bool + { + $file = SysFileModel::withTrashed()->find($fileId); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + return $file->restore(); + } + + /** + * 批量恢复文件 + */ + public function batchRestore(array $fileIds): int + { + return SysFileModel::withTrashed()->whereIn('id', $fileIds)->restore(); + } + + /** + * 彻底删除文件(含物理删除) + */ + public function forceDelete(int $fileId): bool + { + $file = SysFileModel::withTrashed()->find($fileId); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + // 删除物理文件 + $this->disk($file->disk)->delete($file->file_path); + + return (bool) $file->forceDelete(); + } + + /** + * 批量彻底删除文件 + */ + public function batchForceDelete(array $fileIds): int + { + $files = SysFileModel::withTrashed()->whereIn('id', $fileIds)->get(); + $count = 0; + + foreach ($files as $file) { + $this->disk($file->disk)->delete($file->file_path); + $file->forceDelete(); + $count++; + } + + return $count; + } + + /** + * 下载文件 + */ + public function download(int $fileId, ?string $filename = null): StreamedResponse + { + $file = SysFileModel::find($fileId); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + $downloadName = $filename ?? $file->file_name; + return $this->disk($file->disk)->download($file->file_path, $downloadName); + } + + /** + * 获取文件流式响应(用于在线预览等场景) + */ + public function stream(int $fileId): StreamedResponse + { + $file = SysFileModel::find($fileId); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + $mimeType = $this->getMimeType($file->file_ext); + + return response()->stream( + function () use ($file) { + $stream = $this->disk($file->disk)->readStream($file->file_path); + fpassthru($stream); + if (is_resource($stream)) { + fclose($stream); + } + }, + 200, + [ + 'Content-Type' => $mimeType, + 'Content-Disposition' => 'inline; filename="' . $file->file_name . '"', + ] + ); + } + + /** + * 获取文件内容 + */ + public function getContent(int $fileId): string + { + $file = SysFileModel::find($fileId); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + return $this->disk($file->disk)->get($file->file_path); + } + + /** + * 获取文件访问URL + */ + public function getUrl(int $fileId): ?string + { + $file = SysFileModel::find($fileId); + if (!$file) { + return null; + } + + return $this->disk($file->disk)->url($file->file_path); + } + + /** + * 根据路径获取访问URL + */ + public function getUrlByPath(string $path, ?string $disk = null): string + { + return $this->disk($disk)->url($path); + } + + /** + * 获取文件元数据信息 + */ + public function getMetadata(int $fileId): ?array + { + $file = SysFileModel::find($fileId); + if (!$file) { + return null; + } + + $disk = $this->disk($file->disk); + + return [ + 'id' => $file->id, + 'name' => $file->file_name, + 'path' => $file->file_path, + 'disk' => $file->disk, + 'size' => $file->file_size, + 'extension' => $file->file_ext, + 'mime_type' => $this->getMimeType($file->file_ext), + 'last_modified' => $disk->exists($file->file_path) + ? date('Y-m-d H:i:s', $disk->lastModified($file->file_path)) + : null, + 'url' => $this->getUrl($file->id), + 'group_id' => $file->group_id, + 'uploader_id' => $file->uploader_id, + 'created_at' => $file->created_at?->format('Y-m-d H:i:s'), + 'updated_at' => $file->updated_at?->format('Y-m-d H:i:s'), + ]; + } + + /** + * 复制文件 + */ + public function copy(int $fileId, int $targetGroupId = 0): array + { + $file = SysFileModel::find($fileId); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + $newPath = $this->generateStoragePath($file->file_ext); + + $this->disk($file->disk)->copy($file->file_path, $newPath); + + // 创建新的文件记录 + $newFile = SysFileModel::create([ + 'disk' => $file->disk, + 'group_id' => $targetGroupId, + 'channel' => $file->channel, + 'file_name' => $file->file_name, + 'file_type' => $file->file_type, + 'file_path' => $newPath, + 'file_size' => $file->file_size, + 'file_ext' => $file->file_ext, + 'uploader_id' => Auth::id(), + ]); + + return $newFile->toArray(); + } + + /** + * 批量复制文件 + */ + public function batchCopy(array $fileIds, int $targetGroupId = 0): bool + { + $files = SysFileModel::whereIn('id', $fileIds)->get(); + $fileArray = []; + + foreach ($files as $file) { + + $newPath = $this->generateStoragePath($file->file_ext); + + $this->disk($file->disk)->copy($file->file_path, $newPath); + + $fileArray[] =[ + 'disk' => $file->disk, + 'group_id' => $targetGroupId, + 'channel' => $file->channel, + 'file_name' => $file->file_name, + 'file_type' => $file->file_type, + 'file_path' => $newPath, + 'file_size' => $file->file_size, + 'file_ext' => $file->file_ext, + 'uploader_id' => Auth::id(), + 'created_at' => now(), + 'updated_at' => now(), + ]; + } + return SysFileModel::insert($fileArray); + } + + /** + * 移动文件 + */ + public function move(int $fileId, int $groupId): bool + { + $file = SysFileModel::find($fileId); + return $file->update(['group_id' => $groupId]); + } + + /** + * 批量移动 + */ + public function batchMove(array $fileIds, int $groupId): int + { + return SysFileModel::whereIn('id', $fileIds)->update(['group_id' => $groupId]); + } + + /** + * 重命名文件 + */ + public function rename(int $fileId, string $newName): bool + { + $file = SysFileModel::find($fileId); + if (!$file) { + throw new HttpResponseException(['success' => false, 'msg' => __('system.file.not_found')]); + } + + return $file->update(['file_name' => $newName]); + } + + /** + * 检查文件是否存在 + */ + public function exists(int $fileId): bool + { + $file = SysFileModel::find($fileId); + if (!$file) { + return false; + } + + return $this->disk($file->disk)->exists($file->file_path); + } + + /** + * 获取文件大小(字节) + */ + public function getSize(int $fileId): ?int + { + $file = SysFileModel::find($fileId); + if (!$file) { + return null; + } + + return $this->disk($file->disk)->size($file->file_path); + } + + /** + * 获取MIME类型 + */ + protected function getMimeType(string $extension): string + { + $mimeTypes = [ + // 图片 + 'jpg' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'png' => 'image/png', + 'gif' => 'image/gif', + 'webp' => 'image/webp', + 'avif' => 'image/avif', + 'bmp' => 'image/bmp', + 'svg' => 'image/svg+xml', + // 音频 + 'mp3' => 'audio/mpeg', + 'wav' => 'audio/wav', + 'ogg' => 'audio/ogg', + 'flac' => 'audio/flac', + 'aac' => 'audio/aac', + // 视频 + 'mp4' => 'video/mp4', + 'webm' => 'video/webm', + 'mkv' => 'video/x-matroska', + 'mov' => 'video/quicktime', + 'avi' => 'video/x-msvideo', + // 文档 + 'pdf' => 'application/pdf', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'xls' => 'application/vnd.ms-excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + // 压缩包 + 'zip' => 'application/zip', + 'rar' => 'application/vnd.rar', + '7z' => 'application/x-7z-compressed', + // 其他 + 'json' => 'application/json', + 'xml' => 'application/xml', + 'txt' => 'text/plain', + ]; + + return $mimeTypes[strtolower($extension)] ?? 'application/octet-stream'; + } + + /** + * 清空回收站文件 + */ + public function cleanTrashed(): int + { + $expiredFiles = SysFileModel::onlyTrashed()->get(); + $count = 0; + foreach ($expiredFiles as $file) { + $this->disk($file->disk)->delete($file->file_path); + $file->forceDelete(); + $count++; + } + return $count; + } + + + /** + * 检查 S3 配置是否有效 + * @return bool + */ + public static function isS3Configured(): bool + { + $storageConfig = config('filesystems.disks.s3'); + + if (empty($storageConfig)) { + return false; + } + + return !empty($storageConfig['key']) + && !empty($storageConfig['secret']) + && !empty($storageConfig['bucket']) + && !empty($storageConfig['region']); + } +} diff --git a/modules/SystemTool/Settings/AiSettings.php b/modules/SystemTool/Settings/AiSettings.php new file mode 100644 index 0000000..c3d215d --- /dev/null +++ b/modules/SystemTool/Settings/AiSettings.php @@ -0,0 +1,79 @@ +validate([ + 'username' => 'required|min:3|alphaDash', + 'password' => 'required|min:4|alphaDash', + ]); + + if (Auth::guard('sys_users')->attempt($credentials)) { + $userID = auth()->id(); + $user = SysUserModel::find($userID); + $access = $user->access(); + if($request->input('remember', false)) { + $expiration = null; + } else { + $expiration = now()->addDays(3); + } + $data = $request->user() + ->createToken($credentials['username'], $access, $expiration) + ->toArray(); + if(empty($data['plainTextToken'])) { + return $this->error(__('user.login_error')); + } + $response = [ + 'token' => $data['plainTextToken'] + ]; + + SysUserModel::query()->where('id', $userID)->update([ + 'login_time' => now(), + 'login_ip' => $request->ip(), + ]); + return $this->success($response, __('user.login_success')); + } + return $this->error(__('user.login_error')); + } + + /** 退出登录 */ + #[PostRoute('/logout')] + public function logout(Request $request): JsonResponse + { + $request->user()->currentAccessToken()->delete(); + return $this->success(__('user.logout_success')); + } + + /** 获取管理员信息 */ + #[GetRoute('/info')] + public function info(): JsonResponse + { + $info = Auth::user(); + $access = $info->access(); + return $this->success(compact('access','info')); + } + + /** 获取菜单信息 */ + #[GetRoute('/menu')] + public function menu(): JsonResponse + { + $id = Auth::id(); + if($id == 1) { + $menus = SysRuleModel::query() + ->where('status', 1) + ->whereIn('type', ['menu','route']) + ->get() + ->toArray(); + } else { + $roles = SysUserModel::with(['roles.rules' => function ($query) { + $query->where('status', 1)->whereIn('type', ['menu','route']); + }])->find($id)->roles->toArray(); + + $menus = collect($roles) + ->map(fn ($item) => $item['rules']) + ->collapse() + ->map(fn ($item) => collect($item)->forget(['pivot', 'updated_at', 'created_at', 'status']) ) + ->unique('id') + ->toArray(); + } + $menus = getTreeData($menus); + return $this->success(compact('menus')); + } + + /** 更新管理员信息 */ + #[PutRoute('/updateInfo')] + public function updateInfo(SysUserUpdateRequest $request): JsonResponse + { + $data = $request->validated(); + $id = auth()->id(); + $model = SysUserModel::find($id); + if (empty($model)) { + return $this->error(__('user.user_not_exist')); + } + return $this->success($model->update($data)); + } + + /** 修改密码 */ + #[PutRoute('/updatePassword')] + public function updatePassword(Request $request): JsonResponse + { + $validated = $request->validate([ + 'oldPassword' => 'required|string|min:6|max:20', + 'newPassword' => 'required|string|min:6|max:20', + 'rePassword' => 'required|same:newPassword', + ]); + $user_id = auth()->id(); + $user = SysUserModel::find($user_id); + if (! password_verify($validated['oldPassword'], $user->password)) { + return $this->error(__('user.old_password_error')); + } + $user->password = Hash::make($validated['newPassword']); + $user->save(); + return $this->success('ok'); + } + + /** 上传头像 */ + #[PostRoute('/uploadAvatar')] + public function uploadAvatar(Request $request): JsonResponse + { + $user_id = Auth::id(); + $file = $request->file('file'); + $service = new SysFileService(); + $data = $service->upload($file, 2, 20, $user_id); + $user = SysUserModel::find($user_id); + $user->avatar_id = $data['id']; + $user->save(); + return $this->success($data); + } + + /** 获取管理员登录日志 */ + #[GetRoute('/loginRecord')] + public function loginRecord(): JsonResponse + { + $id = Auth::id(); + $data = SysLoginRecordModel::where('user_id', $id) + ->limit(10) + ->orderBy('id', 'desc') + ->get() + ->toArray(); + return $this->success($data); + } + +} diff --git a/modules/SystemUser/Http/Controllers/SysDeptController.php b/modules/SystemUser/Http/Controllers/SysDeptController.php new file mode 100644 index 0000000..c25607b --- /dev/null +++ b/modules/SystemUser/Http/Controllers/SysDeptController.php @@ -0,0 +1,99 @@ +get()->toArray(); + $data = getTreeData($data); + return $this->success($data); + } + + /** 创建部门 */ + #[PostRoute(authorize: 'create')] + public function create(SysDeptFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysDeptModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑部门 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysDeptFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysDeptModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除部门 */ + #[DeleteRoute(authorize: 'delete')] + public function delete(Request $request): JsonResponse + { + $request->validate([ + 'ids' => 'required|array', + 'ids.*' => 'integer|exists:sys_dept,id' + ]); + + $ids = $request->input('ids'); + + $departmentsWithChildren = SysDeptModel::whereIn('id', $ids) + ->whereHas('children') + ->get(); + + if ($departmentsWithChildren->isNotEmpty()) { + return $this->error('存在下级部门的部门无法删除'); + } + + SysDeptModel::whereIn('id', $ids)->delete(); + return $this->success('部门删除成功'); + } + + /** 获取部门用户列表 */ + #[GetRoute('/users/{id}', 'users')] + public function users(int $id): JsonResponse + { + $model = SysDeptModel::query()->find($id); + if (empty($model)) { + return $this->error('部门不存在'); + } + $pageSize = request()->input('pageSize') ?? 10; + $data = $model->users() + ->select(['id', 'username', 'nickname', 'email', 'mobile', 'status']) + ->paginate($pageSize) + ->toArray(); + return $this->success($data); + } +} diff --git a/modules/SystemUser/Http/Controllers/SysRoleController.php b/modules/SystemUser/Http/Controllers/SysRoleController.php new file mode 100644 index 0000000..f26a235 --- /dev/null +++ b/modules/SystemUser/Http/Controllers/SysRoleController.php @@ -0,0 +1,146 @@ + '=', + 'name' => 'like', + ]; + + /** 查询角色列表 */ + #[GetRoute(authorize: 'query')] + public function query(Request $request): JsonResponse + { + $params = $request->all(); + $pageSize = $params['pageSize'] ?? 10; + $query = SysRoleModel::query(); + $data = $this->buildSearch($params, $query) + ->paginate($pageSize) + ->toArray(); + return $this->success($data); + } + + /** 创建角色 */ + #[PostRoute(authorize: 'create')] + public function create(SysRoleFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysRoleModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑角色 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysRoleFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysRoleModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除角色 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + $model = SysRoleModel::find($id); + if (empty($model)) { + throw new RepositoryException('角色不存在'); + } + if ($model->countUser > 0) { + throw new RepositoryException('该角色下存在用户,无法删除'); + } + $model->delete(); + return $this->success(); + } + + /** 获取角色用户列表 */ + #[GetRoute('/users/{id}', 'users')] + public function users(int $id): JsonResponse + { + $model = SysRoleModel::query()->find($id); + if (empty($model)) { + throw new RepositoryException('角色不存在'); + } + $pageSize = request()->input('pageSize', 10); + $data = $model->users() + ->paginate($pageSize, ['id', 'username', 'nickname', 'email', 'mobile', 'status']) + ->toArray(); + return $this->success($data); + } + + /** 设置启用状态 */ + #[PutRoute('/status/{id}', 'status')] + public function status(int $id): JsonResponse + { + $model = SysRoleModel::find($id); + if (!$model) { + return $this->error(__('system.data_not_exist')); + } + $model->status = $model->status ? 0 : 1; + $model->save(); + return $this->success(); + } + + /** 获取权限选项 */ + #[GetRoute('/ruleList', 'ruleList')] + public function ruleList(): JsonResponse + { + $data = SysRuleModel::query() + ->where("status", 1) + ->get(['name as title', 'parent_id', 'id as key', 'id', 'local']) + ->toArray(); + $data = getTreeData($data); + return $this->success($data); + } + + /** 设置角色权限 */ + #[PostRoute('/setRule', 'setRule')] + public function setRule(Request $request): JsonResponse + { + $validated = $request->validate([ + 'role_id' => 'required|exists:sys_role,id', + 'rule_ids' => 'required|array|exists:sys_rule,id', + ]); + if ($validated['role_id'] == 1) { + throw new RepositoryException('超级管理员不能修改权限'); + } + $model = SysRoleModel::findOrFail($validated['role_id']); + $model->rules()->sync($validated['rule_ids']); + return $this->success(); + } +} diff --git a/modules/SystemUser/Http/Controllers/SysRuleController.php b/modules/SystemUser/Http/Controllers/SysRuleController.php new file mode 100644 index 0000000..810b198 --- /dev/null +++ b/modules/SystemUser/Http/Controllers/SysRuleController.php @@ -0,0 +1,121 @@ + '=', + 'status' => '=', + 'show' => '=', + 'parent_id' => '=', + ]; + + /** 获取权限列表(树形) */ + #[GetRoute(authorize: 'query')] + public function query(): JsonResponse + { + $rules = SysRuleModel::all(); + $data = $rules->toArray(); + $data = getTreeData($data); + return $this->success($data); + } + + /** 创建权限 */ + #[PostRoute(authorize: 'create')] + public function create(SysRuleFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysRuleModel::create($validated); + if (empty($model)) { + return $this->error(); + } + return $this->success(); + } + + /** 编辑权限 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysRuleFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysRuleModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->update($validated); + return $this->success(); + } + + /** 删除权限 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + $model = SysRuleModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->delete(); + return $this->success(); + } + + /** 获取父级权限 */ + #[GetRoute('/parent', authorize: 'parentQuery')] + public function getRulesParent(): JsonResponse + { + $data = SysRuleModel::query() + ->whereIn('type', ['menu', 'route']) + ->get(['name', 'id', 'parent_id']) + ->toArray(); + $data = getTreeData($data); + return $this->success($data); + } + + /** 设置显示状态 */ + #[PutRoute('/show/{id}', authorize: 'show')] + public function show(int $id): JsonResponse + { + $model = SysRuleModel::find($id); + if (!$model) { + return $this->error(__('system.data_not_exist')); + } + $model->hidden = $model->hidden ? 0 : 1; + $model->save(); + return $this->success(); + } + + /** 设置启用状态 */ + #[PutRoute('/status/{id}', authorize: 'status')] + public function status(int $id): JsonResponse + { + $model = SysRuleModel::find($id); + if (!$model) { + return $this->error(__('system.data_not_exist')); + } + $model->status = $model->status ? 0 : 1; + $model->save(); + return $this->success(); + } +} diff --git a/modules/SystemUser/Http/Controllers/SysUserController.php b/modules/SystemUser/Http/Controllers/SysUserController.php new file mode 100644 index 0000000..3c135b5 --- /dev/null +++ b/modules/SystemUser/Http/Controllers/SysUserController.php @@ -0,0 +1,164 @@ +all(); + $pageSize = $params['pageSize'] ?? 10; + $query = SysUserModel::query(); + $data = $this->buildSearch($params, $query) + ->paginate($pageSize) + ->toArray(); + return $this->success($data); + } + + /** 创建管理员用户 */ + #[PostRoute(authorize: 'create')] + public function create(SysUserFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $user = SysUserModel::create([ + 'username' => $validated['username'], + 'nickname' => $validated['nickname'], + 'email' => $validated['email'], + 'mobile' => $validated['mobile'], + 'password' => Hash::make($validated['password']), + 'status' => $validated['status'] ?? 1, + 'dept_id' => $validated['dept_id'] ?? null, + 'sex' => $validated['sex'] ?? 0 + ]); + if(empty($user)) { + return $this->error(); + } + $user->roles()->sync($validated['role_id'] ?? []); + return $this->success(); + } + + /** 编辑管理员用户 */ + #[PutRoute( + route: '/{id}', + authorize: 'update', + where: ['id' => '[0-9]+'] + )] + public function update(int $id, SysUserFormRequest $request): JsonResponse + { + $validated = $request->validated(); + $model = SysUserModel::find($id); + if (empty($model)) { + return $this->error(); + } + $model->roles()->sync($validated['role_id'] ?? []); + $model->update($validated); + return $this->success(); + } + + /** 删除管理员用户 */ + #[DeleteRoute( + route: '/{id}', + authorize: 'delete', + where: ['id' => '[0-9]+'] + )] + public function delete(int $id): JsonResponse + { + if($id == 1) { + $this->error('不能删除系统用户!'); + } + $user = SysUserModel::find($id); + if (empty($user)) { + $this->error('Model not found'); + } + $user->roles()->detach(); + $user->delete(); + return $this->success(); + } + + /** 重置用户密码 */ + #[PutRoute('/resetPassword', 'resetPassword')] + public function resetPassword(Request $request): JsonResponse + { + $data = $request->validate([ + 'id' => 'required|exists:sys_user,id', + 'password' => 'required|string|min:6|max:20', + 'rePassword' => 'required|same:password', + ], [ + 'id.required' => '请选择管理员用户!', + 'id.exists' => '管理员用户不存在!', + 'password.required' => '请输入管理员密码!', + 'password.min' => '密码最短为6个字符!', + 'password.max' => '密码最长伟20个字符!', + 'rePassword.required' => '请重复输入密码!', + 'rePassword.same' => '两次输入的密码不同!', + ]); + $user = SysUserModel::find($data['id']); + if (!$user) { + return $this->error(__('user.user_not_exist')); + } + $user->password = Hash::make($data['password']); + $user->save(); + return $this->success('ok'); + } + + /** 获取用户角色选项栏数据 */ + #[GetRoute('/role', 'role')] + public function role(): JsonResponse + { + $data = SysRoleModel::where('status', 1) + ->get(['id as role_id', 'name']) + ->toArray(); + return $this->success($data); + } + + /** 获取用户部门选项栏数据 */ + #[GetRoute('/dept', 'dept')] + public function dept(): JsonResponse + { + $field = SysDeptModel::where('status', 0) + ->select(['id as dept_id', 'name', 'parent_id']) + ->get() + ->toArray(); + $data = $this->buildTree($field); + + return $this->success($data); + } + + private function buildTree(array $items, $parentId = 0): array + { + $tree = []; + foreach ($items as $item) { + if ($item['parent_id'] == $parentId) { + $children = $this->buildTree($items, $item['dept_id']); + $node = [ + 'dept_id' => $item['dept_id'], + 'name' => $item['name'], + 'children' => $children + ]; + $tree[] = $node; + } + } + return $tree; + } +} diff --git a/modules/SystemUser/Http/Middleware/AuthGuardMiddleware.php b/modules/SystemUser/Http/Middleware/AuthGuardMiddleware.php new file mode 100644 index 0000000..719148c --- /dev/null +++ b/modules/SystemUser/Http/Middleware/AuthGuardMiddleware.php @@ -0,0 +1,45 @@ +bearerToken(); + if (!$token) { + return response()->json(['msg' => 'Token not provided', 'success' => false], 401); + } + // 查找 token + $accessToken = SysAccessToken::findToken($token); + if (!$accessToken) { + return response()->json(['msg' => 'Invalid token', 'success' => false], 401); + } + if (empty($guards)) { + $guards = ['sys_users']; + } + Log::info('Guards: ', $guards); + Log::info('Auth Providers: ', config('auth.providers')); + foreach ($guards as $guard) { + Log::info('Auth Providers Model: ' . config('auth.providers.' . $guard . '.model')); + if ($accessToken->tokenable_type == config('auth.providers.' . $guard . '.model')) { + return $next($request); + } + } + return response()->json([ + 'msg' => __('user.not_login'), + 'success' => false + ], 401); + } +} diff --git a/modules/SystemUser/Http/Middleware/LoginLogMiddleware.php b/modules/SystemUser/Http/Middleware/LoginLogMiddleware.php new file mode 100644 index 0000000..83564bf --- /dev/null +++ b/modules/SystemUser/Http/Middleware/LoginLogMiddleware.php @@ -0,0 +1,111 @@ +userAgent(); + // 继续处理请求 + $response = $next($request); + $user_id = auth()->id(); + $username = auth()->user()['username']; + // 获取响应状态和消息 + $content = json_decode($response->getContent(), true); // 响应内容 + $message = $content['msg'] ?? 'No message'; // 从响应中提取消息 + SysLoginRecordModel::create([ + 'ipaddr' => $request->ip(), + 'browser' => $this->getBrowser($userAgent), + 'os' => $this->getOs($userAgent), + 'username' => $username, + 'user_id' => $user_id, + 'login_location' => $this->getLocation($request->ip()), + 'status' => $content['success'] ? '0' : '1', + 'msg' => $message, + 'login_time' => date('Y-m-d H:i:s'), + ]); + }catch (\Exception $e) { + // 记录错误日志 + Log::error('Failed to log user login info: ' . $e->getMessage()); + } + return $response; + } + + /** + * 获取浏览器信息 + * @param string $userAgent + * @return string + */ + private function getBrowser(string $userAgent): string + { + $browser = 'XXX'; + // 简单的解析逻辑(可以根据需要扩展) + if (str_contains($userAgent, 'Firefox')) { + $browser = 'Firefox'; + } elseif (str_contains($userAgent, 'Chrome')) { + $browser = 'Chrome'; + } elseif (str_contains($userAgent, 'Safari')) { + $browser = 'Safari'; + } elseif (str_contains($userAgent, 'MSIE') || str_contains($userAgent, 'Trident')) { + $browser = 'Internet Explorer'; + } + return $browser; + } + + /** + * 获取操作系统信息 + * @param string $userAgent + * @return string + */ + private function getOs(string $userAgent): string + { + $os = 'Unknown'; + if (str_contains($userAgent, 'Windows')) { + $os = 'Windows'; + } elseif (str_contains($userAgent, 'Macintosh')) { + $os = 'Mac OS'; + } elseif (str_contains($userAgent, 'Linux')) { + $os = 'Linux'; + } elseif (str_contains($userAgent, 'Android')) { + $os = 'Android'; + } elseif (str_contains($userAgent, 'iOS')) { + $os = 'iOS'; + } + return $os; + } + + /** + * 获取 IP 地址对应的地理位置 + * + * @param string $ip + * @return string + */ + private function getLocation(string $ip): string + { + if($ip == '127.0.0.1') { + return '本地'; + } + // 这里可以使用第三方 API(如 IPStack 或 IPInfo)来获取地理位置 + try { + $response = file_get_contents("https://ipinfo.io/{$ip}/json"); + $data = json_decode($response, true); + return $data['city'] . ', ' . $data['country']; + }catch (\Exception $e) { + return 'XXX'; + } + } +} diff --git a/modules/SystemUser/Http/Requests/SysDeptFormRequest.php b/modules/SystemUser/Http/Requests/SysDeptFormRequest.php new file mode 100644 index 0000000..01afd9d --- /dev/null +++ b/modules/SystemUser/Http/Requests/SysDeptFormRequest.php @@ -0,0 +1,78 @@ +isUpdate()) { + return [ + 'name' => 'required|unique:sys_dept,name', + 'code' => 'required|unique:sys_dept,code', + 'type' => 'required|integer|in:0,1,2', + 'parent_id' => [ + 'required', + 'integer', + function ($attribute, $value, $fail) { + if ($value != 0 && !DB::table('sys_dept')->where('id', $value)->exists()) { + $fail('选择的上级部门不存在。'); + } + }, + ], + 'sort' => 'required|integer', + 'phone' => 'nullable', + 'address' => 'nullable', + 'email' => 'nullable|email', + 'status' => 'required|in:0,1', + 'remark' => 'nullable', + ]; + } else { + $id = $this->route('id'); + return [ + 'name' => [ + 'required', + Rule::unique('sys_dept', 'name')->ignore($id) + ], + 'code' => [ + 'required', + Rule::unique('sys_dept', 'code')->ignore($id) + ], + 'type' => 'required|integer|in:0,1,2', + 'sort' => 'required|integer', + 'phone' => 'nullable', + 'address' => 'nullable', + 'email' => 'nullable|email', + 'status' => 'required|in:0,1', + 'remark' => 'nullable', + ]; + } + } + + public function messages(): array + { + return [ + 'name.required' => '部门名称不能为空', + 'name.unique' => '部门名称已存在', + 'code.required' => '部门编码不能为空', + 'code.unique' => '部门编码已存在', + 'type.required' => '部门类型不能为空', + 'type.integer' => '部门类型必须是整数', + 'type.in' => '部门类型错误', + 'parent_id.required' => '上级部门不能为空', + 'parent_id.integer' => '上级部门ID必须是整数', + 'parent_id.exists' => '选择的上级部门不存在', + 'sort.required' => '排序字段不能为空', + 'sort.integer' => '排序字段必须是整数', + 'email.email' => '请输入有效的邮箱地址', + 'status.required' => '状态不能为空', + 'status.in' => '状态类型错误', + ]; + } +} diff --git a/modules/SystemUser/Http/Requests/SysRoleFormRequest.php b/modules/SystemUser/Http/Requests/SysRoleFormRequest.php new file mode 100644 index 0000000..c148d07 --- /dev/null +++ b/modules/SystemUser/Http/Requests/SysRoleFormRequest.php @@ -0,0 +1,47 @@ +isUpdate()) { + return [ + 'name' => 'required|unique:sys_role,name', + 'sort' => 'required|integer|min:0', + 'description' => 'nullable|string', + 'status' => 'required|integer|in:0,1', + ]; + } else { + $id = $this->route('id'); + return [ + 'name' => [ + 'required', + 'string', + Rule::unique('sys_role', 'name')->ignore($id), + ], + 'sort' => 'required|integer|min:0', + 'description' => 'nullable|string', + 'status' => 'required|integer|in:0,1', + ]; + } + } + + public function messages(): array + { + return [ + 'name.required' => '角色名称不能为空', + 'name.unique' => '角色名称已存在', + 'sort.required' => '排序不能为空', + 'sort.integer' => '排序必须为整数', + 'status.required' => '状态不能为空', + 'status.in' => '状态格式错误', + ]; + } +} diff --git a/modules/SystemUser/Http/Requests/SysRuleFormRequest.php b/modules/SystemUser/Http/Requests/SysRuleFormRequest.php new file mode 100644 index 0000000..7b3e236 --- /dev/null +++ b/modules/SystemUser/Http/Requests/SysRuleFormRequest.php @@ -0,0 +1,86 @@ +input('type'); + if (empty($type)) { + throw new RepositoryException('权限类型为必填项!'); + } + if (!in_array($type, ['menu', 'route', 'rule'])) { + throw new RepositoryException('权限类型错误!'); + } + + $rules = [ + 'parent_id' => [ + 'required', + 'integer', + 'numeric', + function ($attribute, $value, $fail) { + if ($value != 0 && !DB::table('sys_rule')->where('id', $value)->exists()) { + $fail('选择的上级权限不存在。'); + } + }, + ], + 'order' => 'required|integer', + 'name' => 'required', + ]; + + if (!$this->isUpdate()) { + $rules['key'] = 'required|unique:sys_rule,key'; + } else { + $rules['key'] = [ + 'required', + Rule::unique('sys_rule', 'key')->ignore($this->route('id')), + ]; + } + + if ($type == 'menu') { + $rules += [ + 'type' => 'required|string|in:menu', + 'local' => 'nullable|string', + 'icon' => 'nullable|string', + ]; + } elseif ($type == 'route') { + $rules += [ + 'type' => 'required|string|in:route', + 'path' => 'required|string', + 'local' => 'nullable|string', + 'icon' => 'nullable|string', + 'link' => 'required|integer|numeric|in:0,1', + ]; + } else { + $rules += [ + 'type' => 'required|string|in:rule', + ]; + } + + return $rules; + } + + public function messages(): array + { + return [ + 'name.required' => '权限名称不能为空', + 'type.required' => '类型不能为空', + 'type.in' => '类型格式错误', + 'order.required' => '排序不能为空', + 'order.integer' => '排序必须为整数', + 'key.required' => '唯一标识不能为空', + 'key.unique' => '唯一标识已存在', + 'path.required' => '路径不能为空', + 'parent_id.required' => '父级权限不能为空', + 'parent_id.integer' => '父级权限格式错误', + ]; + } +} diff --git a/modules/SystemUser/Http/Requests/SysUserFormRequest.php b/modules/SystemUser/Http/Requests/SysUserFormRequest.php new file mode 100644 index 0000000..446003d --- /dev/null +++ b/modules/SystemUser/Http/Requests/SysUserFormRequest.php @@ -0,0 +1,70 @@ +isUpdate()) { + return [ + 'username' => 'required|unique:sys_user,username', + 'nickname' => 'required', + 'sex' => 'in:0,1', + 'mobile' => 'required', + 'email' => 'required|email|unique:sys_user,email', + 'dept_id' => 'required|exists:sys_dept,id', + 'role_id' => 'required|array|exists:sys_role,id', + 'status' => 'required|int|in:1,0', + 'password' => 'required|min:6', + 'rePassword' => 'required|same:password', + ]; + } else { + $id = $this->route('id'); + return [ + 'username' => [ + 'required', + Rule::unique('sys_user', 'username')->ignore($id) + ], + 'nickname' => 'required', + 'sex' => 'in:0,1', + 'mobile' => 'required', + 'email' => [ + 'required', + Rule::unique('sys_user', 'email')->ignore($id) + ], + 'role_id' => 'required|array|exists:sys_role,id', + 'dept_id' => 'required|exists:sys_dept,id', + 'status' => 'required|int|in:1,0', + ]; + } + } + + public function messages(): array + { + return [ + 'username.required' => '用户名不能为空', + 'username.unique' => '用户名已存在', + 'nickname.required' => '昵称不能为空', + 'sex.in' => '性别格式错误', + 'mobile.required' => '手机号不能为空', + 'email.required' => '邮箱不能为空', + 'email.email' => '邮箱格式错误', + 'email.unique' => '邮箱已存在', + 'dept_id.exists' => '部门不存在', + 'role_id.exists' => '角色不存在', + 'status.required' => '状态不能为空', + 'status.int' => '状态值错误', + 'status.in' => '状态格式错误', + 'password.required' => '密码不能为空', + 'password.min' => '密码至少6位', + 'rePassword.required' => '确认密码不能为空', + 'rePassword.same' => '两次密码不一致', + ]; + } +} diff --git a/modules/SystemUser/Http/Requests/SysUserUpdateRequest.php b/modules/SystemUser/Http/Requests/SysUserUpdateRequest.php new file mode 100644 index 0000000..c132282 --- /dev/null +++ b/modules/SystemUser/Http/Requests/SysUserUpdateRequest.php @@ -0,0 +1,42 @@ + [ + 'required', + Rule::unique('sys_user', 'username')->ignore($id) + ], + 'sex' => 'required|in:0,1', + 'bio' => 'sometimes|max:255', + 'mobile' => [ + 'required', + Rule::unique('sys_user', 'mobile')->ignore($id) + ], + 'email' => [ + 'required', + Rule::unique('sys_user', 'email')->ignore($id) + ], + ]; + } + + public function messages(): array + { + return [ + 'nickname.required' => '昵称不能为空', + 'sex.required' => '性别不能为空', + 'sex.in' => '性别格式错误', + 'bio.max' => '个人简介最大不能超过255个字符', + 'mobile.required' => '手机号不能为空', + 'email.required' => '邮箱不能为空', + 'email.email' => '邮箱格式错误' + ]; + } +} diff --git a/modules/SystemUser/Models/SysAccessToken.php b/modules/SystemUser/Models/SysAccessToken.php new file mode 100644 index 0000000..c1796c5 --- /dev/null +++ b/modules/SystemUser/Models/SysAccessToken.php @@ -0,0 +1,22 @@ +tokenable_type == SysUserModel::class + && $this->tokenable_id == 1 + ) { + return true; + } + return in_array('*', $this->abilities) || + array_key_exists($ability, array_flip($this->abilities)); + } +} diff --git a/modules/SystemUser/Models/SysDeptModel.php b/modules/SystemUser/Models/SysDeptModel.php new file mode 100644 index 0000000..9165bbc --- /dev/null +++ b/modules/SystemUser/Models/SysDeptModel.php @@ -0,0 +1,63 @@ + 'integer', + 'sort' => 'integer', + 'status' => 'integer', + ]; + + protected $hidden = [ 'deleted_at' ]; + + /** + * 定义与用户的关联关系(一个部门有多个用户) + */ + public function users(): HasMany + { + return $this->hasMany(SysUserModel::class, 'dept_id', 'id'); + } + + /** + * 定义父级部门关联 + */ + public function parent(): BelongsTo + { + return $this->belongsTo(SysDeptModel::class, 'parent_id', 'id'); + } + + /** + * 定义子部门关联 + */ + public function children(): HasMany + { + return $this->hasMany(SysDeptModel::class, 'parent_id', 'id'); + } +} diff --git a/modules/SystemUser/Models/SysLoginRecordModel.php b/modules/SystemUser/Models/SysLoginRecordModel.php new file mode 100644 index 0000000..d1a2116 --- /dev/null +++ b/modules/SystemUser/Models/SysLoginRecordModel.php @@ -0,0 +1,41 @@ + 'integer', + 'login_time' => 'datetime' + ]; + + /** + * 定义与用户的关联关系 + */ + public function user(): BelongsTo + { + return $this->belongsTo(SysUserModel::class, 'user_id', 'id'); + } +} diff --git a/modules/SystemUser/Models/SysRoleModel.php b/modules/SystemUser/Models/SysRoleModel.php new file mode 100644 index 0000000..cbcac26 --- /dev/null +++ b/modules/SystemUser/Models/SysRoleModel.php @@ -0,0 +1,61 @@ + 'integer', + 'status' => 'integer' + ]; + + protected $appends = ['countUser', 'ruleIds']; + + /** + * 角色用户关联 + */ + public function users(): BelongsToMany + { + return $this->belongsToMany(SysUserModel::class, 'sys_user_role', 'role_id', 'user_id'); + } + + /** + * 角色权限关联中间表 + */ + public function rules(): BelongsToMany + { + return $this->belongsToMany(SysRuleModel::class, 'sys_role_rule', 'role_id', 'rule_id'); + } + + /** 用户总数 */ + public function getCountUserAttribute(): int + { + return $this->users()->count(); + } + + /** 拥有的权限ID */ + public function getRuleIdsAttribute(): array + { + if(!empty($this->id) && $this->id == 1) { + return SysRuleModel::query()->pluck('id')->toArray(); + } + return $this->rules()->pluck('id')->toArray(); + } +} diff --git a/modules/SystemUser/Models/SysRuleModel.php b/modules/SystemUser/Models/SysRuleModel.php new file mode 100644 index 0000000..991690b --- /dev/null +++ b/modules/SystemUser/Models/SysRuleModel.php @@ -0,0 +1,61 @@ + 'integer', + 'sort' => 'integer', + 'status' => 'integer', + 'show' => 'integer' + ]; + + /** + * 定义子权限关联 + */ + public function children(): HasMany + { + return $this->hasMany(SysRuleModel::class, 'parent_id', 'id') + ->orderBy('sort'); + } + + /** + * 定义父权限关联 + */ + public function parent(): BelongsTo + { + return $this->belongsTo(SysRuleModel::class, 'parent_id', 'id'); + } + + /** + * 角色权限关联中间表 + */ + public function roles(): BelongsToMany + { + return $this->belongsToMany(SysRoleModel::class, 'sys_role_rule', 'rule_id', 'role_id'); + } +} diff --git a/modules/SystemUser/Models/SysUserModel.php b/modules/SystemUser/Models/SysUserModel.php new file mode 100644 index 0000000..f3dbb78 --- /dev/null +++ b/modules/SystemUser/Models/SysUserModel.php @@ -0,0 +1,145 @@ + 'datetime', + 'login_time' => 'datetime', + 'status' => 'integer', + 'sex' => 'integer', + 'avatar_id' => 'integer', + 'dept_id' => 'integer' + ]; + + protected $appends = ['role_id', 'dept_name', 'avatar_url']; + + protected $with = ['dept', 'avatar']; + + protected $hidden = [ + 'dept', + 'avatar', + 'password', + 'remember_token', + 'deleted_at', + ]; + + /** + * 定义与部门的归属关系 + */ + public function dept(): BelongsTo + { + return $this->belongsTo(SysDeptModel::class, 'dept_id', 'id'); + } + + /** 部门名称 */ + public function getDeptNameAttribute(): string + { + return $this->dept->name ?? ''; + } + + /** + * 定义与角色的关联 + */ + public function roles(): BelongsToMany + { + return $this->belongsToMany(SysRoleModel::class, 'sys_user_role', 'user_id', 'role_id'); + } + + /** + * 获取用户角色列表 + */ + public function getRoleIdAttribute() + { + return $this->roles() + ->pluck('id')->toArray(); + } + + /** + * 定义与登录日志的关联 + */ + public function loginRecords(): HasMany + { + return $this->hasMany(SysLoginRecordModel::class, 'user_id', 'id'); + } + + /** + * 关联用户头像 + * @return HasOne + */ + public function avatar(): HasOne + { + return $this->hasOne(SysFileModel::class, 'id', 'avatar_id'); + } + + /** + * 获取用户角色列表 + */ + public function getAvatarUrlAttribute() + { + if($this->avatar) { + return $this->avatar->preview_url; + } + return null; + } + + /** + * 获取用户所有权限 + * @return array + */ + public function access(): array + { + if($this->id == 1) { + return SysRuleModel::query() + ->where('status', 1) + ->pluck('key') + ->toArray(); + } + $roles = SysUserModel::with(['roles.rules' => function ($query) { + $query->where('status', 1); + }])->find($this->id)->roles->toArray(); + + return collect($roles) + ->map(fn ($item) => $item['rules'] ) + ->collapse() + ->map(fn ($item) => $item['key'] ) + ->unique() + ->toArray(); + } +} diff --git a/modules/SystemUser/Providers/SystemUserServiceProvider.php b/modules/SystemUser/Providers/SystemUserServiceProvider.php new file mode 100644 index 0000000..b6371a4 --- /dev/null +++ b/modules/SystemUser/Providers/SystemUserServiceProvider.php @@ -0,0 +1,36 @@ +register(base_path('modules/SystemUser/Http/Controllers')); + + // + Sanctum::usePersonalAccessTokenModel(SysAccessToken::class); + } + + + +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..88ead0b --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "xin-admin-ui", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint web", + "preview": "vite preview" + }, + "dependencies": { + "@ant-design/icons": "^6.0.0", + "@ant-design/x": "^2.7.0", + "@ant-design/x-markdown": "^2.7.0", + "@ant-design/x-sdk": "^2.7.0", + "antd": "^6.0.0", + "antd-img-crop": "^4.27.0", + "axios": "^1.15.2", + "dayjs": "^1.11.18", + "echarts-for-react": "^3.0.2", + "i18next": "^25.4.2", + "lodash": "^4.17.21", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-i18next": "^15.6.0", + "react-router": "^7.8.2", + "react-transition-group": "^4.4.5", + "zustand": "^5.0.8" + }, + "devDependencies": { + "@eslint/js": "^9.31.0", + "@tailwindcss/vite": "^4.1.11", + "@types/lodash": "^4.17.20", + "@types/node": "^25.2.3", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@types/react-transition-group": "^4.4.12", + "@vitejs/plugin-react": "^4.7.0", + "concurrently": "^9.2.1", + "eslint": "^9.31.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.3.0", + "tailwindcss": "^4.1.11", + "typescript": "~5.8.3", + "typescript-eslint": "^8.37.0", + "vite": "^8.0.5" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..506b9a3 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,33 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..f2b7843 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4944 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@ant-design/icons': + specifier: ^6.0.0 + version: 6.2.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/x': + specifier: ^2.7.0 + version: 2.7.0(antd@6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/x-markdown': + specifier: ^2.7.0 + version: 2.7.0(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/x-sdk': + specifier: ^2.7.0 + version: 2.7.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + antd: + specifier: ^6.0.0 + version: 6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + antd-img-crop: + specifier: ^4.27.0 + version: 4.30.0(antd@6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + axios: + specifier: ^1.15.2 + version: 1.16.1 + dayjs: + specifier: ^1.11.18 + version: 1.11.21 + echarts-for-react: + specifier: ^3.0.2 + version: 3.0.6(echarts@6.1.0)(react@19.2.6) + i18next: + specifier: ^25.4.2 + version: 25.10.10(typescript@5.8.3) + lodash: + specifier: ^4.17.21 + version: 4.18.1 + react: + specifier: ^19.1.0 + version: 19.2.6 + react-dom: + specifier: ^19.1.0 + version: 19.2.6(react@19.2.6) + react-i18next: + specifier: ^15.6.0 + version: 15.6.0(i18next@25.10.10(typescript@5.8.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(typescript@5.8.3) + react-router: + specifier: ^7.8.2 + version: 7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react-transition-group: + specifier: ^4.4.5 + version: 4.4.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + zustand: + specifier: ^5.0.8 + version: 5.0.14(@types/react@19.2.15)(react@19.2.6) + devDependencies: + '@eslint/js': + specifier: ^9.31.0 + version: 9.39.4 + '@tailwindcss/vite': + specifier: ^4.1.11 + version: 4.3.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)) + '@types/lodash': + specifier: ^4.17.20 + version: 4.17.24 + '@types/node': + specifier: ^25.2.3 + version: 25.9.1 + '@types/react': + specifier: ^19.1.8 + version: 19.2.15 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.2.3(@types/react@19.2.15) + '@types/react-transition-group': + specifier: ^4.4.12 + version: 4.4.12(@types/react@19.2.15) + '@vitejs/plugin-react': + specifier: ^4.7.0 + version: 4.7.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)) + concurrently: + specifier: ^9.2.1 + version: 9.2.1 + eslint: + specifier: ^9.31.0 + version: 9.39.4(jiti@2.7.0) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-react-refresh: + specifier: ^0.4.19 + version: 0.4.26(eslint@9.39.4(jiti@2.7.0)) + globals: + specifier: ^16.3.0 + version: 16.3.0 + tailwindcss: + specifier: ^4.1.11 + version: 4.3.0 + typescript: + specifier: ~5.8.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.37.0 + version: 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + vite: + specifier: ^8.0.5 + version: 8.0.14(@types/node@25.9.1)(jiti@2.7.0) + +packages: + + '@ant-design/colors@8.0.1': + resolution: {integrity: sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==} + + '@ant-design/cssinjs-utils@2.1.2': + resolution: {integrity: sha512-5fTHQ158jJJ5dC/ECeyIdZUzKxE/mpEMRZxthyG1sw/AKRHKgJBg00Yi6ACVXgycdje7KahRNvNET/uBccwCnA==} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + '@ant-design/cssinjs@2.1.2': + resolution: {integrity: sha512-2Hy8BnCEH31xPeSLbhhB2ctCPXE2ZnASdi+KbSeS79BNbUhL9hAEe20SkUk+BR8aKTmqb6+FKFruk7w8z0VoRQ==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/fast-color@3.0.1': + resolution: {integrity: sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==} + engines: {node: '>=8.x'} + + '@ant-design/icons-svg@4.4.2': + resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} + + '@ant-design/icons@6.2.5': + resolution: {integrity: sha512-0hKtoKqTjGFOndUyJLJmC9Cg6k4rEO7rLo6xmgbNJH+/ZX1C57RVals2v1j1knHl9n7Q+sBOveTvn931wLOCKw==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/react-slick@2.0.0': + resolution: {integrity: sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==} + peerDependencies: + react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@ant-design/x-markdown@2.7.0': + resolution: {integrity: sha512-tmuwbeulTD5nfO15VCb3mN13iCTT106626dVFxGjhj1tWnmLL+fIngyv3U8SOTq94+Baor6QdSWtPZluVKCIbw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@ant-design/x-sdk@2.7.0': + resolution: {integrity: sha512-+UqjNqwX0AJCztAKH5lWqg64MB03frs4/b1KJTbEV62jv7ZBdf1E8z8LhKfqtJU0LnhEzs5iRdB7WexFT+j8uA==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@ant-design/x@2.7.0': + resolution: {integrity: sha512-p5OtxQ9elbmeFRllGt1yj5wi6VHe41PIAmwrBU/OlaYydru5qIYsJzCS3DPRhkWkVdErU5oZwU74Z2oce2F5Uw==} + peerDependencies: + antd: ^6.1.1 + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.29.7': + resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.29.7': + resolution: {integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.3': + resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.10': + resolution: {integrity: sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==} + + '@jridgewell/sourcemap-codec@1.4.14': + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@mermaid-js/parser@1.1.1': + resolution: {integrity: sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==} + + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rc-component/async-validator@5.1.0': + resolution: {integrity: sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==} + engines: {node: '>=14.x'} + + '@rc-component/cascader@1.15.0': + resolution: {integrity: sha512-ZzpMtwFCRo3fbXHuDnncARJMZQjdqA2w7aDuPofNQt+aDx39st1hgfIpEwTBLhe2Hqsvs/zOr8RTtgxTkCPySw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/checkbox@2.0.0': + resolution: {integrity: sha512-3CXGPpAR9gsPKeO2N78HAPOzU30UdemD6HGJoWVJOpa6WleaGB5kzZj3v6bdTZab31YuWgY/RxV3VKPctn0DwQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/collapse@1.2.0': + resolution: {integrity: sha512-ZRYSKSS39qsFx93p26bde7JUZJshsUBEQRlRXPuJYlAiNX0vyYlF5TsAm8JZN3LcF8XvKikdzPbgAtXSbkLUkw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/color-picker@3.1.1': + resolution: {integrity: sha512-OHaCHLHszCegdXmIq2ZRIZBN/EtpT6Wm8SG/gpzLATHbVKc/avvuKi+zlOuk05FTWvgaMmpxAko44uRJ3M+2pg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/context@2.0.1': + resolution: {integrity: sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/dialog@1.9.0': + resolution: {integrity: sha512-zbAAogkg4kkKum79sLE6M+vq1jSAW25zdkafrahgcTP9t9S//SD634Znd1A4c8F2Gc12ZKnehGLsVaaOvZzD2A==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/drawer@1.4.2': + resolution: {integrity: sha512-1ib+fZEp6FBu+YvcIktm+nCQ+Q+qIpwpoaJH6opGr4ofh2QMq+qdr5DLC4oCf5qf3pcWX9lUWPYX652k4ini8Q==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/dropdown@1.0.2': + resolution: {integrity: sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' + + '@rc-component/form@1.8.2': + resolution: {integrity: sha512-ZidCvOLmM9Xr+3vzk4UAoR7Aj1W/5IHyrzlBB7sNkygpTeRVrohQSo4TN7W/nARTH+nt8zSAPsn4BEl4zLEO2g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/image@1.9.0': + resolution: {integrity: sha512-khF7w7xkBH5B1bsBcI1FSUZdkyd1aqpl2eYyILCqCzzQH3XdfehGUaZTnptyaJJfs09/R5hv9jXWyazOMFIClQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/input-number@1.6.2': + resolution: {integrity: sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/input@1.3.1': + resolution: {integrity: sha512-iFvTUT9W+JC/MSin2aGAk8NqsVlTzcExNC9DZariON1IWirju9NoNeEk47an4Q8iHazkoVI/y1LnDi88+CPcig==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@rc-component/mentions@1.9.0': + resolution: {integrity: sha512-WUwfFKDSOF5S9UPsNsXcLYtzjTxBGsftTXWRbZuxX6BYrsySISTnujfJNgaaQ6qVzaCDJ35QUkZKvsYxip1C5g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/menu@1.3.1': + resolution: {integrity: sha512-pSZl9nBPgKgxN0aaW7NilIBEwWsc+43S+ulGdWAg9afak96dNOGWsGx0DLLBB1VQsAJvo6bQMTDzXoPlEHsBEw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/mini-decimal@1.1.3': + resolution: {integrity: sha512-bk/FJ09fLf+NLODMAFll6CfYrHPBioTedhW6lxDBuuWucJEqFUd4l/D/5JgIi3dina6sYahB8iuPAZTNz2pMxw==} + engines: {node: '>=8.x'} + + '@rc-component/motion@1.3.2': + resolution: {integrity: sha512-itfd+GztzJYAb04Z4RkEub1TbJAfZc2Iuy8p44U44xD1F5+fNYFKI3897ijlbIyfvXkTmMm+KGcjkQQGMHywEQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/mutate-observer@2.0.1': + resolution: {integrity: sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/notification@2.0.7': + resolution: {integrity: sha512-nqZzpf6BPdaj+3ILx7si79LLmqPKyUmQoXa+/9gg0SkH0v1DbD66oJgRMSBEVnd/zUT3D4gwxWIHUKebYf2ZXQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/overflow@1.0.1': + resolution: {integrity: sha512-syfmgAABaHCnCDzPwHZ/2tuvIcpOO3jefYZMmfkN+pmo8HKTzsfhS57vxo4ksPdN0By+uWVJhJWNFozNBxi2eA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/pagination@1.2.0': + resolution: {integrity: sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/picker@1.10.0': + resolution: {integrity: sha512-vVOXP2RVWozwpERGUFAehVH1Jz6o/uRrAb9qSZm1LC+iJs8rvEwFo1bzz2jlOYV+uWwu0dIuG86tnDui14Ea0w==} + engines: {node: '>=12.x'} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + + '@rc-component/portal@2.2.0': + resolution: {integrity: sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==} + engines: {node: '>=12.x'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/progress@1.0.2': + resolution: {integrity: sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/qrcode@1.1.1': + resolution: {integrity: sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/rate@1.0.1': + resolution: {integrity: sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/resize-observer@1.1.2': + resolution: {integrity: sha512-t/Bb0W8uvL4PYKAB3YcChC+DlHh0Wt5kM7q/J+0qpVEUMLe7Hk5zuvc9km0hMnTFPSx5Z7Wu/fzCLN6erVLE8Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/segmented@1.3.0': + resolution: {integrity: sha512-5J/bJ01mbDnoA6P/FW8SxUvKn+OgUSTZJPzCNnTBntG50tzoP7DydGhqxp7ggZXZls7me3mc2EQDXakU3iTVFg==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@rc-component/select@1.6.15': + resolution: {integrity: sha512-SyVCWnqxCQZZcQvQJ/CxSjx2bGma6ds/HtnpkIfZVnt6RoEgbqUmHgD6vrzNarNXwbLXerwVzWwq8F3d1sst7g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' + + '@rc-component/slider@1.0.1': + resolution: {integrity: sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/steps@1.2.2': + resolution: {integrity: sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/switch@1.0.3': + resolution: {integrity: sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/table@1.10.2': + resolution: {integrity: sha512-b3PjqB9Gp25p5t/zq+9QrbXbodkptT8/zvLmwgd2FNPUUtaYyDnQqfxeD5a7ao8E8lpinLHsi2u2vdfPhyNvAw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/tabs@1.9.1': + resolution: {integrity: sha512-6mY08Fce6aNOHuGsxbzT+f2ekgL9mg1cGGHkittMlVGymjGg+kGupu5v90sRxcUd/paRU9jclLLXtF/PkK1FUA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/tooltip@1.4.0': + resolution: {integrity: sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/tour@2.4.0': + resolution: {integrity: sha512-aui4r4TqmTzwaBgcQxHYep8kM8PTjZFufjokObpy35KfFeZ0k9ArquWFZqegQlH24P14t+F0qO0mGTgzlav1yg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/tree-select@1.9.0': + resolution: {integrity: sha512-GXcFe15a+trUl1/J3OHWQhsVWFpwFpGFK2cqYWZ1sK22Zs3KZTvMwDpzr75PIo1s6QVioVxpE/pRwRopkeDQ6w==} + peerDependencies: + react: '*' + react-dom: '*' + + '@rc-component/tree@1.3.2': + resolution: {integrity: sha512-bJFj46wEkpBPnWyTm18XmgAgNQ/4YvprxMOPPY2a6rmhGJYxLuNKEFiL5Qej4Qctu9wHJm8WW+v2SYskafE0kA==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' + + '@rc-component/trigger@3.9.0': + resolution: {integrity: sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/upload@1.1.1': + resolution: {integrity: sha512-GvYWSKeaJTOxxC5p6+nOSadzfvXA1h8C/iHFPFZX+szH3JUXrvs+DLiW8YUTBgvMh8m63mJeHrlYlJzAlg+pDA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/util@1.11.1': + resolution: {integrity: sha512-awVlI3ub2vqfqkYxOBc/uQ0efm3jw0wcrhtO/YWLyZfxiKXczKwNbVuhlnyxytDt7H9pbbVQiqr+O6MLATtRYg==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/virtual-list@1.2.0': + resolution: {integrity: sha512-iavRm1Jo4GDbASQwdGa7jFyk93RvSOo9xHyBT4QL1pgFJj/Fdf1G+3RErH7/7BmAMvx2AkF62mjGYxDbXsK9TQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rolldown/binding-android-arm64@1.0.2': + resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.2': + resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.2': + resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.2': + resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.2': + resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.2': + resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.2': + resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} + + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.3.0': + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + + '@types/prismjs@1.26.6': + resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + + '@types/react@19.2.15': + resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@typescript-eslint/eslint-plugin@8.60.0': + resolution: {integrity: sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.60.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.60.0': + resolution: {integrity: sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.60.0': + resolution: {integrity: sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.60.0': + resolution: {integrity: sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.60.0': + resolution: {integrity: sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.60.0': + resolution: {integrity: sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.60.0': + resolution: {integrity: sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.60.0': + resolution: {integrity: sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.60.0': + resolution: {integrity: sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.60.0': + resolution: {integrity: sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@upsetjs/venn.js@2.0.0': + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} + + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.0: + resolution: {integrity: sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==} + engines: {node: '>= 6.0.0'} + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + antd-img-crop@4.30.0: + resolution: {integrity: sha512-fjpwyCNKtKr22AQcENBix5Y+P8ECM80Ivk/Yn7kF9D0XltYBGJHg+3yycxcGq7ATgnl7pgPYDvN2VzKleogCLQ==} + peerDependencies: + antd: '>=4.0.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' + + antd@6.4.3: + resolution: {integrity: sha512-6H2avkxCGfxcF67r3J2mwm9Ck50el1pks/73vfM1wDsPL/tPtj5vHuauMgJFnrqmq7CH3g8aoZ0VBQbt+jpAsw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.16.1: + resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} + + balanced-match@1.0.0: + resolution: {integrity: sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.10.32: + resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} + engines: {node: '>=6.0.0'} + hasBin: true + + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@7.0.0: + resolution: {integrity: sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concurrently@9.2.1: + resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} + engines: {node: '>=18'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.33.4: + resolution: {integrity: sha512-HIN5Pmd9MrX9BkV7tDwnOcEJCSFvCpc8X97h3f508J6I5FsqAY65wKOCvgH2CuP42CaahWaz4tuh32SOOIH7ww==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} + + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + dompurify@3.4.7: + resolution: {integrity: sha512-2jBxDJY4RR06tQNy4w5FlFH7kfxsQZlufd0sbv+chfHCxeJwrFw2baUDsSwvBISD4K4RDbd0PTfy3uNXsR6siA==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + echarts-for-react@3.0.6: + resolution: {integrity: sha512-4zqLgTGWS3JvkQDXjzkR1k1CHRdpd6by0988TWMJgnvDytegWLbeP/VNZmMa+0VJx2eD7Y632bi2JquXDgiGJg==} + peerDependencies: + echarts: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + react: ^15.0.0 || >=16.0.0 + + echarts@6.1.0: + resolution: {integrity: sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==} + + electron-to-chromium@1.5.364: + resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.22.1: + resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==} + engines: {node: '>=10.13.0'} + + entities@4.2.0: + resolution: {integrity: sha512-wEJa03bJgqEwPnkUqYdgmcfUXfm6+4hePQhntIvRy/1/+C4dFuhYHsgKBRjbQ6OWBh42P+VhAoCDO77DUh0e/Q==} + engines: {node: '>=0.12'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-toolkit@1.47.0: + resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + 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 + + eslint-plugin-react-refresh@0.4.26: + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.0: + resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.1.0: + resolution: {integrity: sha512-lXeSPRCndWPaipZbtI4CkvTZpF6OPsy19dkvf7+5AHeJD+w+iAKPc9Q78xWBmX4SdR+8xrtY9jTXs/YDv8q+Ug==} + engines: {node: '>=14'} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + highlightjs-vue@1.0.0: + resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} + + html-dom-parser@5.1.8: + resolution: {integrity: sha512-MCIUng//mF2qTtGHXJWr6OLfHWmg3Pm8ezpfiltF83tizPWY17JxT4dRLE8lykJ5bChJELoY3onQKPbufJHxYA==} + + html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + + html-react-parser@5.2.17: + resolution: {integrity: sha512-m+K/7Moq1jodAB4VL0RXSOmtwLUYoAsikZhwd+hGQe5Vtw2dbWfpFd60poxojMU0Tsh9w59mN1QLEcoHz0Dx9w==} + peerDependencies: + '@types/react': 0.14 || 15 || 16 || 17 || 18 || 19 + react: 0.14 || 15 || 16 || 17 || 18 || 19 + peerDependenciesMeta: + '@types/react': + optional: true + + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + i18next@25.10.10: + resolution: {integrity: sha512-cqUW2Z3EkRx7NqSyywjkgCLK7KLCL6IFVFcONG7nVYIJ3ekZ1/N5jUsihHV6Bq37NfhgtczxJcxduELtjTwkuQ==} + peerDependencies: + typescript: ^5 || ^6 + peerDependenciesMeta: + typescript: + optional: true + + iconv-lite@0.6.0: + resolution: {integrity: sha512-43ZpGYZ9QtuutX5l6WC1DSO8ane9N+Ct5qPLF2OV7vM9abM69gnAbVkh66ibaZd3aOGkoP1ZmringlKhLBkw2Q==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.2.1: + resolution: {integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-mobile@5.0.0: + resolution: {integrity: sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.1.2: + resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + engines: {node: '>=14'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + js-tokens@3.0.0: + resolution: {integrity: sha512-poXEQHPMmTrYZuJgNRll2sbc3kJsSU1m/g1Q93IE6txNj3p6xOOOmdj1G/zCVGawYSPzTkSoWGg1otqbeqKJeg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json2mq@0.2.0: + resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + + lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true + + marked@16.3.0: + resolution: {integrity: sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w==} + engines: {node: '>= 20'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mermaid@11.15.0: + resolution: {integrity: sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.46: + resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + engines: {node: '>=18'} + + normalize-wheel@1.0.1: + resolution: {integrity: sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.0.2: + resolution: {integrity: sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + react-dom@19.2.6: + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} + peerDependencies: + react: ^19.2.6 + + react-easy-crop@5.5.7: + resolution: {integrity: sha512-kYo4NtMeXFQB7h1U+h5yhUkE46WQbQdq7if54uDlbMdZHdRgNehfvaFrXnFw5NR1PNoUOJIfTwLnWmEx/MaZnA==} + peerDependencies: + react: '>=16.4.0' + react-dom: '>=16.4.0' + + react-i18next@15.6.0: + resolution: {integrity: sha512-W135dB0rDfiFmbMipC17nOhGdttO5mzH8BivY+2ybsQBbXvxWIwl3cmeH3T9d+YPBSJu/ouyJKFJTtkK7rJofw==} + peerDependencies: + i18next: '>= 23.2.3' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + typescript: ^5 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + typescript: + optional: true + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + react-property@2.0.2: + resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==} + + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + + react-router@7.16.0: + resolution: {integrity: sha512-wArC8lVyJb3+jM9OpDyW6hLCizACWkvQR/sSGqSs+o5uEXEtGlqdZ4v8hENR3Jad6i+LRkK93q/+bQAcvl6V1A==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-syntax-highlighter@16.1.1: + resolution: {integrity: sha512-PjVawBGy80C6YbC5DDZJeUjBmC7skaoEUdvfFQediQHgCL7aKyVHe57SaJGfQsloGDac+gCpTfRdtxzWWKmCXA==} + engines: {node: '>= 16.20.2'} + peerDependencies: + react: '>= 0.14.0' + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.2.6: + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} + engines: {node: '>=0.10.0'} + + refractor@5.0.0: + resolution: {integrity: sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + + rolldown@1.0.2: + resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + size-sensor@1.0.3: + resolution: {integrity: sha512-+k9mJ2/rQMiRmQUcjn+qznch260leIXY8r4FyYKKyRBO/s5UoeMAHGkCJyE1R/4wrIhTJONfyloY55SkE7ve3A==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + string-convert@0.2.1: + resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} + + string-width@4.2.0: + resolution: {integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==} + engines: {node: '>=8'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + + tinyexec@1.2.3: + resolution: {integrity: sha512-g62dB+w1/OEFnPvmX0yd/HnetYITOL+1nJW7kitOycOeAvmbWC/nu0fwmmQ/kupNojqExzyC/T++pST/jRJ2mQ==} + engines: {node: '>=18'} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.60.0: + resolution: {integrity: sha512-9f65qWLZdAW9m1JaxBDUHcqRUfL8bkxxXL7XxEfI+F09q56PkBvIfCjLF3yInsDM/BBmwkqmCQdCZe/RYlIWEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + uuid@14.0.0: + resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} + hasBin: true + + vite@8.0.14: + resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + + which@2.0.1: + resolution: {integrity: sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + zrender@6.1.0: + resolution: {integrity: sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==} + + zustand@5.0.14: + resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} + 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 + +snapshots: + + '@ant-design/colors@8.0.1': + dependencies: + '@ant-design/fast-color': 3.0.1 + + '@ant-design/cssinjs-utils@2.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@ant-design/cssinjs': 2.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@babel/runtime': 7.29.7 + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@ant-design/cssinjs@2.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@babel/runtime': 7.29.7 + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + csstype: 3.2.3 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + stylis: 4.4.0 + + '@ant-design/fast-color@3.0.1': {} + + '@ant-design/icons-svg@4.4.2': {} + + '@ant-design/icons@6.2.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@ant-design/colors': 8.0.1 + '@ant-design/icons-svg': 4.4.2 + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@ant-design/react-slick@2.0.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@babel/runtime': 7.29.7 + clsx: 2.1.1 + json2mq: 0.2.0 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + throttle-debounce: 5.0.2 + + '@ant-design/x-markdown@2.7.0(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + clsx: 2.1.1 + dompurify: 3.4.7 + html-react-parser: 5.2.17(@types/react@19.2.15)(react@19.2.6) + katex: 0.16.47 + marked: 15.0.12 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + transitivePeerDependencies: + - '@types/react' + + '@ant-design/x-sdk@2.7.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@ant-design/x@2.7.0(antd@6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@ant-design/colors': 8.0.1 + '@ant-design/cssinjs': 2.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/cssinjs-utils': 2.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/fast-color': 3.0.1 + '@ant-design/icons': 6.2.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@babel/runtime': 7.29.7 + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + antd: 6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + lodash.throttle: 4.1.1 + mermaid: 11.15.0 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-syntax-highlighter: 16.1.1(react@19.2.6) + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.2.3 + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-module-imports@7.29.7': + dependencies: + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.29.7': {} + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/runtime@7.29.7': {} + + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/traverse@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@braintree/sanitize-url@7.1.2': {} + + '@chevrotain/types@11.1.2': {} + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emotion/hash@0.8.0': {} + + '@emotion/unitless@0.7.5': {} + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': + dependencies: + eslint: 9.39.4(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.2.1 + js-yaml: 4.1.1 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.4': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.3': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.0 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.10 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.4.10': {} + + '@jridgewell/sourcemap-codec@1.4.14': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + + '@mermaid-js/parser@1.1.1': + dependencies: + '@chevrotain/types': 11.1.2 + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@oxc-project/types@0.132.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rc-component/async-validator@5.1.0': + dependencies: + '@babel/runtime': 7.29.7 + + '@rc-component/cascader@1.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/select': 1.6.15(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/tree': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/checkbox@2.0.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/collapse@1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@babel/runtime': 7.29.7 + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/color-picker@3.1.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@ant-design/fast-color': 3.0.1 + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/context@2.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/dialog@1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/portal': 2.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/drawer@1.4.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/portal': 2.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/dropdown@1.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/form@1.8.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/async-validator': 5.1.0 + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/image@1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/portal': 2.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/input-number@1.6.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/mini-decimal': 1.1.3 + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/input@1.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/mentions@1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/input': 1.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/menu': 1.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/menu@1.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/overflow': 1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/mini-decimal@1.1.3': + dependencies: + '@babel/runtime': 7.29.7 + + '@rc-component/motion@1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/mutate-observer@2.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/notification@2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/overflow@1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@babel/runtime': 7.29.7 + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/pagination@1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/picker@1.10.0(dayjs@1.11.21)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/overflow': 1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + dayjs: 1.11.21 + + '@rc-component/portal@2.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/progress@1.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/qrcode@1.1.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@babel/runtime': 7.29.7 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/rate@1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/resize-observer@1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/segmented@1.3.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@babel/runtime': 7.29.7 + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/select@1.6.15(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/overflow': 1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/slider@1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/steps@1.2.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/switch@1.0.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/table@1.10.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/context': 2.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/tabs@1.9.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/dropdown': 1.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/menu': 1.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/tooltip@1.4.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/tour@2.4.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/portal': 2.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/tree-select@1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/select': 1.6.15(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/tree': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/tree@1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/trigger@3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/portal': 2.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/upload@1.1.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rc-component/util@1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + is-mobile: 5.0.0 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-is: 18.2.0 + + '@rc-component/virtual-list@1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@babel/runtime': 7.29.7 + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@rolldown/binding-android-arm64@1.0.2': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.2': + optional: true + + '@rolldown/binding-darwin-x64@1.0.2': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.2': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.2': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.2': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.2': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.2': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.2': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.2': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.2': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.2': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.2': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.27': {} + + '@rolldown/pluginutils@1.0.1': {} + + '@tailwindcss/node@4.3.0': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.22.1 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.0 + + '@tailwindcss/oxide-android-arm64@4.3.0': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.3.0': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.3.0': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + optional: true + + '@tailwindcss/oxide@4.3.0': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + + '@tailwindcss/vite@4.3.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0))': + dependencies: + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0) + + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.7 + + '@types/d3-array@3.2.2': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.3': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/d3@7.4.3': + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + + '@types/estree@1.0.9': {} + + '@types/geojson@7946.0.16': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/json-schema@7.0.15': {} + + '@types/lodash@4.17.24': {} + + '@types/node@25.9.1': + dependencies: + undici-types: 7.24.6 + + '@types/prismjs@1.26.6': {} + + '@types/react-dom@19.2.3(@types/react@19.2.15)': + dependencies: + '@types/react': 19.2.15 + + '@types/react-transition-group@4.4.12(@types/react@19.2.15)': + dependencies: + '@types/react': 19.2.15 + + '@types/react@19.2.15': + dependencies: + csstype: 3.2.3 + + '@types/trusted-types@2.0.7': + optional: true + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.60.0 + eslint: 9.39.4(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.60.0 + debug: 4.4.3 + eslint: 9.39.4(jiti@2.7.0) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.60.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.8.3) + '@typescript-eslint/types': 8.60.0 + debug: 4.4.3 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.60.0': + dependencies: + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/visitor-keys': 8.60.0 + + '@typescript-eslint/tsconfig-utils@8.60.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + debug: 4.4.3 + eslint: 9.39.4(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.60.0': {} + + '@typescript-eslint/typescript-estree@8.60.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/project-service': 8.60.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.8.3) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/visitor-keys': 8.60.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.1 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.8.3) + eslint: 9.39.4(jiti@2.7.0) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.60.0': + dependencies: + '@typescript-eslint/types': 8.60.0 + eslint-visitor-keys: 5.0.1 + + '@upsetjs/venn.js@2.0.0': + optionalDependencies: + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + '@vitejs/plugin-react@4.7.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0))': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + agent-base@6.0.0: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + antd-img-crop@4.30.0(antd@6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + antd: 6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-easy-crop: 5.5.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + tslib: 2.8.1 + + antd@6.4.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + '@ant-design/colors': 8.0.1 + '@ant-design/cssinjs': 2.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/cssinjs-utils': 2.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/fast-color': 3.0.1 + '@ant-design/icons': 6.2.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@ant-design/react-slick': 2.0.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@babel/runtime': 7.29.7 + '@rc-component/cascader': 1.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/checkbox': 2.0.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/collapse': 1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/color-picker': 3.1.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/dialog': 1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/drawer': 1.4.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/dropdown': 1.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/form': 1.8.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/image': 1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/input': 1.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/input-number': 1.6.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/mentions': 1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/menu': 1.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/motion': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/mutate-observer': 2.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/notification': 2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/pagination': 1.2.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/picker': 1.10.0(dayjs@1.11.21)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/progress': 1.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/qrcode': 1.1.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/rate': 1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/segmented': 1.3.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/select': 1.6.15(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/slider': 1.0.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/steps': 1.2.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/switch': 1.0.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/table': 1.10.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/tabs': 1.9.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/tooltip': 1.4.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/tour': 2.4.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/tree': 1.3.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/tree-select': 1.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/trigger': 3.9.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/upload': 1.1.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@rc-component/util': 1.11.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + clsx: 2.1.1 + dayjs: 1.11.21 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - date-fns + - luxon + - moment + + argparse@2.0.1: {} + + asynckit@0.4.0: {} + + axios@1.16.1: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.5 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + + balanced-match@1.0.0: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.10.32: {} + + brace-expansion@1.1.15: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.0 + + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.32 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.364 + node-releases: 2.0.46 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001793: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@7.0.0: {} + + commander@8.3.0: {} + + compute-scroll-into-view@3.1.1: {} + + concat-map@0.0.1: {} + + concurrently@9.2.1: + dependencies: + chalk: 4.1.2 + rxjs: 7.8.2 + shell-quote: 1.8.3 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + + convert-source-map@2.0.0: {} + + cookie@1.1.1: {} + + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.1 + + csstype@3.2.3: {} + + cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.4): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.33.4 + + cytoscape-fcose@2.2.0(cytoscape@3.33.4): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.33.4 + + cytoscape@3.33.4: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.1.0 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.0.0 + iconv-lite: 0.6.0 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.14: + dependencies: + d3: 7.9.0 + lodash-es: 4.18.1 + + dayjs@1.11.21: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + deep-is@0.1.4: {} + + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 + + delayed-stream@1.0.0: {} + + detect-libc@2.1.2: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.29.7 + csstype: 3.2.3 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.2.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + dompurify@3.4.7: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + echarts-for-react@3.0.6(echarts@6.1.0)(react@19.2.6): + dependencies: + echarts: 6.1.0 + fast-deep-equal: 3.1.3 + react: 19.2.6 + size-sensor: 1.0.3 + + echarts@6.1.0: + dependencies: + tslib: 2.3.0 + zrender: 6.1.0 + + electron-to-chromium@1.5.364: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.22.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + entities@4.2.0: {} + + entities@7.0.1: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-toolkit@1.47.0: {} + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.39.4(jiti@2.7.0)): + dependencies: + eslint: 9.39.4(jiti@2.7.0) + + eslint-plugin-react-refresh@0.4.26(eslint@9.39.4(jiti@2.7.0)): + dependencies: + eslint: 9.39.4(jiti@2.7.0) + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.4(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fault@1.0.4: + dependencies: + format: 0.2.2 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.0: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + rimraf: 5.0.5 + + flatted@3.4.2: {} + + follow-redirects@1.16.0: {} + + foreground-child@3.1.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + + format@0.2.2: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.5.0: + dependencies: + foreground-child: 3.1.0 + jackspeak: 3.1.2 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@14.0.0: {} + + globals@16.3.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + hachure-fill@0.5.2: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + highlight.js@10.7.3: {} + + highlightjs-vue@1.0.0: {} + + html-dom-parser@5.1.8: + dependencies: + domhandler: 5.0.3 + htmlparser2: 10.1.0 + + html-parse-stringify@3.0.1: + dependencies: + void-elements: 3.1.0 + + html-react-parser@5.2.17(@types/react@19.2.15)(react@19.2.6): + dependencies: + domhandler: 5.0.3 + html-dom-parser: 5.1.8 + react: 19.2.6 + react-property: 2.0.2 + style-to-js: 1.1.21 + optionalDependencies: + '@types/react': 19.2.15 + + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + i18next@25.10.10(typescript@5.8.3): + dependencies: + '@babel/runtime': 7.29.7 + optionalDependencies: + typescript: 5.8.3 + + iconv-lite@0.6.0: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.2.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-meta-resolve@4.2.0: {} + + imurmurhash@0.1.4: {} + + inline-style-parser@0.2.7: {} + + internmap@1.0.1: {} + + internmap@2.0.3: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-decimal@2.0.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@2.0.1: {} + + is-mobile@5.0.0: {} + + isexe@2.0.0: {} + + jackspeak@3.1.2: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@2.7.0: {} + + js-tokens@3.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json2mq@0.2.0: + dependencies: + string-convert: 0.2.1 + + json5@2.2.3: {} + + katex@0.16.47: + dependencies: + commander: 8.3.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + khroma@2.1.0: {} + + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.18.1: {} + + lodash.merge@4.6.2: {} + + lodash.throttle@4.1.1: {} + + lodash@4.18.1: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 3.0.0 + + lowlight@1.20.0: + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + + lru-cache@10.2.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + marked@15.0.12: {} + + marked@16.3.0: {} + + math-intrinsics@1.1.0: {} + + mermaid@11.15.0: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.3 + '@mermaid-js/parser': 1.1.1 + '@types/d3': 7.4.3 + '@upsetjs/venn.js': 2.0.0 + cytoscape: 3.33.4 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.4) + cytoscape-fcose: 2.2.0(cytoscape@3.33.4) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.14 + dayjs: 1.11.21 + dompurify: 3.4.7 + es-toolkit: 1.47.0 + katex: 0.16.47 + khroma: 2.1.0 + marked: 16.3.0 + roughjs: 4.6.6 + stylis: 4.4.0 + ts-dedent: 2.2.0 + uuid: 14.0.0 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.15 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + + minipass@7.1.3: {} + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.46: {} + + normalize-wheel@1.0.1: {} + + object-assign@4.1.1: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.0.2: + dependencies: + p-try: 2.2.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.0.2 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + package-manager-detector@1.6.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + path-data-parser@0.1.0: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.0 + minipass: 7.1.3 + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prismjs@1.30.0: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + property-information@7.1.0: {} + + proxy-from-env@2.1.0: {} + + punycode@2.3.1: {} + + react-dom@19.2.6(react@19.2.6): + dependencies: + react: 19.2.6 + scheduler: 0.27.0 + + react-easy-crop@5.5.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + normalize-wheel: 1.0.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + tslib: 2.8.1 + + react-i18next@15.6.0(i18next@25.10.10(typescript@5.8.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(typescript@5.8.3): + dependencies: + '@babel/runtime': 7.29.7 + html-parse-stringify: 3.0.1 + i18next: 25.10.10(typescript@5.8.3) + react: 19.2.6 + optionalDependencies: + react-dom: 19.2.6(react@19.2.6) + typescript: 5.8.3 + + react-is@16.13.1: {} + + react-is@18.2.0: {} + + react-property@2.0.2: {} + + react-refresh@0.17.0: {} + + react-router@7.16.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + cookie: 1.1.1 + react: 19.2.6 + set-cookie-parser: 2.6.0 + optionalDependencies: + react-dom: 19.2.6(react@19.2.6) + + react-syntax-highlighter@16.1.1(react@19.2.6): + dependencies: + '@babel/runtime': 7.29.7 + highlight.js: 10.7.3 + highlightjs-vue: 1.0.0 + lowlight: 1.20.0 + prismjs: 1.30.0 + react: 19.2.6 + refractor: 5.0.0 + + react-transition-group@4.4.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + '@babel/runtime': 7.29.7 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + react@19.2.6: {} + + refractor@5.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/prismjs': 1.26.6 + hastscript: 9.0.1 + parse-entities: 4.0.2 + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + rimraf@5.0.5: + dependencies: + glob: 10.5.0 + + robust-predicates@3.0.3: {} + + rolldown@1.0.2: + dependencies: + '@oxc-project/types': 0.132.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.2 + '@rolldown/binding-darwin-arm64': 1.0.2 + '@rolldown/binding-darwin-x64': 1.0.2 + '@rolldown/binding-freebsd-x64': 1.0.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 + '@rolldown/binding-linux-arm64-gnu': 1.0.2 + '@rolldown/binding-linux-arm64-musl': 1.0.2 + '@rolldown/binding-linux-ppc64-gnu': 1.0.2 + '@rolldown/binding-linux-s390x-gnu': 1.0.2 + '@rolldown/binding-linux-x64-gnu': 1.0.2 + '@rolldown/binding-linux-x64-musl': 1.0.2 + '@rolldown/binding-openharmony-arm64': 1.0.2 + '@rolldown/binding-wasm32-wasi': 1.0.2 + '@rolldown/binding-win32-arm64-msvc': 1.0.2 + '@rolldown/binding-win32-x64-msvc': 1.0.2 + + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + + rw@1.3.3: {} + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safer-buffer@2.1.2: {} + + scheduler@0.27.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + semver@6.3.1: {} + + semver@7.8.1: {} + + set-cookie-parser@2.6.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.3: {} + + signal-exit@4.1.0: {} + + size-sensor@1.0.3: {} + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + string-convert@0.2.1: {} + + string-width@4.2.0: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-json-comments@3.1.1: {} + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + stylis@4.4.0: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + tailwindcss@4.3.0: {} + + tapable@2.3.3: {} + + throttle-debounce@5.0.2: {} + + tinyexec@1.2.3: {} + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tree-kill@1.2.2: {} + + ts-api-utils@2.5.0(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + + ts-dedent@2.2.0: {} + + tslib@2.3.0: {} + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + eslint: 9.39.4(jiti@2.7.0) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + typescript@5.8.3: {} + + undici-types@7.24.6: {} + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + uuid@14.0.0: {} + + vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.0.2 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.9.1 + fsevents: 2.3.3 + jiti: 2.7.0 + + void-elements@3.1.0: {} + + which@2.0.1: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + zrender@6.1.0: + dependencies: + tslib: 2.3.0 + + zustand@5.0.14(@types/react@19.2.15)(react@19.2.6): + optionalDependencies: + '@types/react': 19.2.15 + react: 19.2.6 diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/assets/403-D_RpddD3.js b/public/assets/403-D_RpddD3.js new file mode 100644 index 0000000..420b341 --- /dev/null +++ b/public/assets/403-D_RpddD3.js @@ -0,0 +1 @@ +import{j as t,B as r}from"./index-B-sDl1ER.js";import{C as s}from"./index-CO5DzGxy.js";import{R as a}from"./index-CwBuiwuD.js";const p=()=>t.jsx(s,{variant:"borderless",children:t.jsx(a,{status:"403",title:"403",subTitle:"Sorry, you are not authorized to access this page.",extra:t.jsx(r,{type:"primary",children:"Back Home"})})});export{p as default}; diff --git a/public/assets/404-nJtFVjOX.js b/public/assets/404-nJtFVjOX.js new file mode 100644 index 0000000..8c5d881 --- /dev/null +++ b/public/assets/404-nJtFVjOX.js @@ -0,0 +1 @@ +import{j as t,B as s}from"./index-B-sDl1ER.js";import{C as r}from"./index-CO5DzGxy.js";import{R as e}from"./index-CwBuiwuD.js";const p=()=>t.jsx(r,{variant:"borderless",children:t.jsx(e,{status:"404",title:"404",subTitle:"Sorry, the page you visited does not exist.",extra:t.jsx(s,{type:"primary",children:"Back Home"})})});export{p as default}; diff --git a/public/assets/500-bhOU7TY_.js b/public/assets/500-bhOU7TY_.js new file mode 100644 index 0000000..007b506 --- /dev/null +++ b/public/assets/500-bhOU7TY_.js @@ -0,0 +1 @@ +import{j as t,B as r}from"./index-B-sDl1ER.js";import{C as s}from"./index-CO5DzGxy.js";import{R as e}from"./index-CwBuiwuD.js";const m=()=>t.jsx(s,{variant:"borderless",children:t.jsx(e,{status:"500",title:"500",subTitle:"Sorry, something went wrong.",extra:t.jsx(r,{type:"primary",children:"Back Home"})})});export{m as default}; diff --git a/public/assets/Table-B11dzOaz.js b/public/assets/Table-B11dzOaz.js new file mode 100644 index 0000000..2c977aa --- /dev/null +++ b/public/assets/Table-B11dzOaz.js @@ -0,0 +1,43 @@ +import{r as l,bQ as Lr,a8 as zo,aw as Ct,aZ as Wo,bR as st,bx as _o,O as lt,ay as et,av as Et,bS as Ar,bT as to,bU as jo,bV as Hn,L as V,bC as Fn,bW as Hr,bX as no,bY as Fr,bZ as zn,b_ as oo,b$ as ro,M as Qt,c0 as Vo,c1 as Uo,R as ne,aA as zr,ba as Re,bn as Jt,c2 as Wn,V as qo,c3 as Wr,a9 as _r,bN as jr,z as Xo,c4 as Vr,c5 as Ur,G as Go,bi as qr,a3 as W,bF as Xr,H as _n,b9 as Gr,P as so,c6 as Yo,c7 as Yr,c8 as Zr,c9 as Qr,J as Zo,bg as rn,bK as Jr,K as Qo,ca as Jo,cb as es,cc as ts,aM as ns,cd as os,ce as rs,cf as ss,ax as er,B as lo,cg as tr,E as ao,bk as ls,ch as as,ci as is,cj as cs,ck as ds,ar as io,a_ as pn,cl as us,bH as fs,aE as Ot,a$ as ps,bq as co,b0 as ms,bp as hs,cm as gs,cn as ys,aL as bs}from"./index-B-sDl1ER.js";import{R as nr}from"./index-CeRfFUxJ.js";import{S as xs,P as Cs}from"./index-DmtjhyJb.js";const Ss=t=>{const[e,n]=l.useState(null);return[l.useCallback((r,s,a)=>{const i=e??r,d=Math.min(i||0,r),c=Math.max(i||0,r),u=s.slice(d,c+1).map(t),p=u.some(m=>!a.has(m)),f=[];return u.forEach(m=>{p?(a.has(m)||f.push(m),a.add(m)):(a.delete(m),f.push(m))}),n(p?c:null),f},[e]),n]},ws=(t,e)=>(t._antProxy=t._antProxy||{},Object.keys(e).forEach(n=>{if(!(n in t._antProxy)){const o=t[n];t._antProxy[n]=o,t[n]=e[n]}}),t),Es=(t,e)=>l.useImperativeHandle(t,()=>{const n=e(),{nativeElement:o}=n;return typeof Proxy<"u"?new Proxy(o,{get(r,s){return n[s]?n[s]:Reflect.get(r,s)}}):ws(o,n)}),vs=t=>{const e=l.useRef(t),[,n]=Lr();return[()=>e.current,o=>{e.current=o,n()}]};function Cn(t){return zo(t)&&t===t.window}const $s=t=>{if(typeof window>"u")return 0;let e=0;return Cn(t)?e=t.pageYOffset:t instanceof Document?e=t.documentElement.scrollTop:(t instanceof HTMLElement||t)&&(e=t.scrollTop),t&&!Cn(t)&&typeof e!="number"&&(e=(t.ownerDocument??t).documentElement?.scrollTop),e};function Ns(t,e,n,o){const r=n-e;return t/=o/2,t<1?r/2*t*t*t+e:r/2*((t-=2)*t*t+2)+e}function ks(t,e={}){const{getContainer:n=()=>window,callback:o,duration:r=450}=e,s=n(),a=$s(s),i=Date.now();let d;const c=()=>{const p=Date.now()-i,f=Ns(p>r?r:p,a,t,r);Cn(s)?s.scrollTo(window.pageXOffset,f):s instanceof Document||s.constructor.name==="HTMLDocument"?s.documentElement.scrollTop=f:s.scrollTop=f,p{Ct.cancel(d)}}function Le(t,e){return t[e]}function or(t,e){return`${t}-${e}`}function Is(t){return t&&t.type&&t.type.isTreeNode}function zt(t,e){return t??e}function vt(t){const{title:e,_title:n,key:o,children:r}=t||{},s=e||"title";return{title:s,_title:n||[s],key:o||"key",children:r||"children"}}function rr(t){function e(n){return Wo(n).map(r=>{if(!Is(r))return st(!r,"Tree/TreeNode can only accept TreeNode as children."),null;const{key:s}=r,{children:a,...i}=r.props,d={key:s,...i},c=e(a);return c.length&&(d.children=c),d}).filter(r=>r)}return e(t)}function mn(t,e,n){const{_title:o,key:r,children:s}=vt(n),a=new Set(e===!0?[]:e),i=[];function d(c,u=null){return c.map((p,f)=>{const m=or(u?u.pos:"0",f),h=zt(p[r],m);let b;for(let y=0;yf[s]:typeof s=="function"&&(u=f=>s(f)):u=(f,m)=>zt(f[i],m);function p(f,m,h,b){const x=f?f[c]:t,y=f?or(h.pos,m):"0",C=f?[...b,f]:[];if(f){const E=u(f,y),$={node:f,index:m,pos:y,key:E,parentPos:h.node?h.pos:null,level:h.level+1,nodes:C};e($)}x&&x.forEach((E,$)=>{p(E,$,{node:f,pos:y,level:h?h.level+1:-1},C)})}p(null)}function jn(t,{initWrapper:e,processEntity:n,onProcessFinished:o,externalGetKey:r,childrenPropName:s,fieldNames:a}={},i){const d=r||i,c={},u={};let p={posEntities:c,keyEntities:u};return e&&(p=e(p)||p),Rs(t,f=>{const{node:m,index:h,pos:b,key:x,parentPos:y,level:C,nodes:E}=f,$={node:m,nodes:E,index:h,key:x,pos:b,level:C},w=zt(x,b);c[b]=$,u[w]=$,$.parent=c[y],$.parent&&($.parent.children=$.parent.children||[],$.parent.children.push($)),n&&n($,p)},{externalGetKey:d,childrenPropName:s,fieldNames:a}),o&&o(p),p}function sr(t,e,n,o){return t===!1?!1:t||!e&&!n||e&&o&&!n}function Bt(t,{expandedKeys:e,selectedKeys:n,loadedKeys:o,loadingKeys:r,checkedKeys:s,halfCheckedKeys:a,dragOverNodeKey:i,dropPosition:d,keyEntities:c}){const u=Le(c,t);return{eventKey:t,expanded:e.indexOf(t)!==-1,selected:n.indexOf(t)!==-1,loaded:o.indexOf(t)!==-1,loading:r.indexOf(t)!==-1,checked:s.indexOf(t)!==-1,halfChecked:a.indexOf(t)!==-1,pos:String(u?u.pos:""),dragOver:i===t&&d===0,dragOverGapTop:i===t&&d===-1,dragOverGapBottom:i===t&&d===1}}function ve(t){const{data:e,expanded:n,selected:o,checked:r,loaded:s,loading:a,halfChecked:i,dragOver:d,dragOverGapTop:c,dragOverGapBottom:u,pos:p,active:f,eventKey:m}=t,h={...e,expanded:n,selected:o,checked:r,loaded:s,loading:a,halfChecked:i,dragOver:d,dragOverGapTop:c,dragOverGapBottom:u,pos:p,active:f,key:m};return"props"in h||Object.defineProperty(h,"props",{get(){return st(!1,"Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`."),t}}),h}function lr(t,e){const n=new Set;return t.forEach(o=>{e.has(o)||n.add(o)}),n}function Ks(t){const{disabled:e,disableCheckbox:n,checkable:o}=t||{};return!!(e||n)||o===!1}function Ps(t,e,n,o){const r=new Set(t),s=new Set;for(let i=0;i<=n;i+=1)(e.get(i)||new Set).forEach(c=>{const{key:u,node:p,children:f=[]}=c;r.has(u)&&!o(p)&&f.filter(m=>!o(m.node)).forEach(m=>{r.add(m.key)})});const a=new Set;for(let i=n;i>=0;i-=1)(e.get(i)||new Set).forEach(c=>{const{parent:u,node:p}=c;if(o(p)||!c.parent||a.has(c.parent.key))return;if(o(c.parent.node)){a.add(u.key);return}let f=!0,m=!1;(u.children||[]).filter(h=>!o(h.node)).forEach(({key:h})=>{const b=r.has(h);f&&!b&&(f=!1),!m&&(b||s.has(h))&&(m=!0)}),f&&r.add(u.key),m&&s.add(u.key),a.add(u.key)});return{checkedKeys:Array.from(r),halfCheckedKeys:Array.from(lr(s,r))}}function Ts(t,e,n,o,r){const s=new Set(t);let a=new Set(e);for(let d=0;d<=o;d+=1)(n.get(d)||new Set).forEach(u=>{const{key:p,node:f,children:m=[]}=u;!s.has(p)&&!a.has(p)&&!r(f)&&m.filter(h=>!r(h.node)).forEach(h=>{s.delete(h.key)})});a=new Set;const i=new Set;for(let d=o;d>=0;d-=1)(n.get(d)||new Set).forEach(u=>{const{parent:p,node:f}=u;if(r(f)||!u.parent||i.has(u.parent.key))return;if(r(u.parent.node)){i.add(p.key);return}let m=!0,h=!1;(p.children||[]).filter(b=>!r(b.node)).forEach(({key:b})=>{const x=s.has(b);m&&!x&&(m=!1),!h&&(x||a.has(b))&&(h=!0)}),m||s.delete(p.key),h&&a.add(p.key),i.add(p.key)});return{checkedKeys:Array.from(s),halfCheckedKeys:Array.from(lr(a,s))}}function St(t,e,n,o){const r=[];let s;o?s=o:s=Ks;const a=new Set(t.filter(u=>{const p=!!Le(n,u);return p||r.push(u),p})),i=new Map;let d=0;Object.keys(n).forEach(u=>{const p=n[u],{level:f}=p;let m=i.get(f);m||(m=new Set,i.set(f,m)),m.add(p),d=Math.max(d,f)}),st(!r.length,`Tree missing follow keys: ${r.slice(0,100).map(u=>`'${u}'`).join(", ")}`);let c;return e===!0?c=Ps(a,i,d,s):c=Ts(a,e.halfCheckedKeys,i,d,s),c}const ot={},Wt="rc-table-internal-hook";function Vn(t){const e=l.createContext(void 0);return{Context:e,Provider:({value:o,children:r})=>{const s=l.useRef(o);s.current=o;const[a]=l.useState(()=>({getValue:()=>s.current,listeners:new Set}));return et(()=>{Ar.unstable_batchedUpdates(()=>{a.listeners.forEach(i=>{i(o)})})},[o]),l.createElement(e.Provider,{value:a},r)},defaultValue:t}}function Ne(t,e){const n=lt(typeof e=="function"?e:d=>{if(e===void 0)return d;if(!Array.isArray(e))return d[e];const c={};return e.forEach(u=>{c[u]=d[u]}),c}),o=l.useContext(t?.Context),{listeners:r,getValue:s}=o||{},a=l.useRef();a.current=n(o?s():t?.defaultValue);const[,i]=l.useState({});return et(()=>{if(!o)return;function d(c){const u=n(c);Et(a.current,u,!0)||i({})}return r.add(d),()=>{r.delete(d)}},[o]),a.current}function Lt(){return Lt=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const u=a?{ref:c}:{},p=l.useRef(0),f=l.useRef(d);return e()!==null?l.createElement(r,Lt({},d,u)):((!s||s(f.current,d))&&(p.current+=1),f.current=d,l.createElement(t.Provider,{value:p.current},l.createElement(r,Lt({},d,u))))};return a?l.forwardRef(i):i}function o(r,s){const a=to(r),i=(d,c)=>{const u=a?{ref:c}:{};return e(),l.createElement(r,Lt({},d,u))};return l.memo(a?l.forwardRef(i):i,s)}return{makeImmutable:n,responseImmutable:o,useImmutableMark:e}}const{makeImmutable:ar,responseImmutable:$t,useImmutableMark:Ms}=Ds(),De=Vn(),ir=l.createContext({renderWithProps:!1}),Os="RC_TABLE_KEY";function Bs(t){return t==null?[]:Array.isArray(t)?t:[t]}function sn(t){const e=[],n={};return t.forEach(o=>{const{key:r,dataIndex:s}=o||{};let a=r||Bs(s).join("-")||Os;for(;n[a];)a=`${a}_next`;n[a]=!0,e.push(a)}),e}function Sn(t){return t!=null}function Ls(t){return typeof t=="number"&&!Number.isNaN(t)}function As(t){return t&&typeof t=="object"&&!Array.isArray(t)&&!l.isValidElement(t)}function Hs(t,e,n,o,r,s){const a=l.useContext(ir),i=Ms();return jo(()=>{if(Sn(o))return[o];const c=e==null||e===""?[]:Array.isArray(e)?e:[e],u=Hn(t,c);let p=u,f;if(r){const m=r(u,t,n);As(m)?(p=m.children,f=m.props,a.renderWithProps=!0):p=m}return[p,f]},[i,t,o,e,r,n],(c,u)=>{if(s){const[,p]=c,[,f]=u;return s(f,p)}return a.renderWithProps?!0:!Et(c,u,!0)})}function Fs(t,e,n,o){const r=t+e-1;return t<=o&&r>=n}function zs(t,e){return Ne(De,n=>[Fs(t,e||1,n.hoverStartRow,n.hoverEndRow),n.onHover])}function wn(){return wn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{let o;const r=t===!0?{showTitle:!0}:t;return r&&(r.showTitle||e==="header")&&(typeof n=="string"||typeof n=="number"?o=n.toString():l.isValidElement(n)&&typeof n.props?.children=="string"&&(o=n.props?.children)),o},_s=t=>{const{component:e,children:n,ellipsis:o,scope:r,prefixCls:s,className:a,style:i,align:d,record:c,render:u,dataIndex:p,renderIndex:f,shouldCellUpdate:m,index:h,rowType:b,colSpan:x,rowSpan:y,fixStart:C,fixEnd:E,fixedStartShadow:$,fixedEndShadow:w,offsetFixedStartShadow:P,offsetFixedEndShadow:g,zIndex:v,zIndexReverse:k,appendNode:I,additionalProps:S={},isSticky:K}=t,N=`${s}-cell`,{allColumnsFixedLeft:R,rowHoverable:O}=Ne(De,["allColumnsFixedLeft","rowHoverable"]),[z,U]=Hs(c,p,f,n,u,m),q={},D=typeof C=="number"&&!R,G=typeof E=="number"&&!R,[ee,L]=Ne(De,({scrollInfo:A})=>{if(!D&&!G)return[!1,!1];const[B,j]=A,T=(D&&$&&B)-P>=1,M=(G&&w&&j-B)-g>1;return[T,M]});D&&(q.insetInlineStart=C,q["--z-offset"]=v,q["--z-offset-reverse"]=k),G&&(q.insetInlineEnd=E,q["--z-offset"]=v,q["--z-offset-reverse"]=k);const Q=U?.colSpan??S.colSpan??x??1,Y=U?.rowSpan??S.rowSpan??y??1,[fe,_]=zs(h,Y),$e=lt(A=>{c&&_(h,h+Y-1),S?.onMouseEnter?.(A)}),ce=lt(A=>{c&&_(-1,-1),S?.onMouseLeave?.(A)});if(Q===0||Y===0)return null;const me=S.title??Ws({rowType:b,ellipsis:o,children:z}),ae=V(N,a,{[`${N}-fix`]:D||G,[`${N}-fix-start`]:D,[`${N}-fix-end`]:G,[`${N}-fix-start-shadow`]:$,[`${N}-fix-start-shadow-show`]:$&&ee,[`${N}-fix-end-shadow`]:w,[`${N}-fix-end-shadow-show`]:w&&L,[`${N}-ellipsis`]:o,[`${N}-with-append`]:I,[`${N}-fix-sticky`]:(D||G)&&K,[`${N}-row-hover`]:!U&&fe},S.className,U?.className),re={};d&&(re.textAlign=d);const X={...U?.style,...q,...re,...S.style,...i};let H=z;return typeof H=="object"&&!Array.isArray(H)&&!l.isValidElement(H)&&(H=null),o&&($||w)&&(H=l.createElement("span",{className:`${N}-content`},H)),l.createElement(e,wn({},U,S,{className:ae,style:X,title:me,scope:r,onMouseEnter:O?$e:void 0,onMouseLeave:O?ce:void 0,colSpan:Q!==1?Q:null,rowSpan:Y!==1?Y:null}),I,H)},Nt=l.memo(_s);function Xt(t){return t.fixed==="start"}function Gt(t){return t.fixed==="end"}function Un(t,e,n,o){const r=n[t]||{},s=n[e]||{};let a=null,i=null;Xt(r)&&Xt(s)?a=o.start[t]:Gt(s)&&Gt(r)&&(i=o.end[e]);let d=!1,c=!1,u=0,p=0;a!==null&&(d=!n[e+1]||!Xt(n[e+1]),u=n.length*2-t,p=n.length+t),i!==null&&(c=!n[t-1]||!Gt(n[t-1]),u=e,p=n.length-e);let f=0,m=0;if(d)for(let h=0;he;h-=1)Gt(n[h])||(m+=o.widths[h]||0);return{fixStart:a,fixEnd:i,fixedStartShadow:d,fixedEndShadow:c,offsetFixedStartShadow:f,offsetFixedEndShadow:m,isSticky:o.isSticky,zIndex:u,zIndexReverse:p}}const cr=l.createContext({});function En(){return En=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{className:e,index:n,children:o,colSpan:r=1,rowSpan:s,align:a}=t,{prefixCls:i}=Ne(De,["prefixCls"]),{scrollColumnIndex:d,stickyOffsets:c,flattenColumns:u}=l.useContext(cr),f=n+r-1+1===d?r+1:r,m=l.useMemo(()=>Un(n,n+f-1,u,c),[n,f,u,c]);return l.createElement(Nt,En({className:e,index:n,component:"td",prefixCls:i,record:null,dataIndex:null,align:a,colSpan:f,rowSpan:s,render:()=>o},m))},Vs=t=>{const{children:e,...n}=t;return l.createElement("tr",n,e)},ln=t=>{const{children:e}=t;return e};ln.Row=Vs;ln.Cell=js;const Us=t=>{const{children:e,stickyOffsets:n,flattenColumns:o}=t,r=Ne(De,"prefixCls"),s=o.length-1,a=o[s],i=l.useMemo(()=>({stickyOffsets:n,flattenColumns:o,scrollColumnIndex:a?.scrollbar?s:null}),[a,o,s,n]);return l.createElement(cr.Provider,{value:i},l.createElement("tfoot",{className:`${r}-summary`},e))},Yt=$t(Us),dr=ln;function qs(t){return null}function Xs(t){return null}function ur(t,e,n,o,r,s,a){const i=s(e,a);t.push({record:e,indent:n,index:a,rowKey:i});const d=r?.has(i);if(e&&Array.isArray(e[o])&&d)for(let c=0;c{if(n?.size){const s=[];for(let a=0;a({record:s,indent:0,index:a,rowKey:o(s,a)}))},[t,e,n,o])}function pr(t,e,n,o){const r=Ne(De,["prefixCls","fixedInfoList","flattenColumns","expandableType","expandRowByClick","onTriggerExpand","rowClassName","expandedRowClassName","indentSize","expandIcon","expandedRowRender","expandIconColumnIndex","expandedKeys","childrenColumnName","rowExpandable","onRow"]),{flattenColumns:s,expandableType:a,expandedKeys:i,childrenColumnName:d,onTriggerExpand:c,rowExpandable:u,onRow:p,expandRowByClick:f,rowClassName:m}=r,h=a==="nest",b=a==="row"&&(!u||u(t)),x=b||h,y=i&&i.has(e),C=d&&t&&t[d],E=lt(c),$=p?.(t,n),w=$?.onClick,P=(k,...I)=>{f&&x&&c(t,k),w?.(k,...I)};let g;typeof m=="string"?g=m:typeof m=="function"&&(g=m(t,n,o));const v=sn(s);return{...r,columnsKey:v,nestExpandable:h,expanded:y,hasNestChildren:C,record:t,onTriggerExpand:E,rowSupportExpand:b,expandable:x,rowProps:{...$,className:V(g,$?.className),onClick:P}}}const mr=t=>{const{prefixCls:e,children:n,component:o,cellComponent:r,className:s,expanded:a,colSpan:i,isEmpty:d,stickyOffset:c=0}=t,{scrollbarSize:u,fixHeader:p,fixColumn:f,componentWidth:m,horizonScroll:h}=Ne(De,["scrollbarSize","fixHeader","fixColumn","componentWidth","horizonScroll"]);let b=n;return(d?h&&m:f)&&(b=l.createElement("div",{style:{width:m-c-(p&&!d?u:0),position:"sticky",left:c,overflow:"hidden"},className:`${e}-expanded-row-fixed`},b)),l.createElement(o,{className:s,style:{display:a?null:"none"}},l.createElement(Nt,{component:r,prefixCls:e,colSpan:i},b))};function Gs({prefixCls:t,record:e,onExpand:n,expanded:o,expandable:r}){const s=`${t}-row-expand-icon`;if(!r)return l.createElement("span",{className:V(s,`${t}-row-spaced`)});const a=i=>{n(e,i),i.stopPropagation()};return l.createElement("span",{className:V(s,{[`${t}-row-expanded`]:o,[`${t}-row-collapsed`]:!o}),onClick:a})}function Ys(t,e,n){const o=[];function r(s){(s||[]).forEach((a,i)=>{o.push(e(a,i)),r(a[n])})}return r(t),o}function hr(t,e,n,o){return typeof t=="string"?t:typeof t=="function"?t(e,n,o):""}function en(){return en=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{className:e,style:n,classNames:o,styles:r,record:s,index:a,renderIndex:i,rowKey:d,rowKeys:c,indent:u=0,rowComponent:p,cellComponent:f,scopeCellComponent:m,expandedRowInfo:h}=t,b=pr(s,d,a,u),{prefixCls:x,flattenColumns:y,expandedRowClassName:C,expandedRowRender:E,rowProps:$,expanded:w,rowSupportExpand:P}=b,g=l.useRef(!1);g.current||=w;const v=hr(C,s,a,u),k=l.createElement(p,en({},$,{"data-row-key":d,className:V(e,`${x}-row`,`${x}-row-level-${u}`,$?.className,o.row,{[v]:u>=1}),style:{...n,...$?.style,...r.row}}),y.map((S,K)=>{const{render:N,dataIndex:R,className:O}=S,{key:z,fixedInfo:U,appendCellNode:q,additionalCellProps:D}=gr(b,S,K,u,a,c,h?.offset);return l.createElement(Nt,en({className:V(O,o.cell),style:r.cell,ellipsis:S.ellipsis,align:S.align,scope:S.rowScope,component:S.rowScope?m:f,prefixCls:x,key:z,record:s,index:a,renderIndex:i,dataIndex:R,render:N,shouldCellUpdate:S.shouldCellUpdate},U,{appendNode:q,additionalProps:D}))}));let I;if(P&&(g.current||w)){const S=E(s,a,u+1,w);I=l.createElement(mr,{expanded:w,className:V(`${x}-expanded-row`,`${x}-expanded-row-level-${u+1}`,v),prefixCls:x,component:p,cellComponent:f,colSpan:h?h.colSpan:y.length,isEmpty:!1,stickyOffset:h?.sticky},S)}return l.createElement(l.Fragment,null,k,I)},Qs=$t(Zs),Js=t=>{const{columnKey:e,onColumnResize:n,title:o}=t,r=l.useRef(null);return et(()=>{r.current&&n(e,r.current.offsetWidth)},[]),l.createElement(Fn,{data:e},l.createElement("td",{ref:r,style:{paddingTop:0,paddingBottom:0,borderTop:0,borderBottom:0,height:0}},l.createElement("div",{style:{height:0,overflow:"hidden",fontWeight:"bold"}},o||" ")))},el=({prefixCls:t,columnsKey:e,onColumnResize:n,columns:o})=>{const r=l.useRef(null),{measureRowRender:s}=Ne(De,["measureRowRender"]),a=l.createElement("tr",{"aria-hidden":"true",className:`${t}-measure-row`,style:{height:0},ref:r},l.createElement(Fn.Collection,{onBatchResize:i=>{Hr(r.current)&&i.forEach(({data:d,size:c})=>{n(d,c.offsetWidth)})}},e.map(i=>{const c=o.find(p=>p.key===i)?.title,u=l.isValidElement(c)?l.cloneElement(c,{ref:null}):c;return l.createElement(Js,{key:i,columnKey:i,onColumnResize:n,title:u})})));return typeof s=="function"?s(a):a},tl=t=>{const{data:e,measureColumnWidth:n}=t,{prefixCls:o,getComponent:r,onColumnResize:s,flattenColumns:a,getRowKey:i,expandedKeys:d,childrenColumnName:c,emptyNode:u,classNames:p,styles:f,expandedRowOffset:m=0,colWidths:h}=Ne(De,["prefixCls","getComponent","onColumnResize","flattenColumns","getRowKey","expandedKeys","childrenColumnName","emptyNode","classNames","styles","expandedRowOffset","fixedInfoList","colWidths"]),{body:b={}}=p||{},{body:x={}}=f||{},y=fr(e,c,d,i),C=l.useMemo(()=>y.map(S=>S.rowKey),[y]),E=l.useRef({renderWithProps:!1}),$=l.useMemo(()=>{const S=a.length-m;let K=0;for(let N=0;N{const{record:N,indent:R,index:O,rowKey:z}=S;return l.createElement(Qs,{classNames:b,styles:x,key:z,rowKey:z,rowKeys:C,record:N,index:K,renderIndex:O,rowComponent:P,cellComponent:g,scopeCellComponent:v,indent:R,expandedRowInfo:$})}):k=l.createElement(mr,{expanded:!0,className:`${o}-placeholder`,prefixCls:o,component:P,cellComponent:g,colSpan:a.length,isEmpty:!0},u);const I=sn(a);return l.createElement(ir.Provider,{value:E.current},l.createElement(w,{style:x.wrapper,className:V(`${o}-tbody`,b.wrapper)},n&&l.createElement(el,{prefixCls:o,columnsKey:I,onColumnResize:s,columns:a}),k))},nl=$t(tl),At="RC_TABLE_INTERNAL_COL_DEFINE";function ol(t){const{expandable:e,...n}=t;let o;return"expandable"in t?o={...n,...e}:o=n,o.showExpandColumn===!1&&(o.expandIconColumnIndex=-1),o}function vn(){return vn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{colWidths:e,columns:n,columCount:o}=t,{tableLayout:r}=Ne(De,["tableLayout"]),s=[],a=o||n.length;let i=!1;for(let d=a-1;d>=0;d-=1){const c=e[d],u=n&&n[d];let p,f;if(u&&(p=u[At],r==="auto"&&(f=u.minWidth)),c||f||p||i){const{columnType:m,...h}=p||{};s.unshift(l.createElement("col",vn({key:d,style:{width:c,minWidth:f}},h))),i=!0}}return s.length>0?l.createElement("colgroup",null,s):null};function rl(t,e){return l.useMemo(()=>{const n=[];for(let o=0;o{const{className:n,style:o,noData:r,columns:s,flattenColumns:a,colWidths:i,colGroup:d,columCount:c,stickyOffsets:u,direction:p,fixHeader:f,stickyTopOffset:m,stickyBottomOffset:h,stickyClassName:b,scrollX:x,tableLayout:y="fixed",onScroll:C,maxContentScroll:E,children:$,...w}=t,{prefixCls:P,scrollbarSize:g,isSticky:v,getComponent:k}=Ne(De,["prefixCls","scrollbarSize","isSticky","getComponent"]),I=k(["header","table"],"table"),S=v&&!f?0:g,K=l.useRef(null),N=l.useCallback(ee=>{no(e,ee),no(K,ee)},[]);l.useEffect(()=>{function ee(Q){const{currentTarget:Y,deltaX:fe}=Q;if(fe){const{scrollLeft:_,scrollWidth:$e,clientWidth:ce}=Y,me=$e-ce;let ae=_+fe;p==="rtl"?(ae=Math.max(-me,ae),ae=Math.min(0,ae)):(ae=Math.min(me,ae),ae=Math.max(0,ae)),C({currentTarget:Y,scrollLeft:ae}),Q.preventDefault()}}const L=K.current;return L?.addEventListener("wheel",ee,{passive:!1}),()=>{L?.removeEventListener("wheel",ee)}},[]);const R=a[a.length-1],O={fixed:R?R.fixed:null,scrollbar:!0,onHeaderCell:()=>({className:`${P}-cell-scrollbar`})},z=l.useMemo(()=>S?[...s,O]:s,[S,s]),U=l.useMemo(()=>S?[...a,O]:a,[S,a]),q=l.useMemo(()=>{const{start:ee,end:L}=u;return{...u,start:ee,end:[...L.map(Q=>Q+S),0],isSticky:v}},[S,u,v]),D=rl(i,c),G=l.useMemo(()=>{const ee=!D||!D.length||D.every(L=>!L);return r||ee},[r,D]);return l.createElement("div",{style:{overflow:"hidden",...v?{top:m,bottom:h}:{},...o},ref:N,className:V(n,{[b]:!!b})},l.createElement(I,{style:{tableLayout:y,minWidth:"100%",width:x}},G?d:l.createElement(yr,{colWidths:[...D,S],columCount:c+1,columns:U}),$({...w,stickyOffsets:q,columns:z,flattenColumns:U})))}),uo=l.memo(sl);function tn(){return tn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{cells:e,stickyOffsets:n,flattenColumns:o,rowComponent:r,cellComponent:s,onHeaderRow:a,index:i,classNames:d,styles:c}=t,{prefixCls:u}=Ne(De,["prefixCls"]);let p;a&&(p=a(e.map(m=>m.column),i));const f=sn(e.map(m=>m.column));return l.createElement(r,tn({},p,{className:d.row,style:c.row}),e.map((m,h)=>{const{column:b,colStart:x,colEnd:y,colSpan:C}=m,E=Un(x,y,o,n),$=b?.onHeaderCell?.(b)||{};return l.createElement(Nt,tn({},m,{scope:b.title?C>1?"colgroup":"col":null,ellipsis:b.ellipsis,align:b.align,component:s,prefixCls:u,key:f[h]},E,{additionalProps:$,rowType:"header"}))}))};function al(t,e,n){const o=[];function r(a,i,d=0){o[d]=o[d]||[];let c=i;return a.filter(Boolean).map(p=>{const f={key:p.key,className:V(p.className,e.cell)||"",style:n.cell,children:p.title,column:p,colStart:c};let m=1;const h=p.children;return h&&h.length>0&&(m=r(h,c,d+1).reduce((b,x)=>b+x,0),f.hasSubColumns=!0),"colSpan"in p&&({colSpan:m}=p),"rowSpan"in p&&(f.rowSpan=p.rowSpan),f.colSpan=m,f.colEnd=f.colStart+m-1,o[d].push(f),c+=m,m})}r(t,0);const s=o.length;for(let a=0;a{!("rowSpan"in i)&&!i.hasSubColumns&&(i.rowSpan=s-a)});return o}const il=t=>{const{stickyOffsets:e,columns:n,flattenColumns:o,onHeaderRow:r}=t,{prefixCls:s,getComponent:a,classNames:i,styles:d}=Ne(De,["prefixCls","getComponent","classNames","styles"]),{header:c={}}=i||{},{header:u={}}=d||{},p=l.useMemo(()=>al(n,c,u),[n,c,u]),f=a(["header","wrapper"],"thead"),m=a(["header","row"],"tr"),h=a(["header","cell"],"th");return l.createElement(f,{className:V(`${s}-thead`,c.wrapper),style:u.wrapper},p.map((b,x)=>l.createElement(ll,{classNames:c,styles:u,key:x,flattenColumns:o,cells:b,stickyOffsets:e,rowComponent:m,cellComponent:h,onHeaderRow:r,index:x})))},fo=$t(il);function po(t,e=""){return typeof e=="number"?e:e.endsWith("%")?t*parseFloat(e)/100:null}function cl(t,e,n){return l.useMemo(()=>{if(e&&e>0){let o=0,r=0;t.forEach(p=>{const f=po(e,p.width);f?o+=f:r+=1});const s=Math.max(e,n);let a=Math.max(s-o,r),i=r;const d=a/r;let c=0;const u=t.map(p=>{const f={...p},m=po(e,f.width);if(m)f.width=m;else{const h=Math.floor(d);f.width=i===1?a:h,a-=h,i-=1}return c+=f.width,f});if(c{const h=Math.floor(f.width*p);f.width=m===u.length-1?a:h,a-=h})}return[u,Math.max(c,s)]}return[t,e]},[t,e,n])}function qn(t){return Wo(t).filter(e=>l.isValidElement(e)).map(e=>{const{key:n,props:o}=e,{children:r,...s}=o,a={key:n,...s};return r&&(a.children=qn(r)),a})}function br(t){return t.filter(e=>e&&typeof e=="object"&&!e.hidden).map(e=>{const n=e.children;return n&&n.length>0?{...e,children:br(n)}:e})}function xr(t,e="key"){return t.filter(n=>n&&typeof n=="object").reduce((n,o,r)=>{const{fixed:s}=o,a=s===!0||s==="left"?"start":s==="right"?"end":s,i=`${e}-${r}`,d=o.children;return d&&d.length>0?[...n,...xr(d,i).map(c=>({...c,fixed:c.fixed??a}))]:[...n,{key:i,...o,fixed:a}]},[])}function dl({prefixCls:t,columns:e,children:n,expandable:o,expandedKeys:r,columnTitle:s,getRowKey:a,onTriggerExpand:i,expandIcon:d,rowExpandable:c,expandIconColumnIndex:u,expandedRowOffset:p=0,direction:f,expandRowByClick:m,columnWidth:h,fixed:b,scrollWidth:x,clientWidth:y},C){const E=l.useMemo(()=>{const k=e||qn(n)||[];return br(k.slice())},[e,n]),$=l.useMemo(()=>{if(o){let k=E.slice();if(!k.includes(ot)){const R=u||0,O=R===0&&(b==="right"||b==="end")?E.length:R;O>=0&&k.splice(O,0,ot)}const I=k.indexOf(ot);k=k.filter((R,O)=>R!==ot||O===I);const S=E[I];let K;b?K=b:K=S?S.fixed:null;const N={[At]:{className:`${t}-expand-icon-col`,columnType:"EXPAND_COLUMN"},title:s,fixed:K,className:`${t}-row-expand-icon-cell`,width:h,render:(R,O,z)=>{const U=a(O,z),q=r.has(U),D=c?c(O):!0,G=d({prefixCls:t,expanded:q,expandable:D,record:O,onExpand:i});return m?l.createElement("span",{onClick:ee=>ee.stopPropagation()},G):G}};return k.map((R,O)=>{const z=R===ot?N:R;return Ok!==ot)},[o,E,a,r,d,f,p]),w=l.useMemo(()=>{let k=$;return C&&(k=C(k)),k.length||(k=[{render:()=>null}]),k},[C,$,f]),P=l.useMemo(()=>xr(w),[w,f,x]),[g,v]=cl(P,x,y);return[w,g,v]}function ul(t,e,n){const o=ol(t),{expandIcon:r,expandedRowKeys:s,defaultExpandedRowKeys:a,defaultExpandAllRows:i,expandedRowRender:d,onExpand:c,onExpandedRowsChange:u,childrenColumnName:p}=o,f=r||Gs,m=p||"children",h=l.useMemo(()=>d?"row":t.expandable&&t.internalHooks===Wt&&t.expandable.__PARENT_RENDER_ICON__||e.some(E=>E&&typeof E=="object"&&E[m])?"nest":!1,[!!d,e]),[b,x]=l.useState(()=>a||(i?Ys(e,n,m):[])),y=l.useMemo(()=>new Set(s||b||[]),[s,b]),C=l.useCallback(E=>{const $=n(E,e.indexOf(E));let w;const P=y.has($);P?(y.delete($),w=[...y]):w=[...y,$],x(w),c&&c(!P,E),u&&u(w)},[n,y,e,c,u]);return[o,h,y,f,m,C]}function fl(t,e){const n=l.useMemo(()=>t.map((o,r)=>Un(r,r,t,e)),[t,e]);return jo(()=>n,[n],(o,r)=>!Et(o,r))}function pl(t){const e=l.useRef(t),[,n]=l.useState({}),o=l.useRef(null),r=l.useRef([]);function s(a){r.current.push(a);const i=Promise.resolve();o.current=i,i.then(()=>{if(o.current===i){const d=r.current,c=e.current;r.current=[],d.forEach(u=>{e.current=u(e.current)}),o.current=null,c!==e.current&&n({})}})}return l.useEffect(()=>()=>{o.current=null},[]),[e.current,s]}function ml(t){const e=l.useRef(null),n=l.useRef(null);function o(){clearTimeout(n.current)}function r(a){e.current=a,o(),n.current=setTimeout(()=>{e.current=null,n.current=void 0},100)}function s(){return e.current}return l.useEffect(()=>o,[]),[r,s]}function hl(){const[t,e]=l.useState(-1),[n,o]=l.useState(-1),r=l.useCallback((s,a)=>{e(s),o(a)},[]);return[t,n,r]}const mo=Fr()?window:null;function gl(t,e){const{offsetHeader:n=0,offsetSummary:o=0,offsetScroll:r=0,getContainer:s=()=>mo}=typeof t=="object"?t:{},a=s()||mo,i=!!t;return l.useMemo(()=>({isSticky:i,stickyClassName:i?`${e}-sticky-holder`:"",offsetHeader:n,offsetSummary:o,offsetScroll:r,container:a}),[i,r,n,o,e,a])}function yl(t,e){return l.useMemo(()=>{const o=e.length,r=(i,d,c)=>{const u=[];let p=0;for(let f=i;f!==d;f+=c)u.push(p),e[f].fixed&&(p+=t[f]||0);return u},s=r(0,o,1),a=r(o-1,-1,-1).reverse();return{start:s,end:a,widths:t}},[t,e])}const ho=t=>{const{children:e,className:n,style:o}=t;return l.createElement("div",{className:n,style:o},e)};function go(t){const n=zn(t).getBoundingClientRect(),o=document.documentElement;return{left:n.left+(window.pageXOffset||o.scrollLeft)-(o.clientLeft||document.body.clientLeft||0),top:n.top+(window.pageYOffset||o.scrollTop)-(o.clientTop||document.body.clientTop||0)}}const yo="mouseup",bo="mousemove",xt="scroll",xo="resize",bl=(t,e)=>{const{scrollBodyRef:n,onScroll:o,offsetScroll:r,container:s,direction:a}=t,i=Ne(De,"prefixCls"),d=n.current?.scrollWidth||0,c=n.current?.clientWidth||0,u=d&&c*(c/d),p=l.useRef(null),[f,m]=pl({scrollLeft:0,isHiddenScrollBar:!0}),h=l.useRef({delta:0,x:0}),[b,x]=l.useState(!1),y=l.useRef(null);l.useEffect(()=>()=>{Ct.cancel(y.current)},[]);const C=()=>{x(!1)},E=g=>{g.persist(),h.current.delta=g.pageX-f.scrollLeft,h.current.x=0,x(!0),g.preventDefault()},$=g=>{const{buttons:v}=g||window?.event;if(!b||v===0){b&&x(!1);return}let k=h.current.x+g.pageX-h.current.x-h.current.delta;const I=a==="rtl";k=Math.max(I?u-c:0,Math.min(I?0:c-u,k)),(!I||Math.abs(k)+Math.abs(u){Ct.cancel(y.current),y.current=Ct(()=>{if(!n.current)return;const g=go(n.current).top,v=g+n.current.offsetHeight,k=s===window?document.documentElement.scrollTop+window.innerHeight:go(s).top+s.clientHeight;v-oo()<=k||g>=k-r?m(I=>({...I,isHiddenScrollBar:!0})):m(I=>({...I,isHiddenScrollBar:!1}))})},P=g=>{m(v=>({...v,scrollLeft:g/d*c||0}))};return l.useImperativeHandle(e,()=>({setScrollLeft:P,checkScrollBarVisible:w})),l.useEffect(()=>(document.body.addEventListener(yo,C,!1),document.body.addEventListener(bo,$,!1),w(),()=>{document.body.removeEventListener(yo,C),document.body.removeEventListener(bo,$)}),[u,b]),l.useEffect(()=>{if(n.current){const g=[];let v=zn(n.current);for(;v;)g.push(v),v=v.parentElement;return g.forEach(k=>{k.addEventListener(xt,w,!1)}),window.addEventListener(xo,w,!1),window.addEventListener(xt,w,!1),s.addEventListener(xt,w,!1),()=>{g.forEach(k=>{k.removeEventListener(xt,w)}),window.removeEventListener(xo,w),window.removeEventListener(xt,w),s.removeEventListener(xt,w)}}},[s]),l.useEffect(()=>{f.isHiddenScrollBar||m(g=>{const v=n.current;return v?{...g,scrollLeft:v.scrollLeft/v.scrollWidth*v.clientWidth}:g})},[f.isHiddenScrollBar]),d<=c||!u||f.isHiddenScrollBar?null:l.createElement("div",{style:{height:oo(),width:c,bottom:r},className:`${i}-sticky-scroll`},l.createElement("div",{onMouseDown:E,ref:p,className:V(`${i}-sticky-scroll-bar`,{[`${i}-sticky-scroll-bar-active`]:b}),style:{width:`${u}px`,transform:`translate3d(${f.scrollLeft}px, 0, 0)`}}))},xl=l.forwardRef(bl);function rt(){return rt=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const n={rowKey:"key",prefixCls:Cr,emptyText:wl,...t},{prefixCls:o,className:r,rowClassName:s,style:a,classNames:i,styles:d,data:c,rowKey:u,scroll:p,tableLayout:f,direction:m,title:h,footer:b,summary:x,caption:y,id:C,showHeader:E,components:$,emptyText:w,onRow:P,onHeaderRow:g,measureRowRender:v,onScroll:k,internalHooks:I,transformColumns:S,internalRefs:K,tailor:N,getContainerWidth:R,sticky:O,rowHoverable:z=!0}=n,U=c||Cl,q=!!U.length,D=I===Wt,G=l.useCallback((Z,pe)=>Hn($,Z)||pe,[$]),ee=l.useMemo(()=>typeof u=="function"?u:Z=>Z&&Z[u],[u]),L=G(["body"]),[Q,Y,fe]=hl(),[_,$e,ce,me,ae,re]=ul(n,U,ee),X=p?.x,[H,A]=l.useState(0),[B,j,T]=dl({...n,..._,expandable:!!_.expandedRowRender,columnTitle:_.columnTitle,expandedKeys:ce,getRowKey:ee,onTriggerExpand:re,expandIcon:me,expandIconColumnIndex:_.expandIconColumnIndex,direction:m,scrollWidth:D&&N&&typeof X=="number"?X:null,clientWidth:H},D?S:null),M=T??X,he=l.useMemo(()=>({columns:B,flattenColumns:j}),[B,j]),Se=l.useRef(null),xe=l.useRef(null),de=l.useRef(null),ke=l.useRef(null);l.useImperativeHandle(e,()=>({nativeElement:Se.current,scrollTo:Z=>{if(de.current instanceof HTMLElement){const{index:pe,top:Be,key:Qe,offset:Ge}=Z;if(Ls(Be))de.current?.scrollTo({top:Be});else{const Dt=Qe??ee(U[pe]),ht=de.current.querySelector(`[data-row-key="${Dt}"]`);if(ht)if(!Ge)ht.scrollIntoView();else{const Mt=ht.offsetTop;de.current.scrollTo({top:Mt+Ge})}}}else de.current?.scrollTo&&de.current.scrollTo(Z)}}));const ge=l.useRef(null),[Ke,Oe]=l.useState(!1),[F,Ie]=l.useState(!1),[Ve,te]=l.useState(new Map),ye=sn(j).map(Z=>Ve.get(Z)),le=l.useMemo(()=>ye,[ye.join("_")]),Ce=yl(le,j),ie=p&&Sn(p.y),se=p&&Sn(M)||!!_.fixed,He=se&&j.some(({fixed:Z})=>Z),be=l.useRef(null),{isSticky:we,offsetHeader:_e,offsetSummary:Ue,offsetScroll:ct,stickyClassName:Fe,container:je}=gl(O,o),Pe=l.useMemo(()=>x?.(U),[x,U]),ze=(ie||we)&&l.isValidElement(Pe)&&Pe.type===ln&&Pe.props.fixed;let Me,Ze,Rt;ie&&(Ze={overflowY:q?"scroll":"auto",maxHeight:p.y}),se&&(Me={overflowX:"auto"},ie||(Ze={overflowY:"hidden"}),Rt={width:M===!0?"auto":M,minWidth:"100%"});const _t=l.useCallback((Z,pe)=>{te(Be=>{if(Be.get(Z)!==pe){const Qe=new Map(Be);return Qe.set(Z,pe),Qe}return Be})},[]),[Ae,jt]=ml();function dt(Z,pe){pe&&(typeof pe=="function"?pe(Z):pe.scrollLeft!==Z&&(pe.scrollLeft=Z,pe.scrollLeft!==Z&&setTimeout(()=>{pe.scrollLeft=Z},0)))}const[Kt,cn]=l.useState([0,0]),tt=lt(({currentTarget:Z,scrollLeft:pe})=>{const Be=typeof pe=="number"?pe:Z.scrollLeft,Qe=Z||Sl;(!jt()||jt()===Qe)&&(Ae(Qe),dt(Be,xe.current),dt(Be,de.current),dt(Be,ge.current),dt(Be,be.current?.setScrollLeft));const Ge=Z||xe.current;if(Ge){const Dt=D&&N&&typeof M=="number"?M:Ge.scrollWidth,ht=Ge.clientWidth,Mt=Math.abs(Be);if(cn(Jn=>{const eo=[Mt,Dt-ht];return Et(Jn,eo)?Jn:eo}),Dt===ht){Oe(!1),Ie(!1);return}Oe(Mt>0),Ie(Mt{tt(Z),k?.(Z)}),Pt=()=>{se&&de.current?tt({currentTarget:zn(de.current),scrollLeft:de.current?.scrollLeft}):(Oe(!1),Ie(!1))},ut=Z=>{be.current?.checkScrollBarVisible();let pe=Z??Se.current?.offsetWidth??0;D&&R&&Se.current&&(pe=R(Se.current,pe)||pe),pe!==H&&(Pt(),A(pe))};et(()=>{se&&ut()},[se]);const yt=l.useRef(!1);l.useEffect(()=>{yt.current&&Pt()},[se,c,B.length]),l.useEffect(()=>{yt.current=!0},[]);const[bt,Vt]=l.useState(0);et(()=>{(!N||!D)&&(de.current instanceof Element?Vt(ro(de.current).width):Vt(ro(ke.current).width))},[]),l.useEffect(()=>{D&&K&&(K.body.current=de.current)});const un=l.useCallback(Z=>l.createElement(l.Fragment,null,l.createElement(fo,Z),ze==="top"&&l.createElement(Yt,Z,Pe)),[ze,Pe]),fn=l.useCallback(Z=>l.createElement(Yt,Z,Pe),[Pe]),Tt=G(["table"],"table"),ft=l.useMemo(()=>f||(He?M==="max-content"?"auto":"fixed":ie||we||j.some(({ellipsis:Z})=>Z)?"fixed":"auto"),[ie,He,j,f,we]);let J;const oe={colWidths:le,columCount:j.length,stickyOffsets:Ce,onHeaderRow:g,fixHeader:ie,scroll:p},Ee=l.useMemo(()=>q?null:typeof w=="function"?w():w,[q,w]),Te=l.createElement(nl,{data:U,measureColumnWidth:ie||se||we}),qe=l.createElement(yr,{colWidths:j.map(({width:Z})=>Z),columns:j}),pt=y!=null?l.createElement("caption",{className:`${o}-caption`},y):void 0,We=Qt(n,{data:!0}),Xe=Qt(n,{aria:!0});if(ie||we){let Z;typeof L=="function"?(Z=L(U,{scrollbarSize:bt,ref:de,onScroll:tt}),oe.colWidths=j.map(({width:Be},Qe)=>{const Ge=Qe===j.length-1?Be-bt:Be;return typeof Ge=="number"&&!Number.isNaN(Ge)?Ge:0})):Z=l.createElement("div",{style:{...Me,...Ze},onScroll:dn,ref:de,className:`${o}-body`},l.createElement(Tt,rt({style:{...Rt,tableLayout:ft}},Xe),pt,qe,Te,!ze&&Pe&&l.createElement(Yt,{stickyOffsets:Ce,flattenColumns:j},Pe)));const pe={noData:!U.length,maxContentScroll:se&&M==="max-content",...oe,...he,direction:m,stickyClassName:Fe,scrollX:M,tableLayout:ft,onScroll:tt};J=l.createElement(l.Fragment,null,E!==!1&&l.createElement(uo,rt({},pe,{stickyTopOffset:_e,className:`${o}-header`,ref:xe,colGroup:qe}),un),Z,ze&&ze!=="top"&&l.createElement(uo,rt({},pe,{stickyBottomOffset:Ue,className:`${o}-summary`,ref:ge,colGroup:qe}),fn),we&&de.current&&de.current instanceof Element&&l.createElement(xl,{ref:be,offsetScroll:ct,scrollBodyRef:de,onScroll:tt,container:je,direction:m}))}else J=l.createElement("div",{style:{...Me,...Ze,...d?.content},className:V(`${o}-content`,i?.content),onScroll:tt,ref:de},l.createElement(Tt,rt({style:{...Rt,tableLayout:ft}},Xe),pt,qe,E!==!1&&l.createElement(fo,rt({},oe,he)),Te,Pe&&l.createElement(Yt,{stickyOffsets:Ce,flattenColumns:j},Pe)));const Ut={...a};we&&(Ut["--columns-count"]=j.length);let mt=l.createElement("div",rt({className:V(o,r,{[`${o}-rtl`]:m==="rtl",[`${o}-fix-start-shadow`]:se,[`${o}-fix-end-shadow`]:se,[`${o}-fix-start-shadow-show`]:se&&Ke,[`${o}-fix-end-shadow-show`]:se&&F,[`${o}-layout-fixed`]:f==="fixed",[`${o}-fixed-header`]:ie,[`${o}-fixed-column`]:He,[`${o}-scroll-horizontal`]:se,[`${o}-has-fix-start`]:j[0]?.fixed,[`${o}-has-fix-end`]:j[j.length-1]?.fixed==="end"}),style:Ut,id:C,ref:Se},We),h&&l.createElement(ho,{className:V(`${o}-title`,i?.title),style:d?.title},h(U)),l.createElement("div",{ref:ke,className:V(`${o}-container`,i?.section),style:d?.section},J),b&&l.createElement(ho,{className:V(`${o}-footer`,i?.footer),style:d?.footer},b(U)));se&&(mt=l.createElement(Fn,{onResize:({offsetWidth:Z})=>ut(Z)},mt));const qt=fl(j,Ce),Br=l.useMemo(()=>({scrollX:M,scrollInfo:Kt,classNames:i,styles:d,prefixCls:o,getComponent:G,scrollbarSize:bt,direction:m,fixedInfoList:qt,isSticky:we,componentWidth:H,fixHeader:ie,fixColumn:He,horizonScroll:se,tableLayout:ft,rowClassName:s,expandedRowClassName:_.expandedRowClassName,expandIcon:me,expandableType:$e,expandRowByClick:_.expandRowByClick,expandedRowRender:_.expandedRowRender,expandedRowOffset:_.expandedRowOffset,onTriggerExpand:re,expandIconColumnIndex:_.expandIconColumnIndex,indentSize:_.indentSize,allColumnsFixedLeft:j.every(Z=>Z.fixed==="start"),emptyNode:Ee,columns:B,flattenColumns:j,onColumnResize:_t,colWidths:le,hoverStartRow:Q,hoverEndRow:Y,onHover:fe,rowExpandable:_.rowExpandable,onRow:P,getRowKey:ee,expandedKeys:ce,childrenColumnName:ae,rowHoverable:z,measureRowRender:v}),[M,Kt,i,d,o,G,bt,m,qt,we,H,ie,He,se,ft,s,_.expandedRowClassName,me,$e,_.expandRowByClick,_.expandedRowRender,_.expandedRowOffset,re,_.expandIconColumnIndex,_.indentSize,Ee,B,j,_t,le,Q,Y,fe,_.rowExpandable,P,ee,ce,ae,z,v]);return l.createElement(De.Provider,{value:Br},mt)},vl=l.forwardRef(El),Sr=t=>ar(vl,t),kt=Sr();kt.EXPAND_COLUMN=ot;kt.INTERNAL_HOOKS=Wt;kt.Column=qs;kt.ColumnGroup=Xs;kt.Summary=dr;const Xn=Vn(null),wr=Vn(null);function $n(){return $n=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{rowInfo:e,column:n,colIndex:o,indent:r,index:s,component:a,renderIndex:i,record:d,style:c,className:u,inverse:p,getHeight:f}=t,{render:m,dataIndex:h,className:b,width:x}=n,{columnsOffset:y}=Ne(wr,["columnsOffset"]),{key:C,fixedInfo:E,appendCellNode:$,additionalCellProps:w}=gr(e,n,o,r,s),{style:P,colSpan:g=1,rowSpan:v=1}=w,k=o-1,I=$l(k,g,y),S=g>1?x-I:0,K={...P,...c,flex:`0 0 ${I}px`,width:`${I}px`,marginRight:S,pointerEvents:"auto"},N=l.useMemo(()=>p?v<=1:g===0||v===0||v>1,[v,g,p]);N?K.visibility="hidden":p&&(K.height=f?.(v));const R=N?()=>null:m,O={};return(v===0||g===0)&&(O.rowSpan=1,O.colSpan=1),l.createElement(Nt,$n({className:V(b,u),ellipsis:n.ellipsis,align:n.align,scope:n.rowScope,component:a,prefixCls:e.prefixCls,key:C,record:d,index:s,renderIndex:i,dataIndex:h,render:R,shouldCellUpdate:n.shouldCellUpdate},E,{appendNode:$,additionalProps:{...w,style:K,...O}}))};function Nn(){return Nn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{data:n,index:o,className:r,rowKey:s,style:a,extra:i,getHeight:d,...c}=t,{record:u,indent:p,index:f}=n,{scrollX:m,flattenColumns:h,prefixCls:b,fixColumn:x,componentWidth:y}=Ne(De,["prefixCls","flattenColumns","fixColumn","componentWidth","scrollX"]),{getComponent:C}=Ne(Xn,["getComponent"]),E=pr(u,s,o,p),$=C(["body","row"],"div"),w=C(["body","cell"],"div"),{rowSupportExpand:P,expanded:g,rowProps:v,expandedRowRender:k,expandedRowClassName:I}=E;let S;if(P&&g){const R=k(u,o,p+1,g),O=hr(I,u,o,p);let z={};x&&(z={style:{"--virtual-width":`${y}px`}});const U=`${b}-expanded-row-cell`;S=l.createElement($,{className:V(`${b}-expanded-row`,`${b}-expanded-row-level-${p+1}`,O)},l.createElement(Nt,{component:w,prefixCls:b,className:V(U,{[`${U}-fixed`]:x}),additionalProps:z},R))}const K={...a,width:m};i&&(K.position="absolute",K.pointerEvents="none");const N=l.createElement($,Nn({},v,c,{"data-row-key":s,ref:P?null:e,className:V(r,`${b}-row`,v?.className,{[`${b}-row-extra`]:i}),style:{...K,...v?.style}}),h.map((R,O)=>l.createElement(Nl,{key:O,component:w,rowInfo:E,column:R,colIndex:O,indent:p,index:o,renderIndex:f,record:u,inverse:i,getHeight:d})));return P?l.createElement("div",{ref:e},N,S):N}),Co=$t(kl),Il=l.forwardRef((t,e)=>{const{data:n,onScroll:o}=t,{flattenColumns:r,onColumnResize:s,getRowKey:a,expandedKeys:i,prefixCls:d,childrenColumnName:c,scrollX:u,direction:p}=Ne(De,["flattenColumns","onColumnResize","getRowKey","prefixCls","expandedKeys","childrenColumnName","scrollX","direction"]),{sticky:f,scrollY:m,listItemHeight:h,getComponent:b,onScroll:x}=Ne(Xn),y=l.useRef(null),C=fr(n,c,i,a),E=l.useMemo(()=>{let S=0;return r.map(({width:K,minWidth:N,key:R})=>{const O=Math.max(K||0,N||0);return S+=O,[R,O,S]})},[r]),$=l.useMemo(()=>E.map(S=>S[2]),[E]);l.useEffect(()=>{E.forEach(([S,K])=>{s(S,K)})},[E]),l.useImperativeHandle(e,()=>{const S={scrollTo:K=>{const{offset:N,...R}=K;N?y.current?.scrollTo({...R,offset:N,align:"top"}):y.current?.scrollTo(K)},nativeElement:y.current?.nativeElement};return Object.defineProperty(S,"scrollLeft",{get:()=>y.current?.getScrollInfo().x||0,set:K=>{y.current?.scrollTo({left:K})}}),Object.defineProperty(S,"scrollTop",{get:()=>y.current?.getScrollInfo().y||0,set:K=>{y.current?.scrollTo({top:K})}}),S});const w=(S,K)=>{const N=C[K]?.record,{onCell:R}=S;return R?R(N,K)?.rowSpan??1:1},P=S=>{const{start:K,end:N,getSize:R,offsetY:O}=S;if(N<0)return null;let z=r.filter(L=>w(L,K)===0),U=K;for(let L=K;L>=0;L-=1)if(z=z.filter(Q=>w(Q,L)===0),!z.length){U=L;break}let q=r.filter(L=>w(L,N)!==1),D=N;for(let L=N;Lw(Q,L)!==1),!q.length){D=Math.max(L-1,N);break}const G=[];for(let L=U;L<=D;L+=1)C[L]&&r.some(Y=>w(Y,L)>1)&&G.push(L);return G.map(L=>{const Q=C[L],Y=a(Q.record,L),fe=$e=>{const ce=L+$e-1,me=C[ce];if(!me||!me.record){const X=Math.min(ce,C.length-1),H=C[X],A=a(H.record,X),B=R(Y,A);return B.bottom-B.top}const ae=a(me.record,ce),re=R(Y,ae);return re.bottom-re.top},_=R(Y);return l.createElement(Co,{key:L,data:Q,rowKey:Y,index:L,style:{top:-O+_.top},extra:!0,getHeight:fe})})},g=l.useMemo(()=>({columnsOffset:$}),[$]),v=`${d}-tbody`,k=b(["body","wrapper"]),I={};return f&&(I.position="sticky",I.bottom=0,typeof f=="object"&&f.offsetScroll&&(I.bottom=f.offsetScroll)),l.createElement(wr.Provider,{value:g},l.createElement(Vo,{fullHeight:!1,ref:y,prefixCls:`${v}-virtual`,styles:{horizontalScrollBar:I},className:v,height:m,itemHeight:h||24,data:C,itemKey:S=>a(S.record),component:k,scrollWidth:u,direction:p,onVirtualScroll:({x:S})=>{o({currentTarget:y.current?.nativeElement,scrollLeft:S})},onScroll:x,extraRender:P},(S,K,N)=>{const R=a(S.record,K);return l.createElement(Co,{data:S,rowKey:R,index:K,style:N.style})}))}),Rl=$t(Il);function kn(){return kn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{ref:n,onScroll:o}=e;return l.createElement(Rl,{ref:n,data:t,onScroll:o})},Pl=(t,e)=>{const{data:n,columns:o,scroll:r,sticky:s,prefixCls:a=Cr,className:i,listItemHeight:d,components:c,onScroll:u}=t;let{x:p,y:f}=r||{};typeof p!="number"&&(p=1),typeof f!="number"&&(f=500);const m=lt((x,y)=>Hn(c,x)||y),h=lt(u),b=l.useMemo(()=>({sticky:s,scrollY:f,listItemHeight:d,getComponent:m,onScroll:h}),[s,f,d,m,h]);return l.createElement(Xn.Provider,{value:b},l.createElement(kt,kn({},t,{className:V(i,`${a}-virtual`),scroll:{...r,x:p},components:{...c,body:n?.length?Kl:void 0},columns:o,internalHooks:Wt,tailor:!0,ref:e})))},Tl=l.forwardRef(Pl),Er=t=>ar(Tl,t);Er();const Dl=t=>null,Ml=t=>null,Gn=l.createContext(null),Ol=l.createContext({}),Bl=({prefixCls:t,level:e,isStart:n,isEnd:o})=>{const r=`${t}-indent-unit`,s=[];for(let a=0;a{const{eventKey:e,className:n,style:o,dragOver:r,dragOverGapTop:s,dragOverGapBottom:a,isLeaf:i,isStart:d,isEnd:c,expanded:u,selected:p,checked:f,halfChecked:m,loading:h,domRef:b,active:x,data:y,onMouseMove:C,selectable:E,treeId:$,...w}=t,P=Uo($,e),g=ne.useContext(Gn),{classNames:v,styles:k}=g||{},I=ne.useContext(Ol),S=ne.useRef(null),[K,N]=ne.useState(!1),R=!!(g.disabled||t.disabled||I.nodeDisabled?.(y)),O=ne.useMemo(()=>!g.checkable||t.checkable===!1?!1:g.checkable,[g.checkable,t.checkable]),z=F=>{R||g.onNodeSelect(F,ve(t))},U=F=>{R||!O||t.disableCheckbox||g.onNodeCheck(F,ve(t),!f)},q=ne.useMemo(()=>typeof E=="boolean"?E:g.selectable,[E,g.selectable]),D=F=>{g.onNodeClick(F,ve(t)),q?z(F):U(F)},G=F=>{g.onNodeDoubleClick(F,ve(t))},ee=F=>{g.onNodeMouseEnter(F,ve(t))},L=F=>{g.onNodeMouseLeave(F,ve(t))},Q=F=>{g.onNodeContextMenu(F,ve(t))},Y=ne.useMemo(()=>!!(g.draggable&&(!g.draggable.nodeDraggable||g.draggable.nodeDraggable(y))),[g.draggable,y]),fe=F=>{F.stopPropagation(),N(!0),g.onNodeDragStart(F,t);try{F.dataTransfer.setData("text/plain","")}catch{}},_=F=>{F.preventDefault(),F.stopPropagation(),g.onNodeDragEnter(F,t)},$e=F=>{F.preventDefault(),F.stopPropagation(),g.onNodeDragOver(F,t)},ce=F=>{F.stopPropagation(),g.onNodeDragLeave(F,t)},me=F=>{F.stopPropagation(),N(!1),g.onNodeDragEnd(F,t)},ae=F=>{F.preventDefault(),F.stopPropagation(),N(!1),g.onNodeDrop(F,t)},re=F=>{h||g.onNodeExpand(F,ve(t))},X=ne.useMemo(()=>{const{children:F}=Le(g.keyEntities,e)||{};return!!(F||[]).length},[g.keyEntities,e]),H=ne.useMemo(()=>sr(i,g.loadData,X,t.loaded),[i,g.loadData,X,t.loaded]);ne.useEffect(()=>{h||typeof g.loadData=="function"&&u&&!H&&!t.loaded&&g.onNodeLoad(ve(t))},[h,g.loadData,g.onNodeLoad,u,H,t]);const A=ne.useMemo(()=>g.draggable?.icon?ne.createElement("span",{className:`${g.prefixCls}-draggable-icon`},g.draggable.icon):null,[g.draggable]),B=F=>{const Ie=t.switcherIcon||g.switcherIcon;return typeof Ie=="function"?Ie({...t,isLeaf:F}):Ie},j=()=>{if(H){const Ie=B(!0);return Ie!==!1?ne.createElement("span",{className:V(`${g.prefixCls}-switcher`,`${g.prefixCls}-switcher-noop`)},Ie):null}const F=B(!1);return F!==!1?ne.createElement("span",{onClick:re,className:V(`${g.prefixCls}-switcher`,`${g.prefixCls}-switcher_${u?So:wo}`)},F):null},T=ne.useMemo(()=>{if(!O)return null;const F=typeof O!="boolean"?O:null;return ne.createElement("span",{className:V(`${g.prefixCls}-checkbox`,{[`${g.prefixCls}-checkbox-checked`]:f,[`${g.prefixCls}-checkbox-indeterminate`]:!f&&m,[`${g.prefixCls}-checkbox-disabled`]:R||t.disableCheckbox}),onClick:U,role:"checkbox","aria-checked":m?"mixed":f,"aria-disabled":R||t.disableCheckbox,"aria-labelledby":P},F)},[O,f,m,R,t.disableCheckbox,P]),M=ne.useMemo(()=>H?null:u?So:wo,[H,u]),he=ne.useMemo(()=>ne.createElement("span",{className:V(v?.itemIcon,`${g.prefixCls}-iconEle`,`${g.prefixCls}-icon__${M||"docu"}`,{[`${g.prefixCls}-icon_loading`]:h}),style:k?.itemIcon}),[g.prefixCls,M,h]),Se=ne.useMemo(()=>{const F=!!g.draggable;return!t.disabled&&F&&g.dragOverNodeKey===e?g.dropIndicatorRender({dropPosition:g.dropPosition,dropLevelOffset:g.dropLevelOffset,indent:g.indent,prefixCls:g.prefixCls,direction:g.direction}):null},[g.dropPosition,g.dropLevelOffset,g.indent,g.prefixCls,g.direction,g.draggable,g.dragOverNodeKey,g.dropIndicatorRender]),xe=ne.useMemo(()=>{const{title:F=Al}=t,Ie=`${g.prefixCls}-node-content-wrapper`;let Ve;if(g.showIcon){const ue=t.icon||g.icon;Ve=ue?ne.createElement("span",{className:V(v?.itemIcon,`${g.prefixCls}-iconEle`,`${g.prefixCls}-icon__customize`),style:k?.itemIcon},typeof ue=="function"?ue(t):ue):he}else g.loadData&&h&&(Ve=he);let te;return typeof F=="function"?te=F(y):g.titleRender?te=g.titleRender(y):te=F,ne.createElement("span",{ref:S,title:typeof F=="string"?F:"",className:V(Ie,`${Ie}-${M||"normal"}`,{[`${g.prefixCls}-node-selected`]:!R&&(p||K)}),onMouseEnter:ee,onMouseLeave:L,onContextMenu:Q,onClick:D,onDoubleClick:G},Ve,ne.createElement("span",{className:V(`${g.prefixCls}-title`,v?.itemTitle),style:k?.itemTitle},te),Se)},[g.prefixCls,g.showIcon,t,g.icon,he,g.titleRender,y,M,ee,L,Q,D,G]),de=Qt(w,{aria:!0,data:!0}),{level:ke}=Le(g.keyEntities,e)||{},ge=c[c.length-1],Ke=!R&&Y,Oe=g.draggingNodeKey===e;return ne.createElement("div",In({ref:b,role:"treeitem",id:P,"aria-expanded":H?void 0:u,"aria-selected":q&&!R?p:void 0,"aria-checked":O&&!R?m?"mixed":f:void 0,"aria-disabled":R,className:V(n,`${g.prefixCls}-treenode`,v?.item,{[`${g.prefixCls}-treenode-disabled`]:R,[`${g.prefixCls}-treenode-switcher-${u?"open":"close"}`]:!i,[`${g.prefixCls}-treenode-checkbox-checked`]:f,[`${g.prefixCls}-treenode-checkbox-indeterminate`]:m,[`${g.prefixCls}-treenode-selected`]:p,[`${g.prefixCls}-treenode-loading`]:h,[`${g.prefixCls}-treenode-active`]:x,[`${g.prefixCls}-treenode-leaf-last`]:ge,[`${g.prefixCls}-treenode-draggable`]:Y,dragging:Oe,"drop-target":g.dropTargetKey===e,"drop-container":g.dropContainerKey===e,"drag-over":!R&&r,"drag-over-gap-top":!R&&s,"drag-over-gap-bottom":!R&&a,"filter-node":g.filterTreeNode?.(ve(t)),[`${g.prefixCls}-treenode-leaf`]:H}),style:{...o,...k?.item},draggable:Ke,onDragStart:Ke?fe:void 0,onDragEnter:Y?_:void 0,onDragOver:Y?$e:void 0,onDragLeave:Y?ce:void 0,onDrop:Y?ae:void 0,onDragEnd:Y?me:void 0,onMouseMove:C},de),ne.createElement(Ll,{prefixCls:g.prefixCls,level:ke,isStart:d,isEnd:c}),A,j(),T,xe)};Ft.isTreeNode=1;function Ye(t,e){if(!t)return[];const n=t.slice(),o=n.indexOf(e);return o>=0&&n.splice(o,1),n}function Je(t,e){const n=(t||[]).slice();return n.indexOf(e)===-1&&n.push(e),n}function Yn(t){return t.split("-")}function Hl(t,e){const n=[],o=Le(e,t);function r(s=[]){s.forEach(({key:a,children:i})=>{n.push(a),r(i)})}return r(o.children),n}function Fl(t){if(t.parent){const e=Yn(t.pos);return Number(e[e.length-1])===t.parent.children.length-1}return!1}function zl(t){const e=Yn(t.pos);return Number(e[e.length-1])===0}function Eo(t,e,n,o,r,s,a,i,d,c){const{clientX:u,clientY:p}=t,{top:f,height:m}=t.target.getBoundingClientRect(),b=((c==="rtl"?-1:1)*((r?.x||0)-u)-12)/o,x=d.filter(I=>i[I]?.children?.length);let y=Le(i,n.eventKey);if(pN.key===y.key),S=I<=0?0:I-1,K=a[S].key;y=Le(i,K)}const C=y.key,E=y,$=y.key;let w=0,P=0;if(!x.includes(C))for(let I=0;I-1.5?s({dragNode:g,dropNode:v,dropPosition:1})?w=1:k=!1:s({dragNode:g,dropNode:v,dropPosition:0})?w=0:s({dragNode:g,dropNode:v,dropPosition:1})?w=1:k=!1:s({dragNode:g,dropNode:v,dropPosition:1})?w=1:k=!1,{dropPosition:w,dropLevelOffset:P,dropTargetKey:y.key,dropTargetPos:y.pos,dragOverNodeKey:$,dropContainerKey:w===0?null:y.parent?.key||null,dropAllowed:k}}function vo(t,e){if(!t)return;const{multiple:n}=e;return n?t.slice():t.length?[t[0]]:t}function hn(t){if(!t)return null;let e;if(Array.isArray(t))e={checkedKeys:t,halfCheckedKeys:void 0};else if(typeof t=="object")e={checkedKeys:t.checked||void 0,halfCheckedKeys:t.halfChecked||void 0};else return st(!1,"`checkedKeys` is not an array or an object"),null;return e}function Rn(t,e){const n=new Set;function o(r){if(n.has(r))return;const s=Le(e,r);if(!s)return;n.add(r);const{parent:a,node:i}=s;i.disabled||a&&o(a.key)}return(t||[]).forEach(r=>{o(r)}),[...n]}const nt={},Kn="SELECT_ALL",Pn="SELECT_INVERT",Tn="SELECT_NONE",$o=[],vr=(t,e,n=[])=>((e||[]).forEach(o=>{n.push(o),o&&typeof o=="object"&&t in o&&vr(t,o[t],n)}),n),Wl=(t,e)=>{const{preserveSelectedRowKeys:n,selectedRowKeys:o,defaultSelectedRowKeys:r,getCheckboxProps:s,getTitleCheckboxProps:a,onChange:i,onSelect:d,onSelectAll:c,onSelectInvert:u,onSelectNone:p,onSelectMultiple:f,columnWidth:m,type:h,selections:b,fixed:x,renderCell:y,hideSelectAll:C,checkStrictly:E=!0}=e||{},{prefixCls:$,data:w,pageData:P,getRecordByKey:g,getRowKey:v,expandType:k,childrenColumnName:I,locale:S,getPopupContainer:K}=t,N=Wn(),[R,O]=Ss(X=>X),[z,U]=zr(r||$o,o),q=l.useRef(new Map),D=l.useCallback(X=>{if(n){const H=new Map;X.forEach(A=>{let B=g(A);!B&&q.current.has(A)&&(B=q.current.get(A)),H.set(A,B)}),q.current=H}},[g,n]);l.useEffect(()=>{D(z)},[z]);const G=l.useMemo(()=>vr(I,P),[I,P]),{keyEntities:ee}=l.useMemo(()=>{if(E)return{keyEntities:null};let X=w;if(n){const H=new Set(G.map(v)),A=Array.from(q.current).reduce((B,[j,T])=>H.has(j)?B:B.concat(T),[]);X=[].concat(Re(X),Re(A))}return jn(X,{externalGetKey:v,childrenPropName:I})},[w,v,E,I,n,G]),L=l.useMemo(()=>{const X=new Map;return G.forEach((H,A)=>{const B=v(H,A),j=(s?s(H):null)||{};X.set(B,j)}),X},[G,v,s]),Q=l.useCallback(X=>{const H=v(X);let A;return L.has(H)?A=L.get(v(X)):A=s?s(X):void 0,!!A?.disabled},[L,v]),[Y,fe]=l.useMemo(()=>{if(E)return[z||[],[]];const{checkedKeys:X,halfCheckedKeys:H}=St(z,!0,ee,Q);return[X||[],H]},[z,E,ee,Q]),_=l.useMemo(()=>{const X=h==="radio"?Y.slice(0,1):Y;return new Set(X)},[Y,h]),$e=l.useMemo(()=>h==="radio"?new Set:new Set(fe),[fe,h]);l.useEffect(()=>{e||U($o)},[!!e]);const ce=l.useCallback((X,H)=>{let A,B;D(X),n?(A=X,B=X.map(j=>q.current.get(j))):(A=[],B=[],X.forEach(j=>{const T=g(j);T!==void 0&&(A.push(j),B.push(T))})),U(A),i?.(A,B,{type:H})},[U,g,i,n]),me=l.useCallback((X,H,A,B)=>{if(d){const j=A.map(g);d(g(X),H,j,B)}ce(A,"single")},[d,g,ce]),ae=l.useMemo(()=>!b||C?null:(b===!0?[Kn,Pn,Tn]:b).map(H=>H===Kn?{key:"all",text:S.selectionAll,onSelect(){ce(w.map((A,B)=>v(A,B)).filter(A=>!L.get(A)?.disabled||_.has(A)),"all")}}:H===Pn?{key:"invert",text:S.selectInvert,onSelect(){const A=new Set(_);P.forEach((j,T)=>{const M=v(j,T);L.get(M)?.disabled||(A.has(M)?A.delete(M):A.add(M))});const B=Array.from(A);u&&(N.deprecated(!1,"onSelectInvert","onChange"),u(B)),ce(B,"invert")}}:H===Tn?{key:"none",text:S.selectNone,onSelect(){p?.(),ce(Array.from(_).filter(A=>L.get(A)?.disabled),"none")}}:H).map(H=>({...H,onSelect:(...A)=>{H.onSelect?.(...A),O(null)}})),[b,C,S.selectionAll,S.selectInvert,S.selectNone,L,_,w,P,v,u,ce]);return[l.useCallback(X=>{if(!e)return X.filter(te=>te!==nt);let H=Re(X);const A=new Set(_),B=G.map(v).filter(te=>!L.get(te).disabled),j=B.every(te=>A.has(te)),T=B.some(te=>A.has(te)),M=()=>{const te=[];j?B.forEach(ye=>{A.delete(ye),te.push(ye)}):B.forEach(ye=>{A.has(ye)||(A.add(ye),te.push(ye))});const ue=Array.from(A);c?.(!j,ue.map(g),te.map(g)),ce(ue,"all"),O(null)};let he,Se;if(h!=="radio"){let te;if(ae){const be={getPopupContainer:K,items:ae.map((we,_e)=>{const{key:Ue,text:ct,onSelect:Fe}=we;return{key:Ue??_e,onClick:()=>{Fe?.(B)},label:ct}})};te=l.createElement("div",{className:`${$}-selection-extra`},l.createElement(qo,{menu:be,getPopupContainer:K},l.createElement("span",null,l.createElement(Wr,null))))}const ue=G.map((be,we)=>{const _e=v(be,we),Ue=L.get(_e)||{};return{checked:A.has(_e),...Ue}}).filter(({disabled:be})=>be),ye=!!ue.length&&ue.length===G.length,le=ye&&ue.every(({checked:be})=>be),Ce=ye&&ue.some(({checked:be})=>be),ie=a?.()||{},{onChange:se,disabled:He}=ie;Se=l.createElement(Jt,{"aria-label":te?"Custom selection":"Select all",...ie,checked:ye?le:!!G.length&&j,indeterminate:ye?!le&&Ce:!j&&T,onChange:be=>{M(),se?.(be)},disabled:He??(G.length===0||ye),skipGroup:!0}),he=!C&&l.createElement("div",{className:`${$}-selection`},Se,te)}let xe;h==="radio"?xe=(te,ue,ye)=>{const le=v(ue,ye),Ce=A.has(le),ie=L.get(le);return{node:l.createElement(nr,{...ie,checked:Ce,onClick:se=>{se.stopPropagation(),ie?.onClick?.(se)},onChange:se=>{A.has(le)||me(le,!0,[le],se.nativeEvent),ie?.onChange?.(se)}}),checked:Ce}}:xe=(te,ue,ye)=>{const le=v(ue,ye),Ce=A.has(le),ie=$e.has(le),se=L.get(le);let He;return k==="nest"?He=ie:He=se?.indeterminate??ie,{node:l.createElement(Jt,{...se,indeterminate:He,checked:Ce,skipGroup:!0,onClick:be=>{be.stopPropagation(),se?.onClick?.(be)},onChange:be=>{const{nativeEvent:we}=be,{shiftKey:_e}=we,Ue=B.indexOf(le),ct=Y.some(Fe=>B.includes(Fe));if(_e&&E&&ct){const Fe=R(Ue,B,A),je=Array.from(A);f?.(!Ce,je.map(g),Fe.map(g)),ce(je,"multiple")}else{const Fe=Y;if(E){const je=Ce?Ye(Fe,le):Je(Fe,le);me(le,!Ce,je,we)}else{const je=St([].concat(Re(Fe),[le]),!0,ee,Q),{checkedKeys:Pe,halfCheckedKeys:ze}=je;let Me=Pe;if(Ce){const Ze=new Set(Pe);Ze.delete(le),Me=St(Array.from(Ze),{halfCheckedKeys:ze},ee,Q).checkedKeys}me(le,!Ce,Me,we)}}O(Ce?null:Ue),se?.onChange?.(be)}}),checked:Ce}};const de=(te,ue,ye)=>{const{node:le,checked:Ce}=xe(te,ue,ye);return y?y(Ce,ue,ye,le):le};if(!H.includes(nt))if(H.findIndex(te=>te[At]?.columnType==="EXPAND_COLUMN")===0){const[te,...ue]=H;H=[te,nt].concat(Re(ue))}else H=[nt].concat(Re(H));const ke=H.indexOf(nt);H=H.filter((te,ue)=>te!==nt||ue===ke);const ge=H[ke-1],Ke=H[ke+1];let Oe=x;Oe===void 0&&(Ke?.fixed!==void 0?Oe=Ke.fixed:ge?.fixed!==void 0&&(Oe=ge.fixed)),Oe&&ge&&ge[At]?.columnType==="EXPAND_COLUMN"&&ge.fixed===void 0&&(ge.fixed=Oe);const F=V(`${$}-selection-col`,{[`${$}-selection-col-with-dropdown`]:b&&h==="checkbox"}),Ie=()=>e?.columnTitle?typeof e.columnTitle=="function"?e.columnTitle(Se):e.columnTitle:he,Ve={fixed:Oe,width:m,className:`${$}-selection-column`,title:Ie(),render:de,onCell:e.onCell,align:e.align,[At]:{className:F}};return H.map(te=>te===nt?Ve:te)},[v,G,e,Y,_,$e,m,ae,k,L,f,me,Q]),_]};function _l(t){return e=>{const{prefixCls:n,onExpand:o,record:r,expanded:s,expandable:a}=e,i=`${n}-row-expand-icon`;return l.createElement("button",{type:"button",onClick:d=>{o(r,d),d.stopPropagation()},className:V(i,{[`${i}-spaced`]:!a,[`${i}-expanded`]:a&&s,[`${i}-collapsed`]:a&&!s}),"aria-label":s?t.collapse:t.expand,"aria-expanded":s})}}function jl(t){return(n,o)=>{const r=n.querySelector(`.${t}-container`);let s=o;if(r){const a=getComputedStyle(r),i=Number.parseInt(a.borderLeftWidth,10),d=Number.parseInt(a.borderRightWidth,10);s=o-i-d}return s}}const at=(t,e)=>"key"in t&&zo(t.key)?t.key:t.dataIndex?Array.isArray(t.dataIndex)?t.dataIndex.join("."):t.dataIndex:e;function It(t,e){return e?`${e}-${t}`:`${t}`}const an=(t,e)=>typeof t=="function"?t(e):t,Vl=(t,e)=>{const n=an(t,e);return Object.prototype.toString.call(n)==="[object Object]"?"":n},Ul=t=>{const{dropPosition:e,dropLevelOffset:n,indent:o}=t,r={pointerEvents:"none",position:"absolute",right:0,backgroundColor:"red",height:2};switch(e){case-1:r.top=0,r.left=-n*o;break;case 1:r.bottom=0,r.left=-n*o;break;case 0:r.bottom=0,r.left=o;break}return ne.createElement("div",{style:r})};function ql(t,e){const[n,o]=l.useState(!1);et(()=>{if(n)return t(),()=>{e()}},[n]),et(()=>(o(!0),()=>{o(!1)}),[])}function Ht(){return Ht=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{className:n,style:o,motion:r,motionNodes:s,motionType:a,onMotionStart:i,onMotionEnd:d,active:c,treeNodeRequiredProps:u,...p}=t,[f,m]=l.useState(!0),{prefixCls:h}=l.useContext(Gn),b=s&&a!=="hide";et(()=>{s&&b!==f&&m(b)},[s]);const x=()=>{s&&i()},y=l.useRef(!1),C=()=>{s&&!y.current&&(y.current=!0,d())};ql(x,C);const E=$=>{b===$&&C()};return s?l.createElement(_r,Ht({ref:e,visible:f},r,{motionAppear:a==="show",onVisibleChanged:E}),({className:$,style:w},P)=>l.createElement("div",{ref:P,className:V(`${h}-treenode-motion`,$),style:w},s.map(g=>{const{data:{...v},title:k,key:I,isStart:S,isEnd:K}=g;delete v.children;const N=Bt(I,u);return l.createElement(Ft,Ht({},v,N,{title:k,active:c,data:g.data,key:I,isStart:S,isEnd:K}))}))):l.createElement(Ft,Ht({domRef:e,className:n,style:o},p,{active:c}))});function Gl(t=[],e=[]){const n=t.length,o=e.length;if(Math.abs(n-o)!==1)return{add:!1,key:null};function r(s,a){const i=new Map;s.forEach(c=>{i.set(c,!0)});const d=a.filter(c=>!i.has(c));return d.length===1?d[0]:null}return na.key===n),r=t[o+1],s=e.findIndex(a=>a.key===n);if(r){const a=e.findIndex(i=>i.key===r.key);return e.slice(s+1,a)}return e.slice(s+1)}function nn(){return nn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{prefixCls:n,data:o,selectable:r,checkable:s,expandedKeys:a,selectedKeys:i,checkedKeys:d,loadedKeys:c,loadingKeys:u,halfCheckedKeys:p,keyEntities:f,disabled:m,dragging:h,dragOverNodeKey:b,dropPosition:x,motion:y,height:C,itemHeight:E,virtual:$,scrollWidth:w,focusable:P,activeItem:g,tabIndex:v,onKeyDown:k,onFocus:I,onBlur:S,onMouseDown:K,onMouseUp:N,onActiveChange:R,onListChangeStart:O,onListChangeEnd:z,...U}=t,q=jr(),D=l.useRef(null),G=l.useRef(null);l.useImperativeHandle(e,()=>({scrollTo:B=>{D.current.scrollTo(B)},getIndentWidth:()=>G.current.offsetWidth}));const[ee,L]=l.useState(a),[Q,Y]=l.useState(o),[fe,_]=l.useState(o),[$e,ce]=l.useState([]),[me,ae]=l.useState(null),re=l.useRef(o);re.current=o;function X(){const B=re.current;Y(B),_(B),ce([]),ae(null),z()}et(()=>{L(a);const B=Gl(ee,a);if(B.key!==null)if(B.add){const j=Q.findIndex(({key:he})=>he===B.key),T=Io(No(Q,o,B.key),$,C,E),M=Q.slice();M.splice(j+1,0,ko),_(M),ce(T),ae("show")}else{const j=o.findIndex(({key:he})=>he===B.key),T=Io(No(o,Q,B.key),$,C,E),M=o.slice();M.splice(j+1,0,ko),_(M),ce(T),ae("hide")}else Q!==o&&(Y(o),_(o))},[a,o]),l.useEffect(()=>{h||X()},[h]);const H=y?fe:o,A={expandedKeys:a,selectedKeys:i,loadedKeys:c,loadingKeys:u,checkedKeys:d,halfCheckedKeys:p,dragOverNodeKey:b,dropPosition:x,keyEntities:f};return l.createElement(l.Fragment,null,l.createElement("div",{className:`${n}-treenode`,"aria-hidden":!0,style:{position:"absolute",pointerEvents:"none",visibility:"hidden",height:0,overflow:"hidden",border:0,padding:0}},l.createElement("div",{className:`${n}-indent`},l.createElement("div",{ref:G,className:`${n}-indent-unit`}))),l.createElement(Vo,nn({},U,{data:H,itemKey:Ro,height:C,fullHeight:!1,virtual:$,itemHeight:E,scrollWidth:w,prefixCls:`${n}-list`,ref:D,role:"tree",tabIndex:P!==!1&&!m?v:void 0,"aria-activedescendant":g?Uo(q,g.key):void 0,onKeyDown:k,onFocus:I,onBlur:S,onMouseDown:K,onMouseUp:N,onVisibleChange:B=>{B.every(j=>Ro(j)!==gt)&&X()}}),B=>{const{pos:j,data:{...T},title:M,key:he,isStart:Se,isEnd:xe}=B,de=zt(he,j);delete T.key,delete T.children;const ke=Bt(de,A);return l.createElement(Xl,nn({},T,ke,{title:M,active:!!g&&he===g.key,pos:j,data:B.data,isStart:Se,isEnd:xe,motion:y,motionNodes:he===gt?$e:null,motionType:me,onMotionStart:O,onMotionEnd:X,treeNodeRequiredProps:A,treeId:q,onMouseMove:()=>{R(null)}}))}))});function Mn(){return Mn=Object.assign?Object.assign.bind():function(t){for(var e=1;e!0,expandAction:!1};static TreeNode=Ft;destroyed=!1;delayedDragEnterLogic;loadingRetryTimes={};state={keyEntities:{},indent:null,selectedKeys:[],checkedKeys:[],halfCheckedKeys:[],loadedKeys:[],loadingKeys:[],expandedKeys:[],draggingNodeKey:null,dragChildrenKeys:[],dropTargetKey:null,dropPosition:null,dropContainerKey:null,dropLevelOffset:null,dropTargetPos:null,dropAllowed:!0,dragOverNodeKey:null,treeData:[],flattenNodes:[],activeKey:null,listChanging:!1,prevProps:null,fieldNames:vt()};dragStartMousePosition=null;dragNodeProps=null;currentMouseOverDroppableNodeKey=null;focusedByMouse=!1;listRef=l.createRef();componentDidMount(){this.destroyed=!1,this.onUpdated()}componentDidUpdate(){this.onUpdated()}onUpdated(){const{activeKey:e,itemScrollOffset:n=0}=this.props;e!==void 0&&e!==this.state.activeKey&&(this.setState({activeKey:e}),e!==null&&this.scrollTo({key:e,offset:n}))}componentWillUnmount(){window.removeEventListener("dragend",this.onWindowDragEnd),this.destroyed=!0}static getDerivedStateFromProps(e,n){const{prevProps:o}=n,r={prevProps:e};function s(c){return!o&&e.hasOwnProperty(c)||o&&o[c]!==e[c]}let a,{fieldNames:i}=n;if(s("fieldNames")&&(i=vt(e.fieldNames),r.fieldNames=i),s("treeData")?{treeData:a}=e:s("children")&&(st(!1,"`children` of Tree is deprecated. Please use `treeData` instead."),a=rr(e.children)),a){r.treeData=a;const c=jn(a,{fieldNames:i});r.keyEntities={[gt]:$r,...c.keyEntities}}const d=r.keyEntities||n.keyEntities;if(s("expandedKeys")||o&&s("autoExpandParent"))r.expandedKeys=e.autoExpandParent||!o&&e.defaultExpandParent?Rn(e.expandedKeys,d):e.expandedKeys;else if(!o&&e.defaultExpandAll){const c={...d};delete c[gt];const u=[];Object.keys(c).forEach(p=>{const f=c[p];f.children&&f.children.length&&u.push(f.key)}),r.expandedKeys=u}else!o&&e.defaultExpandedKeys&&(r.expandedKeys=e.autoExpandParent||e.defaultExpandParent?Rn(e.defaultExpandedKeys,d):e.defaultExpandedKeys);if(r.expandedKeys||delete r.expandedKeys,a||r.expandedKeys){const c=mn(a||n.treeData,r.expandedKeys||n.expandedKeys,i);r.flattenNodes=c}if(e.selectable&&(s("selectedKeys")?r.selectedKeys=vo(e.selectedKeys,e):!o&&e.defaultSelectedKeys&&(r.selectedKeys=vo(e.defaultSelectedKeys,e))),e.checkable){let c;if(s("checkedKeys")?c=hn(e.checkedKeys)||{}:!o&&e.defaultCheckedKeys?c=hn(e.defaultCheckedKeys)||{}:a&&(c=hn(e.checkedKeys)||{checkedKeys:n.checkedKeys,halfCheckedKeys:n.halfCheckedKeys}),c){let{checkedKeys:u=[],halfCheckedKeys:p=[]}=c;e.checkStrictly||({checkedKeys:u,halfCheckedKeys:p}=St(u,!0,d)),r.checkedKeys=u,r.halfCheckedKeys=p}}return s("loadedKeys")&&(r.loadedKeys=e.loadedKeys),r}onNodeDragStart=(e,n)=>{const{expandedKeys:o,keyEntities:r}=this.state,{onDragStart:s}=this.props,{eventKey:a}=n;this.dragNodeProps=n,this.dragStartMousePosition={x:e.clientX,y:e.clientY};const i=Ye(o,a);this.setState({draggingNodeKey:a,dragChildrenKeys:Hl(a,r),indent:this.listRef.current.getIndentWidth()}),this.setExpandedKeys(i),window.addEventListener("dragend",this.onWindowDragEnd),s?.({event:e,node:ve(n)})};onNodeDragEnter=(e,n)=>{const{expandedKeys:o,keyEntities:r,dragChildrenKeys:s,flattenNodes:a,indent:i}=this.state,{onDragEnter:d,onExpand:c,allowDrop:u,direction:p}=this.props,{pos:f,eventKey:m}=n;if(this.currentMouseOverDroppableNodeKey!==m&&(this.currentMouseOverDroppableNodeKey=m),!this.dragNodeProps){this.resetDragState();return}const{dropPosition:h,dropLevelOffset:b,dropTargetKey:x,dropContainerKey:y,dropTargetPos:C,dropAllowed:E,dragOverNodeKey:$}=Eo(e,this.dragNodeProps,n,i,this.dragStartMousePosition,u,a,r,o,p);if(s.includes(x)||!E){this.resetDragState();return}if(this.delayedDragEnterLogic||(this.delayedDragEnterLogic={}),Object.keys(this.delayedDragEnterLogic).forEach(w=>{clearTimeout(this.delayedDragEnterLogic[w])}),this.dragNodeProps.eventKey!==n.eventKey&&(e.persist(),this.delayedDragEnterLogic[f]=window.setTimeout(()=>{if(this.state.draggingNodeKey===null)return;let w=[...o];const P=Le(r,n.eventKey);P&&(P.children||[]).length&&(w=Je(o,n.eventKey)),this.props.hasOwnProperty("expandedKeys")||this.setExpandedKeys(w),c?.(w,{node:ve(n),expanded:!0,nativeEvent:e.nativeEvent})},800)),this.dragNodeProps.eventKey===x&&b===0){this.resetDragState();return}this.setState({dragOverNodeKey:$,dropPosition:h,dropLevelOffset:b,dropTargetKey:x,dropContainerKey:y,dropTargetPos:C,dropAllowed:E}),d?.({event:e,node:ve(n),expandedKeys:o})};onNodeDragOver=(e,n)=>{const{dragChildrenKeys:o,flattenNodes:r,keyEntities:s,expandedKeys:a,indent:i}=this.state,{onDragOver:d,allowDrop:c,direction:u}=this.props;if(!this.dragNodeProps)return;const{dropPosition:p,dropLevelOffset:f,dropTargetKey:m,dropContainerKey:h,dropTargetPos:b,dropAllowed:x,dragOverNodeKey:y}=Eo(e,this.dragNodeProps,n,i,this.dragStartMousePosition,c,r,s,a,u);o.includes(m)||!x||(this.dragNodeProps.eventKey===m&&f===0?this.state.dropPosition===null&&this.state.dropLevelOffset===null&&this.state.dropTargetKey===null&&this.state.dropContainerKey===null&&this.state.dropTargetPos===null&&this.state.dropAllowed===!1&&this.state.dragOverNodeKey===null||this.resetDragState():p===this.state.dropPosition&&f===this.state.dropLevelOffset&&m===this.state.dropTargetKey&&h===this.state.dropContainerKey&&b===this.state.dropTargetPos&&x===this.state.dropAllowed&&y===this.state.dragOverNodeKey||this.setState({dropPosition:p,dropLevelOffset:f,dropTargetKey:m,dropContainerKey:h,dropTargetPos:b,dropAllowed:x,dragOverNodeKey:y}),d?.({event:e,node:ve(n)}))};onNodeDragLeave=(e,n)=>{this.currentMouseOverDroppableNodeKey===n.eventKey&&!e.currentTarget.contains(e.relatedTarget)&&(this.resetDragState(),this.currentMouseOverDroppableNodeKey=null);const{onDragLeave:o}=this.props;o?.({event:e,node:ve(n)})};onWindowDragEnd=e=>{this.onNodeDragEnd(e,null,!0),window.removeEventListener("dragend",this.onWindowDragEnd)};onNodeDragEnd=(e,n)=>{const{onDragEnd:o}=this.props;this.setState({dragOverNodeKey:null}),this.cleanDragState(),o?.({event:e,node:ve(n)}),this.dragNodeProps=null,window.removeEventListener("dragend",this.onWindowDragEnd)};onNodeDrop=(e,n,o=!1)=>{const{dragChildrenKeys:r,dropPosition:s,dropTargetKey:a,dropTargetPos:i,dropAllowed:d}=this.state;if(!d)return;const{onDrop:c}=this.props;if(this.setState({dragOverNodeKey:null}),this.cleanDragState(),a===null)return;const u={...Bt(a,this.getTreeNodeRequiredProps()),active:this.getActiveItem()?.key===a,data:Le(this.state.keyEntities,a).node},p=r.includes(a);st(!p,"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");const f=Yn(i),m={event:e,node:ve(u),dragNode:this.dragNodeProps?ve(this.dragNodeProps):null,dragNodesKeys:[this.dragNodeProps.eventKey].concat(r),dropToGap:s!==0,dropPosition:s+Number(f[f.length-1])};o||c?.(m),this.dragNodeProps=null};resetDragState(){this.setState({dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})}cleanDragState=()=>{const{draggingNodeKey:e}=this.state;e!==null&&this.setState({draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),this.dragStartMousePosition=null,this.currentMouseOverDroppableNodeKey=null};triggerExpandActionExpand=(e,n)=>{const{expandedKeys:o,flattenNodes:r}=this.state,{expanded:s,key:a,isLeaf:i}=n;if(i||e.shiftKey||e.metaKey||e.ctrlKey)return;const d=r.filter(u=>u.key===a)[0],c=ve({...Bt(a,this.getTreeNodeRequiredProps()),data:d.data});this.setExpandedKeys(s?Ye(o,a):Je(o,a)),this.onNodeExpand(e,c)};onNodeClick=(e,n)=>{const{onClick:o,expandAction:r}=this.props;r==="click"&&this.triggerExpandActionExpand(e,n),o?.(e,n)};onNodeDoubleClick=(e,n)=>{const{onDoubleClick:o,expandAction:r}=this.props;r==="doubleClick"&&this.triggerExpandActionExpand(e,n),o?.(e,n)};onNodeSelect=(e,n)=>{let{selectedKeys:o}=this.state;const{keyEntities:r,fieldNames:s}=this.state,{onSelect:a,multiple:i}=this.props,{selected:d}=n,c=n[s.key],u=!d;u?i?o=Je(o,c):o=[c]:o=Ye(o,c);const p=o.map(f=>{const m=Le(r,f);return m?m.node:null}).filter(Boolean);this.setUncontrolledState({selectedKeys:o}),a?.(o,{event:"select",selected:u,node:n,selectedNodes:p,nativeEvent:e.nativeEvent})};onNodeCheck=(e,n,o)=>{const{keyEntities:r,checkedKeys:s,halfCheckedKeys:a}=this.state,{checkStrictly:i,onCheck:d}=this.props,{key:c}=n;let u;const p={event:"check",node:n,checked:o,nativeEvent:e.nativeEvent};if(i){const f=o?Je(s,c):Ye(s,c),m=Ye(a,c);u={checked:f,halfChecked:m},p.checkedNodes=f.map(h=>Le(r,h)).filter(Boolean).map(h=>h.node),this.setUncontrolledState({checkedKeys:f})}else{let{checkedKeys:f,halfCheckedKeys:m}=St([...s,c],!0,r);if(!o){const h=new Set(f);h.delete(c),{checkedKeys:f,halfCheckedKeys:m}=St(Array.from(h),{halfCheckedKeys:m},r)}u=f,p.checkedNodes=[],p.checkedNodesPositions=[],p.halfCheckedKeys=m,f.forEach(h=>{const b=Le(r,h);if(!b)return;const{node:x,pos:y}=b;p.checkedNodes.push(x),p.checkedNodesPositions.push({node:x,pos:y})}),this.setUncontrolledState({checkedKeys:f},!1,{halfCheckedKeys:m})}d?.(u,p)};onNodeLoad=e=>{const{key:n}=e,{keyEntities:o}=this.state;if(Le(o,n)?.children?.length)return;const s=new Promise((a,i)=>{this.setState(({loadedKeys:d=[],loadingKeys:c=[]})=>{const{loadData:u,onLoad:p}=this.props;return!u||d.includes(n)||c.includes(n)?null:(u(e).then(()=>{const{loadedKeys:m}=this.state,h=Je(m,n);p?.(h,{event:"load",node:e}),this.setUncontrolledState({loadedKeys:h}),this.setState(b=>({loadingKeys:Ye(b.loadingKeys,n)})),a()}).catch(m=>{if(this.setState(h=>({loadingKeys:Ye(h.loadingKeys,n)})),this.loadingRetryTimes[n]=(this.loadingRetryTimes[n]||0)+1,this.loadingRetryTimes[n]>=Zl){const{loadedKeys:h}=this.state;st(!1,"Retry for `loadData` many times but still failed. No more retry."),this.setUncontrolledState({loadedKeys:Je(h,n)}),a()}i(m)}),{loadingKeys:Je(c,n)})})});return s.catch(()=>{}),s};onNodeMouseEnter=(e,n)=>{const{onMouseEnter:o}=this.props;o?.({event:e,node:n})};onNodeMouseLeave=(e,n)=>{const{onMouseLeave:o}=this.props;o?.({event:e,node:n})};onNodeContextMenu=(e,n)=>{const{onRightClick:o}=this.props;o&&(e.preventDefault(),o({event:e,node:n}))};onMouseDown=e=>{this.focusedByMouse=!0;const{onMouseDown:n}=this.props;n?.(e)};onMouseUp=e=>{this.focusedByMouse=!1;const{onMouseUp:n}=this.props;n?.(e)};onFocus=(...e)=>{const{onFocus:n,disabled:o}=this.props,{activeKey:r,selectedKeys:s,flattenNodes:a}=this.state;if(!this.focusedByMouse&&!o&&r===null){const i=s.find(d=>a.some(c=>c.key===d));i!==void 0?this.onActiveChange(i):this.onActiveChange(a?.[0]?.key||null)}n?.(...e)};onBlur=(...e)=>{this.focusedByMouse=!1;const{onBlur:n}=this.props;this.onActiveChange(null),n?.(...e)};getTreeNodeRequiredProps=()=>{const{expandedKeys:e,selectedKeys:n,loadedKeys:o,loadingKeys:r,checkedKeys:s,halfCheckedKeys:a,dragOverNodeKey:i,dropPosition:d,keyEntities:c}=this.state;return{expandedKeys:e||[],selectedKeys:n||[],loadedKeys:o||[],loadingKeys:r||[],checkedKeys:s||[],halfCheckedKeys:a||[],dragOverNodeKey:i,dropPosition:d,keyEntities:c}};setExpandedKeys=e=>{const{treeData:n,fieldNames:o}=this.state,r=mn(n,e,o);this.setUncontrolledState({expandedKeys:e,flattenNodes:r},!0)};onNodeExpand=(e,n)=>{let{expandedKeys:o}=this.state;const{listChanging:r,fieldNames:s}=this.state,{onExpand:a,loadData:i}=this.props,{expanded:d}=n,c=n[s.key];if(r)return;const u=o.includes(c),p=!d;if(st(d&&u||!d&&!u,"Expand state not sync with index check"),o=p?Je(o,c):Ye(o,c),this.setExpandedKeys(o),a?.(o,{node:n,expanded:p,nativeEvent:e.nativeEvent}),p&&i){const f=this.onNodeLoad(n);f&&f.then(()=>{const m=mn(this.state.treeData,o,s);this.setUncontrolledState({flattenNodes:m})}).catch(()=>{const{expandedKeys:m}=this.state,h=Ye(m,c);this.setExpandedKeys(h)})}};onListChangeStart=()=>{this.setUncontrolledState({listChanging:!0})};onListChangeEnd=()=>{setTimeout(()=>{this.setUncontrolledState({listChanging:!1})})};onActiveChange=e=>{const{activeKey:n}=this.state,{onActiveChange:o,itemScrollOffset:r=0}=this.props;n!==e&&(this.setState({activeKey:e}),e!==null&&this.scrollTo({key:e,offset:r}),o?.(e))};getActiveItem=()=>{const{activeKey:e,flattenNodes:n}=this.state;return e===null?null:n.find(({key:o})=>o===e)||null};offsetActiveKey=e=>{const{flattenNodes:n,activeKey:o}=this.state;let r=n.findIndex(({key:a})=>a===o);r===-1&&e<0&&(r=n.length),r=(r+e+n.length)%n.length;const s=n[r];if(s){const{key:a}=s;this.onActiveChange(a)}else this.onActiveChange(null)};onKeyDown=e=>{const{activeKey:n,expandedKeys:o,checkedKeys:r,flattenNodes:s,keyEntities:a}=this.state,{onKeyDown:i,checkable:d,selectable:c,disabled:u,loadData:p}=this.props;if(u)return;switch(e.key){case"ArrowUp":{this.offsetActiveKey(-1),e.preventDefault();break}case"ArrowDown":{this.offsetActiveKey(1),e.preventDefault();break}case"Home":{this.onActiveChange(s?.[0]?.key),e.preventDefault();break}case"End":{this.onActiveChange(s?.[s.length-1]?.key),e.preventDefault();break}}const f=this.getActiveItem();if(f&&f.data){const m=this.getTreeNodeRequiredProps(),h=ve({...Bt(n,m),data:f.data,active:!0}),x=!!Le(a,n)?.children?.length,y=!sr(f.data.isLeaf,p,x,h.loaded),C=d&&!h.disabled&&h.checkable!==!1&&!h.disableCheckbox,E=!d&&c&&!h.disabled&&h.selectable!==!1;switch(e.key){case"ArrowLeft":{y&&o.includes(n)?this.onNodeExpand({},h):f.parent&&this.onActiveChange(f.parent.key),e.preventDefault();break}case"ArrowRight":{y&&!o.includes(n)?this.onNodeExpand({},h):f.children&&f.children.length&&this.onActiveChange(f.children[0].key),e.preventDefault();break}case"Enter":{y?(e.preventDefault(),this.onNodeExpand({},h)):C?r.includes(n)||(e.preventDefault(),this.onNodeCheck({},h,!0)):E&&!h.selected&&(e.preventDefault(),this.onNodeSelect({},h));break}case" ":{C?(e.preventDefault(),this.onNodeCheck({},h,!r.includes(n))):E&&(e.preventDefault(),this.onNodeSelect({},h));break}}}i?.(e)};setUncontrolledState=(e,n=!1,o=null)=>{if(!this.destroyed){let r=!1,s=!0;const a={};Object.keys(e).forEach(i=>{if(this.props.hasOwnProperty(i)){s=!1;return}r=!0,a[i]=e[i]}),r&&(!n||s)&&this.setState({...a,...o})}};scrollTo=e=>{this.listRef.current.scrollTo(e)};render(){const{flattenNodes:e,keyEntities:n,draggingNodeKey:o,dropLevelOffset:r,dropContainerKey:s,dropTargetKey:a,dropPosition:i,dragOverNodeKey:d,indent:c}=this.state,{prefixCls:u,className:p,style:f,styles:m,classNames:h,showLine:b,focusable:x,tabIndex:y=0,selectable:C,showIcon:E,icon:$,switcherIcon:w,draggable:P,checkable:g,checkStrictly:v,disabled:k,motion:I,loadData:S,filterTreeNode:K,height:N,itemHeight:R,scrollWidth:O,virtual:z,titleRender:U,dropIndicatorRender:q,onContextMenu:D,onScroll:G,direction:ee,rootClassName:L,rootStyle:Q}=this.props,Y=Qt(this.props,{aria:!0,data:!0});let fe;P&&(typeof P=="object"?fe=P:typeof P=="function"?fe={nodeDraggable:P}:fe={});const _={styles:m,classNames:h,prefixCls:u,selectable:C,showIcon:E,icon:$,switcherIcon:w,draggable:fe,draggingNodeKey:o,checkable:g,checkStrictly:v,disabled:k,keyEntities:n,dropLevelOffset:r,dropContainerKey:s,dropTargetKey:a,dropPosition:i,dragOverNodeKey:d,indent:c,direction:ee,dropIndicatorRender:q,loadData:S,filterTreeNode:K,titleRender:U,onNodeClick:this.onNodeClick,onNodeDoubleClick:this.onNodeDoubleClick,onNodeExpand:this.onNodeExpand,onNodeSelect:this.onNodeSelect,onNodeCheck:this.onNodeCheck,onNodeLoad:this.onNodeLoad,onNodeMouseEnter:this.onNodeMouseEnter,onNodeMouseLeave:this.onNodeMouseLeave,onNodeContextMenu:this.onNodeContextMenu,onNodeDragStart:this.onNodeDragStart,onNodeDragEnter:this.onNodeDragEnter,onNodeDragOver:this.onNodeDragOver,onNodeDragLeave:this.onNodeDragLeave,onNodeDragEnd:this.onNodeDragEnd,onNodeDrop:this.onNodeDrop};return l.createElement(Gn.Provider,{value:_},l.createElement("div",{className:V(u,p,L,{[`${u}-show-line`]:b}),style:Q},l.createElement(Yl,Mn({ref:this.listRef,prefixCls:u,style:f,data:e,disabled:k,selectable:C,checkable:!!g,motion:I,dragging:o!==null,height:N,itemHeight:R,virtual:z,focusable:x,tabIndex:y,activeItem:this.getActiveItem(),onFocus:this.onFocus,onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onBlur:this.onBlur,onKeyDown:this.onKeyDown,onActiveChange:this.onActiveChange,onListChangeStart:this.onListChangeStart,onListChangeEnd:this.onListChangeEnd,onContextMenu:D,onScroll:G,scrollWidth:O},this.getTreeNodeRequiredProps(),Y))))}};const Jl=({treeCls:t,treeNodeCls:e,directoryNodeSelectedBg:n,directoryNodeSelectedColor:o,motionDurationMid:r,borderRadius:s,controlItemBgHover:a})=>({[`${t}${t}-directory ${e}`]:{[`${t}-node-content-wrapper`]:{position:"static",[`&:has(${t}-drop-indicator)`]:{position:"relative"},[`> *:not(${t}-drop-indicator)`]:{position:"relative"},"&:hover":{background:"transparent"},"&:before":{position:"absolute",inset:0,transition:`background-color ${r}`,content:'""',borderRadius:s},"&:hover:before":{background:a}},[`${t}-switcher, ${t}-checkbox, ${t}-draggable-icon`]:{zIndex:1},"&-selected":{background:n,borderRadius:s,[`${t}-switcher, ${t}-draggable-icon`]:{color:o},[`${t}-node-content-wrapper`]:{color:o,background:"transparent","&, &:hover":{color:o},"&:before, &:hover:before":{background:n}}}}}),ea=new qr("ant-tree-node-fx-do-not-use",{"0%":{opacity:0},"100%":{opacity:1}}),ta=(t,e)=>({[`.${t}-switcher-icon`]:{display:"inline-block",fontSize:10,verticalAlign:"baseline",svg:{transition:`transform ${e.motionDurationSlow}`}}}),na=(t,e)=>({[`.${t}-drop-indicator`]:{position:"absolute",zIndex:1,height:2,backgroundColor:e.colorPrimary,borderRadius:1,pointerEvents:"none","&:after":{position:"absolute",top:-3,insetInlineStart:-6,width:8,height:8,backgroundColor:"transparent",border:`${W(e.lineWidthBold)} solid ${e.colorPrimary}`,borderRadius:"50%",content:'""'}}}),oa=(t,e)=>{const{treeCls:n,treeNodeCls:o,treeNodePadding:r,titleHeight:s,indentSize:a,switcherSize:i,motionDurationMid:d,nodeSelectedBg:c,nodeHoverBg:u,colorTextQuaternary:p,controlItemBgActiveDisabled:f}=e;return{[n]:{..._n(e),"--rc-virtual-list-scrollbar-bg":e.colorSplit,background:e.colorBgContainer,borderRadius:e.borderRadius,transition:`background-color ${e.motionDurationSlow}`,"&-rtl":{direction:"rtl"},[`&${n}-rtl ${n}-switcher_close ${n}-switcher-icon svg`]:{transform:"rotate(90deg)"},[`${n}-list`]:{"&:focus-visible":{outline:"none",[`${o}-active ${n}-node-content-wrapper`]:{...Xr(e)}}},[`${n}-list-holder-inner`]:{alignItems:"flex-start"},[`&${n}-block-node`]:{[`${n}-list-holder-inner`]:{alignItems:"stretch",[`${n}-node-content-wrapper`]:{flex:"auto"},[`${o}.dragging:after`]:{position:"absolute",inset:0,border:`1px solid ${e.colorPrimary}`,opacity:0,animationName:ea,animationDuration:e.motionDurationSlow,animationPlayState:"running",animationFillMode:"forwards",content:'""',pointerEvents:"none",borderRadius:e.borderRadius}}},[o]:{display:"flex",alignItems:"flex-start",marginBottom:r,lineHeight:W(s),position:"relative","&:before":{content:'""',position:"absolute",zIndex:1,insetInlineStart:0,width:"100%",top:"100%",height:r},[`&-disabled ${n}-node-content-wrapper`]:{color:e.colorTextDisabled,cursor:"not-allowed","&:hover":{background:"transparent"}},[`${n}-checkbox-disabled + ${n}-node-selected,&${o}-disabled${o}-selected ${n}-node-content-wrapper`]:{backgroundColor:f},[`${n}-checkbox-disabled`]:{pointerEvents:"unset"},[`&:not(${o}-disabled)`]:{[`${n}-node-content-wrapper`]:{"&:hover":{color:e.nodeHoverColor}}},[`&-active ${n}-node-content-wrapper`]:{background:e.controlItemBgHover},[`&:not(${o}-disabled).filter-node ${n}-title`]:{color:e.colorPrimary,fontWeight:e.fontWeightStrong},"&-draggable":{cursor:"grab",[`${n}-draggable-icon`]:{flexShrink:0,width:i,textAlign:"center",visibility:"visible",color:p},[`&${o}-disabled ${n}-draggable-icon`]:{visibility:"hidden"}}},[`${n}-indent`]:{alignSelf:"stretch",whiteSpace:"nowrap",userSelect:"none","&-unit":{display:"inline-block",width:a}},[`${n}-draggable-icon`]:{visibility:"hidden"},[`${n}-switcher, ${n}-checkbox`]:{marginInlineEnd:e.calc(e.calc(i).sub(e.controlInteractiveSize)).div(2).equal()},[`${n}-checkbox`]:{flexShrink:0},[`${n}-switcher`]:{...ta(t,e),position:"relative",flex:"none",alignSelf:"stretch",width:i,textAlign:"center",cursor:"pointer",userSelect:"none",transition:`all ${e.motionDurationSlow}`,"&-noop":{cursor:"unset"},"&:before":{pointerEvents:"none",content:'""',width:i,height:s,position:"absolute",left:{_skip_check_:!0,value:0},top:0,borderRadius:e.borderRadius,transition:`all ${e.motionDurationSlow}`},[`&:not(${n}-switcher-noop):hover:before`]:{backgroundColor:e.colorBgTextHover},[`&_close ${n}-switcher-icon svg`]:{transform:"rotate(-90deg)"},"&-loading-icon":{color:e.colorPrimary},"&-leaf-line":{position:"relative",zIndex:1,display:"inline-block",width:"100%",height:"100%","&:before":{position:"absolute",top:0,insetInlineEnd:e.calc(i).div(2).equal(),bottom:e.calc(r).mul(-1).equal(),marginInlineStart:-1,borderInlineEnd:`1px solid ${e.colorBorder}`,content:'""'},"&:after":{position:"absolute",width:e.calc(e.calc(i).div(2).equal()).mul(.8).equal(),height:e.calc(s).div(2).equal(),borderBottom:`1px solid ${e.colorBorder}`,content:'""'}}},[`${n}-node-content-wrapper`]:{position:"relative",minHeight:s,paddingBlock:0,paddingInline:e.paddingXS,background:"transparent",borderRadius:e.borderRadius,cursor:"pointer",transition:[`all ${d}`,"border 0s","line-height 0s","box-shadow 0s"].join(", "),...na(t,e),"&:hover":{backgroundColor:u},[`&${n}-node-selected`]:{color:e.nodeSelectedColor,backgroundColor:c},[`${n}-iconEle`]:{display:"inline-block",width:i,height:s,textAlign:"center",verticalAlign:"top","&:empty":{display:"none"}}},[`${n}-unselectable ${n}-node-content-wrapper:hover`]:{backgroundColor:"transparent"},[`${o}.drop-container > [draggable]`]:{boxShadow:`0 0 0 2px ${e.colorPrimary}`},"&-show-line":{[`${n}-indent-unit`]:{position:"relative",height:"100%","&:before":{position:"absolute",top:0,insetInlineEnd:e.calc(i).div(2).equal(),bottom:e.calc(r).mul(-1).equal(),borderInlineEnd:`1px solid ${e.colorBorder}`,content:'""'},"&-end:before":{display:"none"}},[`${n}-switcher`]:{background:"transparent","&-line-icon":{verticalAlign:"-0.15em"}}},[`${o}-leaf-last ${n}-switcher-leaf-line:before`]:{top:"auto !important",bottom:"auto !important",height:`${W(e.calc(s).div(2).equal())} !important`}}}},ra=(t,e,n=!0)=>{const o=`.${t}`,r=`${o}-treenode`,s=e.calc(e.paddingXS).div(2).equal(),a=Go(e,{treeCls:o,treeNodeCls:r,treeNodePadding:s});return[oa(t,a),n&&Jl(a)].filter(Boolean)},sa=t=>{const{controlHeightSM:e,controlItemBgHover:n,controlItemBgActive:o}=t,r=e;return{titleHeight:r,switcherSize:r,indentSize:r,nodeHoverBg:n,nodeHoverColor:t.colorText,nodeSelectedBg:o,nodeSelectedColor:t.colorText}},la=t=>{const{colorTextLightSolid:e,colorPrimary:n}=t;return{...sa(t),directoryNodeSelectedColor:e,directoryNodeSelectedBg:n}},aa=Xo("Tree",(t,{prefixCls:e})=>[{[t.componentCls]:Vr(`${e}-checkbox`,t)},ra(e,t),Ur(t)],la),Ko=4,ia=t=>{const{dropPosition:e,dropLevelOffset:n,prefixCls:o,indent:r,direction:s="ltr"}=t,a=s==="ltr"?"left":"right",i=s==="ltr"?"right":"left",d={[a]:-n*r+Ko,[i]:0};switch(e){case-1:d.top=-3;break;case 1:d.bottom=-3;break;default:d.bottom=-3,d[a]=r+Ko;break}return ne.createElement("div",{style:d,className:`${o}-drop-indicator`})},ca=t=>{const{prefixCls:e,switcherIcon:n,treeNodeProps:o,showLine:r,switcherLoadingIcon:s}=t,{isLeaf:a,expanded:i,loading:d}=o;if(d)return l.isValidElement(s)?s:l.createElement(Gr,{className:`${e}-switcher-loading-icon`});let c;if(r&&typeof r=="object"&&(c=r.showLeafIcon),a){if(!r)return null;if(typeof c!="boolean"&&c){const f=typeof c=="function"?c(o):c,m=`${e}-switcher-line-custom-icon`;return l.isValidElement(f)?so(f,{className:V(f.props?.className,m)}):f}return c?l.createElement(Yo,{className:`${e}-switcher-line-icon`}):l.createElement("span",{className:`${e}-switcher-leaf-line`})}const u=`${e}-switcher-icon`,p=typeof n=="function"?n(o):n;return l.isValidElement(p)?so(p,{className:V(p.props?.className,u)}):p!==void 0?p:r?i?l.createElement(Yr,{className:`${e}-switcher-line-icon`}):l.createElement(Zr,{className:`${e}-switcher-line-icon`}):l.createElement(Qr,{className:u})},Nr=ne.forwardRef((t,e)=>{const{getPrefixCls:n,direction:o,className:r,style:s,classNames:a,styles:i}=Zo("tree"),{virtual:d}=ne.useContext(rn),{prefixCls:c,className:u,showIcon:p=!1,showLine:f,switcherIcon:m,switcherLoadingIcon:h,blockNode:b=!1,children:x,checkable:y=!1,selectable:C=!0,draggable:E,disabled:$,motion:w,style:P,rootClassName:g,classNames:v,styles:k,icon:I}=t,S=ne.useContext(Jr),K=$??S,N=n("tree",c),R=n(),O=w??{...ts(R),motionAppear:!1},z={...t,showIcon:p,blockNode:b,checkable:y,selectable:C,disabled:K,motion:O},[U,q]=Qo([a,v],[i,k],{props:z}),D={...z,showLine:!!f,icon:I,dropIndicatorRender:ia},[G,ee]=aa(N),[,L]=Jo(),Q=L.paddingXS/2+(L.Tree?.titleHeight||L.controlHeightSM),Y=ne.useMemo(()=>{if(!E)return!1;let _={};switch(typeof E){case"function":_.nodeDraggable=E;break;case"object":_={...E};break}return _.icon!==!1&&(_.icon=_.icon||ne.createElement(es,null)),_},[E]),fe=_=>ne.createElement(ca,{prefixCls:N,switcherIcon:m,switcherLoadingIcon:h,treeNodeProps:_,showLine:f});return ne.createElement(Ql,{itemHeight:Q,ref:e,virtual:d,...D,prefixCls:N,className:V({[`${N}-icon-hide`]:!p,[`${N}-block-node`]:b,[`${N}-unselectable`]:!C,[`${N}-rtl`]:o==="rtl",[`${N}-disabled`]:K},r,u,G,ee),style:{...s,...P},rootClassName:V(U.root,g),rootStyle:q.root,classNames:U,styles:q,direction:o,checkable:y&&ne.createElement("span",{className:`${N}-checkbox-inner`}),selectable:C,switcherIcon:fe,draggable:Y},x)}),Po=0,gn=1,To=2;function Zn(t,e,n){const{key:o,children:r}=n;function s(a){const i=a[o],d=a[r];e(i,a)!==!1&&Zn(d||[],e,n)}t.forEach(s)}function da({treeData:t,expandedKeys:e,startKey:n,endKey:o,fieldNames:r}){const s=[];let a=Po;if(n&&n===o)return[n];if(!n||!o)return[];function i(d){return d===n||d===o}return Zn(t,d=>{if(a===To)return!1;if(i(d)){if(s.push(d),a===Po)a=gn;else if(a===gn)return a=To,!1}else a===gn&&s.push(d);return e.includes(d)},vt(r)),s}function yn(t,e,n){const o=Re(e),r=[];return Zn(t,(s,a)=>{const i=o.indexOf(s);return i!==-1&&(r.push(a),o.splice(i,1)),!!o.length},vt(n)),r}function ua(t){const{isLeaf:e,expanded:n}=t;return e?l.createElement(Yo,null):n?l.createElement(ns,null):l.createElement(os,null)}function Do({treeData:t,children:e}){return t||rr(e)}const fa=l.forwardRef((t,e)=>{const{defaultExpandAll:n,defaultExpandParent:o,defaultExpandedKeys:r,...s}=t,a=l.useRef(null),i=l.useRef(null),d=()=>{const{keyEntities:v}=jn(Do(s),{fieldNames:s.fieldNames});let k;const I=s.expandedKeys||r||[];return n?k=Object.keys(v):o?k=Rn(I,v):k=I,k},[c,u]=l.useState(s.selectedKeys||s.defaultSelectedKeys||[]),[p,f]=l.useState(()=>d());l.useEffect(()=>{"selectedKeys"in s&&u(s.selectedKeys)},[s.selectedKeys]),l.useEffect(()=>{"expandedKeys"in s&&f(s.expandedKeys)},[s.expandedKeys]);const m=(v,k)=>("expandedKeys"in s||f(v),s.onExpand?.(v,k)),h=(v,k)=>{const{multiple:I,fieldNames:S}=s,{node:K,nativeEvent:N}=k,{key:R=""}=K,O=Do(s),z={...k,selected:!0},U=N?.ctrlKey||N?.metaKey,q=N?.shiftKey;let D;I&&U?(D=v,a.current=R,i.current=D,z.selectedNodes=yn(O,D,S)):I&&q?(D=Array.from(new Set([].concat(Re(i.current||[]),Re(da({treeData:O,expandedKeys:p,startKey:R,endKey:a.current,fieldNames:S}))))),z.selectedNodes=yn(O,D,S)):(D=[R],a.current=R,i.current=D,z.selectedNodes=yn(O,D,S)),s.onSelect?.(D,z),"selectedKeys"in s||u(D)},{getPrefixCls:b,direction:x}=l.useContext(rn),{prefixCls:y,className:C,showIcon:E=!0,expandAction:$="click",...w}=s,P=b("tree",y),g=V(`${P}-directory`,{[`${P}-directory-rtl`]:x==="rtl"},C);return l.createElement(Nr,{icon:ua,ref:e,blockNode:!0,...w,showIcon:E,expandAction:$,prefixCls:P,className:g,expandedKeys:p,selectedKeys:c,onSelect:h,onExpand:m})}),Qn=Nr;Qn.DirectoryTree=fa;Qn.TreeNode=Ft;const kr=ne.createContext(!1),Mo=t=>{const{value:e,filterSearch:n,tablePrefixCls:o,locale:r,onChange:s}=t;return n?l.createElement("div",{className:`${o}-filter-dropdown-search`},l.createElement(rs,{prefix:l.createElement(ss,null),placeholder:r.filterSearchPlaceholder,onChange:s,value:e,htmlSize:1,className:`${o}-filter-dropdown-search-input`})):null},pa=t=>{const{keyCode:e}=t;e===er.ENTER&&t.stopPropagation()},ma=l.forwardRef((t,e)=>l.createElement("div",{className:t.className,onClick:n=>n.stopPropagation(),onKeyDown:pa,ref:e},t.children));function wt(t){let e=[];return(t||[]).forEach(({value:n,children:o})=>{e.push(n),o&&(e=[].concat(Re(e),Re(wt(o))))}),e}function ha(t){return t.some(({children:e})=>e)}function Ir(t,e){return typeof e=="string"||typeof e=="number"?e?.toString().toLowerCase().includes(t.trim().toLowerCase()):!1}function Rr({filters:t,prefixCls:e,filteredKeys:n,filterMultiple:o,searchValue:r,filterSearch:s}){return t.map((a,i)=>{const d=String(a.value);if(a.children)return{key:d||i,label:a.text,popupClassName:`${e}-dropdown-submenu`,children:Rr({filters:a.children,prefixCls:e,filteredKeys:n,filterMultiple:o,searchValue:r,filterSearch:s})};const c=o?Jt:nr,u={key:a.value!==void 0?d:i,label:l.createElement(l.Fragment,null,l.createElement(c,{checked:n.includes(d)}),l.createElement("span",null,a.text))};return r.trim()?typeof s=="function"?s(r,a)?u:null:Ir(r,a.text)?u:null:u})}function bn(t){return t||[]}const ga=t=>{const{tablePrefixCls:e,prefixCls:n,column:o,dropdownPrefixCls:r,columnKey:s,filterOnClose:a,filterMultiple:i,filterMode:d="menu",filterSearch:c=!1,filterState:u,triggerFilter:p,locale:f,children:m,getPopupContainer:h,rootClassName:b}=t,{filterResetToDefaultFilteredValue:x,defaultFilteredValue:y,filterDropdownProps:C={},filterDropdownOpen:E,onFilterDropdownOpenChange:$}=o,[w,P]=l.useState(!1),g=l.useContext(kr),v=!!(u&&(u.filteredKeys?.length||u.forceFiltered)),k=T=>{P(T),C.onOpenChange?.(T),$?.(T)},I=C.open??E??w,S=u?.filteredKeys,[K,N]=vs(bn(S)),R=({selectedKeys:T})=>{N(T)},O=(T,{node:M,checked:he})=>{R(i?{selectedKeys:T}:{selectedKeys:he&&M.key?[M.key]:[]})};l.useEffect(()=>{w&&R({selectedKeys:bn(S)})},[S]);const[z,U]=l.useState([]),q=T=>{U(T)},[D,G]=l.useState(""),ee=T=>{const{value:M}=T.target;G(M)};l.useEffect(()=>{w||G("")},[w]);const L=T=>{const M=T?.length?T:null;if(M===null&&(!u||!u.filteredKeys)||Et(M,u?.filteredKeys,!0))return null;p({column:o,key:s,filteredKeys:M})},Q=()=>{k(!1),L(K())},Y=({confirm:T,closeDropdown:M}={confirm:!1,closeDropdown:!1})=>{T&&L([]),M&&k(!1),G(""),N(x?(y||[]).map(String):[])},fe=({closeDropdown:T}={closeDropdown:!0})=>{T&&k(!1),L(K())},_=(T,M)=>{M.source==="trigger"&&(T&&S!==void 0&&N(bn(S)),k(T),!T&&!o.filterDropdown&&a&&Q())},$e=V({[`${r}-menu-without-submenu`]:!ha(o.filters||[])}),ce=T=>{if(T.target.checked){const M=wt(o?.filters).map(String);N(M)}else N([])},me=({filters:T})=>(T||[]).map((M,he)=>{const Se=String(M.value),xe={title:M.text,key:M.value!==void 0?Se:String(he)};return M.children&&(xe.children=me({filters:M.children})),xe}),ae=T=>({...T,text:T.title,value:T.key,children:T.children?.map(ae)||[]});let re;const{direction:X,renderEmpty:H}=l.useContext(rn);if(typeof o.filterDropdown=="function")re=o.filterDropdown({prefixCls:`${r}-custom`,setSelectedKeys:T=>R({selectedKeys:T}),selectedKeys:K(),confirm:fe,clearFilters:Y,filters:o.filters,visible:I,close:()=>{k(!1)}});else if(o.filterDropdown)re=o.filterDropdown;else{const T=K()||[],M=()=>{const Se=H?.("Table.filter")??l.createElement(ao,{image:ao.PRESENTED_IMAGE_SIMPLE,description:f.filterEmptyText,styles:{image:{height:24}},style:{margin:0,padding:"16px 0"}});if((o.filters||[]).length===0)return Se;if(d==="tree")return l.createElement(l.Fragment,null,l.createElement(Mo,{filterSearch:c,value:D,onChange:ee,tablePrefixCls:e,locale:f}),l.createElement("div",{className:`${e}-filter-dropdown-tree`},i?l.createElement(Jt,{checked:T.length===wt(o.filters).length,indeterminate:T.length>0&&T.lengthtypeof c=="function"?c(D,ae(ke)):Ir(D,ke.title):void 0})));const xe=Rr({filters:o.filters||[],filterSearch:c,prefixCls:n,filteredKeys:K(),filterMultiple:i,searchValue:D}),de=xe.every(ke=>ke===null);return l.createElement(l.Fragment,null,l.createElement(Mo,{filterSearch:c,value:D,onChange:ee,tablePrefixCls:e,locale:f}),de?Se:l.createElement(ls,{selectable:!0,multiple:i,prefixCls:`${r}-menu`,className:$e,onSelect:R,onDeselect:R,selectedKeys:T,getPopupContainer:h,openKeys:z,onOpenChange:q,items:xe}))},he=()=>x?Et((y||[]).map(String),T,!0):T.length===0;re=l.createElement(l.Fragment,null,M(),l.createElement("div",{className:`${n}-dropdown-btns`},l.createElement(lo,{type:"link",size:"small",disabled:he(),onClick:()=>Y()},f.filterReset),l.createElement(lo,{type:"primary",size:"small",onClick:Q},f.filterConfirm)))}o.filterDropdown&&(re=l.createElement(as,{selectable:void 0},re)),re=l.createElement(ma,{className:`${n}-dropdown`},re);const B=(()=>{let T;return typeof o.filterIcon=="function"?T=o.filterIcon(v):o.filterIcon?T=o.filterIcon:T=l.createElement(is,null),l.createElement("span",{role:"button",tabIndex:-1,className:V(`${n}-trigger`,{active:v}),onClick:M=>{M.stopPropagation()}},T)})();if(g)return l.createElement("div",{className:`${n}-column`},l.createElement("span",{className:`${e}-column-title`},m),B);const j=tr({trigger:["click"],placement:X==="rtl"?"bottomLeft":"bottomRight",children:B,getPopupContainer:h},{...C,rootClassName:V(b,C.rootClassName),open:I,onOpenChange:_,popupRender:()=>typeof C?.dropdownRender=="function"?C.dropdownRender(re):re});return l.createElement("div",{className:`${n}-column`},l.createElement("span",{className:`${e}-column-title`},m),l.createElement(qo,{...j}))},On=(t,e,n)=>{let o=[];return(t||[]).forEach((r,s)=>{const a=It(s,n),i=r.filterDropdown!==void 0;if(r.filters||i||"onFilter"in r)if("filteredValue"in r){let d=r.filteredValue;i||(d=d?.map(String)??d),o.push({column:r,key:at(r,a),filteredKeys:d,forceFiltered:r.filtered})}else o.push({column:r,key:at(r,a),filteredKeys:e&&r.defaultFilteredValue?r.defaultFilteredValue:void 0,forceFiltered:r.filtered});"children"in r&&(o=[].concat(Re(o),Re(On(r.children,e,a))))}),o};function Kr(t,e,n,o,r,s,a,i,d){return n.map((c,u)=>{const p=It(u,i),{filterOnClose:f=!0,filterMultiple:m=!0,filterMode:h,filterSearch:b}=c;let x=c;if(x.filters||x.filterDropdown){const y=at(x,p),C=o.find(({key:E})=>y===E);x={...x,title:E=>l.createElement(ga,{tablePrefixCls:t,prefixCls:`${t}-filter`,dropdownPrefixCls:e,column:x,columnKey:y,filterState:C,filterOnClose:f,filterMultiple:m,filterMode:h,filterSearch:b,triggerFilter:s,locale:r,getPopupContainer:a,rootClassName:d},an(c.title,E))}}return"children"in x&&(x={...x,children:Kr(t,e,x.children,o,r,s,a,p,d)}),x})}const Oo=t=>{const e={};return t.forEach(({key:n,filteredKeys:o,column:r})=>{const s=n,{filters:a,filterDropdown:i}=r;if(i)e[s]=o||null;else if(Array.isArray(o)){const d=wt(a);e[s]=d.filter(c=>o.includes(String(c)))}else e[s]=null}),e},Bn=(t,e,n)=>e.reduce((r,s)=>{const{column:{onFilter:a,filters:i},filteredKeys:d}=s;return a&&d&&d.length?r.map(c=>({...c})).filter(c=>d.some(u=>{const p=wt(i),f=p.findIndex(h=>String(h)===String(u)),m=f!==-1?p[f]:u;return c[n]&&(c[n]=Bn(c[n],e,n)),a(m,c)})):r},t),Pr=t=>t.flatMap(e=>"children"in e?[e].concat(Re(Pr(e.children||[]))):[e]),ya=t=>{const{prefixCls:e,dropdownPrefixCls:n,mergedColumns:o,onFilterChange:r,getPopupContainer:s,locale:a,rootClassName:i}=t;Wn();const d=l.useMemo(()=>Pr(o||[]),[o]),[c,u]=l.useState(()=>On(d,!0)),p=l.useMemo(()=>{const b=On(d,!1);if(b.length===0)return b;let x=!0;if(b.forEach(({filteredKeys:y})=>{y!==void 0&&(x=!1)}),x){const y=(d||[]).map((C,E)=>at(C,It(E)));return c.filter(({key:C})=>y.includes(C)).map(C=>{const E=d[y.indexOf(C.key)];return{...C,column:{...C.column,...E},forceFiltered:E.filtered}})}return b},[d,c]),f=l.useMemo(()=>Oo(p),[p]),m=b=>{const x=p.filter(({key:y})=>y!==b.key);x.push(b),u(x),r(Oo(x),x)};return[b=>Kr(e,n,b,p,a,m,s,void 0,i),p,f]},ba=(t,e,n)=>{const o=l.useRef({});function r(s){if(!o.current||o.current.data!==t||o.current.childrenColumnName!==e||o.current.getRowKey!==n){let i=function(d){d.forEach((c,u)=>{const p=n(c,u);a.set(p,c),c&&typeof c=="object"&&e in c&&i(c[e]||[])})};const a=new Map;i(t),o.current={data:t,childrenColumnName:e,kvMap:a,getRowKey:n}}return o.current.kvMap?.get(s)}return[r]},Tr=10;function xa(t,e){const n={current:t.current,pageSize:t.pageSize};return Object.keys(e&&typeof e=="object"?e:{}).forEach(r=>{const s=t[r];typeof s!="function"&&(n[r]=s)}),n}function Ca(t,e,n){const{total:o=0,...r}=n&&typeof n=="object"?n:{},[s,a]=l.useState(()=>({current:"defaultCurrent"in r?r.defaultCurrent:1,pageSize:"defaultPageSize"in r?r.defaultPageSize:Tr})),i=tr(s,r,{total:o>0?o:t}),d=Math.ceil((o||t)/i.pageSize);i.current>d&&(i.current=d||1);const c=(p,f)=>{a({current:p??1,pageSize:f||i.pageSize})},u=(p,f)=>{n&&n.onChange?.(p,f),c(p,f),e(p,f||i?.pageSize)};return n===!1?[{},()=>{}]:[{...i,onChange:u},c]}const Zt="ascend",xn="descend",on=t=>typeof t.sorter=="object"&&typeof t.sorter.multiple=="number"?t.sorter.multiple:!1,Bo=t=>typeof t=="function"?t:t&&typeof t=="object"&&t.compare?t.compare:!1,Sa=(t,e)=>e?t[t.indexOf(e)+1]:t[0],Ln=(t,e,n)=>{let o=[];const r=(s,a)=>{o.push({column:s,key:at(s,a),multiplePriority:on(s),sortOrder:s.sortOrder})};return(t||[]).forEach((s,a)=>{const i=It(a,n);s.children?("sortOrder"in s&&r(s,i),o=[].concat(Re(o),Re(Ln(s.children,e,i)))):s.sorter&&("sortOrder"in s?r(s,i):e&&s.defaultSortOrder&&o.push({column:s,key:at(s,i),multiplePriority:on(s),sortOrder:s.defaultSortOrder}))}),o},Dr=(t,e,n,o,r,s,a,i,d)=>(e||[]).map((u,p)=>{const f=It(p,i);let m=u;if(m.sorter){const h=m.sortDirections||r,b=m.showSorterTooltip===void 0?a:m.showSorterTooltip,x=at(m,f),y=n.find(({key:I})=>I===x),C=y?y.sortOrder:null,E=Sa(h,C);let $;if(u.sortIcon)$=u.sortIcon({sortOrder:C});else{const I=h.includes(Zt)&&l.createElement(cs,{className:V(`${t}-column-sorter-up`,{active:C===Zt})}),S=h.includes(xn)&&l.createElement(ds,{className:V(`${t}-column-sorter-down`,{active:C===xn})});$=l.createElement("span",{className:V(`${t}-column-sorter`,{[`${t}-column-sorter-full`]:!!(I&&S)})},l.createElement("span",{className:`${t}-column-sorter-inner`,"aria-hidden":"true"},I,S))}const{cancelSort:w,triggerAsc:P,triggerDesc:g}=s||{};let v=w;E===xn?v=g:E===Zt&&(v=P);const k=typeof b=="object"?{title:v,...b}:{title:v};m={...m,className:V(m.className,{[`${t}-column-sort`]:C}),title:I=>{const S=`${t}-column-sorters`,K=l.createElement("span",{className:`${t}-column-title`},an(u.title,I)),N=l.createElement("div",{className:S},K,$);return b?typeof b!="boolean"&&b?.target==="sorter-icon"?l.createElement("div",{className:V(S,`${S}-tooltip-target-sorter`)},K,l.createElement(io,{...k},$)):l.createElement(io,{...k},N):N},onHeaderCell:I=>{const S=u.onHeaderCell?.(I)||{},K=S.onClick,N=S.onKeyDown;S.onClick=z=>{o({column:u,key:x,sortOrder:E,multiplePriority:on(u)}),K?.(z)},S.onKeyDown=z=>{z.keyCode===er.ENTER&&(o({column:u,key:x,sortOrder:E,multiplePriority:on(u)}),N?.(z))};const R=Vl(u.title,{}),O=R?.toString();return C&&(S["aria-sort"]=C==="ascend"?"ascending":"descending"),S["aria-description"]=d?.sortable,S["aria-label"]=O||"",S.className=V(S.className,`${t}-column-has-sorters`),S.tabIndex=0,u.ellipsis&&(S.title=(R??"").toString()),S}}}return"children"in m&&(m={...m,children:Dr(t,m.children,n,o,r,s,a,f,d)}),m}),Lo=t=>{const{column:e,sortOrder:n}=t;return{column:e,order:n,field:e.dataIndex,columnKey:e.key}},Ao=t=>{const e=t.filter(({sortOrder:n})=>n).map(Lo);if(e.length===0&&t.length){const n=t.length-1;return{...Lo(t[n]),column:void 0,order:void 0,field:void 0,columnKey:void 0}}return e.length<=1?e[0]||{}:e},An=(t,e,n)=>{const o=e.slice().sort((a,i)=>i.multiplePriority-a.multiplePriority),r=t.slice(),s=o.filter(({column:{sorter:a},sortOrder:i})=>Bo(a)&&i);return s.length?r.sort((a,i)=>{for(let d=0;d{const i=a[n];return i?{...a,[n]:An(i,e,n)}:a}):r},wa=t=>{const{prefixCls:e,mergedColumns:n,sortDirections:o,tableLocale:r,showSorterTooltip:s,onSorterChange:a,globalLocale:i}=t,[d,c]=l.useState(()=>Ln(n,!0)),u=(x,y)=>{const C=[];return x.forEach((E,$)=>{const w=It($,y);if(C.push(at(E,w)),Array.isArray(E.children)){const P=u(E.children,w);C.push.apply(C,Re(P))}}),C},p=l.useMemo(()=>{let x=!0;const y=Ln(n,!1);if(!y.length){const w=u(n);return d.filter(({key:P})=>w.includes(P))}const C=[];function E(w){x?C.push(w):C.push({...w,sortOrder:null})}let $=null;return y.forEach(w=>{$===null?(E(w),w.sortOrder&&(w.multiplePriority===!1?x=!1:$=!0)):($&&w.multiplePriority!==!1||(x=!1),E(w))}),C},[n,d]),f=l.useMemo(()=>{const x=p.map(({column:y,sortOrder:C})=>({column:y,order:C}));return{sortColumns:x,sortColumn:x[0]?.column,sortOrder:x[0]?.order}},[p]),m=x=>{let y;x.multiplePriority===!1||!p.length||p[0].multiplePriority===!1?y=[x]:y=[].concat(Re(p.filter(({key:C})=>C!==x.key)),[x]),c(y),a(Ao(y),y)};return[x=>Dr(e,x,p,m,o,r,s,void 0,i),p,f,()=>Ao(p)]},Mr=(t,e)=>t.map(o=>{const r={...o};return r.title=an(o.title,e),"children"in r&&(r.children=Mr(r.children,e)),r}),Ea=t=>[l.useCallback(n=>Mr(n,t),[t])],va=Sr((t,e)=>{const{_renderTimes:n}=t,{_renderTimes:o}=e;return n!==o}),$a=Er((t,e)=>{const{_renderTimes:n}=t,{_renderTimes:o}=e;return n!==o}),Na=t=>{const{componentCls:e,lineWidth:n,lineType:o,tableBorderColor:r,tableHeaderBg:s,tablePaddingVertical:a,tablePaddingHorizontal:i,calc:d}=t,c=`${W(n)} ${o} ${r}`,u=(p,f,m)=>({[`&${e}-${p}`]:{[`> ${e}-container`]:{[`> ${e}-content, > ${e}-body`]:{"\n > table > tbody > tr > th,\n > table > tbody > tr > td\n ":{[`> ${e}-expanded-row-fixed`]:{margin:`${W(d(f).mul(-1).equal())} + ${W(d(d(m).add(n)).mul(-1).equal())}`}}}}}});return{[`${e}-wrapper`]:{[`${e}${e}-bordered`]:{[`> ${e}-title`]:{border:c,borderBottom:0},[`> ${e}-container`]:{borderInlineStart:c,borderTop:c,[` + > ${e}-content, + > ${e}-header, + > ${e}-body, + > ${e}-summary + `]:{"> table":{"\n > thead > tr > th,\n > thead > tr > td,\n > tbody > tr > th,\n > tbody > tr > td,\n > tfoot > tr > th,\n > tfoot > tr > td\n ":{borderInlineEnd:c},"> thead":{"> tr:not(:last-child) > th":{borderBottom:c},"> tr > th::before":{backgroundColor:"transparent !important"}},"\n > thead > tr,\n > tbody > tr,\n > tfoot > tr\n ":{[`> ${e}-cell-fix-right-first::after`]:{borderInlineEnd:c}},"\n > tbody > tr > th,\n > tbody > tr > td\n ":{[`> ${e}-expanded-row-fixed`]:{margin:`${W(d(a).mul(-1).equal())} ${W(d(d(i).add(n)).mul(-1).equal())}`,"&::after":{position:"absolute",top:0,insetInlineEnd:n,bottom:0,borderInlineEnd:c,content:'""'}}}}}},[`&${e}-scroll-horizontal`]:{[`> ${e}-container > ${e}-body`]:{"> table > tbody":{[` + > tr${e}-expanded-row, + > tr${e}-placeholder + `]:{"> th, > td":{borderInlineEnd:0}}}}},...u("medium",t.tablePaddingVerticalMiddle,t.tablePaddingHorizontalMiddle),...u("small",t.tablePaddingVerticalSmall,t.tablePaddingHorizontalSmall),[`> ${e}-footer`]:{border:c,borderTop:0}},[`${e}-cell`]:{[`${e}-container:first-child`]:{borderTop:0},"&-scrollbar:not([rowspan])":{boxShadow:`0 ${W(n)} 0 ${W(n)} ${s}`}},[`${e}-bordered ${e}-cell-scrollbar`]:{borderInlineEnd:c}}}},ka=t=>{const{componentCls:e}=t;return{[`${e}-wrapper`]:{[`${e}-cell-ellipsis`]:{...pn,wordBreak:"keep-all",[` + &${e}-cell-fix-start-shadow, + &${e}-cell-fix-end-shadow + `]:{overflow:"visible",[`${e}-cell-content`]:{...pn,display:"block"}},[`${e}-column-title`]:{...pn,wordBreak:"keep-all"}}}}},Ia=t=>{const{componentCls:e}=t;return{[`${e}-wrapper`]:{[`${e}-tbody > tr${e}-placeholder`]:{textAlign:"center",color:t.colorTextDisabled,"\n &:hover > th,\n &:hover > td,\n ":{background:t.colorBgContainer}}}}},Ra=t=>{const{componentCls:e,antCls:n,motionDurationSlow:o,lineWidth:r,paddingXS:s,lineType:a,tableBorderColor:i,tableExpandIconBg:d,tableExpandColumnWidth:c,borderRadius:u,tablePaddingVertical:p,tablePaddingHorizontal:f,tableExpandedRowBg:m,paddingXXS:h,expandIconMarginTop:b,expandIconSize:x,expandIconHalfInner:y,expandIconScale:C,calc:E}=t,$=`${W(r)} ${a} ${i}`,w=E(h).sub(r).equal();return{[`${e}-wrapper`]:{[`${e}-expand-icon-col`]:{width:c},[`${e}-row-expand-icon-cell`]:{textAlign:"center",[`${e}-row-expand-icon`]:{display:"inline-flex",float:"none",verticalAlign:"sub"}},[`${e}-row-indent`]:{height:1,float:"left"},[`${e}-row-expand-icon`]:{...us(t),position:"relative",float:"left",width:x,height:x,color:"inherit",lineHeight:W(x),background:d,border:$,borderRadius:u,transform:`scale(${C})`,"&:focus, &:hover, &:active":{borderColor:"currentcolor"},"&::before, &::after":{position:"absolute",background:"currentcolor",transition:`transform ${o} ease-out`,content:'""'},"&::before":{top:y,insetInlineEnd:w,insetInlineStart:w,height:r},"&::after":{top:w,bottom:w,insetInlineStart:y,width:r,transform:"rotate(90deg)"},"&-collapsed::before":{transform:"rotate(-180deg)"},"&-collapsed::after":{transform:"rotate(0deg)"},"&-spaced":{"&::before, &::after":{display:"none",content:"none"},background:"transparent",border:0,visibility:"hidden"}},[`${e}-row-indent + ${e}-row-expand-icon`]:{marginTop:b,marginInlineEnd:s},[`tr${e}-expanded-row`]:{"&, &:hover":{"> th, > td":{background:m}},[`${n}-descriptions-view`]:{display:"flex",table:{flex:"auto",width:"100%"}}},[`${e}-expanded-row-fixed`]:{position:"relative",margin:`${W(E(p).mul(-1).equal())} ${W(E(f).mul(-1).equal())}`,padding:`${W(p)} ${W(f)}`}}}},Ka=t=>{const{componentCls:e,antCls:n,iconCls:o,tableFilterDropdownWidth:r,tableFilterDropdownSearchWidth:s,paddingXXS:a,paddingXS:i,colorText:d,lineWidth:c,lineType:u,tableBorderColor:p,headerIconColor:f,fontSizeSM:m,tablePaddingHorizontal:h,borderRadius:b,motionDurationSlow:x,colorIcon:y,colorPrimary:C,tableHeaderFilterActiveBg:E,colorTextDisabled:$,tableFilterDropdownBg:w,tableFilterDropdownHeight:P,controlItemBgHover:g,controlItemBgActive:v,boxShadowSecondary:k,filterDropdownMenuBg:I,calc:S}=t,K=`${n}-dropdown`,N=`${e}-filter-dropdown`,R=`${n}-tree`,O=`${W(c)} ${u} ${p}`;return[{[`${e}-wrapper`]:{[`${e}-filter-column`]:{display:"flex",justifyContent:"space-between"},[`${e}-filter-trigger`]:{position:"relative",display:"flex",alignItems:"center",marginBlock:S(a).mul(-1).equal(),marginInline:`${W(a)} ${W(S(h).div(2).mul(-1).equal())}`,padding:`0 ${W(a)}`,color:f,fontSize:m,borderRadius:b,cursor:"pointer",transition:`all ${x}`,"&:hover":{color:y,background:E},"&.active":{color:C}}}},{[`${n}-dropdown`]:{[N]:{..._n(t),minWidth:r,backgroundColor:w,borderRadius:b,boxShadow:k,overflow:"hidden",[`${K}-menu`]:{maxHeight:P,overflowX:"hidden",border:0,boxShadow:"none",borderRadius:"unset",backgroundColor:I,"&:empty::after":{display:"block",padding:`${W(i)} 0`,color:$,fontSize:m,textAlign:"center",content:'"Not Found"'}},[`${N}-tree`]:{paddingBlock:`${W(i)} 0`,paddingInline:i,[R]:{padding:0},[`${R}-treenode ${R}-node-content-wrapper:hover`]:{backgroundColor:g},[`${R}-treenode-checkbox-checked ${R}-node-content-wrapper`]:{"&, &:hover":{backgroundColor:v}}},[`${N}-search`]:{padding:i,borderBottom:O,"&-input":{input:{minWidth:s},[o]:{color:$}}},[`${N}-checkall`]:{width:"100%",marginBottom:a,marginInlineStart:a},[`${N}-btns`]:{display:"flex",justifyContent:"space-between",padding:`${W(S(i).sub(c).equal())} ${W(i)}`,overflow:"hidden",borderTop:O}}}},{[`${n}-dropdown ${N}, ${N}-submenu`]:{[`${n}-checkbox-wrapper + span`]:{paddingInlineStart:i,color:d},"> ul":{maxHeight:"calc(100vh - 130px)",overflowX:"hidden",overflowY:"auto"}}}]};function Or({colorSplit:t}){const e={boxShadow:`inset 10px 0 8px -8px ${t}`},n={boxShadow:`inset -10px 0 8px -8px ${t}`};return[e,n]}const Pa=t=>{const{componentCls:e,lineWidth:n,motionDurationSlow:o,zIndexTableFixed:r,tableBg:s,calc:a}=t,i=`${e}-cell`,d=`${i}-fix`,c={position:"absolute",top:0,bottom:a(n).mul(-1).equal(),width:30,transition:`box-shadow ${o}`,content:'""',pointerEvents:"none"},[u,p]=Or(t);return{[`${e}-wrapper`]:{[`${i}${d}`]:{position:"sticky"},[d]:{zIndex:`calc(var(--z-offset-reverse) + ${r})`,background:s,"&:after":c,"&-start:after":{insetInlineStart:"100%"},"&-end:after":{insetInlineEnd:"100%"},"&-start-shadow-show:after":u,"&-end-shadow-show:after":p},[`${e}-container`]:{position:"relative","&:before, &:after":{...c,zIndex:`calc(var(--columns-count) * 2 + ${r} + 1)`},"&:before":{insetInlineStart:0},"&:after":{insetInlineEnd:0}},[`${e}-has-fix-start ${e}-container:before`]:{display:"none"},[`${e}-has-fix-end ${e}-container:after`]:{display:"none"},[`${e}-fix-start-shadow-show ${e}-container:before`]:u,[`${e}-fix-end-shadow-show ${e}-container:after`]:p}}},Ta=t=>{const{componentCls:e,antCls:n,margin:o}=t;return{[`${e}-wrapper`]:{[`${e}-pagination${n}-pagination`]:{margin:`${W(o)} 0`},[`${e}-pagination`]:{display:"flex",flexWrap:"wrap",rowGap:t.paddingXS,"> *":{flex:"none"},"&-start":{justifyContent:"flex-start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"flex-end"}}}}},Da=t=>{const{componentCls:e,tableRadius:n}=t;return{[`${e}-wrapper`]:{[e]:{[`${e}-title, ${e}-header`]:{borderRadius:`${W(n)} ${W(n)} 0 0`},[`${e}-title + ${e}-container`]:{borderStartStartRadius:0,borderStartEndRadius:0,[`${e}-header, table`]:{borderRadius:0},"table > thead > tr:first-child":{"th:first-child, th:last-child, td:first-child, td:last-child":{borderRadius:0}}},"&-container":{borderStartStartRadius:n,borderStartEndRadius:n,"&::before":{borderStartStartRadius:n},"&::after":{borderStartEndRadius:n},[`> ${e}-content`]:{borderStartStartRadius:n,borderStartEndRadius:n},"table > thead > tr:first-child":{"> *:first-child":{borderStartStartRadius:n},"> *:last-child":{borderStartEndRadius:n}}},"&-footer":{borderRadius:`0 0 ${W(n)} ${W(n)}`}}}}},Ma=t=>{const{componentCls:e}=t,[n,o]=Or(t);return{[`${e}-wrapper-rtl`]:{direction:"rtl",table:{direction:"rtl"},[`${e}-row-expand-icon`]:{float:"right","&::after":{transform:"rotate(-90deg)"},"&-collapsed::before":{transform:"rotate(180deg)"},"&-collapsed::after":{transform:"rotate(0deg)"}},[`${e}-cell-fix`]:{"&-start-shadow-show:after":o,"&-end-shadow-show:after":n},[`${e}-container`]:{[`${e}-row-indent`]:{float:"right"}},[`${e}-fix-start-shadow-show ${e}-container:before`]:o,[`${e}-fix-end-shadow-show ${e}-container:after`]:n}}},Oa=t=>{const{componentCls:e,antCls:n,iconCls:o,fontSizeIcon:r,padding:s,paddingXS:a,headerIconColor:i,headerIconHoverColor:d,tableSelectionColumnWidth:c,tableSelectedRowBg:u,tableSelectedRowHoverBg:p,tableRowHoverBg:f,tablePaddingHorizontal:m,calc:h}=t;return{[`${e}-wrapper`]:{[`${e}-selection-col`]:{width:c,[`&${e}-selection-col-with-dropdown`]:{width:h(c).add(r).add(h(s).div(4)).equal()}},[`${e}-bordered ${e}-selection-col`]:{width:h(c).add(h(a).mul(2)).equal(),[`&${e}-selection-col-with-dropdown`]:{width:h(c).add(r).add(h(s).div(4)).add(h(a).mul(2)).equal()}},[` + table tr th${e}-selection-column, + table tr td${e}-selection-column, + ${e}-selection-column + `]:{paddingInlineEnd:t.paddingXS,paddingInlineStart:t.paddingXS,textAlign:"center",[`${n}-radio-wrapper`]:{marginInlineEnd:0}},[`table tr th${e}-selection-column${e}-cell-fix-left`]:{zIndex:h(t.zIndexTableFixed).add(1).equal({unit:!1})},[`table tr th${e}-selection-column::after`]:{backgroundColor:"transparent !important"},[`${e}-selection`]:{position:"relative",display:"inline-flex",flexDirection:"column"},[`${e}-selection-extra`]:{position:"absolute",top:0,zIndex:1,cursor:"pointer",transition:`all ${t.motionDurationSlow}`,marginInlineStart:"100%",paddingInlineStart:W(h(m).div(4).equal()),[o]:{color:i,fontSize:r,verticalAlign:"baseline","&:hover":{color:d}}},[`${e}-tbody`]:{[`${e}-row`]:{[`&${e}-row-selected`]:{[`> ${e}-cell`]:{background:u,"&-row-hover":{background:p}}},[`> ${e}-cell-row-hover`]:{background:f}}}}}},Ba=t=>{const{componentCls:e,tableExpandColumnWidth:n,calc:o}=t,r=(s,a,i,d)=>({[`${e}${e}-${s}`]:{fontSize:d,[` + ${e}-title, + ${e}-footer, + ${e}-cell, + ${e}-thead > tr > th, + ${e}-tbody > tr > th, + ${e}-tbody > tr > td, + tfoot > tr > th, + tfoot > tr > td + `]:{padding:`${W(a)} ${W(i)}`},[`${e}-filter-trigger`]:{marginInlineEnd:W(o(i).div(2).mul(-1).equal())},[`${e}-expanded-row-fixed`]:{margin:`${W(o(a).mul(-1).equal())} ${W(o(i).mul(-1).equal())}`},[`${e}-tbody`]:{[`${e}-wrapper:only-child ${e}`]:{marginBlock:W(o(a).mul(-1).equal()),marginInline:`${W(o(n).sub(i).equal())} ${W(o(i).mul(-1).equal())}`}},[`${e}-selection-extra`]:{paddingInlineStart:W(o(i).div(4).equal())}}});return{[`${e}-wrapper`]:{...r("medium",t.tablePaddingVerticalMiddle,t.tablePaddingHorizontalMiddle,t.tableFontSizeMiddle),...r("small",t.tablePaddingVerticalSmall,t.tablePaddingHorizontalSmall,t.tableFontSizeSmall)}}},La=t=>{const{componentCls:e,marginXXS:n,fontSizeIcon:o,headerIconColor:r,headerIconHoverColor:s}=t;return{[`${e}-wrapper`]:{[`${e}-thead th${e}-column-has-sorters`]:{outline:"none",cursor:"pointer",transition:`all ${t.motionDurationSlow}, left 0s`,"&:hover":{background:t.tableHeaderSortHoverBg,"&::before":{backgroundColor:"transparent !important"}},"&:focus-visible":{color:t.colorPrimary},[` + &${e}-cell-fix-left:hover, + &${e}-cell-fix-right:hover + `]:{background:t.tableFixedHeaderSortActiveBg}},[`${e}-thead th${e}-column-sort`]:{background:t.tableHeaderSortBg,"&::before":{backgroundColor:"transparent !important"}},[`td${e}-column-sort`]:{background:t.tableBodySortBg},[`${e}-column-title`]:{position:"relative",zIndex:1,flex:1,minWidth:0},[`${e}-column-sorters`]:{display:"flex",flex:"auto",alignItems:"center",justifyContent:"space-between","&::after":{position:"absolute",inset:0,width:"100%",height:"100%",content:'""'}},[`${e}-column-sorters-tooltip-target-sorter`]:{"&::after":{content:"none"}},[`${e}-column-sorter`]:{marginInlineStart:n,color:r,fontSize:0,transition:`color ${t.motionDurationSlow}`,"&-inner":{display:"inline-flex",flexDirection:"column",alignItems:"center"},"&-up, &-down":{fontSize:o,"&.active":{color:t.colorPrimary}},[`${e}-column-sorter-up + ${e}-column-sorter-down`]:{marginTop:"-0.3em"}},[`${e}-column-sorters:hover ${e}-column-sorter`]:{color:s}}}},Aa=t=>{const{componentCls:e,opacityLoading:n,tableScrollThumbBg:o,tableScrollThumbBgHover:r,tableScrollThumbSize:s,tableScrollBg:a,stickyScrollBarBorderRadius:i,lineWidth:d,lineType:c,tableBorderColor:u,zIndexTableFixed:p}=t,f=`${W(d)} ${c} ${u}`;return{[`${e}-wrapper`]:{[`${e}-sticky`]:{"&-holder":{position:"sticky",zIndex:`calc(var(--columns-count) * 2 + ${p} + 1)`,background:t.colorBgContainer},"&-scroll":{position:"sticky",bottom:0,height:`${W(s)} !important`,zIndex:`calc(var(--columns-count) * 2 + ${p} + 1)`,display:"flex",alignItems:"center",background:a,borderTop:f,opacity:n,"&:hover":{transformOrigin:"center bottom"},"&-bar":{height:s,backgroundColor:o,borderRadius:i,transition:`all ${t.motionDurationSlow}, transform 0s`,position:"absolute",bottom:0,"&:hover, &-active":{backgroundColor:r}}}}}}},Ho=t=>{const{componentCls:e,lineWidth:n,tableBorderColor:o,calc:r}=t,s=`${W(n)} ${t.lineType} ${o}`;return{[`${e}-wrapper`]:{[`${e}-summary`]:{position:"relative",zIndex:t.zIndexTableFixed,background:t.tableBg,"> tr":{"> th, > td":{borderBottom:s}}},[`div${e}-summary`]:{boxShadow:`0 ${W(r(n).mul(-1).equal())} 0 ${o}`}}}},Ha=t=>{const{componentCls:e,motionDurationMid:n,lineWidth:o,lineType:r,tableBorderColor:s,calc:a}=t,i=`${W(o)} ${r} ${s}`,d=`${e}-expanded-row-cell`;return{[`${e}-wrapper`]:{[`${e}-tbody-virtual`]:{[`${e}-tbody-virtual-holder-inner`]:{[` + & > ${e}-row, + & > div:not(${e}-row) > ${e}-row + `]:{display:"flex",boxSizing:"border-box",width:"100%"}},[`${e}-cell`]:{borderBottom:i,transition:`background-color ${n}`},[`${e}-expanded-row`]:{[`${d}${d}-fixed`]:{position:"sticky",insetInlineStart:0,overflow:"hidden",width:`calc(var(--virtual-width) - ${W(o)})`,borderInlineEnd:"none"}}},[`${e}-bordered`]:{[`${e}-tbody-virtual`]:{"&:after":{content:'""',insetInline:0,bottom:0,borderBottom:i,position:"absolute"},[`${e}-cell`]:{borderInlineEnd:i,[`&${e}-cell-fix-right-first:before`]:{content:'""',position:"absolute",insetBlock:0,insetInlineStart:a(o).mul(-1).equal(),borderInlineStart:i}}},[`&${e}-virtual`]:{[`${e}-placeholder ${e}-cell`]:{borderInlineEnd:i,borderBottom:i}}}}}},Fa=t=>{const{componentCls:e,fontWeightStrong:n,tablePaddingVertical:o,tablePaddingHorizontal:r,tableExpandColumnWidth:s,lineWidth:a,lineType:i,tableBorderColor:d,tableFontSize:c,tableBg:u,tableRadius:p,tableHeaderTextColor:f,motionDurationMid:m,tableHeaderBg:h,tableHeaderCellSplitColor:b,tableFooterTextColor:x,tableFooterBg:y,calc:C}=t,E=`${W(a)} ${i} ${d}`;return{[`${e}-wrapper`]:{clear:"both",maxWidth:"100%","--rc-virtual-list-scrollbar-bg":t.tableScrollBg,...fs(),[e]:{..._n(t),fontSize:c,background:u,borderRadius:`${W(p)} ${W(p)} 0 0`,scrollbarColor:`${t.tableScrollThumbBg} ${t.tableScrollBg}`},table:{width:"100%",textAlign:"start",borderRadius:`${W(p)} ${W(p)} 0 0`,borderCollapse:"separate",borderSpacing:0},[` + ${e}-cell, + ${e}-thead > tr > th, + ${e}-tbody > tr > th, + ${e}-tbody > tr > td, + tfoot > tr > th, + tfoot > tr > td + `]:{position:"relative",padding:`${W(o)} ${W(r)}`,overflowWrap:"break-word"},[`${e}-title`]:{padding:`${W(o)} ${W(r)}`},[`${e}-thead`]:{"\n > tr > th,\n > tr > td\n ":{position:"relative",color:f,fontWeight:n,textAlign:"start",background:h,borderBottom:E,transition:`background-color ${m} ease`,"&[colspan]:not([colspan='1'])":{textAlign:"center"},[`&:not(:last-child):not(${e}-selection-column):not(${e}-row-expand-icon-cell):not([colspan])::before`]:{position:"absolute",top:"50%",insetInlineEnd:0,width:1,height:"1.6em",backgroundColor:b,transform:"translateY(-50%)",transition:`background-color ${m}`,content:'""'}},"> tr:not(:last-child) > th[colspan]":{borderBottom:0}},[`${e}-tbody`]:{"> tr":{"> th, > td":{borderBottom:E,transition:["background-color","border-color"].map($=>`${$} ${m}`).join(", "),[` + > ${e}-wrapper:only-child, + > ${e}-expanded-row-fixed > ${e}-wrapper:only-child + `]:{[e]:{marginBlock:W(C(o).mul(-1).equal()),marginInline:`${W(C(s).sub(r).equal())} + ${W(C(r).mul(-1).equal())}`,[`${e}-tbody > tr:last-child > td`]:{borderBottomWidth:0,"&:first-child, &:last-child":{borderRadius:0}}}}},"> th":{position:"relative",color:f,fontWeight:n,textAlign:"start",background:h,borderBottom:E,transition:`background-color ${m} ease`},[`& > ${e}-measure-cell`]:{paddingBlock:"0 !important",borderBlock:"0 !important",[`${e}-measure-cell-content`]:{height:0,overflow:"hidden",pointerEvents:"none"}}}},[`${e}-footer`]:{padding:`${W(o)} ${W(r)}`,color:x,background:y}}}},za=t=>{const{colorFillAlter:e,colorBgContainer:n,colorTextHeading:o,colorFillSecondary:r,colorFillContent:s,controlItemBgActive:a,controlItemBgActiveHover:i,padding:d,paddingSM:c,paddingXS:u,colorBorderSecondary:p,borderRadiusLG:f,controlHeight:m,colorTextPlaceholder:h,fontSize:b,fontSizeSM:x,lineHeight:y,lineWidth:C,colorIcon:E,colorIconHover:$,opacityLoading:w,controlInteractiveSize:P}=t,g=new Ot(r).onBackground(n).toHexString(),v=new Ot(s).onBackground(n).toHexString(),k=new Ot(e).onBackground(n).toHexString(),I=new Ot(E),S=new Ot($),K=P/2-C,N=K*2+C*3;return{headerBg:k,headerColor:o,headerSortActiveBg:g,headerSortHoverBg:v,bodySortBg:k,rowHoverBg:k,rowSelectedBg:a,rowSelectedHoverBg:i,rowExpandedBg:e,cellPaddingBlock:d,cellPaddingInline:d,cellPaddingBlockMD:c,cellPaddingInlineMD:u,cellPaddingBlockSM:u,cellPaddingInlineSM:u,borderColor:p,headerBorderRadius:f,footerBg:k,footerColor:o,cellFontSize:b,cellFontSizeMD:b,cellFontSizeSM:b,headerSplitColor:p,fixedHeaderSortActiveBg:g,headerFilterHoverBg:s,filterDropdownMenuBg:n,filterDropdownBg:n,expandIconBg:n,selectionColumnWidth:m,stickyScrollBarBg:h,stickyScrollBarBorderRadius:100,expandIconMarginTop:(b*y-C*3)/2-Math.ceil((x*1.4-C*3)/2),headerIconColor:I.clone().setA(I.a*w).toRgbString(),headerIconHoverColor:S.clone().setA(S.a*w).toRgbString(),expandIconHalfInner:K,expandIconSize:N,expandIconScale:P/N}},Wa=2,_a=Xo("Table",t=>{const{colorTextHeading:e,colorSplit:n,colorBgContainer:o,controlInteractiveSize:r,headerBg:s,headerColor:a,headerSortActiveBg:i,headerSortHoverBg:d,bodySortBg:c,rowHoverBg:u,rowSelectedBg:p,rowSelectedHoverBg:f,rowExpandedBg:m,cellPaddingBlock:h,cellPaddingInline:b,cellPaddingBlockMD:x,cellPaddingInlineMD:y,cellPaddingBlockSM:C,cellPaddingInlineSM:E,borderColor:$,footerBg:w,footerColor:P,headerBorderRadius:g,cellFontSize:v,cellFontSizeMD:k,cellFontSizeSM:I,headerSplitColor:S,fixedHeaderSortActiveBg:K,headerFilterHoverBg:N,filterDropdownBg:R,expandIconBg:O,selectionColumnWidth:z,stickyScrollBarBg:U,calc:q}=t,D=Go(t,{tableFontSize:v,tableBg:o,tableRadius:g,tablePaddingVertical:h,tablePaddingHorizontal:b,tablePaddingVerticalMiddle:x,tablePaddingHorizontalMiddle:y,tablePaddingVerticalSmall:C,tablePaddingHorizontalSmall:E,tableBorderColor:$,tableHeaderTextColor:a,tableHeaderBg:s,tableFooterTextColor:P,tableFooterBg:w,tableHeaderCellSplitColor:S,tableHeaderSortBg:i,tableHeaderSortHoverBg:d,tableBodySortBg:c,tableFixedHeaderSortActiveBg:K,tableHeaderFilterActiveBg:N,tableFilterDropdownBg:R,tableRowHoverBg:u,tableSelectedRowBg:p,tableSelectedRowHoverBg:f,zIndexTableFixed:Wa,tableFontSizeMiddle:k,tableFontSizeSmall:I,tableSelectionColumnWidth:z,tableExpandIconBg:O,tableExpandColumnWidth:q(r).add(q(t.padding).mul(2)).equal(),tableExpandedRowBg:m,tableFilterDropdownWidth:120,tableFilterDropdownHeight:264,tableFilterDropdownSearchWidth:140,tableScrollThumbSize:8,tableScrollThumbBg:U,tableScrollThumbBgHover:e,tableScrollBg:n});return[Fa(D),Ta(D),Ho(D),La(D),Ka(D),Na(D),Da(D),Ra(D),Ho(D),Ia(D),Oa(D),Pa(D),Aa(D),ka(D),Ba(D),Ma(D),Ha(D)]},za,{resetFont:!1,unitless:{expandIconScale:!0}}),Fo=[],ja=(t,e)=>{const{prefixCls:n,className:o,rootClassName:r,style:s,classNames:a,styles:i,size:d,bordered:c,dropdownPrefixCls:u,dataSource:p,pagination:f,rowSelection:m,rowKey:h,rowClassName:b,columns:x,children:y,childrenColumnName:C,onChange:E,getPopupContainer:$,loading:w,expandIcon:P,expandable:g,expandedRowRender:v,expandIconColumnIndex:k,indentSize:I,scroll:S,sortDirections:K,locale:N,showSorterTooltip:R={target:"full-header"},virtual:O}=t;Wn();const z=l.useMemo(()=>x||qn(y),[x,y]),U=l.useMemo(()=>z.some(J=>J.responsive),[z]),q=ps(U),D=l.useMemo(()=>{const J=new Set(Object.keys(q).filter(oe=>q[oe]));return z.filter(oe=>!oe.responsive||oe.responsive.some(Ee=>J.has(Ee)))},[z,q]),G=_o(t,["className","style","columns"]),{locale:ee=co,table:L}=l.useContext(rn),{getPrefixCls:Q,direction:Y,renderEmpty:fe,getPopupContainer:_,className:$e,style:ce,classNames:me,styles:ae}=Zo("table"),re=ms(J=>d==="middle"?"medium":d??J),X={...t,size:re,bordered:c},[H,A]=Qo([me,a],[ae,i],{props:X},{pagination:{_default:"root"},header:{_default:"wrapper"},body:{_default:"wrapper"}}),B={...ee.Table,...N},[j]=hs("global",co.global),T=p||Fo,M=Q("table",n),he=Q("dropdown",u),[,Se]=Jo(),xe=bs(M),[de,ke]=_a(M,xe),ge={childrenColumnName:C,expandIconColumnIndex:k,...g,expandIcon:g?.expandIcon??L?.expandable?.expandIcon},{childrenColumnName:Ke="children"}=ge,Oe=l.useMemo(()=>T.some(J=>J?.[Ke])?"nest":v||g?.expandedRowRender?"row":null,[Ke,T]),F={body:l.useRef(null)},Ie=jl(M),Ve=l.useRef(null),te=l.useRef(null);Es(e,()=>({...te.current,nativeElement:Ve.current}));const ue=h||L?.rowKey||"key",ye=S??L?.scroll,le=l.useMemo(()=>typeof ue=="function"?ue:J=>J?.[ue],[ue]),[Ce]=ba(T,Ke,le),ie={},se=(J,oe,Ee=!1)=>{const Te={...ie,...J};Ee&&(ie.resetPagination?.(),Te.pagination?.current&&(Te.pagination.current=1),f&&f.onChange?.(1,Te.pagination?.pageSize)),S&&S.scrollToFirstRowOnChange!==!1&&F.body.current&&ks(0,{getContainer:()=>F.body.current}),E?.(Te.pagination,Te.filters,Te.sorter,{currentDataSource:Bn(An(T,Te.sorterStates,Ke),Te.filterStates,Ke),action:oe})},He=(J,oe)=>{se({sorter:J,sorterStates:oe},"sort",!1)},[be,we,_e,Ue]=wa({prefixCls:M,mergedColumns:D,onSorterChange:He,sortDirections:K||["ascend","descend"],tableLocale:B,showSorterTooltip:R,globalLocale:j}),ct=l.useMemo(()=>An(T,we,Ke),[Ke,T,we]);ie.sorter=Ue(),ie.sorterStates=we;const Fe=(J,oe)=>{se({filters:J,filterStates:oe},"filter",!0)},[je,Pe,ze]=ya({prefixCls:M,locale:B,dropdownPrefixCls:he,mergedColumns:D,onFilterChange:Fe,getPopupContainer:$||_,rootClassName:V(r,xe)}),Me=Bn(ct,Pe,Ke);ie.filters=ze,ie.filterStates=Pe;const Ze=l.useMemo(()=>{const J={};return Object.keys(ze).forEach(oe=>{ze[oe]!==null&&(J[oe]=ze[oe])}),{..._e,filters:J}},[_e,ze]),[Rt]=Ea(Ze),_t=(J,oe)=>{se({pagination:{...ie.pagination,current:J,pageSize:oe}},"paginate")},[Ae,jt]=Ca(Me.length,_t,f);ie.pagination=f===!1?{}:xa(Ae,f),ie.resetPagination=jt;const dt=l.useMemo(()=>{if(f===!1||!Ae.pageSize)return Me;const{current:J=1,total:oe,pageSize:Ee=Tr}=Ae;return Me.lengthEe?Me.slice((J-1)*Ee,J*Ee):Me:Me.slice((J-1)*Ee,J*Ee)},[!!f,Me,Ae?.current,Ae?.pageSize,Ae?.total]),[Kt,cn]=Wl({prefixCls:M,data:Me,pageData:dt,getRowKey:le,getRecordByKey:Ce,expandType:Oe,childrenColumnName:Ke,locale:B,getPopupContainer:$||_},m),tt=(J,oe,Ee)=>{const Te=typeof b=="function"?b(J,oe,Ee):b;return V({[`${M}-row-selected`]:cn.has(le(J,oe))},Te)};ge.__PARENT_RENDER_ICON__=ge.expandIcon,ge.expandIcon=ge.expandIcon||P||_l(B),Oe==="nest"&&ge.expandIconColumnIndex===void 0?ge.expandIconColumnIndex=m?1:0:ge.expandIconColumnIndex>0&&m&&(ge.expandIconColumnIndex-=1),typeof ge.indentSize!="number"&&(ge.indentSize=typeof I=="number"?I:15);const dn=l.useCallback(J=>Rt(Kt(je(be(J)))),[be,je,Kt]);let Pt,ut;if(f!==!1&&Ae?.total){let J;Ae.size?J=Ae.size:J=re==="small"||re==="medium"?"small":void 0;const oe=(We="end")=>l.createElement(Cs,{...Ae,classNames:H.pagination,styles:A.pagination,className:V(`${M}-pagination ${M}-pagination-${We}`,Ae.className),size:J}),{placement:Ee,position:Te}=Ae,qe=Ee??Te,pt=We=>{const Xe=We.toLowerCase();return Xe.includes("center")?"center":Xe.includes("left")||Xe.includes("start")?"start":"end"};if(Array.isArray(qe)){const[We,Xe]=["top","bottom"].map(mt=>qe.find(qt=>qt.includes(mt))),Ut=qe.every(mt=>`${mt}`=="none");!We&&!Xe&&!Ut&&(ut=oe()),We&&(Pt=oe(pt(We))),Xe&&(ut=oe(pt(Xe)))}else ut=oe()}const yt=l.useMemo(()=>typeof w=="boolean"?{spinning:w}:typeof w=="object"&&w!==null?{spinning:!0,...w}:void 0,[w]),bt=V(ke,xe,`${M}-wrapper`,$e,{[`${M}-wrapper-rtl`]:Y==="rtl"},o,r,H.root,de),Vt={...A.root,...ce,...s},un=l.useMemo(()=>yt?.spinning&&T===Fo?null:typeof N?.emptyText<"u"?N.emptyText:fe?.("Table")||l.createElement(gs,{componentName:"Table"}),[yt?.spinning,T,N?.emptyText,fe]),fn=O?$a:va,Tt={},ft=l.useMemo(()=>{const{fontSize:J,lineHeight:oe,lineWidth:Ee,padding:Te,paddingXS:qe,paddingSM:pt}=Se,We=Math.floor(J*oe);switch(re){case"medium":return pt*2+We+Ee;case"small":return qe*2+We+Ee;default:return Te*2+We+Ee}},[Se,re]);return O&&(Tt.listItemHeight=ft),l.createElement("div",{ref:Ve,className:bt,style:Vt},l.createElement(xs,{spinning:!1,...yt},Pt,l.createElement(fn,{...Tt,...G,scroll:ye,classNames:H,styles:A,ref:te,columns:D,direction:Y,expandable:ge,prefixCls:M,className:V({[`${M}-medium`]:re==="medium",[`${M}-small`]:re==="small",[`${M}-bordered`]:c,[`${M}-empty`]:T.length===0},ke,xe,de),data:dt,rowKey:le,rowClassName:tt,emptyText:un,internalHooks:Wt,internalRefs:F,transformColumns:dn,getContainerWidth:Ie,measureRowRender:J=>l.createElement(kr.Provider,{value:!0},l.createElement(ys,{getPopupContainer:oe=>oe},J))}),ut))},Va=l.forwardRef(ja),Ua=(t,e)=>{const n=l.useRef(0);return n.current+=1,l.createElement(Va,{...t,ref:e,_renderTimes:n.current})},it=l.forwardRef(Ua);it.SELECTION_COLUMN=nt;it.EXPAND_COLUMN=ot;it.SELECTION_ALL=Kn;it.SELECTION_INVERT=Pn;it.SELECTION_NONE=Tn;it.Column=Dl;it.ColumnGroup=Ml;it.Summary=dr;export{it as F,ca as S,Qn as T,Ol as U,St as a,Ql as b,jn as c,ra as g,sa as i}; diff --git a/public/assets/Timeline-BM8lZv8J.js b/public/assets/Timeline-BM8lZv8J.js new file mode 100644 index 0000000..0cfb6d1 --- /dev/null +++ b/public/assets/Timeline-BM8lZv8J.js @@ -0,0 +1 @@ +import{r as p,L as T,M as _e,ax as ve,R as Y,b5 as z,a3 as X,z as ze,G as ye,a_ as Le,H as we,J as Ie,b0 as Oe,a$ as je,K as Ne,b6 as Fe,ar as Ve,b7 as Ge,ac as Ye,b8 as Ue,aZ as Ke,b9 as Se,ba as Je,a8 as Qe}from"./index-B-sDl1ER.js";function Ze(e){const{prefixCls:t,className:n,style:r,status:c}=e,s=`${t}-rail`;return p.createElement("div",{className:T(s,`${s}-${c}`,n),style:r})}const Ee=p.createContext({}),me=p.createContext(null);function ae(){return ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{className:n,style:r,children:c,...s}=e,{prefixCls:l,classNames:$,styles:m}=p.useContext(me),{className:i,style:a}=p.useContext(Re),u=`${l}-item`;return p.createElement("div",ae({},_e(s,!1),{ref:t,className:T(`${u}-icon`,$.itemIcon,i,n),style:{...m.itemIcon,...a,...r}}),c)});function ce(){return ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t{v?.(F),g(m)},R.onKeyDown=F=>{const{which:W}=F;(W===ve.ENTER||W===ve.SPACE)&&g(m)});const E=S||"wait",q=le(b),_=le(C),O=T(d,`${d}-${E}`,{[`${d}-custom`]:A,[`${d}-active`]:$,[`${d}-disabled`]:f===!0,[`${d}-empty-header`]:!q&&!_},M,n.item,I.root);let L=p.createElement(xe,null);a&&(L=a(L,{...N,components:{Icon:xe}}));const U=p.createElement("div",{className:T(`${d}-wrapper`,n.itemWrapper,I.wrapper),style:{...r.itemWrapper,...y.wrapper}},p.createElement(Re.Provider,{value:{className:I.icon,style:y.icon}},L),p.createElement("div",{className:T(`${d}-section`,n.itemSection,I.section),style:{...r.itemSection,...y.section}},p.createElement("div",{className:T(`${d}-header`,n.itemHeader,I.header),style:{...r.itemHeader,...y.header}},q&&p.createElement("div",{className:T(`${d}-title`,n.itemTitle,I.title),style:{...r.itemTitle,...y.title}},b),_&&p.createElement("div",{title:typeof C=="string"?C:void 0,className:T(`${d}-subtitle`,n.itemSubtitle,I.subtitle),style:{...r.itemSubtitle,...y.subtitle}},C),!s&&p.createElement(Ze,{prefixCls:d,className:T(n.itemRail,I.rail),style:{...r.itemRail,...y.rail},status:x?S:l})),le(P)&&p.createElement("div",{className:T(`${d}-content`,n.itemContent,I.content),style:{...r.itemContent,...y.content}},P)));let K=p.createElement(w,ce({},H,R,{className:O,style:{...r.item,...y.root,...D}}),u?u(U):U);return i&&(K=i(K,N)||null),K}function se(){return se=Object.assign?Object.assign.bind():function(e){for(var t=1;t(x||[]).filter(Boolean),[x]),M=Y.useMemo(()=>S.map(({status:N},B)=>{const R=g+B;return N||(R===u?a:R{d&&u!==N&&d(N)},{root:I="div",item:y="div"}=i||{},H=Y.useMemo(()=>({prefixCls:t,classNames:c,styles:s,ItemComponent:y}),[t,c,s,y]),P=(N,B)=>{const R=g+B,E=M[B],q=M[B+1],_={...N,status:E};return Y.createElement(ke,{key:R,prefixCls:t,classNames:c,styles:s,data:_,nextStatus:q,active:R===u,index:R,last:S.length-1===B,iconRender:w,itemRender:v,itemWrapperRender:b,onClick:d&&D})};return Y.createElement(I,se({className:A,style:{...n,...s?.root}},C),Y.createElement(me.Provider,{value:H},S.map(P)))}const Te=p.createContext(null),tt=e=>{const{prefixCls:t}=e;return p.createElement("svg",{className:`${t}-panel-arrow`,viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"none"},p.createElement("title",null,"Arrow"),p.createElement("path",{d:"M 0 0 L 100 50 L 0 100"}))},ot=e=>{const{prefixCls:t,rootPrefixCls:n,children:r,percent:c}=e,s=`${t}-item-progress-icon`,l=`${s}-circle`,[,$]=z(n,"cmp-steps"),m=`calc(${$("progress-radius")} * 2 * ${Math.PI*c/100}) 9999`;return p.createElement(p.Fragment,null,p.createElement("svg",{className:`${s}-svg`,viewBox:"0 0 100 100",width:"100%",height:"100%",xmlns:"http://www.w3.org/2000/svg","aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":c},p.createElement("title",null,"Progress"),p.createElement("circle",{className:T(l,`${l}-rail`)}),p.createElement("circle",{className:T(l,`${l}-ptg`),strokeDasharray:m,transform:"rotate(-90 50 50)"})),r)},it=e=>{const{componentCls:t,antCls:n}=e,r=`${t}-item`,[c,s]=z(n,"cmp-steps");return{[`${t}-horizontal`]:{[`> ${r}`]:{flex:"1 1 auto",minWidth:e.iconSize,[`${r}-rail`]:{[c("horizontal-rail-margin")]:`calc(${s("icon-size-max")} / 2 + ${s("item-wrapper-padding-top")})`,position:"static",marginTop:s("horizontal-rail-margin"),width:"auto",borderBlockStartWidth:s("rail-size"),flex:1,minWidth:0,alignSelf:"flex-start",transform:"translateY(-50%)"}}}}},nt=e=>{const{componentCls:t,customIconFontSize:n,motionDurationSlow:r,iconSize:c,lineWidth:s,lineType:l,antCls:$}=e,m=`${t}-item`,[i,a]=z($,"cmp-steps");return{[t]:{[i("icon-size")]:c,[i("icon-border-width")]:s,[`${m}-icon`]:{width:a("icon-size"),height:a("icon-size"),margin:0,flex:"none",display:"flex",alignItems:"center",justifyContent:"center",fontSize:e.iconFontSize,fontFamily:e.fontFamily,lineHeight:a("icon-size"),textAlign:"center",borderRadius:a("icon-size"),border:`${a("icon-border-width")} ${l} transparent`,transition:["background-color","border","color","inset","transform"].map(u=>`${u} ${r}`).join(", "),zIndex:1},[`${m}-custom ${m}-icon`]:{background:"none",border:0,fontSize:n}}}},rt=e=>{const{componentCls:t,inlineDotSize:n,paddingXS:r,lineWidth:c,antCls:s,calc:l}=e,$=l(r).add(c).equal(),m=`${t}-item`,[i,a]=z(s,"cmp-steps");return{[`${t}-inline`]:{[i("items-offset")]:"0",[i("item-wrapper-padding-top")]:$,display:"inline-flex","&:before":{content:'""',flex:a("items-offset")},[m]:{[i("title-vertical-row-gap")]:r,[i("icon-size")]:n,[i("icon-size-active")]:n,[i("title-font-size")]:e.fontSizeSM,[i("title-line-height")]:e.lineHeightSM,[i("item-title-color")]:e.colorTextSecondary,[i("subtitle-font-size")]:e.fontSizeSM,[i("subtitle-line-height")]:e.lineHeightSM,[i("item-subtitle-color")]:e.colorTextQuaternary,[i("rail-size")]:e.lineWidth,[i("title-horizontal-rail-gap")]:"0px",flex:1,"&-wrapper":{paddingInline:e.paddingXXS,marginInline:e.calc(e.marginXXS).div(2).equal(),borderRadius:e.borderRadiusSM,cursor:"pointer",transition:`background-color ${e.motionDurationMid}`,"&:hover":{background:e.controlItemBgHover}},"&-icon":{[`${m}-icon-dot`]:{"&:after":{display:"none"}}},"&-title":{fontWeight:"normal",whiteSpace:"nowrap"},"&-content":{display:"none"}}}}};function lt(e){return(e||"--ant-not-exist").replace(/var\((.*)\)/,"$1")}const de=(e,t,n)=>{const{calc:r,componentCls:c,descriptionMaxWidth:s,antCls:l}=e,$=`${c}-item`,[,m]=z(l,"cmp-steps");return{[`@container style(${lt(s)})`]:[{[`${$}-icon`]:{marginInlineStart:r(s).sub(m("icon-size")).div(2).equal()},[`${$}-rail`]:{width:"auto",insetInlineStart:r(s).add(m("icon-size")).div(2).add(t).equal(),insetInlineEnd:r(s).sub(m("icon-size")).div(2).sub(t).mul(-1).equal()}},n]}},at=e=>{const{componentCls:t,descriptionMaxWidth:n,marginXS:r,fontHeightLG:c,margin:s,paddingSM:l,marginXXS:$,antCls:m,calc:i}=e,a=`${t}-item`,[u,g]=z(m,"cmp-steps");return{[t]:{[u("icon-size-max")]:`max(${g("icon-size")}, ${g("icon-size-active",g("icon-size"))})`,[`${a}-icon`]:{marginBlockStart:`calc((${g("heading-height")} - ${g("icon-size")}) / 2)`}},[`${t}-title-horizontal`]:{[u("title-horizontal-item-margin")]:s,[u("title-horizontal-rail-margin")]:s,[u("title-horizontal-title-height")]:c,[u("heading-height")]:`max(${g("icon-size")}, ${g("title-horizontal-title-height")})`,[`&${t}-horizontal, &${t}-horizontal-alternate`]:{[`${a}:not(:first-child)`]:{marginInlineStart:g("title-horizontal-item-margin")},[`${a}:last-child`]:{flex:"0 1 auto"},[`${a}-wrapper`]:{columnGap:e.marginXS}},[`&${t}-vertical`]:{[`${a}-wrapper`]:{columnGap:e.margin},[`${a}-empty-header`]:{[`${a}-header`]:{minHeight:"auto"},[`${a}-content`]:{marginTop:i(g("heading-height")).sub(e.fontHeight).div(2).equal()}}},[`${a}-section`]:{flex:1,minWidth:0},[`${a}-header`]:{minHeight:g("heading-height")},[`${a}-title`]:{flex:"0 1 auto"},[`${a}-content`]:{maxWidth:n},[`${a}-subtitle`]:{flex:"0 9999 auto"},[`&${t}-horizontal ${a}-rail`]:{[u("item-wrapper-padding-top")]:"0px",flex:"1 1 0%",marginInlineStart:g("title-horizontal-rail-margin")}},[`${t}-title-vertical`]:{[u("title-vertical-row-gap")]:l,[u("title-horizontal-rail-gap")]:$,[u("heading-height")]:g("icon-size-max"),[`> ${a}`]:{flex:"1 1 0%",[`${a}-wrapper`]:{flexDirection:"column",rowGap:g("title-vertical-row-gap"),alignItems:"center"},[`${a}-section`]:{alignSelf:"stretch"},[`${a}-header`]:{flexDirection:"column",alignItems:"center"},[`${a}-title, ${a}-subtitle, ${a}-content`]:{textAlign:"center",maxWidth:"100%"},[`${a}-subtitle`]:{margin:0},[`${a}-rail`]:{position:"absolute",top:0,width:`calc(100% - ${g("icon-size")} - ${g("title-horizontal-rail-gap")} * 2)`,insetInlineStart:`calc(50% + ${g("icon-size")} / 2 + ${g("title-horizontal-rail-gap")})`}},...de(e,r,{[`${a}:last-child`]:{flex:"none"},[`${a}-icon`]:{alignSelf:"flex-start"},[`${a}-section`]:{width:n}})}}},ct=e=>{const{componentCls:t,fontSizeIcon:n,navContentMaxWidth:r,navArrowColor:c,colorPrimary:s,motionDurationSlow:l,antCls:$,calc:m}=e,i=`${t}-item`,a=s,[u,g]=z($,"cmp-steps");return{[`${t}${t}-navigation`]:{[i.repeat(4)]:{display:"flex",justifyContent:"center",position:"relative",flex:1,marginInlineStart:0,[`${i}-wrapper`]:{paddingBlock:e.paddingSM},[`${i}-section`]:{maxWidth:r},[`${i}-rail`]:{display:"none"},"&:before":{position:"absolute",display:"block",backgroundColor:a,transition:`all ${l}`,transitionTimingFunction:"ease-out",content:'""'},"&:not(:last-child):after":{position:"absolute",display:"block",borderTop:`${X(e.lineWidth)} ${e.lineType} ${c}`,borderBottom:"none",borderInlineStart:"none",borderInlineEnd:`${X(e.lineWidth)} ${e.lineType} ${c}`,content:'""'},[`&${i}-active`]:{[u("item-content-active-color")]:g("item-content-color"),[u("item-icon-active-bg-color")]:g("item-icon-bg-color"),[u("item-icon-active-border-color")]:g("item-icon-border-color"),[u("item-icon-active-text-color")]:g("item-icon-text-color")}},[`&${t}-horizontal`]:{[i]:{"&:before":{bottom:0,insetInlineStart:"50%",width:0,height:e.lineWidthBold},[`&${i}-active:before`]:{insetInlineStart:0,width:"100%"},"&:not(:last-child):after":{top:"50%",insetInlineStart:m(n).div(2).mul(-1).add("100%").equal(),width:n,height:n,transform:"translateY(-50%) rotate(45deg)"}}},[`&${t}-vertical`]:{[i.repeat(4)]:{[`${i}-content`]:{padding:0},"&:before":{insetInlineEnd:0,top:"50%",width:e.lineWidthBold,height:0},[`&${i}-active::before`]:{top:0,height:"100%"},"&:not(:last-child):after":{left:{_skip_check_:!0,value:"50%"},top:"100%",width:m(n).div(3).mul(2).equal(),height:m(n).div(3).mul(2).equal(),transform:"translateY(-50%) translateX(-50%) rotate(135deg)"}}}}}},st=e=>{const{componentCls:t,lineWidthBold:n,borderRadius:r,borderRadiusSM:c,motionDurationMid:s,paddingXS:l,lineType:$,paddingSM:m,antCls:i,calc:a}=e,u=`${t}-item`,[g,d]=z(i,"cmp-steps"),x=`${X(n)} ${$} ${d("panel-border-color")}`;return{[`${t}${t}-panel`]:[{[`${u}-rail`]:{display:"none"},[`&${t}-horizontal`]:{alignItems:"stretch",[u]:{flex:1,margin:0}}},{"&":{[g("panel-padding")]:m,[g("item-border-radius")]:r,[u]:{[g("panel-bg-color")]:d("item-icon-bg-color"),[g("panel-border-color")]:d("item-icon-border-color"),[g("panel-active-bg-color")]:d("item-icon-active-bg-color"),[g("panel-active-border-color")]:d("item-icon-active-border-color"),[g("panel-title-height")]:`calc(${d("title-font-size")} * ${d("title-line-height")})`,[g("item-base-height")]:a(d("panel-padding")).mul(2).add(d("icon-size")).add(d("panel-title-height")).equal(),[g("item-base-width")]:`calc(${d("item-base-height")} * 0.7071)`,transition:`background-color ${s}`}},[`${u}-icon`]:{display:"none"},[`${u}-header`]:{minHeight:"auto"},[`${t}-panel-arrow`]:{position:"absolute",top:a(n).mul(-1).equal(),insetInlineStart:"100%",zIndex:1,height:a(n).mul(2).add("100%").equal(),width:d("item-base-width"),overflow:"visible",strokeLinecap:"round",path:{fill:d("panel-bg-color"),stroke:d("panel-border-color"),strokeWidth:n,vectorEffect:"non-scaling-stroke",transition:`fill ${s}`}},[`${u}:last-child ${t}-panel-arrow`]:{display:"none"},[u]:{padding:d("panel-padding"),background:d("panel-bg-color"),position:"relative",borderBlock:x,"&:not(:first-child)":{paddingInlineStart:`calc(${d("panel-padding")} + ${d("item-base-width")})`},"&:first-child":{borderInlineStart:x,borderStartStartRadius:d("item-border-radius"),borderEndStartRadius:d("item-border-radius")},"&:last-child":{borderInlineEnd:x,borderStartEndRadius:d("item-border-radius"),borderEndEndRadius:d("item-border-radius")},"&-active":{background:d("panel-active-bg-color"),borderColor:d("panel-active-border-color"),[`${t}-panel-arrow`]:{path:{fill:d("panel-active-bg-color"),stroke:d("panel-active-border-color")}},[`${u}-title, ${u}-subtitle, ${u}-content`]:{color:d("item-icon-active-text-color")}}}},{[`&${t}-small`]:{[g("panel-padding")]:l,[g("item-border-radius")]:c}},{[`&${t}-filled`]:{[u]:{"&:not(:first-child)":{clipPath:`polygon(${[`${X(n)} 0`,`calc(100% + ${d("item-base-width")}) 0`,`calc(100% + ${d("item-base-width")}) 100%`,`${X(n)} 100%`,`calc(${d("item-base-width")} + ${X(n)}) 50%`].join(",")})`}}}},{[`&${t}-outlined`]:{[`${t}-panel-arrow`]:{top:a(n).div(2).mul(-1).equal(),height:a(n).add("100%").equal()}}}]}},mt=e=>{const{calc:t,antCls:n,componentCls:r,lineWidthBold:c,motionDurationSlow:s}=e,l=`${r}-item`,[$,m]=z(n,"cmp-steps"),i=t(c).add(c).equal();return{[`${r}${r}-with-progress`]:{[$("item-wrapper-padding-top")]:i,[`${l}${l}-process`]:{[`${l}-icon`]:{position:"relative"}},[`${l}-progress-icon`]:{"&-svg":{[$("svg-size")]:t(i).mul(2).add(m("icon-size")).equal(),[$("icon-size-ptg-unitless")]:`calc(100 / tan(atan2(${m("svg-size")}, 1px)))`,fontSize:m("svg-size"),lineHeight:m("icon-size-ptg-unitless"),position:"absolute",inset:t(i).mul(-1).equal(),width:"auto",height:"auto"},"&-circle":{lineHeight:m("icon-size-ptg-unitless"),strokeWidth:t(m("icon-size-ptg-unitless")).mul(c).equal(),[$("progress-radius")]:t(m("svg-size")).sub(c).mul(m("icon-size-ptg-unitless")).div(2).equal(),r:m("progress-radius"),fill:"none",cx:50,cy:50,transition:`all ${s} ease-in-out`,"&-rail":{stroke:e.colorSplit},"&-ptg":{stroke:e.colorPrimary}}}}}},dt=e=>{const{componentCls:t,iconSize:n,dotSize:r,dotCurrentSize:c,marginXXS:s,lineWidthBold:l,fontSizeSM:$,antCls:m}=e,i=`${t}-item`,[a,u]=z(m,"cmp-steps");return{[`${t}${t}-dot`]:{[a("icon-size-active")]:c,[a("icon-size")]:r,[a("dot-icon-size")]:r,[a("dot-icon-border-width")]:l,[a("rail-size")]:l,[a("icon-border-width")]:l,[`${i}-custom ${i}-icon`]:{fontSize:$},[`${i}-icon`]:{position:"relative","&:after":{content:'""',width:n,height:n,display:"block",position:"absolute",top:"50%",left:{_skip_check_:!0,value:"50%"},transform:"translate(-50%, -50%)"}},[`${i}-active ${i}-icon`]:{[a("icon-size")]:u("icon-size-active")},[`&${t}-horizontal`]:{[`&, &${t}-small`]:de(e,s)}}}},pt=e=>{const{componentCls:t,lineWidthBold:n,antCls:r}=e,c=`${t}-item`,[,s]=z(r,"cmp-steps");return{[`${t}${t}-rtl`]:{direction:"rtl",[`&${t}-navigation${t}-horizontal`]:{[`${c}:after`]:{transform:"translateY(-50%) rotate(-45deg)"}},[`&${t}-panel`]:{[`${t}-panel-arrow`]:{transform:"scaleX(-1)"},[`&${t}-filled`]:{[c]:{"&:not(:first-child)":{clipPath:`polygon(${[`calc(0px - ${s("item-base-width")}) 0px`,`calc(100% - ${X(n)}) 0px`,`calc(100% - ${s("item-base-width")} - ${X(n)}) 50%`,`calc(100% - ${X(n)}) 100%`,`calc(0px - ${s("item-base-width")}) 100%`].join(",")})`}}}}}}},gt=e=>{const{componentCls:t,iconSizeSM:n,fontSize:r,lineHeight:c,marginXS:s,fontHeight:l,marginSM:$,paddingXS:m,antCls:i}=e,[a]=z(i,"cmp-steps");return{[`${t}${t}-small`]:{[a("icon-size")]:n,[a("title-horizontal-item-margin")]:$,[a("title-vertical-row-gap")]:m,[a("title-font-size")]:r,[a("title-line-height")]:c,[a("title-horizontal-rail-margin")]:s,[a("title-horizontal-title-height")]:l,[`&${t}-horizontal${t}-title-vertical`]:de(e,s)}}},te="wait",oe="process",ie="finish",ne="error",$t=e=>{const{componentCls:t,colorTextDisabled:n,colorTextLightSolid:r,colorPrimary:c,colorTextLabel:s,colorError:l,colorErrorHover:$,colorErrorBgFilledHover:m,colorFillTertiary:i,colorErrorBg:a,colorPrimaryBgHover:u,colorPrimaryBg:g,colorText:d,colorTextDescription:x,colorBgContainer:w,colorPrimaryHover:v,lineType:b,antCls:C}=e,h=`${t}-item`,[o,f]=z(C,"cmp-steps");return{[t]:[{[h]:{[o("item-solid-line-color")]:"#000",[o("item-title-color")]:"#000",[o("item-content-color")]:"#000",[o("item-subtitle-color")]:f("item-content-color"),[o("item-icon-custom-color")]:"#000",[o("item-icon-bg-color")]:"#000",[o("item-icon-border-color")]:"#000",[o("item-icon-text-color")]:"#fff",[o("item-icon-dot-color")]:"#000",[o("item-icon-dot-bg-color")]:f("item-icon-dot-color"),[o("item-icon-dot-border-color")]:f("item-icon-dot-color"),[o("item-text-hover-color")]:"#000",[o("item-icon-bg-hover-color")]:f("item-icon-bg-color"),[o("item-icon-border-hover-color")]:f("item-icon-border-color"),[o("item-icon-text-hover-color")]:f("item-icon-text-color"),[o("item-content-active-color")]:f("item-content-color"),[o("item-icon-active-bg-color")]:f("item-icon-bg-color"),[o("item-icon-active-border-color")]:f("item-icon-border-color"),[o("item-icon-active-text-color")]:f("item-icon-text-color"),[o("item-process-rail-line-style")]:b},[`${h}-rail`]:{borderColor:f("item-solid-line-color")},[`${h}-custom ${h}-icon`]:{color:f("item-icon-custom-color")},[`${h}-title`]:{color:f("item-title-color")},[`${h}-subtitle`]:{color:f("item-subtitle-color")},[`${h}-content`]:{color:f("item-content-color")},[`${h}-active ${h}-icon`]:{},[`${h}-active ${h}-content`]:{color:f("item-content-active-color")},[`${h}[role='button']:not(${h}-active):hover`]:{[`${h}-title, ${h}-content`]:{color:f("item-text-hover-color")}},[`&:not(${t}-dot)`]:{[`${h}:not(${h}-custom)`]:{[`${h}-icon`]:{background:f("item-icon-bg-color"),borderColor:f("item-icon-border-color"),color:f("item-icon-text-color")},[`&[role='button']:not(${h}-active):hover`]:{[`${h}-icon`]:{background:f("item-icon-bg-hover-color"),borderColor:f("item-icon-border-hover-color"),color:f("item-icon-text-hover-color")}},[`&${h}-active`]:{[`${h}-icon`]:{background:f("item-icon-active-bg-color"),borderColor:f("item-icon-active-border-color"),color:f("item-icon-active-text-color")}}}},[`&${t}-dot`]:{[`${h}-icon`]:{background:f("item-icon-dot-bg-color"),borderColor:f("item-icon-dot-border-color"),color:f("item-icon-dot-color"),[`&${h}-icon-dot-custom`]:{background:"transparent",border:"none"}}}},{[`${h}-${te}`]:{[o("item-icon-custom-color")]:n,[o("item-title-color")]:x,[o("item-content-color")]:x,[o("item-content-active-color")]:d,[o("item-text-hover-color")]:v},[`${h}-rail-${te}`]:{[o("item-solid-line-color")]:n},[`${h}-${oe}`]:{[o("item-icon-custom-color")]:c,[o("item-title-color")]:d,[o("item-content-color")]:x,[o("item-content-active-color")]:d,[o("item-text-hover-color")]:v},[`${h}-rail-${oe}`]:{[o("item-solid-line-color")]:c,[o("rail-line-style")]:f("item-process-rail-line-style")},[`${h}-${ie}`]:{[o("item-icon-custom-color")]:c,[o("item-title-color")]:d,[o("item-content-color")]:x,[o("item-content-active-color")]:d,[o("item-text-hover-color")]:v},[`${h}-rail-${ie}`]:{[o("item-solid-line-color")]:c},[`${h}-${ne}`]:{[o("item-icon-custom-color")]:l,[o("item-title-color")]:l,[o("item-content-color")]:l,[o("item-content-active-color")]:l,[o("item-text-hover-color")]:$},[`${h}-rail-${ne}`]:{[o("item-solid-line-color")]:l}},{[`&${t}-filled`]:{[h]:{[o("item-icon-dot-border-color")]:"transparent"},[`${h}-${te}`]:{[o("item-icon-bg-color")]:i,[o("item-icon-border-color")]:"transparent",[o("item-icon-text-color")]:s,[o("item-icon-dot-bg-color")]:n,[o("item-icon-bg-hover-color")]:u,[o("item-icon-border-hover-color")]:"transparent",[o("item-icon-text-hover-color")]:c,[o("item-icon-active-bg-color")]:c,[o("item-icon-active-border-color")]:"transparent",[o("item-icon-active-text-color")]:r},[`${h}-${oe}, ${h}-${ie}`]:{[o("item-icon-bg-color")]:g,[o("item-icon-border-color")]:"transparent",[o("item-icon-text-color")]:c,[o("item-icon-dot-bg-color")]:c,[o("item-icon-bg-hover-color")]:u,[o("item-icon-border-hover-color")]:"transparent",[o("item-icon-text-hover-color")]:c,[o("item-icon-active-bg-color")]:c,[o("item-icon-active-border-color")]:"transparent",[o("item-icon-active-text-color")]:r},[`${h}-${ne}`]:{[o("item-icon-bg-color")]:a,[o("item-icon-border-color")]:"transparent",[o("item-icon-text-color")]:l,[o("item-icon-dot-bg-color")]:l,[o("item-icon-bg-hover-color")]:m,[o("item-icon-border-hover-color")]:"transparent",[o("item-icon-text-hover-color")]:l,[o("item-icon-active-bg-color")]:l,[o("item-icon-active-border-color")]:"transparent",[o("item-icon-active-text-color")]:r}}},{[`&${t}-outlined`]:{[h]:{[o("item-icon-dot-bg-color")]:"transparent"},[`${h}-${te}`]:{[o("item-icon-bg-color")]:w,[o("item-icon-border-color")]:n,[o("item-icon-text-color")]:n,[o("item-icon-dot-color")]:n,[o("item-icon-bg-hover-color")]:"transparent",[o("item-icon-border-hover-color")]:v,[o("item-icon-text-hover-color")]:v,[o("item-icon-active-bg-color")]:i},[`${h}-${oe}, ${h}-${ie}`]:{[o("item-icon-bg-color")]:w,[o("item-icon-border-color")]:c,[o("item-icon-text-color")]:c,[o("item-icon-dot-color")]:c,[o("item-icon-bg-hover-color")]:"transparent",[o("item-icon-border-hover-color")]:v,[o("item-icon-text-hover-color")]:v,[o("item-icon-active-bg-color")]:g},[`${h}-${ne}`]:{[o("item-icon-bg-color")]:w,[o("item-icon-border-color")]:l,[o("item-icon-text-color")]:l,[o("item-icon-dot-color")]:l,[o("item-icon-bg-hover-color")]:"transparent",[o("item-icon-border-hover-color")]:$,[o("item-icon-text-hover-color")]:$,[o("item-icon-active-bg-color")]:a}}}]}},ut=e=>{const{componentCls:t,marginXXS:n,paddingSM:r,controlHeight:c,antCls:s,calc:l}=e,$=`${t}-item`,[m,i]=z(s,"cmp-steps");return{[`${t}-vertical`]:{[m("vertical-rail-margin")]:l(n).mul(1.5).equal(),flexDirection:"column",alignItems:"stretch",[`> ${$}`]:{minHeight:l(c).mul(1.5).equal(),paddingBottom:r,"&:last-child":{paddingBottom:0},[`${$}-icon`]:{marginInlineStart:`calc((${i("icon-size-max")} - ${i("icon-size")}) / 2)`},[`${$}-rail`]:{[m("rail-offset")]:l(i("heading-height")).sub(i("icon-size")).div(2).equal(),borderInlineStartWidth:i("rail-size"),position:"absolute",top:l(i("icon-size")).add(i("item-wrapper-padding-top")).add(i("rail-offset")).add(i("vertical-rail-margin")).equal(),insetInlineStart:l(i("icon-size-max")).div(2).equal(),bottom:l(i("vertical-rail-margin")).sub(i("rail-offset")).equal(),marginInlineStart:`calc(${i("rail-size")} / -2)`}}}}},ht=e=>{const{componentCls:t,antCls:n}=e,r=`${t}-item`,[c,s]=z(n,"cmp-steps");return{[t]:{[c("title-font-size")]:e.fontSizeLG,[c("title-line-height")]:e.lineHeightLG,[c("subtitle-font-size")]:e.fontSize,[c("subtitle-line-height")]:e.lineHeight,[c("item-wrapper-padding-top")]:"0px",[c("rail-size")]:e.lineWidth,[c("rail-line-style")]:e.lineType,...we(e),display:"flex",flexWrap:"nowrap",alignItems:"flex-start",[r]:{flex:"none",position:"relative"},[`${r}-wrapper`]:{display:"flex",flexWrap:"nowrap",paddingTop:s("item-wrapper-padding-top")},[`${r}-header`]:{display:"flex",flexWrap:"nowrap",alignItems:"center"},[`${r}-title`]:{color:e.colorText,fontSize:s("title-font-size"),lineHeight:s("title-line-height"),wordBreak:"break-word"},[`${r}-subtitle`]:{color:e.colorTextDescription,fontWeight:"normal",fontSize:s("subtitle-font-size"),lineHeight:s("subtitle-line-height"),marginInlineStart:e.marginXS,wordBreak:"break-word"},[`${r}-content`]:{color:e.colorTextDescription,fontSize:e.fontSize,lineHeight:e.lineHeight,wordBreak:"break-word"},[`${r}-rail`]:{borderStyle:s("rail-line-style"),borderWidth:0},[`${r}-title, ${r}-subtitle, ${r}-content, ${r}-rail`]:{transition:`all ${e.motionDurationSlow}`},[`&${t}-ellipsis`]:{[`${r}-title, ${r}-subtitle, ${r}-content`]:Le},[`${r}[role='button']:not(${r}-active):hover`]:{cursor:"pointer"}}}},ft=e=>({titleLineHeight:e.controlHeight,customIconSize:e.controlHeight,customIconTop:0,customIconFontSize:e.controlHeightSM,iconSize:e.controlHeight,iconTop:-.5,iconFontSize:e.fontSize,iconSizeSM:e.fontSizeHeading3,dotSize:e.controlHeight/4,dotCurrentSize:e.controlHeightLG/4,navArrowColor:e.colorTextDisabled,navContentMaxWidth:"unset",descriptionMaxWidth:void 0,waitIconColor:e.wireframe?e.colorTextDisabled:e.colorTextLabel,waitIconBgColor:e.wireframe?e.colorBgContainer:e.colorFillContent,waitIconBorderColor:e.wireframe?e.colorTextDisabled:"transparent",finishIconBgColor:e.wireframe?e.colorBgContainer:e.controlItemBgActive,finishIconBorderColor:e.wireframe?e.colorPrimary:e.controlItemBgActive}),bt=ze("Steps",e=>{const t=ye(e,{inlineDotSize:6});return[ht(t),nt(t),ut(t),it(t),at(t),gt(t),dt(t),$t(t),ct(t),st(t),rt(t),mt(t),pt(t)]},ft),vt={itemIcon:Fe},St=e=>{const{size:t,className:n,rootClassName:r,style:c,variant:s="filled",type:l,classNames:$,styles:m,direction:i,orientation:a,responsive:u=!0,progressDot:g,labelPlacement:d,titlePlacement:x,ellipsis:w,offset:v=0,items:b,percent:C,current:h=0,onChange:o,iconRender:f,...A}=e,S=p.useContext(Te),M=Ie("steps"),{getPrefixCls:D,direction:I,className:y,style:H}=M;let P,N,B={};S?B={root:S.rootComponent,item:S.itemComponent}:{classNames:P,styles:N}=M;const R=D(),E=D("steps",e.prefixCls),q=`${E}-item-icon`,[_,O]=bt(E),[L]=z(R,"cmp-steps"),U=Oe(t),K=p.useMemo(()=>(b||[]).filter(Boolean),[b]),{xs:F}=je(u),W=p.useMemo(()=>l&&l!=="default"?l:g?"dot":l,[g,l]),pe=W==="inline",k=W==="dot"||W==="inline",ge=p.useMemo(()=>W==="dot"&&typeof g=="function"?g:void 0,[W,g]),J=p.useMemo(()=>{const j=a||i;return W==="panel"?"horizontal":u&&F||j==="vertical"?"vertical":"horizontal"},[a,i,W,u,F]),$e=p.useMemo(()=>k||J==="vertical"?J==="vertical"?"horizontal":"vertical":l==="navigation"?"horizontal":x||d||"horizontal",[k,d,J,x,l]),ee=pe?void 0:C,Pe={...e,variant:s,size:U,type:W,orientation:J,titlePlacement:$e,current:h,percent:ee,responsive:u,offset:v},[We,He]=Ne([vt,P,$],[N,m],{props:Pe}),Be=(j,V)=>{const{item:G,index:ue,active:Xe,components:{Icon:he}}=V,{status:fe,icon:be}=G;let Q=null;if(k||be)Q=be;else switch(fe){case"finish":Q=p.createElement(Ue,{className:`${q}-finish`});break;case"error":Q=p.createElement(Ye,{className:`${q}-error`});break;default:{let re=p.createElement("span",{className:`${q}-number`},V.index+1);fe==="process"&&ee!==void 0&&(re=p.createElement(ot,{prefixCls:E,rootPrefixCls:R,percent:ee},re)),Q=re}}let Z=p.createElement(he,null,Q);return f?Z=f(Z,{index:ue,active:Xe,item:G,components:{Icon:he}}):typeof ge=="function"&&(Z=ge(Z,{index:ue,...G})),Z},Me=(j,V)=>{let G=j;return pe&&V.item.content&&(G=p.createElement(Ve,{destroyOnHidden:!0,title:V.item.content},j)),p.createElement(Ge,{component:"Steps",disabled:V.item.disabled||!o,colorSource:s==="filled"?"color":null},G)},Ae=W==="panel"?j=>p.createElement(p.Fragment,null,j,p.createElement(tt,{prefixCls:E})):void 0,De={[L("items-offset")]:`${v}`,...H,...c},qe=T(y,`${E}-${s}`,{[`${E}-${W}`]:W!=="dot"?W:!1,[`${E}-rtl`]:I==="rtl",[`${E}-dot`]:k,[`${E}-ellipsis`]:w,[`${E}-with-progress`]:ee!==void 0,[`${E}-small`]:U==="small"},n,r,_,O);return p.createElement(et,{...A,prefixCls:E,className:qe,style:De,classNames:We,styles:He,orientation:J,titlePlacement:$e,components:B,current:h,items:K,onChange:o,iconRender:Be,itemRender:Me,itemWrapperRender:Ae})},xt=e=>{const{componentCls:t,fontHeight:n,antCls:r,paddingXS:c}=e,[s,l]=z(r,"cmp-steps"),[$,m]=z(r,"timeline"),i=`${t}-item`;return{[`${t}-horizontal`]:{[s("title-vertical-row-gap")]:c,[$("content-height")]:X(n),alignItems:"stretch",[`&${t}-layout-alternate`]:{[i]:{[`${i}-wrapper`]:{[$("alternate-content-offset")]:`calc(${m("content-height")} + ${l("title-vertical-row-gap")} * 2 + ${l("icon-size-max")})`,height:`calc(${m("content-height")} * 2 + ${l("title-vertical-row-gap")} * 2 + ${l("icon-size-max")})`},[`${i}-icon`]:{position:"absolute"},[`${i}-icon, ${i}-rail`]:{position:"absolute",top:"50%",transform:"translateY(-50%)",margin:0},[`${i}-title, ${i}-subtitle, ${i}-content`]:{whiteSpace:"nowrap",maxWidth:"unset"},[`${i}-title`]:{position:"absolute",left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%)"},[`${i}-content`]:{position:"absolute",left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%)"},"&-placement-start":{[`${i}-title`]:{bottom:m("alternate-content-offset")},[`${i}-content`]:{top:m("alternate-content-offset")}},"&-placement-end":{[`${i}-title`]:{top:m("alternate-content-offset")},[`${i}-content`]:{bottom:m("alternate-content-offset")}}}},[`&:not(${t}-layout-alternate)`]:{[`${i}-placement-end`]:{display:"flex",alignItems:"flex-end",[`${i}-wrapper`]:{flex:"auto",flexDirection:"column-reverse"},[`${i}-rail`]:{top:"auto",bottom:l("horizontal-rail-margin"),transform:"translateY(50%)"}}}}}},Ct=e=>{const{componentCls:t,tailColor:n,fontHeight:r,dotSize:c,dotBg:s,dotBorderWidth:l,fontSize:$,lineHeight:m,colorText:i,tailWidth:a,colorPrimary:u,colorError:g,colorSuccess:d,colorTextDisabled:x,antCls:w}=e,v=`${t}-item`,[b,C]=z(w,"cmp-steps");return{[t]:[{...we(e),[v]:{[b("title-horizontal-title-height")]:r,[b("vertical-rail-margin")]:"0px",[b("title-horizontal-rail-gap")]:"0px",[b("icon-dot-size-origin")]:C("icon-size-active"),[b("icon-dot-size-custom")]:c,[b("item-icon-dot-bg-color-origin")]:C("item-icon-dot-bg-color"),[b("item-icon-dot-bg-color-custom")]:s,[b("icon-size")]:C("icon-dot-size-custom",C("icon-dot-size-origin")),[`${v}-icon`]:{[b("dot-icon-border-width")]:l,[b("dot-icon-size")]:C("icon-size"),[b("item-icon-dot-bg-color")]:C("item-icon-dot-bg-color-custom",C("item-icon-dot-bg-color-origin"))},[`${v}-title`]:{fontSize:$,lineHeight:m},[`${v}-content`]:{color:i},[`${v}-rail`]:{[b("item-solid-line-color")]:n,[b("rail-size")]:a}}},{[v]:{[b("item-process-rail-line-style")]:"dotted"},[`${v}${v}${v}-color`]:{"&-blue":{[b("item-icon-dot-color")]:u},"&-red":{[b("item-icon-dot-color")]:g},"&-green":{[b("item-icon-dot-color")]:d},"&-gray":{[b("item-icon-dot-color")]:x}}}]}},zt=e=>{const{calc:t,componentCls:n,itemPaddingBottom:r,margin:c,antCls:s}=e,l=`${n}-item`,[,$]=z(s,"cmp-steps"),[m,i]=z(s,"timeline");return{[`${n}:not(${n}-horizontal)`]:{[m("head-span")]:"12",[m("head-span-ptg")]:`calc(${i("head-span")} / 24 * 100%)`,[`&${n}-layout-alternate`]:{[l]:{[m("alternate-gap")]:t(c).mul(2).add($("dot-icon-size")).equal(),minHeight:"auto",paddingBottom:r,[`${l}-icon, ${l}-rail`]:{position:"absolute",insetInlineStart:i("head-span-ptg")},[`${l}-icon`]:{marginInlineStart:`calc(${$("icon-size")} / -2)`},[`${l}-section`]:{display:"flex",flexWrap:"nowrap",gap:i("alternate-gap")},[`${l}-header`]:{textAlign:"end",flexDirection:"column",alignItems:"stretch",flex:`1 1 calc(${i("head-span-ptg")} - ${i("alternate-gap")} / 2)`},[`${l}-content`]:{textAlign:"start",flex:`1 1 calc(100% - ${i("head-span-ptg")} - ${i("alternate-gap")} / 2)`},"&-placement-end":{[`${l}-header`]:{textAlign:"start",order:1},[`${l}-content`]:{textAlign:"end"},[`${l}-icon, ${l}-rail`]:{insetInlineStart:`calc(100% - ${i("head-span-ptg")})`}}}},[`&:not(${n}-layout-alternate)`]:{[`${l}-placement-end`]:{textAlign:"end",[`${l}-icon`]:{order:1},[`${l}-rail`]:{insetInlineStart:"auto",insetInlineEnd:`calc(${$("icon-size")} / 2)`,marginInlineEnd:`calc(${$("rail-size")} / -2)`}}}}}},yt=e=>({tailColor:e.colorSplit,tailWidth:e.lineWidthBold,dotBorderWidth:e.lineWidthBold,dotBg:void 0,dotSize:void 0,itemPaddingBottom:e.padding*1.25}),wt=ze("Timeline",e=>{const t=ye(e,{itemHeadSize:10,customHeadPaddingVertical:e.paddingXXS,paddingInlineEnd:2});return[Ct(t),zt(t),xt(t)]},yt),It=(e,t,n,r,c,s,l)=>{const $=`${t}-item`,[m]=z(e,"cmp-steps"),i=p.useMemo(()=>Array.isArray(r)?r:Ke(c).map(a=>({...a.props})),[r,c]);return p.useMemo(()=>{const a=i.map((u,g)=>{const{label:d,children:x,title:w,content:v,color:b,className:C,style:h,icon:o,dot:f,placement:A,position:S,loading:M,...D}=u;let I=h,y=C;b&&(["blue","red","green","gray"].includes(b)?y=T(C,`${$}-color-${b}`):I={[m("item-icon-dot-color")]:b,...h});const H=A??S??(n==="alternate"?g%2===0?"start":"end":n);y=T(y,`${$}-placement-${H}`);let P=o??f;return!P&&M&&(P=p.createElement(Se,null)),{...D,title:w??d,content:v??x,style:I,className:y,icon:P,status:M?"process":"finish"}});return s&&a.push({icon:l??p.createElement(Se,null),content:s,status:"process"}),a},[i,s,n,$,m,l])},Nt={rootComponent:"ol",itemComponent:"li"},Et=e=>{const{getPrefixCls:t,direction:n,className:r,style:c,classNames:s,styles:l}=Ie("timeline"),{prefixCls:$,className:m,style:i,classNames:a,styles:u,variant:g="outlined",mode:d,orientation:x="vertical",titleSpan:w,items:v,children:b,reverse:C,pending:h,pendingDot:o,...f}=e,A=t(),S=t("timeline",$),[M,D]=wt(S),[I]=z(A,"timeline"),y=p.useMemo(()=>({item:`${S}-item`,itemTitle:`${S}-item-title`,itemIcon:`${S}-item-icon`,itemContent:`${S}-item-content`,itemRail:`${S}-item-rail`,itemWrapper:`${S}-item-wrapper`,itemSection:`${S}-item-section`,itemHeader:`${S}-item-header`}),[S]),H=p.useMemo(()=>d==="left"?"start":d==="right"?"end":["alternate","start","end"].includes(d)?d:"start",[d]),P=It(A,S,H,v,b,h,o),N=p.useMemo(()=>C?Je(P).reverse():P,[C,P]),B={...e,variant:g,mode:H,orientation:x,items:N},[R,E]=Ne([y,s,a],[l,u],{props:B}),q=p.useMemo(()=>({railFollowPrevStatus:C}),[C]),_=p.useMemo(()=>H==="alternate"||x==="vertical"&&N.some(L=>L.title),[N,H,x]),O={...c,...i};return Qe(w)&&H!=="alternate"&&(typeof w=="number"&&!Number.isNaN(w)?O[I("head-span")]=w:O[I("head-span-ptg")]=w),p.createElement(Te.Provider,{value:Nt},p.createElement(Ee.Provider,{value:q},p.createElement(St,{...f,className:T(S,r,m,M,D,{[`${S}-${x}`]:x==="horizontal",[`${S}-layout-alternate`]:_,[`${S}-rtl`]:n==="rtl"}),style:O,classNames:R,styles:E,variant:g,orientation:x,type:"dot",items:N,current:N.length-1})))};Et.Item=()=>{};export{St as S,Et as T}; diff --git a/public/assets/analysis-BO3IE-J4.js b/public/assets/analysis-BO3IE-J4.js new file mode 100644 index 0000000..2bd80c8 --- /dev/null +++ b/public/assets/analysis-BO3IE-J4.js @@ -0,0 +1,40 @@ +import{g as fk,R as vk,r as hk,u as ck,j as ut,a as dk,C as on,b as J_,c as Q_,d as pk,e as gk,S as yk,A as mk,t as _k}from"./index-B-sDl1ER.js";import{_ as WA,a as t1,b as e1,c as Sk,d as Mc}from"./tslib.es6-BaFViOhq.js";import{C as sn}from"./index-CO5DzGxy.js";import{R as xk}from"./index-CeRfFUxJ.js";import{F as bk}from"./Table-B11dzOaz.js";import{T as wk}from"./index-C9m5qSM4.js";import{L as Dc}from"./index-S1dQ7QE3.js";import"./index-DmtjhyJb.js";var ng=function(r,t){return ng=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])},ng(r,t)};function N(r,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");ng(r,t);function e(){this.constructor=r}r.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}var Tk=(function(){function r(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return r})(),Ck=(function(){function r(){this.browser=new Tk,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow=typeof window<"u"}return r})(),Ct=new Ck;typeof wx=="object"&&typeof wx.getSystemInfoSync=="function"?(Ct.wxa=!0,Ct.touchEventsSupported=!0):typeof document>"u"&&typeof self<"u"?Ct.worker=!0:!Ct.hasGlobalWindow||"Deno"in window||typeof navigator<"u"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Node.js")>-1?(Ct.node=!0,Ct.svgSupported=!0):Ak(navigator.userAgent,Ct);function Ak(r,t){var e=t.browser,a=r.match(/Firefox\/([\d.]+)/),n=r.match(/MSIE\s([\d.]+)/)||r.match(/Trident\/.+?rv:(([\d.]+))/),i=r.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(r);a&&(e.firefox=!0,e.version=a[1]),n&&(e.ie=!0,e.version=n[1]),i&&(e.edge=!0,e.version=i[1],e.newEdge=+i[1].split(".")[0]>18),o&&(e.weChat=!0),t.svgSupported=typeof SVGRect<"u",t.touchEventsSupported="ontouchstart"in window&&!e.ie&&!e.edge,t.pointerEventsSupported="onpointerdown"in window&&(e.edge||e.ie&&+e.version>=11);var s=t.domSupported=typeof document<"u";if(s){var l=document.documentElement.style;t.transform3dSupported=(e.ie&&"transition"in l||e.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in l)&&!("OTransition"in l),t.transformSupported=t.transform3dSupported||e.ie&&+e.version>=9}}var pm=12,UA="sans-serif",$a=pm+"px "+UA,Mk=20,Dk=100,Lk="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function Ik(r){var t={};if(typeof JSON>"u")return t;for(var e=0;e=0)s=o*e.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",a[l]+":0",n[u]+":0",a[1-l]+":auto",n[1-u]+":auto",""].join("!important;"),r.appendChild(o),e.push(o)}return t.clearMarkers=function(){A(e,function(f){f.parentNode&&f.parentNode.removeChild(f)})},e}function tE(r,t,e){for(var a=e?"invTrans":"trans",n=t[a],i=t.srcCoords,o=[],s=[],l=!0,u=0;u<4;u++){var f=r[u].getBoundingClientRect(),v=2*u,h=f.left,c=f.top;o.push(h,c),l=l&&i&&h===i[v]&&c===i[v+1],s.push(r[u].offsetLeft,r[u].offsetTop)}return l&&n?n:(t.srcCoords=o,t[a]=e?a1(s,o):a1(o,s))}function tM(r){return r.nodeName.toUpperCase()==="CANVAS"}var eE=/([&<>"'])/g,rE={"&":"&","<":"<",">":">",'"':""","'":"'"};function ze(r){return r==null?"":(r+"").replace(eE,function(t,e){return rE[e]})}var aE=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ic=[],nE=Ct.browser.firefox&&+Ct.browser.version.split(".")[0]<39;function ug(r,t,e,a){return e=e||{},a?n1(r,t,e):nE&&t.layerX!=null&&t.layerX!==t.offsetX?(e.zrX=t.layerX,e.zrY=t.layerY):t.offsetX!=null?(e.zrX=t.offsetX,e.zrY=t.offsetY):n1(r,t,e),e}function n1(r,t,e){if(Ct.domSupported&&r.getBoundingClientRect){var a=t.clientX,n=t.clientY;if(tM(r)){var i=r.getBoundingClientRect();e.zrX=a-i.left,e.zrY=n-i.top;return}else if(lg(Ic,r,a,n)){e.zrX=Ic[0],e.zrY=Ic[1];return}}e.zrX=e.zrY=0}function bm(r){return r||window.event}function mr(r,t,e){if(t=bm(t),t.zrX!=null)return t;var a=t.type,n=a&&a.indexOf("touch")>=0;if(n){var o=a!=="touchend"?t.targetTouches[0]:t.changedTouches[0];o&&ug(r,o,t,e)}else{ug(r,t,t,e);var i=iE(t);t.zrDelta=i?i/120:-(t.detail||0)/3}var s=t.button;return t.which==null&&s!==void 0&&aE.test(t.type)&&(t.which=s&1?1:s&2?3:s&4?2:0),t}function iE(r){var t=r.wheelDelta;if(t)return t;var e=r.deltaX,a=r.deltaY;if(e==null||a==null)return t;var n=Math.abs(a!==0?a:e),i=a>0?-1:a<0?1:e>0?-1:1;return 3*n*i}function fg(r,t,e,a){r.addEventListener(t,e,a)}function oE(r,t,e,a){r.removeEventListener(t,e,a)}var qa=function(r){r.preventDefault(),r.stopPropagation(),r.cancelBubble=!0};function i1(r){return r.which===2||r.which===3}var sE=(function(){function r(){this._track=[]}return r.prototype.recognize=function(t,e,a){return this._doTrack(t,e,a),this._recognize(t)},r.prototype.clear=function(){return this._track.length=0,this},r.prototype._doTrack=function(t,e,a){var n=t.touches;if(n){for(var i={points:[],touches:[],target:e,event:t},o=0,s=n.length;o1&&a&&a.length>1){var i=o1(a)/o1(n);!isFinite(i)&&(i=1),t.pinchScale=i;var o=lE(a);return t.pinchX=o[0],t.pinchY=o[1],{type:"pinch",target:r[0].target,event:t}}}}};function me(){return[1,0,0,1,0,0]}function Iu(r){return r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r}function Pu(r,t){return r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=t[3],r[4]=t[4],r[5]=t[5],r}function Fr(r,t,e){var a=t[0]*e[0]+t[2]*e[1],n=t[1]*e[0]+t[3]*e[1],i=t[0]*e[2]+t[2]*e[3],o=t[1]*e[2]+t[3]*e[3],s=t[0]*e[4]+t[2]*e[5]+t[4],l=t[1]*e[4]+t[3]*e[5]+t[5];return r[0]=a,r[1]=n,r[2]=i,r[3]=o,r[4]=s,r[5]=l,r}function Yr(r,t,e){return r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=t[3],r[4]=t[4]+e[0],r[5]=t[5]+e[1],r}function rn(r,t,e,a){a===void 0&&(a=[0,0]);var n=t[0],i=t[2],o=t[4],s=t[1],l=t[3],u=t[5],f=Math.sin(e),v=Math.cos(e);return r[0]=n*v+s*f,r[1]=-n*f+s*v,r[2]=i*v+l*f,r[3]=-i*f+v*l,r[4]=v*(o-a[0])+f*(u-a[1])+a[0],r[5]=v*(u-a[1])-f*(o-a[0])+a[1],r}function Zh(r,t,e){var a=e[0],n=e[1];return r[0]=t[0]*a,r[1]=t[1]*n,r[2]=t[2]*a,r[3]=t[3]*n,r[4]=t[4]*a,r[5]=t[5]*n,r}function Dr(r,t){var e=t[0],a=t[2],n=t[4],i=t[1],o=t[3],s=t[5],l=e*o-i*a;return l?(l=1/l,r[0]=o*l,r[1]=-i*l,r[2]=-a*l,r[3]=e*l,r[4]=(a*s-o*n)*l,r[5]=(i*n-e*s)*l,r):null}function eM(r){var t=me();return Pu(t,r),t}const uE=Object.freeze(Object.defineProperty({__proto__:null,clone:eM,copy:Pu,create:me,identity:Iu,invert:Dr,mul:Fr,rotate:rn,scale:Zh,translate:Yr},Symbol.toStringTag,{value:"Module"}));var st=(function(){function r(t,e){this.x=t||0,this.y=e||0}return r.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},r.prototype.clone=function(){return new r(this.x,this.y)},r.prototype.set=function(t,e){return this.x=t,this.y=e,this},r.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},r.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},r.prototype.scale=function(t){this.x*=t,this.y*=t},r.prototype.scaleAndAdd=function(t,e){this.x+=t.x*e,this.y+=t.y*e},r.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},r.prototype.dot=function(t){return this.x*t.x+this.y*t.y},r.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},r.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},r.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},r.prototype.distance=function(t){var e=this.x-t.x,a=this.y-t.y;return Math.sqrt(e*e+a*a)},r.prototype.distanceSquare=function(t){var e=this.x-t.x,a=this.y-t.y;return e*e+a*a},r.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},r.prototype.transform=function(t){if(t){var e=this.x,a=this.y;return this.x=t[0]*e+t[2]*a+t[4],this.y=t[1]*e+t[3]*a+t[5],this}},r.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},r.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},r.set=function(t,e,a){t.x=e,t.y=a},r.copy=function(t,e){t.x=e.x,t.y=e.y},r.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},r.lenSquare=function(t){return t.x*t.x+t.y*t.y},r.dot=function(t,e){return t.x*e.x+t.y*e.y},r.add=function(t,e,a){t.x=e.x+a.x,t.y=e.y+a.y},r.sub=function(t,e,a){t.x=e.x-a.x,t.y=e.y-a.y},r.scale=function(t,e,a){t.x=e.x*a,t.y=e.y*a},r.scaleAndAdd=function(t,e,a,n){t.x=e.x+a.x*n,t.y=e.y+a.y*n},r.lerp=function(t,e,a,n){var i=1-n;t.x=i*e.x+n*a.x,t.y=i*e.y+n*a.y},r})(),Ii=Math.min,Wo=Math.max,vg=Math.abs,s1=["x","y"],fE=["width","height"],$n=new st,qn=new st,jn=new st,Kn=new st,nr=rM(),xl=nr.minTv,hg=nr.maxTv,Bl=[0,0],lt=(function(){function r(t,e,a,n){r.set(this,t,e,a,n)}return r.set=function(t,e,a,n,i){return n<0&&(e=e+n,n=-n),i<0&&(a=a+i,i=-i),t.x=e,t.y=a,t.width=n,t.height=i,t},r.prototype.union=function(t){var e=Ii(t.x,this.x),a=Ii(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Wo(t.x+t.width,this.x+this.width)-e:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=Wo(t.y+t.height,this.y+this.height)-a:this.height=t.height,this.x=e,this.y=a},r.prototype.applyTransform=function(t){r.applyTransform(this,this,t)},r.prototype.calculateTransform=function(t){var e=this,a=t.width/e.width,n=t.height/e.height,i=me();return Yr(i,i,[-e.x,-e.y]),Zh(i,i,[a,n]),Yr(i,i,[t.x,t.y]),i},r.prototype.intersect=function(t,e,a){return r.intersect(this,t,e,a)},r.intersect=function(t,e,a,n){a&&st.set(a,0,0);var i=n&&n.outIntersectRect||null,o=n&&n.clamp;if(i&&(i.x=i.y=i.width=i.height=NaN),!t||!e)return!1;t instanceof r||(t=r.set(vE,t.x,t.y,t.width,t.height)),e instanceof r||(e=r.set(hE,e.x,e.y,e.width,e.height));var s=!!a;nr.reset(n,s);var l=nr.touchThreshold,u=t.x+l,f=t.x+t.width-l,v=t.y+l,h=t.y+t.height-l,c=e.x+l,d=e.x+e.width-l,p=e.y+l,g=e.y+e.height-l;if(u>f||v>h||c>d||p>g)return!1;var y=!(f=t.x&&e<=t.x+t.width&&a>=t.y&&a<=t.y+t.height},r.prototype.contain=function(t,e){return r.contain(this,t,e)},r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height)},r.prototype.copy=function(t){r.copy(this,t)},r.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},r.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},r.prototype.isZero=function(){return this.width===0||this.height===0},r.create=function(t){return new r(t.x,t.y,t.width,t.height)},r.copy=function(t,e){return t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height,t},r.applyTransform=function(t,e,a){if(!a){t!==e&&r.copy(t,e);return}if(a[1]<1e-5&&a[1]>-1e-5&&a[2]<1e-5&&a[2]>-1e-5){var n=a[0],i=a[3],o=a[4],s=a[5];t.x=e.x*n+o,t.y=e.y*i+s,t.width=e.width*n,t.height=e.height*i,t.width<0&&(t.x+=t.width,t.width=-t.width),t.height<0&&(t.y+=t.height,t.height=-t.height);return}$n.x=jn.x=e.x,$n.y=Kn.y=e.y,qn.x=Kn.x=e.x+e.width,qn.y=jn.y=e.y+e.height,$n.transform(a),Kn.transform(a),qn.transform(a),jn.transform(a),t.x=Ii($n.x,qn.x,jn.x,Kn.x),t.y=Ii($n.y,qn.y,jn.y,Kn.y);var l=Wo($n.x,qn.x,jn.x,Kn.x),u=Wo($n.y,qn.y,jn.y,Kn.y);t.width=l-t.x,t.height=u-t.y},r})(),vE=new lt(0,0,0,0),hE=new lt(0,0,0,0);function l1(r,t,e,a,n,i,o,s){var l=vg(t-e),u=vg(a-r),f=Ii(l,u),v=s1[n],h=s1[1-n],c=fE[n];t=u||!nr.bidirectional)&&(xl[v]=-u,xl[h]=0,nr.useDir&&nr.calcDirMTV())))}function rM(){var r=0,t=new st,e=new st,a={minTv:new st,maxTv:new st,useDir:!1,dirMinTv:new st,touchThreshold:0,bidirectional:!0,negativeSize:!1,reset:function(i,o){a.touchThreshold=0,i&&i.touchThreshold!=null&&(a.touchThreshold=Wo(0,i.touchThreshold)),a.negativeSize=!1,o&&(a.minTv.set(1/0,1/0),a.maxTv.set(0,0),a.useDir=!1,i&&i.direction!=null&&(a.useDir=!0,a.dirMinTv.copy(a.minTv),e.copy(a.minTv),r=i.direction,a.bidirectional=i.bidirectional==null||!!i.bidirectional,a.bidirectional||t.set(Math.cos(r),Math.sin(r))))},calcDirMTV:function(){var i=a.minTv,o=a.dirMinTv,s=i.y*i.y+i.x*i.x,l=Math.sin(r),u=Math.cos(r),f=l*i.y+u*i.x;if(n(f)){n(i.x)&&n(i.y)&&o.set(0,0);return}if(e.x=s*u/f,e.y=s*l/f,n(e.x)&&n(e.y)){o.set(0,0);return}(a.bidirectional||t.dot(e)>0)&&e.len()=0;v--){var h=i[v];h!==n&&!h.ignore&&!h.ignoreCoarsePointer&&(!h.parent||!h.parent.ignoreCoarsePointer)&&(Rc.copy(h.getBoundingRect()),h.transform&&Rc.applyTransform(h.transform),Rc.intersect(f)&&s.push(h))}if(s.length)for(var c=4,d=Math.PI/12,p=Math.PI*2,g=0;g4)return;this._downPoint=null}this.dispatchToElement(i,r,t)}});function yE(r,t,e){if(r[r.rectHover?"rectContain":"contain"](t,e)){for(var a=r,n=void 0,i=!1;a;){if(a.ignoreClip&&(i=!0),!i){var o=a.getClipPath();if(o&&!o.contain(t,e))return!1}a.silent&&(n=!0);var s=a.__hostTarget;a=s?a.ignoreHostSilent?null:s:a.parent}return n?aM:!0}return!1}function u1(r,t,e,a,n){for(var i=r.length-1;i>=0;i--){var o=r[i],s=void 0;if(o!==n&&!o.ignore&&(s=yE(o,e,a))&&(!t.topTarget&&(t.topTarget=o),s!==aM)){t.target=o;break}}}function iM(r,t,e){var a=r.painter;return t<0||t>a.getWidth()||e<0||e>a.getHeight()}var oM=32,Fs=7;function mE(r){for(var t=0;r>=oM;)t|=r&1,r>>=1;return r+t}function f1(r,t,e,a){var n=t+1;if(n===e)return 1;if(a(r[n++],r[t])<0){for(;n=0;)n++;return n-t}function _E(r,t,e){for(e--;t>>1,n(i,r[l])<0?s=l:o=l+1;var u=a-o;switch(u){case 3:r[o+3]=r[o+2];case 2:r[o+2]=r[o+1];case 1:r[o+1]=r[o];break;default:for(;u>0;)r[o+u]=r[o+u-1],u--}r[o]=i}}function kc(r,t,e,a,n,i){var o=0,s=0,l=1;if(i(r,t[e+n])>0){for(s=a-n;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}else{for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}for(o++;o>>1);i(r,t[e+f])>0?o=f+1:l=f}return l}function Ec(r,t,e,a,n,i){var o=0,s=0,l=1;if(i(r,t[e+n])<0){for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}else{for(s=a-n;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}for(o++;o>>1);i(r,t[e+f])<0?l=f:o=f+1}return l}function SE(r,t){var e=Fs,a,n,i=0,o=[];a=[],n=[];function s(c,d){a[i]=c,n[i]=d,i+=1}function l(){for(;i>1;){var c=i-2;if(c>=1&&n[c-1]<=n[c]+n[c+1]||c>=2&&n[c-2]<=n[c]+n[c-1])n[c-1]n[c+1])break;f(c)}}function u(){for(;i>1;){var c=i-2;c>0&&n[c-1]=Fs||w>=Fs);if(T)break;x<0&&(x=0),x+=2}if(e=x,e<1&&(e=1),d===1){for(y=0;y=0;y--)r[b+y]=r[x+y];r[S]=o[_];return}for(var w=e;;){var T=0,C=0,M=!1;do if(t(o[_],r[m])<0){if(r[S--]=r[m--],T++,C=0,--d===0){M=!0;break}}else if(r[S--]=o[_--],C++,T=0,--g===1){M=!0;break}while((T|C)=0;y--)r[b+y]=r[x+y];if(d===0){M=!0;break}}if(r[S--]=o[_--],--g===1){M=!0;break}if(C=g-kc(r[m],o,0,g,g-1,t),C!==0){for(S-=C,_-=C,g-=C,b=S+1,x=_+1,y=0;y=Fs||C>=Fs);if(M)break;w<0&&(w=0),w+=2}if(e=w,e<1&&(e=1),g===1){for(S-=d,m-=d,b=S+1,x=m+1,y=d-1;y>=0;y--)r[b+y]=r[x+y];r[S]=o[_]}else{if(g===0)throw new Error;for(x=S-(g-1),y=0;ys&&(l=s),v1(r,e,e+l,e+i,t),i=l}o.pushRun(e,i),o.mergeRuns(),n-=i,e+=i}while(n!==0);o.forceMergeRuns()}}var ir=1,bl=2,Vo=4,h1=!1;function Oc(){h1||(h1=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function c1(r,t){return r.zlevel===t.zlevel?r.z===t.z?r.z2-t.z2:r.z-t.z:r.zlevel-t.zlevel}var xE=(function(){function r(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=c1}return r.prototype.traverse=function(t,e){for(var a=0;a=0&&this._roots.splice(n,1)},r.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},r.prototype.getRoots=function(){return this._roots},r.prototype.dispose=function(){this._displayList=null,this._roots=null},r})(),Ov;Ov=Ct.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(r){return setTimeout(r,16)};var zl={linear:function(r){return r},quadraticIn:function(r){return r*r},quadraticOut:function(r){return r*(2-r)},quadraticInOut:function(r){return(r*=2)<1?.5*r*r:-.5*(--r*(r-2)-1)},cubicIn:function(r){return r*r*r},cubicOut:function(r){return--r*r*r+1},cubicInOut:function(r){return(r*=2)<1?.5*r*r*r:.5*((r-=2)*r*r+2)},quarticIn:function(r){return r*r*r*r},quarticOut:function(r){return 1- --r*r*r*r},quarticInOut:function(r){return(r*=2)<1?.5*r*r*r*r:-.5*((r-=2)*r*r*r-2)},quinticIn:function(r){return r*r*r*r*r},quinticOut:function(r){return--r*r*r*r*r+1},quinticInOut:function(r){return(r*=2)<1?.5*r*r*r*r*r:.5*((r-=2)*r*r*r*r+2)},sinusoidalIn:function(r){return 1-Math.cos(r*Math.PI/2)},sinusoidalOut:function(r){return Math.sin(r*Math.PI/2)},sinusoidalInOut:function(r){return .5*(1-Math.cos(Math.PI*r))},exponentialIn:function(r){return r===0?0:Math.pow(1024,r-1)},exponentialOut:function(r){return r===1?1:1-Math.pow(2,-10*r)},exponentialInOut:function(r){return r===0?0:r===1?1:(r*=2)<1?.5*Math.pow(1024,r-1):.5*(-Math.pow(2,-10*(r-1))+2)},circularIn:function(r){return 1-Math.sqrt(1-r*r)},circularOut:function(r){return Math.sqrt(1- --r*r)},circularInOut:function(r){return(r*=2)<1?-.5*(Math.sqrt(1-r*r)-1):.5*(Math.sqrt(1-(r-=2)*r)+1)},elasticIn:function(r){var t,e=.1,a=.4;return r===0?0:r===1?1:(!e||e<1?(e=1,t=a/4):t=a*Math.asin(1/e)/(2*Math.PI),-(e*Math.pow(2,10*(r-=1))*Math.sin((r-t)*(2*Math.PI)/a)))},elasticOut:function(r){var t,e=.1,a=.4;return r===0?0:r===1?1:(!e||e<1?(e=1,t=a/4):t=a*Math.asin(1/e)/(2*Math.PI),e*Math.pow(2,-10*r)*Math.sin((r-t)*(2*Math.PI)/a)+1)},elasticInOut:function(r){var t,e=.1,a=.4;return r===0?0:r===1?1:(!e||e<1?(e=1,t=a/4):t=a*Math.asin(1/e)/(2*Math.PI),(r*=2)<1?-.5*(e*Math.pow(2,10*(r-=1))*Math.sin((r-t)*(2*Math.PI)/a)):e*Math.pow(2,-10*(r-=1))*Math.sin((r-t)*(2*Math.PI)/a)*.5+1)},backIn:function(r){var t=1.70158;return r*r*((t+1)*r-t)},backOut:function(r){var t=1.70158;return--r*r*((t+1)*r+t)+1},backInOut:function(r){var t=2.5949095;return(r*=2)<1?.5*(r*r*((t+1)*r-t)):.5*((r-=2)*r*((t+1)*r+t)+2)},bounceIn:function(r){return 1-zl.bounceOut(1-r)},bounceOut:function(r){return r<1/2.75?7.5625*r*r:r<2/2.75?7.5625*(r-=1.5/2.75)*r+.75:r<2.5/2.75?7.5625*(r-=2.25/2.75)*r+.9375:7.5625*(r-=2.625/2.75)*r+.984375},bounceInOut:function(r){return r<.5?zl.bounceIn(r*2)*.5:zl.bounceOut(r*2-1)*.5+.5}},qu=Math.pow,Dn=Math.sqrt,Nv=1e-8,sM=1e-4,d1=Dn(3),ju=1/3,oa=Hn(),br=Hn(),Ko=Hn();function xn(r){return r>-Nv&&rNv||r<-Nv}function ge(r,t,e,a,n){var i=1-n;return i*i*(i*r+3*n*t)+n*n*(n*a+3*i*e)}function p1(r,t,e,a,n){var i=1-n;return 3*(((t-r)*i+2*(e-t)*n)*i+(a-e)*n*n)}function Bv(r,t,e,a,n,i){var o=a+3*(t-e)-r,s=3*(e-t*2+r),l=3*(t-r),u=r-n,f=s*s-3*o*l,v=s*l-9*o*u,h=l*l-3*s*u,c=0;if(xn(f)&&xn(v))if(xn(s))i[0]=0;else{var d=-l/s;d>=0&&d<=1&&(i[c++]=d)}else{var p=v*v-4*f*h;if(xn(p)){var g=v/f,d=-s/o+g,y=-g/2;d>=0&&d<=1&&(i[c++]=d),y>=0&&y<=1&&(i[c++]=y)}else if(p>0){var m=Dn(p),_=f*s+1.5*o*(-v+m),S=f*s+1.5*o*(-v-m);_<0?_=-qu(-_,ju):_=qu(_,ju),S<0?S=-qu(-S,ju):S=qu(S,ju);var d=(-s-(_+S))/(3*o);d>=0&&d<=1&&(i[c++]=d)}else{var x=(2*f*s-3*o*v)/(2*Dn(f*f*f)),b=Math.acos(x)/3,w=Dn(f),T=Math.cos(b),d=(-s-2*w*T)/(3*o),y=(-s+w*(T+d1*Math.sin(b)))/(3*o),C=(-s+w*(T-d1*Math.sin(b)))/(3*o);d>=0&&d<=1&&(i[c++]=d),y>=0&&y<=1&&(i[c++]=y),C>=0&&C<=1&&(i[c++]=C)}}return c}function uM(r,t,e,a,n){var i=6*e-12*t+6*r,o=9*t+3*a-3*r-9*e,s=3*t-3*r,l=0;if(xn(o)){if(lM(i)){var u=-s/i;u>=0&&u<=1&&(n[l++]=u)}}else{var f=i*i-4*o*s;if(xn(f))n[0]=-i/(2*o);else if(f>0){var v=Dn(f),u=(-i+v)/(2*o),h=(-i-v)/(2*o);u>=0&&u<=1&&(n[l++]=u),h>=0&&h<=1&&(n[l++]=h)}}return l}function On(r,t,e,a,n,i){var o=(t-r)*n+r,s=(e-t)*n+t,l=(a-e)*n+e,u=(s-o)*n+o,f=(l-s)*n+s,v=(f-u)*n+u;i[0]=r,i[1]=o,i[2]=u,i[3]=v,i[4]=v,i[5]=f,i[6]=l,i[7]=a}function fM(r,t,e,a,n,i,o,s,l,u,f){var v,h=.005,c=1/0,d,p,g,y;oa[0]=l,oa[1]=u;for(var m=0;m<1;m+=.05)br[0]=ge(r,e,n,o,m),br[1]=ge(t,a,i,s,m),g=Mn(oa,br),g=0&&g=0&&u<=1&&(n[l++]=u)}}else{var f=o*o-4*i*s;if(xn(f)){var u=-o/(2*i);u>=0&&u<=1&&(n[l++]=u)}else if(f>0){var v=Dn(f),u=(-o+v)/(2*i),h=(-o-v)/(2*i);u>=0&&u<=1&&(n[l++]=u),h>=0&&h<=1&&(n[l++]=h)}}return l}function vM(r,t,e){var a=r+e-2*t;return a===0?.5:(r-t)/a}function Kl(r,t,e,a,n){var i=(t-r)*a+r,o=(e-t)*a+t,s=(o-i)*a+i;n[0]=r,n[1]=i,n[2]=s,n[3]=s,n[4]=o,n[5]=e}function hM(r,t,e,a,n,i,o,s,l){var u,f=.005,v=1/0;oa[0]=o,oa[1]=s;for(var h=0;h<1;h+=.05){br[0]=Te(r,e,n,h),br[1]=Te(t,a,i,h);var c=Mn(oa,br);c=0&&c=1?1:Bv(0,a,i,1,l,s)&&ge(0,n,o,1,s[0])}}}var AE=(function(){function r(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||Kt,this.ondestroy=t.ondestroy||Kt,this.onrestart=t.onrestart||Kt,t.easing&&this.setEasing(t.easing)}return r.prototype.step=function(t,e){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),this._paused){this._pausedTime+=e;return}var a=this._life,n=t-this._startTime-this._pausedTime,i=n/a;i<0&&(i=0),i=Math.min(i,1);var o=this.easingFunc,s=o?o(i):i;if(this.onframe(s),i===1)if(this.loop){var l=n%a;this._startTime=t-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){this._paused=!1},r.prototype.setEasing=function(t){this.easing=t,this.easingFunc=tt(t)?t:zl[t]||wm(t)},r})(),cM=(function(){function r(t){this.value=t}return r})(),ME=(function(){function r(){this._len=0}return r.prototype.insert=function(t){var e=new cM(t);return this.insertEntry(e),e},r.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},r.prototype.remove=function(t){var e=t.prev,a=t.next;e?e.next=a:this.head=a,a?a.prev=e:this.tail=e,t.next=t.prev=null,this._len--},r.prototype.len=function(){return this._len},r.prototype.clear=function(){this.head=this.tail=null,this._len=0},r})(),as=(function(){function r(t){this._list=new ME,this._maxSize=10,this._map={},this._maxSize=t}return r.prototype.put=function(t,e){var a=this._list,n=this._map,i=null;if(n[t]==null){var o=a.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=a.head;a.remove(l),delete n[l.key],i=l.value,this._lastRemovedEntry=l}s?s.value=e:s=new cM(e),s.key=t,a.insertEntry(s),n[t]=s}return i},r.prototype.get=function(t){var e=this._map[t],a=this._list;if(e!=null)return e!==a.tail&&(a.remove(e),a.insertEntry(e)),e.value},r.prototype.clear=function(){this._list.clear(),this._map={}},r.prototype.len=function(){return this._list.len()},r})(),g1={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Hr(r){return r=Math.round(r),r<0?0:r>255?255:r}function DE(r){return r=Math.round(r),r<0?0:r>360?360:r}function Jl(r){return r<0?0:r>1?1:r}function vv(r){var t=r;return t.length&&t.charAt(t.length-1)==="%"?Hr(parseFloat(t)/100*255):Hr(parseInt(t,10))}function Ha(r){var t=r;return t.length&&t.charAt(t.length-1)==="%"?Jl(parseFloat(t)/100):Jl(parseFloat(t))}function Nc(r,t,e){return e<0?e+=1:e>1&&(e-=1),e*6<1?r+(t-r)*e*6:e*2<1?t:e*3<2?r+(t-r)*(2/3-e)*6:r}function bn(r,t,e){return r+(t-r)*e}function yr(r,t,e,a,n){return r[0]=t,r[1]=e,r[2]=a,r[3]=n,r}function dg(r,t){return r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=t[3],r}var dM=new as(20),Ku=null;function ho(r,t){Ku&&dg(Ku,t),Ku=dM.put(r,Ku||t.slice())}function Ve(r,t){if(r){t=t||[];var e=dM.get(r);if(e)return dg(t,e);r=r+"";var a=r.replace(/ /g,"").toLowerCase();if(a in g1)return dg(t,g1[a]),ho(r,t),t;var n=a.length;if(a.charAt(0)==="#"){if(n===4||n===5){var i=parseInt(a.slice(1,4),16);if(!(i>=0&&i<=4095)){yr(t,0,0,0,1);return}return yr(t,(i&3840)>>4|(i&3840)>>8,i&240|(i&240)>>4,i&15|(i&15)<<4,n===5?parseInt(a.slice(4),16)/15:1),ho(r,t),t}else if(n===7||n===9){var i=parseInt(a.slice(1,7),16);if(!(i>=0&&i<=16777215)){yr(t,0,0,0,1);return}return yr(t,(i&16711680)>>16,(i&65280)>>8,i&255,n===9?parseInt(a.slice(7),16)/255:1),ho(r,t),t}return}var o=a.indexOf("("),s=a.indexOf(")");if(o!==-1&&s+1===n){var l=a.substr(0,o),u=a.substr(o+1,s-(o+1)).split(","),f=1;switch(l){case"rgba":if(u.length!==4)return u.length===3?yr(t,+u[0],+u[1],+u[2],1):yr(t,0,0,0,1);f=Ha(u.pop());case"rgb":if(u.length>=3)return yr(t,vv(u[0]),vv(u[1]),vv(u[2]),u.length===3?f:Ha(u[3])),ho(r,t),t;yr(t,0,0,0,1);return;case"hsla":if(u.length!==4){yr(t,0,0,0,1);return}return u[3]=Ha(u[3]),pg(u,t),ho(r,t),t;case"hsl":if(u.length!==3){yr(t,0,0,0,1);return}return pg(u,t),ho(r,t),t;default:return}}yr(t,0,0,0,1)}}function pg(r,t){var e=(parseFloat(r[0])%360+360)%360/360,a=Ha(r[1]),n=Ha(r[2]),i=n<=.5?n*(a+1):n+a-n*a,o=n*2-i;return t=t||[],yr(t,Hr(Nc(o,i,e+1/3)*255),Hr(Nc(o,i,e)*255),Hr(Nc(o,i,e-1/3)*255),1),r.length===4&&(t[3]=r[3]),t}function LE(r){if(r){var t=r[0]/255,e=r[1]/255,a=r[2]/255,n=Math.min(t,e,a),i=Math.max(t,e,a),o=i-n,s=(i+n)/2,l,u;if(o===0)l=0,u=0;else{s<.5?u=o/(i+n):u=o/(2-i-n);var f=((i-t)/6+o/2)/o,v=((i-e)/6+o/2)/o,h=((i-a)/6+o/2)/o;t===i?l=h-v:e===i?l=1/3+f-h:a===i&&(l=2/3+v-f),l<0&&(l+=1),l>1&&(l-=1)}var c=[l*360,u,s];return r[3]!=null&&c.push(r[3]),c}}function zv(r,t){var e=Ve(r);if(e){for(var a=0;a<3;a++)t<0?e[a]=e[a]*(1-t)|0:e[a]=(255-e[a])*t+e[a]|0,e[a]>255?e[a]=255:e[a]<0&&(e[a]=0);return Cr(e,e.length===4?"rgba":"rgb")}}function IE(r){var t=Ve(r);if(t)return((1<<24)+(t[0]<<16)+(t[1]<<8)+ +t[2]).toString(16).slice(1)}function Vl(r,t,e){if(!(!(t&&t.length)||!(r>=0&&r<=1))){e=e||[];var a=r*(t.length-1),n=Math.floor(a),i=Math.ceil(a),o=t[n],s=t[i],l=a-n;return e[0]=Hr(bn(o[0],s[0],l)),e[1]=Hr(bn(o[1],s[1],l)),e[2]=Hr(bn(o[2],s[2],l)),e[3]=Jl(bn(o[3],s[3],l)),e}}var PE=Vl;function Tm(r,t,e){if(!(!(t&&t.length)||!(r>=0&&r<=1))){var a=r*(t.length-1),n=Math.floor(a),i=Math.ceil(a),o=Ve(t[n]),s=Ve(t[i]),l=a-n,u=Cr([Hr(bn(o[0],s[0],l)),Hr(bn(o[1],s[1],l)),Hr(bn(o[2],s[2],l)),Jl(bn(o[3],s[3],l))],"rgba");return e?{color:u,leftIndex:n,rightIndex:i,value:a}:u}}var RE=Tm;function Wa(r,t,e,a){var n=Ve(r);if(r)return n=LE(n),t!=null&&(n[0]=DE(tt(t)?t(n[0]):t)),e!=null&&(n[1]=Ha(tt(e)?e(n[1]):e)),a!=null&&(n[2]=Ha(tt(a)?a(n[2]):a)),Cr(pg(n),"rgba")}function Ql(r,t){var e=Ve(r);if(e&&t!=null)return e[3]=Jl(t),Cr(e,"rgba")}function Cr(r,t){if(!(!r||!r.length)){var e=r[0]+","+r[1]+","+r[2];return(t==="rgba"||t==="hsva"||t==="hsla")&&(e+=","+r[3]),t+"("+e+")"}}function tu(r,t){var e=Ve(r);return e?(.299*e[0]+.587*e[1]+.114*e[2])*e[3]/255+(1-e[3])*t:0}function kE(){return Cr([Math.round(Math.random()*255),Math.round(Math.random()*255),Math.round(Math.random()*255)],"rgb")}var y1=new as(100);function Vv(r){if(X(r)){var t=y1.get(r);return t||(t=zv(r,-.1),y1.put(r,t)),t}else if(Mu(r)){var e=G({},r);return e.colorStops=U(r.colorStops,function(a){return{offset:a.offset,color:zv(a.color,-.1)}}),e}return r}const EE=Object.freeze(Object.defineProperty({__proto__:null,fastLerp:Vl,fastMapToColor:PE,lerp:Tm,lift:zv,liftColor:Vv,lum:tu,mapToColor:RE,modifyAlpha:Ql,modifyHSL:Wa,parse:Ve,parseCssFloat:Ha,parseCssInt:vv,random:kE,stringify:Cr,toHex:IE},Symbol.toStringTag,{value:"Module"}));var Gv=Math.round;function eu(r){var t;if(!r||r==="transparent")r="none";else if(typeof r=="string"&&r.indexOf("rgba")>-1){var e=Ve(r);e&&(r="rgb("+e[0]+","+e[1]+","+e[2]+")",t=e[3])}return{color:r,opacity:t??1}}var m1=1e-4;function wn(r){return r-m1}function Ju(r){return Gv(r*1e3)/1e3}function gg(r){return Gv(r*1e4)/1e4}function OE(r){return"matrix("+Ju(r[0])+","+Ju(r[1])+","+Ju(r[2])+","+Ju(r[3])+","+gg(r[4])+","+gg(r[5])+")"}var NE={left:"start",right:"end",center:"middle",middle:"middle"};function BE(r,t,e){return e==="top"?r+=t/2:e==="bottom"&&(r-=t/2),r}function zE(r){return r&&(r.shadowBlur||r.shadowOffsetX||r.shadowOffsetY)}function VE(r){var t=r.style,e=r.getGlobalScale();return[t.shadowColor,(t.shadowBlur||0).toFixed(2),(t.shadowOffsetX||0).toFixed(2),(t.shadowOffsetY||0).toFixed(2),e[0],e[1]].join(",")}function pM(r){return r&&!!r.image}function GE(r){return r&&!!r.svgElement}function Cm(r){return pM(r)||GE(r)}function gM(r){return r.type==="linear"}function yM(r){return r.type==="radial"}function mM(r){return r&&(r.type==="linear"||r.type==="radial")}function Xh(r){return"url(#"+r+")"}function _M(r){var t=r.getGlobalScale(),e=Math.max(t[0],t[1]);return Math.max(Math.ceil(Math.log(e)/Math.log(10)),1)}function SM(r){var t=r.x||0,e=r.y||0,a=(r.rotation||0)*El,n=Q(r.scaleX,1),i=Q(r.scaleY,1),o=r.skewX||0,s=r.skewY||0,l=[];return(t||e)&&l.push("translate("+t+"px,"+e+"px)"),a&&l.push("rotate("+a+")"),(n!==1||i!==1)&&l.push("scale("+n+","+i+")"),(o||s)&&l.push("skew("+Gv(o*El)+"deg, "+Gv(s*El)+"deg)"),l.join(" ")}var FE=(function(){return Ct.hasGlobalWindow&&tt(window.btoa)?function(r){return window.btoa(unescape(encodeURIComponent(r)))}:typeof Buffer<"u"?function(r){return Buffer.from(r).toString("base64")}:function(r){return null}})(),yg=Array.prototype.slice;function Ea(r,t,e){return(t-r)*e+r}function Bc(r,t,e,a){for(var n=t.length,i=0;ia?t:r,i=Math.min(e,a),o=n[i-1]||{color:[0,0,0,0],offset:0},s=i;so;if(s)a.length=o;else for(var l=i;l=1},r.prototype.getAdditiveTrack=function(){return this._additiveTrack},r.prototype.addKeyframe=function(t,e,a){this._needsSort=!0;var n=this.keyframes,i=n.length,o=!1,s=S1,l=e;if(Pe(e)){var u=YE(e);s=u,(u===1&&!Dt(e[0])||u===2&&!Dt(e[0][0]))&&(o=!0)}else if(Dt(e)&&!Ie(e))s=tf;else if(X(e))if(!isNaN(+e))s=tf;else{var f=Ve(e);f&&(l=f,s=wl)}else if(Mu(e)){var v=G({},l);v.colorStops=U(e.colorStops,function(c){return{offset:c.offset,color:Ve(c.color)}}),gM(e)?s=mg:yM(e)&&(s=_g),l=v}i===0?this.valType=s:(s!==this.valType||s===S1)&&(o=!0),this.discrete=this.discrete||o;var h={time:t,value:l,rawValue:e,percent:0};return a&&(h.easing=a,h.easingFunc=tt(a)?a:zl[a]||wm(a)),n.push(h),h},r.prototype.prepare=function(t,e){var a=this.keyframes;this._needsSort&&a.sort(function(p,g){return p.time-g.time});for(var n=this.valType,i=a.length,o=a[i-1],s=this.discrete,l=ef(n),u=x1(n),f=0;f=0&&!(o[f].percent<=e);f--);f=h(f,s-2)}else{for(f=v;fe);f++);f=h(f-1,s-2)}d=o[f+1],c=o[f]}if(c&&d){this._lastFr=f,this._lastFrP=e;var g=d.percent-c.percent,y=g===0?1:h((e-c.percent)/g,1);d.easingFunc&&(y=d.easingFunc(y));var m=a?this._additiveValue:u?Hs:t[l];if((ef(i)||u)&&!m&&(m=this._additiveValue=[]),this.discrete)t[l]=y<1?c.rawValue:d.rawValue;else if(ef(i))i===cv?Bc(m,c[n],d[n],y):HE(m,c[n],d[n],y);else if(x1(i)){var _=c[n],S=d[n],x=i===mg;t[l]={type:x?"linear":"radial",x:Ea(_.x,S.x,y),y:Ea(_.y,S.y,y),colorStops:U(_.colorStops,function(w,T){var C=S.colorStops[T];return{offset:Ea(w.offset,C.offset,y),color:hv(Bc([],w.color,C.color,y))}}),global:S.global},x?(t[l].x2=Ea(_.x2,S.x2,y),t[l].y2=Ea(_.y2,S.y2,y)):t[l].r=Ea(_.r,S.r,y)}else if(u)Bc(m,c[n],d[n],y),a||(t[l]=hv(m));else{var b=Ea(c[n],d[n],y);a?this._additiveValue=b:t[l]=b}a&&this._addToTarget(t)}}},r.prototype._addToTarget=function(t){var e=this.valType,a=this.propName,n=this._additiveValue;e===tf?t[a]=t[a]+n:e===wl?(Ve(t[a],Hs),Qu(Hs,Hs,n,1),t[a]=hv(Hs)):e===cv?Qu(t[a],t[a],n,1):e===xM&&_1(t[a],t[a],n,1)},r})(),Am=(function(){function r(t,e,a,n){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=t,this._loop=e,e&&n){Hh("Can' use additive animation on looped animation.");return}this._additiveAnimators=n,this._allowDiscrete=a}return r.prototype.getMaxTime=function(){return this._maxTime},r.prototype.getDelay=function(){return this._delay},r.prototype.getLoop=function(){return this._loop},r.prototype.getTarget=function(){return this._target},r.prototype.changeTarget=function(t){this._target=t},r.prototype.when=function(t,e,a){return this.whenWithKeys(t,e,At(e),a)},r.prototype.whenWithKeys=function(t,e,a,n){for(var i=this._tracks,o=0;o0&&l.addKeyframe(0,Gl(u),n),this._trackKeys.push(s)}l.addKeyframe(t,Gl(e[s]),n)}return this._maxTime=Math.max(this._maxTime,t),this},r.prototype.pause=function(){this._clip.pause(),this._paused=!0},r.prototype.resume=function(){this._clip.resume(),this._paused=!1},r.prototype.isPaused=function(){return!!this._paused},r.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},r.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var e=t.length,a=0;a0)){this._started=1;for(var e=this,a=[],n=this._maxTime||0,i=0;i1){var s=o.pop();i.addKeyframe(s.time,t[n]),i.prepare(this._maxTime,i.getAdditiveTrack())}}}},r})();function Uo(){return new Date().getTime()}var XE=(function(r){N(t,r);function t(e){var a=r.call(this)||this;return a._running=!1,a._time=0,a._pausedTime=0,a._pauseStart=0,a._paused=!1,e=e||{},a.stage=e.stage||{},a}return t.prototype.addClip=function(e){e.animation&&this.removeClip(e),this._head?(this._tail.next=e,e.prev=this._tail,e.next=null,this._tail=e):this._head=this._tail=e,e.animation=this},t.prototype.addAnimator=function(e){e.animation=this;var a=e.getClip();a&&this.addClip(a)},t.prototype.removeClip=function(e){if(e.animation){var a=e.prev,n=e.next;a?a.next=n:this._head=n,n?n.prev=a:this._tail=a,e.next=e.prev=e.animation=null}},t.prototype.removeAnimator=function(e){var a=e.getClip();a&&this.removeClip(a),e.animation=null},t.prototype.update=function(e){for(var a=Uo()-this._pausedTime,n=a-this._time,i=this._head;i;){var o=i.next,s=i.step(a,n);s&&(i.ondestroy(),this.removeClip(i)),i=o}this._time=a,e||(this.trigger("frame",n),this.stage.update&&this.stage.update())},t.prototype._startLoop=function(){var e=this;this._running=!0;function a(){e._running&&(Ov(a),!e._paused&&e.update())}Ov(a)},t.prototype.start=function(){this._running||(this._time=Uo(),this._pausedTime=0,this._startLoop())},t.prototype.stop=function(){this._running=!1},t.prototype.pause=function(){this._paused||(this._pauseStart=Uo(),this._paused=!0)},t.prototype.resume=function(){this._paused&&(this._pausedTime+=Uo()-this._pauseStart,this._paused=!1)},t.prototype.clear=function(){for(var e=this._head;e;){var a=e.next;e.prev=e.next=e.animation=null,e=a}this._head=this._tail=null},t.prototype.isFinished=function(){return this._head==null},t.prototype.animate=function(e,a){a=a||{},this.start();var n=new Am(e,a.loop);return this.addAnimator(n),n},t})(Pr),$E=300,zc=Ct.domSupported,Vc=(function(){var r=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],t=["touchstart","touchend","touchmove"],e={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},a=U(r,function(n){var i=n.replace("mouse","pointer");return e.hasOwnProperty(i)?i:n});return{mouse:r,touch:t,pointer:a}})(),b1={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},w1=!1;function Sg(r){var t=r.pointerType;return t==="pen"||t==="touch"}function qE(r){r.touching=!0,r.touchTimer!=null&&(clearTimeout(r.touchTimer),r.touchTimer=null),r.touchTimer=setTimeout(function(){r.touching=!1,r.touchTimer=null},700)}function Gc(r){r&&(r.zrByTouch=!0)}function jE(r,t){return mr(r.dom,new KE(r,t),!0)}function bM(r,t){for(var e=t,a=!1;e&&e.nodeType!==9&&!(a=e.domBelongToZr||e!==t&&e===r.painterRoot);)e=e.parentNode;return a}var KE=(function(){function r(t,e){this.stopPropagation=Kt,this.stopImmediatePropagation=Kt,this.preventDefault=Kt,this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY}return r})(),Nr={mousedown:function(r){r=mr(this.dom,r),this.__mayPointerCapture=[r.zrX,r.zrY],this.trigger("mousedown",r)},mousemove:function(r){r=mr(this.dom,r);var t=this.__mayPointerCapture;t&&(r.zrX!==t[0]||r.zrY!==t[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",r)},mouseup:function(r){r=mr(this.dom,r),this.__togglePointerCapture(!1),this.trigger("mouseup",r)},mouseout:function(r){r=mr(this.dom,r);var t=r.toElement||r.relatedTarget;bM(this,t)||(this.__pointerCapturing&&(r.zrEventControl="no_globalout"),this.trigger("mouseout",r))},wheel:function(r){w1=!0,r=mr(this.dom,r),this.trigger("mousewheel",r)},mousewheel:function(r){w1||(r=mr(this.dom,r),this.trigger("mousewheel",r))},touchstart:function(r){r=mr(this.dom,r),Gc(r),this.__lastTouchMoment=new Date,this.handler.processGesture(r,"start"),Nr.mousemove.call(this,r),Nr.mousedown.call(this,r)},touchmove:function(r){r=mr(this.dom,r),Gc(r),this.handler.processGesture(r,"change"),Nr.mousemove.call(this,r)},touchend:function(r){r=mr(this.dom,r),Gc(r),this.handler.processGesture(r,"end"),Nr.mouseup.call(this,r),+new Date-+this.__lastTouchMoment<$E&&Nr.click.call(this,r)},pointerdown:function(r){Nr.mousedown.call(this,r)},pointermove:function(r){Sg(r)||Nr.mousemove.call(this,r)},pointerup:function(r){Nr.mouseup.call(this,r)},pointerout:function(r){Sg(r)||Nr.mouseout.call(this,r)}};A(["click","dblclick","contextmenu"],function(r){Nr[r]=function(t){t=mr(this.dom,t),this.trigger(r,t)}});var xg={pointermove:function(r){Sg(r)||xg.mousemove.call(this,r)},pointerup:function(r){xg.mouseup.call(this,r)},mousemove:function(r){this.trigger("mousemove",r)},mouseup:function(r){var t=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",r),t&&(r.zrEventControl="only_globalout",this.trigger("mouseout",r))}};function JE(r,t){var e=t.domHandlers;Ct.pointerEventsSupported?A(Vc.pointer,function(a){dv(t,a,function(n){e[a].call(r,n)})}):(Ct.touchEventsSupported&&A(Vc.touch,function(a){dv(t,a,function(n){e[a].call(r,n),qE(t)})}),A(Vc.mouse,function(a){dv(t,a,function(n){n=bm(n),t.touching||e[a].call(r,n)})}))}function QE(r,t){Ct.pointerEventsSupported?A(b1.pointer,e):Ct.touchEventsSupported||A(b1.mouse,e);function e(a){function n(i){i=bm(i),bM(r,i.target)||(i=jE(r,i),t.domHandlers[a].call(r,i))}dv(t,a,n,{capture:!0})}}function dv(r,t,e,a){r.mounted[t]=e,r.listenerOpts[t]=a,fg(r.domTarget,t,e,a)}function Fc(r){var t=r.mounted;for(var e in t)t.hasOwnProperty(e)&&oE(r.domTarget,e,t[e],r.listenerOpts[e]);r.mounted={}}var T1=(function(){function r(t,e){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=e}return r})(),tO=(function(r){N(t,r);function t(e,a){var n=r.call(this)||this;return n.__pointerCapturing=!1,n.dom=e,n.painterRoot=a,n._localHandlerScope=new T1(e,Nr),zc&&(n._globalHandlerScope=new T1(document,xg)),JE(n,n._localHandlerScope),n}return t.prototype.dispose=function(){Fc(this._localHandlerScope),zc&&Fc(this._globalHandlerScope)},t.prototype.setCursor=function(e){this.dom.style&&(this.dom.style.cursor=e||"default")},t.prototype.__togglePointerCapture=function(e){if(this.__mayPointerCapture=null,zc&&+this.__pointerCapturing^+e){this.__pointerCapturing=e;var a=this._globalHandlerScope;e?QE(this,a):Fc(a)}},t})(Pr),wM=1;Ct.hasGlobalWindow&&(wM=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var Fv=wM,bg=.4,wg="#333",Tg="#ccc",eO="#eee",C1=Iu,A1=5e-5;function Jn(r){return r>A1||r<-A1}var Qn=[],co=[],Hc=me(),Wc=Math.abs,Ga=(function(){function r(){}return r.prototype.getLocalTransform=function(t){return r.getLocalTransform(this,t)},r.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},r.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},r.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},r.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},r.prototype.needLocalTransform=function(){return Jn(this.rotation)||Jn(this.x)||Jn(this.y)||Jn(this.scaleX-1)||Jn(this.scaleY-1)||Jn(this.skewX)||Jn(this.skewY)},r.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,e=this.needLocalTransform(),a=this.transform;if(!(e||t)){a&&(C1(a),this.invTransform=null);return}a=a||me(),e?this.getLocalTransform(a):C1(a),t&&(e?Fr(a,t,a):Pu(a,t)),this.transform=a,this._resolveGlobalScaleRatio(a)},r.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(e!=null&&e!==1){this.getGlobalScale(Qn);var a=Qn[0]<0?-1:1,n=Qn[1]<0?-1:1,i=((Qn[0]-a)*e+a)/Qn[0]||0,o=((Qn[1]-n)*e+n)/Qn[1]||0;t[0]*=i,t[1]*=i,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||me(),Dr(this.invTransform,t)},r.prototype.getComputedTransform=function(){for(var t=this,e=[];t;)e.push(t),t=t.parent;for(;t=e.pop();)t.updateTransform();return this.transform},r.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],a=t[2]*t[2]+t[3]*t[3],n=Math.atan2(t[1],t[0]),i=Math.PI/2+n-Math.atan2(t[3],t[2]);a=Math.sqrt(a)*Math.cos(i),e=Math.sqrt(e),this.skewX=i,this.skewY=0,this.rotation=-n,this.x=+t[4],this.y=+t[5],this.scaleX=e,this.scaleY=a,this.originX=0,this.originY=0}},r.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(t.invTransform=t.invTransform||me(),Fr(co,t.invTransform,e),e=co);var a=this.originX,n=this.originY;(a||n)&&(Hc[4]=a,Hc[5]=n,Fr(co,e,Hc),co[4]-=a,co[5]-=n,e=co),this.setLocalTransform(e)}},r.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},r.prototype.transformCoordToLocal=function(t,e){var a=[t,e],n=this.invTransform;return n&&Jt(a,a,n),a},r.prototype.transformCoordToGlobal=function(t,e){var a=[t,e],n=this.transform;return n&&Jt(a,a,n),a},r.prototype.getLineScale=function(){var t=this.transform;return t&&Wc(t[0]-1)>1e-10&&Wc(t[3]-1)>1e-10?Math.sqrt(Wc(t[0]*t[3]-t[2]*t[1])):1},r.prototype.copyTransform=function(t){Hv(this,t)},r.getLocalTransform=function(t,e){e=e||[];var a=t.originX||0,n=t.originY||0,i=t.scaleX,o=t.scaleY,s=t.anchorX,l=t.anchorY,u=t.rotation||0,f=t.x,v=t.y,h=t.skewX?Math.tan(t.skewX):0,c=t.skewY?Math.tan(-t.skewY):0;if(a||n||s||l){var d=a+s,p=n+l;e[4]=-d*i-h*p*o,e[5]=-p*o-c*d*i}else e[4]=e[5]=0;return e[0]=i,e[3]=o,e[1]=c*i,e[2]=h*o,u&&rn(e,e,u),e[4]+=a+f,e[5]+=n+v,e},r.initDefaultProps=(function(){var t=r.prototype;t.scaleX=t.scaleY=t.globalScaleRatio=1,t.x=t.y=t.originX=t.originY=t.skewX=t.skewY=t.rotation=t.anchorX=t.anchorY=0})(),r})(),ya=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function Hv(r,t){for(var e=0;e=M1)){r=r||$a;for(var t=[],e=+new Date,a=0;a<=127;a++)t[a]=tr.measureText(String.fromCharCode(a),r).width;var n=+new Date-e;return n>16?Uc=M1:n>2&&Uc++,t}}var Uc=0,M1=5;function TM(r,t){return r.asciiWidthMapTried||(r.asciiWidthMap=rO(r.font),r.asciiWidthMapTried=!0),0<=t&&t<=127?r.asciiWidthMap!=null?r.asciiWidthMap[t]:r.asciiCharWidth:r.stWideCharWidth}function ga(r,t){var e=r.strWidthCache,a=e.get(t);return a==null&&(a=tr.measureText(t,r.font).width,e.put(t,a)),a}function D1(r,t,e,a){var n=ga(pa(t),r),i=Ru(t),o=ns(0,n,e),s=Bi(0,i,a),l=new lt(o,s,n,i);return l}function $h(r,t,e,a){var n=((r||"")+"").split(` +`),i=n.length;if(i===1)return D1(n[0],t,e,a);for(var o=new lt(0,0,0,0),s=0;s=0?parseFloat(r)/100*t:parseFloat(r):r}function Wv(r,t,e){var a=t.position||"inside",n=t.distance!=null?t.distance:5,i=e.height,o=e.width,s=i/2,l=e.x,u=e.y,f="left",v="top";if(a instanceof Array)l+=Zr(a[0],e.width),u+=Zr(a[1],e.height),f=null,v=null;else switch(a){case"left":l-=n,u+=s,f="right",v="middle";break;case"right":l+=n+o,u+=s,v="middle";break;case"top":l+=o/2,u-=n,f="center",v="bottom";break;case"bottom":l+=o/2,u+=i+n,f="center";break;case"inside":l+=o/2,u+=s,f="center",v="middle";break;case"insideLeft":l+=n,u+=s,v="middle";break;case"insideRight":l+=o-n,u+=s,f="right",v="middle";break;case"insideTop":l+=o/2,u+=n,f="center";break;case"insideBottom":l+=o/2,u+=i-n,f="center",v="bottom";break;case"insideTopLeft":l+=n,u+=n;break;case"insideTopRight":l+=o-n,u+=n,f="right";break;case"insideBottomLeft":l+=n,u+=i-n,v="bottom";break;case"insideBottomRight":l+=o-n,u+=i-n,f="right",v="bottom";break}return r=r||{},r.x=l,r.y=u,r.align=f,r.verticalAlign=v,r}var Yc="__zr_normal__",Zc=ya.concat(["ignore"]),aO=Mr(ya,function(r,t){return r[t]=!0,r},{ignore:!1}),po={},nO=new lt(0,0,0,0),af=[],qh=(function(){function r(t){this.id=mm(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return r.prototype._init=function(t){this.attr(t)},r.prototype.drift=function(t,e,a){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0;break}var n=this.transform;n||(n=this.transform=[1,0,0,1,0,0]),n[4]+=t,n[5]+=e,this.decomposeTransform(),this.markRedraw()},r.prototype.beforeUpdate=function(){},r.prototype.afterUpdate=function(){},r.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},r.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var a=this.textConfig,n=a.local,i=e.innerTransformable,o=void 0,s=void 0,l=!1;i.parent=n?this:null;var u=!1;i.copyTransform(e);var f=a.position!=null,v=a.autoOverflowArea,h=void 0;if((v||f)&&(h=nO,a.layoutRect?h.copy(a.layoutRect):h.copy(this.getBoundingRect()),n||h.applyTransform(this.transform)),f){this.calculateTextPosition?this.calculateTextPosition(po,a,h):Wv(po,a,h),i.x=po.x,i.y=po.y,o=po.align,s=po.verticalAlign;var c=a.origin;if(c&&a.rotation!=null){var d=void 0,p=void 0;c==="center"?(d=h.width*.5,p=h.height*.5):(d=Zr(c[0],h.width),p=Zr(c[1],h.height)),u=!0,i.originX=-i.x+d+(n?0:h.x),i.originY=-i.y+p+(n?0:h.y)}}a.rotation!=null&&(i.rotation=a.rotation);var g=a.offset;g&&(i.x+=g[0],i.y+=g[1],u||(i.originX=-g[0],i.originY=-g[1]));var y=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={});if(v){var m=y.overflowRect=y.overflowRect||new lt(0,0,0,0);i.getLocalTransform(af),Dr(af,af),lt.copy(m,h),m.applyTransform(af)}else y.overflowRect=null;var _=a.inside==null?typeof a.position=="string"&&a.position.indexOf("inside")>=0:a.inside,S=void 0,x=void 0,b=void 0;_&&this.canBeInsideText()?(S=a.insideFill,x=a.insideStroke,(S==null||S==="auto")&&(S=this.getInsideTextFill()),(x==null||x==="auto")&&(x=this.getInsideTextStroke(S),b=!0)):(S=a.outsideFill,x=a.outsideStroke,(S==null||S==="auto")&&(S=this.getOutsideFill()),(x==null||x==="auto")&&(x=this.getOutsideStroke(S),b=!0)),S=S||"#000",(S!==y.fill||x!==y.stroke||b!==y.autoStroke||o!==y.align||s!==y.verticalAlign)&&(l=!0,y.fill=S,y.stroke=x,y.autoStroke=b,y.align=o,y.verticalAlign=s,e.setDefaultTextStyle(y)),e.__dirty|=ir,l&&e.dirtyStyle(!0)}},r.prototype.canBeInsideText=function(){return!0},r.prototype.getInsideTextFill=function(){return"#fff"},r.prototype.getInsideTextStroke=function(t){return"#000"},r.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Tg:wg},r.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),a=typeof e=="string"&&Ve(e);a||(a=[255,255,255,1]);for(var n=a[3],i=this.__zr.isDarkMode(),o=0;o<3;o++)a[o]=a[o]*n+(i?0:255)*(1-n);return a[3]=1,Cr(a,"rgba")},r.prototype.traverse=function(t,e){},r.prototype.attrKV=function(t,e){t==="textConfig"?this.setTextConfig(e):t==="textContent"?this.setTextContent(e):t==="clipPath"?this.setClipPath(e):t==="extra"?(this.extra=this.extra||{},G(this.extra,e)):this[t]=e},r.prototype.hide=function(){this.ignore=!0,this.markRedraw()},r.prototype.show=function(){this.ignore=!1,this.markRedraw()},r.prototype.attr=function(t,e){if(typeof t=="string")this.attrKV(t,e);else if(it(t))for(var a=t,n=At(a),i=0;i0},r.prototype.getState=function(t){return this.states[t]},r.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},r.prototype.clearStates=function(t){this.useState(Yc,!1,t)},r.prototype.useState=function(t,e,a,n){var i=t===Yc,o=this.hasState();if(!(!o&&i)){var s=this.currentStates,l=this.stateTransition;if(!(yt(s,t)>=0&&(e||s.length===1))){var u;if(this.stateProxy&&!i&&(u=this.stateProxy(t)),u||(u=this.states&&this.states[t]),!u&&!i){Hh("State "+t+" not exists.");return}i||this.saveCurrentToNormalState(u);var f=!!(u&&u.hoverLayer||n);f&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,u,this._normalState,e,!a&&!this.__inHover&&l&&l.duration>0,l);var v=this._textContent,h=this._textGuide;return v&&v.useState(t,e,a,f),h&&h.useState(t,e,a,f),i?(this.currentStates=[],this._normalState={}):e?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!f&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~ir),u}}},r.prototype.useStates=function(t,e,a){if(!t.length)this.clearStates();else{var n=[],i=this.currentStates,o=t.length,s=o===i.length;if(s){for(var l=0;l0,d);var p=this._textContent,g=this._textGuide;p&&p.useStates(t,e,h),g&&g.useStates(t,e,h),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!h&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~ir)}},r.prototype.isSilent=function(){for(var t=this;t;){if(t.silent)return!0;var e=t.__hostTarget;t=e?t.ignoreHostSilent?null:e:t.parent}return!1},r.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var a=this.currentStates.slice();a.splice(e,1),this.useStates(a)}},r.prototype.replaceState=function(t,e,a){var n=this.currentStates.slice(),i=yt(n,t),o=yt(n,e)>=0;i>=0?o?n.splice(i,1):n[i]=e:a&&!o&&n.push(e),this.useStates(n)},r.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},r.prototype._mergeStates=function(t){for(var e={},a,n=0;n=0&&i.splice(o,1)}),this.animators.push(t),a&&a.animation.addAnimator(t),a&&a.wakeUp()},r.prototype.updateDuringAnimation=function(t){this.markRedraw()},r.prototype.stopAnimation=function(t,e){for(var a=this.animators,n=a.length,i=[],o=0;o0&&e.during&&i[0].during(function(d,p){e.during(p)});for(var h=0;h0||n.force&&!o.length){var T=void 0,C=void 0,M=void 0;if(s){C={},h&&(T={});for(var S=0;S<_;S++){var y=p[S];C[y]=e[y],h?T[y]=a[y]:e[y]=a[y]}}else if(h){M={};for(var S=0;S<_;S++){var y=p[S];M[y]=Gl(e[y]),oO(e,a,y)}}var x=new Am(e,!1,!1,v?Rt(d,function(I){return I.targetName===t}):null);x.targetName=t,n.scope&&(x.scope=n.scope),h&&T&&x.whenWithKeys(0,T,p),M&&x.whenWithKeys(0,M,p),x.whenWithKeys(u??500,s?C:a,p).delay(f||0),r.addAnimator(x,t),o.push(x)}}var rt=(function(r){N(t,r);function t(e){var a=r.call(this)||this;return a.isGroup=!0,a._children=[],a.attr(e),a}return t.prototype.childrenRef=function(){return this._children},t.prototype.children=function(){return this._children.slice()},t.prototype.childAt=function(e){return this._children[e]},t.prototype.childOfName=function(e){for(var a=this._children,n=0;n=0&&(n.splice(i,0,e),this._doAdd(e))}return this},t.prototype.replace=function(e,a){var n=yt(this._children,e);return n>=0&&this.replaceAt(a,n),this},t.prototype.replaceAt=function(e,a){var n=this._children,i=n[a];if(e&&e!==this&&e.parent!==this&&e!==i){n[a]=e,i.parent=null;var o=this.__zr;o&&i.removeSelfFromZr(o),this._doAdd(e)}return this},t.prototype._doAdd=function(e){e.parent&&e.parent.remove(e),e.parent=this;var a=this.__zr;a&&a!==e.__zr&&e.addSelfToZr(a),a&&a.refresh()},t.prototype.remove=function(e){var a=this.__zr,n=this._children,i=yt(n,e);return i<0?this:(n.splice(i,1),e.parent=null,a&&e.removeSelfFromZr(a),a&&a.refresh(),this)},t.prototype.removeAll=function(){for(var e=this._children,a=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},r.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},r.prototype.wakeUp=function(){this._disposed||(this.animation.start(),this._stillFrameAccum=0)},r.prototype.refreshHover=function(){this._needsRefreshHover=!0},r.prototype.refreshHoverImmediately=function(){this._disposed||(this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover())},r.prototype.resize=function(t){this._disposed||(t=t||{},this.painter.resize(t.width,t.height),this.handler.resize())},r.prototype.clearAnimation=function(){this._disposed||this.animation.clear()},r.prototype.getWidth=function(){if(!this._disposed)return this.painter.getWidth()},r.prototype.getHeight=function(){if(!this._disposed)return this.painter.getHeight()},r.prototype.setCursorStyle=function(t){this._disposed||this.handler.setCursorStyle(t)},r.prototype.findHover=function(t,e){if(!this._disposed)return this.handler.findHover(t,e)},r.prototype.on=function(t,e,a){return this._disposed||this.handler.on(t,e,a),this},r.prototype.off=function(t,e){this._disposed||this.handler.off(t,e)},r.prototype.trigger=function(t,e){this._disposed||this.handler.trigger(t,e)},r.prototype.clear=function(){if(!this._disposed){for(var t=this.storage.getRoots(),e=0;e0){if(r<=n)return o;if(r>=i)return s}else{if(r>=n)return o;if(r<=i)return s}else{if(r===n)return o;if(r===i)return s}return(r-n)/l*u+o}var Z=mO;function mO(r,t,e){switch(r){case"center":case"middle":r="50%";break;case"left":case"top":r="0%";break;case"right":case"bottom":r="100%";break}return Uv(r,t,e)}function Uv(r,t,e){return X(r)?yO(r).match(/%$/)?parseFloat(r)/100*t+(e||0):parseFloat(r):r==null?NaN:+r}function ae(r,t,e){return t==null&&(t=10),t=Math.min(Math.max(0,t),LM),r=(+r).toFixed(t),e?r:+r}function lr(r){return r.sort(function(t,e){return t-e}),r}function Vr(r){if(r=+r,isNaN(r))return 0;if(r>1e-14){for(var t=1,e=0;e<15;e++,t*=10)if(Math.round(r*t)/t===r)return e}return IM(r)}function IM(r){var t=r.toString().toLowerCase(),e=t.indexOf("e"),a=e>0?+t.slice(e+1):0,n=e>0?e:t.length,i=t.indexOf("."),o=i<0?0:n-1-i;return Math.max(0,o-a)}function Mm(r,t){var e=Math.log,a=Math.LN10,n=Math.floor(e(r[1]-r[0])/a),i=Math.round(e(ua(t[1]-t[0]))/a),o=Math.min(Math.max(-n+i,0),20);return isFinite(o)?o:20}function _O(r,t,e){if(!r[t])return 0;var a=PM(r,e);return a[t]||0}function PM(r,t){var e=Mr(r,function(c,d){return c+(isNaN(d)?0:d)},0);if(e===0)return[];for(var a=Math.pow(10,t),n=U(r,function(c){return(isNaN(c)?0:c)/e*a*100}),i=a*100,o=U(n,function(c){return Math.floor(c)}),s=Mr(o,function(c,d){return c+d},0),l=U(n,function(c,d){return c-o[d]});su&&(u=l[v],f=v);++o[f],l[f]=0,++s}return U(o,function(c){return c/a})}function SO(r,t){var e=Math.max(Vr(r),Vr(t)),a=r+t;return e>LM?a:ae(a,e)}var Mg=9007199254740991;function Dm(r){var t=Math.PI*2;return(r%t+t)%t}function is(r){return r>-L1&&r=10&&t++,t}function Lm(r,t){var e=jh(r),a=Math.pow(10,e),n=r/a,i;return t?n<1.5?i=1:n<2.5?i=2:n<4?i=3:n<7?i=5:i=10:n<1?i=1:n<2?i=2:n<3?i=3:n<5?i=5:i=10,r=i*a,e>=-20?+r.toFixed(e<0?-e:0):r}function gv(r,t){var e=(r.length-1)*t+1,a=Math.floor(e),n=+r[a-1],i=e-a;return i?n+i*(r[a]-n):n}function Dg(r){r.sort(function(l,u){return s(l,u,0)?-1:1});for(var t=-1/0,e=1,a=0;a0?t.length:0),this.item=null,this.key=NaN,this},r.prototype.next=function(){return(this._step>0?this._idx=this._end)?(this.item=this._list[this._idx],this.key=this._idx=this._idx+this._step,!0):!1},r})();function qc(r){r.option=r.parentModel=r.ecModel=null}var GO=".",ti="___EC__COMPONENT__CONTAINER___",HM="___EC__EXTENDED_CLASS___";function fa(r){var t={main:"",sub:""};if(r){var e=r.split(GO);t.main=e[0]||"",t.sub=e[1]||""}return t}function FO(r){Re(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(r),'componentType "'+r+'" illegal')}function HO(r){return!!(r&&r[HM])}function km(r,t){r.$constructor=r,r.extend=function(e){var a=this,n;return WO(a)?n=(function(i){N(o,i);function o(){return i.apply(this,arguments)||this}return o})(a):(n=function(){(e.$constructor||a).apply(this,arguments)},_m(n,this)),G(n.prototype,e),n[HM]=!0,n.extend=this.extend,n.superCall=ZO,n.superApply=XO,n.superClass=a,n}}function WO(r){return tt(r)&&/^class\s/.test(Function.prototype.toString.call(r))}function WM(r,t){r.extend=t.extend}var UO=Math.round(Math.random()*10);function YO(r){var t=["__\0is_clz",UO++].join("_");r.prototype[t]=!0,r.isInstance=function(e){return!!(e&&e[t])}}function ZO(r,t){for(var e=[],a=2;a=0||i&&yt(i,l)<0)){var u=a.getShallow(l,t);u!=null&&(o[r[s][0]]=u)}}return o}}var $O=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],qO=Xi($O),jO=(function(){function r(){}return r.prototype.getAreaStyle=function(t,e){return qO(this,t,e)},r})(),Ig=new as(50);function KO(r){if(typeof r=="string"){var t=Ig.get(r);return t&&t.image}else return r}function Em(r,t,e,a,n){if(r)if(typeof r=="string"){if(t&&t.__zrImageSrc===r||!e)return t;var i=Ig.get(r),o={hostEl:e,cb:a,cbPayload:n};return i?(t=i.image,!Jh(t)&&i.pending.push(o)):(t=tr.loadImage(r,k1,k1),t.__zrImageSrc=r,Ig.put(r,t.__cachedImgObj={image:t,pending:[o]})),t}else return r;else return t}function k1(){var r=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var t=0;t=s;u++)l-=s;var f=ga(o,e);return f>l&&(e="",f=0),l=r-f,n.ellipsis=e,n.ellipsisWidth=f,n.contentWidth=l,n.containerWidth=r,n}function ZM(r,t,e){var a=e.containerWidth,n=e.contentWidth,i=e.fontMeasureInfo;if(!a){r.textLine="",r.isTruncated=!1;return}var o=ga(i,t);if(o<=a){r.textLine=t,r.isTruncated=!1;return}for(var s=0;;s++){if(o<=n||s>=e.maxIterations){t+=e.ellipsis;break}var l=s===0?QO(t,n,i):o>0?Math.floor(t.length*n/o):0;t=t.substr(0,l),o=ga(i,t)}t===""&&(t=e.placeholder),r.textLine=t,r.isTruncated=!0}function QO(r,t,e){for(var a=0,n=0,i=r.length;ng&&c){var _=Math.floor(g/h);d=d||y.length>_,y=y.slice(0,_),m=y.length*h}if(n&&f&&p!=null)for(var S=YM(p,u,t.ellipsis,{minChar:t.truncateMinChar,placeholder:t.placeholder}),x={},b=0;bd&&Kc(i,o.substring(d,g),t,c),Kc(i,p[2],t,c,p[1]),d=jc.lastIndex}dv){var z=i.lines.length;I>0?(C.tokens=C.tokens.slice(0,I),w(C,D,M),i.lines=i.lines.slice(0,T+1)):i.lines=i.lines.slice(0,T),i.isTruncated=i.isTruncated||i.lines.length0&&d+a.accumWidth>a.width&&(f=t.split(` +`),u=!0),a.accumWidth=d}else{var p=XM(t,l,a.width,a.breakAll,a.accumWidth);a.accumWidth=p.accumWidth+c,v=p.linesWidths,f=p.lines}}f||(f=t.split(` +`));for(var g=pa(l),y=0;y=32&&t<=591||t>=880&&t<=4351||t>=4608&&t<=5119||t>=7680&&t<=8303}var iN=Mr(",&?/;] ".split(""),function(r,t){return r[t]=!0,r},{});function oN(r){return nN(r)?!!iN[r]:!0}function XM(r,t,e,a,n){for(var i=[],o=[],s="",l="",u=0,f=0,v=pa(t),h=0;he:n+f+d>e){f?(s||l)&&(p?(s||(s=l,l="",u=0,f=u),i.push(s),o.push(f-u),l+=c,u+=d,s="",f=u):(l&&(s+=l,l="",u=0),i.push(s),o.push(f),s=c,f=d)):p?(i.push(l),o.push(u),l=c,u=d):(i.push(c),o.push(d));continue}f+=d,p?(l+=c,u+=d):(l&&(s+=l,l="",u=0),s+=c)}return l&&(s+=l),s&&(i.push(s),o.push(f)),i.length===1&&(f+=n),{accumWidth:f,lines:i,linesWidths:o}}function O1(r,t,e,a,n,i){if(r.baseX=e,r.baseY=a,r.outerWidth=r.outerHeight=null,!!t){var o=t.width*2,s=t.height*2;lt.set(N1,ns(e,o,n),Bi(a,s,i),o,s),lt.intersect(t,N1,null,B1);var l=B1.outIntersectRect;r.outerWidth=l.width,r.outerHeight=l.height,r.baseX=ns(l.x,l.width,n,!0),r.baseY=Bi(l.y,l.height,i,!0)}}var N1=new lt(0,0,0,0),B1={outIntersectRect:{},clamp:!0};function Om(r){return r!=null?r+="":r=""}function sN(r){var t=Om(r.text),e=r.font,a=ga(pa(e),t),n=Ru(e);return Pg(r,a,n,null)}function Pg(r,t,e,a){var n=new lt(ns(r.x||0,t,r.textAlign),Bi(r.y||0,e,r.textBaseline),t,e),i=a??($M(r)?r.lineWidth:0);return i>0&&(n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i),n}function $M(r){var t=r.stroke;return t!=null&&t!=="none"&&r.lineWidth>0}var Rg="__zr_style_"+Math.round(Math.random()*10),zi={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Qh={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};zi[Rg]=!0;var z1=["z","z2","invisible"],lN=["invisible"],Lr=(function(r){N(t,r);function t(e){return r.call(this,e)||this}return t.prototype._init=function(e){for(var a=At(e),n=0;n1e-4){s[0]=r-e,s[1]=t-a,l[0]=r+e,l[1]=t+a;return}if(nf[0]=ed(n)*e+r,nf[1]=td(n)*a+t,of[0]=ed(i)*e+r,of[1]=td(i)*a+t,u(s,nf,of),f(l,nf,of),n=n%ei,n<0&&(n=n+ei),i=i%ei,i<0&&(i=i+ei),n>i&&!o?i+=ei:nn&&(sf[0]=ed(c)*e+r,sf[1]=td(c)*a+t,u(s,sf,s),f(l,sf,l))}var Ut={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},ri=[],ai=[],jr=[],ln=[],Kr=[],Jr=[],rd=Math.min,ad=Math.max,ni=Math.cos,ii=Math.sin,Aa=Math.abs,kg=Math.PI,gn=kg*2,nd=typeof Float32Array<"u",Ws=[];function id(r){var t=Math.round(r/kg*1e8)/1e8;return t%2*kg}function ec(r,t){var e=id(r[0]);e<0&&(e+=gn);var a=e-r[0],n=r[1];n+=a,!t&&n-e>=gn?n=e+gn:t&&e-n>=gn?n=e-gn:!t&&e>n?n=e+(gn-id(e-n)):t&&e0&&(this._ux=Aa(a/Fv/t)||0,this._uy=Aa(a/Fv/e)||0)},r.prototype.setDPR=function(t){this.dpr=t},r.prototype.setContext=function(t){this._ctx=t},r.prototype.getContext=function(){return this._ctx},r.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},r.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},r.prototype.moveTo=function(t,e){return this._drawPendingPt(),this.addData(Ut.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},r.prototype.lineTo=function(t,e){var a=Aa(t-this._xi),n=Aa(e-this._yi),i=a>this._ux||n>this._uy;if(this.addData(Ut.L,t,e),this._ctx&&i&&this._ctx.lineTo(t,e),i)this._xi=t,this._yi=e,this._pendingPtDist=0;else{var o=a*a+n*n;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=o)}return this},r.prototype.bezierCurveTo=function(t,e,a,n,i,o){return this._drawPendingPt(),this.addData(Ut.C,t,e,a,n,i,o),this._ctx&&this._ctx.bezierCurveTo(t,e,a,n,i,o),this._xi=i,this._yi=o,this},r.prototype.quadraticCurveTo=function(t,e,a,n){return this._drawPendingPt(),this.addData(Ut.Q,t,e,a,n),this._ctx&&this._ctx.quadraticCurveTo(t,e,a,n),this._xi=a,this._yi=n,this},r.prototype.arc=function(t,e,a,n,i,o){this._drawPendingPt(),Ws[0]=n,Ws[1]=i,ec(Ws,o),n=Ws[0],i=Ws[1];var s=i-n;return this.addData(Ut.A,t,e,a,a,n,s,0,o?0:1),this._ctx&&this._ctx.arc(t,e,a,n,i,o),this._xi=ni(i)*a+t,this._yi=ii(i)*a+e,this},r.prototype.arcTo=function(t,e,a,n,i){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,e,a,n,i),this},r.prototype.rect=function(t,e,a,n){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,e,a,n),this.addData(Ut.R,t,e,a,n),this},r.prototype.closePath=function(){this._drawPendingPt(),this.addData(Ut.Z);var t=this._ctx,e=this._x0,a=this._y0;return t&&t.closePath(),this._xi=e,this._yi=a,this},r.prototype.fill=function(t){t&&t.fill(),this.toStatic()},r.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},r.prototype.len=function(){return this._len},r.prototype.setData=function(t){if(this._saveData){var e=t.length;!(this.data&&this.data.length===e)&&nd&&(this.data=new Float32Array(e));for(var a=0;a0&&o))for(var s=0;sf.length&&(this._expandData(),f=this.data);for(var v=0;v0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},r.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e11&&(this.data=new Float32Array(t)))}},r.prototype.getBoundingRect=function(){jr[0]=jr[1]=Kr[0]=Kr[1]=Number.MAX_VALUE,ln[0]=ln[1]=Jr[0]=Jr[1]=-Number.MAX_VALUE;var t=this.data,e=0,a=0,n=0,i=0,o;for(o=0;oa||Aa(_)>n||h===e-1)&&(p=Math.sqrt(m*m+_*_),i=g,o=y);break}case Ut.C:{var S=t[h++],x=t[h++],g=t[h++],y=t[h++],b=t[h++],w=t[h++];p=bE(i,o,S,x,g,y,b,w,10),i=b,o=w;break}case Ut.Q:{var S=t[h++],x=t[h++],g=t[h++],y=t[h++];p=TE(i,o,S,x,g,y,10),i=g,o=y;break}case Ut.A:var T=t[h++],C=t[h++],M=t[h++],D=t[h++],I=t[h++],L=t[h++],P=L+I;h+=1,d&&(s=ni(I)*M+T,l=ii(I)*D+C),p=ad(M,D)*rd(gn,Math.abs(L)),i=ni(P)*M+T,o=ii(P)*D+C;break;case Ut.R:{s=i=t[h++],l=o=t[h++];var k=t[h++],R=t[h++];p=k*2+R*2;break}case Ut.Z:{var m=s-i,_=l-o;p=Math.sqrt(m*m+_*_),i=s,o=l;break}}p>=0&&(u[v++]=p,f+=p)}return this._pathLen=f,f},r.prototype.rebuildPath=function(t,e){var a=this.data,n=this._ux,i=this._uy,o=this._len,s,l,u,f,v,h,c=e<1,d,p,g=0,y=0,m,_=0,S,x;if(!(c&&(this._pathSegLen||this._calculateLength(),d=this._pathSegLen,p=this._pathLen,m=e*p,!m)))t:for(var b=0;b0&&(t.lineTo(S,x),_=0),w){case Ut.M:s=u=a[b++],l=f=a[b++],t.moveTo(u,f);break;case Ut.L:{v=a[b++],h=a[b++];var C=Aa(v-u),M=Aa(h-f);if(C>n||M>i){if(c){var D=d[y++];if(g+D>m){var I=(m-g)/D;t.lineTo(u*(1-I)+v*I,f*(1-I)+h*I);break t}g+=D}t.lineTo(v,h),u=v,f=h,_=0}else{var L=C*C+M*M;L>_&&(S=v,x=h,_=L)}break}case Ut.C:{var P=a[b++],k=a[b++],R=a[b++],O=a[b++],E=a[b++],z=a[b++];if(c){var D=d[y++];if(g+D>m){var I=(m-g)/D;On(u,P,R,E,I,ri),On(f,k,O,z,I,ai),t.bezierCurveTo(ri[1],ai[1],ri[2],ai[2],ri[3],ai[3]);break t}g+=D}t.bezierCurveTo(P,k,R,O,E,z),u=E,f=z;break}case Ut.Q:{var P=a[b++],k=a[b++],R=a[b++],O=a[b++];if(c){var D=d[y++];if(g+D>m){var I=(m-g)/D;Kl(u,P,R,I,ri),Kl(f,k,O,I,ai),t.quadraticCurveTo(ri[1],ai[1],ri[2],ai[2]);break t}g+=D}t.quadraticCurveTo(P,k,R,O),u=R,f=O;break}case Ut.A:var V=a[b++],F=a[b++],H=a[b++],Y=a[b++],j=a[b++],vt=a[b++],Pt=a[b++],Bt=!a[b++],ht=H>Y?H:Y,at=Aa(H-Y)>.001,gt=j+vt,J=!1;if(c){var D=d[y++];g+D>m&&(gt=j+vt*(m-g)/D,J=!0),g+=D}if(at&&t.ellipse?t.ellipse(V,F,H,Y,Pt,j,gt,Bt):t.arc(V,F,ht,j,gt,Bt),J)break t;T&&(s=ni(j)*H+V,l=ii(j)*Y+F),u=ni(gt)*H+V,f=ii(gt)*Y+F;break;case Ut.R:s=u=a[b],l=f=a[b+1],v=a[b++],h=a[b++];var ct=a[b++],Vt=a[b++];if(c){var D=d[y++];if(g+D>m){var Lt=m-g;t.moveTo(v,h),t.lineTo(v+rd(Lt,ct),h),Lt-=ct,Lt>0&&t.lineTo(v+ct,h+rd(Lt,Vt)),Lt-=Vt,Lt>0&&t.lineTo(v+ad(ct-Lt,0),h+Vt),Lt-=ct,Lt>0&&t.lineTo(v,h+ad(Vt-Lt,0));break t}g+=D}t.rect(v,h,ct,Vt);break;case Ut.Z:if(c){var D=d[y++];if(g+D>m){var I=(m-g)/D;t.lineTo(u*(1-I)+s*I,f*(1-I)+l*I);break t}g+=D}t.closePath(),u=s,f=l}}},r.prototype.clone=function(){var t=new r,e=this.data;return t.data=e.slice?e.slice():Array.prototype.slice.call(e),t._len=this._len,t},r.prototype.canSave=function(){return!!this._saveData},r.CMD=Ut,r.initDefaultProps=(function(){var t=r.prototype;t._saveData=!0,t._ux=0,t._uy=0,t._pendingPtDist=0,t._version=0})(),r})();function mn(r,t,e,a,n,i,o){if(n===0)return!1;var s=n,l=0,u=r;if(o>t+s&&o>a+s||or+s&&i>e+s||it+v&&f>a+v&&f>i+v&&f>s+v||fr+v&&u>e+v&&u>n+v&&u>o+v||ut+u&&l>a+u&&l>i+u||lr+u&&s>e+u&&s>n+u||se||f+un&&(n+=Us);var h=Math.atan2(l,s);return h<0&&(h+=Us),h>=a&&h<=n||h+Us>=a&&h+Us<=n}function Oa(r,t,e,a,n,i){if(i>t&&i>a||in?s:0}var un=_a.CMD,oi=Math.PI*2,pN=1e-4;function gN(r,t){return Math.abs(r-t)t&&u>a&&u>i&&u>s||u1&&yN(),c=ge(t,a,i,s,Sr[0]),h>1&&(d=ge(t,a,i,s,Sr[1]))),h===2?gt&&s>a&&s>i||s=0&&u<=1){for(var f=0,v=Te(t,a,i,u),h=0;he||s<-e)return 0;var l=Math.sqrt(e*e-s*s);He[0]=-l,He[1]=l;var u=Math.abs(a-n);if(u<1e-4)return 0;if(u>=oi-1e-4){a=0,n=oi;var f=i?1:-1;return o>=He[0]+r&&o<=He[1]+r?f:0}if(a>n){var v=a;a=n,n=v}a<0&&(a+=oi,n+=oi);for(var h=0,c=0;c<2;c++){var d=He[c];if(d+r>o){var p=Math.atan2(s,d),f=i?1:-1;p<0&&(p=oi+p),(p>=a&&p<=n||p+oi>=a&&p+oi<=n)&&(p>Math.PI/2&&p1&&(e||(s+=Oa(l,u,f,v,a,n))),g&&(l=i[d],u=i[d+1],f=l,v=u),p){case un.M:f=i[d++],v=i[d++],l=f,u=v;break;case un.L:if(e){if(mn(l,u,i[d],i[d+1],t,a,n))return!0}else s+=Oa(l,u,i[d],i[d+1],a,n)||0;l=i[d++],u=i[d++];break;case un.C:if(e){if(cN(l,u,i[d++],i[d++],i[d++],i[d++],i[d],i[d+1],t,a,n))return!0}else s+=mN(l,u,i[d++],i[d++],i[d++],i[d++],i[d],i[d+1],a,n)||0;l=i[d++],u=i[d++];break;case un.Q:if(e){if(qM(l,u,i[d++],i[d++],i[d],i[d+1],t,a,n))return!0}else s+=_N(l,u,i[d++],i[d++],i[d],i[d+1],a,n)||0;l=i[d++],u=i[d++];break;case un.A:var y=i[d++],m=i[d++],_=i[d++],S=i[d++],x=i[d++],b=i[d++];d+=1;var w=!!(1-i[d++]);h=Math.cos(x)*_+y,c=Math.sin(x)*S+m,g?(f=h,v=c):s+=Oa(l,u,h,c,a,n);var T=(a-y)*S/_+y;if(e){if(dN(y,m,S,x,x+b,w,t,T,n))return!0}else s+=SN(y,m,S,x,x+b,w,T,n);l=Math.cos(x+b)*_+y,u=Math.sin(x+b)*S+m;break;case un.R:f=l=i[d++],v=u=i[d++];var C=i[d++],M=i[d++];if(h=f+C,c=v+M,e){if(mn(f,v,h,v,t,a,n)||mn(h,v,h,c,t,a,n)||mn(h,c,f,c,t,a,n)||mn(f,c,f,v,t,a,n))return!0}else s+=Oa(h,v,h,c,a,n),s+=Oa(f,c,f,v,a,n);break;case un.Z:if(e){if(mn(l,u,f,v,t,a,n))return!0}else s+=Oa(l,u,f,v,a,n);l=f,u=v;break}}return!e&&!gN(u,v)&&(s+=Oa(l,u,f,v,a,n)||0),s!==0}function xN(r,t,e){return jM(r,0,!1,t,e)}function bN(r,t,e,a){return jM(r,t,!0,e,a)}var Yv=nt({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},zi),wN={style:nt({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},Qh.style)},od=ya.concat(["invisible","culling","z","z2","zlevel","parent"]),Tt=(function(r){N(t,r);function t(e){return r.call(this,e)||this}return t.prototype.update=function(){var e=this;r.prototype.update.call(this);var a=this.style;if(a.decal){var n=this._decalEl=this._decalEl||new t;n.buildPath===t.prototype.buildPath&&(n.buildPath=function(l){e.buildPath(l,e.shape)}),n.silent=!0;var i=n.style;for(var o in a)i[o]!==a[o]&&(i[o]=a[o]);i.fill=a.fill?a.decal:null,i.decal=null,i.shadowColor=null,a.strokeFirst&&(i.stroke=null);for(var s=0;s.5?wg:a>.2?eO:Tg}else if(e)return Tg}return wg},t.prototype.getInsideTextStroke=function(e){var a=this.style.fill;if(X(a)){var n=this.__zr,i=!!(n&&n.isDarkMode()),o=tu(e,0)0))},t.prototype.hasFill=function(){var e=this.style,a=e.fill;return a!=null&&a!=="none"},t.prototype.getBoundingRect=function(){var e=this._rect,a=this.style,n=!e;if(n){var i=!1;this.path||(i=!0,this.createPathProxy());var o=this.path;(i||this.__dirty&Vo)&&(o.beginPath(),this.buildPath(o,this.shape,!1),this.pathUpdated()),e=o.getBoundingRect()}if(this._rect=e,this.hasStroke()&&this.path&&this.path.len()>0){var s=this._rectStroke||(this._rectStroke=e.clone());if(this.__dirty||n){s.copy(e);var l=a.strokeNoScale?this.getLineScale():1,u=a.lineWidth;if(!this.hasFill()){var f=this.strokeContainThreshold;u=Math.max(u,f??4)}l>1e-10&&(s.width+=u/l,s.height+=u/l,s.x-=u/l/2,s.y-=u/l/2)}return s}return e},t.prototype.contain=function(e,a){var n=this.transformCoordToLocal(e,a),i=this.getBoundingRect(),o=this.style;if(e=n[0],a=n[1],i.contain(e,a)){var s=this.path;if(this.hasStroke()){var l=o.lineWidth,u=o.strokeNoScale?this.getLineScale():1;if(u>1e-10&&(this.hasFill()||(l=Math.max(l,this.strokeContainThreshold)),bN(s,l/u,e,a)))return!0}if(this.hasFill())return xN(s,e,a)}return!1},t.prototype.dirtyShape=function(){this.__dirty|=Vo,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},t.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},t.prototype.animateShape=function(e){return this.animate("shape",e)},t.prototype.updateDuringAnimation=function(e){e==="style"?this.dirtyStyle():e==="shape"?this.dirtyShape():this.markRedraw()},t.prototype.attrKV=function(e,a){e==="shape"?this.setShape(a):r.prototype.attrKV.call(this,e,a)},t.prototype.setShape=function(e,a){var n=this.shape;return n||(n=this.shape={}),typeof e=="string"?n[e]=a:G(n,e),this.dirtyShape(),this},t.prototype.shapeChanged=function(){return!!(this.__dirty&Vo)},t.prototype.createStyle=function(e){return Lu(Yv,e)},t.prototype._innerSaveToNormal=function(e){r.prototype._innerSaveToNormal.call(this,e);var a=this._normalState;e.shape&&!a.shape&&(a.shape=G({},this.shape))},t.prototype._applyStateObj=function(e,a,n,i,o,s){r.prototype._applyStateObj.call(this,e,a,n,i,o,s);var l=!(a&&i),u;if(a&&a.shape?o?i?u=a.shape:(u=G({},n.shape),G(u,a.shape)):(u=G({},i?this.shape:n.shape),G(u,a.shape)):l&&(u=n.shape),u)if(o){this.shape=G({},this.shape);for(var f={},v=At(u),h=0;hn&&(v=s+l,s*=n/v,l*=n/v),u+f>n&&(v=u+f,u*=n/v,f*=n/v),l+u>i&&(v=l+u,l*=i/v,u*=i/v),s+f>i&&(v=s+f,s*=i/v,f*=i/v),r.moveTo(e+s,a),r.lineTo(e+n-l,a),l!==0&&r.arc(e+n-l,a+l,l,-Math.PI/2,0),r.lineTo(e+n,a+i-u),u!==0&&r.arc(e+n-u,a+i-u,u,0,Math.PI/2),r.lineTo(e+f,a+i),f!==0&&r.arc(e+f,a+i-f,f,Math.PI/2,Math.PI),r.lineTo(e,a+s),s!==0&&r.arc(e+s,a+s,s,Math.PI,Math.PI*1.5)}var Yo=Math.round;function rc(r,t,e){if(t){var a=t.x1,n=t.x2,i=t.y1,o=t.y2;r.x1=a,r.x2=n,r.y1=i,r.y2=o;var s=e&&e.lineWidth;return s&&(Yo(a*2)===Yo(n*2)&&(r.x1=r.x2=fr(a,s,!0)),Yo(i*2)===Yo(o*2)&&(r.y1=r.y2=fr(i,s,!0))),r}}function KM(r,t,e){if(t){var a=t.x,n=t.y,i=t.width,o=t.height;r.x=a,r.y=n,r.width=i,r.height=o;var s=e&&e.lineWidth;return s&&(r.x=fr(a,s,!0),r.y=fr(n,s,!0),r.width=Math.max(fr(a+i,s,!1)-r.x,i===0?0:1),r.height=Math.max(fr(n+o,s,!1)-r.y,o===0?0:1)),r}}function fr(r,t,e){if(!t)return r;var a=Yo(r*2);return(a+Yo(t))%2===0?a/2:(a+(e?1:-1))/2}var LN=(function(){function r(){this.x=0,this.y=0,this.width=0,this.height=0}return r})(),IN={},St=(function(r){N(t,r);function t(e){return r.call(this,e)||this}return t.prototype.getDefaultShape=function(){return new LN},t.prototype.buildPath=function(e,a){var n,i,o,s;if(this.subPixelOptimize){var l=KM(IN,a,this.style);n=l.x,i=l.y,o=l.width,s=l.height,l.r=a.r,a=l}else n=a.x,i=a.y,o=a.width,s=a.height;a.r?DN(e,a):e.rect(n,i,o,s)},t.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},t})(Tt);St.prototype.type="rect";var W1={fill:"#000"},U1=2,Qr={},PN={style:nt({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},Qh.style)},Mt=(function(r){N(t,r);function t(e){var a=r.call(this)||this;return a.type="text",a._children=[],a._defaultStyle=W1,a.attr(e),a}return t.prototype.childrenRef=function(){return this._children},t.prototype.update=function(){r.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var e=0;e0,I=0;I=0&&(P=b[L],P.align==="right");)this._placeToken(P,e,T,y,I,"right",_),C-=P.width,I-=P.width,L--;for(D+=(f-(D-g)-(m-I)-C)/2;M<=L;)P=b[M],this._placeToken(P,e,T,y,D+P.width/2,"center",_),D+=P.width,M++;y+=T}},t.prototype._placeToken=function(e,a,n,i,o,s,l){var u=a.rich[e.styleName]||{};u.text=e.text;var f=e.verticalAlign,v=i+n/2;f==="top"?v=i+e.height/2:f==="bottom"&&(v=i+n-e.height/2);var h=!e.isLineHolder&&sd(u);h&&this._renderBackground(u,a,s==="right"?o-e.width:s==="center"?o-e.width/2:o,v-e.height/2,e.width,e.height);var c=!!u.backgroundColor,d=e.textPadding;d&&(o=j1(o,s,d),v-=e.height/2-d[0]-e.innerHeight/2);var p=this._getOrCreateChild(os),g=p.createStyle();p.useStyle(g);var y=this._defaultStyle,m=!1,_=0,S=!1,x=q1("fill"in u?u.fill:"fill"in a?a.fill:(m=!0,y.fill)),b=$1("stroke"in u?u.stroke:"stroke"in a?a.stroke:!c&&!l&&(!y.autoStroke||m)?(_=U1,S=!0,y.stroke):null),w=u.textShadowBlur>0||a.textShadowBlur>0;g.text=e.text,g.x=o,g.y=v,w&&(g.shadowBlur=u.textShadowBlur||a.textShadowBlur||0,g.shadowColor=u.textShadowColor||a.textShadowColor||"transparent",g.shadowOffsetX=u.textShadowOffsetX||a.textShadowOffsetX||0,g.shadowOffsetY=u.textShadowOffsetY||a.textShadowOffsetY||0),g.textAlign=s,g.textBaseline="middle",g.font=e.font||$a,g.opacity=Qe(u.opacity,a.opacity,1),Z1(g,u),b&&(g.lineWidth=Qe(u.lineWidth,a.lineWidth,_),g.lineDash=Q(u.lineDash,a.lineDash),g.lineDashOffset=a.lineDashOffset||0,g.stroke=b),x&&(g.fill=x),p.setBoundingRect(Pg(g,e.contentWidth,e.contentHeight,S?0:null))},t.prototype._renderBackground=function(e,a,n,i,o,s){var l=e.backgroundColor,u=e.borderWidth,f=e.borderColor,v=l&&l.image,h=l&&!v,c=e.borderRadius,d=this,p,g;if(h||e.lineHeight||u&&f){p=this._getOrCreateChild(St),p.useStyle(p.createStyle()),p.style.fill=null;var y=p.shape;y.x=n,y.y=i,y.width=o,y.height=s,y.r=c,p.dirtyShape()}if(h){var m=p.style;m.fill=l||null,m.fillOpacity=Q(e.fillOpacity,1)}else if(v){g=this._getOrCreateChild(xe),g.onload=function(){d.dirtyStyle()};var _=g.style;_.image=l.image,_.x=n,_.y=i,_.width=o,_.height=s}if(u&&f){var m=p.style;m.lineWidth=u,m.stroke=f,m.strokeOpacity=Q(e.strokeOpacity,1),m.lineDash=e.borderDash,m.lineDashOffset=e.borderDashOffset||0,p.strokeContainThreshold=0,p.hasFill()&&p.hasStroke()&&(m.strokeFirst=!0,m.lineWidth*=2)}var S=(p||g).style;S.shadowBlur=e.shadowBlur||0,S.shadowColor=e.shadowColor||"transparent",S.shadowOffsetX=e.shadowOffsetX||0,S.shadowOffsetY=e.shadowOffsetY||0,S.opacity=Qe(e.opacity,a.opacity,1)},t.makeFont=function(e){var a="";return QM(e)&&(a=[e.fontStyle,e.fontWeight,JM(e.fontSize),e.fontFamily||"sans-serif"].join(" ")),a&&sr(a)||e.textFont||e.font},t})(Lr),RN={left:!0,right:1,center:1},kN={top:1,bottom:1,middle:1},Y1=["fontStyle","fontWeight","fontSize","fontFamily"];function JM(r){return typeof r=="string"&&(r.indexOf("px")!==-1||r.indexOf("rem")!==-1||r.indexOf("em")!==-1)?r:isNaN(+r)?pm+"px":r+"px"}function Z1(r,t){for(var e=0;e=0,i=!1;if(r instanceof Tt){var o=tD(r),s=n&&o.selectFill||o.normalFill,l=n&&o.selectStroke||o.normalStroke;if(go(s)||go(l)){a=a||{};var u=a.style||{};u.fill==="inherit"?(i=!0,a=G({},a),u=G({},u),u.fill=s):!go(u.fill)&&go(s)?(i=!0,a=G({},a),u=G({},u),u.fill=Vv(s)):!go(u.stroke)&&go(l)&&(i||(a=G({},a),u=G({},u)),u.stroke=Vv(l)),a.style=u}}if(a&&a.z2==null){i||(a=G({},a));var f=r.z2EmphasisLift;a.z2=r.z2+(f??bs)}return a}function GN(r,t,e){if(e&&e.z2==null){e=G({},e);var a=r.z2SelectLift;e.z2=r.z2+(a??ON)}return e}function FN(r,t,e){var a=yt(r.currentStates,t)>=0,n=r.style.opacity,i=a?null:zN(r,["opacity"],t,{opacity:1});e=e||{};var o=e.style||{};return o.opacity==null&&(e=G({},e),o=G({opacity:a?n:i.opacity*.1},o),e.style=o),e}function ld(r,t){var e=this.states[r];if(this.style){if(r==="emphasis")return VN(this,r,t,e);if(r==="blur")return FN(this,r,e);if(r==="select")return GN(this,r,e)}return e}function $i(r){r.stateProxy=ld;var t=r.getTextContent(),e=r.getTextGuideLine();t&&(t.stateProxy=ld),e&&(e.stateProxy=ld)}function eS(r,t){!sD(r,t)&&!r.__highByOuter&&an(r,eD)}function rS(r,t){!sD(r,t)&&!r.__highByOuter&&an(r,rD)}function ja(r,t){r.__highByOuter|=1<<(t||0),an(r,eD)}function Ka(r,t){!(r.__highByOuter&=~(1<<(t||0)))&&an(r,rD)}function nD(r){an(r,Vm)}function Gm(r){an(r,aD)}function iD(r){an(r,NN)}function oD(r){an(r,BN)}function sD(r,t){return r.__highDownSilentOnTouch&&t.zrByTouch}function lD(r){var t=r.getModel(),e=[],a=[];t.eachComponent(function(n,i){var o=Nm(i),s=n==="series",l=s?r.getViewOfSeriesModel(i):r.getViewOfComponentModel(i);!s&&a.push(l),o.isBlured&&(l.group.traverse(function(u){aD(u)}),s&&e.push(i)),o.isBlured=!1}),A(a,function(n){n&&n.toggleBlurSeries&&n.toggleBlurSeries(e,!1,t)})}function Ng(r,t,e,a){var n=a.getModel();e=e||"coordinateSystem";function i(u,f){for(var v=0;v0){var s={dataIndex:o,seriesIndex:e.seriesIndex};i!=null&&(s.dataType=i),t.push(s)}})}),t}function In(r,t,e){Ri(r,!0),an(r,$i),zg(r,t,e)}function XN(r){Ri(r,!1)}function $t(r,t,e,a){a?XN(r):In(r,t,e)}function zg(r,t,e){var a=ft(r);t!=null?(a.focus=t,a.blurScope=e):a.focus&&(a.focus=null)}var nS=["emphasis","blur","select"],$N={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function he(r,t,e,a){e=e||"itemStyle";for(var n=0;n1&&(o*=ud(d),s*=ud(d));var p=(n===i?-1:1)*ud((o*o*(s*s)-o*o*(c*c)-s*s*(h*h))/(o*o*(c*c)+s*s*(h*h)))||0,g=p*o*c/s,y=p*-s*h/o,m=(r+e)/2+uf(v)*g-lf(v)*y,_=(t+a)/2+lf(v)*g+uf(v)*y,S=lS([1,0],[(h-g)/o,(c-y)/s]),x=[(h-g)/o,(c-y)/s],b=[(-1*h-g)/o,(-1*c-y)/s],w=lS(x,b);if(Gg(x,b)<=-1&&(w=Ys),Gg(x,b)>=1&&(w=0),w<0){var T=Math.round(w/Ys*1e6)/1e6;w=Ys*2+T%2*Ys}f.addData(u,m,_,o,s,S,w,v,i)}var tB=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig,eB=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function rB(r){var t=new _a;if(!r)return t;var e=0,a=0,n=e,i=a,o,s=_a.CMD,l=r.match(tB);if(!l)return t;for(var u=0;uP*P+k*k&&(T=M,C=D),{cx:T,cy:C,x0:-f,y0:-v,x1:T*(n/x-1),y1:C*(n/x-1)}}function uB(r){var t;if(W(r)){var e=r.length;if(!e)return r;e===1?t=[r[0],r[0],0,0]:e===2?t=[r[0],r[0],r[1],r[1]]:e===3?t=r.concat(r[2]):t=r}else t=[r,r,r,r];return t}function fB(r,t){var e,a=Tl(t.r,0),n=Tl(t.r0||0,0),i=a>0,o=n>0;if(!(!i&&!o)){if(i||(a=n,n=0),n>a){var s=a;a=n,n=s}var l=t.startAngle,u=t.endAngle;if(!(isNaN(l)||isNaN(u))){var f=t.cx,v=t.cy,h=!!t.clockwise,c=fS(u-l),d=c>fd&&c%fd;if(d>Or&&(c=d),!(a>Or))r.moveTo(f,v);else if(c>fd-Or)r.moveTo(f+a*mo(l),v+a*si(l)),r.arc(f,v,a,l,u,!h),n>Or&&(r.moveTo(f+n*mo(u),v+n*si(u)),r.arc(f,v,n,u,l,h));else{var p=void 0,g=void 0,y=void 0,m=void 0,_=void 0,S=void 0,x=void 0,b=void 0,w=void 0,T=void 0,C=void 0,M=void 0,D=void 0,I=void 0,L=void 0,P=void 0,k=a*mo(l),R=a*si(l),O=n*mo(u),E=n*si(u),z=c>Or;if(z){var V=t.cornerRadius;V&&(e=uB(V),p=e[0],g=e[1],y=e[2],m=e[3]);var F=fS(a-n)/2;if(_=ta(F,y),S=ta(F,m),x=ta(F,p),b=ta(F,g),C=w=Tl(_,S),M=T=Tl(x,b),(w>Or||T>Or)&&(D=a*mo(u),I=a*si(u),L=n*mo(l),P=n*si(l),cOr){var at=ta(y,C),gt=ta(m,C),J=ff(L,P,k,R,a,at,h),ct=ff(D,I,O,E,a,gt,h);r.moveTo(f+J.cx+J.x0,v+J.cy+J.y0),C0&&r.arc(f+J.cx,v+J.cy,at,Oe(J.y0,J.x0),Oe(J.y1,J.x1),!h),r.arc(f,v,a,Oe(J.cy+J.y1,J.cx+J.x1),Oe(ct.cy+ct.y1,ct.cx+ct.x1),!h),gt>0&&r.arc(f+ct.cx,v+ct.cy,gt,Oe(ct.y1,ct.x1),Oe(ct.y0,ct.x0),!h))}else r.moveTo(f+k,v+R),r.arc(f,v,a,l,u,!h);if(!(n>Or)||!z)r.lineTo(f+O,v+E);else if(M>Or){var at=ta(p,M),gt=ta(g,M),J=ff(O,E,D,I,n,-gt,h),ct=ff(k,R,L,P,n,-at,h);r.lineTo(f+J.cx+J.x0,v+J.cy+J.y0),M0&&r.arc(f+J.cx,v+J.cy,gt,Oe(J.y0,J.x0),Oe(J.y1,J.x1),!h),r.arc(f,v,n,Oe(J.cy+J.y1,J.cx+J.x1),Oe(ct.cy+ct.y1,ct.cx+ct.x1),h),at>0&&r.arc(f+ct.cx,v+ct.cy,at,Oe(ct.y1,ct.x1),Oe(ct.y0,ct.x0),!h))}else r.lineTo(f+O,v+E),r.arc(f,v,n,u,l,h)}r.closePath()}}}var vB=(function(){function r(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0,this.cornerRadius=0}return r})(),ke=(function(r){N(t,r);function t(e){return r.call(this,e)||this}return t.prototype.getDefaultShape=function(){return new vB},t.prototype.buildPath=function(e,a){fB(e,a)},t.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},t})(Tt);ke.prototype.type="sector";var hB=(function(){function r(){this.cx=0,this.cy=0,this.r=0,this.r0=0}return r})(),ws=(function(r){N(t,r);function t(e){return r.call(this,e)||this}return t.prototype.getDefaultShape=function(){return new hB},t.prototype.buildPath=function(e,a){var n=a.cx,i=a.cy,o=Math.PI*2;e.moveTo(n+a.r,i),e.arc(n,i,a.r,0,o,!1),e.moveTo(n+a.r0,i),e.arc(n,i,a.r0,0,o,!0)},t})(Tt);ws.prototype.type="ring";function cB(r,t,e,a){var n=[],i=[],o=[],s=[],l,u,f,v;if(a){f=[1/0,1/0],v=[-1/0,-1/0];for(var h=0,c=r.length;h=2){if(a){var i=cB(n,a,e,t.smoothConstraint);r.moveTo(n[0][0],n[0][1]);for(var o=n.length,s=0;s<(e?o:o-1);s++){var l=i[s*2],u=i[s*2+1],f=n[(s+1)%o];r.bezierCurveTo(l[0],l[1],u[0],u[1],f[0],f[1])}}else{r.moveTo(n[0][0],n[0][1]);for(var s=1,v=n.length;sui[1]){if(i=!1,we.negativeSize||a)return i;var l=vf(ui[0]-li[1]),u=vf(li[0]-ui[1]);vd(l,u)>cf.len()&&(l=u||!we.bidirectional)&&(st.scale(hf,s,-u*n),we.useDir&&we.calcDirMTV()))}}return i},r.prototype._getProjMinMaxOnAxis=function(t,e,a){for(var n=this._axes[t],i=this._origin,o=e[0].dot(n)+i[t],s=o,l=o,u=1;u0){var v=f.duration,h=f.delay,c=f.easing,d={duration:v,delay:h||0,easing:c,done:i,force:!!i||!!o,setToFinal:!u,scope:r,during:o};s?t.animateFrom(e,d):t.animateTo(e,d)}else t.stopAnimation(),!s&&t.attr(e),o&&o(1),i&&i()}function It(r,t,e,a,n,i){Um("update",r,t,e,a,n,i)}function Zt(r,t,e,a,n,i){Um("enter",r,t,e,a,n,i)}function Qo(r){if(!r.__zr)return!0;for(var t=0;tua(i[1])?i[0]>0?"right":"left":i[1]>0?"bottom":"top"}function cS(r){return!r.isGroup}function CB(r){return r.shape!=null}function Bu(r,t,e){if(!r||!t)return;function a(o){var s={};return o.traverse(function(l){cS(l)&&l.anid&&(s[l.anid]=l)}),s}function n(o){var s={x:o.x,y:o.y,rotation:o.rotation};return CB(o)&&(s.shape=et(o.shape)),s}var i=a(r);t.traverse(function(o){if(cS(o)&&o.anid){var s=i[o.anid];if(s){var l=n(o);o.attr(n(s)),It(o,l,e,ft(o).dataIndex)}}})}function Xm(r,t){return U(r,function(e){var a=e[0];a=re(a,t.x),a=vr(a,t.x+t.width);var n=e[1];return n=re(n,t.y),n=vr(n,t.y+t.height),[a,n]})}function wD(r,t){var e=re(r.x,t.x),a=vr(r.x+r.width,t.x+t.width),n=re(r.y,t.y),i=vr(r.y+r.height,t.y+t.height);if(a>=e&&i>=n)return{x:e,y:n,width:a-e,height:i-n}}function As(r,t,e){var a=G({rectHover:!0},t),n=a.style={strokeNoScale:!0};if(e=e||{x:-1,y:-1,width:2,height:2},r)return r.indexOf("image://")===0?(n.image=r.slice(8),nt(n,e),new xe(a)):ss(r.replace("path://",""),a,e,"center")}function Cl(r,t,e,a,n){for(var i=0,o=n[n.length-1];i1)return!1;var g=hd(c,d,f,v)/h;return!(g<0||g>1)}function hd(r,t,e,a){return r*a-e*t}function AB(r){return r<=1e-6&&r>=-1e-6}function qi(r,t,e,a,n){return t==null||(Dt(t)?qt[0]=qt[1]=qt[2]=qt[3]=t:(qt[0]=t[0],qt[1]=t[1],qt[2]=t[2],qt[3]=t[3]),a&&(qt[0]=re(0,qt[0]),qt[1]=re(0,qt[1]),qt[2]=re(0,qt[2]),qt[3]=re(0,qt[3])),e&&(qt[0]=-qt[0],qt[1]=-qt[1],qt[2]=-qt[2],qt[3]=-qt[3]),dS(r,qt,"x","width",3,1,n&&n[0]||0),dS(r,qt,"y","height",0,2,n&&n[1]||0)),r}var qt=[0,0,0,0];function dS(r,t,e,a,n,i,o){var s=t[i]+t[n],l=r[a];r[a]+=s,o=re(0,vr(o,l)),r[a]=0?-t[n]:t[i]>=0?l+t[i]:ua(s)>1e-8?(l-o)*t[n]/s:0):r[e]-=t[n]}function nn(r){var t=r.itemTooltipOption,e=r.componentModel,a=r.itemName,n=X(t)?{formatter:t}:t,i=e.mainType,o=e.componentIndex,s={componentType:i,name:a,$vars:["name"]};s[i+"Index"]=o;var l=r.formatterParamsExtra;l&&A(At(l),function(f){q(s,f)||(s[f]=l[f],s.$vars.push(f))});var u=ft(r.el);u.componentMainType=i,u.componentIndex=o,u.tooltipConfig={name:a,option:nt({content:a,encodeHTMLContent:!0,formatterParams:s},n)}}function Hg(r,t){var e;r.isGroup&&(e=t(r)),e||r.traverse(t)}function Wn(r,t){if(r)if(W(r))for(var e=0;et&&(t=o),ot&&(e=t=0),{min:e,max:t}}function oc(r,t,e){AD(r,t,e,-1/0)}function AD(r,t,e,a){if(r.ignoreModelZ)return a;var n=r.getTextContent(),i=r.getTextGuideLine(),o=r.isGroup;if(o)for(var s=r.childrenRef(),l=0;l=0&&s.push(l)}),s}}function Un(r,t){return mt(mt({},r,!0),t,!0)}const zB={time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst",custom:"Custom chart",chart:"Chart"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}},VB={time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图",custom:"自定义图表",chart:"图表"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}};var jv="ZH",Km="EN",ts=Km,_v={},Jm={},RD=Ct.domSupported?(function(){var r=(document.documentElement.lang||navigator.language||navigator.browserLanguage||ts).toUpperCase();return r.indexOf(jv)>-1?jv:ts})():ts;function Qm(r,t){r=r.toUpperCase(),Jm[r]=new wt(t),_v[r]=t}function GB(r){if(X(r)){var t=_v[r.toUpperCase()]||{};return r===jv||r===Km?et(t):mt(et(t),et(_v[ts]),!1)}else return mt(et(r),et(_v[ts]),!1)}function Ug(r){return Jm[r]}function FB(){return Jm[ts]}Qm(Km,zB);Qm(jv,VB);var Yg=null;function HB(r){Yg||(Yg=r)}function se(){return Yg}var t0=1e3,e0=t0*60,Wl=e0*60,Tr=Wl*24,_S=Tr*365,WB={year:/({yyyy}|{yy})/,month:/({MMMM}|{MMM}|{MM}|{M})/,day:/({dd}|{d})/,hour:/({HH}|{H}|{hh}|{h})/,minute:/({mm}|{m})/,second:/({ss}|{s})/,millisecond:/({SSS}|{S})/},Sv={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}"},UB="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}",pf="{yyyy}-{MM}-{dd}",SS={year:"{yyyy}",month:"{yyyy}-{MM}",day:pf,hour:pf+" "+Sv.hour,minute:pf+" "+Sv.minute,second:pf+" "+Sv.second,millisecond:UB},ar=["year","month","day","hour","minute","second","millisecond"],YB=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function ZB(r){return!X(r)&&!tt(r)?XB(r):r}function XB(r){r=r||{};var t={},e=!0;return A(ar,function(a){e&&(e=r[a]==null)}),A(ar,function(a,n){var i=r[a];t[a]={};for(var o=null,s=n;s>=0;s--){var l=ar[s],u=it(i)&&!W(i)?i[l]:i,f=void 0;W(u)?(f=u.slice(),o=f[0]||""):X(u)?(o=u,f=[o]):(o==null?o=Sv[a]:WB[l].test(o)||(o=t[l][l][0]+" "+o),f=[o],e&&(f[1]="{primary|"+o+"}")),t[a][l]=f}}),t}function We(r,t){return r+="","0000".substr(0,t-r.length)+r}function Ul(r){switch(r){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return r}}function $B(r){return r===Ul(r)}function qB(r){switch(r){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}function zu(r,t,e,a){var n=wa(r),i=n[kD(e)](),o=n[r0(e)]()+1,s=Math.floor((o-1)/3)+1,l=n[a0(e)](),u=n["get"+(e?"UTC":"")+"Day"](),f=n[n0(e)](),v=(f-1)%12+1,h=n[i0(e)](),c=n[o0(e)](),d=n[s0(e)](),p=f>=12?"pm":"am",g=p.toUpperCase(),y=a instanceof wt?a:Ug(a||RD)||FB(),m=y.getModel("time"),_=m.get("month"),S=m.get("monthAbbr"),x=m.get("dayOfWeek"),b=m.get("dayOfWeekAbbr");return(t||"").replace(/{a}/g,p+"").replace(/{A}/g,g+"").replace(/{yyyy}/g,i+"").replace(/{yy}/g,We(i%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,_[o-1]).replace(/{MMM}/g,S[o-1]).replace(/{MM}/g,We(o,2)).replace(/{M}/g,o+"").replace(/{dd}/g,We(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,x[u]).replace(/{ee}/g,b[u]).replace(/{e}/g,u+"").replace(/{HH}/g,We(f,2)).replace(/{H}/g,f+"").replace(/{hh}/g,We(v+"",2)).replace(/{h}/g,v+"").replace(/{mm}/g,We(h,2)).replace(/{m}/g,h+"").replace(/{ss}/g,We(c,2)).replace(/{s}/g,c+"").replace(/{SSS}/g,We(d,3)).replace(/{S}/g,d+"")}function jB(r,t,e,a,n){var i=null;if(X(e))i=e;else if(tt(e)){var o={time:r.time,level:r.time.level},s=se();s&&s.makeAxisLabelFormatterParamBreak(o,r.break),i=e(r.value,t,o)}else{var l=r.time;if(l){var u=e[l.lowerTimeUnit][l.upperTimeUnit];i=u[Math.min(l.level,u.length-1)]||""}else{var f=Xo(r.value,n);i=e[f][f][0]}}return zu(new Date(r.value),i,n,a)}function Xo(r,t){var e=wa(r),a=e[r0(t)]()+1,n=e[a0(t)](),i=e[n0(t)](),o=e[i0(t)](),s=e[o0(t)](),l=e[s0(t)](),u=l===0,f=u&&s===0,v=f&&o===0,h=v&&i===0,c=h&&n===1,d=c&&a===1;return d?"year":c?"month":h?"day":v?"hour":f?"minute":u?"second":"millisecond"}function Kv(r,t,e){switch(t){case"year":r[ED(e)](0);case"month":r[OD(e)](1);case"day":r[ND(e)](0);case"hour":r[BD(e)](0);case"minute":r[zD(e)](0);case"second":r[VD(e)](0)}return r}function kD(r){return r?"getUTCFullYear":"getFullYear"}function r0(r){return r?"getUTCMonth":"getMonth"}function a0(r){return r?"getUTCDate":"getDate"}function n0(r){return r?"getUTCHours":"getHours"}function i0(r){return r?"getUTCMinutes":"getMinutes"}function o0(r){return r?"getUTCSeconds":"getSeconds"}function s0(r){return r?"getUTCMilliseconds":"getMilliseconds"}function KB(r){return r?"setUTCFullYear":"setFullYear"}function ED(r){return r?"setUTCMonth":"setMonth"}function OD(r){return r?"setUTCDate":"setDate"}function ND(r){return r?"setUTCHours":"setHours"}function BD(r){return r?"setUTCMinutes":"setMinutes"}function zD(r){return r?"setUTCSeconds":"setSeconds"}function VD(r){return r?"setUTCMilliseconds":"setMilliseconds"}function JB(r,t,e,a,n,i,o,s){var l=new Mt({style:{text:r,font:t,align:e,verticalAlign:a,padding:n,rich:i,overflow:o?"truncate":null,lineHeight:s}});return l.getBoundingRect()}function l0(r){if(!Im(r))return X(r)?r:"-";var t=(r+"").split(".");return t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function u0(r,t){return r=(r||"").toLowerCase().replace(/-(.)/g,function(e,a){return a.toUpperCase()}),t&&r&&(r=r.charAt(0).toUpperCase()+r.slice(1)),r}var Ls=Du;function Zg(r,t,e){var a="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}";function n(f){return f&&sr(f)?f:"-"}function i(f){return!!(f!=null&&!isNaN(f)&&isFinite(f))}var o=t==="time",s=r instanceof Date;if(o||s){var l=o?wa(r):r;if(isNaN(+l)){if(s)return"-"}else return zu(l,a,e)}if(t==="ordinal")return Pv(r)?n(r):Dt(r)&&i(r)?r+"":"-";var u=ma(r);return i(u)?l0(u):Pv(r)?n(r):typeof r=="boolean"?r+"":"-"}var xS=["a","b","c","d","e","f","g"],pd=function(r,t){return"{"+r+(t??"")+"}"};function f0(r,t,e){W(t)||(t=[t]);var a=t.length;if(!a)return"";for(var n=t[0].$vars||[],i=0;i':'';var o=e.markerId||"markerX";return{renderMode:i,content:"{"+o+"|} ",style:n==="subItem"?{width:4,height:4,borderRadius:2,backgroundColor:a}:{width:10,height:10,borderRadius:5,backgroundColor:a}}}function tz(r,t,e){(r==="week"||r==="month"||r==="quarter"||r==="half-year"||r==="year")&&(r=`MM-dd +yyyy`);var a=wa(t),n=e?"getUTC":"get",i=a[n+"FullYear"](),o=a[n+"Month"]()+1,s=a[n+"Date"](),l=a[n+"Hours"](),u=a[n+"Minutes"](),f=a[n+"Seconds"](),v=a[n+"Milliseconds"]();return r=r.replace("MM",We(o,2)).replace("M",o).replace("yyyy",i).replace("yy",We(i%100+"",2)).replace("dd",We(s,2)).replace("d",s).replace("hh",We(l,2)).replace("h",l).replace("mm",We(u,2)).replace("m",u).replace("ss",We(f,2)).replace("s",f).replace("SSS",We(v,3)),r}function ez(r){return r&&r.charAt(0).toUpperCase()+r.substr(1)}function Ki(r,t){return t=t||"transparent",X(r)?r:it(r)&&r.colorStops&&(r.colorStops[0]||{}).color||t}function Jv(r,t){if(t==="_blank"||t==="blank"){var e=window.open();e.opener=null,e.location.href=r}else window.open(r,t)}var xv={},gd={},Is=(function(){function r(){this._normalMasterList=[],this._nonSeriesBoxMasterList=[]}return r.prototype.create=function(t,e){this._nonSeriesBoxMasterList=a(xv),this._normalMasterList=a(gd);function a(n,i){var o=[];return A(n,function(s,l){var u=s.create(t,e);o=o.concat(u||[])}),o}},r.prototype.update=function(t,e){A(this._normalMasterList,function(a){a.update&&a.update(t,e)})},r.prototype.getCoordinateSystems=function(){return this._normalMasterList.concat(this._nonSeriesBoxMasterList)},r.register=function(t,e){if(t==="matrix"||t==="calendar"){xv[t]=e;return}gd[t]=e},r.get=function(t){return gd[t]||xv[t]},r})();function rz(r){return!!xv[r]}var Xg={coord:1,coord2:2};function az(r){FD.set(r.fullType,{getCoord2:void 0}).getCoord2=r.getCoord2}var FD=K();function nz(r){var t=r.getShallow("coord",!0),e=Xg.coord;if(t==null){var a=FD.get(r.type);a&&a.getCoord2&&(e=Xg.coord2,t=a.getCoord2(r))}return{coord:t,from:e}}var sa={none:0,dataCoordSys:1,boxCoordSys:2};function HD(r,t){var e=r.getShallow("coordinateSystem"),a=r.getShallow("coordinateSystemUsage",!0),n=sa.none;if(e){var i=r.mainType==="series";a==null&&(a=i?"data":"box"),a==="data"?(n=sa.dataCoordSys,i||(n=sa.none)):a==="box"&&(n=sa.boxCoordSys,!i&&!rz(e)&&(n=sa.none))}return{coordSysType:e,kind:n}}function Vu(r){var t=r.targetModel,e=r.coordSysType,a=r.coordSysProvider,n=r.isDefaultDataCoordSys;r.allowNotFound;var i=HD(t),o=i.kind,s=i.coordSysType;if(n&&o!==sa.dataCoordSys&&(o=sa.dataCoordSys,s=e),o===sa.none||s!==e)return!1;var l=a(e,t);return l?(o===sa.dataCoordSys?t.coordinateSystem=l:t.boxCoordinateSystem=l,!0):!1}var WD=function(r,t){var e=t.getReferringComponents(r,jt).models[0];return e&&e.coordinateSystem},bv=A,UD=["left","right","top","bottom","width","height"],ki=[["width","left","right"],["height","top","bottom"]];function v0(r,t,e,a,n){var i=0,o=0;a==null&&(a=1/0),n==null&&(n=1/0);var s=0;t.eachChild(function(l,u){var f=l.getBoundingRect(),v=t.childAt(u+1),h=v&&v.getBoundingRect(),c,d;if(r==="horizontal"){var p=f.width+(h?-h.x+f.x:0);c=i+p,c>a||l.newline?(i=0,c=p,o+=s+e,s=f.height):s=Math.max(s,f.height)}else{var g=f.height+(h?-h.y+f.y:0);d=o+g,d>n||l.newline?(i+=s+e,o=0,d=g,s=f.width):s=Math.max(s,f.width)}l.newline||(l.x=i,l.y=o,l.markRedraw(),r==="horizontal"?i=c+e:o=d+e)})}var Gi=v0;pt(v0,"vertical");pt(v0,"horizontal");function YD(r,t){return{left:r.getShallow("left",t),top:r.getShallow("top",t),right:r.getShallow("right",t),bottom:r.getShallow("bottom",t),width:r.getShallow("width",t),height:r.getShallow("height",t)}}function iz(r,t){var e=de(r,t,{enableLayoutOnlyByCenter:!0}),a=r.getBoxLayoutParams(),n,i;if(e.type===Al.point)i=e.refPoint,n=Xt(a,{width:t.getWidth(),height:t.getHeight()});else{var o=r.get("center"),s=W(o)?o:[o,o];n=Xt(a,e.refContainer),i=e.boxCoordFrom===Xg.coord2?e.refPoint:[Z(s[0],n.width)+n.x,Z(s[1],n.height)+n.y]}return{viewRect:n,center:i}}function ZD(r,t){var e=iz(r,t),a=e.viewRect,n=e.center,i=r.get("radius");W(i)||(i=[0,i]);var o=Z(a.width,t.getWidth()),s=Z(a.height,t.getHeight()),l=Math.min(o,s),u=Z(i[0],l/2),f=Z(i[1],l/2);return{cx:n[0],cy:n[1],r0:u,r:f,viewRect:a}}function Xt(r,t,e){e=Ls(e||0);var a=t.width,n=t.height,i=Z(r.left,a),o=Z(r.top,n),s=Z(r.right,a),l=Z(r.bottom,n),u=Z(r.width,a),f=Z(r.height,n),v=e[2]+e[0],h=e[1]+e[3],c=r.aspect;switch(isNaN(u)&&(u=a-s-h-i),isNaN(f)&&(f=n-l-v-o),c!=null&&(isNaN(u)&&isNaN(f)&&(c>a/n?u=a*.8:f=n*.8),isNaN(u)&&(u=c*f),isNaN(f)&&(f=u/c)),isNaN(i)&&(i=a-s-u-h),isNaN(o)&&(o=n-l-f-v),r.left||r.right){case"center":i=a/2-u/2-e[3];break;case"right":i=a-u-h;break}switch(r.top||r.bottom){case"middle":case"center":o=n/2-f/2-e[0];break;case"bottom":o=n-f-v;break}i=i||0,o=o||0,isNaN(u)&&(u=a-h-i-(s||0)),isNaN(f)&&(f=n-v-o-(l||0));var d=new lt((t.x||0)+i+e[3],(t.y||0)+o+e[0],u,f);return d.margin=e,d}function XD(r,t,e){var a=r.getShallow("preserveAspect",!0);if(!a)return t;var n=t.width/t.height;if(Math.abs(Math.atan(e)-Math.atan(n))<1e-9)return t;var i=r.getShallow("preserveAspectAlign",!0),o=r.getShallow("preserveAspectVerticalAlign",!0),s={width:t.width,height:t.height},l=a==="cover";return n>e&&!l||n=p)return v;for(var g=0;g=0;l--)s=mt(s,n[l],!0);a.defaultOption=s}return a.defaultOption},t.prototype.getReferringComponents=function(e,a){var n=e+"Index",i=e+"Id";return xs(this.ecModel,e,{index:this.get(n,!0),id:this.get(i,!0)},a)},t.prototype.getBoxLayoutParams=function(){return YD(this,!1)},t.prototype.getZLevelKey=function(){return""},t.prototype.setZLevel=function(e){this.option.zlevel=e},t.protoInitialize=(function(){var e=t.prototype;e.type="component",e.id="",e.name="",e.mainType="",e.subType="",e.componentIndex=0})(),t})(wt);WM(xt,wt);Kh(xt);NB(xt);BB(xt,lz);function lz(r){var t=[];return A(xt.getClassesByMainType(r),function(e){t=t.concat(e.dependencies||e.prototype.dependencies||[])}),t=U(t,function(e){return fa(e).main}),r!=="dataset"&&yt(t,"dataset")<=0&&t.unshift("dataset"),t}var B={color:{},darkColor:{},size:{}},te=B.color={theme:["#5070dd","#b6d634","#505372","#ff994d","#0ca8df","#ffd10a","#fb628b","#785db0","#3fbe95"],neutral00:"#fff",neutral05:"#f4f7fd",neutral10:"#e8ebf0",neutral15:"#dbdee4",neutral20:"#cfd2d7",neutral25:"#c3c5cb",neutral30:"#b7b9be",neutral35:"#aaacb2",neutral40:"#9ea0a5",neutral45:"#929399",neutral50:"#86878c",neutral55:"#797b7f",neutral60:"#6d6e73",neutral65:"#616266",neutral70:"#54555a",neutral75:"#48494d",neutral80:"#3c3c41",neutral85:"#303034",neutral90:"#232328",neutral95:"#17171b",neutral99:"#000",accent05:"#eff1f9",accent10:"#e0e4f2",accent15:"#d0d6ec",accent20:"#c0c9e6",accent25:"#b1bbdf",accent30:"#a1aed9",accent35:"#91a0d3",accent40:"#8292cc",accent45:"#7285c6",accent50:"#6578ba",accent55:"#5c6da9",accent60:"#536298",accent65:"#4a5787",accent70:"#404c76",accent75:"#374165",accent80:"#2e3654",accent85:"#252b43",accent90:"#1b2032",accent95:"#121521",transparent:"rgba(0,0,0,0)",highlight:"rgba(255,231,130,0.8)"};G(te,{primary:te.neutral80,secondary:te.neutral70,tertiary:te.neutral60,quaternary:te.neutral50,disabled:te.neutral20,border:te.neutral30,borderTint:te.neutral20,borderShade:te.neutral40,background:te.neutral05,backgroundTint:"rgba(234,237,245,0.5)",backgroundTransparent:"rgba(255,255,255,0)",backgroundShade:te.neutral10,shadow:"rgba(0,0,0,0.2)",shadowTint:"rgba(129,130,136,0.2)",axisLine:te.neutral70,axisLineTint:te.neutral40,axisTick:te.neutral70,axisTickMinor:te.neutral60,axisLabel:te.neutral70,axisSplitLine:te.neutral15,axisMinorSplitLine:te.neutral05});for(var fi in te)if(te.hasOwnProperty(fi)){var bS=te[fi];fi==="theme"?B.darkColor.theme=te.theme.slice():fi==="highlight"?B.darkColor.highlight="rgba(255,231,130,0.4)":fi.indexOf("accent")===0?B.darkColor[fi]=Wa(bS,null,function(r){return r*.5},function(r){return Math.min(1,1.3-r)}):B.darkColor[fi]=Wa(bS,null,function(r){return r*.9},function(r){return 1-Math.pow(r,1.5)})}B.size={xxs:2,xs:5,s:10,m:15,l:20,xl:30,xxl:40,xxxl:50};var qD="";typeof navigator<"u"&&(qD=navigator.platform||"");var _o="rgba(0, 0, 0, 0.2)",jD=B.color.theme[0],uz=Wa(jD,null,null,.9);const fz={darkMode:"auto",colorBy:"series",color:B.color.theme,gradientColor:[uz,jD],aria:{decal:{decals:[{color:_o,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:_o,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:_o,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:_o,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:_o,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:_o,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:qD.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1};var KD=K(["tooltip","label","itemName","itemId","itemGroupId","itemChildGroupId","seriesName"]),hr="original",Me="arrayRows",cr="objectRows",$r="keyedColumns",Rn="typedArray",JD="unknown",Ur="column",io="row",De={Must:1,Might:2,Not:3},QD=bt();function vz(r){QD(r).datasetMap=K()}function tL(r,t,e){var a={},n=c0(t);if(!n||!r)return a;var i=[],o=[],s=t.ecModel,l=QD(s).datasetMap,u=n.uid+"_"+e.seriesLayoutBy,f,v;r=r.slice(),A(r,function(p,g){var y=it(p)?p:r[g]={name:p};y.type==="ordinal"&&f==null&&(f=g,v=d(y)),a[y.name]=[]});var h=l.get(u)||l.set(u,{categoryWayDim:v,valueWayDim:0});A(r,function(p,g){var y=p.name,m=d(p);if(f==null){var _=h.valueWayDim;c(a[y],_,m),c(o,_,m),h.valueWayDim+=m}else if(f===g)c(a[y],0,m),c(i,0,m);else{var _=h.categoryWayDim;c(a[y],_,m),c(o,_,m),h.categoryWayDim+=m}});function c(p,g,y){for(var m=0;mt)return r[a];return r[e-1]}function aL(r,t,e,a,n,i,o){i=i||r;var s=t(i),l=s.paletteIdx||0,u=s.paletteNameMap=s.paletteNameMap||{};if(u.hasOwnProperty(n))return u[n];var f=o==null||!a?e:gz(a,o);if(f=f||e,!(!f||!f.length)){var v=f[l];return n&&(u[n]=v),s.paletteIdx=(l+1)%f.length,v}}function yz(r,t){t(r).paletteIdx=0,t(r).paletteNameMap={}}var gf,Zs,TS,CS="\0_ec_inner",mz=1,p0=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.init=function(e,a,n,i,o,s){i=i||{},this.option=null,this._theme=new wt(i),this._locale=new wt(o),this._optionManager=s},t.prototype.setOption=function(e,a,n){var i=DS(a);this._optionManager.setOption(e,n,i),this._resetOption(null,i)},t.prototype.resetOption=function(e,a){return this._resetOption(e,DS(a))},t.prototype._resetOption=function(e,a){var n=!1,i=this._optionManager;if(!e||e==="recreate"){var o=i.mountOption(e==="recreate");!this.option||e==="recreate"?TS(this,o):(this.restoreData(),this._mergeOption(o,a)),n=!0}if((e==="timeline"||e==="media")&&this.restoreData(),!e||e==="recreate"||e==="timeline"){var s=i.getTimelineOption(this);s&&(n=!0,this._mergeOption(s,a))}if(!e||e==="recreate"||e==="media"){var l=i.getMediaOption(this);l.length&&A(l,function(u){n=!0,this._mergeOption(u,a)},this)}return n},t.prototype.mergeOption=function(e){this._mergeOption(e,null)},t.prototype._mergeOption=function(e,a){var n=this.option,i=this._componentsMap,o=this._componentsCount,s=[],l=K(),u=a&&a.replaceMergeMainTypeMap;vz(this),A(e,function(v,h){v!=null&&(xt.hasClass(h)?h&&(s.push(h),l.set(h,!0)):n[h]=n[h]==null?et(v):mt(n[h],v,!0))}),u&&u.each(function(v,h){xt.hasClass(h)&&!l.get(h)&&(s.push(h),l.set(h,!0))}),xt.topologicalTravel(s,xt.getAllClassMainTypes(),f,this);function f(v){var h=dz(this,v,Ht(e[v])),c=i.get(v),d=c?u&&u.get(v)?"replaceMerge":"normalMerge":"replaceAll",p=zM(c,h,d);kO(p,v,xt),n[v]=null,i.set(v,null),o.set(v,0);var g=[],y=[],m=0,_;A(p,function(S,x){var b=S.existing,w=S.newOption;if(!w)b&&(b.mergeOption({},this),b.optionUpdated({},!1));else{var T=v==="series",C=xt.getClass(v,S.keyInfo.subType,!T);if(!C)return;if(v==="tooltip"){if(_)return;_=!0}if(b&&b.constructor===C)b.name=S.keyInfo.name,b.mergeOption(w,this),b.optionUpdated(w,!1);else{var M=G({componentIndex:x},S.keyInfo);b=new C(w,this,this,M),G(b,M),S.brandNew&&(b.__requireNewView=!0),b.init(w,this,this),b.optionUpdated(null,!0)}}b?(g.push(b.option),y.push(b),m++):(g.push(void 0),y.push(void 0))},this),n[v]=g,i.set(v,y),o.set(v,m),v==="series"&&gf(this)}this._seriesIndices||gf(this)},t.prototype.getOption=function(){var e=et(this.option);return A(e,function(a,n){if(xt.hasClass(n)){for(var i=Ht(a),o=i.length,s=!1,l=o-1;l>=0;l--)i[l]&&!ru(i[l])?s=!0:(i[l]=null,!s&&o--);i.length=o,e[n]=i}}),delete e[CS],e},t.prototype.setTheme=function(e){this._theme=new wt(e),this._resetOption("recreate",null)},t.prototype.getTheme=function(){return this._theme},t.prototype.getLocaleModel=function(){return this._locale},t.prototype.setUpdatePayload=function(e){this._payload=e},t.prototype.getUpdatePayload=function(){return this._payload},t.prototype.getComponent=function(e,a){var n=this._componentsMap.get(e);if(n){var i=n[a||0];if(i)return i;if(a==null){for(var o=0;o=t:e==="max"?r<=t:r===t}function Mz(r,t){return r.join(",")===t.join(",")}var Er=A,lu=it,LS=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function yd(r){var t=r&&r.itemStyle;if(t)for(var e=0,a=LS.length;e0?e[o-1].seriesModel:null)}),Nz(e)}})}function Nz(r){A(r,function(t,e){var a=[],n=[NaN,NaN],i=[t.stackResultDimension,t.stackedOverDimension],o=t.data,s=t.isStackedByIndex,l=t.seriesModel.get("stackStrategy")||"samesign";o.modify(i,function(u,f,v){var h=o.get(t.stackedDimension,v);if(isNaN(h))return n;var c,d;s?d=o.getRawIndex(v):c=o.get(t.stackedByDimension,v);for(var p=NaN,g=e-1;g>=0;g--){var y=r[g];if(s||(d=y.data.rawIndexOf(y.stackedByDimension,c)),d>=0){var m=y.data.getByRawIndex(y.stackResultDimension,d);if(l==="all"||l==="positive"&&m>0||l==="negative"&&m<0||l==="samesign"&&h>=0&&m>0||l==="samesign"&&h<=0&&m<0){h=SO(h,m),p=m;break}}}return a[0]=h,a[1]=p,a})})}var uc=(function(){function r(t){this.data=t.data||(t.sourceFormat===$r?{}:[]),this.sourceFormat=t.sourceFormat||JD,this.seriesLayoutBy=t.seriesLayoutBy||Ur,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var e=this.dimensionsDefine=t.dimensionsDefine;if(e)for(var a=0;ap&&(p=_)}c[0]=d,c[1]=p}},n=function(){return this._data?this._data.length/this._dimSize:0};NS=(t={},t[Me+"_"+Ur]={pure:!0,appendData:i},t[Me+"_"+io]={pure:!0,appendData:function(){throw new Error('Do not support appendData when set seriesLayoutBy: "row".')}},t[cr]={pure:!0,appendData:i},t[$r]={pure:!0,appendData:function(o){var s=this._data;A(o,function(l,u){for(var f=s[u]||(s[u]=[]),v=0;v<(l||[]).length;v++)f.push(l[v])})}},t[hr]={appendData:i},t[Rn]={persistent:!1,pure:!0,appendData:function(o){this._data=o},clean:function(){this._offset+=this.count(),this._data=null}},t);function i(o){for(var s=0;s=0&&(p=o.interpolatedValue[g])}return p!=null?p+"":""})}},r.prototype.getRawValue=function(t,e){return us(this.getData(e),t)},r.prototype.formatTooltip=function(t,e,a){},r})();function GS(r){var t,e;return it(r)?r.type&&(e=r):t=r,{text:t,frag:e}}function Yl(r){return new Uz(r)}var Uz=(function(){function r(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return r.prototype.perform=function(t){var e=this._upstream,a=t&&t.skip;if(this._dirty&&e){var n=this.context;n.data=n.outputData=e.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var i;this._plan&&!a&&(i=this._plan(this.context));var o=f(this._modBy),s=this._modDataCount||0,l=f(t&&t.modBy),u=t&&t.modDataCount||0;(o!==l||s!==u)&&(i="reset");function f(m){return!(m>=1)&&(m=1),m}var v;(this._dirty||i==="reset")&&(this._dirty=!1,v=this._doReset(a)),this._modBy=l,this._modDataCount=u;var h=t&&t.step;if(e?this._dueEnd=e._outputDueEnd:this._dueEnd=this._count?this._count(this.context):1/0,this._progress){var c=this._dueIndex,d=Math.min(h!=null?this._dueIndex+h:1/0,this._dueEnd);if(!a&&(v||c1&&a>0?s:o}};return i;function o(){return t=r?null:lt},gte:function(r,t){return r>=t}},Zz=(function(){function r(t,e){if(!Dt(e)){var a="";Et(a)}this._opFn=dL[t],this._rvalFloat=ma(e)}return r.prototype.evaluate=function(t){return Dt(t)?this._opFn(t,this._rvalFloat):this._opFn(ma(t),this._rvalFloat)},r})(),pL=(function(){function r(t,e){var a=t==="desc";this._resultLT=a?1:-1,e==null&&(e=a?"min":"max"),this._incomparable=e==="min"?-1/0:1/0}return r.prototype.evaluate=function(t,e){var a=Dt(t)?t:ma(t),n=Dt(e)?e:ma(e),i=isNaN(a),o=isNaN(n);if(i&&(a=this._incomparable),o&&(n=this._incomparable),i&&o){var s=X(t),l=X(e);s&&(a=l?t:0),l&&(n=s?e:0)}return an?-this._resultLT:0},r})(),Xz=(function(){function r(t,e){this._rval=e,this._isEQ=t,this._rvalTypeof=typeof e,this._rvalFloat=ma(e)}return r.prototype.evaluate=function(t){var e=t===this._rval;if(!e){var a=typeof t;a!==this._rvalTypeof&&(a==="number"||this._rvalTypeof==="number")&&(e=ma(t)===this._rvalFloat)}return this._isEQ?e:!e},r})();function $z(r,t){return r==="eq"||r==="ne"?new Xz(r==="eq",t):q(dL,r)?new Zz(r,t):null}var qz=(function(){function r(){}return r.prototype.getRawData=function(){throw new Error("not supported")},r.prototype.getRawDataItem=function(t){throw new Error("not supported")},r.prototype.cloneRawData=function(){},r.prototype.getDimensionInfo=function(t){},r.prototype.cloneAllDimensionInfo=function(){},r.prototype.count=function(){},r.prototype.retrieveValue=function(t,e){},r.prototype.retrieveValueFromItem=function(t,e){},r.prototype.convertValue=function(t,e){return kn(t,e)},r})();function jz(r,t){var e=new qz,a=r.data,n=e.sourceFormat=r.sourceFormat,i=r.startIndex,o="";r.seriesLayoutBy!==Ur&&Et(o);var s=[],l={},u=r.dimensionsDefine;if(u)A(u,function(p,g){var y=p.name,m={index:g,name:y,displayName:p.displayName};if(s.push(m),y!=null){var _="";q(l,y)&&Et(_),l[y]=m}});else for(var f=0;f65535?nV:iV}function xo(){return[1/0,-1/0]}function oV(r){var t=r.constructor;return t===Array?r.slice():new t(r)}function WS(r,t,e,a,n){var i=mL[e||"float"];if(n){var o=r[t],s=o&&o.length;if(s!==a){for(var l=new i(a),u=0;ug[1]&&(g[1]=p)}return this._rawCount=this._count=l,{start:s,end:l}},r.prototype._initDataFromProvider=function(t,e,a){for(var n=this._provider,i=this._chunks,o=this._dimensions,s=o.length,l=this._rawExtent,u=U(o,function(m){return m.property}),f=0;fy[1]&&(y[1]=g)}}!n.persistent&&n.clean&&n.clean(),this._rawCount=this._count=e,this._extent=[]},r.prototype.count=function(){return this._count},r.prototype.get=function(t,e){if(!(e>=0&&e=0&&e=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,a=e[t];if(a!=null&&at)i=o-1;else return o}return-1},r.prototype.getIndices=function(){var t,e=this._indices;if(e){var a=e.constructor,n=this._count;if(a===Array){t=new a(n);for(var i=0;i=v&&m<=h||isNaN(m))&&(l[u++]=p),p++}d=!0}else if(i===2){for(var g=c[n[0]],_=c[n[1]],S=t[n[1]][0],x=t[n[1]][1],y=0;y=v&&m<=h||isNaN(m))&&(b>=S&&b<=x||isNaN(b))&&(l[u++]=p),p++}d=!0}}if(!d)if(i===1)for(var y=0;y=v&&m<=h||isNaN(m))&&(l[u++]=w)}else for(var y=0;yt[M][1])&&(T=!1)}T&&(l[u++]=e.getRawIndex(y))}return uy[1]&&(y[1]=g)}}}},r.prototype.lttbDownSample=function(t,e){var a=this.clone([t],!0),n=a._chunks,i=n[t],o=this.count(),s=0,l=Math.floor(1/e),u=this.getRawIndex(0),f,v,h,c=new(So(this._rawCount))(Math.min((Math.ceil(o/l)+2)*2,o));c[s++]=u;for(var d=1;df&&(f=v,h=S)}D>0&&Ds&&(p=s-f);for(var g=0;gd&&(d=m,c=f+g)}var _=this.getRawIndex(v),S=this.getRawIndex(c);vf-d&&(l=f-d,s.length=l);for(var p=0;pv[1]&&(v[1]=y),h[c++]=m}return i._count=c,i._indices=h,i._updateGetRawIdx(),i},r.prototype.each=function(t,e){if(this._count)for(var a=t.length,n=this._chunks,i=0,o=this.count();il&&(l=v)}return o=[s,l],this._extent[t]=o,o},r.prototype.getRawDataItem=function(t){var e=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(e);for(var a=[],n=this._chunks,i=0;i=0?this._indices[t]:-1},r.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},r.internalField=(function(){function t(e,a,n,i){return kn(e[i],this._dimensions[i])}Sd={arrayRows:t,objectRows:function(e,a,n,i){return kn(e[a],this._dimensions[i])},keyedColumns:t,original:function(e,a,n,i){var o=e&&(e.value==null?e:e.value);return kn(o instanceof Array?o[i]:o,this._dimensions[i])},typedArray:function(e,a,n,i){return e[i]}}})(),r})(),_L=(function(){function r(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return r.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},r.prototype._setLocalSource=function(t,e){this._sourceList=t,this._upstreamSignList=e,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},r.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},r.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},r.prototype._createSource=function(){this._setLocalSource([],[]);var t=this._sourceHost,e=this._getUpstreamSourceManagers(),a=!!e.length,n,i;if(mf(t)){var o=t,s=void 0,l=void 0,u=void 0;if(a){var f=e[0];f.prepareSource(),u=f.getSource(),s=u.data,l=u.sourceFormat,i=[f._getVersionSign()]}else s=o.get("data",!0),l=Ze(s)?Rn:hr,i=[];var v=this._getSourceMetaRawOption()||{},h=u&&u.metaRawOption||{},c=Q(v.seriesLayoutBy,h.seriesLayoutBy)||null,d=Q(v.sourceHeader,h.sourceHeader),p=Q(v.dimensions,h.dimensions),g=c!==h.seriesLayoutBy||!!d!=!!h.sourceHeader||p;n=g?[jg(s,{seriesLayoutBy:c,sourceHeader:d,dimensions:p},l)]:[]}else{var y=t;if(a){var m=this._applyTransform(e);n=m.sourceList,i=m.upstreamSignList}else{var _=y.get("source",!0);n=[jg(_,this._getSourceMetaRawOption(),null)],i=[]}}this._setLocalSource(n,i)},r.prototype._applyTransform=function(t){var e=this._sourceHost,a=e.get("transform",!0),n=e.get("fromTransformResult",!0);if(n!=null){var i="";t.length!==1&&YS(i)}var o,s=[],l=[];return A(t,function(u){u.prepareSource();var f=u.getSource(n||0),v="";n!=null&&!f&&YS(v),s.push(f),l.push(u._getVersionSign())}),a?o=rV(a,s,{datasetIndex:e.componentIndex}):n!=null&&(o=[Bz(s[0])]),{sourceList:o,upstreamSignList:l}},r.prototype._isDirty=function(){if(this._dirty)return!0;for(var t=this._getUpstreamSourceManagers(),e=0;e1||e>0&&!r.noHeader;return A(r.blocks,function(n){var i=wL(n);i>=t&&(t=i+ +(a&&(!i||Jg(n)&&!n.noHeader)))}),t}return 0}function fV(r,t,e,a){var n=t.noHeader,i=hV(wL(t)),o=[],s=t.blocks||[];Re(!s||W(s)),s=s||[];var l=r.orderMode;if(t.sortBlocks&&l){s=s.slice();var u={valueAsc:"asc",valueDesc:"desc"};if(q(u,l)){var f=new pL(u[l],null);s.sort(function(p,g){return f.evaluate(p.sortParam,g.sortParam)})}else l==="seriesDesc"&&s.reverse()}A(s,function(p,g){var y=t.valueFormatter,m=bL(p)(y?G(G({},r),{valueFormatter:y}):r,p,g>0?i.html:0,a);m!=null&&o.push(m)});var v=r.renderMode==="richText"?o.join(i.richText):Qg(a,o.join(""),n?e:i.html);if(n)return v;var h=Zg(t.header,"ordinal",r.useUTC),c=xL(a,r.renderMode).nameStyle,d=SL(a);return r.renderMode==="richText"?TL(r,h,c)+i.richText+v:Qg(a,'
'+ze(h)+"
"+v,e)}function vV(r,t,e,a){var n=r.renderMode,i=t.noName,o=t.noValue,s=!t.markerType,l=t.name,u=r.useUTC,f=t.valueFormatter||r.valueFormatter||function(S){return S=W(S)?S:[S],U(S,function(x,b){return Zg(x,W(c)?c[b]:c,u)})};if(!(i&&o)){var v=s?"":r.markupStyleCreator.makeTooltipMarker(t.markerType,t.markerColor||B.color.secondary,n),h=i?"":Zg(l,"ordinal",u),c=t.valueType,d=o?[]:f(t.value,t.dataIndex),p=!s||!i,g=!s&&i,y=xL(a,n),m=y.nameStyle,_=y.valueStyle;return n==="richText"?(s?"":v)+(i?"":TL(r,h,m))+(o?"":pV(r,d,p,g,_)):Qg(a,(s?"":v)+(i?"":cV(h,!s,m))+(o?"":dV(d,p,g,_)),e)}}function ZS(r,t,e,a,n,i){if(r){var o=bL(r),s={useUTC:n,renderMode:e,orderMode:a,markupStyleCreator:t,valueFormatter:r.valueFormatter};return o(s,r,0,i)}}function hV(r){return{html:lV[r],richText:uV[r]}}function Qg(r,t,e){var a='
',n="margin: "+e+"px 0 0",i=SL(r);return'
'+t+a+"
"}function cV(r,t,e){var a=t?"margin-left:2px":"";return''+ze(r)+""}function dV(r,t,e,a){var n=e?"10px":"20px",i=t?"float:right;margin-left:"+n:"";return r=W(r)?r:[r],''+U(r,function(o){return ze(o)}).join("  ")+""}function TL(r,t,e){return r.markupStyleCreator.wrapRichTextStyle(t,e)}function pV(r,t,e,a,n){var i=[n],o=a?10:20;return e&&i.push({padding:[0,0,0,o],align:"right"}),r.markupStyleCreator.wrapRichTextStyle(W(t)?t.join(" "):t,i)}function CL(r,t){var e=r.getData().getItemVisual(t,"style"),a=e[r.visualDrawType];return Ki(a)}function AL(r,t){var e=r.get("padding");return e??(t==="richText"?[8,10]:10)}var xd=(function(){function r(){this.richTextStyles={},this._nextStyleNameId=kM()}return r.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},r.prototype.makeTooltipMarker=function(t,e,a){var n=a==="richText"?this._generateStyleName():null,i=GD({color:e,type:t,renderMode:a,markerId:n});return X(i)?i:(this.richTextStyles[n]=i.style,i.content)},r.prototype.wrapRichTextStyle=function(t,e){var a={};W(e)?A(e,function(i){return G(a,i)}):G(a,e);var n=this._generateStyleName();return this.richTextStyles[n]=a,"{"+n+"|"+t+"}"},r})();function ML(r){var t=r.series,e=r.dataIndex,a=r.multipleSeries,n=t.getData(),i=n.mapDimensionsAll("defaultedTooltip"),o=i.length,s=t.getRawValue(e),l=W(s),u=CL(t,e),f,v,h,c;if(o>1||l&&!o){var d=gV(s,t,e,i,u);f=d.inlineValues,v=d.inlineValueTypes,h=d.blocks,c=d.inlineValues[0]}else if(o){var p=n.getDimensionInfo(i[0]);c=f=us(n,e,i[0]),v=p.type}else c=f=l?s[0]:s;var g=Pm(t),y=g&&t.name||"",m=n.getName(e),_=a?y:m;return ue("section",{header:y,noHeader:a||!g,sortParam:c,blocks:[ue("nameValue",{markerType:"item",markerColor:u,name:_,noName:!sr(_),value:f,valueType:v,dataIndex:e})].concat(h||[])})}function gV(r,t,e,a,n){var i=t.getData(),o=Mr(r,function(v,h,c){var d=i.getDimensionInfo(c);return v=v||d&&d.tooltip!==!1&&d.displayName!=null},!1),s=[],l=[],u=[];a.length?A(a,function(v){f(us(i,e,v),v)}):A(r,f);function f(v,h){var c=i.getDimensionInfo(h);!c||c.otherDims.tooltip===!1||(o?u.push(ue("nameValue",{markerType:"subItem",markerColor:n,name:c.displayName,value:v,valueType:c.type})):(s.push(v),l.push(c.type)))}return{inlineValues:s,inlineValueTypes:l,blocks:u}}var fn=bt();function _f(r,t){return r.getName(t)||r.getId(t)}var wv="__universalTransitionEnabled",zt=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e._selectedDataIndicesMap={},e}return t.prototype.init=function(e,a,n){this.seriesIndex=this.componentIndex,this.dataTask=Yl({count:mV,reset:_V}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(e,n);var i=fn(this).sourceManager=new _L(this);i.prepareSource();var o=this.getInitialData(e,n);$S(o,this),this.dataTask.context.data=o,fn(this).dataBeforeProcessed=o,XS(this),this._initSelectedMapFromData(o)},t.prototype.mergeDefaultAndTheme=function(e,a){var n=su(this),i=n?no(e):{},o=this.subType;xt.hasClass(o)&&(o+="Series"),mt(e,a.getTheme().get(this.subType)),mt(e,this.getDefaultOption()),Yi(e,"label",["show"]),this.fillDataTextStyle(e.data),n&&Sa(e,i,n)},t.prototype.mergeOption=function(e,a){e=mt(this.option,e,!0),this.fillDataTextStyle(e.data);var n=su(this);n&&Sa(this.option,e,n);var i=fn(this).sourceManager;i.dirty(),i.prepareSource();var o=this.getInitialData(e,a);$S(o,this),this.dataTask.dirty(),this.dataTask.context.data=o,fn(this).dataBeforeProcessed=o,XS(this),this._initSelectedMapFromData(o)},t.prototype.fillDataTextStyle=function(e){if(e&&!Ze(e))for(var a=["show"],n=0;n=0&&h<0)&&(v=m,h=y,c=0),y===h&&(f[c++]=p))}),f.length=c,f},t.prototype.formatTooltip=function(e,a,n){return ML({series:this,dataIndex:e,multipleSeries:a})},t.prototype.isAnimationEnabled=function(){var e=this.ecModel;if(Ct.node&&!(e&&e.ssr))return!1;var a=this.getShallow("animation");return a&&this.getData().count()>this.getShallow("animationThreshold")&&(a=!1),!!a},t.prototype.restoreData=function(){this.dataTask.dirty()},t.prototype.getColorFromPalette=function(e,a,n){var i=this.ecModel,o=d0.prototype.getColorFromPalette.call(this,e,a,n);return o||(o=i.getColorFromPalette(e,a,n)),o},t.prototype.coordDimToDataDim=function(e){return this.getRawData().mapDimensionsAll(e)},t.prototype.getProgressive=function(){return this.get("progressive")},t.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},t.prototype.select=function(e,a){this._innerSelect(this.getData(a),e)},t.prototype.unselect=function(e,a){var n=this.option.selectedMap;if(n){var i=this.option.selectedMode,o=this.getData(a);if(i==="series"||n==="all"){this.option.selectedMap={},this._selectedDataIndicesMap={};return}for(var s=0;s=0&&n.push(o)}return n},t.prototype.isSelected=function(e,a){var n=this.option.selectedMap;if(!n)return!1;var i=this.getData(a);return(n==="all"||n[_f(i,e)])&&!i.getItemModel(e).get(["select","disabled"])},t.prototype.isUniversalTransitionEnabled=function(){if(this[wv])return!0;var e=this.option.universalTransition;return e?e===!0?!0:e&&e.enabled:!1},t.prototype._innerSelect=function(e,a){var n,i,o=this.option,s=o.selectedMode,l=a.length;if(!(!s||!l)){if(s==="series")o.selectedMap="all";else if(s==="multiple"){it(o.selectedMap)||(o.selectedMap={});for(var u=o.selectedMap,f=0;f0&&this._innerSelect(e,a)}},t.registerClass=function(e){return xt.registerClass(e)},t.protoInitialize=(function(){var e=t.prototype;e.type="series.__base__",e.seriesIndex=0,e.ignoreStyleOnData=!1,e.hasSymbolVisual=!1,e.defaultSymbol="circle",e.visualStyleAccessPath="itemStyle",e.visualDrawType="fill"})(),t})(xt);Qt(zt,fc);Qt(zt,d0);WM(zt,xt);function XS(r){var t=r.name;Pm(r)||(r.name=yV(r)||t)}function yV(r){var t=r.getRawData(),e=t.mapDimensionsAll("seriesName"),a=[];return A(e,function(n){var i=t.getDimensionInfo(n);i.displayName&&a.push(i.displayName)}),a.join(" ")}function mV(r){return r.model.getRawData().count()}function _V(r){var t=r.model;return t.setData(t.getRawData().cloneShallow()),SV}function SV(r,t){t.outputData&&r.end>t.outputData.count()&&t.model.getRawData().cloneShallow(t.outputData)}function $S(r,t){A(rs(r.CHANGABLE_METHODS,r.DOWNSAMPLE_METHODS),function(e){r.wrapMethod(e,pt(xV,t))})}function xV(r,t){var e=ty(r);return e&&e.setOutputEnd((t||this).count()),t}function ty(r){var t=(r.ecModel||{}).scheduler,e=t&&t.getPipeline(r.uid);if(e){var a=e.currentTask;if(a){var n=a.agentStubMap;n&&(a=n.get(r.uid))}return a}}var Wt=(function(){function r(){this.group=new rt,this.uid=Ds("viewComponent")}return r.prototype.init=function(t,e){},r.prototype.render=function(t,e,a,n){},r.prototype.dispose=function(t,e){},r.prototype.updateView=function(t,e,a,n){},r.prototype.updateLayout=function(t,e,a,n){},r.prototype.updateVisual=function(t,e,a,n){},r.prototype.toggleBlurSeries=function(t,e,a){},r.prototype.eachRendered=function(t){var e=this.group;e&&e.traverse(t)},r})();km(Wt);Kh(Wt);function Ps(){var r=bt();return function(t){var e=r(t),a=t.pipelineContext,n=!!e.large,i=!!e.progressiveRender,o=e.large=!!(a&&a.large),s=e.progressiveRender=!!(a&&a.progressiveRender);return(n!==o||i!==s)&&"reset"}}var DL=bt(),bV=Ps(),Nt=(function(){function r(){this.group=new rt,this.uid=Ds("viewChart"),this.renderTask=Yl({plan:wV,reset:TV}),this.renderTask.context={view:this}}return r.prototype.init=function(t,e){},r.prototype.render=function(t,e,a,n){},r.prototype.highlight=function(t,e,a,n){var i=t.getData(n&&n.dataType);i&&jS(i,n,"emphasis")},r.prototype.downplay=function(t,e,a,n){var i=t.getData(n&&n.dataType);i&&jS(i,n,"normal")},r.prototype.remove=function(t,e){this.group.removeAll()},r.prototype.dispose=function(t,e){},r.prototype.updateView=function(t,e,a,n){this.render(t,e,a,n)},r.prototype.updateLayout=function(t,e,a,n){this.render(t,e,a,n)},r.prototype.updateVisual=function(t,e,a,n){this.render(t,e,a,n)},r.prototype.eachRendered=function(t){Wn(this.group,t)},r.markUpdateMethod=function(t,e){DL(t).updateMethod=e},r.protoInitialize=(function(){var t=r.prototype;t.type="chart"})(),r})();function qS(r,t,e){r&&nu(r)&&(t==="emphasis"?ja:Ka)(r,e)}function jS(r,t,e){var a=Zi(r,t),n=t&&t.highlightKey!=null?jN(t.highlightKey):null;a!=null?A(Ht(a),function(i){qS(r.getItemGraphicEl(i),e,n)}):r.eachItemGraphicEl(function(i){qS(i,e,n)})}km(Nt);Kh(Nt);function wV(r){return bV(r.model)}function TV(r){var t=r.model,e=r.ecModel,a=r.api,n=r.payload,i=t.pipelineContext.progressiveRender,o=r.view,s=n&&DL(n).updateMethod,l=i?"incrementalPrepareRender":s&&o[s]?s:"render";return l!=="render"&&o[l](t,e,a,n),CV[l]}var CV={incrementalPrepareRender:{progress:function(r,t){t.view.incrementalRender(r,t.model,t.ecModel,t.api,t.payload)}},render:{forceFirstProgress:!0,progress:function(r,t){t.view.render(t.model,t.ecModel,t.api,t.payload)}}},Qv="\0__throttleOriginMethod",KS="\0__throttleRate",JS="\0__throttleType";function hc(r,t,e){var a,n=0,i=0,o=null,s,l,u,f;t=t||0;function v(){i=new Date().getTime(),o=null,r.apply(l,u||[])}var h=function(){for(var c=[],d=0;d=0?v():o=setTimeout(v,-s),n=a};return h.clear=function(){o&&(clearTimeout(o),o=null)},h.debounceNextCall=function(c){f=c},h}function Rs(r,t,e,a){var n=r[t];if(n){var i=n[Qv]||n,o=n[JS],s=n[KS];if(s!==e||o!==a){if(e==null||!a)return r[t]=i;n=r[t]=hc(i,e,a==="debounce"),n[Qv]=i,n[JS]=a,n[KS]=e}return n}}function uu(r,t){var e=r[t];e&&e[Qv]&&(e.clear&&e.clear(),r[t]=e[Qv])}var QS=bt(),tx={itemStyle:Xi(PD,!0),lineStyle:Xi(ID,!0)},AV={lineStyle:"stroke",itemStyle:"fill"};function LL(r,t){var e=r.visualStyleMapper||tx[t];return e||(console.warn("Unknown style type '"+t+"'."),tx.itemStyle)}function IL(r,t){var e=r.visualDrawType||AV[t];return e||(console.warn("Unknown style type '"+t+"'."),"fill")}var MV={createOnAllSeries:!0,performRawSeries:!0,reset:function(r,t){var e=r.getData(),a=r.visualStyleAccessPath||"itemStyle",n=r.getModel(a),i=LL(r,a),o=i(n),s=n.getShallow("decal");s&&(e.setVisual("decal",s),s.dirty=!0);var l=IL(r,a),u=o[l],f=tt(u)?u:null,v=o.fill==="auto"||o.stroke==="auto";if(!o[l]||f||v){var h=r.getColorFromPalette(r.name,null,t.getSeriesCount());o[l]||(o[l]=h,e.setVisual("colorFromPalette",!0)),o.fill=o.fill==="auto"||tt(o.fill)?h:o.fill,o.stroke=o.stroke==="auto"||tt(o.stroke)?h:o.stroke}if(e.setVisual("style",o),e.setVisual("drawType",l),!t.isSeriesFiltered(r)&&f)return e.setVisual("colorFromPalette",!1),{dataEach:function(c,d){var p=r.getDataParams(d),g=G({},o);g[l]=f(p),c.setItemVisual(d,"style",g)}}}},$s=new wt,DV={createOnAllSeries:!0,performRawSeries:!0,reset:function(r,t){if(!(r.ignoreStyleOnData||t.isSeriesFiltered(r))){var e=r.getData(),a=r.visualStyleAccessPath||"itemStyle",n=LL(r,a),i=e.getVisual("drawType");return{dataEach:e.hasItemOption?function(o,s){var l=o.getRawDataItem(s);if(l&&l[a]){$s.option=l[a];var u=n($s),f=o.ensureUniqueItemVisual(s,"style");G(f,u),$s.option.decal&&(o.setItemVisual(s,"decal",$s.option.decal),$s.option.decal.dirty=!0),i in u&&o.setItemVisual(s,"colorFromPalette",!1)}}:null}}}},LV={performRawSeries:!0,overallReset:function(r){var t=K();r.eachSeries(function(e){var a=e.getColorBy();if(!e.isColorBySeries()){var n=e.type+"-"+a,i=t.get(n);i||(i={},t.set(n,i)),QS(e).scope=i}}),r.eachSeries(function(e){if(!(e.isColorBySeries()||r.isSeriesFiltered(e))){var a=e.getRawData(),n={},i=e.getData(),o=QS(e).scope,s=e.visualStyleAccessPath||"itemStyle",l=IL(e,s);i.each(function(u){var f=i.getRawIndex(u);n[f]=u}),a.each(function(u){var f=n[u],v=i.getItemVisual(f,"colorFromPalette");if(v){var h=i.ensureUniqueItemVisual(f,"style"),c=a.getName(u)||u+"",d=a.count();h[l]=e.getColorFromPalette(c,o,d)}})}})}},Sf=Math.PI;function IV(r,t){t=t||{},nt(t,{text:"loading",textColor:B.color.primary,fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255,255,255,0.8)",showSpinner:!0,color:B.color.theme[0],spinnerRadius:10,lineWidth:5,zlevel:0});var e=new rt,a=new St({style:{fill:t.maskColor},zlevel:t.zlevel,z:1e4});e.add(a);var n=new Mt({style:{text:t.text,fill:t.textColor,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,fontFamily:t.fontFamily},zlevel:t.zlevel,z:10001}),i=new St({style:{fill:"none"},textContent:n,textConfig:{position:"right",distance:10},zlevel:t.zlevel,z:10001});e.add(i);var o;return t.showSpinner&&(o=new Ou({shape:{startAngle:-Sf/2,endAngle:-Sf/2+.1,r:t.spinnerRadius},style:{stroke:t.color,lineCap:"round",lineWidth:t.lineWidth},zlevel:t.zlevel,z:10001}),o.animateShape(!0).when(1e3,{endAngle:Sf*3/2}).start("circularInOut"),o.animateShape(!0).when(1e3,{startAngle:Sf*3/2}).delay(300).start("circularInOut"),e.add(o)),e.resize=function(){var s=n.getBoundingRect().width,l=t.showSpinner?t.spinnerRadius:0,u=(r.getWidth()-l*2-(t.showSpinner&&s?10:0)-s)/2-(t.showSpinner&&s?0:5+s/2)+(t.showSpinner?0:s/2)+(s?0:l),f=r.getHeight()/2;t.showSpinner&&o.setShape({cx:u,cy:f}),i.setShape({x:u-l,y:f-l,width:l*2,height:l*2}),a.setShape({x:0,y:0,width:r.getWidth(),height:r.getHeight()})},e.resize(),e}var PL=(function(){function r(t,e,a,n){this._stageTaskMap=K(),this.ecInstance=t,this.api=e,a=this._dataProcessorHandlers=a.slice(),n=this._visualHandlers=n.slice(),this._allHandlers=a.concat(n)}return r.prototype.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each(function(a){var n=a.overallTask;n&&n.dirty()})},r.prototype.getPerformArgs=function(t,e){if(t.__pipeline){var a=this._pipelineMap.get(t.__pipeline.id),n=a.context,i=!e&&a.progressiveEnabled&&(!n||n.progressiveRender)&&t.__idxInPipeline>a.blockIndex,o=i?a.step:null,s=n&&n.modDataCount,l=s!=null?Math.ceil(s/o):null;return{step:o,modBy:l,modDataCount:s}}},r.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},r.prototype.updateStreamModes=function(t,e){var a=this._pipelineMap.get(t.uid),n=t.getData(),i=n.count(),o=a.progressiveEnabled&&e.incrementalPrepareRender&&i>=a.threshold,s=t.get("large")&&i>=t.get("largeThreshold"),l=t.get("progressiveChunkMode")==="mod"?i:null;t.pipelineContext=a.context={progressiveRender:o,modDataCount:l,large:s}},r.prototype.restorePipelines=function(t){var e=this,a=e._pipelineMap=K();t.eachSeries(function(n){var i=n.getProgressive(),o=n.uid;a.set(o,{id:o,head:null,tail:null,threshold:n.getProgressiveThreshold(),progressiveEnabled:i&&!(n.preventIncremental&&n.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),e._pipe(n,n.dataTask)})},r.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.api.getModel(),a=this.api;A(this._allHandlers,function(n){var i=t.get(n.uid)||t.set(n.uid,{}),o="";Re(!(n.reset&&n.overallReset),o),n.reset&&this._createSeriesStageTask(n,i,e,a),n.overallReset&&this._createOverallStageTask(n,i,e,a)},this)},r.prototype.prepareView=function(t,e,a,n){var i=t.renderTask,o=i.context;o.model=e,o.ecModel=a,o.api=n,i.__block=!t.incrementalPrepareRender,this._pipe(e,i)},r.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},r.prototype.performVisualTasks=function(t,e,a){this._performStageTasks(this._visualHandlers,t,e,a)},r.prototype._performStageTasks=function(t,e,a,n){n=n||{};var i=!1,o=this;A(t,function(l,u){if(!(n.visualType&&n.visualType!==l.visualType)){var f=o._stageTaskMap.get(l.uid),v=f.seriesTaskMap,h=f.overallTask;if(h){var c,d=h.agentStubMap;d.each(function(g){s(n,g)&&(g.dirty(),c=!0)}),c&&h.dirty(),o.updatePayload(h,a);var p=o.getPerformArgs(h,n.block);d.each(function(g){g.perform(p)}),h.perform(p)&&(i=!0)}else v&&v.each(function(g,y){s(n,g)&&g.dirty();var m=o.getPerformArgs(g,n.block);m.skip=!l.performRawSeries&&e.isSeriesFiltered(g.context.model),o.updatePayload(g,a),g.perform(m)&&(i=!0)})}});function s(l,u){return l.setDirty&&(!l.dirtyMap||l.dirtyMap.get(u.__pipeline.id))}this.unfinished=i||this.unfinished},r.prototype.performSeriesTasks=function(t){var e;t.eachSeries(function(a){e=a.dataTask.perform()||e}),this.unfinished=e||this.unfinished},r.prototype.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})},r.prototype.updatePayload=function(t,e){e!=="remain"&&(t.context.payload=e)},r.prototype._createSeriesStageTask=function(t,e,a,n){var i=this,o=e.seriesTaskMap,s=e.seriesTaskMap=K(),l=t.seriesType,u=t.getTargetSeries;t.createOnAllSeries?a.eachRawSeries(f):l?a.eachRawSeriesByType(l,f):u&&u(a,n).each(f);function f(v){var h=v.uid,c=s.set(h,o&&o.get(h)||Yl({plan:OV,reset:NV,count:zV}));c.context={model:v,ecModel:a,api:n,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:i},i._pipe(v,c)}},r.prototype._createOverallStageTask=function(t,e,a,n){var i=this,o=e.overallTask=e.overallTask||Yl({reset:PV});o.context={ecModel:a,api:n,overallReset:t.overallReset,scheduler:i};var s=o.agentStubMap,l=o.agentStubMap=K(),u=t.seriesType,f=t.getTargetSeries,v=!0,h=!1,c="";Re(!t.createOnAllSeries,c),u?a.eachRawSeriesByType(u,d):f?f(a,n).each(d):(v=!1,A(a.getSeries(),d));function d(p){var g=p.uid,y=l.set(g,s&&s.get(g)||(h=!0,Yl({reset:RV,onDirty:EV})));y.context={model:p,overallProgress:v},y.agent=o,y.__block=v,i._pipe(p,y)}h&&o.dirty()},r.prototype._pipe=function(t,e){var a=t.uid,n=this._pipelineMap.get(a);!n.head&&(n.head=e),n.tail&&n.tail.pipe(e),n.tail=e,e.__idxInPipeline=n.count++,e.__pipeline=n},r.wrapStageHandler=function(t,e){return tt(t)&&(t={overallReset:t,seriesType:VV(t)}),t.uid=Ds("stageHandler"),e&&(t.visualType=e),t},r})();function PV(r){r.overallReset(r.ecModel,r.api,r.payload)}function RV(r){return r.overallProgress&&kV}function kV(){this.agent.dirty(),this.getDownstream().dirty()}function EV(){this.agent&&this.agent.dirty()}function OV(r){return r.plan?r.plan(r.model,r.ecModel,r.api,r.payload):null}function NV(r){r.useClearVisual&&r.data.clearAllVisual();var t=r.resetDefines=Ht(r.reset(r.model,r.ecModel,r.api,r.payload));return t.length>1?U(t,function(e,a){return RL(a)}):BV}var BV=RL(0);function RL(r){return function(t,e){var a=e.data,n=e.resetDefines[r];if(n&&n.dataEach)for(var i=t.start;i0&&c===u.length-h.length){var d=u.slice(0,c);d!=="data"&&(e.mainType=d,e[h.toLowerCase()]=l,f=!0)}}s.hasOwnProperty(u)&&(a[u]=l,f=!0),f||(n[u]=l)})}return{cptQuery:e,dataQuery:a,otherQuery:n}},r.prototype.filter=function(t,e){var a=this.eventInfo;if(!a)return!0;var n=a.targetEl,i=a.packedEvent,o=a.model,s=a.view;if(!o||!s)return!0;var l=e.cptQuery,u=e.dataQuery;return f(l,o,"mainType")&&f(l,o,"subType")&&f(l,o,"index","componentIndex")&&f(l,o,"name")&&f(l,o,"id")&&f(u,i,"name")&&f(u,i,"dataIndex")&&f(u,i,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(t,e.otherQuery,n,i));function f(v,h,c,d){return v[c]==null||h[d||c]===v[c]}},r.prototype.afterTrigger=function(){this.eventInfo=null},r})(),ey=["symbol","symbolSize","symbolRotate","symbolOffset"],rx=ey.concat(["symbolKeepAspect"]),HV={createOnAllSeries:!0,performRawSeries:!0,reset:function(r,t){var e=r.getData();if(r.legendIcon&&e.setVisual("legendIcon",r.legendIcon),!r.hasSymbolVisual)return;for(var a={},n={},i=!1,o=0;o=0&&Oi(l)?l:.5;var u=r.createRadialGradient(o,s,0,o,s,l);return u}function ry(r,t,e){for(var a=t.type==="radial"?a5(r,t,e):r5(r,t,e),n=t.colorStops,i=0;i0)?null:r==="dashed"?[4*t,2*t]:r==="dotted"?[t]:Dt(r)?[r]:W(r)?r:null}function x0(r){var t=r.style,e=t.lineDash&&t.lineWidth>0&&i5(t.lineDash,t.lineWidth),a=t.lineDashOffset;if(e){var n=t.strokeNoScale&&r.getLineScale?r.getLineScale():1;n&&n!==1&&(e=U(e,function(i){return i/n}),a/=n)}return[e,a]}var o5=new _a(!0);function rh(r){var t=r.stroke;return!(t==null||t==="none"||!(r.lineWidth>0))}function ax(r){return typeof r=="string"&&r!=="none"}function ah(r){var t=r.fill;return t!=null&&t!=="none"}function nx(r,t){if(t.fillOpacity!=null&&t.fillOpacity!==1){var e=r.globalAlpha;r.globalAlpha=t.fillOpacity*t.opacity,r.fill(),r.globalAlpha=e}else r.fill()}function ix(r,t){if(t.strokeOpacity!=null&&t.strokeOpacity!==1){var e=r.globalAlpha;r.globalAlpha=t.strokeOpacity*t.opacity,r.stroke(),r.globalAlpha=e}else r.stroke()}function ay(r,t,e){var a=Em(t.image,t.__image,e);if(Jh(a)){var n=r.createPattern(a,t.repeat||"repeat");if(typeof DOMMatrix=="function"&&n&&n.setTransform){var i=new DOMMatrix;i.translateSelf(t.x||0,t.y||0),i.rotateSelf(0,0,(t.rotation||0)*El),i.scaleSelf(t.scaleX||1,t.scaleY||1),n.setTransform(i)}return n}}function s5(r,t,e,a){var n,i=rh(e),o=ah(e),s=e.strokePercent,l=s<1,u=!t.path;(!t.silent||l)&&u&&t.createPathProxy();var f=t.path||o5,v=t.__dirty;if(!a){var h=e.fill,c=e.stroke,d=o&&!!h.colorStops,p=i&&!!c.colorStops,g=o&&!!h.image,y=i&&!!c.image,m=void 0,_=void 0,S=void 0,x=void 0,b=void 0;(d||p)&&(b=t.getBoundingRect()),d&&(m=v?ry(r,h,b):t.__canvasFillGradient,t.__canvasFillGradient=m),p&&(_=v?ry(r,c,b):t.__canvasStrokeGradient,t.__canvasStrokeGradient=_),g&&(S=v||!t.__canvasFillPattern?ay(r,h,t):t.__canvasFillPattern,t.__canvasFillPattern=S),y&&(x=v||!t.__canvasStrokePattern?ay(r,c,t):t.__canvasStrokePattern,t.__canvasStrokePattern=x),d?r.fillStyle=m:g&&(S?r.fillStyle=S:o=!1),p?r.strokeStyle=_:y&&(x?r.strokeStyle=x:i=!1)}var w=t.getGlobalScale();f.setScale(w[0],w[1],t.segmentIgnoreThreshold);var T,C;r.setLineDash&&e.lineDash&&(n=x0(t),T=n[0],C=n[1]);var M=!0;(u||v&Vo)&&(f.setDPR(r.dpr),l?f.setContext(null):(f.setContext(r),M=!1),f.reset(),t.buildPath(f,t.shape,a),f.toStatic(),t.pathUpdated()),M&&f.rebuildPath(r,l?s:1),T&&(r.setLineDash(T),r.lineDashOffset=C),a||(e.strokeFirst?(i&&ix(r,e),o&&nx(r,e)):(o&&nx(r,e),i&&ix(r,e))),T&&r.setLineDash([])}function l5(r,t,e){var a=t.__image=Em(e.image,t.__image,t,t.onload);if(!(!a||!Jh(a))){var n=e.x||0,i=e.y||0,o=t.getWidth(),s=t.getHeight(),l=a.width/a.height;if(o==null&&s!=null?o=s*l:s==null&&o!=null?s=o/l:o==null&&s==null&&(o=a.width,s=a.height),e.sWidth&&e.sHeight){var u=e.sx||0,f=e.sy||0;r.drawImage(a,u,f,e.sWidth,e.sHeight,n,i,o,s)}else if(e.sx&&e.sy){var u=e.sx,f=e.sy,v=o-u,h=s-f;r.drawImage(a,u,f,v,h,n,i,o,s)}else r.drawImage(a,n,i,o,s)}}function u5(r,t,e){var a,n=e.text;if(n!=null&&(n+=""),n){r.font=e.font||$a,r.textAlign=e.textAlign,r.textBaseline=e.textBaseline;var i=void 0,o=void 0;r.setLineDash&&e.lineDash&&(a=x0(t),i=a[0],o=a[1]),i&&(r.setLineDash(i),r.lineDashOffset=o),e.strokeFirst?(rh(e)&&r.strokeText(n,e.x,e.y),ah(e)&&r.fillText(n,e.x,e.y)):(ah(e)&&r.fillText(n,e.x,e.y),rh(e)&&r.strokeText(n,e.x,e.y)),i&&r.setLineDash([])}}var ox=["shadowBlur","shadowOffsetX","shadowOffsetY"],sx=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function zL(r,t,e,a,n){var i=!1;if(!a&&(e=e||{},t===e))return!1;if(a||t.opacity!==e.opacity){Je(r,n),i=!0;var o=Math.max(Math.min(t.opacity,1),0);r.globalAlpha=isNaN(o)?zi.opacity:o}(a||t.blend!==e.blend)&&(i||(Je(r,n),i=!0),r.globalCompositeOperation=t.blend||zi.blend);for(var s=0;s0&&e.unfinished);e.unfinished||this._zr.flush()}}},t.prototype.getDom=function(){return this._dom},t.prototype.getId=function(){return this.id},t.prototype.getZr=function(){return this._zr},t.prototype.isSSR=function(){return this._ssr},t.prototype.setOption=function(e,a,n){if(!this[fe]){if(this._disposed){this.id;return}var i,o,s;if(it(a)&&(n=a.lazyUpdate,i=a.silent,o=a.replaceMerge,s=a.transition,a=a.notMerge),this[fe]=!0,Co(this),!this._model||a){var l=new wz(this._api),u=this._theme,f=this._model=new p0;f.scheduler=this._scheduler,f.ssr=this._ssr,f.init(null,null,null,u,this._locale,l)}this._model.setOption(e,{replaceMerge:o},sy);var v={seriesTransition:s,optionChanged:!0};if(n)this[be]={silent:i,updateParams:v},this[fe]=!1,this.getZr().wakeUp();else{try{pi(this),Da.update.call(this,null,v)}catch(h){throw this[be]=null,this[fe]=!1,h}this._ssr||this._zr.flush(),this[be]=null,this[fe]=!1,wo.call(this,i),To.call(this,i)}}},t.prototype.setTheme=function(e,a){if(!this[fe]){if(this._disposed){this.id;return}var n=this._model;if(n){var i=a&&a.silent,o=null;this[be]&&(i==null&&(i=this[be].silent),o=this[be].updateParams,this[be]=null),this[fe]=!0,Co(this);try{this._updateTheme(e),n.setTheme(this._theme),pi(this),Da.update.call(this,{type:"setTheme"},o)}catch(s){throw this[fe]=!1,s}this[fe]=!1,wo.call(this,i),To.call(this,i)}}},t.prototype._updateTheme=function(e){X(e)&&(e=a2[e]),e&&(e=et(e),e&&oL(e,!0),this._theme=e)},t.prototype.getModel=function(){return this._model},t.prototype.getOption=function(){return this._model&&this._model.getOption()},t.prototype.getWidth=function(){return this._zr.getWidth()},t.prototype.getHeight=function(){return this._zr.getHeight()},t.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||Ct.hasGlobalWindow&&window.devicePixelRatio||1},t.prototype.getRenderedCanvas=function(e){return this.renderToCanvas(e)},t.prototype.renderToCanvas=function(e){e=e||{};var a=this._zr.painter;return a.getRenderedCanvas({backgroundColor:e.backgroundColor||this._model.get("backgroundColor"),pixelRatio:e.pixelRatio||this.getDevicePixelRatio()})},t.prototype.renderToSVGString=function(e){e=e||{};var a=this._zr.painter;return a.renderToString({useViewBox:e.useViewBox})},t.prototype.getSvgDataURL=function(){var e=this._zr,a=e.storage.getDisplayList();return A(a,function(n){n.stopAnimation(null,!0)}),e.painter.toDataURL()},t.prototype.getDataURL=function(e){if(this._disposed){this.id;return}e=e||{};var a=e.excludeComponents,n=this._model,i=[],o=this;A(a,function(l){n.eachComponent({mainType:l},function(u){var f=o._componentsMap[u.__viewId];f.group.ignore||(i.push(f),f.group.ignore=!0)})});var s=this._zr.painter.getType()==="svg"?this.getSvgDataURL():this.renderToCanvas(e).toDataURL("image/"+(e&&e.type||"png"));return A(i,function(l){l.group.ignore=!1}),s},t.prototype.getConnectedDataURL=function(e){if(this._disposed){this.id;return}var a=e.type==="svg",n=this.group,i=Math.min,o=Math.max,s=1/0;if(sh[n]){var l=s,u=s,f=-s,v=-s,h=[],c=e&&e.pixelRatio||this.getDevicePixelRatio();A(Fi,function(_,S){if(_.group===n){var x=a?_.getZr().painter.getSvgDom().innerHTML:_.renderToCanvas(et(e)),b=_.getDom().getBoundingClientRect();l=i(b.left,l),u=i(b.top,u),f=o(b.right,f),v=o(b.bottom,v),h.push({dom:x,left:b.left,top:b.top})}}),l*=c,u*=c,f*=c,v*=c;var d=f-l,p=v-u,g=tr.createCanvas(),y=Cg(g,{renderer:a?"svg":"canvas"});if(y.resize({width:d,height:p}),a){var m="";return A(h,function(_){var S=_.left-l,x=_.top-u;m+=''+_.dom+""}),y.painter.getSvgRoot().innerHTML=m,e.connectedBackgroundColor&&y.painter.setBackgroundColor(e.connectedBackgroundColor),y.refreshImmediately(),y.painter.toDataURL()}else return e.connectedBackgroundColor&&y.add(new St({shape:{x:0,y:0,width:d,height:p},style:{fill:e.connectedBackgroundColor}})),A(h,function(_){var S=new xe({style:{x:_.left*c-l,y:_.top*c-u,image:_.dom}});y.add(S)}),y.refreshImmediately(),g.toDataURL("image/"+(e&&e.type||"png"))}else return this.getDataURL(e)},t.prototype.convertToPixel=function(e,a,n){return Tf(this,"convertToPixel",e,a,n)},t.prototype.convertToLayout=function(e,a,n){return Tf(this,"convertToLayout",e,a,n)},t.prototype.convertFromPixel=function(e,a,n){return Tf(this,"convertFromPixel",e,a,n)},t.prototype.containPixel=function(e,a){if(this._disposed){this.id;return}var n=this._model,i,o=Jo(n,e);return A(o,function(s,l){l.indexOf("Models")>=0&&A(s,function(u){var f=u.coordinateSystem;if(f&&f.containPoint)i=i||!!f.containPoint(a);else if(l==="seriesModels"){var v=this._chartsMap[u.__viewId];v&&v.containPoint&&(i=i||v.containPoint(a,u))}},this)},this),!!i},t.prototype.getVisual=function(e,a){var n=this._model,i=Jo(n,e,{defaultMainType:"series"}),o=i.seriesModel,s=o.getData(),l=i.hasOwnProperty("dataIndexInside")?i.dataIndexInside:i.hasOwnProperty("dataIndex")?s.indexOfRawIndex(i.dataIndex):null;return l!=null?S0(s,l,a):Gu(s,a)},t.prototype.getViewOfComponentModel=function(e){return this._componentsMap[e.__viewId]},t.prototype.getViewOfSeriesModel=function(e){return this._chartsMap[e.__viewId]},t.prototype._initEvents=function(){var e=this;A(O5,function(n){var i=function(o){var s=e.getModel(),l=o.target,u,f=n==="globalout";if(f?u={}:l&&Ei(l,function(p){var g=ft(p);if(g&&g.dataIndex!=null){var y=g.dataModel||s.getSeriesByIndex(g.seriesIndex);return u=y&&y.getDataParams(g.dataIndex,g.dataType,l)||{},!0}else if(g.eventData)return u=G({},g.eventData),!0},!0),u){var v=u.componentType,h=u.componentIndex;(v==="markLine"||v==="markPoint"||v==="markArea")&&(v="series",h=u.seriesIndex);var c=v&&h!=null&&s.getComponent(v,h),d=c&&e[c.mainType==="series"?"_chartsMap":"_componentsMap"][c.__viewId];u.event=o,u.type=n,e._$eventProcessor.eventInfo={targetEl:l,packedEvent:u,model:c,view:d},e.trigger(n,u)}};i.zrEventfulCallAtLast=!0,e._zr.on(n,i,e)});var a=this._messageCenter;A(iy,function(n,i){a.on(i,function(o){e.trigger(i,o)})}),UV(a,this,this._api)},t.prototype.isDisposed=function(){return this._disposed},t.prototype.clear=function(){if(this._disposed){this.id;return}this.setOption({series:[]},!0)},t.prototype.dispose=function(){if(this._disposed){this.id;return}this._disposed=!0;var e=this.getDom();e&&GM(this.getDom(),C0,"");var a=this,n=a._api,i=a._model;A(a._componentsViews,function(o){o.dispose(i,n)}),A(a._chartsViews,function(o){o.dispose(i,n)}),a._zr.dispose(),a._dom=a._model=a._chartsMap=a._componentsMap=a._chartsViews=a._componentsViews=a._scheduler=a._api=a._zr=a._throttledZrFlush=a._theme=a._coordSysMgr=a._messageCenter=null,delete Fi[a.id]},t.prototype.resize=function(e){if(!this[fe]){if(this._disposed){this.id;return}this._zr.resize(e);var a=this._model;if(this._loadingFX&&this._loadingFX.resize(),!!a){var n=a.resetOption("media"),i=e&&e.silent;this[be]&&(i==null&&(i=this[be].silent),n=!0,this[be]=null),this[fe]=!0,Co(this);try{n&&pi(this),Da.update.call(this,{type:"resize",animation:G({duration:0},e&&e.animation)})}catch(o){throw this[fe]=!1,o}this[fe]=!1,wo.call(this,i),To.call(this,i)}}},t.prototype.showLoading=function(e,a){if(this._disposed){this.id;return}if(it(e)&&(a=e,e=""),e=e||"default",this.hideLoading(),!!ly[e]){var n=ly[e](this._api,a),i=this._zr;this._loadingFX=n,i.add(n)}},t.prototype.hideLoading=function(){if(this._disposed){this.id;return}this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},t.prototype.makeActionFromEvent=function(e){var a=G({},e);return a.type=ny[e.type],a},t.prototype.dispatchAction=function(e,a){if(this._disposed){this.id;return}if(it(a)||(a={silent:!!a}),!!ih[e.type]&&this._model){if(this[fe]){this._pendingActions.push(e);return}var n=a.silent;Md.call(this,e,n);var i=a.flush;i?this._zr.flush():i!==!1&&Ct.browser.weChat&&this._throttledZrFlush(),wo.call(this,n),To.call(this,n)}},t.prototype.updateLabelLayout=function(){Br.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},t.prototype.appendData=function(e){if(this._disposed){this.id;return}var a=e.seriesIndex,n=this.getModel(),i=n.getSeriesByIndex(a);i.appendData(e),this._scheduler.unfinished=!0,this.getZr().wakeUp()},t.internalField=(function(){pi=function(v){var h=v._scheduler;h.restorePipelines(v._model),h.prepareStageTasks(),Cd(v,!0),Cd(v,!1),h.plan()},Cd=function(v,h){for(var c=v._model,d=v._scheduler,p=h?v._componentsViews:v._chartsViews,g=h?v._componentsMap:v._chartsMap,y=v._zr,m=v._api,_=0;_h.get("hoverLayerThreshold")&&!Ct.node&&!Ct.worker&&h.eachSeries(function(g){if(!g.preventUsingHoverLayer){var y=v._chartsMap[g.__viewId];y.__alive&&y.eachRendered(function(m){m.states.emphasis&&(m.states.emphasis.hoverLayer=!0)})}})}function s(v,h){var c=v.get("blendMode")||null;h.eachRendered(function(d){d.isGroup||(d.style.blend=c)})}function l(v,h){if(!v.preventAutoZ){var c=ji(v);h.eachRendered(function(d){return oc(d,c.z,c.zlevel),!0})}}function u(v,h){h.eachRendered(function(c){if(!Qo(c)){var d=c.getTextContent(),p=c.getTextGuideLine();c.stateTransition&&(c.stateTransition=null),d&&d.stateTransition&&(d.stateTransition=null),p&&p.stateTransition&&(p.stateTransition=null),c.hasState()?(c.prevStates=c.currentStates,c.clearStates()):c.prevStates&&(c.prevStates=null)}})}function f(v,h){var c=v.getModel("stateAnimation"),d=v.isAnimationEnabled(),p=c.get("duration"),g=p>0?{duration:p,delay:c.get("delay"),easing:c.get("easing")}:null;h.eachRendered(function(y){if(y.states&&y.states.emphasis){if(Qo(y))return;if(y instanceof Tt&&KN(y),y.__dirty){var m=y.prevStates;m&&y.useStates(m)}if(d){y.stateTransition=g;var _=y.getTextContent(),S=y.getTextGuideLine();_&&(_.stateTransition=g),S&&(S.stateTransition=g)}y.__dirty&&i(y)}})}Sx=function(v){return new((function(h){N(c,h);function c(){return h!==null&&h.apply(this,arguments)||this}return c.prototype.getCoordinateSystems=function(){return v._coordSysMgr.getCoordinateSystems()},c.prototype.getComponentByElement=function(d){for(;d;){var p=d.__ecComponentInfo;if(p!=null)return v._model.getComponent(p.mainType,p.index);d=d.parent}},c.prototype.enterEmphasis=function(d,p){ja(d,p),dr(v)},c.prototype.leaveEmphasis=function(d,p){Ka(d,p),dr(v)},c.prototype.enterBlur=function(d){nD(d),dr(v)},c.prototype.leaveBlur=function(d){Gm(d),dr(v)},c.prototype.enterSelect=function(d){iD(d),dr(v)},c.prototype.leaveSelect=function(d){oD(d),dr(v)},c.prototype.getModel=function(){return v.getModel()},c.prototype.getViewOfComponentModel=function(d){return v.getViewOfComponentModel(d)},c.prototype.getViewOfSeriesModel=function(d){return v.getViewOfSeriesModel(d)},c.prototype.getMainProcessVersion=function(){return v[bf]},c})(nL))(v)},r2=function(v){function h(c,d){for(var p=0;p=0)){bx.push(e);var i=PL.wrapStageHandler(e,n);i.__prio=t,i.__raw=e,r.push(i)}}function P0(r,t){ly[r]=t}function Y5(r){YA({createCanvas:r})}function u2(r,t,e){var a=UL("registerMap");a&&a(r,t,e)}function Z5(r){var t=UL("getMap");return t&&t(r)}var f2=eV;Yn(w0,MV);Yn(cc,DV);Yn(cc,LV);Yn(w0,HV);Yn(cc,WV);Yn(qL,y5);D0(oL);L0(T5,Oz);P0("default",IV);qr({type:Vi,event:Vi,update:Vi},Kt);qr({type:yv,event:yv,update:yv},Kt);qr({type:Zv,event:zm,update:Zv,action:Kt,refineEvent:R0,publishNonRefinedEvent:!0});qr({type:Og,event:zm,update:Og,action:Kt,refineEvent:R0,publishNonRefinedEvent:!0});qr({type:Xv,event:zm,update:Xv,action:Kt,refineEvent:R0,publishNonRefinedEvent:!0});function R0(r,t,e,a){return{eventContent:{selected:ZN(e),isFromClick:t.isFromClick||!1}}}M0("default",{});M0("dark",OL);var X5={},Tx=[],$5={registerPreprocessor:D0,registerProcessor:L0,registerPostInit:i2,registerPostUpdate:o2,registerUpdateLifecycle:dc,registerAction:qr,registerCoordinateSystem:s2,registerLayout:l2,registerVisual:Yn,registerTransform:f2,registerLoading:P0,registerMap:u2,registerImpl:m5,PRIORITY:jL,ComponentModel:xt,ComponentView:Wt,SeriesModel:zt,ChartView:Nt,registerComponentModel:function(r){xt.registerClass(r)},registerComponentView:function(r){Wt.registerClass(r)},registerSeriesModel:function(r){zt.registerClass(r)},registerChartView:function(r){Nt.registerClass(r)},registerCustomSeries:function(r,t){ZL(r,t)},registerSubTypeDefaulter:function(r,t){xt.registerSubTypeDefaulter(r,t)},registerPainter:function(r,t){AM(r,t)}};function _t(r){if(W(r)){A(r,function(t){_t(t)});return}yt(Tx,r)>=0||(Tx.push(r),tt(r)&&(r={install:r}),r.install($5))}function js(r){return r==null?0:r.length||1}function Cx(r){return r}var Ja=(function(){function r(t,e,a,n,i,o){this._old=t,this._new=e,this._oldKeyGetter=a||Cx,this._newKeyGetter=n||Cx,this.context=i,this._diffModeMultiple=o==="multiple"}return r.prototype.add=function(t){return this._add=t,this},r.prototype.update=function(t){return this._update=t,this},r.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},r.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},r.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},r.prototype.remove=function(t){return this._remove=t,this},r.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},r.prototype._executeOneToOne=function(){var t=this._old,e=this._new,a={},n=new Array(t.length),i=new Array(e.length);this._initIndexMap(t,null,n,"_oldKeyGetter"),this._initIndexMap(e,a,i,"_newKeyGetter");for(var o=0;o1){var f=l.shift();l.length===1&&(a[s]=l[0]),this._update&&this._update(f,o)}else u===1?(a[s]=null,this._update&&this._update(l,o)):this._remove&&this._remove(o)}this._performRestAdd(i,a)},r.prototype._executeMultiple=function(){var t=this._old,e=this._new,a={},n={},i=[],o=[];this._initIndexMap(t,a,i,"_oldKeyGetter"),this._initIndexMap(e,n,o,"_newKeyGetter");for(var s=0;s1&&h===1)this._updateManyToOne&&this._updateManyToOne(f,u),n[l]=null;else if(v===1&&h>1)this._updateOneToMany&&this._updateOneToMany(f,u),n[l]=null;else if(v===1&&h===1)this._update&&this._update(f,u),n[l]=null;else if(v>1&&h>1)this._updateManyToMany&&this._updateManyToMany(f,u),n[l]=null;else if(v>1)for(var c=0;c1)for(var s=0;s30}var Ks=it,vn=U,tG=typeof Int32Array>"u"?Array:Int32Array,eG="e\0\0",Ax=-1,rG=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],aG=["_approximateExtent"],Mx,Af,Js,Qs,Id,tl,Pd,Ge=(function(){function r(t,e){this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","minmaxDownSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","minmaxDownSample","lttbDownSample"];var a,n=!1;h2(t)?(a=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(n=!0,a=t),a=a||["x","y"];for(var i={},o=[],s={},l=!1,u={},f=0;f=e)){var a=this._store,n=a.getProvider();this._updateOrdinalMeta();var i=this._nameList,o=this._idList,s=n.getSource().sourceFormat,l=s===hr;if(l&&!n.pure)for(var u=[],f=t;f0},r.prototype.ensureUniqueItemVisual=function(t,e){var a=this._itemVisuals,n=a[t];n||(n=a[t]={});var i=n[e];return i==null&&(i=this.getVisual(e),W(i)?i=i.slice():Ks(i)&&(i=G({},i)),n[e]=i),i},r.prototype.setItemVisual=function(t,e,a){var n=this._itemVisuals[t]||{};this._itemVisuals[t]=n,Ks(e)?G(n,e):n[e]=a},r.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},r.prototype.setLayout=function(t,e){Ks(t)?G(this._layout,t):this._layout[t]=e},r.prototype.getLayout=function(t){return this._layout[t]},r.prototype.getItemLayout=function(t){return this._itemLayouts[t]},r.prototype.setItemLayout=function(t,e,a){this._itemLayouts[t]=a?G(this._itemLayouts[t]||{},e):e},r.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},r.prototype.setItemGraphicEl=function(t,e){var a=this.hostModel&&this.hostModel.seriesIndex;Eg(a,this.dataType,t,e),this._graphicEls[t]=e},r.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},r.prototype.eachItemGraphicEl=function(t,e){A(this._graphicEls,function(a,n){a&&t&&t.call(e,a,n)})},r.prototype.cloneShallow=function(t){return t||(t=new r(this._schema?this._schema:vn(this.dimensions,this._getDimInfo,this),this.hostModel)),Id(t,this),t._store=this._store,t},r.prototype.wrapMethod=function(t,e){var a=this[t];tt(a)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var n=a.apply(this,arguments);return e.apply(this,[n].concat(Uh(arguments)))})},r.internalField=(function(){Mx=function(t){var e=t._invertedIndicesMap;A(e,function(a,n){var i=t._dimInfos[n],o=i.ordinalMeta,s=t._store;if(o){a=e[n]=new tG(o.categories.length);for(var l=0;l1&&(l+="__ec__"+f),n[e]=l}}})(),r})();function nG(r,t){return Es(r,t).dimensions}function Es(r,t){g0(r)||(r=y0(r)),t=t||{};var e=t.coordDimensions||[],a=t.dimensionsDefine||r.dimensionsDefine||[],n=K(),i=[],o=oG(r,e,a,t.dimensionsCount),s=t.canOmitUnusedDimensions&&p2(o),l=a===r.dimensionsDefine,u=l?d2(r):c2(a),f=t.encodeDefine;!f&&t.encodeDefaulter&&(f=t.encodeDefaulter(r,o));for(var v=K(f),h=new yL(o),c=0;c0&&(a.name=n+(i-1)),i++,t.set(n,i)}}function oG(r,t,e,a){var n=Math.max(r.dimensionsDetectedCount||1,t.length,e.length,a||0);return A(t,function(i){var o;it(i)&&(o=i.dimsDef)&&(n=Math.max(n,o.length))}),n}function sG(r,t,e){if(e||t.hasKey(r)){for(var a=0;t.hasKey(r+a);)a++;r+=a}return t.set(r,!0),r}var lG=(function(){function r(t){this.coordSysDims=[],this.axisMap=K(),this.categoryAxisMap=K(),this.coordSysName=t}return r})();function uG(r){var t=r.get("coordinateSystem"),e=new lG(t),a=fG[t];if(a)return a(r,e,e.axisMap,e.categoryAxisMap),e}var fG={cartesian2d:function(r,t,e,a){var n=r.getReferringComponents("xAxis",jt).models[0],i=r.getReferringComponents("yAxis",jt).models[0];t.coordSysDims=["x","y"],e.set("x",n),e.set("y",i),Ao(n)&&(a.set("x",n),t.firstCategoryDimIndex=0),Ao(i)&&(a.set("y",i),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},singleAxis:function(r,t,e,a){var n=r.getReferringComponents("singleAxis",jt).models[0];t.coordSysDims=["single"],e.set("single",n),Ao(n)&&(a.set("single",n),t.firstCategoryDimIndex=0)},polar:function(r,t,e,a){var n=r.getReferringComponents("polar",jt).models[0],i=n.findAxisModel("radiusAxis"),o=n.findAxisModel("angleAxis");t.coordSysDims=["radius","angle"],e.set("radius",i),e.set("angle",o),Ao(i)&&(a.set("radius",i),t.firstCategoryDimIndex=0),Ao(o)&&(a.set("angle",o),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},geo:function(r,t,e,a){t.coordSysDims=["lng","lat"]},parallel:function(r,t,e,a){var n=r.ecModel,i=n.getComponent("parallel",r.get("parallelIndex")),o=t.coordSysDims=i.dimensions.slice();A(i.parallelAxisIndex,function(s,l){var u=n.getComponent("parallelAxis",s),f=o[l];e.set(f,u),Ao(u)&&(a.set(f,u),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=l))})},matrix:function(r,t,e,a){var n=r.getReferringComponents("matrix",jt).models[0];t.coordSysDims=["x","y"];var i=n.getDimensionModel("x"),o=n.getDimensionModel("y");e.set("x",i),e.set("y",o),a.set("x",i),a.set("y",o)}};function Ao(r){return r.get("type")==="category"}function g2(r,t,e){e=e||{};var a=e.byIndex,n=e.stackedCoordDimension,i,o,s;vG(t)?i=t:(o=t.schema,i=o.dimensions,s=t.store);var l=!!(r&&r.get("stack")),u,f,v,h;if(A(i,function(m,_){X(m)&&(i[_]=m={name:m}),l&&!m.isExtraCoord&&(!a&&!u&&m.ordinalMeta&&(u=m),!f&&m.type!=="ordinal"&&m.type!=="time"&&(!n||n===m.coordDim)&&(f=m))}),f&&!a&&!u&&(a=!0),f){v="__\0ecstackresult_"+r.id,h="__\0ecstackedover_"+r.id,u&&(u.createInvertedIndices=!0);var c=f.coordDim,d=f.type,p=0;A(i,function(m){m.coordDim===c&&p++});var g={name:v,coordDim:c,coordDimIndex:p,type:d,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length},y={name:h,coordDim:h,coordDimIndex:p+1,type:d,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length+1};o?(s&&(g.storeDimIndex=s.ensureCalculationDimension(h,d),y.storeDimIndex=s.ensureCalculationDimension(v,d)),o.appendCalculationDimension(g),o.appendCalculationDimension(y)):(i.push(g),i.push(y))}return{stackedDimension:f&&f.name,stackedByDimension:u&&u.name,isStackedByIndex:a,stackedOverDimension:h,stackResultDimension:v}}function vG(r){return!h2(r.schema)}function Qa(r,t){return!!t&&t===r.getCalculationInfo("stackedDimension")}function k0(r,t){return Qa(r,t)?r.getCalculationInfo("stackResultDimension"):t}function hG(r,t){var e=r.get("coordinateSystem"),a=Is.get(e),n;return t&&t.coordSysDims&&(n=U(t.coordSysDims,function(i){var o={name:i},s=t.axisMap.get(i);if(s){var l=s.get("type");o.type=lh(l)}return o})),n||(n=a&&(a.getDimensionsInfo?a.getDimensionsInfo():a.dimensions.slice())||["x","y"]),n}function cG(r,t,e){var a,n;return e&&A(r,function(i,o){var s=i.coordDim,l=e.categoryAxisMap.get(s);l&&(a==null&&(a=o),i.ordinalMeta=l.getOrdinalMeta(),t&&(i.createInvertedIndices=!0)),i.otherDims.itemName!=null&&(n=!0)}),!n&&a!=null&&(r[a].otherDims.itemName=0),a}function Ca(r,t,e){e=e||{};var a=t.getSourceManager(),n,i=!1;r?(i=!0,n=y0(r)):(n=a.getSource(),i=n.sourceFormat===hr);var o=uG(t),s=hG(t,o),l=e.useEncodeDefaulter,u=tt(l)?l:l?pt(tL,s,t):null,f={coordDimensions:s,generateCoord:e.generateCoord,encodeDefine:t.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!i},v=Es(n,f),h=cG(v.dimensions,e.createInvertedIndices,o),c=i?null:a.getSharedDataStore(v),d=g2(t,{schema:v,store:c}),p=new Ge(v,t);p.setCalculationInfo(d);var g=h!=null&&dG(n)?function(y,m,_,S){return S===h?_:this.defaultDimValueGetter(y,m,_,S)}:null;return p.hasItemOption=!1,p.initData(i?n:c,null,g),p}function dG(r){if(r.sourceFormat===hr){var t=pG(r.data||[]);return!W(Ss(t))}}function pG(r){for(var t=0;tn&&(o=i.interval=n);var s=i.intervalPrecision=hu(o),l=i.niceTickExtent=[ae(Math.ceil(r[0]/o)*o,s),ae(Math.floor(r[1]/o)*o,s)];return yG(l,r),i}function Rd(r){var t=Math.pow(10,jh(r)),e=r/t;return e?e===2?e=3:e===3?e=5:e*=2:e=1,ae(e*t)}function hu(r){return Vr(r)+2}function Dx(r,t,e){r[t]=Math.max(Math.min(r[t],e[1]),e[0])}function yG(r,t){!isFinite(r[0])&&(r[0]=t[0]),!isFinite(r[1])&&(r[1]=t[1]),Dx(r,0,t),Dx(r,1,t),r[0]>r[1]&&(r[0]=r[1])}function E0(r,t){return r>=t[0]&&r<=t[1]}var mG=(function(){function r(){this.normalize=Lx,this.scale=Ix}return r.prototype.updateMethods=function(t){t.hasBreaks()?(this.normalize=$(t.normalize,t),this.scale=$(t.scale,t)):(this.normalize=Lx,this.scale=Ix)},r})();function Lx(r,t){return t[1]===t[0]?.5:(r-t[0])/(t[1]-t[0])}function Ix(r,t){return r*(t[1]-t[0])+t[0]}function fy(r,t,e){var a=Math.log(r);return[Math.log(e?t[0]:Math.max(0,t[0]))/a,Math.log(e?t[1]:Math.max(0,t[1]))/a]}var Zn=(function(){function r(t){this._calculator=new mG,this._setting=t||{},this._extent=[1/0,-1/0];var e=se();e&&(this._brkCtx=e.createScaleBreakContext(),this._brkCtx.update(this._extent))}return r.prototype.getSetting=function(t){return this._setting[t]},r.prototype._innerUnionExtent=function(t){var e=this._extent;this._innerSetExtent(t[0]e[1]?t[1]:e[1])},r.prototype.unionExtentFromData=function(t,e){this._innerUnionExtent(t.getApproximateExtent(e))},r.prototype.getExtent=function(){return this._extent.slice()},r.prototype.setExtent=function(t,e){this._innerSetExtent(t,e)},r.prototype._innerSetExtent=function(t,e){var a=this._extent;isNaN(t)||(a[0]=t),isNaN(e)||(a[1]=e),this._brkCtx&&this._brkCtx.update(a)},r.prototype.setBreaksFromOption=function(t){var e=se();e&&this._innerSetBreak(e.parseAxisBreakOption(t,$(this.parse,this)))},r.prototype._innerSetBreak=function(t){this._brkCtx&&(this._brkCtx.setBreaks(t),this._calculator.updateMethods(this._brkCtx),this._brkCtx.update(this._extent))},r.prototype._innerGetBreaks=function(){return this._brkCtx?this._brkCtx.breaks:[]},r.prototype.hasBreaks=function(){return this._brkCtx?this._brkCtx.hasBreaks():!1},r.prototype._getExtentSpanWithBreaks=function(){return this._brkCtx&&this._brkCtx.hasBreaks()?this._brkCtx.getExtentSpan():this._extent[1]-this._extent[0]},r.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},r.prototype.isBlank=function(){return this._isBlank},r.prototype.setBlank=function(t){this._isBlank=t},r})();Kh(Zn);var _G=0,cu=(function(){function r(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++_G,this._onCollect=t.onCollect}return r.createByAxisModel=function(t){var e=t.option,a=e.data,n=a&&U(a,SG);return new r({categories:n,needCollect:!n,deduplication:e.dedplication!==!1})},r.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},r.prototype.parseAndCollect=function(t){var e,a=this._needCollect;if(!X(t)&&!a)return t;if(a&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,this._onCollect&&this._onCollect(t,e),e;var n=this._getOrCreateMap();return e=n.get(t),e==null&&(a?(e=this.categories.length,this.categories[e]=t,n.set(t,e),this._onCollect&&this._onCollect(t,e)):e=NaN),e},r.prototype._getOrCreateMap=function(){return this._map||(this._map=K(this.categories))},r})();function SG(r){return it(r)&&r.value!=null?r.value:r+""}var vs=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;a.type="ordinal";var n=a.getSetting("ordinalMeta");return n||(n=new cu({})),W(n)&&(n=new cu({categories:U(n,function(i){return it(i)?i.value:i})})),a._ordinalMeta=n,a._extent=a.getSetting("extent")||[0,n.categories.length-1],a}return t.prototype.parse=function(e){return e==null?NaN:X(e)?this._ordinalMeta.getOrdinal(e):Math.round(e)},t.prototype.contain=function(e){return E0(e,this._extent)&&e>=0&&e=0&&e=0&&e=e},t.prototype.getOrdinalMeta=function(){return this._ordinalMeta},t.prototype.calcNiceTicks=function(){},t.prototype.calcNiceExtent=function(){},t.type="ordinal",t})(Zn);Zn.registerClass(vs);var hn=ae,tn=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type="interval",e._interval=0,e._intervalPrecision=2,e}return t.prototype.parse=function(e){return e==null||e===""?NaN:Number(e)},t.prototype.contain=function(e){return E0(e,this._extent)},t.prototype.normalize=function(e){return this._calculator.normalize(e,this._extent)},t.prototype.scale=function(e){return this._calculator.scale(e,this._extent)},t.prototype.getInterval=function(){return this._interval},t.prototype.setInterval=function(e){this._interval=e,this._niceExtent=this._extent.slice(),this._intervalPrecision=hu(e)},t.prototype.getTicks=function(e){e=e||{};var a=this._interval,n=this._extent,i=this._niceExtent,o=this._intervalPrecision,s=se(),l=[];if(!a)return l;if(e.breakTicks==="only_break"&&s)return s.addBreaksToTicks(l,this._brkCtx.breaks,this._extent),l;var u=1e4;n[0]=0&&(v=hn(v+h*a,o))}if(l.length>0&&v===l[l.length-1].value)break;if(l.length>u)return[]}var c=l.length?l[l.length-1].value:i[1];return n[1]>c&&(e.expandToNicedExtent?l.push({value:hn(c+a,o)}):l.push({value:n[1]})),s&&s.pruneTicksByBreak(e.pruneByBreak,l,this._brkCtx.breaks,function(d){return d.value},this._interval,this._extent),e.breakTicks!=="none"&&s&&s.addBreaksToTicks(l,this._brkCtx.breaks,this._extent),l},t.prototype.getMinorTicks=function(e){for(var a=this.getTicks({expandToNicedExtent:!0}),n=[],i=this.getExtent(),o=1;oi[0]&&d0&&(i=i===null?s:Math.min(i,s))}e[a]=i}}return e}function S2(r){var t=wG(r),e=[];return A(r,function(a){var n=a.coordinateSystem,i=n.getBaseAxis(),o=i.getExtent(),s;if(i.type==="category")s=i.getBandWidth();else if(i.type==="value"||i.type==="time"){var l=i.dim+"_"+i.index,u=t[l],f=Math.abs(o[1]-o[0]),v=i.scale.getExtent(),h=Math.abs(v[1]-v[0]);s=u?f/h*u:f}else{var c=a.getData();s=Math.abs(o[1]-o[0])/c.count()}var d=Z(a.get("barWidth"),s),p=Z(a.get("barMaxWidth"),s),g=Z(a.get("barMinWidth")||(C2(a)?.5:1),s),y=a.get("barGap"),m=a.get("barCategoryGap"),_=a.get("defaultBarGap");e.push({bandWidth:s,barWidth:d,barMaxWidth:p,barMinWidth:g,barGap:y,barCategoryGap:m,defaultBarGap:_,axisKey:O0(i),stackId:m2(a)})}),x2(e)}function x2(r){var t={};A(r,function(a,n){var i=a.axisKey,o=a.bandWidth,s=t[i]||{bandWidth:o,remainedWidth:o,autoWidthCount:0,categoryGap:null,gap:a.defaultBarGap||0,stacks:{}},l=s.stacks;t[i]=s;var u=a.stackId;l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var f=a.barWidth;f&&!l[u].width&&(l[u].width=f,f=Math.min(s.remainedWidth,f),s.remainedWidth-=f);var v=a.barMaxWidth;v&&(l[u].maxWidth=v);var h=a.barMinWidth;h&&(l[u].minWidth=h);var c=a.barGap;c!=null&&(s.gap=c);var d=a.barCategoryGap;d!=null&&(s.categoryGap=d)});var e={};return A(t,function(a,n){e[n]={};var i=a.stacks,o=a.bandWidth,s=a.categoryGap;if(s==null){var l=At(i).length;s=Math.max(35-l*4,15)+"%"}var u=Z(s,o),f=Z(a.gap,1),v=a.remainedWidth,h=a.autoWidthCount,c=(v-u)/(h+(h-1)*f);c=Math.max(c,0),A(i,function(y){var m=y.maxWidth,_=y.minWidth;if(y.width){var S=y.width;m&&(S=Math.min(S,m)),_&&(S=Math.max(S,_)),y.width=S,v-=S+f*S,h--}else{var S=c;m&&mS&&(S=_),S!==c&&(y.width=S,v-=S+f*S,h--)}}),c=(v-u)/(h+(h-1)*f),c=Math.max(c,0);var d=0,p;A(i,function(y,m){y.width||(y.width=c),p=y,d+=y.width*(1+f)}),p&&(d-=p.width*f);var g=-d/2;A(i,function(y,m){e[n][m]=e[n][m]||{bandWidth:o,offset:g,width:y.width},g+=y.width*(1+f)})}),e}function TG(r,t,e){if(r&&t){var a=r[O0(t)];return a}}function b2(r,t){var e=_2(r,t),a=S2(e);A(e,function(n){var i=n.getData(),o=n.coordinateSystem,s=o.getBaseAxis(),l=m2(n),u=a[O0(s)][l],f=u.offset,v=u.width;i.setLayout({bandWidth:u.bandWidth,offset:f,size:v})})}function w2(r){return{seriesType:r,plan:Ps(),reset:function(t){if(T2(t)){var e=t.getData(),a=t.coordinateSystem,n=a.getBaseAxis(),i=a.getOtherAxis(n),o=e.getDimensionIndex(e.mapDimension(i.dim)),s=e.getDimensionIndex(e.mapDimension(n.dim)),l=t.get("showBackground",!0),u=e.mapDimension(i.dim),f=e.getCalculationInfo("stackResultDimension"),v=Qa(e,u)&&!!e.getCalculationInfo("stackedOnSeries"),h=i.isHorizontal(),c=CG(n,i),d=C2(t),p=t.get("barMinHeight")||0,g=f&&e.getDimensionIndex(f),y=e.getLayout("size"),m=e.getLayout("offset");return{progress:function(_,S){for(var x=_.count,b=d&&va(x*3),w=d&&l&&va(x*3),T=d&&va(x),C=a.master.getRect(),M=h?C.width:C.height,D,I=S.getStore(),L=0;(D=_.next())!=null;){var P=I.get(v?g:o,D),k=I.get(s,D),R=c,O=void 0;v&&(O=+P-I.get(o,D));var E=void 0,z=void 0,V=void 0,F=void 0;if(h){var H=a.dataToPoint([P,k]);if(v){var Y=a.dataToPoint([O,k]);R=Y[0]}E=R,z=H[1]+m,V=H[0]-R,F=y,Math.abs(V)0?e:1:e))}var AG=function(r,t,e,a){for(;e>>1;r[n][1]n&&(this._approxInterval=n);var o=Mf.length,s=Math.min(AG(Mf,this._approxInterval,0,o),o-1);this._interval=Mf[s][1],this._intervalPrecision=hu(this._interval),this._minLevelUnit=Mf[Math.max(s-1,0)][0]},t.prototype.parse=function(e){return Dt(e)?e:+wa(e)},t.prototype.contain=function(e){return E0(e,this._extent)},t.prototype.normalize=function(e){return this._calculator.normalize(e,this._extent)},t.prototype.scale=function(e){return this._calculator.scale(e,this._extent)},t.type="time",t})(tn),Mf=[["second",t0],["minute",e0],["hour",Wl],["quarter-day",Wl*6],["half-day",Wl*12],["day",Tr*1.2],["half-week",Tr*3.5],["week",Tr*7],["month",Tr*31],["quarter",Tr*95],["half-year",_S/2],["year",_S]];function A2(r,t,e,a){return Kv(new Date(t),r,a).getTime()===Kv(new Date(e),r,a).getTime()}function MG(r,t){return r/=Tr,r>16?16:r>7.5?7:r>3.5?4:r>1.5?2:1}function DG(r){var t=30*Tr;return r/=t,r>6?6:r>3?3:r>2?2:1}function LG(r){return r/=Wl,r>12?12:r>6?6:r>3.5?4:r>2?2:1}function Px(r,t){return r/=t?e0:t0,r>30?30:r>20?20:r>15?15:r>10?10:r>5?5:r>2?2:1}function IG(r){return Lm(r,!0)}function PG(r,t,e){var a=Math.max(0,yt(ar,t)-1);return Kv(new Date(r),ar[a],e).getTime()}function RG(r,t){var e=new Date(0);e[r](1);var a=e.getTime();e[r](1+t);var n=e.getTime()-a;return function(i,o){return Math.max(0,Math.round((o-i)/n))}}function kG(r,t,e,a,n,i){var o=1e4,s=YB,l=0;function u(L,P,k,R,O,E,z){for(var V=RG(O,L),F=P,H=new Date(F);Fo));)if(H[O](H[R]()+L),F=H.getTime(),i){var Y=i.calcNiceTickMultiple(F,V);Y>0&&(H[O](H[R]()+Y*L),F=H.getTime())}z.push({value:F,notAdd:!0})}function f(L,P,k){var R=[],O=!P.length;if(!A2(Ul(L),a[0],a[1],e)){O&&(P=[{value:PG(a[0],L,e)},{value:a[1]}]);for(var E=0;E=a[0]&&z<=a[1]&&u(F,z,V,H,Y,j,R),L==="year"&&k.length>1&&E===0&&k.unshift({value:k[0].value-F})}}for(var E=0;E=a[0]&&S<=a[1]&&c++)}var x=n/t;if(c>x*1.5&&d>x/1.5||(v.push(m),c>x||r===s[p]))break}h=[]}}}for(var b=Rt(U(v,function(L){return Rt(L,function(P){return P.value>=a[0]&&P.value<=a[1]&&!P.notAdd})}),function(L){return L.length>0}),w=[],T=b.length-1,p=0;p0;)i*=10;var s=[hy(OG(a[0]/i)*i),hy(EG(a[1]/i)*i)];this._interval=i,this._intervalPrecision=hu(i),this._niceExtent=s}},t.prototype.calcNiceExtent=function(e){r.prototype.calcNiceExtent.call(this,e),this._fixMin=e.fixMin,this._fixMax=e.fixMax},t.prototype.contain=function(e){return e=Lf(e)/Lf(this.base),r.prototype.contain.call(this,e)},t.prototype.normalize=function(e){return e=Lf(e)/Lf(this.base),r.prototype.normalize.call(this,e)},t.prototype.scale=function(e){return e=r.prototype.scale.call(this,e),Df(this.base,e)},t.prototype.setBreaksFromOption=function(e){var a=se();if(a){var n=a.logarithmicParseBreaksFromOption(e,this.base,$(this.parse,this)),i=n.parsedOriginal,o=n.parsedLogged;this._originalScale._innerSetBreak(i),this._innerSetBreak(o)}},t.type="log",t})(tn);function If(r,t){return hy(r,Vr(t))}Zn.registerClass(M2);var NG=(function(){function r(t,e,a){this._prepareParams(t,e,a)}return r.prototype._prepareParams=function(t,e,a){a[1]0&&l>0&&!u&&(s=0),s<0&&l<0&&!f&&(l=0));var h=this._determinedMin,c=this._determinedMax;return h!=null&&(s=h,u=!0),c!=null&&(l=c,f=!0),{min:s,max:l,minFixed:u,maxFixed:f,isBlank:v}},r.prototype.modifyDataMinMax=function(t,e){this[zG[t]]=e},r.prototype.setDeterminedMinMax=function(t,e){var a=BG[t];this[a]=e},r.prototype.freeze=function(){this.frozen=!0},r})(),BG={min:"_determinedMin",max:"_determinedMax"},zG={min:"_dataMin",max:"_dataMax"};function D2(r,t,e){var a=r.rawExtentInfo;return a||(a=new NG(r,t,e),r.rawExtentInfo=a,a)}function Pf(r,t){return t==null?null:Ie(t)?NaN:r.parse(t)}function L2(r,t){var e=r.type,a=D2(r,t,r.getExtent()).calculate();r.setBlank(a.isBlank);var n=a.min,i=a.max,o=t.ecModel;if(o&&e==="time"){var s=_2("bar",o),l=!1;if(A(s,function(v){l=l||v.getBaseAxis()===t.axis}),l){var u=S2(s),f=VG(n,i,t,u);n=f.min,i=f.max}}return{extent:[n,i],fixMin:a.minFixed,fixMax:a.maxFixed}}function VG(r,t,e,a){var n=e.axis.getExtent(),i=Math.abs(n[1]-n[0]),o=TG(a,e.axis);if(o===void 0)return{min:r,max:t};var s=1/0;A(o,function(c){s=Math.min(c.offset,s)});var l=-1/0;A(o,function(c){l=Math.max(c.offset+c.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,f=t-r,v=1-(s+l)/i,h=f/v-f;return t+=h*(l/u),r-=h*(s/u),{min:r,max:t}}function Ji(r,t){var e=t,a=L2(r,e),n=a.extent,i=e.get("splitNumber");r instanceof M2&&(r.base=e.get("logBase"));var o=r.type,s=e.get("interval"),l=o==="interval"||o==="time";r.setBreaksFromOption(P2(e)),r.setExtent(n[0],n[1]),r.calcNiceExtent({splitNumber:i,fixMin:a.fixMin,fixMax:a.fixMax,minInterval:l?e.get("minInterval"):null,maxInterval:l?e.get("maxInterval"):null}),s!=null&&r.setInterval&&r.setInterval(s)}function Fu(r,t){if(t=t||r.get("type"),t)switch(t){case"category":return new vs({ordinalMeta:r.getOrdinalMeta?r.getOrdinalMeta():r.getCategories(),extent:[1/0,-1/0]});case"time":return new N0({locale:r.ecModel.getLocaleModel(),useUTC:r.ecModel.get("useUTC")});default:return new(Zn.getClass(t)||tn)}}function GG(r){var t=r.scale.getExtent(),e=t[0],a=t[1];return!(e>0&&a>0||e<0&&a<0)}function Os(r){var t=r.getLabelModel().get("formatter");if(r.type==="time"){var e=ZB(t);return function(n,i){return r.scale.getFormattedLabel(n,i,e)}}else{if(X(t))return function(n){var i=r.scale.getLabel(n),o=t.replace("{value}",i??"");return o};if(tt(t)){if(r.type==="category")return function(n,i){return t(uh(r,n),n.value-r.scale.getExtent()[0],null)};var a=se();return function(n,i){var o=null;return a&&(o=a.makeAxisLabelFormatterParamBreak(o,n.break)),t(uh(r,n),i,o)}}else return function(n){return r.scale.getLabel(n)}}}function uh(r,t){return r.type==="category"?r.scale.getLabel(t):t.value}function B0(r){var t=r.get("interval");return t??"auto"}function I2(r){return r.type==="category"&&B0(r.getLabelModel())===0}function fh(r,t){var e={};return A(r.mapDimensionsAll(t),function(a){e[k0(r,a)]=!0}),At(e)}function FG(r,t,e){t&&A(fh(t,e),function(a){var n=t.getApproximateExtent(a);n[0]r[1]&&(r[1]=n[1])})}function hs(r){return r==="middle"||r==="center"}function du(r){return r.getShallow("show")}function P2(r){var t=r.get("breaks",!0);if(t!=null)return!se()||!HG(r.axis)?void 0:t}function HG(r){return(r.dim==="x"||r.dim==="y"||r.dim==="z"||r.dim==="single")&&r.type!=="category"}var Ns=(function(){function r(){}return r.prototype.getNeedCrossZero=function(){var t=this.option;return!t.scale},r.prototype.getCoordSysModel=function(){},r})();function WG(r){return Ca(null,r)}var UG={isDimensionStacked:Qa,enableDataStack:g2,getStackedDimension:k0};function YG(r,t){var e=t;t instanceof wt||(e=new wt(t));var a=Fu(e);return a.setExtent(r[0],r[1]),Ji(a,e),a}function ZG(r){Qt(r,Ns)}function XG(r,t){return t=t||{},Ft(r,null,null,t.state!=="normal")}const $G=Object.freeze(Object.defineProperty({__proto__:null,createDimensions:nG,createList:WG,createScale:YG,createSymbol:ie,createTextStyle:XG,dataStack:UG,enableHoverEmphasis:In,getECData:ft,getLayoutRect:Xt,mixinAxisModelCommonMethods:ZG},Symbol.toStringTag,{value:"Module"}));var qG=1e-8;function Rx(r,t){return Math.abs(r-t)n&&(a=o,n=l)}if(a)return KG(a.exterior);var u=this.getBoundingRect();return[u.x+u.width/2,u.y+u.height/2]},t.prototype.getBoundingRect=function(e){var a=this._rect;if(a&&!e)return a;var n=[1/0,1/0],i=[-1/0,-1/0],o=this.geometries;return A(o,function(s){s.type==="polygon"?kx(s.exterior,n,i,e):A(s.points,function(l){kx(l,n,i,e)})}),isFinite(n[0])&&isFinite(n[1])&&isFinite(i[0])&&isFinite(i[1])||(n[0]=n[1]=i[0]=i[1]=0),a=new lt(n[0],n[1],i[0]-n[0],i[1]-n[1]),e||(this._rect=a),a},t.prototype.contain=function(e){var a=this.getBoundingRect(),n=this.geometries;if(!a.contain(e[0],e[1]))return!1;t:for(var i=0,o=n.length;i>1^-(s&1),l=l>>1^-(l&1),s+=n,l+=i,n=s,i=l,a.push([s/e,l/e])}return a}function cy(r,t){return r=QG(r),U(Rt(r.features,function(e){return e.geometry&&e.properties&&e.geometry.coordinates.length>0}),function(e){var a=e.properties,n=e.geometry,i=[];switch(n.type){case"Polygon":var o=n.coordinates;i.push(new Ex(o[0],o.slice(1)));break;case"MultiPolygon":A(n.coordinates,function(l){l[0]&&i.push(new Ex(l[0],l.slice(1)))});break;case"LineString":i.push(new Ox([n.coordinates]));break;case"MultiLineString":i.push(new Ox(n.coordinates))}var s=new k2(a[t||"name"],i,a.cp);return s.properties=a,s})}const t3=Object.freeze(Object.defineProperty({__proto__:null,MAX_SAFE_INTEGER:Mg,asc:lr,getPercentWithPrecision:_O,getPixelPrecision:Mm,getPrecision:Vr,getPrecisionSafe:IM,isNumeric:Im,isRadianAroundZero:is,linearMap:kt,nice:Lm,numericToNumber:ma,parseDate:wa,parsePercent:Z,quantile:gv,quantity:RM,quantityExponent:jh,reformIntervals:Dg,remRadian:Dm,round:ae},Symbol.toStringTag,{value:"Module"})),e3=Object.freeze(Object.defineProperty({__proto__:null,format:zu,parse:wa,roundTime:Kv},Symbol.toStringTag,{value:"Module"})),r3=Object.freeze(Object.defineProperty({__proto__:null,Arc:Ou,BezierCurve:Ts,BoundingRect:lt,Circle:Ta,CompoundPath:Nu,Ellipse:Eu,Group:rt,Image:xe,IncrementalDisplayable:mD,Line:ne,LinearGradient:ro,Polygon:Ee,Polyline:Ae,RadialGradient:Wm,Rect:St,Ring:ws,Sector:ke,Text:Mt,clipPointsByRect:Xm,clipRectByRect:wD,createIcon:As,extendPath:xD,extendShape:SD,getShapeClass:iu,getTransform:Pn,initProps:Zt,makeImage:Ym,makePath:ss,mergePath:or,registerShape:Rr,resizePath:Zm,updateProps:It},Symbol.toStringTag,{value:"Module"})),a3=Object.freeze(Object.defineProperty({__proto__:null,addCommas:l0,capitalFirst:ez,encodeHTML:ze,formatTime:tz,formatTpl:f0,getTextRect:JB,getTooltipMarker:GD,normalizeCssArray:Ls,toCamelCase:u0,truncateText:JO},Symbol.toStringTag,{value:"Module"})),n3=Object.freeze(Object.defineProperty({__proto__:null,bind:$,clone:et,curry:pt,defaults:nt,each:A,extend:G,filter:Rt,indexOf:yt,inherits:_m,isArray:W,isFunction:tt,isObject:it,isString:X,map:U,merge:mt,reduce:Mr},Symbol.toStringTag,{value:"Module"}));var i3=bt(),Zl=bt(),Xr={estimate:1,determine:2};function vh(r){return{out:{noPxChangeTryDetermine:[]},kind:r}}function O2(r,t){var e=U(t,function(a){return r.scale.parse(a)});return r.type==="time"&&e.length>0&&(e.sort(),e.unshift(e[0]),e.push(e[e.length-1])),e}function o3(r,t){var e=r.getLabelModel().get("customValues");if(e){var a=Os(r),n=r.scale.getExtent(),i=O2(r,e),o=Rt(i,function(s){return s>=n[0]&&s<=n[1]});return{labels:U(o,function(s){var l={value:s};return{formattedLabel:a(l),rawLabel:r.scale.getLabel(l),tickValue:s,time:void 0,break:void 0}})}}return r.type==="category"?l3(r,t):f3(r)}function s3(r,t,e){var a=r.getTickModel().get("customValues");if(a){var n=r.scale.getExtent(),i=O2(r,a);return{ticks:Rt(i,function(o){return o>=n[0]&&o<=n[1]})}}return r.type==="category"?u3(r,t):{ticks:U(r.scale.getTicks(e),function(o){return o.value})}}function l3(r,t){var e=r.getLabelModel(),a=N2(r,e,t);return!e.get("show")||r.scale.isBlank()?{labels:[]}:a}function N2(r,t,e){var a=h3(r),n=B0(t),i=e.kind===Xr.estimate;if(!i){var o=z2(a,n);if(o)return o}var s,l;tt(n)?s=F2(r,n):(l=n==="auto"?c3(r,e):n,s=G2(r,l));var u={labels:s,labelCategoryInterval:l};return i?e.out.noPxChangeTryDetermine.push(function(){return dy(a,n,u),!0}):dy(a,n,u),u}function u3(r,t){var e=v3(r),a=B0(t),n=z2(e,a);if(n)return n;var i,o;if((!t.get("show")||r.scale.isBlank())&&(i=[]),tt(a))i=F2(r,a,!0);else if(a==="auto"){var s=N2(r,r.getLabelModel(),vh(Xr.determine));o=s.labelCategoryInterval,i=U(s.labels,function(l){return l.tickValue})}else o=a,i=G2(r,o,!0);return dy(e,a,{ticks:i,tickCategoryInterval:o})}function f3(r){var t=r.scale.getTicks(),e=Os(r);return{labels:U(t,function(a,n){return{formattedLabel:e(a,n),rawLabel:r.scale.getLabel(a),tickValue:a.value,time:a.time,break:a.break}})}}var v3=B2("axisTick"),h3=B2("axisLabel");function B2(r){return function(e){return Zl(e)[r]||(Zl(e)[r]={list:[]})}}function z2(r,t){for(var e=0;ef&&(u=Math.max(1,Math.floor(l/f)));for(var v=s[0],h=r.dataToCoord(v+1)-r.dataToCoord(v),c=Math.abs(h*Math.cos(i)),d=Math.abs(h*Math.sin(i)),p=0,g=0;v<=s[1];v+=u){var y=0,m=0,_=$h(n({value:v}),a.font,"center","top");y=_.width*1.3,m=_.height*1.3,p=Math.max(p,y,7),g=Math.max(g,m,7)}var S=p/c,x=g/d;isNaN(S)&&(S=1/0),isNaN(x)&&(x=1/0);var b=Math.max(0,Math.floor(Math.min(S,x)));if(e===Xr.estimate)return t.out.noPxChangeTryDetermine.push($(p3,null,r,b,l)),b;var w=V2(r,b,l);return w??b}function p3(r,t,e){return V2(r,t,e)==null}function V2(r,t,e){var a=i3(r.model),n=r.getExtent(),i=a.lastAutoInterval,o=a.lastTickCount;if(i!=null&&o!=null&&Math.abs(i-t)<=1&&Math.abs(o-e)<=1&&i>t&&a.axisExtent0===n[0]&&a.axisExtent1===n[1])return i;a.lastTickCount=e,a.lastAutoInterval=t,a.axisExtent0=n[0],a.axisExtent1=n[1]}function g3(r){var t=r.getLabelModel();return{axisRotate:r.getRotate?r.getRotate():r.isHorizontal&&!r.isHorizontal()?90:0,labelRotate:t.get("rotate")||0,font:t.getFont()}}function G2(r,t,e){var a=Os(r),n=r.scale,i=n.getExtent(),o=r.getLabelModel(),s=[],l=Math.max((t||0)+1,1),u=i[0],f=n.count();u!==0&&l>1&&f/l>2&&(u=Math.round(Math.ceil(u/l)*l));var v=I2(r),h=o.get("showMinLabel")||v,c=o.get("showMaxLabel")||v;h&&u!==i[0]&&p(i[0]);for(var d=u;d<=i[1];d+=l)p(d);c&&d-l!==i[1]&&p(i[1]);function p(g){var y={value:g};s.push(e?g:{formattedLabel:a(y),rawLabel:n.getLabel(y),tickValue:g,time:void 0,break:void 0})}return s}function F2(r,t,e){var a=r.scale,n=Os(r),i=[];return A(a.getTicks(),function(o){var s=a.getLabel(o),l=o.value;t(o.value,s)&&i.push(e?l:{formattedLabel:n(o),rawLabel:s,tickValue:l,time:void 0,break:void 0})}),i}var Nx=[0,1],kr=(function(){function r(t,e,a){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e,this._extent=a||[0,0]}return r.prototype.contain=function(t){var e=this._extent,a=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=a&&t<=n},r.prototype.containData=function(t){return this.scale.contain(this.scale.parse(t))},r.prototype.getExtent=function(){return this._extent.slice()},r.prototype.getPixelPrecision=function(t){return Mm(t||this.scale.getExtent(),this._extent)},r.prototype.setExtent=function(t,e){var a=this._extent;a[0]=t,a[1]=e},r.prototype.dataToCoord=function(t,e){var a=this._extent,n=this.scale;return t=n.normalize(n.parse(t)),this.onBand&&n.type==="ordinal"&&(a=a.slice(),Bx(a,n.count())),kt(t,Nx,a,e)},r.prototype.coordToData=function(t,e){var a=this._extent,n=this.scale;this.onBand&&n.type==="ordinal"&&(a=a.slice(),Bx(a,n.count()));var i=kt(t,a,Nx,e);return this.scale.scale(i)},r.prototype.pointToData=function(t,e){},r.prototype.getTicksCoords=function(t){t=t||{};var e=t.tickModel||this.getTickModel(),a=s3(this,e,{breakTicks:t.breakTicks,pruneByBreak:t.pruneByBreak}),n=a.ticks,i=U(n,function(s){return{coord:this.dataToCoord(this.scale.type==="ordinal"?this.scale.getRawOrdinalNumber(s):s),tickValue:s}},this),o=e.get("alignWithLabel");return y3(this,i,o,t.clamp),i},r.prototype.getMinorTicksCoords=function(){if(this.scale.type==="ordinal")return[];var t=this.model.getModel("minorTick"),e=t.get("splitNumber");e>0&&e<100||(e=5);var a=this.scale.getMinorTicks(e),n=U(a,function(i){return U(i,function(o){return{coord:this.dataToCoord(o),tickValue:o}},this)},this);return n},r.prototype.getViewLabels=function(t){return t=t||vh(Xr.determine),o3(this,t).labels},r.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},r.prototype.getTickModel=function(){return this.model.getModel("axisTick")},r.prototype.getBandWidth=function(){var t=this._extent,e=this.scale.getExtent(),a=e[1]-e[0]+(this.onBand?1:0);a===0&&(a=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/a},r.prototype.calculateCategoryInterval=function(t){return t=t||vh(Xr.determine),d3(this,t)},r})();function Bx(r,t){var e=r[1]-r[0],a=t,n=e/a/2;r[0]+=n,r[1]-=n}function y3(r,t,e,a){var n=t.length;if(!r.onBand||e||!n)return;var i=r.getExtent(),o,s;if(n===1)t[0].coord=i[0],t[0].onBand=!0,o=t[1]={coord:i[1],tickValue:t[0].tickValue,onBand:!0};else{var l=t[n-1].tickValue-t[0].tickValue,u=(t[n-1].coord-t[0].coord)/l;A(t,function(c){c.coord-=u/2,c.onBand=!0});var f=r.scale.getExtent();s=1+f[1]-t[n-1].tickValue,o={coord:t[n-1].coord+u*s,tickValue:f[1]+1,onBand:!0},t.push(o)}var v=i[0]>i[1];h(t[0].coord,i[0])&&(a?t[0].coord=i[0]:t.shift()),a&&h(i[0],t[0].coord)&&t.unshift({coord:i[0],onBand:!0}),h(i[1],o.coord)&&(a?o.coord=i[1]:t.pop()),a&&h(o.coord,i[1])&&t.push({coord:i[1],onBand:!0});function h(c,d){return c=ae(c),d=ae(d),v?c>d:cn&&(n+=el);var c=Math.atan2(s,o);if(c<0&&(c+=el),c>=a&&c<=n||c+el>=a&&c+el<=n)return l[0]=f,l[1]=v,u-e;var d=e*Math.cos(a)+r,p=e*Math.sin(a)+t,g=e*Math.cos(n)+r,y=e*Math.sin(n)+t,m=(d-o)*(d-o)+(p-s)*(p-s),_=(g-o)*(g-o)+(y-s)*(y-s);return m<_?(l[0]=d,l[1]=p,Math.sqrt(m)):(l[0]=g,l[1]=y,Math.sqrt(_))}function hh(r,t,e,a,n,i,o,s){var l=n-r,u=i-t,f=e-r,v=a-t,h=Math.sqrt(f*f+v*v);f/=h,v/=h;var c=l*f+u*v,d=c/h;s&&(d=Math.min(Math.max(d,0),1)),d*=h;var p=o[0]=r+d*f,g=o[1]=t+d*v;return Math.sqrt((p-n)*(p-n)+(g-i)*(g-i))}function H2(r,t,e,a,n,i,o){e<0&&(r=r+e,e=-e),a<0&&(t=t+a,a=-a);var s=r+e,l=t+a,u=o[0]=Math.min(Math.max(n,r),s),f=o[1]=Math.min(Math.max(i,t),l);return Math.sqrt((u-n)*(u-n)+(f-i)*(f-i))}var zr=[];function C3(r,t,e){var a=H2(t.x,t.y,t.width,t.height,r.x,r.y,zr);return e.set(zr[0],zr[1]),a}function A3(r,t,e){for(var a=0,n=0,i=0,o=0,s,l,u=1/0,f=t.data,v=r.x,h=r.y,c=0;c0){t=t/180*Math.PI,Gr.fromArray(r[0]),Yt.fromArray(r[1]),ee.fromArray(r[2]),st.sub(ha,Gr,Yt),st.sub(la,ee,Yt);var e=ha.len(),a=la.len();if(!(e<.001||a<.001)){ha.scale(1/e),la.scale(1/a);var n=ha.dot(la),i=Math.cos(t);if(i1&&st.copy(Ue,ee),Ue.toArray(r[1])}}}}function M3(r,t,e){if(e<=180&&e>0){e=e/180*Math.PI,Gr.fromArray(r[0]),Yt.fromArray(r[1]),ee.fromArray(r[2]),st.sub(ha,Yt,Gr),st.sub(la,ee,Yt);var a=ha.len(),n=la.len();if(!(a<.001||n<.001)){ha.scale(1/a),la.scale(1/n);var i=ha.dot(t),o=Math.cos(e);if(i=l)st.copy(Ue,ee);else{Ue.scaleAndAdd(la,s/Math.tan(Math.PI/2-f));var v=ee.x!==Yt.x?(Ue.x-Yt.x)/(ee.x-Yt.x):(Ue.y-Yt.y)/(ee.y-Yt.y);if(isNaN(v))return;v<0?st.copy(Ue,Yt):v>1&&st.copy(Ue,ee)}Ue.toArray(r[1])}}}}function Od(r,t,e,a){var n=e==="normal",i=n?r:r.ensureState(e);i.ignore=t;var o=a.get("smooth");o&&o===!0&&(o=.3),i.shape=i.shape||{},o>0&&(i.shape.smooth=o);var s=a.getModel("lineStyle").getLineStyle();n?r.useStyle(s):i.style=s}function D3(r,t){var e=t.smooth,a=t.points;if(a)if(r.moveTo(a[0][0],a[0][1]),e>0&&a.length>=3){var n=Ba(a[0],a[1]),i=Ba(a[1],a[2]);if(!n||!i){r.lineTo(a[1][0],a[1][1]),r.lineTo(a[2][0],a[2][1]);return}var o=Math.min(n,i)*e,s=Nl([],a[1],a[0],o/n),l=Nl([],a[1],a[2],o/i),u=Nl([],s,l,.5);r.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),r.bezierCurveTo(l[0],l[1],l[0],l[1],a[2][0],a[2][1])}else for(var f=1;f0){S(M*C,0,i);var D=M+w;D<0&&x(-D*C,1)}else x(-w*C,1)}}function S(w,T,C){w!==0&&(f=!0);for(var M=T;M0)for(var D=0;D0;D--){var k=C[D-1]*P;S(-k,D,i)}}}function b(w){var T=w<0?-1:1;w=Math.abs(w);for(var C=Math.ceil(w/(i-1)),M=0;M0?S(C,0,M+1):S(-C,i-M-1,i),w-=C,w<=0)return}return f}function P3(r){for(var t=0;t=0&&a.attr(i.oldLayoutSelect),yt(h,"emphasis")>=0&&a.attr(i.oldLayoutEmphasis)),It(a,u,e,l)}else if(a.attr(u),!Ms(a).valueAnimation){var v=Q(a.style.opacity,1);a.style.opacity=0,Zt(a,{style:{opacity:v}},e,l)}if(i.oldLayout=u,a.states.select){var c=i.oldLayoutSelect={};Rf(c,u,kf),Rf(c,a.states.select,kf)}if(a.states.emphasis){var d=i.oldLayoutEmphasis={};Rf(d,u,kf),Rf(d,a.states.emphasis,kf)}LD(a,l,f,e,e)}if(n&&!n.ignore&&!n.invisible){var i=E3(n),o=i.oldLayout,p={points:n.shape.points};o?(n.attr({shape:o}),It(n,{shape:p},e)):(n.setShape(p),n.style.strokePercent=0,Zt(n,{style:{strokePercent:1}},e)),i.oldLayout=p}},r})(),zd=bt();function N3(r){r.registerUpdateLifecycle("series:beforeupdate",function(t,e,a){var n=zd(e).labelManager;n||(n=zd(e).labelManager=new O3),n.clearLabels()}),r.registerUpdateLifecycle("series:layoutlabels",function(t,e,a){var n=zd(e).labelManager;a.updatedSeries.forEach(function(i){n.addLabelsOfSeries(e.getViewOfSeriesModel(i))}),n.updateLayoutConfig(e),n.layout(e),n.processLabelsOverall()})}var Vd=Math.sin,Gd=Math.cos,$2=Math.PI,yi=Math.PI*2,B3=180/$2,q2=(function(){function r(){}return r.prototype.reset=function(t){this._start=!0,this._d=[],this._str="",this._p=Math.pow(10,t||4)},r.prototype.moveTo=function(t,e){this._add("M",t,e)},r.prototype.lineTo=function(t,e){this._add("L",t,e)},r.prototype.bezierCurveTo=function(t,e,a,n,i,o){this._add("C",t,e,a,n,i,o)},r.prototype.quadraticCurveTo=function(t,e,a,n){this._add("Q",t,e,a,n)},r.prototype.arc=function(t,e,a,n,i,o){this.ellipse(t,e,a,a,0,n,i,o)},r.prototype.ellipse=function(t,e,a,n,i,o,s,l){var u=s-o,f=!l,v=Math.abs(u),h=wn(v-yi)||(f?u>=yi:-u>=yi),c=u>0?u%yi:u%yi+yi,d=!1;h?d=!0:wn(v)?d=!1:d=c>=$2==!!f;var p=t+a*Gd(o),g=e+n*Vd(o);this._start&&this._add("M",p,g);var y=Math.round(i*B3);if(h){var m=1/this._p,_=(f?1:-1)*(yi-m);this._add("A",a,n,y,1,+f,t+a*Gd(o+_),e+n*Vd(o+_)),m>.01&&this._add("A",a,n,y,0,+f,p,g)}else{var S=t+a*Gd(s),x=e+n*Vd(s);this._add("A",a,n,y,+d,+f,S,x)}},r.prototype.rect=function(t,e,a,n){this._add("M",t,e),this._add("l",a,0),this._add("l",0,n),this._add("l",-a,0),this._add("Z")},r.prototype.closePath=function(){this._d.length>0&&this._add("Z")},r.prototype._add=function(t,e,a,n,i,o,s,l,u){for(var f=[],v=this._p,h=1;h"}function Z3(r){return""}function F0(r,t){t=t||{};var e=t.newline?` +`:"";function a(n){var i=n.children,o=n.tag,s=n.attrs,l=n.text;return Y3(o,s)+(o!=="style"?ze(l):l||"")+(i?""+e+U(i,function(u){return a(u)}).join(e)+e:"")+Z3(o)}return a(r)}function X3(r,t,e){e=e||{};var a=e.newline?` +`:"",n=" {"+a,i=a+"}",o=U(At(r),function(l){return l+n+U(At(r[l]),function(u){return u+":"+r[l][u]+";"}).join(a)+i}).join(a),s=U(At(t),function(l){return"@keyframes "+l+n+U(At(t[l]),function(u){return u+n+U(At(t[l][u]),function(f){var v=t[l][u][f];return f==="d"&&(v='path("'+v+'")'),f+":"+v+";"}).join(a)+i}).join(a)+i}).join(a);return!o&&!s?"":[""].join(a)}function _y(r){return{zrId:r,shadowCache:{},patternCache:{},gradientCache:{},clipPathCache:{},defs:{},cssNodes:{},cssAnims:{},cssStyleCache:{},cssAnimIdx:0,shadowIdx:0,gradientIdx:0,patternIdx:0,clipPathIdx:0}}function Wx(r,t,e,a){return ye("svg","root",{width:r,height:t,xmlns:j2,"xmlns:xlink":K2,version:"1.1",baseProfile:"full",viewBox:a?"0 0 "+r+" "+t:!1},e)}var $3=0;function Q2(){return $3++}var Ux={cubicIn:"0.32,0,0.67,0",cubicOut:"0.33,1,0.68,1",cubicInOut:"0.65,0,0.35,1",quadraticIn:"0.11,0,0.5,0",quadraticOut:"0.5,1,0.89,1",quadraticInOut:"0.45,0,0.55,1",quarticIn:"0.5,0,0.75,0",quarticOut:"0.25,1,0.5,1",quarticInOut:"0.76,0,0.24,1",quinticIn:"0.64,0,0.78,0",quinticOut:"0.22,1,0.36,1",quinticInOut:"0.83,0,0.17,1",sinusoidalIn:"0.12,0,0.39,0",sinusoidalOut:"0.61,1,0.88,1",sinusoidalInOut:"0.37,0,0.63,1",exponentialIn:"0.7,0,0.84,0",exponentialOut:"0.16,1,0.3,1",exponentialInOut:"0.87,0,0.13,1",circularIn:"0.55,0,1,0.45",circularOut:"0,0.55,0.45,1",circularInOut:"0.85,0,0.15,1"},Si="transform-origin";function q3(r,t,e){var a=G({},r.shape);G(a,t),r.buildPath(e,a);var n=new q2;return n.reset(_M(r)),e.rebuildPath(n,1),n.generateStr(),n.getStr()}function j3(r,t){var e=t.originX,a=t.originY;(e||a)&&(r[Si]=e+"px "+a+"px")}var K3={fill:"fill",opacity:"opacity",lineWidth:"stroke-width",lineDashOffset:"stroke-dashoffset"};function tI(r,t){var e=t.zrId+"-ani-"+t.cssAnimIdx++;return t.cssAnims[e]=r,e}function J3(r,t,e){var a=r.shape.paths,n={},i,o;if(A(a,function(l){var u=_y(e.zrId);u.animation=!0,gc(l,{},u,!0);var f=u.cssAnims,v=u.cssNodes,h=At(f),c=h.length;if(c){o=h[c-1];var d=f[o];for(var p in d){var g=d[p];n[p]=n[p]||{d:""},n[p].d+=g.d||""}for(var y in v){var m=v[y].animation;m.indexOf(o)>=0&&(i=m)}}}),!!i){t.d=!1;var s=tI(n,e);return i.replace(o,s)}}function Yx(r){return X(r)?Ux[r]?"cubic-bezier("+Ux[r]+")":wm(r)?r:"":""}function gc(r,t,e,a){var n=r.animators,i=n.length,o=[];if(r instanceof Nu){var s=J3(r,t,e);if(s)o.push(s);else if(!i)return}else if(!i)return;for(var l={},u=0;u0}).length){var Bt=tI(w,e);return Bt+" "+m[0]+" both"}}for(var g in l){var s=p(l[g]);s&&o.push(s)}if(o.length){var y=e.zrId+"-cls-"+Q2();e.cssNodes["."+y]={animation:o.join(",")},t.class=y}}function Q3(r,t,e){if(!r.ignore)if(r.isSilent()){var a={"pointer-events":"none"};Zx(a,t,e)}else{var n=r.states.emphasis&&r.states.emphasis.style?r.states.emphasis.style:{},i=n.fill;if(!i){var o=r.style&&r.style.fill,s=r.states.select&&r.states.select.style&&r.states.select.style.fill,l=r.currentStates.indexOf("select")>=0&&s||o;l&&(i=Vv(l))}var u=n.lineWidth;if(u){var f=!n.strokeNoScale&&r.transform?r.transform[0]:1;u=u/f}var a={cursor:"pointer"};i&&(a.fill=i),n.stroke&&(a.stroke=n.stroke),u&&(a["stroke-width"]=u),Zx(a,t,e)}}function Zx(r,t,e,a){var n=JSON.stringify(r),i=e.cssStyleCache[n];i||(i=e.zrId+"-cls-"+Q2(),e.cssStyleCache[n]=i,e.cssNodes["."+i+":hover"]=r),t.class=t.class?t.class+" "+i:i}var pu=Math.round;function eI(r){return r&&X(r.src)}function rI(r){return r&&tt(r.toDataURL)}function H0(r,t,e,a){H3(function(n,i){var o=n==="fill"||n==="stroke";o&&mM(i)?nI(t,r,n,a):o&&Cm(i)?iI(e,r,n,a):r[n]=i,o&&a.ssr&&i==="none"&&(r["pointer-events"]="visible")},t,e,!1),oF(e,r,a)}function W0(r,t){var e=MM(t);e&&(e.each(function(a,n){a!=null&&(r[(Hx+n).toLowerCase()]=a+"")}),t.isSilent()&&(r[Hx+"silent"]="true"))}function Xx(r){return wn(r[0]-1)&&wn(r[1])&&wn(r[2])&&wn(r[3]-1)}function tF(r){return wn(r[4])&&wn(r[5])}function U0(r,t,e){if(t&&!(tF(t)&&Xx(t))){var a=1e4;r.transform=Xx(t)?"translate("+pu(t[4]*a)/a+" "+pu(t[5]*a)/a+")":OE(t)}}function $x(r,t,e){for(var a=r.points,n=[],i=0;i"u"){var g="Image width/height must been given explictly in svg-ssr renderer.";Re(h,g),Re(c,g)}else if(h==null||c==null){var y=function(M,D){if(M){var I=M.elm,L=h||D.width,P=c||D.height;M.tag==="pattern"&&(u?(P=1,L/=i.width):f&&(L=1,P/=i.height)),M.attrs.width=L,M.attrs.height=P,I&&(I.setAttribute("width",L),I.setAttribute("height",P))}},m=Em(d,null,r,function(M){l||y(b,M),y(v,M)});m&&m.width&&m.height&&(h=h||m.width,c=c||m.height)}v=ye("image","img",{href:d,width:h,height:c}),o.width=h,o.height=c}else n.svgElement&&(v=et(n.svgElement),o.width=n.svgWidth,o.height=n.svgHeight);if(v){var _,S;l?_=S=1:u?(S=1,_=o.width/i.width):f?(_=1,S=o.height/i.height):o.patternUnits="userSpaceOnUse",_!=null&&!isNaN(_)&&(o.width=_),S!=null&&!isNaN(S)&&(o.height=S);var x=SM(n);x&&(o.patternTransform=x);var b=ye("pattern","",o,[v]),w=F0(b),T=a.patternCache,C=T[w];C||(C=a.zrId+"-p"+a.patternIdx++,T[w]=C,o.id=C,b=a.defs[C]=ye("pattern",C,o,[v])),t[e]=Xh(C)}}function sF(r,t,e){var a=e.clipPathCache,n=e.defs,i=a[r.id];if(!i){i=e.zrId+"-c"+e.clipPathIdx++;var o={id:i};a[r.id]=i,n[i]=ye("clipPath",i,o,[aI(r,e)])}t["clip-path"]=Xh(i)}function Kx(r){return document.createTextNode(r)}function Mi(r,t,e){r.insertBefore(t,e)}function Jx(r,t){r.removeChild(t)}function Qx(r,t){r.appendChild(t)}function oI(r){return r.parentNode}function sI(r){return r.nextSibling}function Fd(r,t){r.textContent=t}var tb=58,lF=120,uF=ye("","");function Sy(r){return r===void 0}function ia(r){return r!==void 0}function fF(r,t,e){for(var a={},n=t;n<=e;++n){var i=r[n].key;i!==void 0&&(a[i]=n)}return a}function Dl(r,t){var e=r.key===t.key,a=r.tag===t.tag;return a&&e}function gu(r){var t,e=r.children,a=r.tag;if(ia(a)){var n=r.elm=J2(a);if(Y0(uF,r),W(e))for(t=0;ti?(d=e[l+1]==null?null:e[l+1].elm,lI(r,d,e,n,l)):gh(r,t,a,i))}function Go(r,t){var e=t.elm=r.elm,a=r.children,n=t.children;r!==t&&(Y0(r,t),Sy(t.text)?ia(a)&&ia(n)?a!==n&&vF(e,a,n):ia(n)?(ia(r.text)&&Fd(e,""),lI(e,null,n,0,n.length-1)):ia(a)?gh(e,a,0,a.length-1):ia(r.text)&&Fd(e,""):r.text!==t.text&&(ia(a)&&gh(e,a,0,a.length-1),Fd(e,t.text)))}function hF(r,t){if(Dl(r,t))Go(r,t);else{var e=r.elm,a=oI(e);gu(t),a!==null&&(Mi(a,t.elm,sI(e)),gh(a,[r],0,0))}return t}var cF=0,dF=(function(){function r(t,e,a){if(this.type="svg",this.refreshHover=eb(),this.configLayer=eb(),this.storage=e,this._opts=a=G({},a),this.root=t,this._id="zr"+cF++,this._oldVNode=Wx(a.width,a.height),t&&!a.ssr){var n=this._viewport=document.createElement("div");n.style.cssText="position:relative;overflow:hidden";var i=this._svgDom=this._oldVNode.elm=J2("svg");Y0(null,this._oldVNode),n.appendChild(i),t.appendChild(n)}this.resize(a.width,a.height)}return r.prototype.getType=function(){return this.type},r.prototype.getViewportRoot=function(){return this._viewport},r.prototype.getViewportRootOffset=function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},r.prototype.getSvgDom=function(){return this._svgDom},r.prototype.refresh=function(){if(this.root){var t=this.renderToVNode({willUpdate:!0});t.attrs.style="position:absolute;left:0;top:0;user-select:none",hF(this._oldVNode,t),this._oldVNode=t}},r.prototype.renderOneToVNode=function(t){return jx(t,_y(this._id))},r.prototype.renderToVNode=function(t){t=t||{};var e=this.storage.getDisplayList(!0),a=this._width,n=this._height,i=_y(this._id);i.animation=t.animation,i.willUpdate=t.willUpdate,i.compress=t.compress,i.emphasis=t.emphasis,i.ssr=this._opts.ssr;var o=[],s=this._bgVNode=pF(a,n,this._backgroundColor,i);s&&o.push(s);var l=t.compress?null:this._mainVNode=ye("g","main",{},[]);this._paintList(e,i,l?l.children:o),l&&o.push(l);var u=U(At(i.defs),function(h){return i.defs[h]});if(u.length&&o.push(ye("defs","defs",{},u)),t.animation){var f=X3(i.cssNodes,i.cssAnims,{newline:!0});if(f){var v=ye("style","stl",{},[],f);o.push(v)}}return Wx(a,n,o,t.useViewBox)},r.prototype.renderToString=function(t){return t=t||{},F0(this.renderToVNode({animation:Q(t.cssAnimation,!0),emphasis:Q(t.cssEmphasis,!0),willUpdate:!1,compress:!0,useViewBox:Q(t.useViewBox,!0)}),{newline:!0})},r.prototype.setBackgroundColor=function(t){this._backgroundColor=t},r.prototype.getSvgRoot=function(){return this._mainVNode&&this._mainVNode.elm},r.prototype._paintList=function(t,e,a){for(var n=t.length,i=[],o=0,s,l,u=0,f=0;f=0&&!(h&&l&&h[p]===l[p]);p--);for(var g=d-1;g>p;g--)o--,s=i[o-1];for(var y=p+1;y=s)}}for(var v=this.__startIndex;v15)break}}P.prevElClipPaths&&y.restore()};if(m)if(m.length===0)T=g.__endIndex;else for(var M=c.dpr,D=0;D0&&t>n[0]){for(l=0;lt);l++);s=a[n[l]]}if(n.splice(l+1,0,t),a[t]=e,!e.virtual)if(s){var u=s.dom;u.nextSibling?o.insertBefore(e.dom,u.nextSibling):o.appendChild(e.dom)}else o.firstChild?o.insertBefore(e.dom,o.firstChild):o.appendChild(e.dom);e.painter||(e.painter=this)}},r.prototype.eachLayer=function(t,e){for(var a=this._zlevelList,n=0;n0?Ef:0),this._needsManuallyCompositing),f.__builtin__||Hh("ZLevel "+u+" has been used by unkown layer "+f.id),f!==i&&(f.__used=!0,f.__startIndex!==l&&(f.__dirty=!0),f.__startIndex=l,f.incremental?f.__drawIndex=-1:f.__drawIndex=l,e(l),i=f),n.__dirty&ir&&!n.__inHover&&(f.__dirty=!0,f.incremental&&f.__drawIndex<0&&(f.__drawIndex=l))}e(l),this.eachBuiltinLayer(function(v,h){!v.__used&&v.getElementCount()>0&&(v.__dirty=!0,v.__startIndex=v.__endIndex=v.__drawIndex=0),v.__dirty&&v.__drawIndex<0&&(v.__drawIndex=v.__startIndex)})},r.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},r.prototype._clearLayer=function(t){t.clear()},r.prototype.setBackgroundColor=function(t){this._backgroundColor=t,A(this._layers,function(e){e.setUnpainted()})},r.prototype.configLayer=function(t,e){if(e){var a=this._layerConfig;a[t]?mt(a[t],e,!0):a[t]=e;for(var n=0;n-1&&(u.style.stroke=u.style.fill,u.style.fill=B.color.neutral00,u.style.lineWidth=2),a},t.type="series.line",t.dependencies=["grid","polar"],t.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:6,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},t})(zt);function cs(r,t){var e=r.mapDimensionsAll("defaultedLabel"),a=e.length;if(a===1){var n=us(r,t,e[0]);return n!=null?n+"":null}else if(a){for(var i=[],o=0;o=0&&a.push(t[i])}return a.join(" ")}var Hu=(function(r){N(t,r);function t(e,a,n,i){var o=r.call(this)||this;return o.updateData(e,a,n,i),o}return t.prototype._createSymbol=function(e,a,n,i,o,s){this.removeAll();var l=ie(e,-1,-1,2,2,null,s);l.attr({z2:Q(o,100),culling:!0,scaleX:i[0]/2,scaleY:i[1]/2}),l.drift=wF,this._symbolType=e,this.add(l)},t.prototype.stopSymbolAnimation=function(e){this.childAt(0).stopAnimation(null,e)},t.prototype.getSymbolType=function(){return this._symbolType},t.prototype.getSymbolPath=function(){return this.childAt(0)},t.prototype.highlight=function(){ja(this.childAt(0))},t.prototype.downplay=function(){Ka(this.childAt(0))},t.prototype.setZ=function(e,a){var n=this.childAt(0);n.zlevel=e,n.z=a},t.prototype.setDraggable=function(e,a){var n=this.childAt(0);n.draggable=e,n.cursor=!a&&e?"move":n.cursor},t.prototype.updateData=function(e,a,n,i){this.silent=!1;var o=e.getItemVisual(a,"symbol")||"circle",s=e.hostModel,l=t.getSymbolSize(e,a),u=t.getSymbolZ2(e,a),f=o!==this._symbolType,v=i&&i.disableAnimation;if(f){var h=e.getItemVisual(a,"symbolKeepAspect");this._createSymbol(o,e,a,l,u,h)}else{var c=this.childAt(0);c.silent=!1;var d={scaleX:l[0]/2,scaleY:l[1]/2};v?c.attr(d):It(c,d,s,a),Ir(c)}if(this._updateCommon(e,a,l,n,i),f){var c=this.childAt(0);if(!v){var d={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:c.style.opacity}};c.scaleX=c.scaleY=0,c.style.opacity=0,Zt(c,d,s,a)}}v&&this.childAt(0).stopAnimation("leave")},t.prototype._updateCommon=function(e,a,n,i,o){var s=this.childAt(0),l=e.hostModel,u,f,v,h,c,d,p,g,y;if(i&&(u=i.emphasisItemStyle,f=i.blurItemStyle,v=i.selectItemStyle,h=i.focus,c=i.blurScope,p=i.labelStatesModels,g=i.hoverScale,y=i.cursorStyle,d=i.emphasisDisabled),!i||e.hasItemOption){var m=i&&i.itemModel?i.itemModel:e.getItemModel(a),_=m.getModel("emphasis");u=_.getModel("itemStyle").getItemStyle(),v=m.getModel(["select","itemStyle"]).getItemStyle(),f=m.getModel(["blur","itemStyle"]).getItemStyle(),h=_.get("focus"),c=_.get("blurScope"),d=_.get("disabled"),p=ce(m),g=_.getShallow("scale"),y=m.getShallow("cursor")}var S=e.getItemVisual(a,"symbolRotate");s.attr("rotation",(S||0)*Math.PI/180||0);var x=oo(e.getItemVisual(a,"symbolOffset"),n);x&&(s.x=x[0],s.y=x[1]),y&&s.attr("cursor",y);var b=e.getItemVisual(a,"style"),w=b.fill;if(s instanceof xe){var T=s.style;s.useStyle(G({image:T.image,x:T.x,y:T.y,width:T.width,height:T.height},b))}else s.__isEmptyBrush?s.useStyle(G({},b)):s.useStyle(b),s.style.decal=null,s.setColor(w,o&&o.symbolInnerColor),s.style.strokeNoScale=!0;var C=e.getItemVisual(a,"liftZ"),M=this._z2;C!=null?M==null&&(this._z2=s.z2,s.z2+=C):M!=null&&(s.z2=M,this._z2=null);var D=o&&o.useNameLabel;Se(s,p,{labelFetcher:l,labelDataIndex:a,defaultText:I,inheritColor:w,defaultOpacity:b.opacity});function I(k){return D?e.getName(k):cs(e,k)}this._sizeX=n[0]/2,this._sizeY=n[1]/2;var L=s.ensureState("emphasis");L.style=u,s.ensureState("select").style=v,s.ensureState("blur").style=f;var P=g==null||g===!0?Math.max(1.1,3/this._sizeY):isFinite(g)&&g>0?+g:1;L.scaleX=this._sizeX*P,L.scaleY=this._sizeY*P,this.setSymbolScale(1),$t(this,h,c,d)},t.prototype.setSymbolScale=function(e){this.scaleX=this.scaleY=e},t.prototype.fadeOut=function(e,a,n){var i=this.childAt(0),o=ft(this).dataIndex,s=n&&n.animation;if(this.silent=i.silent=!0,n&&n.fadeLabel){var l=i.getTextContent();l&&Nn(l,{style:{opacity:0}},a,{dataIndex:o,removeOpt:s,cb:function(){i.removeTextContent()}})}else i.removeTextContent();Nn(i,{style:{opacity:0},scaleX:0,scaleY:0},a,{dataIndex:o,cb:e,removeOpt:s})},t.getSymbolSize=function(e,a){return ks(e.getItemVisual(a,"symbolSize"))},t.getSymbolZ2=function(e,a){return e.getItemVisual(a,"z2")},t})(rt);function wF(r,t){this.parent.drift(r,t)}function Wd(r,t,e,a){return t&&!isNaN(t[0])&&!isNaN(t[1])&&!(a.isIgnore&&a.isIgnore(e))&&!(a.clipShape&&!a.clipShape.contain(t[0],t[1]))&&r.getItemVisual(e,"symbol")!=="none"}function nb(r){return r!=null&&!it(r)&&(r={isIgnore:r}),r||{}}function ib(r){var t=r.hostModel,e=t.getModel("emphasis");return{emphasisItemStyle:e.getModel("itemStyle").getItemStyle(),blurItemStyle:t.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:t.getModel(["select","itemStyle"]).getItemStyle(),focus:e.get("focus"),blurScope:e.get("blurScope"),emphasisDisabled:e.get("disabled"),hoverScale:e.get("scale"),labelStatesModels:ce(t),cursorStyle:t.get("cursor")}}var Wu=(function(){function r(t){this.group=new rt,this._SymbolCtor=t||Hu}return r.prototype.updateData=function(t,e){this._progressiveEls=null,e=nb(e);var a=this.group,n=t.hostModel,i=this._data,o=this._SymbolCtor,s=e.disableAnimation,l=ib(t),u={disableAnimation:s},f=e.getSymbolPoint||function(v){return t.getItemLayout(v)};i||a.removeAll(),t.diff(i).add(function(v){var h=f(v);if(Wd(t,h,v,e)){var c=new o(t,v,l,u);c.setPosition(h),t.setItemGraphicEl(v,c),a.add(c)}}).update(function(v,h){var c=i.getItemGraphicEl(h),d=f(v);if(!Wd(t,d,v,e)){a.remove(c);return}var p=t.getItemVisual(v,"symbol")||"circle",g=c&&c.getSymbolType&&c.getSymbolType();if(!c||g&&g!==p)a.remove(c),c=new o(t,v,l,u),c.setPosition(d);else{c.updateData(t,v,l,u);var y={x:d[0],y:d[1]};s?c.attr(y):It(c,y,n)}a.add(c),t.setItemGraphicEl(v,c)}).remove(function(v){var h=i.getItemGraphicEl(v);h&&h.fadeOut(function(){a.remove(h)},n)}).execute(),this._getSymbolPoint=f,this._data=t},r.prototype.updateLayout=function(){var t=this,e=this._data;e&&e.eachItemGraphicEl(function(a,n){var i=t._getSymbolPoint(n);a.setPosition(i),a.markRedraw()})},r.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=ib(t),this._data=null,this.group.removeAll()},r.prototype.incrementalUpdate=function(t,e,a){this._progressiveEls=[],a=nb(a);function n(l){l.isGroup||(l.incremental=!0,l.ensureState("emphasis").hoverLayer=!0)}for(var i=t.start;i0?e=a[0]:a[1]<0&&(e=a[1]),e}function vI(r,t,e,a){var n=NaN;r.stacked&&(n=e.get(e.getCalculationInfo("stackedOverDimension"),a)),isNaN(n)&&(n=r.valueStart);var i=r.baseDataOffset,o=[];return o[i]=e.get(r.baseDim,a),o[1-i]=n,t.dataToPoint(o)}function CF(r,t){var e=[];return t.diff(r).add(function(a){e.push({cmd:"+",idx:a})}).update(function(a,n){e.push({cmd:"=",idx:n,idx1:a})}).remove(function(a){e.push({cmd:"-",idx:a})}).execute(),e}function AF(r,t,e,a,n,i,o,s){for(var l=CF(r,t),u=[],f=[],v=[],h=[],c=[],d=[],p=[],g=fI(n,t,o),y=r.getLayout("points")||[],m=t.getLayout("points")||[],_=0;_=n||p<0)break;if(Hi(y,m)){if(l){p+=i;continue}break}if(p===e)r[i>0?"moveTo":"lineTo"](y,m),v=y,h=m;else{var _=y-u,S=m-f;if(_*_+S*S<.5){p+=i;continue}if(o>0){for(var x=p+i,b=t[x*2],w=t[x*2+1];b===y&&w===m&&g=a||Hi(b,w))c=y,d=m;else{M=b-u,D=w-f;var P=y-u,k=b-y,R=m-f,O=w-m,E=void 0,z=void 0;if(s==="x"){E=Math.abs(P),z=Math.abs(k);var V=M>0?1:-1;c=y-V*E*o,d=m,I=y+V*z*o,L=m}else if(s==="y"){E=Math.abs(R),z=Math.abs(O);var F=D>0?1:-1;c=y,d=m-F*E*o,I=y,L=m+F*z*o}else E=Math.sqrt(P*P+R*R),z=Math.sqrt(k*k+O*O),C=z/(z+E),c=y-M*o*(1-C),d=m-D*o*(1-C),I=y+M*o*C,L=m+D*o*C,I=cn(I,dn(b,y)),L=cn(L,dn(w,m)),I=dn(I,cn(b,y)),L=dn(L,cn(w,m)),M=I-y,D=L-m,c=y-M*E/z,d=m-D*E/z,c=cn(c,dn(u,y)),d=cn(d,dn(f,m)),c=dn(c,cn(u,y)),d=dn(d,cn(f,m)),M=y-c,D=m-d,I=y+M*z/E,L=m+D*z/E}r.bezierCurveTo(v,h,c,d,y,m),v=I,h=L}else r.lineTo(y,m)}u=y,f=m,p+=i}return g}var hI=(function(){function r(){this.smooth=0,this.smoothConstraint=!0}return r})(),MF=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a.type="ec-polyline",a}return t.prototype.getDefaultStyle=function(){return{stroke:B.color.neutral99,fill:null}},t.prototype.getDefaultShape=function(){return new hI},t.prototype.buildPath=function(e,a){var n=a.points,i=0,o=n.length/2;if(a.connectNulls){for(;o>0&&Hi(n[o*2-2],n[o*2-1]);o--);for(;i=0){var S=u?(d-l)*_+l:(c-s)*_+s;return u?[e,S]:[S,e]}s=c,l=d;break;case o.C:c=i[v++],d=i[v++],p=i[v++],g=i[v++],y=i[v++],m=i[v++];var x=u?Bv(s,c,p,y,e,f):Bv(l,d,g,m,e,f);if(x>0)for(var b=0;b=0){var S=u?ge(l,d,g,m,w):ge(s,c,p,y,w);return u?[e,S]:[S,e]}}s=y,l=m;break}}},t})(Tt),DF=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t})(hI),cI=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a.type="ec-polygon",a}return t.prototype.getDefaultShape=function(){return new DF},t.prototype.buildPath=function(e,a){var n=a.points,i=a.stackedOnPoints,o=0,s=n.length/2,l=a.smoothMonotone;if(a.connectNulls){for(;s>0&&Hi(n[s*2-2],n[s*2-1]);s--);for(;ot){i?e.push(o(i,l,t)):n&&e.push(o(n,l,0),o(n,l,t));break}else n&&(e.push(o(n,l,0)),n=null),e.push(l),i=l}return e}function PF(r,t,e){var a=r.getVisual("visualMeta");if(!(!a||!a.length||!r.count())&&t.type==="cartesian2d"){for(var n,i,o=a.length-1;o>=0;o--){var s=r.getDimensionInfo(a[o].dimension);if(n=s&&s.coordDim,n==="x"||n==="y"){i=a[o];break}}if(i){var l=t.getAxis(n),u=U(i.stops,function(_){return{coord:l.toGlobalCoord(l.dataToCoord(_.value)),color:_.color}}),f=u.length,v=i.outerColors.slice();f&&u[0].coord>u[f-1].coord&&(u.reverse(),v.reverse());var h=IF(u,n==="x"?e.getWidth():e.getHeight()),c=h.length;if(!c&&f)return u[0].coord<0?v[1]?v[1]:u[f-1].color:v[0]?v[0]:u[0].color;var d=10,p=h[0].coord-d,g=h[c-1].coord+d,y=g-p;if(y<.001)return"transparent";A(h,function(_){_.offset=(_.coord-p)/y}),h.push({offset:c?h[c-1].offset:.5,color:v[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:v[0]||"transparent"});var m=new ro(0,0,0,0,h,!0);return m[n]=p,m[n+"2"]=g,m}}}function RF(r,t,e){var a=r.get("showAllSymbol"),n=a==="auto";if(!(a&&!n)){var i=e.getAxesByScale("ordinal")[0];if(i&&!(n&&kF(i,t))){var o=t.mapDimension(i.dim),s={};return A(i.getViewLabels(),function(l){var u=i.scale.getRawOrdinalNumber(l.tickValue);s[u]=1}),function(l){return!s.hasOwnProperty(t.get(o,l))}}}}function kF(r,t){var e=r.getExtent(),a=Math.abs(e[1]-e[0])/r.scale.count();isNaN(a)&&(a=0);for(var n=t.count(),i=Math.max(1,Math.round(n/5)),o=0;oa)return!1;return!0}function EF(r,t){return isNaN(r)||isNaN(t)}function OF(r){for(var t=r.length/2;t>0&&EF(r[t*2-2],r[t*2-1]);t--);return t-1}function fb(r,t){return[r[t*2],r[t*2+1]]}function NF(r,t,e){for(var a=r.length/2,n=e==="x"?0:1,i,o,s=0,l=-1,u=0;u=t||i>=t&&o<=t){l=u;break}s=u,i=o}return{range:[s,l],t:(t-i)/(o-i)}}function gI(r){if(r.get(["endLabel","show"]))return!0;for(var t=0;t0&&e.get(["emphasis","lineStyle","width"])==="bolder"){var z=d.getState("emphasis").style;z.lineWidth=+d.style.lineWidth+1}ft(d).seriesIndex=e.seriesIndex,$t(d,R,O,E);var V=ub(e.get("smooth")),F=e.get("smoothMonotone");if(d.setShape({smooth:V,smoothMonotone:F,connectNulls:w}),p){var H=s.getCalculationInfo("stackedOnSeries"),Y=0;p.useStyle(nt(u.getAreaStyle(),{fill:I,opacity:.7,lineJoin:"bevel",decal:s.getVisual("style").decal})),H&&(Y=ub(H.get("smooth"))),p.setShape({smooth:V,stackedOnSmooth:Y,smoothMonotone:F,connectNulls:w}),he(p,e,"areaStyle"),ft(p).seriesIndex=e.seriesIndex,$t(p,R,O,E)}var j=this._changePolyState;s.eachItemGraphicEl(function(vt){vt&&(vt.onHoverStateChange=j)}),this._polyline.onHoverStateChange=j,this._data=s,this._coordSys=i,this._stackedOnPoints=x,this._points=f,this._step=M,this._valueOrigin=_,e.get("triggerLineEvent")&&(this.packEventData(e,d),p&&this.packEventData(e,p))},t.prototype.packEventData=function(e,a){ft(a).eventData={componentType:"series",componentSubType:"line",componentIndex:e.componentIndex,seriesIndex:e.seriesIndex,seriesName:e.name,seriesType:"line"}},t.prototype.highlight=function(e,a,n,i){var o=e.getData(),s=Zi(o,i);if(this._changePolyState("emphasis"),!(s instanceof Array)&&s!=null&&s>=0){var l=o.getLayout("points"),u=o.getItemGraphicEl(s);if(!u){var f=l[s*2],v=l[s*2+1];if(isNaN(f)||isNaN(v)||this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(f,v))return;var h=e.get("zlevel")||0,c=e.get("z")||0;u=new Hu(o,s),u.x=f,u.y=v,u.setZ(h,c);var d=u.getSymbolPath().getTextContent();d&&(d.zlevel=h,d.z=c,d.z2=this._polyline.z2+1),u.__temp=!0,o.setItemGraphicEl(s,u),u.stopSymbolAnimation(!0),this.group.add(u)}u.highlight()}else Nt.prototype.highlight.call(this,e,a,n,i)},t.prototype.downplay=function(e,a,n,i){var o=e.getData(),s=Zi(o,i);if(this._changePolyState("normal"),s!=null&&s>=0){var l=o.getItemGraphicEl(s);l&&(l.__temp?(o.setItemGraphicEl(s,null),this.group.remove(l)):l.downplay())}else Nt.prototype.downplay.call(this,e,a,n,i)},t.prototype._changePolyState=function(e){var a=this._polygon;$v(this._polyline,e),a&&$v(a,e)},t.prototype._newPolyline=function(e){var a=this._polyline;return a&&this._lineGroup.remove(a),a=new MF({shape:{points:e},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(a),this._polyline=a,a},t.prototype._newPolygon=function(e,a){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new cI({shape:{points:e,stackedOnPoints:a},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},t.prototype._initSymbolLabelAnimation=function(e,a,n){var i,o,s=a.getBaseAxis(),l=s.inverse;a.type==="cartesian2d"?(i=s.isHorizontal(),o=!1):a.type==="polar"&&(i=s.dim==="angle",o=!0);var u=e.hostModel,f=u.get("animationDuration");tt(f)&&(f=f(null));var v=u.get("animationDelay")||0,h=tt(v)?v(null):v;e.eachItemGraphicEl(function(c,d){var p=c;if(p){var g=[c.x,c.y],y=void 0,m=void 0,_=void 0;if(n)if(o){var S=n,x=a.pointToCoord(g);i?(y=S.startAngle,m=S.endAngle,_=-x[1]/180*Math.PI):(y=S.r0,m=S.r,_=x[0])}else{var b=n;i?(y=b.x,m=b.x+b.width,_=c.x):(y=b.y+b.height,m=b.y,_=c.y)}var w=m===y?0:(_-y)/(m-y);l&&(w=1-w);var T=tt(v)?v(d):f*w+h,C=p.getSymbolPath(),M=C.getTextContent();p.attr({scaleX:0,scaleY:0}),p.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:T}),M&&M.animateFrom({style:{opacity:0}},{duration:300,delay:T}),C.disableLabelAnimation=!0}})},t.prototype._initOrUpdateEndLabel=function(e,a,n){var i=e.getModel("endLabel");if(gI(e)){var o=e.getData(),s=this._polyline,l=o.getLayout("points");if(!l){s.removeTextContent(),this._endLabel=null;return}var u=this._endLabel;u||(u=this._endLabel=new Mt({z2:200}),u.ignoreClip=!0,s.setTextContent(this._endLabel),s.disableLabelAnimation=!0);var f=OF(l);f>=0&&(Se(s,ce(e,"endLabel"),{inheritColor:n,labelFetcher:e,labelDataIndex:f,defaultText:function(v,h,c){return c!=null?uI(o,c):cs(o,v)},enableTextSetter:!0},BF(i,a)),s.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},t.prototype._endLabelOnDuring=function(e,a,n,i,o,s,l){var u=this._endLabel,f=this._polyline;if(u){e<1&&i.originalX==null&&(i.originalX=u.x,i.originalY=u.y);var v=n.getLayout("points"),h=n.hostModel,c=h.get("connectNulls"),d=s.get("precision"),p=s.get("distance")||0,g=l.getBaseAxis(),y=g.isHorizontal(),m=g.inverse,_=a.shape,S=m?y?_.x:_.y+_.height:y?_.x+_.width:_.y,x=(y?p:0)*(m?-1:1),b=(y?0:-p)*(m?-1:1),w=y?"x":"y",T=NF(v,S,w),C=T.range,M=C[1]-C[0],D=void 0;if(M>=1){if(M>1&&!c){var I=fb(v,C[0]);u.attr({x:I[0]+x,y:I[1]+b}),o&&(D=h.getRawValue(C[0]))}else{var I=f.getPointOn(S,w);I&&u.attr({x:I[0]+x,y:I[1]+b});var L=h.getRawValue(C[0]),P=h.getRawValue(C[1]);o&&(D=FM(n,d,L,P,T.t))}i.lastFrameIndex=C[0]}else{var k=e===1||i.lastFrameIndex>0?C[0]:0,I=fb(v,k);o&&(D=h.getRawValue(k)),u.attr({x:I[0]+x,y:I[1]+b})}if(o){var R=Ms(u);typeof R.setLabelText=="function"&&R.setLabelText(D)}}},t.prototype._doUpdateAnimation=function(e,a,n,i,o,s,l){var u=this._polyline,f=this._polygon,v=e.hostModel,h=AF(this._data,e,this._stackedOnPoints,a,this._coordSys,n,this._valueOrigin),c=h.current,d=h.stackedOnCurrent,p=h.next,g=h.stackedOnNext;if(o&&(d=pn(h.stackedOnCurrent,h.current,n,o,l),c=pn(h.current,null,n,o,l),g=pn(h.stackedOnNext,h.next,n,o,l),p=pn(h.next,null,n,o,l)),lb(c,p)>3e3||f&&lb(d,g)>3e3){u.stopAnimation(),u.setShape({points:p}),f&&(f.stopAnimation(),f.setShape({points:p,stackedOnPoints:g}));return}u.shape.__points=h.current,u.shape.points=c;var y={shape:{points:p}};h.current!==c&&(y.shape.__points=h.next),u.stopAnimation(),It(u,y,v),f&&(f.setShape({points:c,stackedOnPoints:d}),f.stopAnimation(),It(f,{shape:{stackedOnPoints:g}},v),u.shape.points!==f.shape.points&&(f.shape.points=u.shape.points));for(var m=[],_=h.status,S=0;S<_.length;S++){var x=_[S].cmd;if(x==="="){var b=e.getItemGraphicEl(_[S].idx1);b&&m.push({el:b,ptIdx:S})}}u.animators&&u.animators.length&&u.animators[0].during(function(){f&&f.dirtyShape();for(var w=u.shape.__points,T=0;Tt&&(t=r[e]);return isFinite(t)?t:NaN},min:function(r){for(var t=1/0,e=0;e10&&o.type==="cartesian2d"&&i){var l=o.getBaseAxis(),u=o.getOtherAxis(l),f=l.getExtent(),v=a.getDevicePixelRatio(),h=Math.abs(f[1]-f[0])*(v||1),c=Math.round(s/h);if(isFinite(c)&&c>1){i==="lttb"?t.setData(n.lttbDownSample(n.mapDimension(u.dim),1/c)):i==="minmax"&&t.setData(n.minmaxDownSample(n.mapDimension(u.dim),1/c));var d=void 0;X(i)?d=VF[i]:tt(i)&&(d=i),d&&t.setData(n.downSample(n.mapDimension(u.dim),1/c,d,GF))}}}}}function FF(r){r.registerChartView(zF),r.registerSeriesModel(bF),r.registerLayout(Yu("line",!0)),r.registerVisual({seriesType:"line",reset:function(t){var e=t.getData(),a=t.getModel("lineStyle").getLineStyle();a&&!a.stroke&&(a.stroke=e.getVisual("style").fill),e.setVisual("legendLineStyle",a)}}),r.registerProcessor(r.PRIORITY.PROCESSOR.STATISTIC,yI("line"))}var yu=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.getInitialData=function(e,a){return Ca(null,this,{useEncodeDefaulter:!0})},t.prototype.getMarkerPosition=function(e,a,n){var i=this.coordinateSystem;if(i&&i.clampData){var o=i.clampData(e),s=i.dataToPoint(o);if(n)A(i.getAxes(),function(h,c){if(h.type==="category"&&a!=null){var d=h.getTicksCoords(),p=h.getTickModel().get("alignWithLabel"),g=o[c],y=a[c]==="x1"||a[c]==="y1";if(y&&!p&&(g+=1),d.length<2)return;if(d.length===2){s[c]=h.toGlobalCoord(h.getExtent()[y?1:0]);return}for(var m=void 0,_=void 0,S=1,x=0;xg){_=(b+m)/2;break}x===1&&(S=w-d[0].tickValue)}_==null&&(m?m&&(_=d[d.length-1].coord):_=d[0].coord),s[c]=h.toGlobalCoord(_)}});else{var l=this.getData(),u=l.getLayout("offset"),f=l.getLayout("size"),v=i.getBaseAxis().isHorizontal()?0:1;s[v]+=u+f/2}return s}return[NaN,NaN]},t.type="series.__base_bar__",t.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod",defaultBarGap:"10%"},t})(zt);zt.registerClass(yu);var HF=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.getInitialData=function(){return Ca(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},t.prototype.getProgressive=function(){return this.get("large")?this.get("progressive"):!1},t.prototype.getProgressiveThreshold=function(){var e=this.get("progressiveThreshold"),a=this.get("largeThreshold");return a>e&&(e=a),e},t.prototype.brushSelector=function(e,a,n){return n.rect(a.getItemLayout(e))},t.type="series.bar",t.dependencies=["grid","polar"],t.defaultOption=Un(yu.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:B.color.primary,borderWidth:2}},realtimeSort:!1}),t})(yu),WF=(function(){function r(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0}return r})(),yh=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a.type="sausage",a}return t.prototype.getDefaultShape=function(){return new WF},t.prototype.buildPath=function(e,a){var n=a.cx,i=a.cy,o=Math.max(a.r0||0,0),s=Math.max(a.r,0),l=(s-o)*.5,u=o+l,f=a.startAngle,v=a.endAngle,h=a.clockwise,c=Math.PI*2,d=h?v-fMath.PI/2&&fs)return!0;s=v}return!1},t.prototype._isOrderDifferentInView=function(e,a){for(var n=a.scale,i=n.getExtent(),o=Math.max(0,i[0]),s=Math.min(i[1],n.getOrdinalMeta().categories.length-1);o<=s;++o)if(e.ordinalNumbers[o]!==n.getRawOrdinalNumber(o))return!0},t.prototype._updateSortWithinSameData=function(e,a,n,i){if(this._isOrderChangedWithinSameData(e,a,n)){var o=this._dataSort(e,n,a);this._isOrderDifferentInView(o,n)&&(this._removeOnRenderedListener(i),i.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:o}))}},t.prototype._dispatchInitSort=function(e,a,n){var i=a.baseAxis,o=this._dataSort(e,i,function(s){return e.get(e.mapDimension(a.otherAxis.dim),s)});n.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",isInitSort:!0,axisId:i.index,sortInfo:o})},t.prototype.remove=function(e,a){this._clear(this._model),this._removeOnRenderedListener(a)},t.prototype.dispose=function(e,a){this._removeOnRenderedListener(a)},t.prototype._removeOnRenderedListener=function(e){this._onRendered&&(e.getZr().off("rendered",this._onRendered),this._onRendered=null)},t.prototype._clear=function(e){var a=this.group,n=this._data;e&&e.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl(function(i){Ua(i,e,ft(i).dataIndex)})):a.removeAll(),this._data=null,this._isFirstFrame=!0},t.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},t.type="bar",t})(Nt),vb={cartesian2d:function(r,t){var e=t.width<0?-1:1,a=t.height<0?-1:1;e<0&&(t.x+=t.width,t.width=-t.width),a<0&&(t.y+=t.height,t.height=-t.height);var n=r.x+r.width,i=r.y+r.height,o=Yd(t.x,r.x),s=Zd(t.x+t.width,n),l=Yd(t.y,r.y),u=Zd(t.y+t.height,i),f=sn?s:o,t.y=v&&l>i?u:l,t.width=f?0:s-o,t.height=v?0:u-l,e<0&&(t.x+=t.width,t.width=-t.width),a<0&&(t.y+=t.height,t.height=-t.height),f||v},polar:function(r,t){var e=t.r0<=t.r?1:-1;if(e<0){var a=t.r;t.r=t.r0,t.r0=a}var n=Zd(t.r,r.r),i=Yd(t.r0,r.r0);t.r=n,t.r0=i;var o=n-i<0;if(e<0){var a=t.r;t.r=t.r0,t.r0=a}return o}},hb={cartesian2d:function(r,t,e,a,n,i,o,s,l){var u=new St({shape:G({},a),z2:1});if(u.__dataIndex=e,u.name="item",i){var f=u.shape,v=n?"height":"width";f[v]=0}return u},polar:function(r,t,e,a,n,i,o,s,l){var u=!n&&l?yh:ke,f=new u({shape:a,z2:1});f.name="item";var v=mI(n);if(f.calculateTextPosition=UF(v,{isRoundCap:u===yh}),i){var h=f.shape,c=n?"r":"endAngle",d={};h[c]=n?a.r0:a.startAngle,d[c]=a[c],(s?It:Zt)(f,{shape:d},i)}return f}};function $F(r,t){var e=r.get("realtimeSort",!0),a=t.getBaseAxis();if(e&&a.type==="category"&&t.type==="cartesian2d")return{baseAxis:a,otherAxis:t.getOtherAxis(a)}}function cb(r,t,e,a,n,i,o,s){var l,u;i?(u={x:a.x,width:a.width},l={y:a.y,height:a.height}):(u={y:a.y,height:a.height},l={x:a.x,width:a.width}),s||(o?It:Zt)(e,{shape:l},t,n,null);var f=t?r.baseAxis.model:null;(o?It:Zt)(e,{shape:u},f,n)}function db(r,t){for(var e=0;e0?1:-1,o=a.height>0?1:-1;return{x:a.x+i*n/2,y:a.y+o*n/2,width:a.width-i*n,height:a.height-o*n}},polar:function(r,t,e){var a=r.getItemLayout(t);return{cx:a.cx,cy:a.cy,r0:a.r0,r:a.r,startAngle:a.startAngle,endAngle:a.endAngle,clockwise:a.clockwise}}};function KF(r){return r.startAngle!=null&&r.endAngle!=null&&r.startAngle===r.endAngle}function mI(r){return(function(t){var e=t?"Arc":"Angle";return function(a){switch(a){case"start":case"insideStart":case"end":case"insideEnd":return a+e;default:return a}}})(r)}function gb(r,t,e,a,n,i,o,s){var l=t.getItemVisual(e,"style");if(s){if(!i.get("roundCap")){var f=r.shape,v=ca(a.getModel("itemStyle"),f,!0);G(f,v),r.setShape(f)}}else{var u=a.get(["itemStyle","borderRadius"])||0;r.setShape("r",u)}r.useStyle(l);var h=a.getShallow("cursor");h&&r.attr("cursor",h);var c=s?o?n.r>=n.r0?"endArc":"startArc":n.endAngle>=n.startAngle?"endAngle":"startAngle":o?n.height>=0?"bottom":"top":n.width>=0?"right":"left",d=ce(a);Se(r,d,{labelFetcher:i,labelDataIndex:e,defaultText:cs(i.getData(),e),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:c});var p=r.getTextContent();if(s&&p){var g=a.get(["label","position"]);r.textConfig.inside=g==="middle"?!0:null,YF(r,g==="outside"?c:g,mI(o),a.get(["label","rotate"]))}DD(p,d,i.getRawValue(e),function(m){return uI(t,m)});var y=a.getModel(["emphasis"]);$t(r,y.get("focus"),y.get("blurScope"),y.get("disabled")),he(r,a),KF(n)&&(r.style.fill="none",r.style.stroke="none",A(r.states,function(m){m.style&&(m.style.fill=m.style.stroke="none")}))}function JF(r,t){var e=r.get(["itemStyle","borderColor"]);if(!e||e==="none")return 0;var a=r.get(["itemStyle","borderWidth"])||0,n=isNaN(t.width)?Number.MAX_VALUE:Math.abs(t.width),i=isNaN(t.height)?Number.MAX_VALUE:Math.abs(t.height);return Math.min(a,n,i)}var QF=(function(){function r(){}return r})(),yb=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a.type="largeBar",a}return t.prototype.getDefaultShape=function(){return new QF},t.prototype.buildPath=function(e,a){for(var n=a.points,i=this.baseDimIdx,o=1-this.baseDimIdx,s=[],l=[],u=this.barWidth,f=0;f=0?e:null},30,!1);function tH(r,t,e){for(var a=r.baseDimIdx,n=1-a,i=r.shape.points,o=r.largeDataIndices,s=[],l=[],u=r.barWidth,f=0,v=i.length/3;f=s[0]&&t<=s[0]+l[0]&&e>=s[1]&&e<=s[1]+l[1])return o[f]}return-1}function _I(r,t,e){if(Bn(e,"cartesian2d")){var a=t,n=e.getArea();return{x:r?a.x:n.x,y:r?n.y:a.y,width:r?a.width:n.width,height:r?n.height:a.height}}else{var n=e.getArea(),i=t;return{cx:n.cx,cy:n.cy,r0:r?n.r0:i.r0,r:r?n.r:i.r,startAngle:r?i.startAngle:0,endAngle:r?i.endAngle:Math.PI*2}}}function eH(r,t,e){var a=r.type==="polar"?ke:St;return new a({shape:_I(t,e,r),silent:!0,z2:0})}function rH(r){r.registerChartView(XF),r.registerSeriesModel(HF),r.registerLayout(r.PRIORITY.VISUAL.LAYOUT,pt(b2,"bar")),r.registerLayout(r.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,w2("bar")),r.registerProcessor(r.PRIORITY.PROCESSOR.STATISTIC,yI("bar")),r.registerAction({type:"changeAxisOrder",event:"changeAxisOrder",update:"update"},function(t,e){var a=t.componentType||"series";e.eachComponent({mainType:a,query:t},function(n){t.sortInfo&&n.axis.setCategorySortInfo(t.sortInfo)})})}var Sb=Math.PI*2,zf=Math.PI/180;function aH(r,t,e){t.eachSeriesByType(r,function(a){var n=a.getData(),i=n.mapDimension("value"),o=ZD(a,e),s=o.cx,l=o.cy,u=o.r,f=o.r0,v=o.viewRect,h=-a.get("startAngle")*zf,c=a.get("endAngle"),d=a.get("padAngle")*zf;c=c==="auto"?h-Sb:-c*zf;var p=a.get("minAngle")*zf,g=p+d,y=0;n.each(i,function(O){!isNaN(O)&&y++});var m=n.getSum(i),_=Math.PI/(m||y)*2,S=a.get("clockwise"),x=a.get("roseType"),b=a.get("stillShowZeroSum"),w=n.getDataExtent(i);w[0]=0;var T=S?1:-1,C=[h,c],M=T*d/2;ec(C,!S),h=C[0],c=C[1];var D=SI(a);D.startAngle=h,D.endAngle=c,D.clockwise=S,D.cx=s,D.cy=l,D.r=u,D.r0=f;var I=Math.abs(c-h),L=I,P=0,k=h;if(n.setLayout({viewRect:v,r:u}),n.each(i,function(O,E){var z;if(isNaN(O)){n.setItemLayout(E,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:S,cx:s,cy:l,r0:f,r:x?NaN:u});return}x!=="area"?z=m===0&&b?_:O*_:z=I/y,zz?(F=k+T*z/2,H=F):(F=k+M,H=V-M),n.setItemLayout(E,{angle:z,startAngle:F,endAngle:H,clockwise:S,cx:s,cy:l,r0:f,r:x?kt(O,w,[f,u]):u}),k=V}),Le?y:g,x=Math.abs(_.label.y-e);if(x>=S.maxY){var b=_.label.x-t-_.len2*n,w=a+_.len,T=Math.abs(b)r.unconstrainedWidth?null:h:null;a.setStyle("width",c)}bI(i,a)}}}function bI(r,t){bb.rect=r,Z2(bb,t,oH)}var oH={minMarginForce:[null,0,null,0],marginDefault:[1,0,1,0]},bb={};function Xd(r){return r.position==="center"}function sH(r){var t=r.getData(),e=[],a,n,i=!1,o=(r.get("minShowLabelAngle")||0)*nH,s=t.getLayout("viewRect"),l=t.getLayout("r"),u=s.width,f=s.x,v=s.y,h=s.height;function c(b){b.ignore=!0}function d(b){if(!b.ignore)return!0;for(var w in b.states)if(b.states[w].ignore===!1)return!0;return!1}t.each(function(b){var w=t.getItemGraphicEl(b),T=w.shape,C=w.getTextContent(),M=w.getTextGuideLine(),D=t.getItemModel(b),I=D.getModel("label"),L=I.get("position")||D.get(["emphasis","label","position"]),P=I.get("distanceToLabelLine"),k=I.get("alignTo"),R=Z(I.get("edgeDistance"),u),O=I.get("bleedMargin");O==null&&(O=Math.min(u,h)>200?10:2);var E=D.getModel("labelLine"),z=E.get("length");z=Z(z,u);var V=E.get("length2");if(V=Z(V,u),Math.abs(T.endAngle-T.startAngle)0?"right":"left":H>0?"left":"right"}var Ot=Math.PI,Gt=0,pe=I.get("rotate");if(Dt(pe))Gt=pe*(Ot/180);else if(L==="center")Gt=0;else if(pe==="radial"||pe===!0){var er=H<0?-F+Ot:-F;Gt=er}else if(pe==="tangential"&&L!=="outside"&&L!=="outer"){var $e=Math.atan2(H,Y);$e<0&&($e=Ot*2+$e);var Xn=Y>0;Xn&&($e=Ot+$e),Gt=$e-Ot}if(i=!!Gt,C.x=j,C.y=vt,C.rotation=Gt,C.setStyle({verticalAlign:"middle"}),ht){C.setStyle({align:Bt});var Ac=C.states.select;Ac&&(Ac.x+=C.x,Ac.y+=C.y)}else{var fo=new lt(0,0,0,0);bI(fo,C),e.push({label:C,labelLine:M,position:L,len:z,len2:V,minTurnAngle:E.get("minTurnAngle"),maxSurfaceAngle:E.get("maxSurfaceAngle"),surfaceNormal:new st(H,Y),linePoints:Pt,textAlign:Bt,labelDistance:P,labelAlignTo:k,edgeDistance:R,bleedMargin:O,rect:fo,unconstrainedWidth:fo.width,labelStyleWidth:C.style.width})}w.setTextConfig({inside:ht})}}),!i&&r.get("avoidLabelOverlap")&&iH(e,a,n,l,u,h,f,v);for(var p=0;p0){for(var f=o.getItemLayout(0),v=1;isNaN(f&&f.startAngle)&&v=i.r0}},t.type="pie",t})(Nt);function zs(r,t,e){t=W(t)&&{coordDimensions:t}||G({encodeDefine:r.getEncode()},t);var a=r.getSource(),n=Es(a,t).dimensions,i=new Ge(n,r);return i.initData(a,e),i}var Vs=(function(){function r(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}return r.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},r.prototype.containName=function(t){var e=this._getRawData();return e.indexOfName(t)>=0},r.prototype.indexOfName=function(t){var e=this._getDataWithEncodedVisual();return e.indexOfName(t)},r.prototype.getItemVisual=function(t,e){var a=this._getDataWithEncodedVisual();return a.getItemVisual(t,e)},r})(),fH=bt(),wI=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.init=function(e){r.prototype.init.apply(this,arguments),this.legendVisualProvider=new Vs($(this.getData,this),$(this.getRawData,this)),this._defaultLabelLine(e)},t.prototype.mergeOption=function(){r.prototype.mergeOption.apply(this,arguments)},t.prototype.getInitialData=function(){return zs(this,{coordDimensions:["value"],encodeDefaulter:pt(h0,this)})},t.prototype.getDataParams=function(e){var a=this.getData(),n=fH(a),i=n.seats;if(!i){var o=[];a.each(a.mapDimension("value"),function(l){o.push(l)}),i=n.seats=PM(o,a.hostModel.get("percentPrecision"))}var s=r.prototype.getDataParams.call(this,e);return s.percent=i[e]||0,s.$vars.push("percent"),s},t.prototype._defaultLabelLine=function(e){Yi(e,"labelLine",["show"]);var a=e.labelLine,n=e.emphasis.labelLine;a.show=a.show&&e.label.show,n.show=n.show&&e.emphasis.label.show},t.type="series.pie",t.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"50%"],clockwise:!0,startAngle:90,endAngle:"auto",padAngle:0,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,coordinateSystemUsage:"box",left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:30,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},t})(zt);az({fullType:wI.type,getCoord2:function(r){return r.getShallow("center")}});function vH(r){return{seriesType:r,reset:function(t,e){var a=t.getData();a.filterSelf(function(n){var i=a.mapDimension("value"),o=a.get(i,n);return!(Dt(o)&&!isNaN(o)&&o<0)})}}}function hH(r){r.registerChartView(uH),r.registerSeriesModel(wI),BL("pie",r.registerAction),r.registerLayout(pt(aH,"pie")),r.registerProcessor(Bs("pie")),r.registerProcessor(vH("pie"))}var cH=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.hasSymbolVisual=!0,e}return t.prototype.getInitialData=function(e,a){return Ca(null,this,{useEncodeDefaulter:!0})},t.prototype.getProgressive=function(){var e=this.option.progressive;return e??(this.option.large?5e3:this.get("progressive"))},t.prototype.getProgressiveThreshold=function(){var e=this.option.progressiveThreshold;return e??(this.option.large?1e4:this.get("progressiveThreshold"))},t.prototype.brushSelector=function(e,a,n){return n.point(a.getItemLayout(e))},t.prototype.getZLevelKey=function(){return this.getData().count()>this.getProgressiveThreshold()?this.id:""},t.type="series.scatter",t.dependencies=["grid","polar","geo","singleAxis","calendar","matrix"],t.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:B.color.primary}},universalTransition:{divideShape:"clone"}},t})(zt),TI=4,dH=(function(){function r(){}return r})(),pH=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a._off=0,a.hoverDataIdx=-1,a}return t.prototype.getDefaultShape=function(){return new dH},t.prototype.reset=function(){this.notClear=!1,this._off=0},t.prototype.buildPath=function(e,a){var n=a.points,i=a.size,o=this.symbolProxy,s=o.shape,l=e.getContext?e.getContext():e,u=l&&i[0]=0;u--){var f=u*2,v=i[f]-s/2,h=i[f+1]-l/2;if(e>=v&&a>=h&&e<=v+s&&a<=h+l)return u}return-1},t.prototype.contain=function(e,a){var n=this.transformCoordToLocal(e,a),i=this.getBoundingRect();if(e=n[0],a=n[1],i.contain(e,a)){var o=this.hoverDataIdx=this.findDataIndex(e,a);return o>=0}return this.hoverDataIdx=-1,!1},t.prototype.getBoundingRect=function(){var e=this._rect;if(!e){for(var a=this.shape,n=a.points,i=a.size,o=i[0],s=i[1],l=1/0,u=1/0,f=-1/0,v=-1/0,h=0;h=0&&(u.dataIndex=v+(t.startIndex||0))})},r.prototype.remove=function(){this._clear()},r.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},r})(),yH=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){var i=e.getData(),o=this._updateSymbolDraw(i,e);o.updateData(i,{clipShape:this._getClipShape(e)}),this._finished=!0},t.prototype.incrementalPrepareRender=function(e,a,n){var i=e.getData(),o=this._updateSymbolDraw(i,e);o.incrementalPrepareUpdate(i),this._finished=!1},t.prototype.incrementalRender=function(e,a,n){this._symbolDraw.incrementalUpdate(e,a.getData(),{clipShape:this._getClipShape(a)}),this._finished=e.end===a.getData().count()},t.prototype.updateTransform=function(e,a,n){var i=e.getData();if(this.group.dirty(),!this._finished||i.count()>1e4)return{update:!0};var o=Yu("").reset(e,a,n);o.progress&&o.progress({start:0,end:i.count(),count:i.count()},i),this._symbolDraw.updateLayout(i)},t.prototype.eachRendered=function(e){this._symbolDraw&&this._symbolDraw.eachRendered(e)},t.prototype._getClipShape=function(e){if(e.get("clip",!0)){var a=e.coordinateSystem;return a&&a.getArea&&a.getArea(.1)}},t.prototype._updateSymbolDraw=function(e,a){var n=this._symbolDraw,i=a.pipelineContext,o=i.large;return(!n||o!==this._isLargeDraw)&&(n&&n.remove(),n=this._symbolDraw=o?new gH:new Wu,this._isLargeDraw=o,this.group.removeAll()),this.group.add(n.group),n},t.prototype.remove=function(e,a){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},t.prototype.dispose=function(){},t.type="scatter",t})(Nt),CI={left:0,right:0,top:0,bottom:0},mh=["25%","25%"],mH=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.mergeDefaultAndTheme=function(e,a){var n=no(e.outerBounds);r.prototype.mergeDefaultAndTheme.apply(this,arguments),n&&e.outerBounds&&Sa(e.outerBounds,n)},t.prototype.mergeOption=function(e,a){r.prototype.mergeOption.apply(this,arguments),this.option.outerBounds&&e.outerBounds&&Sa(this.option.outerBounds,e.outerBounds)},t.type="grid",t.dependencies=["xAxis","yAxis"],t.layoutMode="box",t.defaultOption={show:!1,z:0,left:"15%",top:65,right:"10%",bottom:80,containLabel:!1,outerBoundsMode:"auto",outerBounds:CI,outerBoundsContain:"all",outerBoundsClampWidth:mh[0],outerBoundsClampHeight:mh[1],backgroundColor:B.color.transparent,borderWidth:1,borderColor:B.color.neutral30},t})(xt),by=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",jt).models[0]},t.type="cartesian2dAxis",t})(xt);Qt(by,Ns);var AI={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:B.color.axisLine,width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15],breakLine:!0},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12,color:B.color.axisLabel,textMargin:[0,3]},splitLine:{show:!0,showMinLine:!0,showMaxLine:!0,lineStyle:{color:B.color.axisSplitLine,width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:[B.color.backgroundTint,B.color.backgroundTransparent]}},breakArea:{show:!0,itemStyle:{color:B.color.neutral00,borderColor:B.color.border,borderWidth:1,borderType:[3,3],opacity:.6},zigzagAmplitude:4,zigzagMinSpan:4,zigzagMaxSpan:20,zigzagZ:100,expandOnClick:!0},breakLabelLayout:{moveOverlap:"auto"}},_H=mt({boundaryGap:!0,deduplication:null,jitter:0,jitterOverlap:!0,jitterMargin:2,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto",show:"auto"},axisLabel:{interval:"auto"}},AI),Z0=mt({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:B.color.axisMinorSplitLine,width:1}}},AI),SH=mt({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},Z0),xH=nt({logBase:10},Z0);const MI={category:_H,value:Z0,time:SH,log:xH};var bH={value:1,category:1,time:1,log:1},wy=null;function wH(r){wy||(wy=r)}function Zu(){return wy}function ds(r,t,e,a){A(bH,function(n,i){var o=mt(mt({},MI[i],!0),a,!0),s=(function(l){N(u,l);function u(){var f=l!==null&&l.apply(this,arguments)||this;return f.type=t+"Axis."+i,f}return u.prototype.mergeDefaultAndTheme=function(f,v){var h=su(this),c=h?no(f):{},d=v.getTheme();mt(f,d.get(i+"Axis")),mt(f,this.getDefaultOption()),f.type=wb(f),h&&Sa(f,c,h)},u.prototype.optionUpdated=function(){var f=this.option;f.type==="category"&&(this.__ordinalMeta=cu.createByAxisModel(this))},u.prototype.getCategories=function(f){var v=this.option;if(v.type==="category")return f?v.data:this.__ordinalMeta.categories},u.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},u.prototype.updateAxisBreaks=function(f){var v=Zu();return v?v.updateModelAxisBreak(this,f):{breaks:[]}},u.type=t+"Axis."+i,u.defaultOption=o,u})(e);r.registerComponentModel(s)}),r.registerSubTypeDefaulter(t+"Axis",wb)}function wb(r){return r.type||(r.data?"category":"value")}var TH=(function(){function r(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return r.prototype.getAxis=function(t){return this._axes[t]},r.prototype.getAxes=function(){return U(this._dimList,function(t){return this._axes[t]},this)},r.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),Rt(this.getAxes(),function(e){return e.scale.type===t})},r.prototype.addAxis=function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},r})(),Ty=["x","y"];function Tb(r){return(r.type==="interval"||r.type==="time")&&!r.hasBreaks()}var CH=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type="cartesian2d",e.dimensions=Ty,e}return t.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var e=this.getAxis("x").scale,a=this.getAxis("y").scale;if(!(!Tb(e)||!Tb(a))){var n=e.getExtent(),i=a.getExtent(),o=this.dataToPoint([n[0],i[0]]),s=this.dataToPoint([n[1],i[1]]),l=n[1]-n[0],u=i[1]-i[0];if(!(!l||!u)){var f=(s[0]-o[0])/l,v=(s[1]-o[1])/u,h=o[0]-n[0]*f,c=o[1]-i[0]*v,d=this._transform=[f,0,0,v,h,c];this._invTransform=Dr([],d)}}},t.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},t.prototype.containPoint=function(e){var a=this.getAxis("x"),n=this.getAxis("y");return a.contain(a.toLocalCoord(e[0]))&&n.contain(n.toLocalCoord(e[1]))},t.prototype.containData=function(e){return this.getAxis("x").containData(e[0])&&this.getAxis("y").containData(e[1])},t.prototype.containZone=function(e,a){var n=this.dataToPoint(e),i=this.dataToPoint(a),o=this.getArea(),s=new lt(n[0],n[1],i[0]-n[0],i[1]-n[1]);return o.intersect(s)},t.prototype.dataToPoint=function(e,a,n){n=n||[];var i=e[0],o=e[1];if(this._transform&&i!=null&&isFinite(i)&&o!=null&&isFinite(o))return Jt(n,e,this._transform);var s=this.getAxis("x"),l=this.getAxis("y");return n[0]=s.toGlobalCoord(s.dataToCoord(i,a)),n[1]=l.toGlobalCoord(l.dataToCoord(o,a)),n},t.prototype.clampData=function(e,a){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,o=n.getExtent(),s=i.getExtent(),l=n.parse(e[0]),u=i.parse(e[1]);return a=a||[],a[0]=Math.min(Math.max(Math.min(o[0],o[1]),l),Math.max(o[0],o[1])),a[1]=Math.min(Math.max(Math.min(s[0],s[1]),u),Math.max(s[0],s[1])),a},t.prototype.pointToData=function(e,a,n){if(n=n||[],this._invTransform)return Jt(n,e,this._invTransform);var i=this.getAxis("x"),o=this.getAxis("y");return n[0]=i.coordToData(i.toLocalCoord(e[0]),a),n[1]=o.coordToData(o.toLocalCoord(e[1]),a),n},t.prototype.getOtherAxis=function(e){return this.getAxis(e.dim==="x"?"y":"x")},t.prototype.getArea=function(e){e=e||0;var a=this.getAxis("x").getGlobalExtent(),n=this.getAxis("y").getGlobalExtent(),i=Math.min(a[0],a[1])-e,o=Math.min(n[0],n[1])-e,s=Math.max(a[0],a[1])-i+e,l=Math.max(n[0],n[1])-o+e;return new lt(i,o,s,l)},t})(TH),DI=(function(r){N(t,r);function t(e,a,n,i,o){var s=r.call(this,e,a,n)||this;return s.index=0,s.type=i||"value",s.position=o||"bottom",s}return t.prototype.isHorizontal=function(){var e=this.position;return e==="top"||e==="bottom"},t.prototype.getGlobalExtent=function(e){var a=this.getExtent();return a[0]=this.toGlobalCoord(a[0]),a[1]=this.toGlobalCoord(a[1]),e&&a[0]>a[1]&&a.reverse(),a},t.prototype.pointToData=function(e,a){return this.coordToData(this.toLocalCoord(e[this.dim==="x"?0:1]),a)},t.prototype.setCategorySortInfo=function(e){if(this.type!=="category")return!1;this.model.option.categorySortInfo=e,this.scale.setSortInfo(e)},t})(kr),yc="expandAxisBreak",LI="collapseAxisBreak",II="toggleAxisBreak",X0="axisbreakchanged",AH={type:yc,event:X0,update:"update",refineEvent:$0},MH={type:LI,event:X0,update:"update",refineEvent:$0},DH={type:II,event:X0,update:"update",refineEvent:$0};function $0(r,t,e,a){var n=[];return A(r,function(i){n=n.concat(i.eventBreaks)}),{eventContent:{breaks:n}}}function LH(r){r.registerAction(AH,t),r.registerAction(MH,t),r.registerAction(DH,t);function t(e,a){var n=[],i=Jo(a,e);function o(s,l){A(i[s],function(u){var f=u.updateAxisBreaks(e);A(f.breaks,function(v){var h;n.push(nt((h={},h[l]=u.componentIndex,h),v))})})}return o("xAxisModels","xAxisIndex"),o("yAxisModels","yAxisIndex"),o("singleAxisModels","singleAxisIndex"),{eventBreaks:n}}}var Tn=Math.PI,IH=[[1,2,1,2],[5,3,5,3],[8,3,8,3]],PH=[[0,1,0,1],[0,3,0,3],[0,3,0,3]],ps=bt(),PI=bt(),RI=(function(){function r(t){this.recordMap={},this.resolveAxisNameOverlap=t}return r.prototype.ensureRecord=function(t){var e=t.axis.dim,a=t.componentIndex,n=this.recordMap,i=n[e]||(n[e]=[]);return i[a]||(i[a]={ready:{}})},r})();function RH(r,t,e,a){var n=e.axis,i=t.ensureRecord(e),o=[],s,l=q0(r.axisName)&&hs(r.nameLocation);A(a,function(d){var p=xa(d);if(!(!p||p.label.ignore)){o.push(p);var g=i.transGroup;l&&(g.transform?Dr(rl,g.transform):Iu(rl),p.transform&&Fr(rl,rl,p.transform),lt.copy(Vf,p.localRect),Vf.applyTransform(rl),s?s.union(Vf):lt.copy(s=new lt(0,0,0,0),Vf))}});var u=Math.abs(i.dirVec.x)>.1?"x":"y",f=i.transGroup[u];if(o.sort(function(d,p){return Math.abs(d.label[u]-f)-Math.abs(p.label[u]-f)}),l&&s){var v=n.getExtent(),h=Math.min(v[0],v[1]),c=Math.max(v[0],v[1])-h;s.union(new lt(h,0,c,1))}i.stOccupiedRect=s,i.labelInfoList=o}var rl=me(),Vf=new lt(0,0,0,0),kI=function(r,t,e,a,n,i){if(hs(r.nameLocation)){var o=i.stOccupiedRect;o&&EI(I3({},o,i.transGroup.transform),a,n)}else OI(i.labelInfoList,i.dirVec,a,n)};function EI(r,t,e){var a=new st;pc(r,t,a,{direction:Math.atan2(e.y,e.x),bidirectional:!1,touchThreshold:.05})&&py(t,a)}function OI(r,t,e,a){for(var n=st.dot(a,t)>=0,i=0,o=r.length;i0?"top":"bottom",i="center"):is(n-Tn)?(o=a>0?"bottom":"top",i="center"):(o="middle",n>0&&n0?"right":"left":i=a>0?"left":"right"),{rotation:n,textAlign:i,textVerticalAlign:o}},r.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},r.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},r})(),kH=["axisLine","axisTickLabelEstimate","axisTickLabelDetermine","axisName"],EH={axisLine:function(r,t,e,a,n,i,o){var s=a.get(["axisLine","show"]);if(s==="auto"&&(s=!0,r.raw.axisLineAutoShow!=null&&(s=!!r.raw.axisLineAutoShow)),!!s){var l=a.axis.getExtent(),u=i.transform,f=[l[0],0],v=[l[1],0],h=f[0]>v[0];u&&(Jt(f,f,u),Jt(v,v,u));var c=G({lineCap:"round"},a.getModel(["axisLine","lineStyle"]).getLineStyle()),d={strokeContainThreshold:r.raw.strokeContainThreshold||5,silent:!0,z2:1,style:c};if(a.get(["axisLine","breakLine"])&&a.axis.scale.hasBreaks())Zu().buildAxisBreakLine(a,n,i,d);else{var p=new ne(G({shape:{x1:f[0],y1:f[1],x2:v[0],y2:v[1]}},d));ls(p.shape,p.style.lineWidth),p.anid="line",n.add(p)}var g=a.get(["axisLine","symbol"]);if(g!=null){var y=a.get(["axisLine","symbolSize"]);X(g)&&(g=[g,g]),(X(y)||Dt(y))&&(y=[y,y]);var m=oo(a.get(["axisLine","symbolOffset"])||0,y),_=y[0],S=y[1];A([{rotate:r.rotation+Math.PI/2,offset:m[0],r:0},{rotate:r.rotation-Math.PI/2,offset:m[1],r:Math.sqrt((f[0]-v[0])*(f[0]-v[0])+(f[1]-v[1])*(f[1]-v[1]))}],function(x,b){if(g[b]!=="none"&&g[b]!=null){var w=ie(g[b],-_/2,-S/2,_,S,c.stroke,!0),T=x.r+x.offset,C=h?v:f;w.attr({rotation:x.rotate,x:C[0]+T*Math.cos(r.rotation),y:C[1]-T*Math.sin(r.rotation),silent:!0,z2:11}),n.add(w)}})}}},axisTickLabelEstimate:function(r,t,e,a,n,i,o,s){var l=Ab(t,n,s);l&&Cb(r,t,e,a,n,i,o,Xr.estimate)},axisTickLabelDetermine:function(r,t,e,a,n,i,o,s){var l=Ab(t,n,s);l&&Cb(r,t,e,a,n,i,o,Xr.determine);var u=zH(r,n,i,a);BH(r,t.labelLayoutList,u),VH(r,n,i,a,r.tickDirection)},axisName:function(r,t,e,a,n,i,o,s){var l=e.ensureRecord(a);t.nameEl&&(n.remove(t.nameEl),t.nameEl=l.nameLayout=l.nameLocation=null);var u=r.axisName;if(q0(u)){var f=r.nameLocation,v=r.nameDirection,h=a.getModel("nameTextStyle"),c=a.get("nameGap")||0,d=a.axis.getExtent(),p=a.axis.inverse?-1:1,g=new st(0,0),y=new st(0,0);f==="start"?(g.x=d[0]-p*c,y.x=-p):f==="end"?(g.x=d[1]+p*c,y.x=p):(g.x=(d[0]+d[1])/2,g.y=r.labelOffset+v*c,y.y=v);var m=me();y.transform(rn(m,m,r.rotation));var _=a.get("nameRotate");_!=null&&(_=_*Tn/180);var S,x;hs(f)?S=Ye.innerTextLayout(r.rotation,_??r.rotation,v):(S=OH(r.rotation,f,_||0,d),x=r.raw.axisNameAvailableWidth,x!=null&&(x=Math.abs(x/Math.sin(S.rotation)),!isFinite(x)&&(x=null)));var b=h.getFont(),w=a.get("nameTruncate",!0)||{},T=w.ellipsis,C=Ce(r.raw.nameTruncateMaxWidth,w.maxWidth,x),M=s.nameMarginLevel||0,D=new Mt({x:g.x,y:g.y,rotation:S.rotation,silent:Ye.isLabelSilent(a),style:Ft(h,{text:u,font:b,overflow:"truncate",width:C,ellipsis:T,fill:h.getTextColor()||a.get(["axisLine","lineStyle","color"]),align:h.get("align")||S.textAlign,verticalAlign:h.get("verticalAlign")||S.textVerticalAlign}),z2:1});if(nn({el:D,componentModel:a,itemName:u}),D.__fullText=u,D.anid="name",a.get("triggerEvent")){var I=Ye.makeAxisEventDataBase(a);I.targetType="axisName",I.name=u,ft(D).eventData=I}i.add(D),D.updateTransform(),t.nameEl=D;var L=l.nameLayout=xa({label:D,priority:D.z2,defaultAttr:{ignore:D.ignore},marginDefault:hs(f)?IH[M]:PH[M]});if(l.nameLocation=f,n.add(D),D.decomposeTransform(),r.shouldNameMoveOverlap&&L){var P=e.ensureRecord(a);e.resolveAxisNameOverlap(r,e,a,L,y,P)}}}};function Cb(r,t,e,a,n,i,o,s){BI(t)||GH(r,t,n,s,a,o);var l=t.labelLayoutList;FH(r,a,l,i),UH(a,r.rotation,l);var u=r.optionHideOverlap;NH(a,l,u),u&&X2(Rt(l,function(f){return f&&!f.label.ignore})),RH(r,e,a,l)}function OH(r,t,e,a){var n=Dm(e-r),i,o,s=a[0]>a[1],l=t==="start"&&!s||t!=="start"&&s;return is(n-Tn/2)?(o=l?"bottom":"top",i="center"):is(n-Tn*1.5)?(o=l?"top":"bottom",i="center"):(o="middle",nTn/2?i=l?"left":"right":i=l?"right":"left"),{rotation:n,textAlign:i,textVerticalAlign:o}}function NH(r,t,e){if(I2(r.axis))return;function a(s,l,u){var f=xa(t[l]),v=xa(t[u]);if(!(!f||!v)){if(s===!1||f.suggestIgnore){Ll(f.label);return}if(v.suggestIgnore){Ll(v.label);return}var h=.1;if(!e){var c=[0,0,0,0];f=gy({marginForce:c},f),v=gy({marginForce:c},v)}pc(f,v,null,{touchThreshold:h})&&Ll(s?v.label:f.label)}}var n=r.get(["axisLabel","showMinLabel"]),i=r.get(["axisLabel","showMaxLabel"]),o=t.length;a(n,0,1),a(i,o-1,o-2)}function BH(r,t,e){r.showMinorTicks||A(t,function(a){if(a&&a.label.ignore)for(var n=0;nu[0]&&isFinite(d)&&isFinite(u[0]);)c=Rd(c),d=u[1]-c*o;else{var g=r.getTicks().length-1;g>o&&(c=Rd(c));var y=c*o;p=Math.ceil(u[1]/c)*c,d=ae(p-y),d<0&&u[0]>=0?(d=0,p=ae(y)):p>0&&u[1]<=0&&(p=0,d=-ae(y))}var m=(n[0].value-i[0].value)/s,_=(n[o].value-i[o].value)/s;a.setExtent.call(r,d+c*m,p+c*_),a.setInterval.call(r,c),(m||_)&&a.setNiceExtent.call(r,d+c,p-c)}var Db=[[3,1],[0,2]],$H=(function(){function r(t,e,a){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=Ty,this._initCartesian(t,e,a),this.model=t}return r.prototype.getRect=function(){return this._rect},r.prototype.update=function(t,e){var a=this._axesMap;this._updateScale(t,this.model);function n(o){var s,l=At(o),u=l.length;if(u){for(var f=[],v=u-1;v>=0;v--){var h=+l[v],c=o[h],d=c.model,p=c.scale;uy(p)&&d.get("alignTicks")&&d.get("interval")==null?f.push(c):(Ji(p,d),uy(p)&&(s=c))}f.length&&(s||(s=f.pop(),Ji(s.scale,s.model)),A(f,function(g){zI(g.scale,g.model,s.scale)}))}}n(a.x),n(a.y);var i={};A(a.x,function(o){Lb(a,"y",o,i)}),A(a.y,function(o){Lb(a,"x",o,i)}),this.resize(this.model,e)},r.prototype.resize=function(t,e,a){var n=de(t,e),i=this._rect=Xt(t.getBoxLayoutParams(),n.refContainer),o=this._axesMap,s=this._coordsList,l=t.get("containLabel");if(Ay(o,i),!a){var u=KH(i,s,o,l,e),f=void 0;if(l)My?(My(this._axesList,i),Ay(o,i)):f=Rb(i.clone(),"axisLabel",null,i,o,u,n);else{var v=JH(t,i,n),h=v.outerBoundsRect,c=v.parsedOuterBoundsContain,d=v.outerBoundsClamp;h&&(f=Rb(h,c,d,i,o,u,n))}VI(i,o,Xr.determine,null,f,n)}A(this._coordsList,function(p){p.calcAffineTransform()})},r.prototype.getAxis=function(t,e){var a=this._axesMap[t];if(a!=null)return a[e||0]},r.prototype.getAxes=function(){return this._axesList.slice()},r.prototype.getCartesian=function(t,e){if(t!=null&&e!=null){var a="x"+t+"y"+e;return this._coordsMap[a]}it(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var n=0,i=this._coordsList;n0})==null;return qi(a,s,!0,!0,e),Ay(n,a),l;function u(h){A(n[dt[h]],function(c){if(du(c.model)){var d=i.ensureRecord(c.model),p=d.labelInfoList;if(p)for(var g=0;g0&&!Ie(c)&&c>1e-4&&(h/=c),h}}function KH(r,t,e,a,n){var i=new RI(QH);return A(e,function(o){return A(o,function(s){if(du(s.model)){var l=!a;s.axisBuilder=ZH(r,t,s.model,n,i,l)}})}),i}function VI(r,t,e,a,n,i){var o=e===Xr.determine;A(t,function(u){return A(u,function(f){du(f.model)&&(XH(f.axisBuilder,r,f.model),f.axisBuilder.build(o?{axisTickLabelDetermine:!0}:{axisTickLabelEstimate:!0},{noPxChange:n}))})});var s={x:0,y:0};l(0),l(1);function l(u){s[dt[1-u]]=r[le[u]]<=i.refContainer[le[u]]*.5?0:1-u===1?2:1}A(t,function(u,f){return A(u,function(v){du(v.model)&&((a==="all"||o)&&v.axisBuilder.build({axisName:!0},{nameMarginLevel:s[f]}),o&&v.axisBuilder.build({axisLine:!0}))})})}function JH(r,t,e){var a,n=r.get("outerBoundsMode",!0);n==="same"?a=t.clone():(n==null||n==="auto")&&(a=Xt(r.get("outerBounds",!0)||CI,e.refContainer));var i=r.get("outerBoundsContain",!0),o;i==null||i==="auto"||yt(["all","axisLabel"],i)<0?o="all":o=i;var s=[Uv(Q(r.get("outerBoundsClampWidth",!0),mh[0]),t.width),Uv(Q(r.get("outerBoundsClampHeight",!0),mh[1]),t.height)];return{outerBoundsRect:a,parsedOuterBoundsContain:o,outerBoundsClamp:s}}var QH=function(r,t,e,a,n,i){var o=e.axis.dim==="x"?"y":"x";kI(r,t,e,a,n,i),hs(r.nameLocation)||A(t.recordMap[o],function(s){s&&s.labelInfoList&&s.dirVec&&OI(s.labelInfoList,s.dirVec,a,n)})};function t4(r,t){var e={axesInfo:{},seriesInvolved:!1,coordSysAxesInfo:{},coordSysMap:{}};return e4(e,r,t),e.seriesInvolved&&a4(e,r),e}function e4(r,t,e){var a=t.getComponent("tooltip"),n=t.getComponent("axisPointer"),i=n.get("link",!0)||[],o=[];A(e.getCoordinateSystems(),function(s){if(!s.axisPointerEnabled)return;var l=mu(s.model),u=r.coordSysAxesInfo[l]={};r.coordSysMap[l]=s;var f=s.model,v=f.getModel("tooltip",a);if(A(s.getAxes(),pt(p,!1,null)),s.getTooltipAxes&&a&&v.get("show")){var h=v.get("trigger")==="axis",c=v.get(["axisPointer","type"])==="cross",d=s.getTooltipAxes(v.get(["axisPointer","axis"]));(h||c)&&A(d.baseAxes,pt(p,c?"cross":!0,h)),c&&A(d.otherAxes,pt(p,"cross",!1))}function p(g,y,m){var _=m.model.getModel("axisPointer",n),S=_.get("show");if(!(!S||S==="auto"&&!g&&!Dy(_))){y==null&&(y=_.get("triggerTooltip")),_=g?r4(m,v,n,t,g,y):_;var x=_.get("snap"),b=_.get("triggerEmphasis"),w=mu(m.model),T=y||x||m.type==="category",C=r.axesInfo[w]={key:w,axis:m,coordSys:s,axisPointerModel:_,triggerTooltip:y,triggerEmphasis:b,involveSeries:T,snap:x,useHandle:Dy(_),seriesModels:[],linkGroup:null};u[w]=C,r.seriesInvolved=r.seriesInvolved||T;var M=n4(i,m);if(M!=null){var D=o[M]||(o[M]={axesInfo:{}});D.axesInfo[w]=C,D.mapper=i[M].mapper,C.linkGroup=D}}}})}function r4(r,t,e,a,n,i){var o=t.getModel("axisPointer"),s=["type","snap","lineStyle","shadowStyle","label","animation","animationDurationUpdate","animationEasingUpdate","z"],l={};A(s,function(h){l[h]=et(o.get(h))}),l.snap=r.type!=="category"&&!!i,o.get("type")==="cross"&&(l.type="line");var u=l.label||(l.label={});if(u.show==null&&(u.show=!1),n==="cross"){var f=o.get(["label","show"]);if(u.show=f??!0,!i){var v=l.lineStyle=o.get("crossStyle");v&&nt(u,v.textStyle)}}return r.model.getModel("axisPointer",new wt(l,e,a))}function a4(r,t){t.eachSeries(function(e){var a=e.coordinateSystem,n=e.get(["tooltip","trigger"],!0),i=e.get(["tooltip","show"],!0);!a||!a.model||n==="none"||n===!1||n==="item"||i===!1||e.get(["axisPointer","show"],!0)===!1||A(r.coordSysAxesInfo[mu(a.model)],function(o){var s=o.axis;a.getAxis(s.dim)===s&&(o.seriesModels.push(e),o.seriesDataCount==null&&(o.seriesDataCount=0),o.seriesDataCount+=e.getData().count())})})}function n4(r,t){for(var e=t.model,a=t.dim,n=0;n=0||r===t}function i4(r){var t=j0(r);if(t){var e=t.axisPointerModel,a=t.axis.scale,n=e.option,i=e.get("status"),o=e.get("value");o!=null&&(o=a.parse(o));var s=Dy(e);i==null&&(n.status=s?"show":"hide");var l=a.getExtent().slice();l[0]>l[1]&&l.reverse(),(o==null||o>l[1])&&(o=l[1]),o0;return o&&s}var h4=bt();function Ob(r,t,e,a){if(r instanceof DI){var n=r.scale.type;if(n!=="category"&&n!=="ordinal")return e}var i=r.model,o=i.get("jitter"),s=i.get("jitterOverlap"),l=i.get("jitterMargin")||0,u=r.scale.type==="ordinal"?r.getBandWidth():null;return o>0?s?YI(e,o,u,a):c4(r,t,e,a,o,l):e}function YI(r,t,e,a){if(e===null)return r+(Math.random()-.5)*t;var n=e-a*2,i=Math.min(Math.max(0,t),n);return r+(Math.random()-.5)*i}function c4(r,t,e,a,n,i){var o=h4(r);o.items||(o.items=[]);var s=o.items,l=Nb(s,t,e,a,n,i,1),u=Nb(s,t,e,a,n,i,-1),f=Math.abs(l-e)n/2||v&&h>v/2-a?YI(e,n,v,a):(s.push({fixedCoord:t,floatCoord:f,r:a}),f)}function Nb(r,t,e,a,n,i,o){for(var s=e,l=0;ln/2)return Number.MAX_VALUE;if(o===1&&d>s||o===-1&&d0&&!d.min?d.min=0:d.min!=null&&d.min<0&&!d.max&&(d.max=0);var p=l;d.color!=null&&(p=nt({color:d.color},l));var g=mt(et(d),{boundaryGap:e,splitNumber:a,scale:n,axisLine:i,axisTick:o,axisLabel:s,name:d.text,showName:u,nameLocation:"end",nameGap:v,nameTextStyle:p,triggerEvent:h},!1);if(X(f)){var y=g.name;g.name=f.replace("{value}",y??"")}else tt(f)&&(g.name=f(g.name,g));var m=new wt(g,null,this.ecModel);return Qt(m,Ns.prototype),m.mainType="radar",m.componentIndex=this.componentIndex,m},this);this._indicatorModels=c},t.prototype.getIndicatorModels=function(){return this._indicatorModels},t.type="radar",t.defaultOption={z:0,center:["50%","50%"],radius:"50%",startAngle:90,axisName:{show:!0,color:B.color.axisLabel},boundaryGap:[0,0],splitNumber:5,axisNameGap:15,scale:!1,shape:"polygon",axisLine:mt({lineStyle:{color:B.color.neutral20}},al.axisLine),axisLabel:Gf(al.axisLabel,!1),axisTick:Gf(al.axisTick,!1),splitLine:Gf(al.splitLine,!0),splitArea:Gf(al.splitArea,!0),indicator:[]},t})(xt),b4=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){var i=this.group;i.removeAll(),this._buildAxes(e,n),this._buildSplitLineAndArea(e)},t.prototype._buildAxes=function(e,a){var n=e.coordinateSystem,i=n.getIndicatorAxes(),o=U(i,function(s){var l=s.model.get("showName")?s.name:"",u=new Ye(s.model,a,{axisName:l,position:[n.cx,n.cy],rotation:s.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return u});A(o,function(s){s.build(),this.group.add(s.group)},this)},t.prototype._buildSplitLineAndArea=function(e){var a=e.coordinateSystem,n=a.getIndicatorAxes();if(!n.length)return;var i=e.get("shape"),o=e.getModel("splitLine"),s=e.getModel("splitArea"),l=o.getModel("lineStyle"),u=s.getModel("areaStyle"),f=o.get("show"),v=s.get("show"),h=l.get("color"),c=u.get("color"),d=W(h)?h:[h],p=W(c)?c:[c],g=[],y=[];function m(k,R,O){var E=O%R.length;return k[E]=k[E]||[],E}if(i==="circle")for(var _=n[0].getTicksCoords(),S=a.cx,x=a.cy,b=0;b<_.length;b++){if(f){var w=m(g,d,b);g[w].push(new Ta({shape:{cx:S,cy:x,r:_[b].coord}}))}if(v&&b<_.length-1){var w=m(y,p,b);y[w].push(new ws({shape:{cx:S,cy:x,r0:_[b].coord,r:_[b+1].coord}}))}}else for(var T,C=U(n,function(k,R){var O=k.getTicksCoords();return T=T==null?O.length-1:Math.min(O.length-1,T),U(O,function(E){return a.coordToPoint(E.coord,R)})}),M=[],b=0;b<=T;b++){for(var D=[],I=0;I3?1.4:o>1?1.2:1.1,f=i>0?u:1/u;this._checkTriggerMoveZoom(this,"zoom","zoomOnMouseWheel",e,{scale:f,originX:s,originY:l,isAvailableBehavior:null})}if(n){var v=Math.abs(i),h=(i>0?1:-1)*(v>3?.4:v>1?.15:.05);this._checkTriggerMoveZoom(this,"scrollMove","moveOnMouseWheel",e,{scrollDelta:h,originX:s,originY:l,isAvailableBehavior:null})}}}},t.prototype._pinchHandler=function(e){if(!(Vb(this._zr,"globalPan")||nl(e))){var a=e.pinchScale>1?1.1:1/1.1;this._checkTriggerMoveZoom(this,"zoom",null,e,{scale:a,originX:e.pinchX,originY:e.pinchY,isAvailableBehavior:null})}},t.prototype._checkTriggerMoveZoom=function(e,a,n,i,o){e._checkPointer(i,o.originX,o.originY)&&(qa(i.event),i.__ecRoamConsumed=!0,Gb(e,a,n,i,o))},t})(Pr);function nl(r){return r.__ecRoamConsumed}var I4=bt();function mc(r){var t=I4(r);return t.roam=t.roam||{},t.uniform=t.uniform||{},t}function il(r,t,e,a){for(var n=mc(r),i=n.roam,o=i[t]=i[t]||[],s=0;s=4&&(f={x:parseFloat(h[0]||0),y:parseFloat(h[1]||0),width:parseFloat(h[2]),height:parseFloat(h[3])})}if(f&&s!=null&&l!=null&&(v=KI(f,{x:0,y:0,width:s,height:l}),!e.ignoreViewBox)){var c=n;n=new rt,n.add(c),c.scaleX=c.scaleY=v.scale,c.x=v.x,c.y=v.y}return!e.ignoreRootClip&&s!=null&&l!=null&&n.setClipPath(new St({shape:{x:0,y:0,width:s,height:l}})),{root:n,width:s,height:l,viewBoxRect:f,viewBoxTransform:v,named:i}},r.prototype._parseNode=function(t,e,a,n,i,o){var s=t.nodeName.toLowerCase(),l,u=n;if(s==="defs"&&(i=!0),s==="text"&&(o=!0),s==="defs"||s==="switch")l=e;else{if(!i){var f=jd[s];if(f&&q(jd,s)){l=f.call(this,t,e);var v=t.getAttribute("name");if(v){var h={name:v,namedFrom:null,svgNodeTagLower:s,el:l};a.push(h),s==="g"&&(u=h)}else n&&a.push({name:n.name,namedFrom:n,svgNodeTagLower:s,el:l});e.add(l)}}var c=Ub[s];if(c&&q(Ub,s)){var d=c.call(this,t),p=t.getAttribute("id");p&&(this._defs[p]=d)}}if(l&&l.isGroup)for(var g=t.firstChild;g;)g.nodeType===1?this._parseNode(g,l,a,u,i,o):g.nodeType===3&&o&&this._parseText(g,l),g=g.nextSibling},r.prototype._parseText=function(t,e){var a=new os({style:{text:t.textContent},silent:!0,x:this._textX||0,y:this._textY||0});pr(e,a),rr(t,a,this._defsUsePending,!1,!1),E4(a,e);var n=a.style,i=n.fontSize;i&&i<9&&(n.fontSize=9,a.scaleX*=i/9,a.scaleY*=i/9);var o=(n.fontSize||n.fontFamily)&&[n.fontStyle,n.fontWeight,(n.fontSize||12)+"px",n.fontFamily||"sans-serif"].join(" ");n.font=o;var s=a.getBoundingRect();return this._textX+=s.width,e.add(a),a},r.internalField=(function(){jd={g:function(t,e){var a=new rt;return pr(e,a),rr(t,a,this._defsUsePending,!1,!1),a},rect:function(t,e){var a=new St;return pr(e,a),rr(t,a,this._defsUsePending,!1,!1),a.setShape({x:parseFloat(t.getAttribute("x")||"0"),y:parseFloat(t.getAttribute("y")||"0"),width:parseFloat(t.getAttribute("width")||"0"),height:parseFloat(t.getAttribute("height")||"0")}),a.silent=!0,a},circle:function(t,e){var a=new Ta;return pr(e,a),rr(t,a,this._defsUsePending,!1,!1),a.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),r:parseFloat(t.getAttribute("r")||"0")}),a.silent=!0,a},line:function(t,e){var a=new ne;return pr(e,a),rr(t,a,this._defsUsePending,!1,!1),a.setShape({x1:parseFloat(t.getAttribute("x1")||"0"),y1:parseFloat(t.getAttribute("y1")||"0"),x2:parseFloat(t.getAttribute("x2")||"0"),y2:parseFloat(t.getAttribute("y2")||"0")}),a.silent=!0,a},ellipse:function(t,e){var a=new Eu;return pr(e,a),rr(t,a,this._defsUsePending,!1,!1),a.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),rx:parseFloat(t.getAttribute("rx")||"0"),ry:parseFloat(t.getAttribute("ry")||"0")}),a.silent=!0,a},polygon:function(t,e){var a=t.getAttribute("points"),n;a&&(n=Xb(a));var i=new Ee({shape:{points:n||[]},silent:!0});return pr(e,i),rr(t,i,this._defsUsePending,!1,!1),i},polyline:function(t,e){var a=t.getAttribute("points"),n;a&&(n=Xb(a));var i=new Ae({shape:{points:n||[]},silent:!0});return pr(e,i),rr(t,i,this._defsUsePending,!1,!1),i},image:function(t,e){var a=new xe;return pr(e,a),rr(t,a,this._defsUsePending,!1,!1),a.setStyle({image:t.getAttribute("xlink:href")||t.getAttribute("href"),x:+t.getAttribute("x"),y:+t.getAttribute("y"),width:+t.getAttribute("width"),height:+t.getAttribute("height")}),a.silent=!0,a},text:function(t,e){var a=t.getAttribute("x")||"0",n=t.getAttribute("y")||"0",i=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0";this._textX=parseFloat(a)+parseFloat(i),this._textY=parseFloat(n)+parseFloat(o);var s=new rt;return pr(e,s),rr(t,s,this._defsUsePending,!1,!0),s},tspan:function(t,e){var a=t.getAttribute("x"),n=t.getAttribute("y");a!=null&&(this._textX=parseFloat(a)),n!=null&&(this._textY=parseFloat(n));var i=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0",s=new rt;return pr(e,s),rr(t,s,this._defsUsePending,!1,!0),this._textX+=parseFloat(i),this._textY+=parseFloat(o),s},path:function(t,e){var a=t.getAttribute("d")||"",n=cD(a);return pr(e,n),rr(t,n,this._defsUsePending,!1,!1),n.silent=!0,n}}})(),r})(),Ub={lineargradient:function(r){var t=parseInt(r.getAttribute("x1")||"0",10),e=parseInt(r.getAttribute("y1")||"0",10),a=parseInt(r.getAttribute("x2")||"10",10),n=parseInt(r.getAttribute("y2")||"0",10),i=new ro(t,e,a,n);return Yb(r,i),Zb(r,i),i},radialgradient:function(r){var t=parseInt(r.getAttribute("cx")||"0",10),e=parseInt(r.getAttribute("cy")||"0",10),a=parseInt(r.getAttribute("r")||"0",10),n=new Wm(t,e,a);return Yb(r,n),Zb(r,n),n}};function Yb(r,t){var e=r.getAttribute("gradientUnits");e==="userSpaceOnUse"&&(t.global=!0)}function Zb(r,t){for(var e=r.firstChild;e;){if(e.nodeType===1&&e.nodeName.toLocaleLowerCase()==="stop"){var a=e.getAttribute("offset"),n=void 0;a&&a.indexOf("%")>0?n=parseInt(a,10)/100:a?n=parseFloat(a):n=0;var i={};jI(e,i,i);var o=i.stopColor||e.getAttribute("stop-color")||"#000000",s=i.stopOpacity||e.getAttribute("stop-opacity");if(s){var l=Ve(o),u=l&&l[3];u&&(l[3]*=Ha(s),o=Cr(l,"rgba"))}t.colorStops.push({offset:n,color:o})}e=e.nextSibling}}function pr(r,t){r&&r.__inheritedStyle&&(t.__inheritedStyle||(t.__inheritedStyle={}),nt(t.__inheritedStyle,r.__inheritedStyle))}function Xb(r){for(var t=Sc(r),e=[],a=0;a0;i-=2){var o=a[i],s=a[i-1],l=Sc(o);switch(n=n||me(),s){case"translate":Yr(n,n,[parseFloat(l[0]),parseFloat(l[1]||"0")]);break;case"scale":Zh(n,n,[parseFloat(l[0]),parseFloat(l[1]||l[0])]);break;case"rotate":rn(n,n,-parseFloat(l[0])*Kd,[parseFloat(l[1]||"0"),parseFloat(l[2]||"0")]);break;case"skewX":var u=Math.tan(parseFloat(l[0])*Kd);Fr(n,[1,0,u,1,0,0],n);break;case"skewY":var f=Math.tan(parseFloat(l[0])*Kd);Fr(n,[1,f,0,1,0,0],n);break;case"matrix":n[0]=parseFloat(l[0]),n[1]=parseFloat(l[1]),n[2]=parseFloat(l[2]),n[3]=parseFloat(l[3]),n[4]=parseFloat(l[4]),n[5]=parseFloat(l[5]);break}}t.setLocalTransform(n)}}var qb=/([^\s:;]+)\s*:\s*([^:;]+)/g;function jI(r,t,e){var a=r.getAttribute("style");if(a){qb.lastIndex=0;for(var n;(n=qb.exec(a))!=null;){var i=n[1],o=q(Sh,i)?Sh[i]:null;o&&(t[o]=n[2]);var s=q(xh,i)?xh[i]:null;s&&(e[s]=n[2])}}}function G4(r,t,e){for(var a=0;a0,m={api:a,geo:l,mapOrGeoModel:t,data:s,isVisualEncodedByVisualMap:y,isGeo:o,transformInfoRaw:h};l.resourceType==="geoJSON"?this._buildGeoJSON(m):l.resourceType==="geoSVG"&&this._buildSVG(m),this._updateController(t,g,e,a),this._updateMapSelectHandler(t,u,a,n)},r.prototype._buildGeoJSON=function(t){var e=this._regionsGroupByName=K(),a=K(),n=this._regionsGroup,i=t.transformInfoRaw,o=t.mapOrGeoModel,s=t.data,l=t.geo.projection,u=l&&l.stream;function f(c,d){return d&&(c=d(c)),c&&[c[0]*i.scaleX+i.x,c[1]*i.scaleY+i.y]}function v(c){for(var d=[],p=!u&&l&&l.project,g=0;g=0)&&(h=n);var c=o?{normal:{align:"center",verticalAlign:"middle"}}:null;Se(t,ce(a),{labelFetcher:h,labelDataIndex:v,defaultText:e},c);var d=t.getTextContent();if(d&&(JI(d).ignore=d.ignore,t.textConfig&&o)){var p=t.getBoundingRect().clone();t.textConfig.layoutRect=p,t.textConfig.position=[(o[0]-p.x)/p.width*100+"%",(o[1]-p.y)/p.height*100+"%"]}t.disableLabelAnimation=!0}else t.removeTextContent(),t.removeTextConfig(),t.disableLabelAnimation=null}function tw(r,t,e,a,n,i){r.data?r.data.setItemGraphicEl(i,t):ft(t).eventData={componentType:"geo",componentIndex:n.componentIndex,geoIndex:n.componentIndex,name:e,region:a&&a.option||{}}}function ew(r,t,e,a,n){r.data||nn({el:t,componentModel:n,itemName:e,itemTooltipOption:a.get("tooltip")})}function rw(r,t,e,a,n){t.highDownSilentOnTouch=!!n.get("selectedMode");var i=a.getModel("emphasis"),o=i.get("focus");return $t(t,o,i.get("blurScope"),i.get("disabled")),r.isGeo&&qN(t,n,e),o}function aw(r,t,e){var a=[],n;function i(){n=[]}function o(){n.length&&(a.push(n),n=[])}var s=t({polygonStart:i,polygonEnd:o,lineStart:i,lineEnd:o,point:function(l,u){isFinite(l)&&isFinite(u)&&n.push([l,u])},sphere:function(){}});return!e&&s.polygonStart(),A(r,function(l){s.lineStart();for(var u=0;u-1&&(n.style.stroke=n.style.fill,n.style.fill=B.color.neutral00,n.style.lineWidth=2),n},t.type="series.map",t.dependencies=["geo"],t.layoutMode="box",t.defaultOption={z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:null,showLegendSymbol:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,selectedMode:!0,label:{show:!1,color:B.color.tertiary},itemStyle:{borderWidth:.5,borderColor:B.color.border,areaColor:B.color.background},emphasis:{label:{show:!0,color:B.color.primary},itemStyle:{areaColor:B.color.highlight}},select:{label:{show:!0,color:B.color.primary},itemStyle:{color:B.color.highlight}},nameProperty:"name"},t})(zt);function oW(r,t){var e={};return A(r,function(a){a.each(a.mapDimension("value"),function(n,i){var o="ec-"+a.getName(i);e[o]=e[o]||[],isNaN(n)||e[o].push(n)})}),r[0].map(r[0].mapDimension("value"),function(a,n){for(var i="ec-"+r[0].getName(n),o=0,s=1/0,l=-1/0,u=e[i].length,f=0;f1?(_.width=m,_.height=m/p):(_.height=m,_.width=m*p),_.y=y[1]-_.height/2,_.x=y[0]-_.width/2;else{var S=r.getBoxLayoutParams();S.aspect=p,_=Xt(S,d),_=XD(r,_,p)}this.setViewRect(_.x,_.y,_.width,_.height),this.setCenter(r.get("center")),this.setZoom(r.get("zoom"))}function fW(r,t){A(t.get("geoCoord"),function(e,a){r.addGeoCoord(a,e)})}var vW=(function(){function r(){this.dimensions=tP}return r.prototype.create=function(t,e){var a=[];function n(o){return{nameProperty:o.get("nameProperty"),aspectScale:o.get("aspectScale"),projection:o.get("projection")}}t.eachComponent("geo",function(o,s){var l=o.get("map"),u=new Py(l+s,l,G({nameMap:o.get("nameMap"),api:e,ecModel:t},n(o)));u.zoomLimit=o.get("scaleLimit"),a.push(u),o.coordinateSystem=u,u.model=o,u.resize=sw,u.resize(o,e)}),t.eachSeries(function(o){Vu({targetModel:o,coordSysType:"geo",coordSysProvider:function(){var s=o.subType==="map"?o.getHostGeoModel():o.getReferringComponents("geo",jt).models[0];return s&&s.coordinateSystem},allowNotFound:!0})});var i={};return t.eachSeriesByType("map",function(o){if(!o.getHostGeoModel()){var s=o.getMapType();i[s]=i[s]||[],i[s].push(o)}}),A(i,function(o,s){var l=U(o,function(f){return f.get("nameMap")}),u=new Py(s,s,G({nameMap:Wh(l),api:e,ecModel:t},n(o[0])));u.zoomLimit=Ce.apply(null,U(o,function(f){return f.get("scaleLimit")})),a.push(u),u.resize=sw,u.resize(o[0],e),A(o,function(f){f.coordinateSystem=u,fW(u,f)})}),a},r.prototype.getFilledRegions=function(t,e,a,n){for(var i=(t||[]).slice(),o=K(),s=0;s=0;o--){var s=n[o];s.hierNode={defaultAncestor:null,ancestor:s,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},e.push(s)}}function yW(r,t){var e=r.isExpand?r.children:[],a=r.parentNode.children,n=r.hierNode.i?a[r.hierNode.i-1]:null;if(e.length){_W(r);var i=(e[0].hierNode.prelim+e[e.length-1].hierNode.prelim)/2;n?(r.hierNode.prelim=n.hierNode.prelim+t(r,n),r.hierNode.modifier=r.hierNode.prelim-i):r.hierNode.prelim=i}else n&&(r.hierNode.prelim=n.hierNode.prelim+t(r,n));r.parentNode.hierNode.defaultAncestor=SW(r,n,r.parentNode.hierNode.defaultAncestor||a[0],t)}function mW(r){var t=r.hierNode.prelim+r.parentNode.hierNode.modifier;r.setLayout({x:t},!0),r.hierNode.modifier+=r.parentNode.hierNode.modifier}function lw(r){return arguments.length?r:wW}function Il(r,t){return r-=Math.PI/2,{x:t*Math.cos(r),y:t*Math.sin(r)}}function _W(r){for(var t=r.children,e=t.length,a=0,n=0;--e>=0;){var i=t[e];i.hierNode.prelim+=a,i.hierNode.modifier+=a,n+=i.hierNode.change,a+=i.hierNode.shift+n}}function SW(r,t,e,a){if(t){for(var n=r,i=r,o=i.parentNode.children[0],s=t,l=n.hierNode.modifier,u=i.hierNode.modifier,f=o.hierNode.modifier,v=s.hierNode.modifier;s=Jd(s),i=Qd(i),s&&i;){n=Jd(n),o=Qd(o),n.hierNode.ancestor=r;var h=s.hierNode.prelim+v-i.hierNode.prelim-u+a(s,i);h>0&&(bW(xW(s,r,e),r,h),u+=h,l+=h),v+=s.hierNode.modifier,u+=i.hierNode.modifier,l+=n.hierNode.modifier,f+=o.hierNode.modifier}s&&!Jd(n)&&(n.hierNode.thread=s,n.hierNode.modifier+=v-l),i&&!Qd(o)&&(o.hierNode.thread=i,o.hierNode.modifier+=u-f,e=r)}return e}function Jd(r){var t=r.children;return t.length&&r.isExpand?t[t.length-1]:r.hierNode.thread}function Qd(r){var t=r.children;return t.length&&r.isExpand?t[0]:r.hierNode.thread}function xW(r,t,e){return r.hierNode.ancestor.parentNode===t.parentNode?r.hierNode.ancestor:e}function bW(r,t,e){var a=e/(t.hierNode.i-r.hierNode.i);t.hierNode.change-=a,t.hierNode.shift+=e,t.hierNode.modifier+=e,t.hierNode.prelim+=e,r.hierNode.change+=a}function wW(r,t){return r.parentNode===t.parentNode?1:2}var TW=(function(){function r(){this.parentPoint=[],this.childPoints=[]}return r})(),CW=(function(r){N(t,r);function t(e){return r.call(this,e)||this}return t.prototype.getDefaultStyle=function(){return{stroke:B.color.neutral99,fill:null}},t.prototype.getDefaultShape=function(){return new TW},t.prototype.buildPath=function(e,a){var n=a.childPoints,i=n.length,o=a.parentPoint,s=n[0],l=n[i-1];if(i===1){e.moveTo(o[0],o[1]),e.lineTo(s[0],s[1]);return}var u=a.orient,f=u==="TB"||u==="BT"?0:1,v=1-f,h=Z(a.forkPosition,1),c=[];c[f]=o[f],c[v]=o[v]+(l[v]-o[v])*h,e.moveTo(o[0],o[1]),e.lineTo(c[0],c[1]),e.moveTo(s[0],s[1]),c[f]=s[f],e.lineTo(c[0],c[1]),c[f]=l[f],e.lineTo(c[0],c[1]),e.lineTo(l[0],l[1]);for(var d=1;dm.x,x||(S=S-Math.PI));var w=x?"left":"right",T=s.getModel("label"),C=T.get("rotate"),M=C*(Math.PI/180),D=g.getTextContent();D&&(g.setTextConfig({position:T.get("position")||w,rotation:C==null?-S:M,origin:"center"}),D.setStyle("verticalAlign","middle"))}var I=s.get(["emphasis","focus"]),L=I==="relative"?rs(o.getAncestorsIndices(),o.getDescendantIndices()):I==="ancestor"?o.getAncestorsIndices():I==="descendant"?o.getDescendantIndices():null;L&&(ft(e).focus=L),MW(n,o,f,e,d,c,p,a),e.__edge&&(e.onHoverStateChange=function(P){if(P!=="blur"){var k=o.parentNode&&r.getItemGraphicEl(o.parentNode.dataIndex);k&&k.hoverState===ku||$v(e.__edge,P)}})}function MW(r,t,e,a,n,i,o,s){var l=t.getModel(),u=r.get("edgeShape"),f=r.get("layout"),v=r.getOrient(),h=r.get(["lineStyle","curveness"]),c=r.get("edgeForkPosition"),d=l.getModel("lineStyle").getLineStyle(),p=a.__edge;if(u==="curve")t.parentNode&&t.parentNode!==e&&(p||(p=a.__edge=new Ts({shape:Ry(f,v,h,n,n)})),It(p,{shape:Ry(f,v,h,i,o)},r));else if(u==="polyline"&&f==="orthogonal"&&t!==e&&t.children&&t.children.length!==0&&t.isExpand===!0){for(var g=t.children,y=[],m=0;me&&(e=n.height)}this.height=e+1},r.prototype.getNodeById=function(t){if(this.getId()===t)return this;for(var e=0,a=this.children,n=a.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},r.prototype.getLayout=function(){return this.hostTree.data.getItemLayout(this.dataIndex)},r.prototype.getModel=function(t){if(!(this.dataIndex<0)){var e=this.hostTree,a=e.data.getItemModel(this.dataIndex);return a.getModel(t)}},r.prototype.getLevelModel=function(){return(this.hostTree.levelModels||[])[this.depth]},r.prototype.setVisual=function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},r.prototype.getVisual=function(t){return this.hostTree.data.getItemVisual(this.dataIndex,t)},r.prototype.getRawIndex=function(){return this.hostTree.data.getRawIndex(this.dataIndex)},r.prototype.getId=function(){return this.hostTree.data.getId(this.dataIndex)},r.prototype.getChildIndex=function(){if(this.parentNode){for(var t=this.parentNode.children,e=0;e=0){var a=e.getData().tree.root,n=r.targetNode;if(X(n)&&(n=a.getNodeById(n)),n&&a.contains(n))return{node:n};var i=r.targetNodeId;if(i!=null&&(n=a.getNodeById(i)))return{node:n}}}function oP(r){for(var t=[];r;)r=r.parentNode,r&&t.push(r);return t.reverse()}function n_(r,t){var e=oP(r);return yt(e,t)>=0}function xc(r,t){for(var e=[];r;){var a=r.dataIndex;e.push({name:r.name,dataIndex:a,value:t.getRawValue(a)}),r=r.parentNode}return e.reverse(),e}var NW=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.hasSymbolVisual=!0,e.ignoreStyleOnData=!0,e}return t.prototype.getInitialData=function(e){var a={name:e.name,children:e.data},n=e.leaves||{},i=new wt(n,this,this.ecModel),o=a_.createTree(a,this,s);function s(v){v.wrapMethod("getItemModel",function(h,c){var d=o.getNodeByDataIndex(c);return d&&d.children.length&&d.isExpand||(h.parentModel=i),h})}var l=0;o.eachNode("preorder",function(v){v.depth>l&&(l=v.depth)});var u=e.expandAndCollapse,f=u&&e.initialTreeDepth>=0?e.initialTreeDepth:l;return o.root.eachNode("preorder",function(v){var h=v.hostTree.data.getRawDataItem(v.dataIndex);v.isExpand=h&&h.collapsed!=null?!h.collapsed:v.depth<=f}),o.data},t.prototype.getOrient=function(){var e=this.get("orient");return e==="horizontal"?e="LR":e==="vertical"&&(e="TB"),e},t.prototype.setZoom=function(e){this.option.zoom=e},t.prototype.setCenter=function(e){this.option.center=e},t.prototype.formatTooltip=function(e,a,n){for(var i=this.getData().tree,o=i.root.children[0],s=i.getNodeByDataIndex(e),l=s.getValue(),u=s.name;s&&s!==o;)u=s.parentNode.name+"."+u,s=s.parentNode;return ue("nameValue",{name:u,value:l,noValue:isNaN(l)||l==null})},t.prototype.getDataParams=function(e){var a=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(e);return a.treeAncestors=xc(n,this),a.collapsed=!n.isExpand,a},t.type="series.tree",t.layoutMode="box",t.defaultOption={z:2,coordinateSystemUsage:"box",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",edgeShape:"curve",edgeForkPosition:"50%",roam:!1,roamTrigger:"global",nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:B.color.borderTint,width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderWidth:1.5},label:{show:!0},animationEasing:"linear",animationDuration:700,animationDurationUpdate:500},t})(zt);function BW(r,t,e){for(var a=[r],n=[],i;i=a.pop();)if(n.push(i),i.isExpand){var o=i.children;if(o.length)for(var s=0;s=0;i--)e.push(n[i])}}function zW(r,t){r.eachSeriesByType("tree",function(e){VW(e,t)})}function VW(r,t){var e=de(r,t).refContainer,a=Xt(r.getBoxLayoutParams(),e);r.layoutInfo=a;var n=r.get("layout"),i=0,o=0,s=null;n==="radial"?(i=2*Math.PI,o=Math.min(a.height,a.width)/2,s=lw(function(S,x){return(S.parentNode===x.parentNode?1:2)/S.depth})):(i=a.width,o=a.height,s=lw());var l=r.getData().tree.root,u=l.children[0];if(u){gW(l),BW(u,yW,s),l.hierNode.modifier=-u.hierNode.prelim,ll(u,mW);var f=u,v=u,h=u;ll(u,function(S){var x=S.getLayout().x;xv.getLayout().x&&(v=S),S.depth>h.depth&&(h=S)});var c=f===v?1:s(f,v)/2,d=c-f.getLayout().x,p=0,g=0,y=0,m=0;if(n==="radial")p=i/(v.getLayout().x+c+d),g=o/(h.depth-1||1),ll(u,function(S){y=(S.getLayout().x+d)*p,m=(S.depth-1)*g;var x=Il(y,m);S.setLayout({x:x.x,y:x.y,rawX:y,rawY:m},!0)});else{var _=r.getOrient();_==="RL"||_==="LR"?(g=o/(v.getLayout().x+c+d),p=i/(h.depth-1||1),ll(u,function(S){m=(S.getLayout().x+d)*g,y=_==="LR"?(S.depth-1)*p:i-(S.depth-1)*p,S.setLayout({x:y,y:m},!0)})):(_==="TB"||_==="BT")&&(p=i/(v.getLayout().x+c+d),g=o/(h.depth-1||1),ll(u,function(S){y=(S.getLayout().x+d)*p,m=_==="TB"?(S.depth-1)*g:o-(S.depth-1)*g,S.setLayout({x:y,y:m},!0)}))}}}function GW(r){r.eachSeriesByType("tree",function(t){var e=t.getData(),a=e.tree;a.eachNode(function(n){var i=n.getModel(),o=i.getModel("itemStyle").getItemStyle(),s=e.ensureUniqueItemVisual(n.dataIndex,"style");G(s,o)})})}function FW(r){r.registerAction({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(a){var n=t.dataIndex,i=a.getData().tree,o=i.getNodeByDataIndex(n);o.isExpand=!o.isExpand})}),r.registerAction({type:"treeRoam",event:"treeRoam",update:"none"},function(t,e,a){e.eachComponent({mainType:"series",subType:"tree",query:t},function(n){var i=n.coordinateSystem,o=_c(i,t,n.get("scaleLimit"));n.setCenter(o.center),n.setZoom(o.zoom)})})}function HW(r){r.registerChartView(AW),r.registerSeriesModel(NW),r.registerLayout(zW),r.registerVisual(GW),FW(r)}var cw=["treemapZoomToNode","treemapRender","treemapMove"];function WW(r){for(var t=0;t1;)i=i.parentNode;var o=qg(r.ecModel,i.name||i.dataIndex+"",a);n.setVisual("decal",o)})}var UW=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.preventUsingHoverLayer=!0,e}return t.prototype.getInitialData=function(e,a){var n={name:e.name,children:e.data};lP(n);var i=e.levels||[],o=this.designatedVisualItemStyle={},s=new wt({itemStyle:o},this,a);i=e.levels=YW(i,a);var l=U(i||[],function(v){return new wt(v,s,a)},this),u=a_.createTree(n,this,f);function f(v){v.wrapMethod("getItemModel",function(h,c){var d=u.getNodeByDataIndex(c),p=d?l[d.depth]:null;return h.parentModel=p||s,h})}return u.data},t.prototype.optionUpdated=function(){this.resetViewRoot()},t.prototype.formatTooltip=function(e,a,n){var i=this.getData(),o=this.getRawValue(e),s=i.getName(e);return ue("nameValue",{name:s,value:o})},t.prototype.getDataParams=function(e){var a=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(e);return a.treeAncestors=xc(n,this),a.treePathInfo=a.treeAncestors,a},t.prototype.setLayoutInfo=function(e){this.layoutInfo=this.layoutInfo||{},G(this.layoutInfo,e)},t.prototype.mapIdToIndex=function(e){var a=this._idIndexMap;a||(a=this._idIndexMap=K(),this._idIndexMapCount=0);var n=a.get(e);return n==null&&a.set(e,n=this._idIndexMapCount++),n},t.prototype.getViewRoot=function(){return this._viewRoot},t.prototype.resetViewRoot=function(e){e?this._viewRoot=e:e=this._viewRoot;var a=this.getRawData().tree.root;(!e||e!==a&&!a.contains(e))&&(this._viewRoot=a)},t.prototype.enableAriaDecal=function(){sP(this)},t.type="series.treemap",t.layoutMode="box",t.defaultOption={progressive:0,coordinateSystemUsage:"box",left:B.size.l,top:B.size.xxxl,right:B.size.l,bottom:B.size.xxxl,sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.32*.32,scaleLimit:{max:5,min:.2},roam:!0,roamTrigger:"global",nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",bottom:B.size.m,emptyItemWidth:25,itemStyle:{color:B.color.backgroundShade,textStyle:{color:B.color.secondary}},emphasis:{itemStyle:{color:B.color.background}}},label:{show:!0,distance:0,padding:5,position:"inside",color:B.color.neutral00,overflow:"truncate"},upperLabel:{show:!1,position:[0,"50%"],height:20,overflow:"truncate",verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:B.color.neutral00,borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],overflow:"truncate",verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},t})(zt);function lP(r){var t=0;A(r.children,function(a){lP(a);var n=a.value;W(n)&&(n=n[0]),t+=n});var e=r.value;W(e)&&(e=e[0]),(e==null||isNaN(e))&&(e=t),e<0&&(e=0),W(r.value)?r.value[0]=e:r.value=e}function YW(r,t){var e=Ht(t.get("color")),a=Ht(t.get(["aria","decal","decals"]));if(e){r=r||[];var n,i;A(r,function(s){var l=new wt(s),u=l.get("color"),f=l.get("decal");(l.get(["itemStyle","color"])||u&&u!=="none")&&(n=!0),(l.get(["itemStyle","decal"])||f&&f!=="none")&&(i=!0)});var o=r[0]||(r[0]={});return n||(o.color=e.slice()),!i&&a&&(o.decal=a.slice()),r}}var ZW=8,dw=8,tp=5,XW=(function(){function r(t){this.group=new rt,t.add(this.group)}return r.prototype.render=function(t,e,a,n){var i=t.getModel("breadcrumb"),o=this.group;if(o.removeAll(),!(!i.get("show")||!a)){var s=i.getModel("itemStyle"),l=i.getModel("emphasis"),u=s.getModel("textStyle"),f=l.getModel(["itemStyle","textStyle"]),v=de(t,e).refContainer,h={left:i.get("left"),right:i.get("right"),top:i.get("top"),bottom:i.get("bottom")},c={emptyItemWidth:i.get("emptyItemWidth"),totalWidth:0,renderList:[]},d=Xt(h,v);this._prepare(a,c,u),this._renderContent(t,c,d,s,l,u,f,n),lc(o,h,v)}},r.prototype._prepare=function(t,e,a){for(var n=t;n;n=n.parentNode){var i=ve(n.getModel().get("name"),""),o=a.getTextRect(i),s=Math.max(o.width+ZW*2,e.emptyItemWidth);e.totalWidth+=s+dw,e.renderList.push({node:n,text:i,width:s})}},r.prototype._renderContent=function(t,e,a,n,i,o,s,l){for(var u=0,f=e.emptyItemWidth,v=t.get(["breadcrumb","height"]),h=e.totalWidth,c=e.renderList,d=i.getModel("itemStyle").getItemStyle(),p=c.length-1;p>=0;p--){var g=c[p],y=g.node,m=g.width,_=g.text;h>a.width&&(h-=m-f,m=f,_=null);var S=new Ee({shape:{points:$W(u,0,m,v,p===c.length-1,p===0)},style:nt(n.getItemStyle(),{lineJoin:"bevel"}),textContent:new Mt({style:Ft(o,{text:_})}),textConfig:{position:"inside"},z2:bs*1e4,onclick:pt(l,y)});S.disableLabelAnimation=!0,S.getTextContent().ensureState("emphasis").style=Ft(s,{text:_}),S.ensureState("emphasis").style=d,$t(S,i.get("focus"),i.get("blurScope"),i.get("disabled")),this.group.add(S),qW(S,t,y),u+=m+dw}},r.prototype.remove=function(){this.group.removeAll()},r})();function $W(r,t,e,a,n,i){var o=[[n?r:r-tp,t],[r+e,t],[r+e,t+a],[n?r:r-tp,t+a]];return!i&&o.splice(2,0,[r+e+tp,t+a/2]),!n&&o.push([r,t+a/2]),o}function qW(r,t,e){ft(r).eventData={componentType:"series",componentSubType:"treemap",componentIndex:t.componentIndex,seriesIndex:t.seriesIndex,seriesName:t.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:e&&e.dataIndex,name:e&&e.name},treePathInfo:e&&xc(e,t)}}var jW=(function(){function r(){this._storage=[],this._elExistsMap={}}return r.prototype.add=function(t,e,a,n,i){return this._elExistsMap[t.id]?!1:(this._elExistsMap[t.id]=!0,this._storage.push({el:t,target:e,duration:a,delay:n,easing:i}),!0)},r.prototype.finished=function(t){return this._finishedCallback=t,this},r.prototype.start=function(){for(var t=this,e=this._storage.length,a=function(){e--,e<=0&&(t._storage.length=0,t._elExistsMap={},t._finishedCallback&&t._finishedCallback())},n=0,i=this._storage.length;ngw||Math.abs(e.dy)>gw)){var a=this.seriesModel.getData().tree.root;if(!a)return;var n=a.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+e.dx,y:n.y+e.dy,width:n.width,height:n.height}})}},t.prototype._onZoom=function(e){var a=e.originX,n=e.originY,i=e.scale;if(this._state!=="animating"){var o=this.seriesModel.getData().tree.root;if(!o)return;var s=o.getLayout();if(!s)return;var l=new lt(s.x,s.y,s.width,s.height),u=null,f=this._controllerHost;u=f.zoomLimit;var v=f.zoom=f.zoom||1;if(v*=i,u){var h=u.min||0,c=u.max||1/0;v=Math.max(Math.min(c,v),h)}var d=v/f.zoom;f.zoom=v;var p=this.seriesModel.layoutInfo;a-=p.x,n-=p.y;var g=me();Yr(g,g,[-a,-n]),Zh(g,g,[d,d]),Yr(g,g,[a,n]),l.applyTransform(g),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:l.x,y:l.y,width:l.width,height:l.height}})}},t.prototype._initEvents=function(e){var a=this;e.on("click",function(n){if(a._state==="ready"){var i=a.seriesModel.get("nodeClick",!0);if(i){var o=a.findTarget(n.offsetX,n.offsetY);if(o){var s=o.node;if(s.getLayout().isLeafRoot)a._rootToNode(o);else if(i==="zoomToNode")a._zoomToNode(o);else if(i==="link"){var l=s.hostTree.data.getItemModel(s.dataIndex),u=l.get("link",!0),f=l.get("target",!0)||"blank";u&&Jv(u,f)}}}}},this)},t.prototype._renderBreadcrumb=function(e,a,n){var i=this;n||(n=e.get("leafDepth",!0)!=null?{node:e.getViewRoot()}:this.findTarget(a.getWidth()/2,a.getHeight()/2),n||(n={node:e.getData().tree.root})),(this._breadcrumb||(this._breadcrumb=new XW(this.group))).render(e,a,n.node,function(o){i._state!=="animating"&&(n_(e.getViewRoot(),o)?i._rootToNode({node:o}):i._zoomToNode({node:o}))})},t.prototype.remove=function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage=ul(),this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},t.prototype.dispose=function(){this._clearController()},t.prototype._zoomToNode=function(e){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:e.node})},t.prototype._rootToNode=function(e){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:e.node})},t.prototype.findTarget=function(e,a){var n,i=this.seriesModel.getViewRoot();return i.eachNode({attr:"viewChildren",order:"preorder"},function(o){var s=this._storage.background[o.getRawIndex()];if(s){var l=s.transformCoordToLocal(e,a),u=s.shape;if(u.x<=l[0]&&l[0]<=u.x+u.width&&u.y<=l[1]&&l[1]<=u.y+u.height)n={node:o,offsetX:l[0],offsetY:l[1]};else return!1}},this),n},t.type="treemap",t})(Nt);function ul(){return{nodeGroup:[],background:[],content:[]}}function rU(r,t,e,a,n,i,o,s,l,u){if(!o)return;var f=o.getLayout(),v=r.getData(),h=o.getModel();if(v.setItemGraphicEl(o.dataIndex,null),!f||!f.isInView)return;var c=f.width,d=f.height,p=f.borderWidth,g=f.invisible,y=o.getRawIndex(),m=s&&s.getRawIndex(),_=o.viewChildren,S=f.upperHeight,x=_&&_.length,b=h.getModel("itemStyle"),w=h.getModel(["emphasis","itemStyle"]),T=h.getModel(["blur","itemStyle"]),C=h.getModel(["select","itemStyle"]),M=b.get("borderRadius")||0,D=vt("nodeGroup",ky);if(!D)return;if(l.add(D),D.x=f.x||0,D.y=f.y||0,D.markRedraw(),bh(D).nodeWidth=c,bh(D).nodeHeight=d,f.isAboveViewRoot)return D;var I=vt("background",pw,u,QW);I&&V(D,I,x&&f.upperLabelHeight);var L=h.getModel("emphasis"),P=L.get("focus"),k=L.get("blurScope"),R=L.get("disabled"),O=P==="ancestor"?o.getAncestorsIndices():P==="descendant"?o.getDescendantIndices():P;if(x)nu(D)&&Ri(D,!1),I&&(Ri(I,!R),v.setItemGraphicEl(o.dataIndex,I),zg(I,O,k));else{var E=vt("content",pw,u,tU);E&&F(D,E),I.disableMorphing=!0,I&&nu(I)&&Ri(I,!1),Ri(D,!R),v.setItemGraphicEl(o.dataIndex,D);var z=h.getShallow("cursor");z&&E.attr("cursor",z),zg(D,O,k)}return D;function V(ht,at,gt){var J=ft(at);if(J.dataIndex=o.dataIndex,J.seriesIndex=r.seriesIndex,at.setShape({x:0,y:0,width:c,height:d,r:M}),g)H(at);else{at.invisible=!1;var ct=o.getVisual("style"),Vt=ct.stroke,Lt=_w(b);Lt.fill=Vt;var Ot=bi(w);Ot.fill=w.get("borderColor");var Gt=bi(T);Gt.fill=T.get("borderColor");var pe=bi(C);if(pe.fill=C.get("borderColor"),gt){var er=c-2*p;Y(at,Vt,ct.opacity,{x:p,y:0,width:er,height:S})}else at.removeTextContent();at.setStyle(Lt),at.ensureState("emphasis").style=Ot,at.ensureState("blur").style=Gt,at.ensureState("select").style=pe,$i(at)}ht.add(at)}function F(ht,at){var gt=ft(at);gt.dataIndex=o.dataIndex,gt.seriesIndex=r.seriesIndex;var J=Math.max(c-2*p,0),ct=Math.max(d-2*p,0);if(at.culling=!0,at.setShape({x:p,y:p,width:J,height:ct,r:M}),g)H(at);else{at.invisible=!1;var Vt=o.getVisual("style"),Lt=Vt.fill,Ot=_w(b);Ot.fill=Lt,Ot.decal=Vt.decal;var Gt=bi(w),pe=bi(T),er=bi(C);Y(at,Lt,Vt.opacity,null),at.setStyle(Ot),at.ensureState("emphasis").style=Gt,at.ensureState("blur").style=pe,at.ensureState("select").style=er,$i(at)}ht.add(at)}function H(ht){!ht.invisible&&i.push(ht)}function Y(ht,at,gt,J){var ct=h.getModel(J?mw:yw),Vt=ve(h.get("name"),null),Lt=ct.getShallow("show");Se(ht,ce(h,J?mw:yw),{defaultText:Lt?Vt:null,inheritColor:at,defaultOpacity:gt,labelFetcher:r,labelDataIndex:o.dataIndex});var Ot=ht.getTextContent();if(Ot){var Gt=Ot.style,pe=Du(Gt.padding||0);J&&(ht.setTextConfig({layoutRect:J}),Ot.disableLabelLayout=!0),Ot.beforeUpdate=function(){var $e=Math.max((J?J.width:ht.shape.width)-pe[1]-pe[3],0),Xn=Math.max((J?J.height:ht.shape.height)-pe[0]-pe[2],0);(Gt.width!==$e||Gt.height!==Xn)&&Ot.setStyle({width:$e,height:Xn})},Gt.truncateMinChar=2,Gt.lineOverflow="truncate",j(Gt,J,f);var er=Ot.getState("emphasis");j(er?er.style:null,J,f)}}function j(ht,at,gt){var J=ht?ht.text:null;if(!at&>.isLeafRoot&&J!=null){var ct=r.get("drillDownIcon",!0);ht.text=ct?ct+" "+J:J}}function vt(ht,at,gt,J){var ct=m!=null&&e[ht][m],Vt=n[ht];return ct?(e[ht][m]=null,Pt(Vt,ct)):g||(ct=new at,ct instanceof Lr&&(ct.z2=aU(gt,J)),Bt(Vt,ct)),t[ht][y]=ct}function Pt(ht,at){var gt=ht[y]={};at instanceof ky?(gt.oldX=at.x,gt.oldY=at.y):gt.oldShape=G({},at.shape)}function Bt(ht,at){var gt=ht[y]={},J=o.parentNode,ct=at instanceof rt;if(J&&(!a||a.direction==="drillDown")){var Vt=0,Lt=0,Ot=n.background[J.getRawIndex()];!a&&Ot&&Ot.oldShape&&(Vt=Ot.oldShape.width,Lt=Ot.oldShape.height),ct?(gt.oldX=0,gt.oldY=Lt):gt.oldShape={x:Vt,y:Lt,width:0,height:0}}gt.fadein=!ct}}function aU(r,t){return r*JW+t}var Su=A,nU=it,wh=-1,_e=(function(){function r(t){var e=t.mappingMethod,a=t.type,n=this.option=et(t);this.type=a,this.mappingMethod=e,this._normalizeData=sU[e];var i=r.visualHandlers[a];this.applyVisual=i.applyVisual,this.getColorMapper=i.getColorMapper,this._normalizedToVisual=i._normalizedToVisual[e],e==="piecewise"?(ep(n),iU(n)):e==="category"?n.categories?oU(n):ep(n,!0):(Re(e!=="linear"||n.dataExtent),ep(n))}return r.prototype.mapValueToVisual=function(t){var e=this._normalizeData(t);return this._normalizedToVisual(e,t)},r.prototype.getNormalizer=function(){return $(this._normalizeData,this)},r.listVisualTypes=function(){return At(r.visualHandlers)},r.isValidType=function(t){return r.visualHandlers.hasOwnProperty(t)},r.eachVisual=function(t,e,a){it(t)?A(t,e,a):e.call(a,t)},r.mapVisual=function(t,e,a){var n,i=W(t)?[]:it(t)?{}:(n=!0,null);return r.eachVisual(t,function(o,s){var l=e.call(a,o,s);n?i=l:i[s]=l}),i},r.retrieveVisuals=function(t){var e={},a;return t&&Su(r.visualHandlers,function(n,i){t.hasOwnProperty(i)&&(e[i]=t[i],a=!0)}),a?e:null},r.prepareVisualTypes=function(t){if(W(t))t=t.slice();else if(nU(t)){var e=[];Su(t,function(a,n){e.push(n)}),t=e}else return[];return t.sort(function(a,n){return n==="color"&&a!=="color"&&a.indexOf("color")===0?1:-1}),t},r.dependsOn=function(t,e){return e==="color"?!!(t&&t.indexOf(e)===0):t===e},r.findPieceIndex=function(t,e,a){for(var n,i=1/0,o=0,s=e.length;o=0;i--)a[i]==null&&(delete e[t[i]],t.pop())}function ep(r,t){var e=r.visual,a=[];it(e)?Su(e,function(i){a.push(i)}):e!=null&&a.push(e);var n={color:1,symbol:1};!t&&a.length===1&&!n.hasOwnProperty(r.type)&&(a[1]=a[0]),uP(r,a)}function Hf(r){return{applyVisual:function(t,e,a){var n=this.mapValueToVisual(t);a("color",r(e("color"),n))},_normalizedToVisual:Ey([0,1])}}function Sw(r){var t=this.option.visual;return t[Math.round(kt(r,[0,1],[0,t.length-1],!0))]||{}}function fl(r){return function(t,e,a){a(r,this.mapValueToVisual(t))}}function Pl(r){var t=this.option.visual;return t[this.option.loop&&r!==wh?r%t.length:r]}function wi(){return this.option.visual[0]}function Ey(r){return{linear:function(t){return kt(t,r,this.option.visual,!0)},category:Pl,piecewise:function(t,e){var a=Oy.call(this,e);return a==null&&(a=kt(t,r,this.option.visual,!0)),a},fixed:wi}}function Oy(r){var t=this.option,e=t.pieceList;if(t.hasSpecialVisual){var a=_e.findPieceIndex(r,e),n=e[a];if(n&&n.visual)return n.visual[this.type]}}function uP(r,t){return r.visual=t,r.type==="color"&&(r.parsedVisual=U(t,function(e){var a=Ve(e);return a||[0,0,0,1]})),t}var sU={linear:function(r){return kt(r,this.option.dataExtent,[0,1],!0)},piecewise:function(r){var t=this.option.pieceList,e=_e.findPieceIndex(r,t,!0);if(e!=null)return kt(e,[0,t.length-1],[0,1],!0)},category:function(r){var t=this.option.categories?this.option.categoryMap[r]:r;return t??wh},fixed:Kt};function Wf(r,t,e){return r?t<=e:t=e.length||p===e[p.depth]){var y=cU(n,l,p,g,d,a);vP(p,y,e,a)}})}}}function fU(r,t,e){var a=G({},t),n=e.designatedVisualItemStyle;return A(["color","colorAlpha","colorSaturation"],function(i){n[i]=t[i];var o=r.get(i);n[i]=null,o!=null&&(a[i]=o)}),a}function xw(r){var t=rp(r,"color");if(t){var e=rp(r,"colorAlpha"),a=rp(r,"colorSaturation");return a&&(t=Wa(t,null,null,a)),e&&(t=Ql(t,e)),t}}function vU(r,t){return t!=null?Wa(t,null,null,r):null}function rp(r,t){var e=r[t];if(e!=null&&e!=="none")return e}function hU(r,t,e,a,n,i){if(!(!i||!i.length)){var o=ap(t,"color")||n.color!=null&&n.color!=="none"&&(ap(t,"colorAlpha")||ap(t,"colorSaturation"));if(o){var s=t.get("visualMin"),l=t.get("visualMax"),u=e.dataExtent.slice();s!=null&&su[1]&&(u[1]=l);var f=t.get("colorMappingBy"),v={type:o.name,dataExtent:u,visual:o.range};v.type==="color"&&(f==="index"||f==="id")?(v.mappingMethod="category",v.loop=!0):v.mappingMethod="linear";var h=new _e(v);return fP(h).drColorMappingBy=f,h}}}function ap(r,t){var e=r.get(t);return W(e)&&e.length?{name:t,range:e}:null}function cU(r,t,e,a,n,i){var o=G({},t);if(n){var s=n.type,l=s==="color"&&fP(n).drColorMappingBy,u=l==="index"?a:l==="id"?i.mapIdToIndex(e.getId()):e.getValue(r.get("visualDimension"));o[s]=n.mapValueToVisual(u)}return o}var xu=Math.max,Th=Math.min,bw=Ce,i_=A,hP=["itemStyle","borderWidth"],dU=["itemStyle","gapWidth"],pU=["upperLabel","show"],gU=["upperLabel","height"];const yU={seriesType:"treemap",reset:function(r,t,e,a){var n=r.option,i=de(r,e).refContainer,o=Xt(r.getBoxLayoutParams(),i),s=n.size||[],l=Z(bw(o.width,s[0]),i.width),u=Z(bw(o.height,s[1]),i.height),f=a&&a.type,v=["treemapZoomToNode","treemapRootToNode"],h=_u(a,v,r),c=f==="treemapRender"||f==="treemapMove"?a.rootRect:null,d=r.getViewRoot(),p=oP(d);if(f!=="treemapMove"){var g=f==="treemapZoomToNode"?wU(r,h,d,l,u):c?[c.width,c.height]:[l,u],y=n.sort;y&&y!=="asc"&&y!=="desc"&&(y="desc");var m={squareRatio:n.squareRatio,sort:y,leafDepth:n.leafDepth};d.hostTree.clearLayouts();var _={x:0,y:0,width:g[0],height:g[1],area:g[0]*g[1]};d.setLayout(_),cP(d,m,!1,0),_=d.getLayout(),i_(p,function(x,b){var w=(p[b+1]||d).getValue();x.setLayout(G({dataExtent:[w,w],borderWidth:0,upperHeight:0},_))})}var S=r.getData().tree.root;S.setLayout(TU(o,c,h),!0),r.setLayoutInfo(o),dP(S,new lt(-o.x,-o.y,e.getWidth(),e.getHeight()),p,d,0)}};function cP(r,t,e,a){var n,i;if(!r.isRemoved()){var o=r.getLayout();n=o.width,i=o.height;var s=r.getModel(),l=s.get(hP),u=s.get(dU)/2,f=pP(s),v=Math.max(l,f),h=l-u,c=v-u;r.setLayout({borderWidth:l,upperHeight:v,upperLabelHeight:f},!0),n=xu(n-2*h,0),i=xu(i-h-c,0);var d=n*i,p=mU(r,s,d,t,e,a);if(p.length){var g={x:h,y:c,width:n,height:i},y=Th(n,i),m=1/0,_=[];_.area=0;for(var S=0,x=p.length;S=0;l--){var u=n[a==="asc"?o-l-1:l].getValue();u/e*ts[1]&&(s[1]=u)})),{sum:a,dataExtent:s}}function bU(r,t,e){for(var a=0,n=1/0,i=0,o=void 0,s=r.length;ia&&(a=o));var l=r.area*r.area,u=t*t*e;return l?xu(u*a/l,l/(u*n)):1/0}function ww(r,t,e,a,n){var i=t===e.width?0:1,o=1-i,s=["x","y"],l=["width","height"],u=e[s[i]],f=t?r.area/t:0;(n||f>e[l[o]])&&(f=e[l[o]]);for(var v=0,h=r.length;vMg&&(u=Mg),i=s}ua&&(a=t);var i=a%2?a+2:a+3;n=[];for(var o=0;o0&&(x[0]=-x[0],x[1]=-x[1]);var w=S[0]<0?-1:1;if(i.__position!=="start"&&i.__position!=="end"){var T=-Math.atan2(S[1],S[0]);v[0].8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";break;case"start":i.x=-h[0]*y+f[0],i.y=-h[1]*m+f[1],d=h[0]>.8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=y*w+f[0],i.y=f[1]+C,d=S[0]<0?"right":"left",i.originX=-y*w,i.originY=-C;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=b[0],i.y=b[1]+C,d="center",i.originY=-C;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-y*w+v[0],i.y=v[1]+C,d=S[0]>=0?"right":"left",i.originX=y*w,i.originY=-C;break}i.scaleX=i.scaleY=o,i.setStyle({verticalAlign:i.__verticalAlign||p,align:i.__align||d})}},t})(rt),f_=(function(){function r(t){this.group=new rt,this._LineCtor=t||u_}return r.prototype.updateData=function(t){var e=this;this._progressiveEls=null;var a=this,n=a.group,i=a._lineData;a._lineData=t,i||n.removeAll();var o=Lw(t);t.diff(i).add(function(s){e._doAdd(t,s,o)}).update(function(s,l){e._doUpdate(i,t,l,s,o)}).remove(function(s){n.remove(i.getItemGraphicEl(s))}).execute()},r.prototype.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl(function(e,a){e.updateLayout(t,a)},this)},r.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=Lw(t),this._lineData=null,this.group.removeAll()},r.prototype.incrementalUpdate=function(t,e){this._progressiveEls=[];function a(s){!s.isGroup&&!FU(s)&&(s.incremental=!0,s.ensureState("emphasis").hoverLayer=!0)}for(var n=t.start;n0}function Lw(r){var t=r.hostModel,e=t.getModel("emphasis");return{lineStyle:t.getModel("lineStyle").getLineStyle(),emphasisLineStyle:e.getModel(["lineStyle"]).getLineStyle(),blurLineStyle:t.getModel(["blur","lineStyle"]).getLineStyle(),selectLineStyle:t.getModel(["select","lineStyle"]).getLineStyle(),emphasisDisabled:e.get("disabled"),blurScope:e.get("blurScope"),focus:e.get("focus"),labelStatesModels:ce(t)}}function Iw(r){return isNaN(r[0])||isNaN(r[1])}function lp(r){return r&&!Iw(r[0])&&!Iw(r[1])}var up=[],fp=[],vp=[],Lo=Te,hp=Mn,Pw=Math.abs;function Rw(r,t,e){for(var a=r[0],n=r[1],i=r[2],o=1/0,s,l=e*e,u=.1,f=.1;f<=.9;f+=.1){up[0]=Lo(a[0],n[0],i[0],f),up[1]=Lo(a[1],n[1],i[1],f);var v=Pw(hp(up,t)-l);v=0?s=s+u:s=s-u:d>=0?s=s-u:s=s+u}return s}function cp(r,t){var e=[],a=Kl,n=[[],[],[]],i=[[],[]],o=[];t/=2,r.eachEdge(function(s,l){var u=s.getLayout(),f=s.getVisual("fromSymbol"),v=s.getVisual("toSymbol");u.__original||(u.__original=[da(u[0]),da(u[1])],u[2]&&u.__original.push(da(u[2])));var h=u.__original;if(u[2]!=null){if(Ne(n[0],h[0]),Ne(n[1],h[2]),Ne(n[2],h[1]),f&&f!=="none"){var c=kl(s.node1),d=Rw(n,h[0],c*t);a(n[0][0],n[1][0],n[2][0],d,e),n[0][0]=e[3],n[1][0]=e[4],a(n[0][1],n[1][1],n[2][1],d,e),n[0][1]=e[3],n[1][1]=e[4]}if(v&&v!=="none"){var c=kl(s.node2),d=Rw(n,h[1],c*t);a(n[0][0],n[1][0],n[2][0],d,e),n[1][0]=e[1],n[2][0]=e[2],a(n[0][1],n[1][1],n[2][1],d,e),n[1][1]=e[1],n[2][1]=e[2]}Ne(u[0],n[0]),Ne(u[1],n[2]),Ne(u[2],n[1])}else{if(Ne(i[0],h[0]),Ne(i[1],h[1]),Sn(o,i[1],i[0]),eo(o,o),f&&f!=="none"){var c=kl(s.node1);Rv(i[0],i[0],o,c*t)}if(v&&v!=="none"){var c=kl(s.node2);Rv(i[1],i[1],o,-c*t)}Ne(u[0],i[0]),Ne(u[1],i[1])}})}var bP=bt();function HU(r){if(r)return bP(r).bridge}function kw(r,t){r&&(bP(r).bridge=t)}function Ew(r){return r.type==="view"}var WU=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e,a){var n=new Wu,i=new f_,o=this.group,s=new rt;this._controller=new lo(a.getZr()),this._controllerHost={target:s},s.add(n.group),s.add(i.group),o.add(s),this._symbolDraw=n,this._lineDraw=i,this._mainGroup=s,this._firstRender=!0},t.prototype.render=function(e,a,n){var i=this,o=e.coordinateSystem,s=!1;this._model=e,this._api=n,this._active=!0;var l=this._getThumbnailInfo();l&&l.bridge.reset(n);var u=this._symbolDraw,f=this._lineDraw;if(Ew(o)){var v={x:o.x,y:o.y,scaleX:o.scaleX,scaleY:o.scaleY};this._firstRender?this._mainGroup.attr(v):It(this._mainGroup,v,e)}cp(e.getGraph(),Rl(e));var h=e.getData();u.updateData(h);var c=e.getEdgeData();f.updateData(c),this._updateNodeAndLinkScale(),this._updateController(null,e,n),clearTimeout(this._layoutTimeout);var d=e.forceLayout,p=e.get(["force","layoutAnimation"]);d&&(s=!0,this._startForceLayoutIteration(d,n,p));var g=e.get("layout");h.graph.eachNode(function(S){var x=S.dataIndex,b=S.getGraphicEl(),w=S.getModel();if(b){b.off("drag").off("dragend");var T=w.get("draggable");T&&b.on("drag",function(M){switch(g){case"force":d.warmUp(),!i._layouting&&i._startForceLayoutIteration(d,n,p),d.setFixed(x),h.setItemLayout(x,[b.x,b.y]);break;case"circular":h.setItemLayout(x,[b.x,b.y]),S.setLayout({fixed:!0},!0),l_(e,"symbolSize",S,[M.offsetX,M.offsetY]),i.updateLayout(e);break;default:h.setItemLayout(x,[b.x,b.y]),s_(e.getGraph(),e),i.updateLayout(e);break}}).on("dragend",function(){d&&d.setUnfixed(x)}),b.setDraggable(T,!!w.get("cursor"));var C=w.get(["emphasis","focus"]);C==="adjacency"&&(ft(b).focus=S.getAdjacentDataIndices())}}),h.graph.eachEdge(function(S){var x=S.getGraphicEl(),b=S.getModel().get(["emphasis","focus"]);x&&b==="adjacency"&&(ft(x).focus={edge:[S.dataIndex],node:[S.node1.dataIndex,S.node2.dataIndex]})});var y=e.get("layout")==="circular"&&e.get(["circular","rotateLabel"]),m=h.getLayout("cx"),_=h.getLayout("cy");h.graph.eachNode(function(S){_P(S,y,m,_)}),this._firstRender=!1,s||this._renderThumbnail(e,n,this._symbolDraw,this._lineDraw)},t.prototype.dispose=function(){this.remove(),this._controller&&this._controller.dispose(),this._controllerHost=null},t.prototype._startForceLayoutIteration=function(e,a,n){var i=this,o=!1;(function s(){e.step(function(l){i.updateLayout(i._model),(l||!o)&&(o=!0,i._renderThumbnail(i._model,a,i._symbolDraw,i._lineDraw)),(i._layouting=!l)&&(n?i._layoutTimeout=setTimeout(s,16):s())})})()},t.prototype._updateController=function(e,a,n){var i=this._controller,o=this._controllerHost,s=a.coordinateSystem;if(!Ew(s)){i.disable();return}i.enable(a.get("roam"),{api:n,zInfo:{component:a},triggerInfo:{roamTrigger:a.get("roamTrigger"),isInSelf:function(l,u,f){return s.containPoint([u,f])},isInClip:function(l,u,f){return!e||e.contain(u,f)}}}),o.zoomLimit=a.get("scaleLimit"),o.zoom=s.getZoom(),i.off("pan").off("zoom").on("pan",function(l){n.dispatchAction({seriesId:a.id,type:"graphRoam",dx:l.dx,dy:l.dy})}).on("zoom",function(l){n.dispatchAction({seriesId:a.id,type:"graphRoam",zoom:l.scale,originX:l.originX,originY:l.originY})})},t.prototype.updateViewOnPan=function(e,a,n){this._active&&(J0(this._controllerHost,n.dx,n.dy),this._updateThumbnailWindow())},t.prototype.updateViewOnZoom=function(e,a,n){this._active&&(Q0(this._controllerHost,n.zoom,n.originX,n.originY),this._updateNodeAndLinkScale(),cp(e.getGraph(),Rl(e)),this._lineDraw.updateLayout(),a.updateLabelLayout(),this._updateThumbnailWindow())},t.prototype._updateNodeAndLinkScale=function(){var e=this._model,a=e.getData(),n=Rl(e);a.eachItemGraphicEl(function(i,o){i&&i.setSymbolScale(n)})},t.prototype.updateLayout=function(e){this._active&&(cp(e.getGraph(),Rl(e)),this._symbolDraw.updateLayout(),this._lineDraw.updateLayout())},t.prototype.remove=function(){this._active=!1,clearTimeout(this._layoutTimeout),this._layouting=!1,this._layoutTimeout=null,this._symbolDraw&&this._symbolDraw.remove(),this._lineDraw&&this._lineDraw.remove(),this._controller&&this._controller.disable()},t.prototype._getThumbnailInfo=function(){var e=this._model,a=e.coordinateSystem;if(a.type==="view"){var n=HU(e);if(n)return{bridge:n,coordSys:a}}},t.prototype._updateThumbnailWindow=function(){var e=this._getThumbnailInfo();e&&e.bridge.updateWindow(e.coordSys.transform,this._api)},t.prototype._renderThumbnail=function(e,a,n,i){var o=this._getThumbnailInfo();if(o){var s=new rt,l=n.group.children(),u=i.group.children(),f=new rt,v=new rt;s.add(v),s.add(f);for(var h=0;h=0&&t.call(e,a[i],i)},r.prototype.eachEdge=function(t,e){for(var a=this.edges,n=a.length,i=0;i=0&&a[i].node1.dataIndex>=0&&a[i].node2.dataIndex>=0&&t.call(e,a[i],i)},r.prototype.breadthFirstTraverse=function(t,e,a,n){if(e instanceof Ti||(e=this._nodesMap[Io(e)]),!!e){for(var i=a==="out"?"outEdges":a==="in"?"inEdges":"edges",o=0;o=0&&l.node2.dataIndex>=0});for(var i=0,o=n.length;i=0&&!t.hasKey(d)&&(t.set(d,!0),o.push(c.node1))}for(l=0;l=0&&!t.hasKey(_)&&(t.set(_,!0),s.push(m.node2))}}}return{edge:t.keys(),node:e.keys()}},r})(),wP=(function(){function r(t,e,a){this.dataIndex=-1,this.node1=t,this.node2=e,this.dataIndex=a??-1}return r.prototype.getModel=function(t){if(!(this.dataIndex<0)){var e=this.hostGraph,a=e.edgeData.getItemModel(this.dataIndex);return a.getModel(t)}},r.prototype.getAdjacentDataIndices=function(){return{edge:[this.dataIndex],node:[this.node1.dataIndex,this.node2.dataIndex]}},r.prototype.getTrajectoryDataIndices=function(){var t=K(),e=K();t.set(this.dataIndex,!0);for(var a=[this.node1],n=[this.node2],i=0;i=0&&!t.hasKey(v)&&(t.set(v,!0),a.push(f.node1))}for(i=0;i=0&&!t.hasKey(p)&&(t.set(p,!0),n.push(d.node2))}return{edge:t.keys(),node:e.keys()}},r})();function TP(r,t){return{getValue:function(e){var a=this[r][t];return a.getStore().get(a.getDimensionIndex(e||"value"),this.dataIndex)},setVisual:function(e,a){this.dataIndex>=0&&this[r][t].setItemVisual(this.dataIndex,e,a)},getVisual:function(e){return this[r][t].getItemVisual(this.dataIndex,e)},setLayout:function(e,a){this.dataIndex>=0&&this[r][t].setItemLayout(this.dataIndex,e,a)},getLayout:function(){return this[r][t].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[r][t].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[r][t].getRawIndex(this.dataIndex)}}}Qt(Ti,TP("hostGraph","data"));Qt(wP,TP("hostGraph","edgeData"));function v_(r,t,e,a,n){for(var i=new UU(a),o=0;o "+h)),u++)}var c=e.get("coordinateSystem"),d;if(c==="cartesian2d"||c==="polar"||c==="matrix")d=Ca(r,e);else{var p=Is.get(c),g=p?p.dimensions||[]:[];yt(g,"value")<0&&g.concat(["value"]);var y=Es(r,{coordDimensions:g,encodeDefine:e.getEncode()}).dimensions;d=new Ge(y,e),d.initData(r)}var m=new Ge(["value"],e);return m.initData(l,s),n&&n(d,m),nP({mainData:d,struct:i,structAttr:"graph",datas:{node:d,edge:m},datasAttr:{node:"data",edge:"edgeData"}}),i.update(),i}var YU=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.hasSymbolVisual=!0,e}return t.prototype.init=function(e){r.prototype.init.apply(this,arguments);var a=this;function n(){return a._categoriesData}this.legendVisualProvider=new Vs(n,n),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},t.prototype.mergeOption=function(e){r.prototype.mergeOption.apply(this,arguments),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},t.prototype.mergeDefaultAndTheme=function(e){r.prototype.mergeDefaultAndTheme.apply(this,arguments),Yi(e,"edgeLabel",["show"])},t.prototype.getInitialData=function(e,a){var n=e.edges||e.links||[],i=e.data||e.nodes||[],o=this;if(i&&n){PU(this);var s=v_(i,n,this,!0,l);return A(s.edges,function(u){RU(u.node1,u.node2,this,u.dataIndex)},this),s.data}function l(u,f){u.wrapMethod("getItemModel",function(d){var p=o._categoriesModels,g=d.getShallow("category"),y=p[g];return y&&(y.parentModel=d.parentModel,d.parentModel=y),d});var v=wt.prototype.getModel;function h(d,p){var g=v.call(this,d,p);return g.resolveParentPath=c,g}f.wrapMethod("getItemModel",function(d){return d.resolveParentPath=c,d.getModel=h,d});function c(d){if(d&&(d[0]==="label"||d[1]==="label")){var p=d.slice();return d[0]==="label"?p[0]="edgeLabel":d[1]==="label"&&(p[1]="edgeLabel"),p}return d}}},t.prototype.getGraph=function(){return this.getData().graph},t.prototype.getEdgeData=function(){return this.getGraph().edgeData},t.prototype.getCategoriesData=function(){return this._categoriesData},t.prototype.formatTooltip=function(e,a,n){if(n==="edge"){var i=this.getData(),o=this.getDataParams(e,n),s=i.graph.getEdgeByIndex(e),l=i.getName(s.node1.dataIndex),u=i.getName(s.node2.dataIndex),f=[];return l!=null&&f.push(l),u!=null&&f.push(u),ue("nameValue",{name:f.join(" > "),value:o.value,noValue:o.value==null})}var v=ML({series:this,dataIndex:e,multipleSeries:a});return v},t.prototype._updateCategoriesData=function(){var e=U(this.option.categories||[],function(n){return n.value!=null?n:G({value:0},n)}),a=new Ge(["value"],this);a.initData(e),this._categoriesData=a,this._categoriesModels=a.mapArray(function(n){return a.getItemModel(n)})},t.prototype.setZoom=function(e){this.option.zoom=e},t.prototype.setCenter=function(e){this.option.center=e},t.prototype.isAnimationEnabled=function(){return r.prototype.isAnimationEnabled.call(this)&&!(this.get("layout")==="force"&&this.get(["force","layoutAnimation"]))},t.type="series.graph",t.dependencies=["grid","polar","geo","singleAxis","calendar"],t.defaultOption={z:2,coordinateSystem:"view",legendHoverLink:!0,layout:null,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:B.color.neutral50,width:1,opacity:.5},emphasis:{scale:!0,label:{show:!0}},select:{itemStyle:{borderColor:B.color.primary}}},t})(zt);function ZU(r){r.registerChartView(WU),r.registerSeriesModel(YU),r.registerProcessor(AU),r.registerVisual(MU),r.registerVisual(DU),r.registerLayout(kU),r.registerLayout(r.PRIORITY.VISUAL.POST_CHART_LAYOUT,OU),r.registerLayout(BU),r.registerCoordinateSystem("graphView",{dimensions:uo.dimensions,create:VU}),r.registerAction({type:"focusNodeAdjacency",event:"focusNodeAdjacency",update:"series:focusNodeAdjacency"},Kt),r.registerAction({type:"unfocusNodeAdjacency",event:"unfocusNodeAdjacency",update:"series:unfocusNodeAdjacency"},Kt),r.registerAction({type:"graphRoam",event:"graphRoam",update:"none"},function(t,e,a){e.eachComponent({mainType:"series",query:t},function(n){var i=a.getViewOfSeriesModel(n);i&&(t.dx!=null&&t.dy!=null&&i.updateViewOnPan(n,a,t),t.zoom!=null&&t.originX!=null&&t.originY!=null&&i.updateViewOnZoom(n,a,t));var o=n.coordinateSystem,s=_c(o,t,n.get("scaleLimit"));n.setCenter&&n.setCenter(s.center),n.setZoom&&n.setZoom(s.zoom)})})}var Ow=(function(r){N(t,r);function t(e,a,n){var i=r.call(this)||this;ft(i).dataType="node",i.z2=2;var o=new Mt;return i.setTextContent(o),i.updateData(e,a,n,!0),i}return t.prototype.updateData=function(e,a,n,i){var o=this,s=e.graph.getNodeByIndex(a),l=e.hostModel,u=s.getModel(),f=u.getModel("emphasis"),v=e.getItemLayout(a),h=G(ca(u.getModel("itemStyle"),v,!0),v),c=this;if(isNaN(h.startAngle)){c.setShape(h);return}i?c.setShape(h):It(c,{shape:h},l,a);var d=G(ca(u.getModel("itemStyle"),v,!0),v);o.setShape(d),o.useStyle(e.getItemVisual(a,"style")),he(o,u),this._updateLabel(l,u,s),e.setItemGraphicEl(a,c),he(c,u,"itemStyle");var p=f.get("focus");$t(this,p==="adjacency"?s.getAdjacentDataIndices():p,f.get("blurScope"),f.get("disabled"))},t.prototype._updateLabel=function(e,a,n){var i=this.getTextContent(),o=n.getLayout(),s=(o.startAngle+o.endAngle)/2,l=Math.cos(s),u=Math.sin(s),f=a.getModel("label");i.ignore=!f.get("show");var v=ce(a),h=n.getVisual("style");Se(i,v,{labelFetcher:{getFormattedLabel:function(m,_,S,x,b,w){return e.getFormattedLabel(m,_,"node",x,Qe(b,v.normal&&v.normal.get("formatter"),a.get("name")),w)}},labelDataIndex:n.dataIndex,defaultText:n.dataIndex+"",inheritColor:h.fill,defaultOpacity:h.opacity,defaultOutsidePosition:"startArc"});var c=f.get("position")||"outside",d=f.get("distance")||0,p;c==="outside"?p=o.r+d:p=(o.r+o.r0)/2,this.textConfig={inside:c!=="outside"};var g=c!=="outside"?f.get("align")||"center":l>0?"left":"right",y=c!=="outside"?f.get("verticalAlign")||"middle":u>0?"top":"bottom";i.attr({x:l*p+o.cx,y:u*p+o.cy,rotation:0,style:{align:g,verticalAlign:y}})},t})(ke),XU=(function(r){N(t,r);function t(e,a,n,i){var o=r.call(this)||this;return ft(o).dataType="edge",o.updateData(e,a,n,i,!0),o}return t.prototype.buildPath=function(e,a){e.moveTo(a.s1[0],a.s1[1]);var n=.7,i=a.clockwise;e.arc(a.cx,a.cy,a.r,a.sStartAngle,a.sEndAngle,!i),e.bezierCurveTo((a.cx-a.s2[0])*n+a.s2[0],(a.cy-a.s2[1])*n+a.s2[1],(a.cx-a.t1[0])*n+a.t1[0],(a.cy-a.t1[1])*n+a.t1[1],a.t1[0],a.t1[1]),e.arc(a.cx,a.cy,a.r,a.tStartAngle,a.tEndAngle,!i),e.bezierCurveTo((a.cx-a.t2[0])*n+a.t2[0],(a.cy-a.t2[1])*n+a.t2[1],(a.cx-a.s1[0])*n+a.s1[0],(a.cy-a.s1[1])*n+a.s1[1],a.s1[0],a.s1[1]),e.closePath()},t.prototype.updateData=function(e,a,n,i,o){var s=e.hostModel,l=a.graph.getEdgeByIndex(n),u=l.getLayout(),f=l.node1.getModel(),v=a.getItemModel(l.dataIndex),h=v.getModel("lineStyle"),c=v.getModel("emphasis"),d=c.get("focus"),p=G(ca(f.getModel("itemStyle"),u,!0),u),g=this;if(isNaN(p.sStartAngle)||isNaN(p.tStartAngle)){g.setShape(p);return}o?(g.setShape(p),Nw(g,l,e,h)):(Ir(g),Nw(g,l,e,h),It(g,{shape:p},s,n)),$t(this,d==="adjacency"?l.getAdjacentDataIndices():d,c.get("blurScope"),c.get("disabled")),he(g,v,"lineStyle"),a.setItemGraphicEl(l.dataIndex,g)},t})(Tt);function Nw(r,t,e,a){var n=t.node1,i=t.node2,o=r.style;r.setStyle(a.getLineStyle());var s=a.get("color");switch(s){case"source":o.fill=e.getItemVisual(n.dataIndex,"style").fill,o.decal=n.getVisual("style").decal;break;case"target":o.fill=e.getItemVisual(i.dataIndex,"style").fill,o.decal=i.getVisual("style").decal;break;case"gradient":var l=e.getItemVisual(n.dataIndex,"style").fill,u=e.getItemVisual(i.dataIndex,"style").fill;if(X(l)&&X(u)){var f=r.shape,v=(f.s1[0]+f.s2[0])/2,h=(f.s1[1]+f.s2[1])/2,c=(f.t1[0]+f.t2[0])/2,d=(f.t1[1]+f.t2[1])/2;o.fill=new ro(v,h,c,d,[{offset:0,color:l},{offset:1,color:u}],!0)}break}}var $U=Math.PI/180,qU=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e,a){},t.prototype.render=function(e,a,n){var i=e.getData(),o=this._data,s=this.group,l=-e.get("startAngle")*$U;if(i.diff(o).add(function(f){var v=i.getItemLayout(f);if(v){var h=new Ow(i,f,l);ft(h).dataIndex=f,s.add(h)}}).update(function(f,v){var h=o.getItemGraphicEl(v),c=i.getItemLayout(f);if(!c){h&&Ua(h,e,v);return}h?h.updateData(i,f,l):h=new Ow(i,f,l),s.add(h)}).remove(function(f){var v=o.getItemGraphicEl(f);v&&Ua(v,e,f)}).execute(),!o){var u=e.get("center");this.group.scaleX=.01,this.group.scaleY=.01,this.group.originX=Z(u[0],n.getWidth()),this.group.originY=Z(u[1],n.getHeight()),Zt(this.group,{scaleX:1,scaleY:1},e)}this._data=i,this.renderEdges(e,l)},t.prototype.renderEdges=function(e,a){var n=e.getData(),i=e.getEdgeData(),o=this._edgeData,s=this.group;i.diff(o).add(function(l){var u=new XU(n,i,l,a);ft(u).dataIndex=l,s.add(u)}).update(function(l,u){var f=o.getItemGraphicEl(u);f.updateData(n,i,l,a),s.add(f)}).remove(function(l){var u=o.getItemGraphicEl(l);u&&Ua(u,e,l)}).execute(),this._edgeData=i},t.prototype.dispose=function(){},t.type="chord",t})(Nt),jU=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e){r.prototype.init.apply(this,arguments),this.fillDataTextStyle(e.edges||e.links),this.legendVisualProvider=new Vs($(this.getData,this),$(this.getRawData,this))},t.prototype.mergeOption=function(e){r.prototype.mergeOption.apply(this,arguments),this.fillDataTextStyle(e.edges||e.links)},t.prototype.getInitialData=function(e,a){var n=e.edges||e.links||[],i=e.data||e.nodes||[];if(i&&n){var o=v_(i,n,this,!0,s);return o.data}function s(l,u){var f=wt.prototype.getModel;function v(c,d){var p=f.call(this,c,d);return p.resolveParentPath=h,p}u.wrapMethod("getItemModel",function(c){return c.resolveParentPath=h,c.getModel=v,c});function h(c){if(c&&(c[0]==="label"||c[1]==="label")){var d=c.slice();return c[0]==="label"?d[0]="edgeLabel":c[1]==="label"&&(d[1]="edgeLabel"),d}return c}}},t.prototype.getGraph=function(){return this.getData().graph},t.prototype.getEdgeData=function(){return this.getGraph().edgeData},t.prototype.formatTooltip=function(e,a,n){var i=this.getDataParams(e,n);if(n==="edge"){var o=this.getData(),s=o.graph.getEdgeByIndex(e),l=o.getName(s.node1.dataIndex),u=o.getName(s.node2.dataIndex),f=[];return l!=null&&f.push(l),u!=null&&f.push(u),ue("nameValue",{name:f.join(" > "),value:i.value,noValue:i.value==null})}return ue("nameValue",{name:i.name,value:i.value,noValue:i.value==null})},t.prototype.getDataParams=function(e,a){var n=r.prototype.getDataParams.call(this,e,a);if(a==="node"){var i=this.getData(),o=this.getGraph().getNodeByIndex(e);if(n.name==null&&(n.name=i.getName(e)),n.value==null){var s=o.getLayout().value;n.value=s}}return n},t.type="series.chord",t.defaultOption={z:2,coordinateSystem:"none",legendHoverLink:!0,colorBy:"data",left:0,top:0,right:0,bottom:0,width:null,height:null,center:["50%","50%"],radius:["70%","80%"],clockwise:!0,startAngle:90,endAngle:"auto",minAngle:0,padAngle:3,itemStyle:{borderRadius:[0,0,5,5]},lineStyle:{width:0,color:"source",opacity:.2},label:{show:!0,position:"outside",distance:5},emphasis:{focus:"adjacency",lineStyle:{opacity:.5}}},t})(zt),dp=Math.PI/180;function KU(r,t){r.eachSeriesByType("chord",function(e){JU(e,t)})}function JU(r,t){var e=r.getData(),a=e.graph,n=r.getEdgeData(),i=n.count();if(i){var o=ZD(r,t),s=o.cx,l=o.cy,u=o.r,f=o.r0,v=Math.max((r.get("padAngle")||0)*dp,0),h=Math.max((r.get("minAngle")||0)*dp,0),c=-r.get("startAngle")*dp,d=c+Math.PI*2,p=r.get("clockwise"),g=p?1:-1,y=[c,d];ec(y,!p);var m=y[0],_=y[1],S=_-m,x=e.getSum("value")===0&&n.getSum("value")===0,b=[],w=0;a.eachEdge(function(E){var z=x?1:E.getValue("value");x&&(z>0||h)&&(w+=2);var V=E.node1.dataIndex,F=E.node2.dataIndex;b[V]=(b[V]||0)+z,b[F]=(b[F]||0)+z});var T=0;if(a.eachNode(function(E){var z=E.getValue("value");isNaN(z)||(b[E.dataIndex]=Math.max(z,b[E.dataIndex]||0)),!x&&(b[E.dataIndex]>0||h)&&w++,T+=b[E.dataIndex]||0}),!(w===0||T===0)){v*w>=Math.abs(S)&&(v=Math.max(0,(Math.abs(S)-h*w)/w)),(v+h)*w>=Math.abs(S)&&(h=(Math.abs(S)-v*w)/w);var C=(S-v*w*g)/T,M=0,D=0,I=0;a.eachNode(function(E){var z=b[E.dataIndex]||0,V=C*(T?z:1)*g;Math.abs(V)D){var P=M/D;a.eachNode(function(E){var z=E.getLayout().angle;Math.abs(z)>=h?E.setLayout({angle:z*P,ratio:P},!0):E.setLayout({angle:h,ratio:h===0?1:z/h},!0)})}else a.eachNode(function(E){if(!L){var z=E.getLayout().angle,V=Math.min(z/I,1),F=V*M;z-Fh&&h>0){var V=L?1:Math.min(z/I,1),F=z-h,H=Math.min(F,Math.min(k,M*V));k-=H,E.setLayout({angle:z-H,ratio:(z-H)/z},!0)}else h>0&&E.setLayout({angle:h,ratio:z===0?1:h/z},!0)}});var R=m,O=[];a.eachNode(function(E){var z=Math.max(E.getLayout().angle,h);E.setLayout({cx:s,cy:l,r0:f,r:u,startAngle:R,endAngle:R+z*g,clockwise:p},!0),O[E.dataIndex]=R,R+=(z+v)*g}),a.eachEdge(function(E){var z=x?1:E.getValue("value"),V=C*(T?z:1)*g,F=E.node1.dataIndex,H=O[F]||0,Y=Math.abs((E.node1.getLayout().ratio||1)*V),j=H+Y*g,vt=[s+f*Math.cos(H),l+f*Math.sin(H)],Pt=[s+f*Math.cos(j),l+f*Math.sin(j)],Bt=E.node2.dataIndex,ht=O[Bt]||0,at=Math.abs((E.node2.getLayout().ratio||1)*V),gt=ht+at*g,J=[s+f*Math.cos(ht),l+f*Math.sin(ht)],ct=[s+f*Math.cos(gt),l+f*Math.sin(gt)];E.setLayout({s1:vt,s2:Pt,sStartAngle:H,sEndAngle:j,t1:J,t2:ct,tStartAngle:ht,tEndAngle:gt,cx:s,cy:l,r:f,value:z,clockwise:p}),O[F]=j,O[Bt]=gt})}}}function QU(r){r.registerChartView(qU),r.registerSeriesModel(jU),r.registerLayout(r.PRIORITY.VISUAL.POST_CHART_LAYOUT,KU),r.registerProcessor(Bs("chord"))}var t8=(function(){function r(){this.angle=0,this.width=10,this.r=10,this.x=0,this.y=0}return r})(),e8=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a.type="pointer",a}return t.prototype.getDefaultShape=function(){return new t8},t.prototype.buildPath=function(e,a){var n=Math.cos,i=Math.sin,o=a.r,s=a.width,l=a.angle,u=a.x-n(l)*s*(s>=o/3?1:2),f=a.y-i(l)*s*(s>=o/3?1:2);l=a.angle-Math.PI/2,e.moveTo(u,f),e.lineTo(a.x+n(l)*s,a.y+i(l)*s),e.lineTo(a.x+n(a.angle)*o,a.y+i(a.angle)*o),e.lineTo(a.x-n(l)*s,a.y-i(l)*s),e.lineTo(u,f)},t})(Tt);function r8(r,t){var e=r.get("center"),a=t.getWidth(),n=t.getHeight(),i=Math.min(a,n),o=Z(e[0],t.getWidth()),s=Z(e[1],t.getHeight()),l=Z(r.get("radius"),i/2);return{cx:o,cy:s,r:l}}function Yf(r,t){var e=r==null?"":r+"";return t&&(X(t)?e=t.replace("{value}",e):tt(t)&&(e=t(r))),e}var a8=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){this.group.removeAll();var i=e.get(["axisLine","lineStyle","color"]),o=r8(e,n);this._renderMain(e,a,n,i,o),this._data=e.getData()},t.prototype.dispose=function(){},t.prototype._renderMain=function(e,a,n,i,o){var s=this.group,l=e.get("clockwise"),u=-e.get("startAngle")/180*Math.PI,f=-e.get("endAngle")/180*Math.PI,v=e.getModel("axisLine"),h=v.get("roundCap"),c=h?yh:ke,d=v.get("show"),p=v.getModel("lineStyle"),g=p.get("width"),y=[u,f];ec(y,!l),u=y[0],f=y[1];for(var m=f-u,_=u,S=[],x=0;d&&x=C&&(M===0?0:i[M-1][0])Math.PI/2&&(j+=Math.PI)):Y==="tangential"?j=-T-Math.PI/2:Dt(Y)&&(j=Y*Math.PI/180),j===0?v.add(new Mt({style:Ft(_,{text:z,x:F,y:H,verticalAlign:k<-.8?"top":k>.8?"bottom":"middle",align:P<-.4?"left":P>.4?"right":"center"},{inheritColor:V}),silent:!0})):v.add(new Mt({style:Ft(_,{text:z,x:F,y:H,verticalAlign:"middle",align:"center"},{inheritColor:V}),silent:!0,originX:F,originY:H,rotation:j}))}if(m.get("show")&&R!==S){var O=m.get("distance");O=O?O+f:f;for(var vt=0;vt<=x;vt++){P=Math.cos(T),k=Math.sin(T);var Pt=new ne({shape:{x1:P*(d-O)+h,y1:k*(d-O)+c,x2:P*(d-w-O)+h,y2:k*(d-w-O)+c},silent:!0,style:I});I.stroke==="auto"&&Pt.setStyle({stroke:i((R+vt/x)/S)}),v.add(Pt),T+=M}T-=M}else T+=C}},t.prototype._renderPointer=function(e,a,n,i,o,s,l,u,f){var v=this.group,h=this._data,c=this._progressEls,d=[],p=e.get(["pointer","show"]),g=e.getModel("progress"),y=g.get("show"),m=e.getData(),_=m.mapDimension("value"),S=+e.get("min"),x=+e.get("max"),b=[S,x],w=[s,l];function T(M,D){var I=m.getItemModel(M),L=I.getModel("pointer"),P=Z(L.get("width"),o.r),k=Z(L.get("length"),o.r),R=e.get(["pointer","icon"]),O=L.get("offsetCenter"),E=Z(O[0],o.r),z=Z(O[1],o.r),V=L.get("keepAspect"),F;return R?F=ie(R,E-P/2,z-k,P,k,null,V):F=new e8({shape:{angle:-Math.PI/2,width:P,r:k,x:E,y:z}}),F.rotation=-(D+Math.PI/2),F.x=o.cx,F.y=o.cy,F}function C(M,D){var I=g.get("roundCap"),L=I?yh:ke,P=g.get("overlap"),k=P?g.get("width"):f/m.count(),R=P?o.r-k:o.r-(M+1)*k,O=P?o.r:o.r-M*k,E=new L({shape:{startAngle:s,endAngle:D,cx:o.cx,cy:o.cy,clockwise:u,r0:R,r:O}});return P&&(E.z2=kt(m.get(_,M),[S,x],[100,0],!0)),E}(y||p)&&(m.diff(h).add(function(M){var D=m.get(_,M);if(p){var I=T(M,s);Zt(I,{rotation:-((isNaN(+D)?w[0]:kt(D,b,w,!0))+Math.PI/2)},e),v.add(I),m.setItemGraphicEl(M,I)}if(y){var L=C(M,s),P=g.get("clip");Zt(L,{shape:{endAngle:kt(D,b,w,P)}},e),v.add(L),Eg(e.seriesIndex,m.dataType,M,L),d[M]=L}}).update(function(M,D){var I=m.get(_,M);if(p){var L=h.getItemGraphicEl(D),P=L?L.rotation:s,k=T(M,P);k.rotation=P,It(k,{rotation:-((isNaN(+I)?w[0]:kt(I,b,w,!0))+Math.PI/2)},e),v.add(k),m.setItemGraphicEl(M,k)}if(y){var R=c[D],O=R?R.shape.endAngle:s,E=C(M,O),z=g.get("clip");It(E,{shape:{endAngle:kt(I,b,w,z)}},e),v.add(E),Eg(e.seriesIndex,m.dataType,M,E),d[M]=E}}).execute(),m.each(function(M){var D=m.getItemModel(M),I=D.getModel("emphasis"),L=I.get("focus"),P=I.get("blurScope"),k=I.get("disabled");if(p){var R=m.getItemGraphicEl(M),O=m.getItemVisual(M,"style"),E=O.fill;if(R instanceof xe){var z=R.style;R.useStyle(G({image:z.image,x:z.x,y:z.y,width:z.width,height:z.height},O))}else R.useStyle(O),R.type!=="pointer"&&R.setColor(E);R.setStyle(D.getModel(["pointer","itemStyle"]).getItemStyle()),R.style.fill==="auto"&&R.setStyle("fill",i(kt(m.get(_,M),b,[0,1],!0))),R.z2EmphasisLift=0,he(R,D),$t(R,L,P,k)}if(y){var V=d[M];V.useStyle(m.getItemVisual(M,"style")),V.setStyle(D.getModel(["progress","itemStyle"]).getItemStyle()),V.z2EmphasisLift=0,he(V,D),$t(V,L,P,k)}}),this._progressEls=d)},t.prototype._renderAnchor=function(e,a){var n=e.getModel("anchor"),i=n.get("show");if(i){var o=n.get("size"),s=n.get("icon"),l=n.get("offsetCenter"),u=n.get("keepAspect"),f=ie(s,a.cx-o/2+Z(l[0],a.r),a.cy-o/2+Z(l[1],a.r),o,o,null,u);f.z2=n.get("showAbove")?1:0,f.setStyle(n.getModel("itemStyle").getItemStyle()),this.group.add(f)}},t.prototype._renderTitleAndDetail=function(e,a,n,i,o){var s=this,l=e.getData(),u=l.mapDimension("value"),f=+e.get("min"),v=+e.get("max"),h=new rt,c=[],d=[],p=e.isAnimationEnabled(),g=e.get(["pointer","showAbove"]);l.diff(this._data).add(function(y){c[y]=new Mt({silent:!0}),d[y]=new Mt({silent:!0})}).update(function(y,m){c[y]=s._titleEls[m],d[y]=s._detailEls[m]}).execute(),l.each(function(y){var m=l.getItemModel(y),_=l.get(u,y),S=new rt,x=i(kt(_,[f,v],[0,1],!0)),b=m.getModel("title");if(b.get("show")){var w=b.get("offsetCenter"),T=o.cx+Z(w[0],o.r),C=o.cy+Z(w[1],o.r),M=c[y];M.attr({z2:g?0:2,style:Ft(b,{x:T,y:C,text:l.getName(y),align:"center",verticalAlign:"middle"},{inheritColor:x})}),S.add(M)}var D=m.getModel("detail");if(D.get("show")){var I=D.get("offsetCenter"),L=o.cx+Z(I[0],o.r),P=o.cy+Z(I[1],o.r),k=Z(D.get("width"),o.r),R=Z(D.get("height"),o.r),O=e.get(["progress","show"])?l.getItemVisual(y,"style").fill:x,M=d[y],E=D.get("formatter");M.attr({z2:g?0:2,style:Ft(D,{x:L,y:P,text:Yf(_,E),width:isNaN(k)?null:k,height:isNaN(R)?null:R,align:"center",verticalAlign:"middle"},{inheritColor:O})}),DD(M,{normal:D},_,function(V){return Yf(V,E)}),p&&LD(M,y,l,e,{getFormattedLabel:function(V,F,H,Y,j,vt){return Yf(vt?vt.interpolatedValue:_,E)}}),S.add(M)}h.add(S)}),this.group.add(h),this._titleEls=c,this._detailEls=d},t.type="gauge",t})(Nt),n8=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.visualStyleAccessPath="itemStyle",e}return t.prototype.getInitialData=function(e,a){return zs(this,["value"])},t.type="series.gauge",t.defaultOption={z:2,colorBy:"data",center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,roundCap:!1,lineStyle:{color:[[1,B.color.neutral10]],width:10}},progress:{show:!1,overlap:!0,width:10,roundCap:!1,clip:!0},splitLine:{show:!0,length:10,distance:10,lineStyle:{color:B.color.axisTick,width:3,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:6,distance:10,lineStyle:{color:B.color.axisTickMinor,width:1,type:"solid"}},axisLabel:{show:!0,distance:15,color:B.color.axisLabel,fontSize:12,rotate:0},pointer:{icon:null,offsetCenter:[0,0],show:!0,showAbove:!0,length:"60%",width:6,keepAspect:!1},anchor:{show:!1,showAbove:!1,size:6,icon:"circle",offsetCenter:[0,0],keepAspect:!1,itemStyle:{color:B.color.neutral00,borderWidth:0,borderColor:B.color.theme[0]}},title:{show:!0,offsetCenter:[0,"20%"],color:B.color.secondary,fontSize:16,valueAnimation:!1},detail:{show:!0,backgroundColor:B.color.transparent,borderWidth:0,borderColor:B.color.neutral40,width:100,height:null,padding:[5,10],offsetCenter:[0,"40%"],color:B.color.primary,fontSize:30,fontWeight:"bold",lineHeight:30,valueAnimation:!1}},t})(zt);function i8(r){r.registerChartView(a8),r.registerSeriesModel(n8)}var o8=["itemStyle","opacity"],s8=(function(r){N(t,r);function t(e,a){var n=r.call(this)||this,i=n,o=new Ae,s=new Mt;return i.setTextContent(s),n.setTextGuideLine(o),n.updateData(e,a,!0),n}return t.prototype.updateData=function(e,a,n){var i=this,o=e.hostModel,s=e.getItemModel(a),l=e.getItemLayout(a),u=s.getModel("emphasis"),f=s.get(o8);f=f??1,n||Ir(i),i.useStyle(e.getItemVisual(a,"style")),i.style.lineJoin="round",n?(i.setShape({points:l.points}),i.style.opacity=0,Zt(i,{style:{opacity:f}},o,a)):It(i,{style:{opacity:f},shape:{points:l.points}},o,a),he(i,s),this._updateLabel(e,a),$t(this,u.get("focus"),u.get("blurScope"),u.get("disabled"))},t.prototype._updateLabel=function(e,a){var n=this,i=this.getTextGuideLine(),o=n.getTextContent(),s=e.hostModel,l=e.getItemModel(a),u=e.getItemLayout(a),f=u.label,v=e.getItemVisual(a,"style"),h=v.fill;Se(o,ce(l),{labelFetcher:e.hostModel,labelDataIndex:a,defaultOpacity:v.opacity,defaultText:e.getName(a)},{normal:{align:f.textAlign,verticalAlign:f.verticalAlign}});var c=l.getModel("label"),d=c.get("color"),p=d==="inherit"?h:null;n.setTextConfig({local:!0,inside:!!f.inside,insideStroke:p,outsideFill:p});var g=f.linePoints;i.setShape({points:g}),n.textGuideLineConfig={anchor:g?new st(g[0][0],g[0][1]):null},It(o,{style:{x:f.x,y:f.y}},s,a),o.attr({rotation:f.rotation,originX:f.x,originY:f.y,z2:10}),z0(n,V0(l),{stroke:h})},t})(Ee),l8=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.ignoreLabelLineUpdate=!0,e}return t.prototype.render=function(e,a,n){var i=e.getData(),o=this._data,s=this.group;i.diff(o).add(function(l){var u=new s8(i,l);i.setItemGraphicEl(l,u),s.add(u)}).update(function(l,u){var f=o.getItemGraphicEl(u);f.updateData(i,l),s.add(f),i.setItemGraphicEl(l,f)}).remove(function(l){var u=o.getItemGraphicEl(l);Ua(u,e,l)}).execute(),this._data=i},t.prototype.remove=function(){this.group.removeAll(),this._data=null},t.prototype.dispose=function(){},t.type="funnel",t})(Nt),u8=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e){r.prototype.init.apply(this,arguments),this.legendVisualProvider=new Vs($(this.getData,this),$(this.getRawData,this)),this._defaultLabelLine(e)},t.prototype.getInitialData=function(e,a){return zs(this,{coordDimensions:["value"],encodeDefaulter:pt(h0,this)})},t.prototype._defaultLabelLine=function(e){Yi(e,"labelLine",["show"]);var a=e.labelLine,n=e.emphasis.labelLine;a.show=a.show&&e.label.show,n.show=n.show&&e.emphasis.label.show},t.prototype.getDataParams=function(e){var a=this.getData(),n=r.prototype.getDataParams.call(this,e),i=a.mapDimension("value"),o=a.getSum(i);return n.percent=o?+(a.get(i,e)/o*100).toFixed(2):0,n.$vars.push("percent"),n},t.type="series.funnel",t.defaultOption={coordinateSystemUsage:"box",z:2,legendHoverLink:!0,colorBy:"data",left:80,top:60,right:80,bottom:65,minSize:"0%",maxSize:"100%",sort:"descending",orient:"vertical",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1}},itemStyle:{borderColor:B.color.neutral00,borderWidth:1},emphasis:{label:{show:!0}},select:{itemStyle:{borderColor:B.color.primary}}},t})(zt);function f8(r,t){for(var e=r.mapDimension("value"),a=r.mapArray(e,function(l){return l}),n=[],i=t==="ascending",o=0,s=r.count();oA8)return;var n=this._model.coordinateSystem.getSlidedAxisExpandWindow([r.offsetX,r.offsetY]);n.behavior!=="none"&&this._dispatchExpand({axisExpandWindow:n.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(r){if(!(this._mouseDownPoint||!gp(this,"mousemove"))){var t=this._model,e=t.coordinateSystem.getSlidedAxisExpandWindow([r.offsetX,r.offsetY]),a=e.behavior;a==="jump"&&this._throttledDispatchExpand.debounceNextCall(t.get("axisExpandDebounce")),this._throttledDispatchExpand(a==="none"?null:{axisExpandWindow:e.axisExpandWindow,animation:a==="jump"?null:{duration:0}})}}};function gp(r,t){var e=r._model;return e.get("axisExpandable")&&e.get("axisExpandTriggerOn")===t}var L8=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(){r.prototype.init.apply(this,arguments),this.mergeOption({})},t.prototype.mergeOption=function(e){var a=this.option;e&&mt(a,e,!0),this._initDimensions()},t.prototype.contains=function(e,a){var n=e.get("parallelIndex");return n!=null&&a.getComponent("parallel",n)===this},t.prototype.setAxisExpand=function(e){A(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],function(a){e.hasOwnProperty(a)&&(this.option[a]=e[a])},this)},t.prototype._initDimensions=function(){var e=this.dimensions=[],a=this.parallelAxisIndex=[],n=Rt(this.ecModel.queryComponents({mainType:"parallelAxis"}),function(i){return(i.get("parallelIndex")||0)===this.componentIndex},this);A(n,function(i){e.push("dim"+i.get("dim")),a.push(i.componentIndex)})},t.type="parallel",t.dependencies=["parallelAxis"],t.layoutMode="box",t.defaultOption={z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},t})(xt),I8=(function(r){N(t,r);function t(e,a,n,i,o){var s=r.call(this,e,a,n)||this;return s.type=i||"value",s.axisIndex=o,s}return t.prototype.isHorizontal=function(){return this.coordinateSystem.getModel().get("layout")!=="horizontal"},t})(kr);function zn(r,t,e,a,n,i){r=r||0;var o=e[1]-e[0];if(n!=null&&(n=Po(n,[0,o])),i!=null&&(i=Math.max(i,n??0)),a==="all"){var s=Math.abs(t[1]-t[0]);s=Po(s,[0,o]),n=i=Po(s,[n,i]),a=0}t[0]=Po(t[0],e),t[1]=Po(t[1],e);var l=yp(t,a);t[a]+=r;var u=n||0,f=e.slice();l.sign<0?f[0]+=u:f[1]-=u,t[a]=Po(t[a],f);var v;return v=yp(t,a),n!=null&&(v.sign!==l.sign||v.spani&&(t[1-a]=t[a]+v.sign*i),t}function yp(r,t){var e=r[t]-r[1-t];return{span:Math.abs(e),sign:e>0?-1:e<0?1:t?-1:1}}function Po(r,t){return Math.min(t[1]!=null?t[1]:1/0,Math.max(t[0]!=null?t[0]:-1/0,r))}var mp=A,AP=Math.min,MP=Math.max,Vw=Math.floor,P8=Math.ceil,Gw=ae,R8=Math.PI,k8=(function(){function r(t,e,a){this.type="parallel",this._axesMap=K(),this._axesLayout={},this.dimensions=t.dimensions,this._model=t,this._init(t,e,a)}return r.prototype._init=function(t,e,a){var n=t.dimensions,i=t.parallelAxisIndex;mp(n,function(o,s){var l=i[s],u=e.getComponent("parallelAxis",l),f=this._axesMap.set(o,new I8(o,Fu(u),[0,0],u.get("type"),l)),v=f.type==="category";f.onBand=v&&u.get("boundaryGap"),f.inverse=u.get("inverse"),u.axis=f,f.model=u,f.coordinateSystem=u.coordinateSystem=this},this)},r.prototype.update=function(t,e){this._updateAxesFromSeries(this._model,t)},r.prototype.containPoint=function(t){var e=this._makeLayoutInfo(),a=e.axisBase,n=e.layoutBase,i=e.pixelDimIndex,o=t[1-i],s=t[i];return o>=a&&o<=a+e.axisLength&&s>=n&&s<=n+e.layoutLength},r.prototype.getModel=function(){return this._model},r.prototype._updateAxesFromSeries=function(t,e){e.eachSeries(function(a){if(t.contains(a,e)){var n=a.getData();mp(this.dimensions,function(i){var o=this._axesMap.get(i);o.scale.unionExtentFromData(n,n.mapDimension(i)),Ji(o.scale,o.model)},this)}},this)},r.prototype.resize=function(t,e){var a=de(t,e).refContainer;this._rect=Xt(t.getBoxLayoutParams(),a),this._layoutAxes()},r.prototype.getRect=function(){return this._rect},r.prototype._makeLayoutInfo=function(){var t=this._model,e=this._rect,a=["x","y"],n=["width","height"],i=t.get("layout"),o=i==="horizontal"?0:1,s=e[n[o]],l=[0,s],u=this.dimensions.length,f=Zf(t.get("axisExpandWidth"),l),v=Zf(t.get("axisExpandCount")||0,[0,u]),h=t.get("axisExpandable")&&u>3&&u>v&&v>1&&f>0&&s>0,c=t.get("axisExpandWindow"),d;if(c)d=Zf(c[1]-c[0],l),c[1]=c[0]+d;else{d=Zf(f*(v-1),l);var p=t.get("axisExpandCenter")||Vw(u/2);c=[f*p-d/2],c[1]=c[0]+d}var g=(s-d)/(u-v);g<3&&(g=0);var y=[Vw(Gw(c[0]/f,1))+1,P8(Gw(c[1]/f,1))-1],m=g/f*c[0];return{layout:i,pixelDimIndex:o,layoutBase:e[a[o]],layoutLength:s,axisBase:e[a[1-o]],axisLength:e[n[1-o]],axisExpandable:h,axisExpandWidth:f,axisCollapseWidth:g,axisExpandWindow:c,axisCount:u,winInnerIndices:y,axisExpandWindow0Pos:m}},r.prototype._layoutAxes=function(){var t=this._rect,e=this._axesMap,a=this.dimensions,n=this._makeLayoutInfo(),i=n.layout;e.each(function(o){var s=[0,n.axisLength],l=o.inverse?1:0;o.setExtent(s[l],s[1-l])}),mp(a,function(o,s){var l=(n.axisExpandable?O8:E8)(s,n),u={horizontal:{x:l.position,y:n.axisLength},vertical:{x:0,y:l.position}},f={horizontal:R8/2,vertical:0},v=[u[i].x+t.x,u[i].y+t.y],h=f[i],c=me();rn(c,c,h),Yr(c,c,v),this._axesLayout[o]={position:v,rotation:h,transform:c,axisNameAvailableWidth:l.axisNameAvailableWidth,axisLabelShow:l.axisLabelShow,nameTruncateMaxWidth:l.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}},this)},r.prototype.getAxis=function(t){return this._axesMap.get(t)},r.prototype.dataToPoint=function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},r.prototype.eachActiveState=function(t,e,a,n){a==null&&(a=0),n==null&&(n=t.count());var i=this._axesMap,o=this.dimensions,s=[],l=[];A(o,function(g){s.push(t.mapDimension(g)),l.push(i.get(g).model)});for(var u=this.hasAxisBrushed(),f=a;fi*(1-v[0])?(u="jump",l=s-i*(1-v[2])):(l=s-i*v[1])>=0&&(l=s-i*(1-v[1]))<=0&&(l=0),l*=e.axisExpandWidth/f,l?zn(l,n,o,"all"):u="none";else{var c=n[1]-n[0],d=o[1]*s/c;n=[MP(0,d-c/2)],n[1]=AP(o[1],n[0]+c),n[0]=n[1]-c}return{axisExpandWindow:n,behavior:u}},r})();function Zf(r,t){return AP(MP(r,t[0]),t[1])}function E8(r,t){var e=t.layoutLength/(t.axisCount-1);return{position:e*r,axisNameAvailableWidth:e,axisLabelShow:!0}}function O8(r,t){var e=t.layoutLength,a=t.axisExpandWidth,n=t.axisCount,i=t.axisCollapseWidth,o=t.winInnerIndices,s,l=i,u=!1,f;return r=0;n--)lr(a[n])},t.prototype.getActiveState=function(e){var a=this.activeIntervals;if(!a.length)return"normal";if(e==null||isNaN(+e))return"inactive";if(a.length===1){var n=a[0];if(n[0]<=e&&e<=n[1])return"active"}else for(var i=0,o=a.length;iG8}function kP(r){var t=r.length-1;return t<0&&(t=0),[r[0],r[t]]}function EP(r,t,e,a){var n=new rt;return n.add(new St({name:"main",style:g_(e),silent:!0,draggable:!0,cursor:"move",drift:pt(Ww,r,t,n,["n","s","w","e"]),ondragend:pt(to,t,{isEnd:!0})})),A(a,function(i){n.add(new St({name:i.join(""),style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:pt(Ww,r,t,n,i),ondragend:pt(to,t,{isEnd:!0})}))}),n}function OP(r,t,e,a){var n=a.brushStyle.lineWidth||0,i=gs(n,F8),o=e[0][0],s=e[1][0],l=o-n/2,u=s-n/2,f=e[0][1],v=e[1][1],h=f-i+n/2,c=v-i+n/2,d=f-o,p=v-s,g=d+n,y=p+n;Ia(r,t,"main",o,s,d,p),a.transformable&&(Ia(r,t,"w",l,u,i,y),Ia(r,t,"e",h,u,i,y),Ia(r,t,"n",l,u,g,i),Ia(r,t,"s",l,c,g,i),Ia(r,t,"nw",l,u,i,i),Ia(r,t,"ne",h,u,i,i),Ia(r,t,"sw",l,c,i,i),Ia(r,t,"se",h,c,i,i))}function Fy(r,t){var e=t.__brushOption,a=e.transformable,n=t.childAt(0);n.useStyle(g_(e)),n.attr({silent:!a,cursor:a?"move":"default"}),A([["w"],["e"],["n"],["s"],["s","e"],["s","w"],["n","e"],["n","w"]],function(i){var o=t.childOfName(i.join("")),s=i.length===1?Hy(r,i[0]):X8(r,i);o&&o.attr({silent:!a,invisible:!a,cursor:a?W8[s]+"-resize":null})})}function Ia(r,t,e,a,n,i,o){var s=t.childOfName(e);s&&s.setShape(q8(y_(r,t,[[a,n],[a+i,n+o]])))}function g_(r){return nt({strokeNoScale:!0},r.brushStyle)}function NP(r,t,e,a){var n=[wu(r,e),wu(t,a)],i=[gs(r,e),gs(t,a)];return[[n[0],i[0]],[n[1],i[1]]]}function Z8(r){return Pn(r.group)}function Hy(r,t){var e={w:"left",e:"right",n:"top",s:"bottom"},a={left:"w",right:"e",top:"n",bottom:"s"},n=ic(e[t],Z8(r));return a[n]}function X8(r,t){var e=[Hy(r,t[0]),Hy(r,t[1])];return(e[0]==="e"||e[0]==="w")&&e.reverse(),e.join("")}function Ww(r,t,e,a,n,i){var o=e.__brushOption,s=r.toRectRange(o.range),l=BP(t,n,i);A(a,function(u){var f=H8[u];s[f[0]][f[1]]+=l[f[0]]}),o.range=r.fromRectRange(NP(s[0][0],s[1][0],s[0][1],s[1][1])),c_(t,e),to(t,{isEnd:!1})}function $8(r,t,e,a){var n=t.__brushOption.range,i=BP(r,e,a);A(n,function(o){o[0]+=i[0],o[1]+=i[1]}),c_(r,t),to(r,{isEnd:!1})}function BP(r,t,e){var a=r.group,n=a.transformCoordToLocal(t,e),i=a.transformCoordToLocal(0,0);return[n[0]-i[0],n[1]-i[1]]}function y_(r,t,e){var a=RP(r,t);return a&&a!==Qi?a.clipPath(e,r._transform):et(e)}function q8(r){var t=wu(r[0][0],r[1][0]),e=wu(r[0][1],r[1][1]),a=gs(r[0][0],r[1][0]),n=gs(r[0][1],r[1][1]);return{x:t,y:e,width:a-t,height:n-e}}function j8(r,t,e){if(!(!r._brushType||J8(r,t.offsetX,t.offsetY))){var a=r._zr,n=r._covers,i=p_(r,t,e);if(!r._dragging)for(var o=0;oa.getWidth()||e<0||e>a.getHeight()}var wc={lineX:Zw(0),lineY:Zw(1),rect:{createCover:function(r,t){function e(a){return a}return EP({toRectRange:e,fromRectRange:e},r,t,[["w"],["e"],["n"],["s"],["s","e"],["s","w"],["n","e"],["n","w"]])},getCreatingRange:function(r){var t=kP(r);return NP(t[1][0],t[1][1],t[0][0],t[0][1])},updateCoverShape:function(r,t,e,a){OP(r,t,e,a)},updateCommon:Fy,contain:Uy},polygon:{createCover:function(r,t){var e=new rt;return e.add(new Ae({name:"main",style:g_(t),silent:!0})),e},getCreatingRange:function(r){return r},endCreating:function(r,t){t.remove(t.childAt(0)),t.add(new Ee({name:"main",draggable:!0,drift:pt($8,r,t),ondragend:pt(to,r,{isEnd:!0})}))},updateCoverShape:function(r,t,e,a){t.childAt(0).setShape({points:y_(r,t,e)})},updateCommon:Fy,contain:Uy}};function Zw(r){return{createCover:function(t,e){return EP({toRectRange:function(a){var n=[a,[0,100]];return r&&n.reverse(),n},fromRectRange:function(a){return a[r]}},t,e,[[["w"],["e"]],[["n"],["s"]]][r])},getCreatingRange:function(t){var e=kP(t),a=wu(e[0][r],e[1][r]),n=gs(e[0][r],e[1][r]);return[a,n]},updateCoverShape:function(t,e,a,n){var i,o=RP(t,e);if(o!==Qi&&o.getLinearBrushOtherExtent)i=o.getLinearBrushOtherExtent(r);else{var s=t._zr;i=[0,[s.getWidth(),s.getHeight()][1-r]]}var l=[a,i];r&&l.reverse(),OP(t,e,l,n)},updateCommon:Fy,contain:Uy}}function VP(r){return r=m_(r),function(t){return Xm(t,r)}}function GP(r,t){return r=m_(r),function(e){var a=t??e,n=a?r.width:r.height,i=a?r.x:r.y;return[i,i+(n||0)]}}function FP(r,t,e){var a=m_(r);return function(n,i){return a.contain(i[0],i[1])&&!ZI(n,t,e)}}function m_(r){return lt.create(r)}var Q8=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e,a){r.prototype.init.apply(this,arguments),(this._brushController=new h_(a.getZr())).on("brush",$(this._onBrush,this))},t.prototype.render=function(e,a,n,i){if(!t6(e,a,i)){this.axisModel=e,this.api=n,this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new rt,this.group.add(this._axisGroup),!!e.get("show")){var s=r6(e,a),l=s.coordinateSystem,u=e.getAreaSelectStyle(),f=u.width,v=e.axis.dim,h=l.getAxisLayout(v),c=G({strokeContainThreshold:f},h),d=new Ye(e,n,c);d.build(),this._axisGroup.add(d.group),this._refreshBrushController(c,u,e,s,f,n),Bu(o,this._axisGroup,e)}}},t.prototype._refreshBrushController=function(e,a,n,i,o,s){var l=n.axis.getExtent(),u=l[1]-l[0],f=Math.min(30,Math.abs(u)*.1),v=lt.create({x:l[0],y:-o/2,width:u,height:o});v.x-=f,v.width+=2*f,this._brushController.mount({enableGlobalPan:!0,rotation:e.rotation,x:e.position[0],y:e.position[1]}).setPanels([{panelId:"pl",clipPath:VP(v),isTargetByCursor:FP(v,s,i),getLinearBrushOtherExtent:GP(v,0)}]).enableBrush({brushType:"lineX",brushStyle:a,removeOnClick:!0}).updateCovers(e6(n))},t.prototype._onBrush=function(e){var a=e.areas,n=this.axisModel,i=n.axis,o=U(a,function(s){return[i.coordToData(s.range[0],!0),i.coordToData(s.range[1],!0)]});(!n.option.realtime===e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"axisAreaSelect",parallelAxisId:n.id,intervals:o})},t.prototype.dispose=function(){this._brushController.dispose()},t.type="parallelAxis",t})(Wt);function t6(r,t,e){return e&&e.type==="axisAreaSelect"&&t.findComponents({mainType:"parallelAxis",query:e})[0]===r}function e6(r){var t=r.axis;return U(r.activeIntervals,function(e){return{brushType:"lineX",panelId:"pl",range:[t.dataToCoord(e[0],!0),t.dataToCoord(e[1],!0)]}})}function r6(r,t){return t.getComponent("parallel",r.get("parallelIndex"))}var a6={type:"axisAreaSelect",event:"axisAreaSelected"};function n6(r){r.registerAction(a6,function(t,e){e.eachComponent({mainType:"parallelAxis",query:t},function(a){a.axis.model.setActiveIntervals(t.intervals)})}),r.registerAction("parallelAxisExpand",function(t,e){e.eachComponent({mainType:"parallel",query:t},function(a){a.setAxisExpand(t)})})}var i6={type:"value",areaSelectStyle:{width:20,borderWidth:1,borderColor:"rgba(160,197,232)",color:"rgba(160,197,232)",opacity:.3},realtime:!0,z:10};function HP(r){r.registerComponentView(M8),r.registerComponentModel(L8),r.registerCoordinateSystem("parallel",B8),r.registerPreprocessor(w8),r.registerComponentModel(Vy),r.registerComponentView(Q8),ds(r,"parallel",Vy,i6),n6(r)}function o6(r){_t(HP),r.registerChartView(p8),r.registerSeriesModel(m8),r.registerVisual(r.PRIORITY.VISUAL.BRUSH,b8)}var s6=(function(){function r(){this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.cpx1=0,this.cpy1=0,this.cpx2=0,this.cpy2=0,this.extent=0}return r})(),l6=(function(r){N(t,r);function t(e){return r.call(this,e)||this}return t.prototype.getDefaultShape=function(){return new s6},t.prototype.buildPath=function(e,a){var n=a.extent;e.moveTo(a.x1,a.y1),e.bezierCurveTo(a.cpx1,a.cpy1,a.cpx2,a.cpy2,a.x2,a.y2),a.orient==="vertical"?(e.lineTo(a.x2+n,a.y2),e.bezierCurveTo(a.cpx2+n,a.cpy2,a.cpx1+n,a.cpy1,a.x1+n,a.y1)):(e.lineTo(a.x2,a.y2+n),e.bezierCurveTo(a.cpx2,a.cpy2+n,a.cpx1,a.cpy1+n,a.x1,a.y1+n)),e.closePath()},t.prototype.highlight=function(){ja(this)},t.prototype.downplay=function(){Ka(this)},t})(Tt),u6=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e._mainGroup=new rt,e._focusAdjacencyDisabled=!1,e}return t.prototype.init=function(e,a){this._controller=new lo(a.getZr()),this._controllerHost={target:this.group},this.group.add(this._mainGroup)},t.prototype.render=function(e,a,n){var i=this,o=e.getGraph(),s=this._mainGroup,l=e.layoutInfo,u=l.width,f=l.height,v=e.getData(),h=e.getData("edge"),c=e.get("orient");this._model=e,s.removeAll(),s.x=l.x,s.y=l.y,this._updateViewCoordSys(e,n),XI(e,n,s,this._controller,this._controllerHost,null),o.eachEdge(function(d){var p=new l6,g=ft(p);g.dataIndex=d.dataIndex,g.seriesIndex=e.seriesIndex,g.dataType="edge";var y=d.getModel(),m=y.getModel("lineStyle"),_=m.get("curveness"),S=d.node1.getLayout(),x=d.node1.getModel(),b=x.get("localX"),w=x.get("localY"),T=d.node2.getLayout(),C=d.node2.getModel(),M=C.get("localX"),D=C.get("localY"),I=d.getLayout(),L,P,k,R,O,E,z,V;p.shape.extent=Math.max(1,I.dy),p.shape.orient=c,c==="vertical"?(L=(b!=null?b*u:S.x)+I.sy,P=(w!=null?w*f:S.y)+S.dy,k=(M!=null?M*u:T.x)+I.ty,R=D!=null?D*f:T.y,O=L,E=P*(1-_)+R*_,z=k,V=P*_+R*(1-_)):(L=(b!=null?b*u:S.x)+S.dx,P=(w!=null?w*f:S.y)+I.sy,k=M!=null?M*u:T.x,R=(D!=null?D*f:T.y)+I.ty,O=L*(1-_)+k*_,E=P,z=L*_+k*(1-_),V=R),p.setShape({x1:L,y1:P,x2:k,y2:R,cpx1:O,cpy1:E,cpx2:z,cpy2:V}),p.useStyle(m.getItemStyle()),Xw(p.style,c,d);var F=""+y.get("value"),H=ce(y,"edgeLabel");Se(p,H,{labelFetcher:{getFormattedLabel:function(vt,Pt,Bt,ht,at,gt){return e.getFormattedLabel(vt,Pt,"edge",ht,Qe(at,H.normal&&H.normal.get("formatter"),F),gt)}},labelDataIndex:d.dataIndex,defaultText:F}),p.setTextConfig({position:"inside"});var Y=y.getModel("emphasis");he(p,y,"lineStyle",function(vt){var Pt=vt.getItemStyle();return Xw(Pt,c,d),Pt}),s.add(p),h.setItemGraphicEl(d.dataIndex,p);var j=Y.get("focus");$t(p,j==="adjacency"?d.getAdjacentDataIndices():j==="trajectory"?d.getTrajectoryDataIndices():j,Y.get("blurScope"),Y.get("disabled"))}),o.eachNode(function(d){var p=d.getLayout(),g=d.getModel(),y=g.get("localX"),m=g.get("localY"),_=g.getModel("emphasis"),S=g.get(["itemStyle","borderRadius"])||0,x=new St({shape:{x:y!=null?y*u:p.x,y:m!=null?m*f:p.y,width:p.dx,height:p.dy,r:S},style:g.getModel("itemStyle").getItemStyle(),z2:10});Se(x,ce(g),{labelFetcher:{getFormattedLabel:function(w,T){return e.getFormattedLabel(w,T,"node")}},labelDataIndex:d.dataIndex,defaultText:d.id}),x.disableLabelAnimation=!0,x.setStyle("fill",d.getVisual("color")),x.setStyle("decal",d.getVisual("style").decal),he(x,g),s.add(x),v.setItemGraphicEl(d.dataIndex,x),ft(x).dataType="node";var b=_.get("focus");$t(x,b==="adjacency"?d.getAdjacentDataIndices():b==="trajectory"?d.getTrajectoryDataIndices():b,_.get("blurScope"),_.get("disabled"))}),v.eachItemGraphicEl(function(d,p){var g=v.getItemModel(p);g.get("draggable")&&(d.drift=function(y,m){i._focusAdjacencyDisabled=!0,this.shape.x+=y,this.shape.y+=m,this.dirty(),n.dispatchAction({type:"dragNode",seriesId:e.id,dataIndex:v.getRawIndex(p),localX:this.shape.x/u,localY:this.shape.y/f})},d.ondragend=function(){i._focusAdjacencyDisabled=!1},d.draggable=!0,d.cursor="move")}),!this._data&&e.isAnimationEnabled()&&s.setClipPath(f6(s.getBoundingRect(),e,function(){s.removeClipPath()})),this._data=e.getData()},t.prototype.dispose=function(){this._controller&&this._controller.dispose(),this._controllerHost=null},t.prototype._updateViewCoordSys=function(e,a){var n=e.layoutInfo,i=n.width,o=n.height,s=e.coordinateSystem=new uo(null,{api:a,ecModel:e.ecModel});s.zoomLimit=e.get("scaleLimit"),s.setBoundingRect(0,0,i,o),s.setCenter(e.get("center")),s.setZoom(e.get("zoom")),this._controllerHost.target.attr({x:s.x,y:s.y,scaleX:s.scaleX,scaleY:s.scaleY})},t.type="sankey",t})(Nt);function Xw(r,t,e){switch(r.fill){case"source":r.fill=e.node1.getVisual("color"),r.decal=e.node1.getVisual("style").decal;break;case"target":r.fill=e.node2.getVisual("color"),r.decal=e.node2.getVisual("style").decal;break;case"gradient":var a=e.node1.getVisual("color"),n=e.node2.getVisual("color");X(a)&&X(n)&&(r.fill=new ro(0,0,+(t==="horizontal"),+(t==="vertical"),[{color:a,offset:0},{color:n,offset:1}]))}}function f6(r,t,e){var a=new St({shape:{x:r.x-10,y:r.y-10,width:0,height:r.height+20}});return Zt(a,{shape:{width:r.width+20}},t,e),a}var v6=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.getInitialData=function(e,a){var n=e.edges||e.links||[],i=e.data||e.nodes||[],o=e.levels||[];this.levelModels=[];for(var s=this.levelModels,l=0;l=0&&(s[o[l].depth]=new wt(o[l],this,a));var u=v_(i,n,this,!0,f);return u.data;function f(v,h){v.wrapMethod("getItemModel",function(c,d){var p=c.parentModel,g=p.getData().getItemLayout(d);if(g){var y=g.depth,m=p.levelModels[y];m&&(c.parentModel=m)}return c}),h.wrapMethod("getItemModel",function(c,d){var p=c.parentModel,g=p.getGraph().getEdgeByIndex(d),y=g.node1.getLayout();if(y){var m=y.depth,_=p.levelModels[m];_&&(c.parentModel=_)}return c})}},t.prototype.setNodePosition=function(e,a){var n=this.option.data||this.option.nodes,i=n[e];i.localX=a[0],i.localY=a[1]},t.prototype.setCenter=function(e){this.option.center=e},t.prototype.setZoom=function(e){this.option.zoom=e},t.prototype.getGraph=function(){return this.getData().graph},t.prototype.getEdgeData=function(){return this.getGraph().edgeData},t.prototype.formatTooltip=function(e,a,n){function i(c){return isNaN(c)||c==null}if(n==="edge"){var o=this.getDataParams(e,n),s=o.data,l=o.value,u=s.source+" -- "+s.target;return ue("nameValue",{name:u,value:l,noValue:i(l)})}else{var f=this.getGraph().getNodeByIndex(e),v=f.getLayout().value,h=this.getDataParams(e,n).data.name;return ue("nameValue",{name:h!=null?h+"":null,value:v,noValue:i(v)})}},t.prototype.optionUpdated=function(){},t.prototype.getDataParams=function(e,a){var n=r.prototype.getDataParams.call(this,e,a);if(n.value==null&&a==="node"){var i=this.getGraph().getNodeByIndex(e),o=i.getLayout().value;n.value=o}return n},t.type="series.sankey",t.layoutMode="box",t.defaultOption={z:2,coordinateSystemUsage:"box",left:"5%",top:"5%",right:"20%",bottom:"5%",orient:"horizontal",nodeWidth:20,nodeGap:8,draggable:!0,layoutIterations:32,roam:!1,roamTrigger:"global",center:null,zoom:1,label:{show:!0,position:"right",fontSize:12},edgeLabel:{show:!1,fontSize:12},levels:[],nodeAlign:"justify",lineStyle:{color:B.color.neutral50,opacity:.2,curveness:.5},emphasis:{label:{show:!0},lineStyle:{opacity:.5}},select:{itemStyle:{borderColor:B.color.primary}},animationEasing:"linear",animationDuration:1e3},t})(zt);function h6(r,t){r.eachSeriesByType("sankey",function(e){var a=e.get("nodeWidth"),n=e.get("nodeGap"),i=de(e,t).refContainer,o=Xt(e.getBoxLayoutParams(),i);e.layoutInfo=o;var s=o.width,l=o.height,u=e.getGraph(),f=u.nodes,v=u.edges;d6(f);var h=Rt(f,function(g){return g.getLayout().value===0}),c=h.length!==0?0:e.get("layoutIterations"),d=e.get("orient"),p=e.get("nodeAlign");c6(f,v,a,n,s,l,c,d,p)})}function c6(r,t,e,a,n,i,o,s,l){p6(r,t,e,n,i,s,l),_6(r,t,i,n,a,o,s),D6(r,s)}function d6(r){A(r,function(t){var e=En(t.outEdges,Ch),a=En(t.inEdges,Ch),n=t.getValue()||0,i=Math.max(e,a,n);t.setLayout({value:i},!0)})}function p6(r,t,e,a,n,i,o){for(var s=[],l=[],u=[],f=[],v=0,h=0;h=0;y&&g.depth>c&&(c=g.depth),p.setLayout({depth:y?g.depth:v},!0),i==="vertical"?p.setLayout({dy:e},!0):p.setLayout({dx:e},!0);for(var m=0;mv-1?c:v-1;o&&o!=="left"&&g6(r,o,i,w);var T=i==="vertical"?(n-e)/w:(a-e)/w;m6(r,T,i)}function WP(r){var t=r.hostGraph.data.getRawDataItem(r.dataIndex);return t.depth!=null&&t.depth>=0}function g6(r,t,e,a){if(t==="right"){for(var n=[],i=r,o=0;i.length;){for(var s=0;s0;i--)l*=.99,b6(s,l,o),_p(s,n,e,a,o),M6(s,l,o),_p(s,n,e,a,o)}function S6(r,t){var e=[],a=t==="vertical"?"y":"x",n=Lg(r,function(i){return i.getLayout()[a]});return n.keys.sort(function(i,o){return i-o}),A(n.keys,function(i){e.push(n.buckets.get(i))}),e}function x6(r,t,e,a,n,i){var o=1/0;A(r,function(s){var l=s.length,u=0;A(s,function(v){u+=v.getLayout().value});var f=i==="vertical"?(a-(l-1)*n)/u:(e-(l-1)*n)/u;f0&&(s=l.getLayout()[i]+u,n==="vertical"?l.setLayout({x:s},!0):l.setLayout({y:s},!0)),f=l.getLayout()[i]+l.getLayout()[h]+t;var d=n==="vertical"?a:e;if(u=f-t-d,u>0){s=l.getLayout()[i]-u,n==="vertical"?l.setLayout({x:s},!0):l.setLayout({y:s},!0),f=s;for(var c=v-2;c>=0;--c)l=o[c],u=l.getLayout()[i]+l.getLayout()[h]+t-f,u>0&&(s=l.getLayout()[i]-u,n==="vertical"?l.setLayout({x:s},!0):l.setLayout({y:s},!0)),f=l.getLayout()[i]}})}function b6(r,t,e){A(r.slice().reverse(),function(a){A(a,function(n){if(n.outEdges.length){var i=En(n.outEdges,w6,e)/En(n.outEdges,Ch);if(isNaN(i)){var o=n.outEdges.length;i=o?En(n.outEdges,T6,e)/o:0}if(e==="vertical"){var s=n.getLayout().x+(i-Vn(n,e))*t;n.setLayout({x:s},!0)}else{var l=n.getLayout().y+(i-Vn(n,e))*t;n.setLayout({y:l},!0)}}})})}function w6(r,t){return Vn(r.node2,t)*r.getValue()}function T6(r,t){return Vn(r.node2,t)}function C6(r,t){return Vn(r.node1,t)*r.getValue()}function A6(r,t){return Vn(r.node1,t)}function Vn(r,t){return t==="vertical"?r.getLayout().x+r.getLayout().dx/2:r.getLayout().y+r.getLayout().dy/2}function Ch(r){return r.getValue()}function En(r,t,e){for(var a=0,n=r.length,i=-1;++io&&(o=l)}),A(a,function(s){var l=new _e({type:"color",mappingMethod:"linear",dataExtent:[i,o],visual:t.get("color")}),u=l.mapValueToVisual(s.getLayout().value),f=s.getModel().get(["itemStyle","color"]);f!=null?(s.setVisual("color",f),s.setVisual("style",{fill:f})):(s.setVisual("color",u),s.setVisual("style",{fill:u}))})}n.length&&A(n,function(s){var l=s.getModel().get("lineStyle");s.setVisual("style",l)})})}function I6(r){r.registerChartView(u6),r.registerSeriesModel(v6),r.registerLayout(h6),r.registerVisual(L6),r.registerAction({type:"dragNode",event:"dragnode",update:"update"},function(t,e){e.eachComponent({mainType:"series",subType:"sankey",query:t},function(a){a.setNodePosition(t.dataIndex,[t.localX,t.localY])})}),r.registerAction({type:"sankeyRoam",event:"sankeyRoam",update:"none"},function(t,e,a){e.eachComponent({mainType:"series",subType:"sankey",query:t},function(n){var i=n.coordinateSystem,o=_c(i,t,n.get("scaleLimit"));n.setCenter(o.center),n.setZoom(o.zoom)})})}var UP=(function(){function r(){}return r.prototype._hasEncodeRule=function(t){var e=this.getEncode();return e&&e.get(t)!=null},r.prototype.getInitialData=function(t,e){var a,n=e.getComponent("xAxis",this.get("xAxisIndex")),i=e.getComponent("yAxis",this.get("yAxisIndex")),o=n.get("type"),s=i.get("type"),l;o==="category"?(t.layout="horizontal",a=n.getOrdinalMeta(),l=!this._hasEncodeRule("x")):s==="category"?(t.layout="vertical",a=i.getOrdinalMeta(),l=!this._hasEncodeRule("y")):t.layout=t.layout||"horizontal";var u=["x","y"],f=t.layout==="horizontal"?0:1,v=this._baseAxisDim=u[f],h=u[1-f],c=[n,i],d=c[f].get("type"),p=c[1-f].get("type"),g=t.data;if(g&&l){var y=[];A(g,function(S,x){var b;W(S)?(b=S.slice(),S.unshift(x)):W(S.value)?(b=G({},S),b.value=b.value.slice(),S.value.unshift(x)):b=S,y.push(b)}),t.data=y}var m=this.defaultValueDimensions,_=[{name:v,type:lh(d),ordinalMeta:a,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:h,type:lh(p),dimsDef:m.slice()}];return zs(this,{coordDimensions:_,dimensionsCount:m.length+1,encodeDefaulter:pt(tL,_,this)})},r.prototype.getBaseAxis=function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis},r})(),YP=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.defaultValueDimensions=[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],e.visualDrawType="stroke",e}return t.type="series.boxplot",t.dependencies=["xAxis","yAxis","grid"],t.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,boxWidth:[7,50],itemStyle:{color:B.color.neutral00,borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:1,shadowOffsetY:1,shadowColor:B.color.shadow}},animationDuration:800},t})(zt);Qt(YP,UP,!0);var P6=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){var i=e.getData(),o=this.group,s=this._data;this._data||o.removeAll();var l=e.get("layout")==="horizontal"?1:0;i.diff(s).add(function(u){if(i.hasValue(u)){var f=i.getItemLayout(u),v=$w(f,i,u,l,!0);i.setItemGraphicEl(u,v),o.add(v)}}).update(function(u,f){var v=s.getItemGraphicEl(f);if(!i.hasValue(u)){o.remove(v);return}var h=i.getItemLayout(u);v?(Ir(v),ZP(h,v,i,u)):v=$w(h,i,u,l),o.add(v),i.setItemGraphicEl(u,v)}).remove(function(u){var f=s.getItemGraphicEl(u);f&&o.remove(f)}).execute(),this._data=i},t.prototype.remove=function(e){var a=this.group,n=this._data;this._data=null,n&&n.eachItemGraphicEl(function(i){i&&a.remove(i)})},t.type="boxplot",t})(Nt),R6=(function(){function r(){}return r})(),k6=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a.type="boxplotBoxPath",a}return t.prototype.getDefaultShape=function(){return new R6},t.prototype.buildPath=function(e,a){var n=a.points,i=0;for(e.moveTo(n[i][0],n[i][1]),i++;i<4;i++)e.lineTo(n[i][0],n[i][1]);for(e.closePath();ip){var S=[y,_];a.push(S)}}}return{boxData:e,outliers:a}}var G6={type:"echarts:boxplot",transform:function(t){var e=t.upstream;if(e.sourceFormat!==Me){var a="";Et(a)}var n=V6(e.getRawData(),t.config);return[{dimensions:["ItemName","Low","Q1","Q2","Q3","High"],data:n.boxData},{data:n.outliers}]}};function F6(r){r.registerSeriesModel(YP),r.registerChartView(P6),r.registerLayout(O6),r.registerTransform(G6)}var H6=["itemStyle","borderColor"],W6=["itemStyle","borderColor0"],U6=["itemStyle","borderColorDoji"],Y6=["itemStyle","color"],Z6=["itemStyle","color0"];function __(r,t){return t.get(r>0?Y6:Z6)}function S_(r,t){return t.get(r===0?U6:r>0?H6:W6)}var X6={seriesType:"candlestick",plan:Ps(),performRawSeries:!0,reset:function(r,t){if(!t.isSeriesFiltered(r)){var e=r.pipelineContext.large;return!e&&{progress:function(a,n){for(var i;(i=a.next())!=null;){var o=n.getItemModel(i),s=n.getItemLayout(i).sign,l=o.getItemStyle();l.fill=__(s,o),l.stroke=S_(s,o)||l.fill;var u=n.ensureUniqueItemVisual(i,"style");G(u,l)}}}}}},$6=["color","borderColor"],q6=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){this.group.removeClipPath(),this._progressiveEls=null,this._updateDrawMode(e),this._isLargeDraw?this._renderLarge(e):this._renderNormal(e)},t.prototype.incrementalPrepareRender=function(e,a,n){this._clear(),this._updateDrawMode(e)},t.prototype.incrementalRender=function(e,a,n,i){this._progressiveEls=[],this._isLargeDraw?this._incrementalRenderLarge(e,a):this._incrementalRenderNormal(e,a)},t.prototype.eachRendered=function(e){Wn(this._progressiveEls||this.group,e)},t.prototype._updateDrawMode=function(e){var a=e.pipelineContext.large;(this._isLargeDraw==null||a!==this._isLargeDraw)&&(this._isLargeDraw=a,this._clear())},t.prototype._renderNormal=function(e){var a=e.getData(),n=this._data,i=this.group,o=a.getLayout("isSimpleBox"),s=e.get("clip",!0),l=e.coordinateSystem,u=l.getArea&&l.getArea();this._data||i.removeAll(),a.diff(n).add(function(f){if(a.hasValue(f)){var v=a.getItemLayout(f);if(s&&qw(u,v))return;var h=Sp(v,f,!0);Zt(h,{shape:{points:v.ends}},e,f),xp(h,a,f,o),i.add(h),a.setItemGraphicEl(f,h)}}).update(function(f,v){var h=n.getItemGraphicEl(v);if(!a.hasValue(f)){i.remove(h);return}var c=a.getItemLayout(f);if(s&&qw(u,c)){i.remove(h);return}h?(It(h,{shape:{points:c.ends}},e,f),Ir(h)):h=Sp(c),xp(h,a,f,o),i.add(h),a.setItemGraphicEl(f,h)}).remove(function(f){var v=n.getItemGraphicEl(f);v&&i.remove(v)}).execute(),this._data=a},t.prototype._renderLarge=function(e){this._clear(),jw(e,this.group);var a=e.get("clip",!0)?Uu(e.coordinateSystem,!1,e):null;a?this.group.setClipPath(a):this.group.removeClipPath()},t.prototype._incrementalRenderNormal=function(e,a){for(var n=a.getData(),i=n.getLayout("isSimpleBox"),o;(o=e.next())!=null;){var s=n.getItemLayout(o),l=Sp(s);xp(l,n,o,i),l.incremental=!0,this.group.add(l),this._progressiveEls.push(l)}},t.prototype._incrementalRenderLarge=function(e,a){jw(a,this.group,this._progressiveEls,!0)},t.prototype.remove=function(e){this._clear()},t.prototype._clear=function(){this.group.removeAll(),this._data=null},t.type="candlestick",t})(Nt),j6=(function(){function r(){}return r})(),K6=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a.type="normalCandlestickBox",a}return t.prototype.getDefaultShape=function(){return new j6},t.prototype.buildPath=function(e,a){var n=a.points;this.__simpleBox?(e.moveTo(n[4][0],n[4][1]),e.lineTo(n[6][0],n[6][1])):(e.moveTo(n[0][0],n[0][1]),e.lineTo(n[1][0],n[1][1]),e.lineTo(n[2][0],n[2][1]),e.lineTo(n[3][0],n[3][1]),e.closePath(),e.moveTo(n[4][0],n[4][1]),e.lineTo(n[5][0],n[5][1]),e.moveTo(n[6][0],n[6][1]),e.lineTo(n[7][0],n[7][1]))},t})(Tt);function Sp(r,t,e){var a=r.ends;return new K6({shape:{points:e?J6(a,r):a},z2:100})}function qw(r,t){for(var e=!0,a=0;ax?D[i]:M[i],ends:P,brushRect:z(b,w,_)})}function O(F,H){var Y=[];return Y[n]=H,Y[i]=F,isNaN(H)||isNaN(F)?[NaN,NaN]:t.dataToPoint(Y)}function E(F,H,Y){var j=H.slice(),vt=H.slice();j[n]=mv(j[n]+a/2,1,!1),vt[n]=mv(vt[n]-a/2,1,!0),Y?F.push(j,vt):F.push(vt,j)}function z(F,H,Y){var j=O(F,Y),vt=O(H,Y);return j[n]-=a/2,vt[n]-=a/2,{x:j[0],y:j[1],width:a,height:vt[1]-j[1]}}function V(F){return F[n]=mv(F[n],1),F}}function d(p,g){for(var y=va(p.count*4),m=0,_,S=[],x=[],b,w=g.getStore(),T=!!r.get(["itemStyle","borderColorDoji"]);(b=p.next())!=null;){var C=w.get(s,b),M=w.get(u,b),D=w.get(f,b),I=w.get(v,b),L=w.get(h,b);if(isNaN(C)||isNaN(I)||isNaN(L)){y[m++]=NaN,m+=3;continue}y[m++]=Kw(w,b,M,D,f,T),S[n]=C,S[i]=I,_=t.dataToPoint(S,null,x),y[m++]=_?_[0]:NaN,y[m++]=_?_[1]:NaN,S[i]=L,_=t.dataToPoint(S,null,x),y[m++]=_?_[1]:NaN}g.setLayout("largePoints",y)}}};function Kw(r,t,e,a,n,i){var o;return e>a?o=-1:e0?r.get(n,t-1)<=a?1:-1:1,o}function rY(r,t){var e=r.getBaseAxis(),a,n=e.type==="category"?e.getBandWidth():(a=e.getExtent(),Math.abs(a[1]-a[0])/t.count()),i=Z(Q(r.get("barMaxWidth"),n),n),o=Z(Q(r.get("barMinWidth"),1),n),s=r.get("barWidth");return s!=null?Z(s,n):Math.max(Math.min(n/2,i),o)}function aY(r){r.registerChartView(q6),r.registerSeriesModel(XP),r.registerPreprocessor(tY),r.registerVisual(X6),r.registerLayout(eY)}function Jw(r,t){var e=t.rippleEffectColor||t.color;r.eachChild(function(a){a.attr({z:t.z,zlevel:t.zlevel,style:{stroke:t.brushType==="stroke"?e:null,fill:t.brushType==="fill"?e:null}})})}var nY=(function(r){N(t,r);function t(e,a){var n=r.call(this)||this,i=new Hu(e,a),o=new rt;return n.add(i),n.add(o),n.updateData(e,a),n}return t.prototype.stopEffectAnimation=function(){this.childAt(1).removeAll()},t.prototype.startEffectAnimation=function(e){for(var a=e.symbolType,n=e.color,i=e.rippleNumber,o=this.childAt(1),s=0;s0&&(s=this._getLineLength(i)/f*1e3),s!==this._period||l!==this._loop||u!==this._roundTrip){i.stopAnimation();var h=void 0;tt(v)?h=v(n):h=v,i.__t>0&&(h=-s*i.__t),this._animateSymbol(i,s,h,l,u)}this._period=s,this._loop=l,this._roundTrip=u}},t.prototype._animateSymbol=function(e,a,n,i,o){if(a>0){e.__t=0;var s=this,l=e.animate("",i).when(o?a*2:a,{__t:o?2:1}).delay(n).during(function(){s._updateSymbolPosition(e)});i||l.done(function(){s.remove(e)}),l.start()}},t.prototype._getLineLength=function(e){return Ba(e.__p1,e.__cp1)+Ba(e.__cp1,e.__p2)},t.prototype._updateAnimationPoints=function(e,a){e.__p1=a[0],e.__p2=a[1],e.__cp1=a[2]||[(a[0][0]+a[1][0])/2,(a[0][1]+a[1][1])/2]},t.prototype.updateData=function(e,a,n){this.childAt(0).updateData(e,a,n),this._updateEffectSymbol(e,a)},t.prototype._updateSymbolPosition=function(e){var a=e.__p1,n=e.__p2,i=e.__cp1,o=e.__t<1?e.__t:2-e.__t,s=[e.x,e.y],l=s.slice(),u=Te,f=cg;s[0]=u(a[0],i[0],n[0],o),s[1]=u(a[1],i[1],n[1],o);var v=e.__t<1?f(a[0],i[0],n[0],o):f(n[0],i[0],a[0],1-o),h=e.__t<1?f(a[1],i[1],n[1],o):f(n[1],i[1],a[1],1-o);e.rotation=-Math.atan2(h,v)-Math.PI/2,(this._symbolType==="line"||this._symbolType==="rect"||this._symbolType==="roundRect")&&(e.__lastT!==void 0&&e.__lastT=0&&!(i[l]<=a);l--);l=Math.min(l,o-2)}else{for(l=s;la);l++);l=Math.min(l-1,o-2)}var f=(a-i[l])/(i[l+1]-i[l]),v=n[l],h=n[l+1];e.x=v[0]*(1-f)+f*h[0],e.y=v[1]*(1-f)+f*h[1];var c=e.__t<1?h[0]-v[0]:v[0]-h[0],d=e.__t<1?h[1]-v[1]:v[1]-h[1];e.rotation=-Math.atan2(d,c)-Math.PI/2,this._lastFrame=l,this._lastFramePercent=a,e.ignore=!1}},t})($P),uY=(function(){function r(){this.polyline=!1,this.curveness=0,this.segs=[]}return r})(),fY=(function(r){N(t,r);function t(e){var a=r.call(this,e)||this;return a._off=0,a.hoverDataIdx=-1,a}return t.prototype.reset=function(){this.notClear=!1,this._off=0},t.prototype.getDefaultStyle=function(){return{stroke:B.color.neutral99,fill:null}},t.prototype.getDefaultShape=function(){return new uY},t.prototype.buildPath=function(e,a){var n=a.segs,i=a.curveness,o;if(a.polyline)for(o=this._off;o0){e.moveTo(n[o++],n[o++]);for(var l=1;l0){var c=(u+v)/2-(f-h)*i,d=(f+h)/2-(v-u)*i;e.quadraticCurveTo(c,d,v,h)}else e.lineTo(v,h)}this.incremental&&(this._off=o,this.notClear=!0)},t.prototype.findDataIndex=function(e,a){var n=this.shape,i=n.segs,o=n.curveness,s=this.style.lineWidth;if(n.polyline)for(var l=0,u=0;u0)for(var v=i[u++],h=i[u++],c=1;c0){var g=(v+d)/2-(h-p)*o,y=(h+p)/2-(d-v)*o;if(qM(v,h,g,y,d,p,s,e,a))return l}else if(mn(v,h,d,p,s,e,a))return l;l++}return-1},t.prototype.contain=function(e,a){var n=this.transformCoordToLocal(e,a),i=this.getBoundingRect();if(e=n[0],a=n[1],i.contain(e,a)){var o=this.hoverDataIdx=this.findDataIndex(e,a);return o>=0}return this.hoverDataIdx=-1,!1},t.prototype.getBoundingRect=function(){var e=this._rect;if(!e){for(var a=this.shape,n=a.segs,i=1/0,o=1/0,s=-1/0,l=-1/0,u=0;u0&&(o.dataIndex=l+t.__startIndex)})},r.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},r})(),jP={seriesType:"lines",plan:Ps(),reset:function(r){var t=r.coordinateSystem;if(t){var e=r.get("polyline"),a=r.pipelineContext.large;return{progress:function(n,i){var o=[];if(a){var s=void 0,l=n.end-n.start;if(e){for(var u=0,f=n.start;f0&&(f||u.configLayer(s,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(l/10+.9,1),0)})),o.updateData(i);var v=e.get("clip",!0)&&Uu(e.coordinateSystem,!1,e);v?this.group.setClipPath(v):this.group.removeClipPath(),this._lastZlevel=s,this._finished=!0},t.prototype.incrementalPrepareRender=function(e,a,n){var i=e.getData(),o=this._updateLineDraw(i,e);o.incrementalPrepareUpdate(i),this._clearLayer(n),this._finished=!1},t.prototype.incrementalRender=function(e,a,n){this._lineDraw.incrementalUpdate(e,a.getData()),this._finished=e.end===a.getData().count()},t.prototype.eachRendered=function(e){this._lineDraw&&this._lineDraw.eachRendered(e)},t.prototype.updateTransform=function(e,a,n){var i=e.getData(),o=e.pipelineContext;if(!this._finished||o.large||o.progressiveRender)return{update:!0};var s=jP.reset(e,a,n);s.progress&&s.progress({start:0,end:i.count(),count:i.count()},i),this._lineDraw.updateLayout(),this._clearLayer(n)},t.prototype._updateLineDraw=function(e,a){var n=this._lineDraw,i=this._showEffect(a),o=!!a.get("polyline"),s=a.pipelineContext,l=s.large;return(!n||i!==this._hasEffet||o!==this._isPolyline||l!==this._isLargeDraw)&&(n&&n.remove(),n=this._lineDraw=l?new vY:new f_(o?i?lY:qP:i?$P:u_),this._hasEffet=i,this._isPolyline=o,this._isLargeDraw=l),this.group.add(n.group),n},t.prototype._showEffect=function(e){return!!e.get(["effect","show"])},t.prototype._clearLayer=function(e){var a=e.getZr(),n=a.painter.getType()==="svg";!n&&this._lastZlevel!=null&&a.painter.getLayer(this._lastZlevel).clear(!0)},t.prototype.remove=function(e,a){this._lineDraw&&this._lineDraw.remove(),this._lineDraw=null,this._clearLayer(a)},t.prototype.dispose=function(e,a){this.remove(e,a)},t.type="lines",t})(Nt),cY=typeof Uint32Array>"u"?Array:Uint32Array,dY=typeof Float64Array>"u"?Array:Float64Array;function Qw(r){var t=r.data;t&&t[0]&&t[0][0]&&t[0][0].coord&&(r.data=U(t,function(e){var a=[e[0].coord,e[1].coord],n={coords:a};return e[0].name&&(n.fromName=e[0].name),e[1].name&&(n.toName=e[1].name),Wh([n,e[0],e[1]])}))}var pY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.visualStyleAccessPath="lineStyle",e.visualDrawType="stroke",e}return t.prototype.init=function(e){e.data=e.data||[],Qw(e);var a=this._processFlatCoordsArray(e.data);this._flatCoords=a.flatCoords,this._flatCoordsOffset=a.flatCoordsOffset,a.flatCoords&&(e.data=new Float32Array(a.count)),r.prototype.init.apply(this,arguments)},t.prototype.mergeOption=function(e){if(Qw(e),e.data){var a=this._processFlatCoordsArray(e.data);this._flatCoords=a.flatCoords,this._flatCoordsOffset=a.flatCoordsOffset,a.flatCoords&&(e.data=new Float32Array(a.count))}r.prototype.mergeOption.apply(this,arguments)},t.prototype.appendData=function(e){var a=this._processFlatCoordsArray(e.data);a.flatCoords&&(this._flatCoords?(this._flatCoords=rs(this._flatCoords,a.flatCoords),this._flatCoordsOffset=rs(this._flatCoordsOffset,a.flatCoordsOffset)):(this._flatCoords=a.flatCoords,this._flatCoordsOffset=a.flatCoordsOffset),e.data=new Float32Array(a.count)),this.getRawData().appendData(e.data)},t.prototype._getCoordsFromItemModel=function(e){var a=this.getData().getItemModel(e),n=a.option instanceof Array?a.option:a.getShallow("coords");return n},t.prototype.getLineCoordsCount=function(e){return this._flatCoordsOffset?this._flatCoordsOffset[e*2+1]:this._getCoordsFromItemModel(e).length},t.prototype.getLineCoords=function(e,a){if(this._flatCoordsOffset){for(var n=this._flatCoordsOffset[e*2],i=this._flatCoordsOffset[e*2+1],o=0;o ")})},t.prototype.preventIncremental=function(){return!!this.get(["effect","show"])},t.prototype.getProgressive=function(){var e=this.option.progressive;return e??(this.option.large?1e4:this.get("progressive"))},t.prototype.getProgressiveThreshold=function(){var e=this.option.progressiveThreshold;return e??(this.option.large?2e4:this.get("progressiveThreshold"))},t.prototype.getZLevelKey=function(){var e=this.getModel("effect"),a=e.get("trailLength");return this.getData().count()>this.getProgressiveThreshold()?this.id:e.get("show")&&a>0?a+"":""},t.type="series.lines",t.dependencies=["grid","polar","geo","calendar"],t.defaultOption={coordinateSystem:"geo",z:2,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}},t})(zt);function Xf(r){return r instanceof Array||(r=[r,r]),r}var gY={seriesType:"lines",reset:function(r){var t=Xf(r.get("symbol")),e=Xf(r.get("symbolSize")),a=r.getData();a.setVisual("fromSymbol",t&&t[0]),a.setVisual("toSymbol",t&&t[1]),a.setVisual("fromSymbolSize",e&&e[0]),a.setVisual("toSymbolSize",e&&e[1]);function n(i,o){var s=i.getItemModel(o),l=Xf(s.getShallow("symbol",!0)),u=Xf(s.getShallow("symbolSize",!0));l[0]&&i.setItemVisual(o,"fromSymbol",l[0]),l[1]&&i.setItemVisual(o,"toSymbol",l[1]),u[0]&&i.setItemVisual(o,"fromSymbolSize",u[0]),u[1]&&i.setItemVisual(o,"toSymbolSize",u[1])}return{dataEach:a.hasItemOption?n:null}}};function yY(r){r.registerChartView(hY),r.registerSeriesModel(pY),r.registerLayout(jP),r.registerVisual(gY)}var mY=256,_Y=(function(){function r(){this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={inRange:null,outOfRange:null};var t=tr.createCanvas();this.canvas=t}return r.prototype.update=function(t,e,a,n,i,o){var s=this._getBrush(),l=this._getGradient(i,"inRange"),u=this._getGradient(i,"outOfRange"),f=this.pointSize+this.blurSize,v=this.canvas,h=v.getContext("2d"),c=t.length;v.width=e,v.height=a;for(var d=0;d0){var I=o(_)?l:u;_>0&&(_=_*M+T),x[b++]=I[D],x[b++]=I[D+1],x[b++]=I[D+2],x[b++]=I[D+3]*_*256}else b+=4}return h.putImageData(S,0,0),v},r.prototype._getBrush=function(){var t=this._brushCanvas||(this._brushCanvas=tr.createCanvas()),e=this.pointSize+this.blurSize,a=e*2;t.width=a,t.height=a;var n=t.getContext("2d");return n.clearRect(0,0,a,a),n.shadowOffsetX=a,n.shadowBlur=this.blurSize,n.shadowColor=B.color.neutral99,n.beginPath(),n.arc(-e,e,this.pointSize,0,Math.PI*2,!0),n.closePath(),n.fill(),t},r.prototype._getGradient=function(t,e){for(var a=this._gradientPixels,n=a[e]||(a[e]=new Uint8ClampedArray(256*4)),i=[0,0,0,0],o=0,s=0;s<256;s++)t[e](s/255,!0,i),n[o++]=i[0],n[o++]=i[1],n[o++]=i[2],n[o++]=i[3];return n},r})();function SY(r,t,e){var a=r[1]-r[0];t=U(t,function(o){return{interval:[(o.interval[0]-r[0])/a,(o.interval[1]-r[0])/a]}});var n=t.length,i=0;return function(o){var s;for(s=i;s=0;s--){var l=t[s].interval;if(l[0]<=o&&o<=l[1]){i=s;break}}return s>=0&&s=t[0]&&a<=t[1]}}function tT(r){var t=r.dimensions;return t[0]==="lng"&&t[1]==="lat"}var bY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){var i;a.eachComponent("visualMap",function(s){s.eachTargetSeries(function(l){l===e&&(i=s)})}),this._progressiveEls=null,this.group.removeAll();var o=e.coordinateSystem;o.type==="cartesian2d"||o.type==="calendar"||o.type==="matrix"?this._renderOnGridLike(e,n,0,e.getData().count()):tT(o)&&this._renderOnGeo(o,e,i,n)},t.prototype.incrementalPrepareRender=function(e,a,n){this.group.removeAll()},t.prototype.incrementalRender=function(e,a,n,i){var o=a.coordinateSystem;o&&(tT(o)?this.render(a,n,i):(this._progressiveEls=[],this._renderOnGridLike(a,i,e.start,e.end,!0)))},t.prototype.eachRendered=function(e){Wn(this._progressiveEls||this.group,e)},t.prototype._renderOnGridLike=function(e,a,n,i,o){var s=e.coordinateSystem,l=Bn(s,"cartesian2d"),u=Bn(s,"matrix"),f,v,h,c;if(l){var d=s.getAxis("x"),p=s.getAxis("y");f=d.getBandWidth()+.5,v=p.getBandWidth()+.5,h=d.scale.getExtent(),c=p.scale.getExtent()}for(var g=this.group,y=e.getData(),m=e.getModel(["emphasis","itemStyle"]).getItemStyle(),_=e.getModel(["blur","itemStyle"]).getItemStyle(),S=e.getModel(["select","itemStyle"]).getItemStyle(),x=e.get(["itemStyle","borderRadius"]),b=ce(e),w=e.getModel("emphasis"),T=w.get("focus"),C=w.get("blurScope"),M=w.get("disabled"),D=l||u?[y.mapDimension("x"),y.mapDimension("y"),y.mapDimension("value")]:[y.mapDimension("time"),y.mapDimension("value")],I=n;Ih[1]||Rc[1])continue;var O=s.dataToPoint([k,R]);L=new St({shape:{x:O[0]-f/2,y:O[1]-v/2,width:f,height:v},style:P})}else if(u){var E=s.dataToLayout([y.get(D[0],I),y.get(D[1],I)]).rect;if(Ie(E.x))continue;L=new St({z2:1,shape:E,style:P})}else{if(isNaN(y.get(D[1],I)))continue;var z=s.dataToLayout([y.get(D[0],I)]),E=z.contentRect||z.rect;if(Ie(E.x)||Ie(E.y))continue;L=new St({z2:1,shape:E,style:P})}if(y.hasItemOption){var V=y.getItemModel(I),F=V.getModel("emphasis");m=F.getModel("itemStyle").getItemStyle(),_=V.getModel(["blur","itemStyle"]).getItemStyle(),S=V.getModel(["select","itemStyle"]).getItemStyle(),x=V.get(["itemStyle","borderRadius"]),T=F.get("focus"),C=F.get("blurScope"),M=F.get("disabled"),b=ce(V)}L.shape.r=x;var H=e.getRawValue(I),Y="-";H&&H[2]!=null&&(Y=H[2]+""),Se(L,b,{labelFetcher:e,labelDataIndex:I,defaultOpacity:P.opacity,defaultText:Y}),L.ensureState("emphasis").style=m,L.ensureState("blur").style=_,L.ensureState("select").style=S,$t(L,T,C,M),L.incremental=o,o&&(L.states.emphasis.hoverLayer=!0),g.add(L),y.setItemGraphicEl(I,L),this._progressiveEls&&this._progressiveEls.push(L)}},t.prototype._renderOnGeo=function(e,a,n,i){var o=n.targetVisuals.inRange,s=n.targetVisuals.outOfRange,l=a.getData(),u=this._hmLayer||this._hmLayer||new _Y;u.blurSize=a.get("blurSize"),u.pointSize=a.get("pointSize"),u.minOpacity=a.get("minOpacity"),u.maxOpacity=a.get("maxOpacity");var f=e.getViewRect().clone(),v=e.getRoamTransform();f.applyTransform(v);var h=Math.max(f.x,0),c=Math.max(f.y,0),d=Math.min(f.width+f.x,i.getWidth()),p=Math.min(f.height+f.y,i.getHeight()),g=d-h,y=p-c,m=[l.mapDimension("lng"),l.mapDimension("lat"),l.mapDimension("value")],_=l.mapArray(m,function(w,T,C){var M=e.dataToPoint([w,T]);return M[0]-=h,M[1]-=c,M.push(C),M}),S=n.getExtent(),x=n.type==="visualMap.continuous"?xY(S,n.option.range):SY(S,n.getPieceList(),n.option.selected);u.update(_,g,y,o.color.getNormalizer(),{inRange:o.color.getColorMapper(),outOfRange:s.color.getColorMapper()},x);var b=new xe({style:{width:g,height:y,x:h,y:c,image:u.canvas},silent:!0});this.group.add(b)},t.type="heatmap",t})(Nt),wY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.getInitialData=function(e,a){return Ca(null,this,{generateCoord:"value"})},t.prototype.preventIncremental=function(){var e=Is.get(this.get("coordinateSystem"));if(e&&e.dimensions)return e.dimensions[0]==="lng"&&e.dimensions[1]==="lat"},t.type="series.heatmap",t.dependencies=["grid","geo","calendar","matrix"],t.defaultOption={coordinateSystem:"cartesian2d",z:2,geoIndex:0,blurSize:30,pointSize:20,maxOpacity:1,minOpacity:0,select:{itemStyle:{borderColor:B.color.primary}}},t})(zt);function TY(r){r.registerChartView(bY),r.registerSeriesModel(wY)}var CY=["itemStyle","borderWidth"],eT=[{xy:"x",wh:"width",index:0,posDesc:["left","right"]},{xy:"y",wh:"height",index:1,posDesc:["top","bottom"]}],Tp=new Ta,AY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){var i=this.group,o=e.getData(),s=this._data,l=e.coordinateSystem,u=l.getBaseAxis(),f=u.isHorizontal(),v=l.master.getRect(),h={ecSize:{width:n.getWidth(),height:n.getHeight()},seriesModel:e,coordSys:l,coordSysExtent:[[v.x,v.x+v.width],[v.y,v.y+v.height]],isHorizontal:f,valueDim:eT[+f],categoryDim:eT[1-+f]};o.diff(s).add(function(d){if(o.hasValue(d)){var p=aT(o,d),g=rT(o,d,p,h),y=nT(o,h,g);o.setItemGraphicEl(d,y),i.add(y),oT(y,h,g)}}).update(function(d,p){var g=s.getItemGraphicEl(p);if(!o.hasValue(d)){i.remove(g);return}var y=aT(o,d),m=rT(o,d,y,h),_=rR(o,m);g&&_!==g.__pictorialShapeStr&&(i.remove(g),o.setItemGraphicEl(d,null),g=null),g?kY(g,h,m):g=nT(o,h,m,!0),o.setItemGraphicEl(d,g),g.__pictorialSymbolMeta=m,i.add(g),oT(g,h,m)}).remove(function(d){var p=s.getItemGraphicEl(d);p&&iT(s,d,p.__pictorialSymbolMeta.animationModel,p)}).execute();var c=e.get("clip",!0)?Uu(e.coordinateSystem,!1,e):null;return c?i.setClipPath(c):i.removeClipPath(),this._data=o,this.group},t.prototype.remove=function(e,a){var n=this.group,i=this._data;e.get("animation")?i&&i.eachItemGraphicEl(function(o){iT(i,ft(o).dataIndex,e,o)}):n.removeAll()},t.type="pictorialBar",t})(Nt);function rT(r,t,e,a){var n=r.getItemLayout(t),i=e.get("symbolRepeat"),o=e.get("symbolClip"),s=e.get("symbolPosition")||"start",l=e.get("symbolRotate"),u=(l||0)*Math.PI/180||0,f=e.get("symbolPatternSize")||2,v=e.isAnimationEnabled(),h={dataIndex:t,layout:n,itemModel:e,symbolType:r.getItemVisual(t,"symbol")||"circle",style:r.getItemVisual(t,"style"),symbolClip:o,symbolRepeat:i,symbolRepeatDirection:e.get("symbolRepeatDirection"),symbolPatternSize:f,rotation:u,animationModel:v?e:null,hoverScale:v&&e.get(["emphasis","scale"]),z2:e.getShallow("z",!0)||0};MY(e,i,n,a,h),DY(r,t,n,i,o,h.boundingLength,h.pxSign,f,a,h),LY(e,h.symbolScale,u,a,h);var c=h.symbolSize,d=oo(e.get("symbolOffset"),c);return IY(e,c,n,i,o,d,s,h.valueLineWidth,h.boundingLength,h.repeatCutLength,a,h),h}function MY(r,t,e,a,n){var i=a.valueDim,o=r.get("symbolBoundingData"),s=a.coordSys.getOtherAxis(a.coordSys.getBaseAxis()),l=s.toGlobalCoord(s.dataToCoord(0)),u=1-+(e[i.wh]<=0),f;if(W(o)){var v=[Cp(s,o[0])-l,Cp(s,o[1])-l];v[1]=0?1:-1:f>0?1:-1}function Cp(r,t){return r.toGlobalCoord(r.dataToCoord(r.scale.parse(t)))}function DY(r,t,e,a,n,i,o,s,l,u){var f=l.valueDim,v=l.categoryDim,h=Math.abs(e[v.wh]),c=r.getItemVisual(t,"symbolSize"),d;W(c)?d=c.slice():c==null?d=["100%","100%"]:d=[c,c],d[v.index]=Z(d[v.index],h),d[f.index]=Z(d[f.index],a?h:Math.abs(i)),u.symbolSize=d;var p=u.symbolScale=[d[0]/s,d[1]/s];p[f.index]*=(l.isHorizontal?-1:1)*o}function LY(r,t,e,a,n){var i=r.get(CY)||0;i&&(Tp.attr({scaleX:t[0],scaleY:t[1],rotation:e}),Tp.updateTransform(),i/=Tp.getLineScale(),i*=t[a.valueDim.index]),n.valueLineWidth=i||0}function IY(r,t,e,a,n,i,o,s,l,u,f,v){var h=f.categoryDim,c=f.valueDim,d=v.pxSign,p=Math.max(t[c.index]+s,0),g=p;if(a){var y=Math.abs(l),m=Ce(r.get("symbolMargin"),"15%")+"",_=!1;m.lastIndexOf("!")===m.length-1&&(_=!0,m=m.slice(0,m.length-1));var S=Z(m,t[c.index]),x=Math.max(p+S*2,0),b=_?0:S*2,w=Im(a),T=w?a:sT((y+b)/x),C=y-T*p;S=C/2/(_?T:Math.max(T-1,1)),x=p+S*2,b=_?0:S*2,!w&&a!=="fixed"&&(T=u?sT((Math.abs(u)+b)/x):0),g=T*x-b,v.repeatTimes=T,v.symbolMargin=S}var M=d*(g/2),D=v.pathPosition=[];D[h.index]=e[h.wh]/2,D[c.index]=o==="start"?M:o==="end"?l-M:l/2,i&&(D[0]+=i[0],D[1]+=i[1]);var I=v.bundlePosition=[];I[h.index]=e[h.xy],I[c.index]=e[c.xy];var L=v.barRectShape=G({},e);L[c.wh]=d*Math.max(Math.abs(e[c.wh]),Math.abs(D[c.index]+M)),L[h.wh]=e[h.wh];var P=v.clipShape={};P[h.xy]=-e[h.xy],P[h.wh]=f.ecSize[h.wh],P[c.xy]=0,P[c.wh]=e[c.wh]}function KP(r){var t=r.symbolPatternSize,e=ie(r.symbolType,-t/2,-t/2,t,t);return e.attr({culling:!0}),e.type!=="image"&&e.setStyle({strokeNoScale:!0}),e}function JP(r,t,e,a){var n=r.__pictorialBundle,i=e.symbolSize,o=e.valueLineWidth,s=e.pathPosition,l=t.valueDim,u=e.repeatTimes||0,f=0,v=i[t.valueDim.index]+o+e.symbolMargin*2;for(x_(r,function(p){p.__pictorialAnimationIndex=f,p.__pictorialRepeatTimes=u,f0:y<0)&&(m=u-1-p),g[l.index]=v*(m-u/2+.5)+s[l.index],{x:g[0],y:g[1],scaleX:e.symbolScale[0],scaleY:e.symbolScale[1],rotation:e.rotation}}}function QP(r,t,e,a){var n=r.__pictorialBundle,i=r.__pictorialMainPath;i?es(i,null,{x:e.pathPosition[0],y:e.pathPosition[1],scaleX:e.symbolScale[0],scaleY:e.symbolScale[1],rotation:e.rotation},e,a):(i=r.__pictorialMainPath=KP(e),n.add(i),es(i,{x:e.pathPosition[0],y:e.pathPosition[1],scaleX:0,scaleY:0,rotation:e.rotation},{scaleX:e.symbolScale[0],scaleY:e.symbolScale[1]},e,a))}function tR(r,t,e){var a=G({},t.barRectShape),n=r.__pictorialBarRect;n?es(n,null,{shape:a},t,e):(n=r.__pictorialBarRect=new St({z2:2,shape:a,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}}),n.disableMorphing=!0,r.add(n))}function eR(r,t,e,a){if(e.symbolClip){var n=r.__pictorialClipPath,i=G({},e.clipShape),o=t.valueDim,s=e.animationModel,l=e.dataIndex;if(n)It(n,{shape:i},s,l);else{i[o.wh]=0,n=new St({shape:i}),r.__pictorialBundle.setClipPath(n),r.__pictorialClipPath=n;var u={};u[o.wh]=e.clipShape[o.wh],ao[a?"updateProps":"initProps"](n,{shape:u},s,l)}}}function aT(r,t){var e=r.getItemModel(t);return e.getAnimationDelayParams=PY,e.isAnimationEnabled=RY,e}function PY(r){return{index:r.__pictorialAnimationIndex,count:r.__pictorialRepeatTimes}}function RY(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function nT(r,t,e,a){var n=new rt,i=new rt;return n.add(i),n.__pictorialBundle=i,i.x=e.bundlePosition[0],i.y=e.bundlePosition[1],e.symbolRepeat?JP(n,t,e):QP(n,t,e),tR(n,e,a),eR(n,t,e,a),n.__pictorialShapeStr=rR(r,e),n.__pictorialSymbolMeta=e,n}function kY(r,t,e){var a=e.animationModel,n=e.dataIndex,i=r.__pictorialBundle;It(i,{x:e.bundlePosition[0],y:e.bundlePosition[1]},a,n),e.symbolRepeat?JP(r,t,e,!0):QP(r,t,e,!0),tR(r,e,!0),eR(r,t,e,!0)}function iT(r,t,e,a){var n=a.__pictorialBarRect;n&&n.removeTextContent();var i=[];x_(a,function(o){i.push(o)}),a.__pictorialMainPath&&i.push(a.__pictorialMainPath),a.__pictorialClipPath&&(e=null),A(i,function(o){Nn(o,{scaleX:0,scaleY:0},e,t,function(){a.parent&&a.parent.remove(a)})}),r.setItemGraphicEl(t,null)}function rR(r,t){return[r.getItemVisual(t.dataIndex,"symbol")||"none",!!t.symbolRepeat,!!t.symbolClip].join(":")}function x_(r,t,e){A(r.__pictorialBundle.children(),function(a){a!==r.__pictorialBarRect&&t.call(e,a)})}function es(r,t,e,a,n,i){t&&r.attr(t),a.symbolClip&&!n?e&&r.attr(e):e&&ao[n?"updateProps":"initProps"](r,e,a.animationModel,a.dataIndex,i)}function oT(r,t,e){var a=e.dataIndex,n=e.itemModel,i=n.getModel("emphasis"),o=i.getModel("itemStyle").getItemStyle(),s=n.getModel(["blur","itemStyle"]).getItemStyle(),l=n.getModel(["select","itemStyle"]).getItemStyle(),u=n.getShallow("cursor"),f=i.get("focus"),v=i.get("blurScope"),h=i.get("scale");x_(r,function(p){if(p instanceof xe){var g=p.style;p.useStyle(G({image:g.image,x:g.x,y:g.y,width:g.width,height:g.height},e.style))}else p.useStyle(e.style);var y=p.ensureState("emphasis");y.style=o,h&&(y.scaleX=p.scaleX*1.1,y.scaleY=p.scaleY*1.1),p.ensureState("blur").style=s,p.ensureState("select").style=l,u&&(p.cursor=u),p.z2=e.z2});var c=t.valueDim.posDesc[+(e.boundingLength>0)],d=r.__pictorialBarRect;d.ignoreClip=!0,Se(d,ce(n),{labelFetcher:t.seriesModel,labelDataIndex:a,defaultText:cs(t.seriesModel.getData(),a),inheritColor:e.style.fill,defaultOpacity:e.style.opacity,defaultOutsidePosition:c}),$t(r,f,v,i.get("disabled"))}function sT(r){var t=Math.round(r);return Math.abs(r-t)<1e-4?t:Math.ceil(r)}var EY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.hasSymbolVisual=!0,e.defaultSymbol="roundRect",e}return t.prototype.getInitialData=function(e){return e.stack=null,r.prototype.getInitialData.apply(this,arguments)},t.type="series.pictorialBar",t.dependencies=["grid"],t.defaultOption=Un(yu.defaultOption,{symbol:"circle",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:"end",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:"-100%",clip:!1,progressive:0,emphasis:{scale:!1},select:{itemStyle:{borderColor:B.color.primary}}}),t})(yu);function OY(r){r.registerChartView(AY),r.registerSeriesModel(EY),r.registerLayout(r.PRIORITY.VISUAL.LAYOUT,pt(b2,"pictorialBar")),r.registerLayout(r.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,w2("pictorialBar"))}var NY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e._layers=[],e}return t.prototype.render=function(e,a,n){var i=e.getData(),o=this,s=this.group,l=e.getLayerSeries(),u=i.getLayout("layoutInfo"),f=u.rect,v=u.boundaryGap;s.x=0,s.y=f.y+v[0];function h(g){return g.name}var c=new Ja(this._layersSeries||[],l,h,h),d=[];c.add($(p,this,"add")).update($(p,this,"update")).remove($(p,this,"remove")).execute();function p(g,y,m){var _=o._layers;if(g==="remove"){s.remove(_[y]);return}for(var S=[],x=[],b,w=l[y].indices,T=0;Ti&&(i=s),a.push(s)}for(var u=0;ui&&(i=v)}return{y0:n,max:i}}function FY(r){r.registerChartView(NY),r.registerSeriesModel(zY),r.registerLayout(VY),r.registerProcessor(Bs("themeRiver"))}var HY=2,WY=4,uT=(function(r){N(t,r);function t(e,a,n,i){var o=r.call(this)||this;o.z2=HY,o.textConfig={inside:!0},ft(o).seriesIndex=a.seriesIndex;var s=new Mt({z2:WY,silent:e.getModel().get(["label","silent"])});return o.setTextContent(s),o.updateData(!0,e,a,n,i),o}return t.prototype.updateData=function(e,a,n,i,o){this.node=a,a.piece=this,n=n||this._seriesModel,i=i||this._ecModel;var s=this;ft(s).dataIndex=a.dataIndex;var l=a.getModel(),u=l.getModel("emphasis"),f=a.getLayout(),v=G({},f);v.label=null;var h=a.getVisual("style");h.lineJoin="bevel";var c=a.getVisual("decal");c&&(h.decal=fs(c,o));var d=ca(l.getModel("itemStyle"),v,!0);G(v,d),A(Xe,function(m){var _=s.ensureState(m),S=l.getModel([m,"itemStyle"]);_.style=S.getItemStyle();var x=ca(S,v);x&&(_.shape=x)}),e?(s.setShape(v),s.shape.r=f.r0,Zt(s,{shape:{r:f.r}},n,a.dataIndex)):(It(s,{shape:v},n),Ir(s)),s.useStyle(h),this._updateLabel(n);var p=l.getShallow("cursor");p&&s.attr("cursor",p),this._seriesModel=n||this._seriesModel,this._ecModel=i||this._ecModel;var g=u.get("focus"),y=g==="relative"?rs(a.getAncestorsIndices(),a.getDescendantIndices()):g==="ancestor"?a.getAncestorsIndices():g==="descendant"?a.getDescendantIndices():g;$t(this,y,u.get("blurScope"),u.get("disabled"))},t.prototype._updateLabel=function(e){var a=this,n=this.node.getModel(),i=n.getModel("label"),o=this.node.getLayout(),s=o.endAngle-o.startAngle,l=(o.startAngle+o.endAngle)/2,u=Math.cos(l),f=Math.sin(l),v=this,h=v.getTextContent(),c=this.node.dataIndex,d=i.get("minAngle")/180*Math.PI,p=i.get("show")&&!(d!=null&&Math.abs(s)P&&!is(R-P)&&R0?(o.virtualPiece?o.virtualPiece.updateData(!1,m,e,a,n):(o.virtualPiece=new uT(m,e,a,n),f.add(o.virtualPiece)),_.piece.off("click"),o.virtualPiece.on("click",function(S){o._rootToNode(_.parentNode)})):o.virtualPiece&&(f.remove(o.virtualPiece),o.virtualPiece=null)}},t.prototype._initEvents=function(){var e=this;this.group.off("click"),this.group.on("click",function(a){var n=!1,i=e.seriesModel.getViewRoot();i.eachNode(function(o){if(!n&&o.piece&&o.piece===a.target){var s=o.getModel().get("nodeClick");if(s==="rootToNode")e._rootToNode(o);else if(s==="link"){var l=o.getModel(),u=l.get("link");if(u){var f=l.get("target",!0)||"_blank";Jv(u,f)}}n=!0}})})},t.prototype._rootToNode=function(e){e!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:Yy,from:this.uid,seriesId:this.seriesModel.id,targetNode:e})},t.prototype.containPoint=function(e,a){var n=a.getData(),i=n.getItemLayout(0);if(i){var o=e[0]-i.cx,s=e[1]-i.cy,l=Math.sqrt(o*o+s*s);return l<=i.r&&l>=i.r0}},t.type="sunburst",t})(Nt),XY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.ignoreStyleOnData=!0,e}return t.prototype.getInitialData=function(e,a){var n={name:e.name,children:e.data};aR(n);var i=this._levelModels=U(e.levels||[],function(l){return new wt(l,this,a)},this),o=a_.createTree(n,this,s);function s(l){l.wrapMethod("getItemModel",function(u,f){var v=o.getNodeByDataIndex(f),h=i[v.depth];return h&&(u.parentModel=h),u})}return o.data},t.prototype.optionUpdated=function(){this.resetViewRoot()},t.prototype.getDataParams=function(e){var a=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(e);return a.treePathInfo=xc(n,this),a},t.prototype.getLevelModel=function(e){return this._levelModels&&this._levelModels[e.depth]},t.prototype.getViewRoot=function(){return this._viewRoot},t.prototype.resetViewRoot=function(e){e?this._viewRoot=e:e=this._viewRoot;var a=this.getRawData().tree.root;(!e||e!==a&&!a.contains(e))&&(this._viewRoot=a)},t.prototype.enableAriaDecal=function(){sP(this)},t.type="series.sunburst",t.defaultOption={z:2,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,stillShowZeroSum:!0,nodeClick:"rootToNode",renderLabelForZeroData:!1,label:{rotate:"radial",show:!0,opacity:1,align:"center",position:"inside",distance:5,silent:!0},itemStyle:{borderWidth:1,borderColor:"white",borderType:"solid",shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0.2)",shadowOffsetX:0,shadowOffsetY:0,opacity:1},emphasis:{focus:"descendant"},blur:{itemStyle:{opacity:.2},label:{opacity:.1}},animationType:"expansion",animationDuration:1e3,animationDurationUpdate:500,data:[],sort:"desc"},t})(zt);function aR(r){var t=0;A(r.children,function(a){aR(a);var n=a.value;W(n)&&(n=n[0]),t+=n});var e=r.value;W(e)&&(e=e[0]),(e==null||isNaN(e))&&(e=t),e<0&&(e=0),W(r.value)?r.value[0]=e:r.value=e}var vT=Math.PI/180;function $Y(r,t,e){t.eachSeriesByType(r,function(a){var n=a.get("center"),i=a.get("radius");W(i)||(i=[0,i]),W(n)||(n=[n,n]);var o=e.getWidth(),s=e.getHeight(),l=Math.min(o,s),u=Z(n[0],o),f=Z(n[1],s),v=Z(i[0],l/2),h=Z(i[1],l/2),c=-a.get("startAngle")*vT,d=a.get("minAngle")*vT,p=a.getData().tree.root,g=a.getViewRoot(),y=g.depth,m=a.get("sort");m!=null&&nR(g,m);var _=0;A(g.children,function(R){!isNaN(R.getValue())&&_++});var S=g.getValue(),x=Math.PI/(S||_)*2,b=g.depth>0,w=g.height-(b?-1:1),T=(h-v)/(w||1),C=a.get("clockwise"),M=a.get("stillShowZeroSum"),D=C?1:-1,I=function(R,O){if(R){var E=O;if(R!==p){var z=R.getValue(),V=S===0&&M?x:z*x;V1;)o=o.parentNode;var s=n.getColorFromPalette(o.name||o.dataIndex+"",t);return a.depth>1&&X(s)&&(s=zv(s,(a.depth-1)/(i-1)*.5)),s}r.eachSeriesByType("sunburst",function(a){var n=a.getData(),i=n.tree;i.eachNode(function(o){var s=o.getModel(),l=s.getModel("itemStyle").getItemStyle();l.fill||(l.fill=e(o,a,i.root.height));var u=n.ensureUniqueItemVisual(o.dataIndex,"style");G(u,l)})})}function KY(r){r.registerChartView(ZY),r.registerSeriesModel(XY),r.registerLayout(pt($Y,"sunburst")),r.registerProcessor(pt(Bs,"sunburst")),r.registerVisual(jY),YY(r)}var hT={color:"fill",borderColor:"stroke"},JY={symbol:1,symbolSize:1,symbolKeepAspect:1,legendIcon:1,visualMeta:1,liftZ:1,decal:1},Ya=bt(),QY=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.optionUpdated=function(){this.currentZLevel=this.get("zlevel",!0),this.currentZ=this.get("z",!0)},t.prototype.getInitialData=function(e,a){return Ca(null,this)},t.prototype.getDataParams=function(e,a,n){var i=r.prototype.getDataParams.call(this,e,a);return n&&(i.info=Ya(n).info),i},t.type="series.custom",t.dependencies=["grid","polar","geo","singleAxis","calendar","matrix"],t.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,clip:!1},t})(zt);function t7(r,t){return t=t||[0,0],U(["x","y"],function(e,a){var n=this.getAxis(e),i=t[a],o=r[a]/2;return n.type==="category"?n.getBandWidth():Math.abs(n.dataToCoord(i-o)-n.dataToCoord(i+o))},this)}function e7(r){var t=r.master.getRect();return{coordSys:{type:"cartesian2d",x:t.x,y:t.y,width:t.width,height:t.height},api:{coord:function(e){return r.dataToPoint(e)},size:$(t7,r)}}}function r7(r,t){return t=t||[0,0],U([0,1],function(e){var a=t[e],n=r[e]/2,i=[],o=[];return i[e]=a-n,o[e]=a+n,i[1-e]=o[1-e]=t[1-e],Math.abs(this.dataToPoint(i)[e]-this.dataToPoint(o)[e])},this)}function a7(r){var t=r.getBoundingRect();return{coordSys:{type:"geo",x:t.x,y:t.y,width:t.width,height:t.height,zoom:r.getZoom()},api:{coord:function(e){return r.dataToPoint(e)},size:$(r7,r)}}}function n7(r,t){var e=this.getAxis(),a=t instanceof Array?t[0]:t,n=(r instanceof Array?r[0]:r)/2;return e.type==="category"?e.getBandWidth():Math.abs(e.dataToCoord(a-n)-e.dataToCoord(a+n))}function i7(r){var t=r.getRect();return{coordSys:{type:"singleAxis",x:t.x,y:t.y,width:t.width,height:t.height},api:{coord:function(e){return r.dataToPoint(e)},size:$(n7,r)}}}function o7(r,t){return t=t||[0,0],U(["Radius","Angle"],function(e,a){var n="get"+e+"Axis",i=this[n](),o=t[a],s=r[a]/2,l=i.type==="category"?i.getBandWidth():Math.abs(i.dataToCoord(o-s)-i.dataToCoord(o+s));return e==="Angle"&&(l=l*Math.PI/180),l},this)}function s7(r){var t=r.getRadiusAxis(),e=r.getAngleAxis(),a=t.getExtent();return a[0]>a[1]&&a.reverse(),{coordSys:{type:"polar",cx:r.cx,cy:r.cy,r:a[1],r0:a[0]},api:{coord:function(n){var i=t.dataToRadius(n[0]),o=e.dataToAngle(n[1]),s=r.coordToPoint([i,o]);return s.push(i,o*Math.PI/180),s},size:$(o7,r)}}}function l7(r){var t=r.getRect(),e=r.getRangeInfo();return{coordSys:{type:"calendar",x:t.x,y:t.y,width:t.width,height:t.height,cellWidth:r.getCellWidth(),cellHeight:r.getCellHeight(),rangeInfo:{start:e.start,end:e.end,weeks:e.weeks,dayCount:e.allDay}},api:{coord:function(a,n){return r.dataToPoint(a,n)},layout:function(a,n){return r.dataToLayout(a,n)}}}}function u7(r){var t=r.getRect();return{coordSys:{type:"matrix",x:t.x,y:t.y,width:t.width,height:t.height},api:{coord:function(e,a){return r.dataToPoint(e,a)},layout:function(e,a){return r.dataToLayout(e,a)}}}}function iR(r,t,e,a){return r&&(r.legacy||r.legacy!==!1&&!e&&!a&&t!=="tspan"&&(t==="text"||q(r,"text")))}function oR(r,t,e){var a=r,n,i,o;if(t==="text")o=a;else{o={},q(a,"text")&&(o.text=a.text),q(a,"rich")&&(o.rich=a.rich),q(a,"textFill")&&(o.fill=a.textFill),q(a,"textStroke")&&(o.stroke=a.textStroke),q(a,"fontFamily")&&(o.fontFamily=a.fontFamily),q(a,"fontSize")&&(o.fontSize=a.fontSize),q(a,"fontStyle")&&(o.fontStyle=a.fontStyle),q(a,"fontWeight")&&(o.fontWeight=a.fontWeight),i={type:"text",style:o,silent:!0},n={};var s=q(a,"textPosition");e?n.position=s?a.textPosition:"inside":s&&(n.position=a.textPosition),q(a,"textPosition")&&(n.position=a.textPosition),q(a,"textOffset")&&(n.offset=a.textOffset),q(a,"textRotation")&&(n.rotation=a.textRotation),q(a,"textDistance")&&(n.distance=a.textDistance)}return cT(o,r),A(o.rich,function(l){cT(l,l)}),{textConfig:n,textContent:i}}function cT(r,t){t&&(t.font=t.textFont||t.font,q(t,"textStrokeWidth")&&(r.lineWidth=t.textStrokeWidth),q(t,"textAlign")&&(r.align=t.textAlign),q(t,"textVerticalAlign")&&(r.verticalAlign=t.textVerticalAlign),q(t,"textLineHeight")&&(r.lineHeight=t.textLineHeight),q(t,"textWidth")&&(r.width=t.textWidth),q(t,"textHeight")&&(r.height=t.textHeight),q(t,"textBackgroundColor")&&(r.backgroundColor=t.textBackgroundColor),q(t,"textPadding")&&(r.padding=t.textPadding),q(t,"textBorderColor")&&(r.borderColor=t.textBorderColor),q(t,"textBorderWidth")&&(r.borderWidth=t.textBorderWidth),q(t,"textBorderRadius")&&(r.borderRadius=t.textBorderRadius),q(t,"textBoxShadowColor")&&(r.shadowColor=t.textBoxShadowColor),q(t,"textBoxShadowBlur")&&(r.shadowBlur=t.textBoxShadowBlur),q(t,"textBoxShadowOffsetX")&&(r.shadowOffsetX=t.textBoxShadowOffsetX),q(t,"textBoxShadowOffsetY")&&(r.shadowOffsetY=t.textBoxShadowOffsetY))}function dT(r,t,e){var a=r;a.textPosition=a.textPosition||e.position||"inside",e.offset!=null&&(a.textOffset=e.offset),e.rotation!=null&&(a.textRotation=e.rotation),e.distance!=null&&(a.textDistance=e.distance);var n=a.textPosition.indexOf("inside")>=0,i=r.fill||B.color.neutral99;pT(a,t);var o=a.textFill==null;return n?o&&(a.textFill=e.insideFill||B.color.neutral00,!a.textStroke&&e.insideStroke&&(a.textStroke=e.insideStroke),!a.textStroke&&(a.textStroke=i),a.textStrokeWidth==null&&(a.textStrokeWidth=2)):(o&&(a.textFill=r.fill||e.outsideFill||B.color.neutral00),!a.textStroke&&e.outsideStroke&&(a.textStroke=e.outsideStroke)),a.text=t.text,a.rich=t.rich,A(t.rich,function(s){pT(s,s)}),a}function pT(r,t){t&&(q(t,"fill")&&(r.textFill=t.fill),q(t,"stroke")&&(r.textStroke=t.fill),q(t,"lineWidth")&&(r.textStrokeWidth=t.lineWidth),q(t,"font")&&(r.font=t.font),q(t,"fontStyle")&&(r.fontStyle=t.fontStyle),q(t,"fontWeight")&&(r.fontWeight=t.fontWeight),q(t,"fontSize")&&(r.fontSize=t.fontSize),q(t,"fontFamily")&&(r.fontFamily=t.fontFamily),q(t,"align")&&(r.textAlign=t.align),q(t,"verticalAlign")&&(r.textVerticalAlign=t.verticalAlign),q(t,"lineHeight")&&(r.textLineHeight=t.lineHeight),q(t,"width")&&(r.textWidth=t.width),q(t,"height")&&(r.textHeight=t.height),q(t,"backgroundColor")&&(r.textBackgroundColor=t.backgroundColor),q(t,"padding")&&(r.textPadding=t.padding),q(t,"borderColor")&&(r.textBorderColor=t.borderColor),q(t,"borderWidth")&&(r.textBorderWidth=t.borderWidth),q(t,"borderRadius")&&(r.textBorderRadius=t.borderRadius),q(t,"shadowColor")&&(r.textBoxShadowColor=t.shadowColor),q(t,"shadowBlur")&&(r.textBoxShadowBlur=t.shadowBlur),q(t,"shadowOffsetX")&&(r.textBoxShadowOffsetX=t.shadowOffsetX),q(t,"shadowOffsetY")&&(r.textBoxShadowOffsetY=t.shadowOffsetY),q(t,"textShadowColor")&&(r.textShadowColor=t.textShadowColor),q(t,"textShadowBlur")&&(r.textShadowBlur=t.textShadowBlur),q(t,"textShadowOffsetX")&&(r.textShadowOffsetX=t.textShadowOffsetX),q(t,"textShadowOffsetY")&&(r.textShadowOffsetY=t.textShadowOffsetY))}var sR={position:["x","y"],scale:["scaleX","scaleY"],origin:["originX","originY"]},gT=At(sR);Mr(ya,function(r,t){return r[t]=1,r},{});ya.join(", ");var Ah=["","style","shape","extra"],ys=bt();function b_(r,t,e,a,n){var i=r+"Animation",o=Cs(r,a,n)||{},s=ys(t).userDuring;return o.duration>0&&(o.during=s?$(d7,{el:t,userDuring:s}):null,o.setToFinal=!0,o.scope=r),G(o,e[i]),o}function Av(r,t,e,a){a=a||{};var n=a.dataIndex,i=a.isInit,o=a.clearStyle,s=e.isAnimationEnabled(),l=ys(r),u=t.style;l.userDuring=t.during;var f={},v={};if(g7(r,t,v),r.type==="compound")for(var h=r.shape.paths,c=t.shape.paths,d=0;d0&&r.animateFrom(g,y)}else v7(r,t,n||0,e,f);lR(r,t),u?r.dirty():r.markRedraw()}function lR(r,t){for(var e=ys(r).leaveToProps,a=0;a0&&r.animateFrom(n,i)}}function h7(r,t){q(t,"silent")&&(r.silent=t.silent),q(t,"ignore")&&(r.ignore=t.ignore),r instanceof Lr&&q(t,"invisible")&&(r.invisible=t.invisible),r instanceof Tt&&q(t,"autoBatch")&&(r.autoBatch=t.autoBatch)}var aa={},c7={setTransform:function(r,t){return aa.el[r]=t,this},getTransform:function(r){return aa.el[r]},setShape:function(r,t){var e=aa.el,a=e.shape||(e.shape={});return a[r]=t,e.dirtyShape&&e.dirtyShape(),this},getShape:function(r){var t=aa.el.shape;if(t)return t[r]},setStyle:function(r,t){var e=aa.el,a=e.style;return a&&(a[r]=t,e.dirtyStyle&&e.dirtyStyle()),this},getStyle:function(r){var t=aa.el.style;if(t)return t[r]},setExtra:function(r,t){var e=aa.el.extra||(aa.el.extra={});return e[r]=t,this},getExtra:function(r){var t=aa.el.extra;if(t)return t[r]}};function d7(){var r=this,t=r.el;if(t){var e=ys(t).userDuring,a=r.userDuring;if(e!==a){r.el=r.userDuring=null;return}aa.el=t,a(c7)}}function yT(r,t,e,a){var n=e[r];if(n){var i=t[r],o;if(i){var s=e.transition,l=n.transition;if(l)if(!o&&(o=a[r]={}),Wi(l))G(o,i);else for(var u=Ht(l),f=0;f=0){!o&&(o=a[r]={});for(var c=At(i),f=0;f=0)){var h=r.getAnimationStyleProps(),c=h?h.style:null;if(c){!i&&(i=a.style={});for(var d=At(e),u=0;u=0?t.getStore().get(E,R):void 0}var z=t.get(O.name,R),V=O&&O.ordinalMeta;return V?V.categories[z]:z}function w(k,R){R==null&&(R=f);var O=t.getItemVisual(R,"style"),E=O&&O.fill,z=O&&O.opacity,V=_(R,Cn).getItemStyle();E!=null&&(V.fill=E),z!=null&&(V.opacity=z);var F={inheritColor:X(E)?E:B.color.neutral99},H=S(R,Cn),Y=Ft(H,null,F,!1,!0);Y.text=H.getShallow("show")?Q(r.getFormattedLabel(R,Cn),cs(t,R)):null;var j=qv(H,F,!1);return M(k,V),V=dT(V,Y,j),k&&C(V,k),V.legacy=!0,V}function T(k,R){R==null&&(R=f);var O=_(R,Za).getItemStyle(),E=S(R,Za),z=Ft(E,null,null,!0,!0);z.text=E.getShallow("show")?Qe(r.getFormattedLabel(R,Za),r.getFormattedLabel(R,Cn),cs(t,R)):null;var V=qv(E,null,!0);return M(k,O),O=dT(O,z,V),k&&C(O,k),O.legacy=!0,O}function C(k,R){for(var O in R)q(R,O)&&(k[O]=R[O])}function M(k,R){k&&(k.textFill&&(R.textFill=k.textFill),k.textPosition&&(R.textPosition=k.textPosition))}function D(k,R){if(R==null&&(R=f),q(hT,k)){var O=t.getItemVisual(R,"style");return O?O[hT[k]]:null}if(q(JY,k))return t.getItemVisual(R,k)}function I(k){if(o.type==="cartesian2d"){var R=o.getBaseAxis();return bG(nt({axis:R},k))}}function L(){return e.getCurrentSeriesIndices()}function P(k){return jm(k,e)}}function M7(r){var t={};return A(r.dimensions,function(e){var a=r.getDimensionInfo(e);if(!a.isExtraCoord){var n=a.coordDim,i=t[n]=t[n]||[];i[a.coordDimIndex]=r.getDimensionIndex(e)}}),t}function Ip(r,t,e,a,n,i,o){if(!a){i.remove(t);return}var s=M_(r,t,e,a,n,i);return s&&o.setItemGraphicEl(e,s),s&&$t(s,a.focus,a.blurScope,a.emphasisDisabled),s}function M_(r,t,e,a,n,i){var o=-1,s=t;t&&hR(t,a,n)&&(o=yt(i.childrenRef(),t),t=null);var l=!t,u=t;u?u.clearStates():(u=C_(a),s&&w7(s,u)),a.morph===!1?u.disableMorphing=!0:u.disableMorphing&&(u.disableMorphing=!1),a.tooltipDisabled&&(u.tooltipDisabled=!0),gr.normal.cfg=gr.normal.conOpt=gr.emphasis.cfg=gr.emphasis.conOpt=gr.blur.cfg=gr.blur.conOpt=gr.select.cfg=gr.select.conOpt=null,gr.isLegacy=!1,L7(u,e,a,n,l,gr),D7(u,e,a,n,l),A_(r,u,e,a,gr,n,l),q(a,"info")&&(Ya(u).info=a.info);for(var f=0;f=0?i.replaceAt(u,o):i.add(u),u}function hR(r,t,e){var a=Ya(r),n=t.type,i=t.shape,o=t.style;return e.isUniversalTransitionEnabled()||n!=null&&n!==a.customGraphicType||n==="path"&&E7(i)&&cR(i)!==a.customPathData||n==="image"&&q(o,"image")&&o.image!==a.customImagePath}function D7(r,t,e,a,n){var i=e.clipPath;if(i===!1)r&&r.getClipPath()&&r.removeClipPath();else if(i){var o=r.getClipPath();o&&hR(o,i,a)&&(o=null),o||(o=C_(i),r.setClipPath(o)),A_(null,o,t,i,null,a,n)}}function L7(r,t,e,a,n,i){if(!(r.isGroup||r.type==="compoundPath")){_T(e,null,i),_T(e,Za,i);var o=i.normal.conOpt,s=i.emphasis.conOpt,l=i.blur.conOpt,u=i.select.conOpt;if(o!=null||s!=null||u!=null||l!=null){var f=r.getTextContent();if(o===!1)f&&r.removeTextContent();else{o=i.normal.conOpt=o||{type:"text"},f?f.clearStates():(f=C_(o),r.setTextContent(f)),A_(null,f,t,o,null,a,n);for(var v=o&&o.style,h=0;h=f;c--){var d=t.childAt(c);P7(t,d,n)}}}function P7(r,t,e){t&&Tc(t,Ya(r).option,e)}function R7(r){new Ja(r.oldChildren,r.newChildren,ST,ST,r).add(xT).update(xT).remove(k7).execute()}function ST(r,t){var e=r&&r.name;return e??x7+t}function xT(r,t){var e=this.context,a=r!=null?e.newChildren[r]:null,n=t!=null?e.oldChildren[t]:null;M_(e.api,n,e.dataIndex,a,e.seriesModel,e.group)}function k7(r){var t=this.context,e=t.oldChildren[r];e&&Tc(e,Ya(e).option,t.seriesModel)}function cR(r){return r&&(r.pathData||r.d)}function E7(r){return r&&(q(r,"pathData")||q(r,"d"))}function O7(r){r.registerChartView(T7),r.registerSeriesModel(QY)}var Di=bt(),bT=et,Pp=$,L_=(function(){function r(){this._dragging=!1,this.animationThreshold=15}return r.prototype.render=function(t,e,a,n){var i=e.get("value"),o=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=a,!(!n&&this._lastValue===i&&this._lastStatus===o)){this._lastValue=i,this._lastStatus=o;var s=this._group,l=this._handle;if(!o||o==="hide"){s&&s.hide(),l&&l.hide();return}s&&s.show(),l&&l.show();var u={};this.makeElOption(u,i,t,e,a);var f=u.graphicKey;f!==this._lastGraphicKey&&this.clear(a),this._lastGraphicKey=f;var v=this._moveAnimation=this.determineAnimation(t,e);if(!s)s=this._group=new rt,this.createPointerEl(s,u,t,e),this.createLabelEl(s,u,t,e),a.getZr().add(s);else{var h=pt(wT,e,v);this.updatePointerEl(s,u,h),this.updateLabelEl(s,u,h,e)}CT(s,e,!0),this._renderHandle(i)}},r.prototype.remove=function(t){this.clear(t)},r.prototype.dispose=function(t){this.clear(t)},r.prototype.determineAnimation=function(t,e){var a=e.get("animation"),n=t.axis,i=n.type==="category",o=e.get("snap");if(!o&&!i)return!1;if(a==="auto"||a==null){var s=this.animationThreshold;if(i&&n.getBandWidth()>s)return!0;if(o){var l=j0(t).seriesDataCount,u=n.getExtent();return Math.abs(u[0]-u[1])/l>s}return!1}return a===!0},r.prototype.makeElOption=function(t,e,a,n,i){},r.prototype.createPointerEl=function(t,e,a,n){var i=e.pointer;if(i){var o=Di(t).pointerEl=new ao[i.type](bT(e.pointer));t.add(o)}},r.prototype.createLabelEl=function(t,e,a,n){if(e.label){var i=Di(t).labelEl=new Mt(bT(e.label));t.add(i),TT(i,n)}},r.prototype.updatePointerEl=function(t,e,a){var n=Di(t).pointerEl;n&&e.pointer&&(n.setStyle(e.pointer.style),a(n,{shape:e.pointer.shape}))},r.prototype.updateLabelEl=function(t,e,a,n){var i=Di(t).labelEl;i&&(i.setStyle(e.label.style),a(i,{x:e.label.x,y:e.label.y}),TT(i,n))},r.prototype._renderHandle=function(t){if(!(this._dragging||!this.updateHandleTransform)){var e=this._axisPointerModel,a=this._api.getZr(),n=this._handle,i=e.getModel("handle"),o=e.get("status");if(!i.get("show")||!o||o==="hide"){n&&a.remove(n),this._handle=null;return}var s;this._handle||(s=!0,n=this._handle=As(i.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(u){qa(u.event)},onmousedown:Pp(this._onHandleDragMove,this,0,0),drift:Pp(this._onHandleDragMove,this),ondragend:Pp(this._onHandleDragEnd,this)}),a.add(n)),CT(n,e,!1),n.setStyle(i.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var l=i.get("size");W(l)||(l=[l,l]),n.scaleX=l[0]/2,n.scaleY=l[1]/2,Rs(this,"_doDispatchAxisPointer",i.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,s)}},r.prototype._moveHandleToValue=function(t,e){wT(this._axisPointerModel,!e&&this._moveAnimation,this._handle,Rp(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},r.prototype._onHandleDragMove=function(t,e){var a=this._handle;if(a){this._dragging=!0;var n=this.updateHandleTransform(Rp(a),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,a.stopAnimation(),a.attr(Rp(n)),Di(a).lastProp=null,this._doDispatchAxisPointer()}},r.prototype._doDispatchAxisPointer=function(){var t=this._handle;if(t){var e=this._payloadInfo,a=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:e.cursorPoint[0],y:e.cursorPoint[1],tooltipOption:e.tooltipOption,axesInfo:[{axisDim:a.axis.dim,axisIndex:a.componentIndex}]})}},r.prototype._onHandleDragEnd=function(){this._dragging=!1;var t=this._handle;if(t){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},r.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),a=this._group,n=this._handle;e&&a&&(this._lastGraphicKey=null,a&&e.remove(a),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null),uu(this,"_doDispatchAxisPointer")},r.prototype.doClear=function(){},r.prototype.buildLabel=function(t,e,a){return a=a||0,{x:t[a],y:t[1-a],width:e[a],height:e[1-a]}},r})();function wT(r,t,e,a){dR(Di(e).lastProp,a)||(Di(e).lastProp=a,t?It(e,a,r):(e.stopAnimation(),e.attr(a)))}function dR(r,t){if(it(r)&&it(t)){var e=!0;return A(t,function(a,n){e=e&&dR(r[n],a)}),!!e}else return r===t}function TT(r,t){r[t.get(["label","show"])?"show":"hide"]()}function Rp(r){return{x:r.x||0,y:r.y||0,rotation:r.rotation||0}}function CT(r,t,e){var a=t.get("z"),n=t.get("zlevel");r&&r.traverse(function(i){i.type!=="group"&&(a!=null&&(i.z=a),n!=null&&(i.zlevel=n),i.silent=e)})}function I_(r){var t=r.get("type"),e=r.getModel(t+"Style"),a;return t==="line"?(a=e.getLineStyle(),a.fill=null):t==="shadow"&&(a=e.getAreaStyle(),a.stroke=null),a}function pR(r,t,e,a,n){var i=e.get("value"),o=gR(i,t.axis,t.ecModel,e.get("seriesDataIndices"),{precision:e.get(["label","precision"]),formatter:e.get(["label","formatter"])}),s=e.getModel("label"),l=Ls(s.get("padding")||0),u=s.getFont(),f=$h(o,u),v=n.position,h=f.width+l[1]+l[3],c=f.height+l[0]+l[2],d=n.align;d==="right"&&(v[0]-=h),d==="center"&&(v[0]-=h/2);var p=n.verticalAlign;p==="bottom"&&(v[1]-=c),p==="middle"&&(v[1]-=c/2),N7(v,h,c,a);var g=s.get("backgroundColor");(!g||g==="auto")&&(g=t.get(["axisLine","lineStyle","color"])),r.label={x:v[0],y:v[1],style:Ft(s,{text:o,font:u,fill:s.getTextColor(),padding:l,backgroundColor:g}),z2:10}}function N7(r,t,e,a){var n=a.getWidth(),i=a.getHeight();r[0]=Math.min(r[0]+t,n)-t,r[1]=Math.min(r[1]+e,i)-e,r[0]=Math.max(r[0],0),r[1]=Math.max(r[1],0)}function gR(r,t,e,a,n){r=t.scale.parse(r);var i=t.scale.getLabel({value:r},{precision:n.precision}),o=n.formatter;if(o){var s={value:uh(t,{value:r}),axisDimension:t.dim,axisIndex:t.index,seriesData:[]};A(a,function(l){var u=e.getSeriesByIndex(l.seriesIndex),f=l.dataIndexInside,v=u&&u.getDataParams(f);v&&s.seriesData.push(v)}),X(o)?i=o.replace("{value}",i):tt(o)&&(i=o(s))}return i}function P_(r,t,e){var a=me();return rn(a,a,e.rotation),Yr(a,a,e.position),Wr([r.dataToCoord(t),(e.labelOffset||0)+(e.labelDirection||1)*(e.labelMargin||0)],a)}function yR(r,t,e,a,n,i){var o=Ye.innerTextLayout(e.rotation,0,e.labelDirection);e.labelMargin=n.get(["label","margin"]),pR(t,a,n,i,{position:P_(a.axis,r,e),align:o.textAlign,verticalAlign:o.textVerticalAlign})}function R_(r,t,e){return e=e||0,{x1:r[e],y1:r[1-e],x2:t[e],y2:t[1-e]}}function mR(r,t,e){return e=e||0,{x:r[e],y:r[1-e],width:t[e],height:t[1-e]}}function AT(r,t,e,a,n,i){return{cx:r,cy:t,r0:e,r:a,startAngle:n,endAngle:i,clockwise:!0}}var B7=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.makeElOption=function(e,a,n,i,o){var s=n.axis,l=s.grid,u=i.get("type"),f=MT(l,s).getOtherAxis(s).getGlobalExtent(),v=s.toGlobalCoord(s.dataToCoord(a,!0));if(u&&u!=="none"){var h=I_(i),c=z7[u](s,v,f);c.style=h,e.graphicKey=c.type,e.pointer=c}var d=_h(l.getRect(),n);yR(a,e,d,n,i,o)},t.prototype.getHandleTransform=function(e,a,n){var i=_h(a.axis.grid.getRect(),a,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var o=P_(a.axis,e,i);return{x:o[0],y:o[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},t.prototype.updateHandleTransform=function(e,a,n,i){var o=n.axis,s=o.grid,l=o.getGlobalExtent(!0),u=MT(s,o).getOtherAxis(o).getGlobalExtent(),f=o.dim==="x"?0:1,v=[e.x,e.y];v[f]+=a[f],v[f]=Math.min(l[1],v[f]),v[f]=Math.max(l[0],v[f]);var h=(u[1]+u[0])/2,c=[h,h];c[f]=v[f];var d=[{verticalAlign:"middle"},{align:"center"}];return{x:v[0],y:v[1],rotation:e.rotation,cursorPoint:c,tooltipOption:d[f]}},t})(L_);function MT(r,t){var e={};return e[t.dim+"AxisIndex"]=t.index,r.getCartesian(e)}var z7={line:function(r,t,e){var a=R_([t,e[0]],[t,e[1]],DT(r));return{type:"Line",subPixelOptimize:!0,shape:a}},shadow:function(r,t,e){var a=Math.max(1,r.getBandWidth()),n=e[1]-e[0];return{type:"Rect",shape:mR([t-a/2,e[0]],[a,n],DT(r))}}};function DT(r){return r.dim==="x"?0:1}var V7=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="axisPointer",t.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:B.color.border,width:1,type:"dashed"},shadowStyle:{color:B.color.shadowTint},label:{show:!0,formatter:null,precision:"auto",margin:3,color:B.color.neutral00,padding:[5,7,5,7],backgroundColor:B.color.accent60,borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:B.color.accent40,throttle:40}},t})(xt),Fa=bt(),G7=A;function _R(r,t,e){if(!Ct.node){var a=t.getZr();Fa(a).records||(Fa(a).records={}),F7(a,t);var n=Fa(a).records[r]||(Fa(a).records[r]={});n.handler=e}}function F7(r,t){if(Fa(r).initialized)return;Fa(r).initialized=!0,e("click",pt(LT,"click")),e("mousemove",pt(LT,"mousemove")),e("globalout",W7);function e(a,n){r.on(a,function(i){var o=U7(t);G7(Fa(r).records,function(s){s&&n(s,i,o.dispatchAction)}),H7(o.pendings,t)})}}function H7(r,t){var e=r.showTip.length,a=r.hideTip.length,n;e?n=r.showTip[e-1]:a&&(n=r.hideTip[a-1]),n&&(n.dispatchAction=null,t.dispatchAction(n))}function W7(r,t,e){r.handler("leave",null,e)}function LT(r,t,e,a){t.handler(r,e,a)}function U7(r){var t={showTip:[],hideTip:[]},e=function(a){var n=t[a.type];n?n.push(a):(a.dispatchAction=e,r.dispatchAction(a))};return{dispatchAction:e,pendings:t}}function $y(r,t){if(!Ct.node){var e=t.getZr(),a=(Fa(e).records||{})[r];a&&(Fa(e).records[r]=null)}}var Y7=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){var i=a.getComponent("tooltip"),o=e.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";_R("axisPointer",n,function(s,l,u){o!=="none"&&(s==="leave"||o.indexOf(s)>=0)&&u({type:"updateAxisPointer",currTrigger:s,x:l&&l.offsetX,y:l&&l.offsetY})})},t.prototype.remove=function(e,a){$y("axisPointer",a)},t.prototype.dispose=function(e,a){$y("axisPointer",a)},t.type="axisPointer",t})(Wt);function SR(r,t){var e=[],a=r.seriesIndex,n;if(a==null||!(n=t.getSeriesByIndex(a)))return{point:[]};var i=n.getData(),o=Zi(i,r);if(o==null||o<0||W(o))return{point:[]};var s=i.getItemGraphicEl(o),l=n.coordinateSystem;if(n.getTooltipPosition)e=n.getTooltipPosition(o)||[];else if(l&&l.dataToPoint)if(r.isStacked){var u=l.getBaseAxis(),f=l.getOtherAxis(u),v=f.dim,h=u.dim,c=v==="x"||v==="radius"?1:0,d=i.mapDimension(h),p=[];p[c]=i.get(d,o),p[1-c]=i.get(i.getCalculationInfo("stackResultDimension"),o),e=l.dataToPoint(p)||[]}else e=l.dataToPoint(i.getValues(U(l.dimensions,function(y){return i.mapDimension(y)}),o))||[];else if(s){var g=s.getBoundingRect().clone();g.applyTransform(s.transform),e=[g.x+g.width/2,g.y+g.height/2]}return{point:e,el:s}}var IT=bt();function Z7(r,t,e){var a=r.currTrigger,n=[r.x,r.y],i=r,o=r.dispatchAction||$(e.dispatchAction,e),s=t.getComponent("axisPointer").coordSysAxesInfo;if(s){Mv(n)&&(n=SR({seriesIndex:i.seriesIndex,dataIndex:i.dataIndex},t).point);var l=Mv(n),u=i.axesInfo,f=s.axesInfo,v=a==="leave"||Mv(n),h={},c={},d={list:[],map:{}},p={showPointer:pt($7,c),showTooltip:pt(q7,d)};A(s.coordSysMap,function(y,m){var _=l||y.containPoint(n);A(s.coordSysAxesInfo[m],function(S,x){var b=S.axis,w=Q7(u,S);if(!v&&_&&(!u||w)){var T=w&&w.value;T==null&&!l&&(T=b.pointToData(n)),T!=null&&PT(S,T,p,!1,h)}})});var g={};return A(f,function(y,m){var _=y.linkGroup;_&&!c[m]&&A(_.axesInfo,function(S,x){var b=c[x];if(S!==y&&b){var w=b.value;_.mapper&&(w=y.axis.scale.parse(_.mapper(w,RT(S),RT(y)))),g[y.key]=w}})}),A(g,function(y,m){PT(f[m],y,p,!0,h)}),j7(c,f,h),K7(d,n,r,o),J7(f,o,e),h}}function PT(r,t,e,a,n){var i=r.axis;if(!(i.scale.isBlank()||!i.containData(t))){if(!r.involveSeries){e.showPointer(r,t);return}var o=X7(t,r),s=o.payloadBatch,l=o.snapToValue;s[0]&&n.seriesIndex==null&&G(n,s[0]),!a&&r.snap&&i.containData(l)&&l!=null&&(t=l),e.showPointer(r,t,s),e.showTooltip(r,o,l)}}function X7(r,t){var e=t.axis,a=e.dim,n=r,i=[],o=Number.MAX_VALUE,s=-1;return A(t.seriesModels,function(l,u){var f=l.getData().mapDimensionsAll(a),v,h;if(l.getAxisTooltipData){var c=l.getAxisTooltipData(f,r,e);h=c.dataIndices,v=c.nestestValue}else{if(h=l.indicesOfNearest(a,f[0],r,e.type==="category"?.5:null),!h.length)return;v=l.getData().get(f[0],h[0])}if(!(v==null||!isFinite(v))){var d=r-v,p=Math.abs(d);p<=o&&((p=0&&s<0)&&(o=p,s=d,n=v,i.length=0),A(h,function(g){i.push({seriesIndex:l.seriesIndex,dataIndexInside:g,dataIndex:l.getData().getRawIndex(g)})}))}}),{payloadBatch:i,snapToValue:n}}function $7(r,t,e,a){r[t.key]={value:e,payloadBatch:a}}function q7(r,t,e,a){var n=e.payloadBatch,i=t.axis,o=i.model,s=t.axisPointerModel;if(!(!t.triggerTooltip||!n.length)){var l=t.coordSys.model,u=mu(l),f=r.map[u];f||(f=r.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},r.list.push(f)),f.dataByAxis.push({axisDim:i.dim,axisIndex:o.componentIndex,axisType:o.type,axisId:o.id,value:a,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:n.slice()})}}function j7(r,t,e){var a=e.axesInfo=[];A(t,function(n,i){var o=n.axisPointerModel.option,s=r[i];s?(!n.useHandle&&(o.status="show"),o.value=s.value,o.seriesDataIndices=(s.payloadBatch||[]).slice()):!n.useHandle&&(o.status="hide"),o.status==="show"&&a.push({axisDim:n.axis.dim,axisIndex:n.axis.model.componentIndex,value:o.value})})}function K7(r,t,e,a){if(Mv(t)||!r.list.length){a({type:"hideTip"});return}var n=((r.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};a({type:"showTip",escapeConnect:!0,x:t[0],y:t[1],tooltipOption:e.tooltipOption,position:e.position,dataIndexInside:n.dataIndexInside,dataIndex:n.dataIndex,seriesIndex:n.seriesIndex,dataByCoordSys:r.list})}function J7(r,t,e){var a=e.getZr(),n="axisPointerLastHighlights",i=IT(a)[n]||{},o=IT(a)[n]={};A(r,function(u,f){var v=u.axisPointerModel.option;v.status==="show"&&u.triggerEmphasis&&A(v.seriesDataIndices,function(h){var c=h.seriesIndex+" | "+h.dataIndex;o[c]=h})});var s=[],l=[];A(i,function(u,f){!o[f]&&l.push(u)}),A(o,function(u,f){!i[f]&&s.push(u)}),l.length&&e.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&e.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}function Q7(r,t){for(var e=0;e<(r||[]).length;e++){var a=r[e];if(t.axis.dim===a.axisDim&&t.axis.model.componentIndex===a.axisIndex)return a}}function RT(r){var t=r.axis.model,e={},a=e.axisDim=r.axis.dim;return e.axisIndex=e[a+"AxisIndex"]=t.componentIndex,e.axisName=e[a+"AxisName"]=t.name,e.axisId=e[a+"AxisId"]=t.id,e}function Mv(r){return!r||r[0]==null||isNaN(r[0])||r[1]==null||isNaN(r[1])}function Xu(r){so.registerAxisPointerClass("CartesianAxisPointer",B7),r.registerComponentModel(V7),r.registerComponentView(Y7),r.registerPreprocessor(function(t){if(t){(!t.axisPointer||t.axisPointer.length===0)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!W(e)&&(t.axisPointer.link=[e])}}),r.registerProcessor(r.PRIORITY.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=t4(t,e)}),r.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},Z7)}function t9(r){_t(UI),_t(Xu)}var e9=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.makeElOption=function(e,a,n,i,o){var s=n.axis;s.dim==="angle"&&(this.animationThreshold=Math.PI/18);var l=s.polar,u=l.getOtherAxis(s),f=u.getExtent(),v=s.dataToCoord(a),h=i.get("type");if(h&&h!=="none"){var c=I_(i),d=a9[h](s,l,v,f);d.style=c,e.graphicKey=d.type,e.pointer=d}var p=i.get(["label","margin"]),g=r9(a,n,i,l,p);pR(e,n,i,o,g)},t})(L_);function r9(r,t,e,a,n){var i=t.axis,o=i.dataToCoord(r),s=a.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l=a.getRadiusAxis().getExtent(),u,f,v;if(i.dim==="radius"){var h=me();rn(h,h,s),Yr(h,h,[a.cx,a.cy]),u=Wr([o,-n],h);var c=t.getModel("axisLabel").get("rotate")||0,d=Ye.innerTextLayout(s,c*Math.PI/180,-1);f=d.textAlign,v=d.textVerticalAlign}else{var p=l[1];u=a.coordToPoint([p+n,o]);var g=a.cx,y=a.cy;f=Math.abs(u[0]-g)/p<.3?"center":u[0]>g?"left":"right",v=Math.abs(u[1]-y)/p<.3?"middle":u[1]>y?"top":"bottom"}return{position:u,align:f,verticalAlign:v}}var a9={line:function(r,t,e,a){return r.dim==="angle"?{type:"Line",shape:R_(t.coordToPoint([a[0],e]),t.coordToPoint([a[1],e]))}:{type:"Circle",shape:{cx:t.cx,cy:t.cy,r:e}}},shadow:function(r,t,e,a){var n=Math.max(1,r.getBandWidth()),i=Math.PI/180;return r.dim==="angle"?{type:"Sector",shape:AT(t.cx,t.cy,a[0],a[1],(-e-n/2)*i,(-e+n/2)*i)}:{type:"Sector",shape:AT(t.cx,t.cy,e-n/2,e+n/2,0,Math.PI*2)}}},n9=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.findAxisModel=function(e){var a,n=this.ecModel;return n.eachComponent(e,function(i){i.getCoordSysModel()===this&&(a=i)},this),a},t.type="polar",t.dependencies=["radiusAxis","angleAxis"],t.defaultOption={z:0,center:["50%","50%"],radius:"80%"},t})(xt),k_=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.getCoordSysModel=function(){return this.getReferringComponents("polar",jt).models[0]},t.type="polarAxis",t})(xt);Qt(k_,Ns);var i9=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="angleAxis",t})(k_),o9=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="radiusAxis",t})(k_),E_=(function(r){N(t,r);function t(e,a){return r.call(this,"radius",e,a)||this}return t.prototype.pointToData=function(e,a){return this.polar.pointToData(e,a)[this.dim==="radius"?0:1]},t})(kr);E_.prototype.dataToRadius=kr.prototype.dataToCoord;E_.prototype.radiusToData=kr.prototype.coordToData;var s9=bt(),O_=(function(r){N(t,r);function t(e,a){return r.call(this,"angle",e,a||[0,360])||this}return t.prototype.pointToData=function(e,a){return this.polar.pointToData(e,a)[this.dim==="radius"?0:1]},t.prototype.calculateCategoryInterval=function(){var e=this,a=e.getLabelModel(),n=e.scale,i=n.getExtent(),o=n.count();if(i[1]-i[0]<1)return 0;var s=i[0],l=e.dataToCoord(s+1)-e.dataToCoord(s),u=Math.abs(l),f=$h(s==null?"":s+"",a.getFont(),"center","top"),v=Math.max(f.height,7),h=v/u;isNaN(h)&&(h=1/0);var c=Math.max(0,Math.floor(h)),d=s9(e.model),p=d.lastAutoInterval,g=d.lastTickCount;return p!=null&&g!=null&&Math.abs(p-c)<=1&&Math.abs(g-o)<=1&&p>c?c=p:(d.lastTickCount=o,d.lastAutoInterval=c),c},t})(kr);O_.prototype.dataToAngle=kr.prototype.dataToCoord;O_.prototype.angleToData=kr.prototype.coordToData;var xR=["radius","angle"],l9=(function(){function r(t){this.dimensions=xR,this.type="polar",this.cx=0,this.cy=0,this._radiusAxis=new E_,this._angleAxis=new O_,this.axisPointerEnabled=!0,this.name=t||"",this._radiusAxis.polar=this._angleAxis.polar=this}return r.prototype.containPoint=function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},r.prototype.containData=function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},r.prototype.getAxis=function(t){var e="_"+t+"Axis";return this[e]},r.prototype.getAxes=function(){return[this._radiusAxis,this._angleAxis]},r.prototype.getAxesByScale=function(t){var e=[],a=this._angleAxis,n=this._radiusAxis;return a.scale.type===t&&e.push(a),n.scale.type===t&&e.push(n),e},r.prototype.getAngleAxis=function(){return this._angleAxis},r.prototype.getRadiusAxis=function(){return this._radiusAxis},r.prototype.getOtherAxis=function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},r.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},r.prototype.getTooltipAxes=function(t){var e=t!=null&&t!=="auto"?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},r.prototype.dataToPoint=function(t,e,a){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)],a)},r.prototype.pointToData=function(t,e,a){a=a||[];var n=this.pointToCoord(t);return a[0]=this._radiusAxis.radiusToData(n[0],e),a[1]=this._angleAxis.angleToData(n[1],e),a},r.prototype.pointToCoord=function(t){var e=t[0]-this.cx,a=t[1]-this.cy,n=this.getAngleAxis(),i=n.getExtent(),o=Math.min(i[0],i[1]),s=Math.max(i[0],i[1]);n.inverse?o=s-360:s=o+360;var l=Math.sqrt(e*e+a*a);e/=l,a/=l;for(var u=Math.atan2(-a,e)/Math.PI*180,f=us;)u+=f*360;return[l,u]},r.prototype.coordToPoint=function(t,e){e=e||[];var a=t[0],n=t[1]/180*Math.PI;return e[0]=Math.cos(n)*a+this.cx,e[1]=-Math.sin(n)*a+this.cy,e},r.prototype.getArea=function(){var t=this.getAngleAxis(),e=this.getRadiusAxis(),a=e.getExtent().slice();a[0]>a[1]&&a.reverse();var n=t.getExtent(),i=Math.PI/180,o=1e-4;return{cx:this.cx,cy:this.cy,r0:a[0],r:a[1],startAngle:-n[0]*i,endAngle:-n[1]*i,clockwise:t.inverse,contain:function(s,l){var u=s-this.cx,f=l-this.cy,v=u*u+f*f,h=this.r,c=this.r0;return h!==c&&v-o<=h*h&&v+o>=c*c},x:this.cx-a[1],y:this.cy-a[1],width:a[1]*2,height:a[1]*2}},r.prototype.convertToPixel=function(t,e,a){var n=kT(e);return n===this?this.dataToPoint(a):null},r.prototype.convertFromPixel=function(t,e,a){var n=kT(e);return n===this?this.pointToData(a):null},r})();function kT(r){var t=r.seriesModel,e=r.polarModel;return e&&e.coordinateSystem||t&&t.coordinateSystem}function u9(r,t,e){var a=t.get("center"),n=de(t,e).refContainer;r.cx=Z(a[0],n.width)+n.x,r.cy=Z(a[1],n.height)+n.y;var i=r.getRadiusAxis(),o=Math.min(n.width,n.height)/2,s=t.get("radius");s==null?s=[0,"100%"]:W(s)||(s=[0,s]);var l=[Z(s[0],o),Z(s[1],o)];i.inverse?i.setExtent(l[1],l[0]):i.setExtent(l[0],l[1])}function f9(r,t){var e=this,a=e.getAngleAxis(),n=e.getRadiusAxis();if(a.scale.setExtent(1/0,-1/0),n.scale.setExtent(1/0,-1/0),r.eachSeries(function(s){if(s.coordinateSystem===e){var l=s.getData();A(fh(l,"radius"),function(u){n.scale.unionExtentFromData(l,u)}),A(fh(l,"angle"),function(u){a.scale.unionExtentFromData(l,u)})}}),Ji(a.scale,a.model),Ji(n.scale,n.model),a.type==="category"&&!a.onBand){var i=a.getExtent(),o=360/a.scale.count();a.inverse?i[1]+=o:i[1]-=o,a.setExtent(i[0],i[1])}}function v9(r){return r.mainType==="angleAxis"}function ET(r,t){var e;if(r.type=t.get("type"),r.scale=Fu(t),r.onBand=t.get("boundaryGap")&&r.type==="category",r.inverse=t.get("inverse"),v9(t)){r.inverse=r.inverse!==t.get("clockwise");var a=t.get("startAngle"),n=(e=t.get("endAngle"))!==null&&e!==void 0?e:a+(r.inverse?-360:360);r.setExtent(a,n)}t.axis=r,r.model=t}var h9={dimensions:xR,create:function(r,t){var e=[];return r.eachComponent("polar",function(a,n){var i=new l9(n+"");i.update=f9;var o=i.getRadiusAxis(),s=i.getAngleAxis(),l=a.findAxisModel("radiusAxis"),u=a.findAxisModel("angleAxis");ET(o,l),ET(s,u),u9(i,a,t),e.push(i),a.coordinateSystem=i,i.model=a}),r.eachSeries(function(a){if(a.get("coordinateSystem")==="polar"){var n=a.getReferringComponents("polar",jt).models[0];a.coordinateSystem=n.coordinateSystem}}),e}},c9=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function $f(r,t,e){t[1]>t[0]&&(t=t.slice().reverse());var a=r.coordToPoint([t[0],e]),n=r.coordToPoint([t[1],e]);return{x1:a[0],y1:a[1],x2:n[0],y2:n[1]}}function qf(r){var t=r.getRadiusAxis();return t.inverse?0:1}function OT(r){var t=r[0],e=r[r.length-1];t&&e&&Math.abs(Math.abs(t.coord-e.coord)-360)<1e-4&&r.pop()}var d9=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.axisPointerClass="PolarAxisPointer",e}return t.prototype.render=function(e,a){if(this.group.removeAll(),!!e.get("show")){var n=e.axis,i=n.polar,o=i.getRadiusAxis().getExtent(),s=n.getTicksCoords({breakTicks:"none"}),l=n.getMinorTicksCoords(),u=U(n.getViewLabels(),function(f){f=et(f);var v=n.scale,h=v.type==="ordinal"?v.getRawOrdinalNumber(f.tickValue):f.tickValue;return f.coord=n.dataToCoord(h),f});OT(u),OT(s),A(c9,function(f){e.get([f,"show"])&&(!n.scale.isBlank()||f==="axisLine")&&p9[f](this.group,e,i,s,l,o,u)},this)}},t.type="angleAxis",t})(so),p9={axisLine:function(r,t,e,a,n,i){var o=t.getModel(["axisLine","lineStyle"]),s=e.getAngleAxis(),l=Math.PI/180,u=s.getExtent(),f=qf(e),v=f?0:1,h,c=Math.abs(u[1]-u[0])===360?"Circle":"Arc";i[v]===0?h=new ao[c]({shape:{cx:e.cx,cy:e.cy,r:i[f],startAngle:-u[0]*l,endAngle:-u[1]*l,clockwise:s.inverse},style:o.getLineStyle(),z2:1,silent:!0}):h=new ws({shape:{cx:e.cx,cy:e.cy,r:i[f],r0:i[v]},style:o.getLineStyle(),z2:1,silent:!0}),h.style.fill=null,r.add(h)},axisTick:function(r,t,e,a,n,i){var o=t.getModel("axisTick"),s=(o.get("inside")?-1:1)*o.get("length"),l=i[qf(e)],u=U(a,function(f){return new ne({shape:$f(e,[l,l+s],f.coord)})});r.add(or(u,{style:nt(o.getModel("lineStyle").getLineStyle(),{stroke:t.get(["axisLine","lineStyle","color"])})}))},minorTick:function(r,t,e,a,n,i){if(n.length){for(var o=t.getModel("axisTick"),s=t.getModel("minorTick"),l=(o.get("inside")?-1:1)*s.get("length"),u=i[qf(e)],f=[],v=0;vy?"left":"right",S=Math.abs(g[1]-m)/p<.3?"middle":g[1]>m?"top":"bottom";if(s&&s[d]){var x=s[d];it(x)&&x.textStyle&&(c=new wt(x.textStyle,l,l.ecModel))}var b=new Mt({silent:Ye.isLabelSilent(t),style:Ft(c,{x:g[0],y:g[1],fill:c.getTextColor()||t.get(["axisLine","lineStyle","color"]),text:v.formattedLabel,align:_,verticalAlign:S})});if(r.add(b),nn({el:b,componentModel:t,itemName:v.formattedLabel,formatterParamsExtra:{isTruncated:function(){return b.isTruncated},value:v.rawLabel,tickIndex:h}}),f){var w=Ye.makeAxisEventDataBase(t);w.targetType="axisLabel",w.value=v.rawLabel,ft(b).eventData=w}},this)},splitLine:function(r,t,e,a,n,i){var o=t.getModel("splitLine"),s=o.getModel("lineStyle"),l=s.get("color"),u=0;l=l instanceof Array?l:[l];for(var f=[],v=0;v=0?"p":"n",k=C;x&&(a[f][L]||(a[f][L]={p:C,n:C}),k=a[f][L][P]);var R=void 0,O=void 0,E=void 0,z=void 0;if(d.dim==="radius"){var V=d.dataToCoord(I)-C,F=l.dataToCoord(L);Math.abs(V)=z})}}})}function x9(r){var t={};A(r,function(a,n){var i=a.getData(),o=a.coordinateSystem,s=o.getBaseAxis(),l=wR(o,s),u=s.getExtent(),f=s.type==="category"?s.getBandWidth():Math.abs(u[1]-u[0])/i.count(),v=t[l]||{bandWidth:f,remainedWidth:f,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},h=v.stacks;t[l]=v;var c=bR(a);h[c]||v.autoWidthCount++,h[c]=h[c]||{width:0,maxWidth:0};var d=Z(a.get("barWidth"),f),p=Z(a.get("barMaxWidth"),f),g=a.get("barGap"),y=a.get("barCategoryGap");d&&!h[c].width&&(d=Math.min(v.remainedWidth,d),h[c].width=d,v.remainedWidth-=d),p&&(h[c].maxWidth=p),g!=null&&(v.gap=g),y!=null&&(v.categoryGap=y)});var e={};return A(t,function(a,n){e[n]={};var i=a.stacks,o=a.bandWidth,s=Z(a.categoryGap,o),l=Z(a.gap,1),u=a.remainedWidth,f=a.autoWidthCount,v=(u-s)/(f+(f-1)*l);v=Math.max(v,0),A(i,function(p,g){var y=p.maxWidth;y&&y=e.y&&t[1]<=e.y+e.height:a.contain(a.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},r.prototype.pointToData=function(t,e,a){a=a||[];var n=this.getAxis();return a[0]=n.coordToData(n.toLocalCoord(t[n.orient==="horizontal"?0:1])),a},r.prototype.dataToPoint=function(t,e,a){var n=this.getAxis(),i=this.getRect();a=a||[];var o=n.orient==="horizontal"?0:1;return t instanceof Array&&(t=t[0]),a[o]=n.toGlobalCoord(n.dataToCoord(+t)),a[1-o]=o===0?i.y+i.height/2:i.x+i.width/2,a},r.prototype.convertToPixel=function(t,e,a){var n=NT(e);return n===this?this.dataToPoint(a):null},r.prototype.convertFromPixel=function(t,e,a){var n=NT(e);return n===this?this.pointToData(a):null},r})();function NT(r){var t=r.seriesModel,e=r.singleAxisModel;return e&&e.coordinateSystem||t&&t.coordinateSystem}function P9(r,t){var e=[];return r.eachComponent("singleAxis",function(a,n){var i=new I9(a,r,t);i.name="single_"+n,i.resize(a,t),a.coordinateSystem=i,e.push(i)}),r.eachSeries(function(a){if(a.get("coordinateSystem")==="singleAxis"){var n=a.getReferringComponents("singleAxis",jt).models[0];a.coordinateSystem=n&&n.coordinateSystem}}),e}var R9={create:P9,dimensions:TR},BT=["x","y"],k9=["width","height"],E9=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.makeElOption=function(e,a,n,i,o){var s=n.axis,l=s.coordinateSystem,u=kp(l,1-Lh(s)),f=l.dataToPoint(a)[0],v=i.get("type");if(v&&v!=="none"){var h=I_(i),c=O9[v](s,f,u);c.style=h,e.graphicKey=c.type,e.pointer=c}var d=qy(n);yR(a,e,d,n,i,o)},t.prototype.getHandleTransform=function(e,a,n){var i=qy(a,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var o=P_(a.axis,e,i);return{x:o[0],y:o[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},t.prototype.updateHandleTransform=function(e,a,n,i){var o=n.axis,s=o.coordinateSystem,l=Lh(o),u=kp(s,l),f=[e.x,e.y];f[l]+=a[l],f[l]=Math.min(u[1],f[l]),f[l]=Math.max(u[0],f[l]);var v=kp(s,1-l),h=(v[1]+v[0])/2,c=[h,h];return c[l]=f[l],{x:f[0],y:f[1],rotation:e.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}},t})(L_),O9={line:function(r,t,e){var a=R_([t,e[0]],[t,e[1]],Lh(r));return{type:"Line",subPixelOptimize:!0,shape:a}},shadow:function(r,t,e){var a=r.getBandWidth(),n=e[1]-e[0];return{type:"Rect",shape:mR([t-a/2,e[0]],[a,n],Lh(r))}}};function Lh(r){return r.isHorizontal()?0:1}function kp(r,t){var e=r.getRect();return[e[BT[t]],e[BT[t]]+e[k9[t]]]}var N9=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="single",t})(Wt);function B9(r){_t(Xu),so.registerAxisPointerClass("SingleAxisPointer",E9),r.registerComponentView(N9),r.registerComponentView(M9),r.registerComponentModel(Dv),ds(r,"single",Dv,Dv.defaultOption),r.registerCoordinateSystem("single",R9)}var z9=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e,a,n){var i=no(e);r.prototype.init.apply(this,arguments),zT(e,i)},t.prototype.mergeOption=function(e){r.prototype.mergeOption.apply(this,arguments),zT(this.option,e)},t.prototype.getCellSize=function(){return this.option.cellSize},t.type="calendar",t.layoutMode="box",t.defaultOption={z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:B.color.axisLine,width:1,type:"solid"}},itemStyle:{color:B.color.neutral00,borderWidth:1,borderColor:B.color.neutral10},dayLabel:{show:!0,firstDay:0,position:"start",margin:B.size.s,color:B.color.secondary},monthLabel:{show:!0,position:"start",margin:B.size.s,align:"center",formatter:null,color:B.color.secondary},yearLabel:{show:!0,position:null,margin:B.size.xl,formatter:null,color:B.color.quaternary,fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},t})(xt);function zT(r,t){var e=r.cellSize,a;W(e)?a=e:a=r.cellSize=[e,e],a.length===1&&(a[1]=a[0]);var n=U([0,1],function(i){return oz(t,i)&&(a[i]="auto"),a[i]!=null&&a[i]!=="auto"});Sa(r,t,{type:"box",ignoreSize:n})}var V9=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){var i=this.group;i.removeAll();var o=e.coordinateSystem,s=o.getRangeInfo(),l=o.getOrient(),u=a.getLocaleModel();this._renderDayRect(e,s,i),this._renderLines(e,s,l,i),this._renderYearText(e,s,l,i),this._renderMonthText(e,u,l,i),this._renderWeekText(e,u,s,l,i)},t.prototype._renderDayRect=function(e,a,n){for(var i=e.coordinateSystem,o=e.getModel("itemStyle").getItemStyle(),s=i.getCellWidth(),l=i.getCellHeight(),u=a.start.time;u<=a.end.time;u=i.getNextNDay(u,1).time){var f=i.dataToCalendarLayout([u],!1).tl,v=new St({shape:{x:f[0],y:f[1],width:s,height:l},cursor:"default",style:o});n.add(v)}},t.prototype._renderLines=function(e,a,n,i){var o=this,s=e.coordinateSystem,l=e.getModel(["splitLine","lineStyle"]).getLineStyle(),u=e.get(["splitLine","show"]),f=l.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var v=a.start,h=0;v.time<=a.end.time;h++){d(v.formatedDate),h===0&&(v=s.getDateInfo(a.start.y+"-"+a.start.m));var c=v.date;c.setMonth(c.getMonth()+1),v=s.getDateInfo(c)}d(s.getNextNDay(a.end.time,1).formatedDate);function d(p){o._firstDayOfMonth.push(s.getDateInfo(p)),o._firstDayPoints.push(s.dataToCalendarLayout([p],!1).tl);var g=o._getLinePointsOfOneWeek(e,p,n);o._tlpoints.push(g[0]),o._blpoints.push(g[g.length-1]),u&&o._drawSplitline(g,l,i)}u&&this._drawSplitline(o._getEdgesPoints(o._tlpoints,f,n),l,i),u&&this._drawSplitline(o._getEdgesPoints(o._blpoints,f,n),l,i)},t.prototype._getEdgesPoints=function(e,a,n){var i=[e[0].slice(),e[e.length-1].slice()],o=n==="horizontal"?0:1;return i[0][o]=i[0][o]-a/2,i[1][o]=i[1][o]+a/2,i},t.prototype._drawSplitline=function(e,a,n){var i=new Ae({z2:20,shape:{points:e},style:a});n.add(i)},t.prototype._getLinePointsOfOneWeek=function(e,a,n){for(var i=e.coordinateSystem,o=i.getDateInfo(a),s=[],l=0;l<7;l++){var u=i.getNextNDay(o.time,l),f=i.dataToCalendarLayout([u.time],!1);s[2*u.day]=f.tl,s[2*u.day+1]=f[n==="horizontal"?"bl":"tr"]}return s},t.prototype._formatterLabel=function(e,a){return X(e)&&e?QB(e,a):tt(e)?e(a):a.nameMap},t.prototype._yearTextPositionControl=function(e,a,n,i,o){var s=a[0],l=a[1],u=["center","bottom"];i==="bottom"?(l+=o,u=["center","top"]):i==="left"?s-=o:i==="right"?(s+=o,u=["center","top"]):l-=o;var f=0;return(i==="left"||i==="right")&&(f=Math.PI/2),{rotation:f,x:s,y:l,style:{align:u[0],verticalAlign:u[1]}}},t.prototype._renderYearText=function(e,a,n,i){var o=e.getModel("yearLabel");if(o.get("show")){var s=o.get("margin"),l=o.get("position");l||(l=n!=="horizontal"?"top":"left");var u=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],f=(u[0][0]+u[1][0])/2,v=(u[0][1]+u[1][1])/2,h=n==="horizontal"?0:1,c={top:[f,u[h][1]],bottom:[f,u[1-h][1]],left:[u[1-h][0],v],right:[u[h][0],v]},d=a.start.y;+a.end.y>+a.start.y&&(d=d+"-"+a.end.y);var p=o.get("formatter"),g={start:a.start.y,end:a.end.y,nameMap:d},y=this._formatterLabel(p,g),m=new Mt({z2:30,style:Ft(o,{text:y}),silent:o.get("silent")});m.attr(this._yearTextPositionControl(m,c[l],n,l,s)),i.add(m)}},t.prototype._monthTextPositionControl=function(e,a,n,i,o){var s="left",l="top",u=e[0],f=e[1];return n==="horizontal"?(f=f+o,a&&(s="center"),i==="start"&&(l="bottom")):(u=u+o,a&&(l="middle"),i==="start"&&(s="right")),{x:u,y:f,align:s,verticalAlign:l}},t.prototype._renderMonthText=function(e,a,n,i){var o=e.getModel("monthLabel");if(o.get("show")){var s=o.get("nameMap"),l=o.get("margin"),u=o.get("position"),f=o.get("align"),v=[this._tlpoints,this._blpoints];(!s||X(s))&&(s&&(a=Ug(s)||a),s=a.get(["time","monthAbbr"])||[]);var h=u==="start"?0:1,c=n==="horizontal"?0:1;l=u==="start"?-l:l;for(var d=f==="center",p=o.get("silent"),g=0;g=i.start.time&&n.times.end.time&&e.reverse(),e},r.prototype._getRangeInfo=function(t){var e=[this.getDateInfo(t[0]),this.getDateInfo(t[1])],a;e[0].time>e[1].time&&(a=!0,e.reverse());var n=Math.floor(e[1].time/Ep)-Math.floor(e[0].time/Ep)+1,i=new Date(e[0].time),o=i.getDate(),s=e[1].date.getDate();i.setDate(o+n-1);var l=i.getDate();if(l!==s)for(var u=i.getTime()-e[1].time>0?1:-1;(l=i.getDate())!==s&&(i.getTime()-e[1].time)*u>0;)n-=u,i.setDate(l-u);var f=Math.floor((n+e[0].day+6)/7),v=a?-f+1:f-1;return a&&e.reverse(),{range:[e[0].formatedDate,e[1].formatedDate],start:e[0],end:e[1],allDay:n,weeks:f,nthWeek:v,fweek:e[0].day,lweek:e[1].day}},r.prototype._getDateByWeeksAndDay=function(t,e,a){var n=this._getRangeInfo(a);if(t>n.weeks||t===0&&en.lweek)return null;var i=(t-1)*7-n.fweek+e,o=new Date(n.start.time);return o.setDate(+n.start.d+i),this.getDateInfo(o)},r.create=function(t,e){var a=[];return t.eachComponent("calendar",function(n){var i=new r(n,t,e);a.push(i),n.coordinateSystem=i}),t.eachComponent(function(n,i){Vu({targetModel:i,coordSysType:"calendar",coordSysProvider:WD})}),a},r.dimensions=["time","value"],r})();function Op(r){var t=r.calendarModel,e=r.seriesModel,a=t?t.coordinateSystem:e?e.coordinateSystem:null;return a}function F9(r){r.registerComponentModel(z9),r.registerComponentView(V9),r.registerCoordinateSystem("calendar",G9)}var Na={level:1,leaf:2,nonLeaf:3},Xa={none:0,all:1,body:2,corner:3};function jy(r,t,e){var a=t[dt[e]].getCell(r);return!a&&Dt(r)&&r<0&&(a=t[dt[1-e]].getUnitLayoutInfo(e,Math.round(r))),a}function CR(r){var t=r||[];return t[0]=t[0]||[],t[1]=t[1]||[],t[0][0]=t[0][1]=t[1][0]=t[1][1]=NaN,t}function AR(r,t,e,a,n){VT(r[0],t,n,e,a,0),VT(r[1],t,n,e,a,1)}function VT(r,t,e,a,n,i){r[0]=1/0,r[1]=-1/0;var o=a[i],s=W(o)?o:[o],l=s.length,u=!!e;if(l>=1?(GT(r,t,s,u,n,i,0),l>1&>(r,t,s,u,n,i,l-1)):r[0]=r[1]=NaN,u){var f=-n[dt[1-i]].getLocatorCount(i),v=n[dt[i]].getLocatorCount(i)-1;e===Xa.body?f=re(0,f):e===Xa.corner&&(v=vr(-1,v)),v=t[0]&&r[0]<=t[1]}function WT(r,t){r.id.set(t[0][0],t[1][0]),r.span.set(t[0][1]-r.id.x+1,t[1][1]-r.id.y+1)}function U9(r,t){r[0][0]=t[0][0],r[0][1]=t[0][1],r[1][0]=t[1][0],r[1][1]=t[1][1]}function UT(r,t,e,a){var n=jy(t[a][0],e,a),i=jy(t[a][1],e,a);r[dt[a]]=r[le[a]]=NaN,n&&i&&(r[dt[a]]=n.xy,r[le[a]]=i.xy+i.wh-n.xy)}function vl(r,t,e,a){return r[dt[t]]=e,r[dt[1-t]]=a,r}function Y9(r){return r&&(r.type===Na.leaf||r.type===Na.nonLeaf)?r:null}function Ih(){return{x:NaN,y:NaN,width:NaN,height:NaN}}var YT=(function(){function r(t,e){this._cells=[],this._levels=[],this.dim=t,this.dimIdx=t==="x"?0:1,this._model=e,this._uniqueValueGen=Z9(t);var a=e.get("data",!0);a!=null&&!W(a)&&(a=[]),a?this._initByDimModelData(a):this._initBySeriesData()}return r.prototype._initByDimModelData=function(t){var e=this,a=e._cells,n=e._levels,i=[],o=0;e._leavesCount=s(t,0,0),l();return;function s(u,f,v){var h=0;return u&&A(u,function(c,d){var p;X(c)?p={value:c}:it(c)?(p=c,c.value!=null&&!X(c.value)&&(p={value:null})):p={value:null};var g={type:Na.nonLeaf,ordinal:NaN,level:v,firstLeafLocator:f,id:new st,span:vl(new st,e.dimIdx,1,1),option:p,xy:NaN,wh:NaN,dim:e,rect:Ih()};o++,(i[f]||(i[f]=[])).push(g),n[v]||(n[v]={type:Na.level,xy:NaN,wh:NaN,option:null,id:new st,dim:e});var y=s(p.children,f,v+1),m=Math.max(1,y);g.span[dt[e.dimIdx]]=m,h+=m,f+=m}),h}function l(){for(var u=[];a.length=1,_=e[dt[a]],S=i.getLocatorCount(a)-1,x=new Ln;for(o.resetLayoutIterator(x,a);x.next();)b(x.item);for(i.resetLayoutIterator(x,a);x.next();)b(x.item);function b(w){Ie(w.wh)&&(w.wh=y),w.xy=_,w.id[dt[a]]===S&&!m&&(w.wh=e[dt[a]]+e[le[a]]-w.xy),_+=w.wh}}function JT(r,t){for(var e=t[dt[r]].resetCellIterator();e.next();){var a=e.item;Ph(a.rect,r,a.id,a.span,t),Ph(a.rect,1-r,a.id,a.span,t),a.type===Na.nonLeaf&&(a.xy=a.rect[dt[r]],a.wh=a.rect[le[r]])}}function QT(r,t){r.travelExistingCells(function(e){var a=e.span;if(a){var n=e.spanRect,i=e.id;Ph(n,0,i,a,t),Ph(n,1,i,a,t)}})}function Ph(r,t,e,a,n){r[le[t]]=0;var i=e[dt[t]],o=i<0?n[dt[1-t]]:n[dt[t]],s=o.getUnitLayoutInfo(t,e[dt[t]]);if(r[dt[t]]=s.xy,r[le[t]]=s.wh,a[dt[t]]>1){var l=o.getUnitLayoutInfo(t,e[dt[t]]+a[dt[t]]-1);r[le[t]]=l.xy+l.wh-s.xy}}function iZ(r,t,e){var a=Uv(r,e[le[t]]);return Jy(a,e[le[t]])}function Jy(r,t){return Math.max(Math.min(r,Q(t,1/0)),0)}function zp(r){var t=r.matrixModel,e=r.seriesModel,a=t?t.coordinateSystem:e?e.coordinateSystem:null;return a}var Le={inBody:1,inCorner:2,outside:3},ea={x:null,y:null,point:[]};function tC(r,t,e,a,n){var i=e[dt[t]],o=e[dt[1-t]],s=i.getUnitLayoutInfo(t,i.getLocatorCount(t)-1),l=i.getUnitLayoutInfo(t,0),u=o.getUnitLayoutInfo(t,-o.getLocatorCount(t)),f=o.shouldShow()?o.getUnitLayoutInfo(t,-1):null,v=r.point[t]=a[t];if(!l&&!f){r[dt[t]]=Le.outside;return}if(n===Xa.body){l?(r[dt[t]]=Le.inBody,v=vr(s.xy+s.wh,re(l.xy,v)),r.point[t]=v):r[dt[t]]=Le.outside;return}else if(n===Xa.corner){f?(r[dt[t]]=Le.inCorner,v=vr(f.xy+f.wh,re(u.xy,v)),r.point[t]=v):r[dt[t]]=Le.outside;return}var h=l?l.xy:f?f.xy+f.wh:NaN,c=u?u.xy:h,d=s?s.xy+s.wh:h;if(vd){if(!n){r[dt[t]]=Le.outside;return}v=d}r.point[t]=v,r[dt[t]]=h<=v&&v<=d?Le.inBody:c<=v&&v<=h?Le.inCorner:Le.outside}function eC(r,t,e,a){var n=1-e;if(r[dt[e]]!==Le.outside)for(a[dt[e]].resetCellIterator(Bp);Bp.next();){var i=Bp.item;if(aC(r.point[e],i.rect,e)&&aC(r.point[n],i.rect,n)){t[e]=i.ordinal,t[n]=i.id[dt[n]];return}}}function rC(r,t,e,a){if(r[dt[e]]!==Le.outside){var n=r[dt[e]]===Le.inCorner?a[dt[1-e]]:a[dt[e]];for(n.resetLayoutIterator(tv,e);tv.next();)if(oZ(r.point[e],tv.item)){t[e]=tv.item.id[dt[e]];return}}}function oZ(r,t){return t.xy<=r&&r<=t.xy+t.wh}function aC(r,t,e){return t[dt[e]]<=r&&r<=t[dt[e]]+t[le[e]]}function sZ(r){r.registerComponentModel(j9),r.registerComponentView(eZ),r.registerCoordinateSystem("matrix",nZ)}function lZ(r,t){var e=r.existing;if(t.id=r.keyInfo.id,!t.type&&e&&(t.type=e.type),t.parentId==null){var a=t.parentOption;a?t.parentId=a.id:e&&(t.parentId=e.parentId)}t.parentOption=null}function nC(r,t){var e;return A(t,function(a){r[a]!=null&&r[a]!=="auto"&&(e=!0)}),e}function uZ(r,t,e){var a=G({},e),n=r[t],i=e.$action||"merge";i==="merge"?n?(mt(n,a,!0),Sa(n,a,{ignoreSize:!0}),$D(e,n),ev(e,n),ev(e,n,"shape"),ev(e,n,"style"),ev(e,n,"extra"),e.clipPath=n.clipPath):r[t]=a:i==="replace"?r[t]=a:i==="remove"&&n&&(r[t]=null)}var DR=["transition","enterFrom","leaveTo"],fZ=DR.concat(["enterAnimation","updateAnimation","leaveAnimation"]);function ev(r,t,e){if(e&&(!r[e]&&t[e]&&(r[e]={}),r=r[e],t=t[e]),!(!r||!t))for(var a=e?DR:fZ,n=0;n=0;f--){var v=n[f],h=ve(v.id,null),c=h!=null?o.get(h):null;if(c){var d=c.parent,y=xr(d),m=d===i?{width:s,height:l}:{width:y.width,height:y.height},_={},S=lc(c,v,m,null,{hv:v.hv,boundingMode:v.bounding},_);if(!xr(c).isNew&&S){for(var x=v.transition,b={},w=0;w=0)?b[T]=C:c[T]=C}It(c,b,e,0)}else c.attr(_)}}},t.prototype._clear=function(){var e=this,a=this._elMap;a.each(function(n){Lv(n,xr(n).option,a,e._lastGraphicModel)}),this._elMap=K()},t.prototype.dispose=function(){this._clear()},t.type="graphic",t})(Wt);function Qy(r){var t=q(iC,r)?iC[r]:iu(r),e=new t({});return xr(e).type=r,e}function oC(r,t,e,a){var n=Qy(e);return t.add(n),a.set(r,n),xr(n).id=r,xr(n).isNew=!0,n}function Lv(r,t,e,a){var n=r&&r.parent;n&&(r.type==="group"&&r.traverse(function(i){Lv(i,t,e,a)}),Tc(r,t,a),e.removeKey(xr(r).id))}function sC(r,t,e,a){r.isGroup||A([["cursor",Lr.prototype.cursor],["zlevel",a||0],["z",e||0],["z2",0]],function(n){var i=n[0];q(t,i)?r[i]=Q(t[i],n[1]):r[i]==null&&(r[i]=n[1])}),A(At(t),function(n){if(n.indexOf("on")===0){var i=t[n];r[n]=tt(i)?i:null}}),q(t,"draggable")&&(r.draggable=t.draggable),t.name!=null&&(r.name=t.name),t.id!=null&&(r.id=t.id)}function dZ(r){return r=G({},r),A(["id","parentId","$action","hv","bounding","textContent","clipPath"].concat(UD),function(t){delete r[t]}),r}function pZ(r,t,e){var a=ft(r).eventData;!r.silent&&!r.ignore&&!a&&(a=ft(r).eventData={componentType:"graphic",componentIndex:t.componentIndex,name:r.name}),a&&(a.info=e.info)}function gZ(r){r.registerComponentModel(hZ),r.registerComponentView(cZ),r.registerPreprocessor(function(t){var e=t.graphic;W(e)?!e[0]||!e[0].elements?t.graphic=[{elements:e}]:t.graphic=[t.graphic[0]]:e&&!e.elements&&(t.graphic=[{elements:[e]}])})}var lC=["x","y","radius","angle","single"],yZ=["cartesian2d","polar","singleAxis"];function mZ(r){var t=r.get("coordinateSystem");return yt(yZ,t)>=0}function An(r){return r+"Axis"}function _Z(r,t){var e=K(),a=[],n=K();r.eachComponent({mainType:"dataZoom",query:t},function(f){n.get(f.uid)||s(f)});var i;do i=!1,r.eachComponent("dataZoom",o);while(i);function o(f){!n.get(f.uid)&&l(f)&&(s(f),i=!0)}function s(f){n.set(f.uid,!0),a.push(f),u(f)}function l(f){var v=!1;return f.eachTargetAxis(function(h,c){var d=e.get(h);d&&d[c]&&(v=!0)}),v}function u(f){f.eachTargetAxis(function(v,h){(e.get(v)||e.set(v,[]))[h]=!0})}return a}function LR(r){var t=r.ecModel,e={infoList:[],infoMap:K()};return r.eachTargetAxis(function(a,n){var i=t.getComponent(An(a),n);if(i){var o=i.getCoordSysModel();if(o){var s=o.uid,l=e.infoMap.get(s);l||(l={model:o,axisModels:[]},e.infoList.push(l),e.infoMap.set(s,l)),l.axisModels.push(i)}}}),e}var Vp=(function(){function r(){this.indexList=[],this.indexMap=[]}return r.prototype.add=function(t){this.indexMap[t]||(this.indexList.push(t),this.indexMap[t]=!0)},r})(),Tu=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e._autoThrottle=!0,e._noTarget=!0,e._rangePropMode=["percent","percent"],e}return t.prototype.init=function(e,a,n){var i=uC(e);this.settledOption=i,this.mergeDefaultAndTheme(e,n),this._doInit(i)},t.prototype.mergeOption=function(e){var a=uC(e);mt(this.option,e,!0),mt(this.settledOption,a,!0),this._doInit(a)},t.prototype._doInit=function(e){var a=this.option;this._setDefaultThrottle(e),this._updateRangeUse(e);var n=this.settledOption;A([["start","startValue"],["end","endValue"]],function(i,o){this._rangePropMode[o]==="value"&&(a[i[0]]=n[i[0]]=null)},this),this._resetTarget()},t.prototype._resetTarget=function(){var e=this.get("orient",!0),a=this._targetAxisInfoMap=K(),n=this._fillSpecifiedTargetAxis(a);n?this._orient=e||this._makeAutoOrientByTargetAxis():(this._orient=e||"horizontal",this._fillAutoTargetAxisByOrient(a,this._orient)),this._noTarget=!0,a.each(function(i){i.indexList.length&&(this._noTarget=!1)},this)},t.prototype._fillSpecifiedTargetAxis=function(e){var a=!1;return A(lC,function(n){var i=this.getReferringComponents(An(n),BO);if(i.specified){a=!0;var o=new Vp;A(i.models,function(s){o.add(s.componentIndex)}),e.set(n,o)}},this),a},t.prototype._fillAutoTargetAxisByOrient=function(e,a){var n=this.ecModel,i=!0;if(i){var o=a==="vertical"?"y":"x",s=n.findComponents({mainType:o+"Axis"});l(s,o)}if(i){var s=n.findComponents({mainType:"singleAxis",filter:function(f){return f.get("orient",!0)===a}});l(s,"single")}function l(u,f){var v=u[0];if(v){var h=new Vp;if(h.add(v.componentIndex),e.set(f,h),i=!1,f==="x"||f==="y"){var c=v.getReferringComponents("grid",jt).models[0];c&&A(u,function(d){v.componentIndex!==d.componentIndex&&c===d.getReferringComponents("grid",jt).models[0]&&h.add(d.componentIndex)})}}}i&&A(lC,function(u){if(i){var f=n.findComponents({mainType:An(u),filter:function(h){return h.get("type",!0)==="category"}});if(f[0]){var v=new Vp;v.add(f[0].componentIndex),e.set(u,v),i=!1}}},this)},t.prototype._makeAutoOrientByTargetAxis=function(){var e;return this.eachTargetAxis(function(a){!e&&(e=a)},this),e==="y"?"vertical":"horizontal"},t.prototype._setDefaultThrottle=function(e){if(e.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var a=this.ecModel.option;this.option.throttle=a.animation&&a.animationDurationUpdate>0?100:20}},t.prototype._updateRangeUse=function(e){var a=this._rangePropMode,n=this.get("rangeMode");A([["start","startValue"],["end","endValue"]],function(i,o){var s=e[i[0]]!=null,l=e[i[1]]!=null;s&&!l?a[o]="percent":!s&&l?a[o]="value":n?a[o]=n[o]:s&&(a[o]="percent")})},t.prototype.noTarget=function(){return this._noTarget},t.prototype.getFirstTargetAxisModel=function(){var e;return this.eachTargetAxis(function(a,n){e==null&&(e=this.ecModel.getComponent(An(a),n))},this),e},t.prototype.eachTargetAxis=function(e,a){this._targetAxisInfoMap.each(function(n,i){A(n.indexList,function(o){e.call(a,i,o)})})},t.prototype.getAxisProxy=function(e,a){var n=this.getAxisModel(e,a);if(n)return n.__dzAxisProxy},t.prototype.getAxisModel=function(e,a){var n=this._targetAxisInfoMap.get(e);if(n&&n.indexMap[a])return this.ecModel.getComponent(An(e),a)},t.prototype.setRawRange=function(e){var a=this.option,n=this.settledOption;A([["start","startValue"],["end","endValue"]],function(i){(e[i[0]]!=null||e[i[1]]!=null)&&(a[i[0]]=n[i[0]]=e[i[0]],a[i[1]]=n[i[1]]=e[i[1]])},this),this._updateRangeUse(e)},t.prototype.setCalculatedRange=function(e){var a=this.option;A(["start","startValue","end","endValue"],function(n){a[n]=e[n]})},t.prototype.getPercentRange=function(){var e=this.findRepresentativeAxisProxy();if(e)return e.getDataPercentWindow()},t.prototype.getValueRange=function(e,a){if(e==null&&a==null){var n=this.findRepresentativeAxisProxy();if(n)return n.getDataValueWindow()}else return this.getAxisProxy(e,a).getDataValueWindow()},t.prototype.findRepresentativeAxisProxy=function(e){if(e)return e.__dzAxisProxy;for(var a,n=this._targetAxisInfoMap.keys(),i=0;io[1];if(_&&!S&&!x)return!0;_&&(g=!0),S&&(d=!0),x&&(p=!0)}return g&&d&&p})}else Fo(f,function(c){if(i==="empty")l.setData(u=u.map(c,function(p){return s(p)?p:NaN}));else{var d={};d[c]=o,u.selectRange(d)}});Fo(f,function(c){u.setApproximateExtent(o,c)})}});function s(l){return l>=o[0]&&l<=o[1]}},r.prototype._updateMinMaxSpan=function(){var t=this._minMaxSpan={},e=this._dataZoomModel,a=this._dataExtent;Fo(["min","max"],function(n){var i=e.get(n+"Span"),o=e.get(n+"ValueSpan");o!=null&&(o=this.getAxisModel().axis.scale.parse(o)),o!=null?i=kt(a[0]+o,a,[0,100],!0):i!=null&&(o=kt(i,[0,100],a,!0)-a[0]),t[n+"Span"]=i,t[n+"ValueSpan"]=o},this)},r.prototype._setAxisModel=function(){var t=this.getAxisModel(),e=this._percentWindow,a=this._valueWindow;if(e){var n=Mm(a,[0,500]);n=Math.min(n,20);var i=t.axis.scale.rawExtentInfo;e[0]!==0&&i.setDeterminedMinMax("min",+a[0].toFixed(n)),e[1]!==100&&i.setDeterminedMinMax("max",+a[1].toFixed(n)),i.freeze()}},r})();function wZ(r,t,e){var a=[1/0,-1/0];Fo(e,function(o){FG(a,o.getData(),t)});var n=r.getAxisModel(),i=D2(n.axis.scale,n,a).calculate();return[i.min,i.max]}var TZ={getTargetSeries:function(r){function t(n){r.eachComponent("dataZoom",function(i){i.eachTargetAxis(function(o,s){var l=r.getComponent(An(o),s);n(o,s,l,i)})})}t(function(n,i,o,s){o.__dzAxisProxy=null});var e=[];t(function(n,i,o,s){o.__dzAxisProxy||(o.__dzAxisProxy=new bZ(n,i,s,r),e.push(o.__dzAxisProxy))});var a=K();return A(e,function(n){A(n.getTargetSeriesModels(),function(i){a.set(i.uid,i)})}),a},overallReset:function(r,t){r.eachComponent("dataZoom",function(e){e.eachTargetAxis(function(a,n){e.getAxisProxy(a,n).reset(e)}),e.eachTargetAxis(function(a,n){e.getAxisProxy(a,n).filterData(e,t)})}),r.eachComponent("dataZoom",function(e){var a=e.findRepresentativeAxisProxy();if(a){var n=a.getDataPercentWindow(),i=a.getDataValueWindow();e.setCalculatedRange({start:n[0],end:n[1],startValue:i[0],endValue:i[1]})}})}};function CZ(r){r.registerAction("dataZoom",function(t,e){var a=_Z(e,t);A(a,function(n){n.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})})}var vC=!1;function V_(r){vC||(vC=!0,r.registerProcessor(r.PRIORITY.PROCESSOR.FILTER,TZ),CZ(r),r.registerSubTypeDefaulter("dataZoom",function(){return"slider"}))}function AZ(r){r.registerComponentModel(SZ),r.registerComponentView(xZ),V_(r)}var wr=(function(){function r(){}return r})(),IR={};function Ho(r,t){IR[r]=t}function PR(r){return IR[r]}var MZ=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.optionUpdated=function(){r.prototype.optionUpdated.apply(this,arguments);var e=this.ecModel;A(this.option.feature,function(a,n){var i=PR(n);i&&(i.getDefaultOption&&(i.defaultOption=i.getDefaultOption(e)),mt(a,i.defaultOption))})},t.type="toolbox",t.layoutMode={type:"box",ignoreSize:!0},t.defaultOption={show:!0,z:6,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:B.color.border,borderRadius:0,borderWidth:0,padding:B.size.m,itemSize:15,itemGap:B.size.s,showTitle:!0,iconStyle:{borderColor:B.color.accent50,color:"none"},emphasis:{iconStyle:{borderColor:B.color.accent50}},tooltip:{show:!1,position:"bottom"}},t})(xt);function RR(r,t){var e=Ls(t.get("padding")),a=t.getItemStyle(["color","opacity"]);a.fill=t.get("backgroundColor");var n=new St({shape:{x:r.x-e[3],y:r.y-e[0],width:r.width+e[1]+e[3],height:r.height+e[0]+e[2],r:t.get("borderRadius")},style:a,silent:!0,z2:-1});return n}var DZ=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.render=function(e,a,n,i){var o=this.group;if(o.removeAll(),!e.get("show"))return;var s=+e.get("itemSize"),l=e.get("orient")==="vertical",u=e.get("feature")||{},f=this._features||(this._features={}),v=[];A(u,function(m,_){v.push(_)}),new Ja(this._featureNames||[],v).add(h).update(h).remove(pt(h,null)).execute(),this._featureNames=v;function h(m,_){var S=v[m],x=v[_],b=u[S],w=new wt(b,e,e.ecModel),T;if(i&&i.newTitle!=null&&i.featureName===S&&(b.title=i.newTitle),S&&!x){if(LZ(S))T={onclick:w.option.onclick,featureName:S};else{var C=PR(S);if(!C)return;T=new C}f[S]=T}else if(T=f[x],!T)return;T.uid=Ds("toolbox-feature"),T.model=w,T.ecModel=a,T.api=n;var M=T instanceof wr;if(!S&&x){M&&T.dispose&&T.dispose(a,n);return}if(!w.get("show")||M&&T.unusable){M&&T.remove&&T.remove(a,n);return}c(w,T,S),w.setIconStatus=function(D,I){var L=this.option,P=this.iconPaths;L.iconStatus=L.iconStatus||{},L.iconStatus[D]=I,P[D]&&(I==="emphasis"?ja:Ka)(P[D])},T instanceof wr&&T.render&&T.render(w,a,n,i)}function c(m,_,S){var x=m.getModel("iconStyle"),b=m.getModel(["emphasis","iconStyle"]),w=_ instanceof wr&&_.getIcons?_.getIcons():m.get("icon"),T=m.get("title")||{},C,M;X(w)?(C={},C[S]=w):C=w,X(T)?(M={},M[S]=T):M=T;var D=m.iconPaths={};A(C,function(I,L){var P=As(I,{},{x:-s/2,y:-s/2,width:s,height:s});P.setStyle(x.getItemStyle());var k=P.ensureState("emphasis");k.style=b.getItemStyle();var R=new Mt({style:{text:M[L],align:b.get("textAlign"),borderRadius:b.get("textBorderRadius"),padding:b.get("textPadding"),fill:null,font:jm({fontStyle:b.get("textFontStyle"),fontFamily:b.get("textFontFamily"),fontSize:b.get("textFontSize"),fontWeight:b.get("textFontWeight")},a)},ignore:!0});P.setTextContent(R),nn({el:P,componentModel:e,itemName:L,formatterParamsExtra:{title:M[L]}}),P.__title=M[L],P.on("mouseover",function(){var O=b.getItemStyle(),E=l?e.get("right")==null&&e.get("left")!=="right"?"right":"left":e.get("bottom")==null&&e.get("top")!=="bottom"?"bottom":"top";R.setStyle({fill:b.get("textFill")||O.fill||O.stroke||B.color.neutral99,backgroundColor:b.get("textBackgroundColor")}),P.setTextConfig({position:b.get("textPosition")||E}),R.ignore=!e.get("showTitle"),n.enterEmphasis(this)}).on("mouseout",function(){m.get(["iconStatus",L])!=="emphasis"&&n.leaveEmphasis(this),R.hide()}),(m.get(["iconStatus",L])==="emphasis"?ja:Ka)(P),o.add(P),P.on("click",$(_.onclick,_,a,n,L)),D[L]=P})}var d=de(e,n).refContainer,p=e.getBoxLayoutParams(),g=e.get("padding"),y=Xt(p,d,g);Gi(e.get("orient"),o,e.get("itemGap"),y.width,y.height),lc(o,p,d,g),o.add(RR(o.getBoundingRect(),e)),l||o.eachChild(function(m){var _=m.__title,S=m.ensureState("emphasis"),x=S.textConfig||(S.textConfig={}),b=m.getTextContent(),w=b&&b.ensureState("emphasis");if(w&&!tt(w)&&_){var T=w.style||(w.style={}),C=$h(_,Mt.makeFont(T)),M=m.x+o.x,D=m.y+o.y+s,I=!1;D+C.height>n.getHeight()&&(x.position="top",I=!0);var L=I?-5-C.height:s+10;M+C.width/2>n.getWidth()?(x.position=["100%",L],T.align="right"):M-C.width/2<0&&(x.position=[0,L],T.align="left")}})},t.prototype.updateView=function(e,a,n,i){A(this._features,function(o){o instanceof wr&&o.updateView&&o.updateView(o.model,a,n,i)})},t.prototype.remove=function(e,a){A(this._features,function(n){n instanceof wr&&n.remove&&n.remove(e,a)}),this.group.removeAll()},t.prototype.dispose=function(e,a){A(this._features,function(n){n instanceof wr&&n.dispose&&n.dispose(e,a)})},t.type="toolbox",t})(Wt);function LZ(r){return r.indexOf("my")===0}var IZ=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.onclick=function(e,a){var n=this.model,i=n.get("name")||e.get("title.0.text")||"echarts",o=a.getZr().painter.getType()==="svg",s=o?"svg":n.get("type",!0)||"png",l=a.getConnectedDataURL({type:s,backgroundColor:n.get("backgroundColor",!0)||e.get("backgroundColor")||B.color.neutral00,connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")}),u=Ct.browser;if(typeof MouseEvent=="function"&&(u.newEdge||!u.ie&&!u.edge)){var f=document.createElement("a");f.download=i+"."+s,f.target="_blank",f.href=l;var v=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});f.dispatchEvent(v)}else if(window.navigator.msSaveOrOpenBlob||o){var h=l.split(","),c=h[0].indexOf("base64")>-1,d=o?decodeURIComponent(h[1]):h[1];c&&(d=window.atob(d));var p=i+"."+s;if(window.navigator.msSaveOrOpenBlob){for(var g=d.length,y=new Uint8Array(g);g--;)y[g]=d.charCodeAt(g);var m=new Blob([y]);window.navigator.msSaveOrOpenBlob(m,p)}else{var _=document.createElement("iframe");document.body.appendChild(_);var S=_.contentWindow,x=S.document;x.open("image/svg+xml","replace"),x.write(d),x.close(),S.focus(),x.execCommand("SaveAs",!0,p),document.body.removeChild(_)}}else{var b=n.get("lang"),w='',T=window.open();T.document.write(w),T.document.title=i}},t.getDefaultOption=function(e){var a={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:e.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:B.color.neutral00,name:"",excludeComponents:["toolbox"],lang:e.getLocaleModel().get(["toolbox","saveAsImage","lang"])};return a},t})(wr),hC="__ec_magicType_stack__",PZ=[["line","bar"],["stack"]],RZ=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.getIcons=function(){var e=this.model,a=e.get("icon"),n={};return A(e.get("type"),function(i){a[i]&&(n[i]=a[i])}),n},t.getDefaultOption=function(e){var a={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:e.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}};return a},t.prototype.onclick=function(e,a,n){var i=this.model,o=i.get(["seriesIndex",n]);if(cC[n]){var s={series:[]},l=function(v){var h=v.subType,c=v.id,d=cC[n](h,c,v,i);d&&(nt(d,v.option),s.series.push(d));var p=v.coordinateSystem;if(p&&p.type==="cartesian2d"&&(n==="line"||n==="bar")){var g=p.getAxesByScale("ordinal")[0];if(g){var y=g.dim,m=y+"Axis",_=v.getReferringComponents(m,jt).models[0],S=_.componentIndex;s[m]=s[m]||[];for(var x=0;x<=S;x++)s[m][S]=s[m][S]||{};s[m][S].boundaryGap=n==="bar"}}};A(PZ,function(v){yt(v,n)>=0&&A(v,function(h){i.setIconStatus(h,"normal")})}),i.setIconStatus(n,"emphasis"),e.eachComponent({mainType:"series",query:o==null?null:{seriesIndex:o}},l);var u,f=n;n==="stack"&&(u=mt({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),i.get(["iconStatus",n])!=="emphasis"&&(f="tiled")),a.dispatchAction({type:"changeMagicType",currentType:f,newOption:s,newTitle:u,featureName:"magicType"})}},t})(wr),cC={line:function(r,t,e,a){if(r==="bar")return mt({id:t,type:"line",data:e.get("data"),stack:e.get("stack"),markPoint:e.get("markPoint"),markLine:e.get("markLine")},a.get(["option","line"])||{},!0)},bar:function(r,t,e,a){if(r==="line")return mt({id:t,type:"bar",data:e.get("data"),stack:e.get("stack"),markPoint:e.get("markPoint"),markLine:e.get("markLine")},a.get(["option","bar"])||{},!0)},stack:function(r,t,e,a){var n=e.get("stack")===hC;if(r==="line"||r==="bar")return a.setIconStatus("stack",n?"normal":"emphasis"),mt({id:t,stack:n?"":hC},a.get(["option","stack"])||{},!0)}};qr({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(r,t){t.mergeOption(r.newOption)});var Cc=new Array(60).join("-"),ms=" ";function kZ(r){var t={},e=[],a=[];return r.eachRawSeries(function(n){var i=n.coordinateSystem;if(i&&(i.type==="cartesian2d"||i.type==="polar")){var o=i.getBaseAxis();if(o.type==="category"){var s=o.dim+"_"+o.index;t[s]||(t[s]={categoryAxis:o,valueAxis:i.getOtherAxis(o),series:[]},a.push({axisDim:o.dim,axisIndex:o.index})),t[s].series.push(n)}else e.push(n)}else e.push(n)}),{seriesGroupByCategoryAxis:t,other:e,meta:a}}function EZ(r){var t=[];return A(r,function(e,a){var n=e.categoryAxis,i=e.valueAxis,o=i.dim,s=[" "].concat(U(e.series,function(c){return c.name})),l=[n.model.getCategories()];A(e.series,function(c){var d=c.getRawData();l.push(c.getRawData().mapArray(d.mapDimension(o),function(p){return p}))});for(var u=[s.join(ms)],f=0;f=0)return!0}var tm=new RegExp("["+ms+"]+","g");function zZ(r){for(var t=r.split(/\n+/g),e=Rh(t.shift()).split(tm),a=[],n=U(e,function(l){return{name:l,data:[]}}),i=0;i=0;i--){var o=e[i];if(o[n])break}if(i<0){var s=r.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(s){var l=s.getPercentRange();e[0][n]={dataZoomId:n,start:l[0],end:l[1]}}}}),e.push(t)}function UZ(r){var t=G_(r),e=t[t.length-1];t.length>1&&t.pop();var a={};return kR(e,function(n,i){for(var o=t.length-1;o>=0;o--)if(n=t[o][i],n){a[i]=n;break}}),a}function YZ(r){ER(r).snapshots=null}function ZZ(r){return G_(r).length}function G_(r){var t=ER(r);return t.snapshots||(t.snapshots=[{}]),t.snapshots}var XZ=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.onclick=function(e,a){YZ(e),a.dispatchAction({type:"restore",from:this.uid})},t.getDefaultOption=function(e){var a={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:e.getLocaleModel().get(["toolbox","restore","title"])};return a},t})(wr);qr({type:"restore",event:"restore",update:"prepareAndUpdate"},function(r,t){t.resetOption("recreate")});var $Z=["grid","xAxis","yAxis","geo","graph","polar","radiusAxis","angleAxis","bmap"],F_=(function(){function r(t,e,a){var n=this;this._targetInfoList=[];var i=dC(e,t);A(qZ,function(o,s){(!a||!a.include||yt(a.include,s)>=0)&&o(i,n._targetInfoList)})}return r.prototype.setOutputRanges=function(t,e){return this.matchOutputRanges(t,e,function(a,n,i){if((a.coordRanges||(a.coordRanges=[])).push(n),!a.coordRange){a.coordRange=n;var o=Gp[a.brushType](0,i,n);a.__rangeOffset={offset:mC[a.brushType](o.values,a.range,[1,1]),xyMinMax:o.xyMinMax}}}),t},r.prototype.matchOutputRanges=function(t,e,a){A(t,function(n){var i=this.findTargetInfo(n,e);i&&i!==!0&&A(i.coordSyses,function(o){var s=Gp[n.brushType](1,o,n.range,!0);a(n,s.values,o,e)})},this)},r.prototype.setInputRanges=function(t,e){A(t,function(a){var n=this.findTargetInfo(a,e);if(a.range=a.range||[],n&&n!==!0){a.panelId=n.panelId;var i=Gp[a.brushType](0,n.coordSys,a.coordRange),o=a.__rangeOffset;a.range=o?mC[a.brushType](i.values,o.offset,jZ(i.xyMinMax,o.xyMinMax)):i.values}},this)},r.prototype.makePanelOpts=function(t,e){return U(this._targetInfoList,function(a){var n=a.getPanelRect();return{panelId:a.panelId,defaultBrushType:e?e(a):null,clipPath:VP(n),isTargetByCursor:FP(n,t,a.coordSysModel),getLinearBrushOtherExtent:GP(n)}})},r.prototype.controlSeries=function(t,e,a){var n=this.findTargetInfo(t,a);return n===!0||n&&yt(n.coordSyses,e.coordinateSystem)>=0},r.prototype.findTargetInfo=function(t,e){for(var a=this._targetInfoList,n=dC(e,t),i=0;ir[1]&&r.reverse(),r}function dC(r,t){return Jo(r,t,{includeMainTypes:$Z})}var qZ={grid:function(r,t){var e=r.xAxisModels,a=r.yAxisModels,n=r.gridModels,i=K(),o={},s={};!e&&!a&&!n||(A(e,function(l){var u=l.axis.grid.model;i.set(u.id,u),o[u.id]=!0}),A(a,function(l){var u=l.axis.grid.model;i.set(u.id,u),s[u.id]=!0}),A(n,function(l){i.set(l.id,l),o[l.id]=!0,s[l.id]=!0}),i.each(function(l){var u=l.coordinateSystem,f=[];A(u.getCartesians(),function(v,h){(yt(e,v.getAxis("x").model)>=0||yt(a,v.getAxis("y").model)>=0)&&f.push(v)}),t.push({panelId:"grid--"+l.id,gridModel:l,coordSysModel:l,coordSys:f[0],coordSyses:f,getPanelRect:gC.grid,xAxisDeclared:o[l.id],yAxisDeclared:s[l.id]})}))},geo:function(r,t){A(r.geoModels,function(e){var a=e.coordinateSystem;t.push({panelId:"geo--"+e.id,geoModel:e,coordSysModel:e,coordSys:a,coordSyses:[a],getPanelRect:gC.geo})})}},pC=[function(r,t){var e=r.xAxisModel,a=r.yAxisModel,n=r.gridModel;return!n&&e&&(n=e.axis.grid.model),!n&&a&&(n=a.axis.grid.model),n&&n===t.gridModel},function(r,t){var e=r.geoModel;return e&&e===t.geoModel}],gC={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var r=this.coordSys,t=r.getBoundingRect().clone();return t.applyTransform(Pn(r)),t}},Gp={lineX:pt(yC,0),lineY:pt(yC,1),rect:function(r,t,e,a){var n=r?t.pointToData([e[0][0],e[1][0]],a):t.dataToPoint([e[0][0],e[1][0]],a),i=r?t.pointToData([e[0][1],e[1][1]],a):t.dataToPoint([e[0][1],e[1][1]],a),o=[em([n[0],i[0]]),em([n[1],i[1]])];return{values:o,xyMinMax:o}},polygon:function(r,t,e,a){var n=[[1/0,-1/0],[1/0,-1/0]],i=U(e,function(o){var s=r?t.pointToData(o,a):t.dataToPoint(o,a);return n[0][0]=Math.min(n[0][0],s[0]),n[1][0]=Math.min(n[1][0],s[1]),n[0][1]=Math.max(n[0][1],s[0]),n[1][1]=Math.max(n[1][1],s[1]),s});return{values:i,xyMinMax:n}}};function yC(r,t,e,a){var n=e.getAxis(["x","y"][r]),i=em(U([0,1],function(s){return t?n.coordToData(n.toLocalCoord(a[s]),!0):n.toGlobalCoord(n.dataToCoord(a[s]))})),o=[];return o[r]=i,o[1-r]=[NaN,NaN],{values:i,xyMinMax:o}}var mC={lineX:pt(_C,0),lineY:pt(_C,1),rect:function(r,t,e){return[[r[0][0]-e[0]*t[0][0],r[0][1]-e[0]*t[0][1]],[r[1][0]-e[1]*t[1][0],r[1][1]-e[1]*t[1][1]]]},polygon:function(r,t,e){return U(r,function(a,n){return[a[0]-e[0]*t[n][0],a[1]-e[1]*t[n][1]]})}};function _C(r,t,e,a){return[t[0]-a[r]*e[0],t[1]-a[r]*e[1]]}function jZ(r,t){var e=SC(r),a=SC(t),n=[e[0]/a[0],e[1]/a[1]];return isNaN(n[0])&&(n[0]=1),isNaN(n[1])&&(n[1]=1),n}function SC(r){return r?[r[0][1]-r[0][0],r[1][1]-r[1][0]]:[NaN,NaN]}var rm=A,KZ=RO("toolbox-dataZoom_"),JZ=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.render=function(e,a,n,i){this._brushController||(this._brushController=new h_(n.getZr()),this._brushController.on("brush",$(this._onBrush,this)).mount()),eX(e,a,this,i,n),tX(e,a)},t.prototype.onclick=function(e,a,n){QZ[n].call(this)},t.prototype.remove=function(e,a){this._brushController&&this._brushController.unmount()},t.prototype.dispose=function(e,a){this._brushController&&this._brushController.dispose()},t.prototype._onBrush=function(e){var a=e.areas;if(!e.isEnd||!a.length)return;var n={},i=this.ecModel;this._brushController.updateCovers([]);var o=new F_(H_(this.model),i,{include:["grid"]});o.matchOutputRanges(a,i,function(u,f,v){if(v.type==="cartesian2d"){var h=u.brushType;h==="rect"?(s("x",v,f[0]),s("y",v,f[1])):s({lineX:"x",lineY:"y"}[h],v,f)}}),WZ(i,n),this._dispatchZoomAction(n);function s(u,f,v){var h=f.getAxis(u),c=h.model,d=l(u,c,i),p=d.findRepresentativeAxisProxy(c).getMinMaxSpan();(p.minValueSpan!=null||p.maxValueSpan!=null)&&(v=zn(0,v.slice(),h.scale.getExtent(),0,p.minValueSpan,p.maxValueSpan)),d&&(n[d.id]={dataZoomId:d.id,startValue:v[0],endValue:v[1]})}function l(u,f,v){var h;return v.eachComponent({mainType:"dataZoom",subType:"select"},function(c){var d=c.getAxisModel(u,f.componentIndex);d&&(h=c)}),h}},t.prototype._dispatchZoomAction=function(e){var a=[];rm(e,function(n,i){a.push(et(n))}),a.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:a})},t.getDefaultOption=function(e){var a={show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:e.getLocaleModel().get(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:B.color.backgroundTint}};return a},t})(wr),QZ={zoom:function(){var r=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:r})},back:function(){this._dispatchZoomAction(UZ(this.ecModel))}};function H_(r){var t={xAxisIndex:r.get("xAxisIndex",!0),yAxisIndex:r.get("yAxisIndex",!0),xAxisId:r.get("xAxisId",!0),yAxisId:r.get("yAxisId",!0)};return t.xAxisIndex==null&&t.xAxisId==null&&(t.xAxisIndex="all"),t.yAxisIndex==null&&t.yAxisId==null&&(t.yAxisIndex="all"),t}function tX(r,t){r.setIconStatus("back",ZZ(t)>1?"emphasis":"normal")}function eX(r,t,e,a,n){var i=e._isZoomActive;a&&a.type==="takeGlobalCursor"&&(i=a.key==="dataZoomSelect"?a.dataZoomSelectActive:!1),e._isZoomActive=i,r.setIconStatus("zoom",i?"emphasis":"normal");var o=new F_(H_(r),t,{include:["grid"]}),s=o.makePanelOpts(n,function(l){return l.xAxisDeclared&&!l.yAxisDeclared?"lineX":!l.xAxisDeclared&&l.yAxisDeclared?"lineY":"rect"});e._brushController.setPanels(s).enableBrush(i&&s.length?{brushType:"auto",brushStyle:r.getModel("brushStyle").getItemStyle()}:!1)}cz("dataZoom",function(r){var t=r.getComponent("toolbox",0),e=["feature","dataZoom"];if(!t||t.get(e)==null)return;var a=t.getModel(e),n=[],i=H_(a),o=Jo(r,i);rm(o.xAxisModels,function(l){return s(l,"xAxis","xAxisIndex")}),rm(o.yAxisModels,function(l){return s(l,"yAxis","yAxisIndex")});function s(l,u,f){var v=l.componentIndex,h={type:"select",$fromToolbox:!0,filterMode:a.get("filterMode",!0)||"filter",id:KZ+u+v};h[f]=v,n.push(h)}return n});function rX(r){r.registerComponentModel(MZ),r.registerComponentView(DZ),Ho("saveAsImage",IZ),Ho("magicType",RZ),Ho("dataView",FZ),Ho("dataZoom",JZ),Ho("restore",XZ),_t(AZ)}var aX=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="tooltip",t.dependencies=["axisPointer"],t.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,displayTransition:!0,enterable:!1,backgroundColor:B.color.neutral00,shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,defaultBorderColor:B.color.border,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:B.color.borderShade,width:1,type:"dashed",textStyle:{}}},textStyle:{color:B.color.tertiary,fontSize:14}},t})(xt);function OR(r){var t=r.get("confine");return t!=null?!!t:r.get("renderMode")==="richText"}function NR(r){if(Ct.domSupported){for(var t=document.documentElement.style,e=0,a=r.length;e-1?(s+="top:50%",l+="translateY(-50%) rotate("+(u=i==="left"?-225:-45)+"deg)"):(s+="left:50%",l+="translateX(-50%) rotate("+(u=i==="top"?225:45)+"deg)");var f=u*Math.PI/180,v=o+n,h=v*Math.abs(Math.cos(f))+v*Math.abs(Math.sin(f)),c=Math.round(((h-Math.SQRT2*n)/2+Math.SQRT2*n-(h-v)/2)*100)/100;s+=";"+i+":-"+c+"px";var d=t+" solid "+n+"px;",p=["position:absolute;width:"+o+"px;height:"+o+"px;z-index:-1;",s+";"+l+";","border-bottom:"+d,"border-right:"+d,"background-color:"+a+";"];return'
'}function fX(r,t,e){var a="cubic-bezier(0.23,1,0.32,1)",n="",i="";return e&&(n=" "+r/2+"s "+a,i="opacity"+n+",visibility"+n),t||(n=" "+r+"s "+a,i+=(i.length?",":"")+(Ct.transformSupported?""+W_+n:",left"+n+",top"+n)),oX+":"+i}function xC(r,t,e){var a=r.toFixed(0)+"px",n=t.toFixed(0)+"px";if(!Ct.transformSupported)return e?"top:"+n+";left:"+a+";":[["top",n],["left",a]];var i=Ct.transform3dSupported,o="translate"+(i?"3d":"")+"("+a+","+n+(i?",0":"")+")";return e?"top:0;left:0;"+W_+":"+o+";":[["top",0],["left",0],[BR,o]]}function vX(r){var t=[],e=r.get("fontSize"),a=r.getTextColor();a&&t.push("color:"+a),t.push("font:"+r.getFont());var n=Q(r.get("lineHeight"),Math.round(e*3/2));e&&t.push("line-height:"+n+"px");var i=r.get("textShadowColor"),o=r.get("textShadowBlur")||0,s=r.get("textShadowOffsetX")||0,l=r.get("textShadowOffsetY")||0;return i&&o&&t.push("text-shadow:"+s+"px "+l+"px "+o+"px "+i),A(["decoration","align"],function(u){var f=r.get(u);f&&t.push("text-"+u+":"+f)}),t.join(";")}function hX(r,t,e,a){var n=[],i=r.get("transitionDuration"),o=r.get("backgroundColor"),s=r.get("shadowBlur"),l=r.get("shadowColor"),u=r.get("shadowOffsetX"),f=r.get("shadowOffsetY"),v=r.getModel("textStyle"),h=AL(r,"html"),c=u+"px "+f+"px "+s+"px "+l;return n.push("box-shadow:"+c),t&&i>0&&n.push(fX(i,e,a)),o&&n.push("background-color:"+o),A(["width","color","radius"],function(d){var p="border-"+d,g=u0(p),y=r.get(g);y!=null&&n.push(p+":"+y+(d==="color"?"":"px"))}),n.push(vX(v)),h!=null&&n.push("padding:"+Ls(h).join("px ")+"px"),n.join(";")+";"}function bC(r,t,e,a,n){var i=t&&t.painter;if(e){var o=i&&i.getViewportRoot();o&&Kk(r,o,e,a,n)}else{r[0]=a,r[1]=n;var s=i&&i.getViewportRootOffset();s&&(r[0]+=s.offsetLeft,r[1]+=s.offsetTop)}r[2]=r[0]/t.getWidth(),r[3]=r[1]/t.getHeight()}var cX=(function(){function r(t,e){if(this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!0,this._alwaysShowContent=!1,this._firstShow=!0,this._longHide=!0,Ct.wxa)return null;var a=document.createElement("div");a.domBelongToZr=!0,this.el=a;var n=this._zr=t.getZr(),i=e.appendTo,o=i&&(X(i)?document.querySelector(i):Ui(i)?i:tt(i)&&i(t.getDom()));bC(this._styleCoord,n,o,t.getWidth()/2,t.getHeight()/2),(o||t.getDom()).appendChild(a),this._api=t,this._container=o;var s=this;a.onmouseenter=function(){s._enterable&&(clearTimeout(s._hideTimeout),s._show=!0),s._inContent=!0},a.onmousemove=function(l){if(l=l||window.event,!s._enterable){var u=n.handler,f=n.painter.getViewportRoot();mr(f,l,!0),u.dispatch("mousemove",l)}},a.onmouseleave=function(){s._inContent=!1,s._enterable&&s._show&&s.hideLater(s._hideDelay)}}return r.prototype.update=function(t){if(!this._container){var e=this._api.getDom(),a=iX(e,"position"),n=e.style;n.position!=="absolute"&&a!=="absolute"&&(n.position="relative")}var i=t.get("alwaysShowContent");i&&this._moveIfResized(),this._alwaysShowContent=i,this._enableDisplayTransition=t.get("displayTransition")&&t.get("transitionDuration")>0,this.el.className=t.get("className")||""},r.prototype.show=function(t,e){clearTimeout(this._hideTimeout),clearTimeout(this._longHideTimeout);var a=this.el,n=a.style,i=this._styleCoord;a.innerHTML?n.cssText=sX+hX(t,!this._firstShow,this._longHide,this._enableDisplayTransition)+xC(i[0],i[1],!0)+("border-color:"+Ki(e)+";")+(t.get("extraCssText")||"")+(";pointer-events:"+(this._enterable?"auto":"none")):n.display="none",this._show=!0,this._firstShow=!1,this._longHide=!1},r.prototype.setContent=function(t,e,a,n,i){var o=this.el;if(t==null){o.innerHTML="";return}var s="";if(X(i)&&a.get("trigger")==="item"&&!OR(a)&&(s=uX(a,n,i)),X(t))o.innerHTML=t+s;else if(t){o.innerHTML="",W(t)||(t=[t]);for(var l=0;l=0?this._tryShow(i,o):n==="leave"&&this._hide(o))},this))},t.prototype._keepShow=function(){var e=this._tooltipModel,a=this._ecModel,n=this._api,i=e.get("triggerOn");if(this._lastX!=null&&this._lastY!=null&&i!=="none"&&i!=="click"){var o=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){!n.isDisposed()&&o.manuallyShowTip(e,a,n,{x:o._lastX,y:o._lastY,dataByCoordSys:o._lastDataByCoordSys})})}},t.prototype.manuallyShowTip=function(e,a,n,i){if(!(i.from===this.uid||Ct.node||!n.getDom())){var o=CC(i,n);this._ticket="";var s=i.dataByCoordSys,l=SX(i,a,n);if(l){var u=l.el.getBoundingRect().clone();u.applyTransform(l.el.transform),this._tryShow({offsetX:u.x+u.width/2,offsetY:u.y+u.height/2,target:l.el,position:i.position,positionDefault:"bottom"},o)}else if(i.tooltip&&i.x!=null&&i.y!=null){var f=pX;f.x=i.x,f.y=i.y,f.update(),ft(f).tooltipConfig={name:null,option:i.tooltip},this._tryShow({offsetX:i.x,offsetY:i.y,target:f},o)}else if(s)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:s,tooltipOption:i.tooltipOption},o);else if(i.seriesIndex!=null){if(this._manuallyAxisShowTip(e,a,n,i))return;var v=SR(i,a),h=v.point[0],c=v.point[1];h!=null&&c!=null&&this._tryShow({offsetX:h,offsetY:c,target:v.el,position:i.position,positionDefault:"bottom"},o)}else i.x!=null&&i.y!=null&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},o))}},t.prototype.manuallyHideTip=function(e,a,n,i){var o=this._tooltipContent;this._tooltipModel&&o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,i.from!==this.uid&&this._hide(CC(i,n))},t.prototype._manuallyAxisShowTip=function(e,a,n,i){var o=i.seriesIndex,s=i.dataIndex,l=a.getComponent("axisPointer").coordSysAxesInfo;if(!(o==null||s==null||l==null)){var u=a.getSeriesByIndex(o);if(u){var f=u.getData(),v=cl([f.getItemModel(s),u,(u.coordinateSystem||{}).model],this._tooltipModel);if(v.get("trigger")==="axis")return n.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:s,position:i.position}),!0}}},t.prototype._tryShow=function(e,a){var n=e.target,i=this._tooltipModel;if(i){this._lastX=e.offsetX,this._lastY=e.offsetY;var o=e.dataByCoordSys;if(o&&o.length)this._showAxisTooltip(o,e);else if(n){var s=ft(n);if(s.ssrType==="legend")return;this._lastDataByCoordSys=null;var l,u;Ei(n,function(f){if(f.tooltipDisabled)return l=u=null,!0;l||u||(ft(f).dataIndex!=null?l=f:ft(f).tooltipConfig!=null&&(u=f))},!0),l?this._showSeriesItemTooltip(e,l,a):u?this._showComponentItemTooltip(e,u,a):this._hide(a)}else this._lastDataByCoordSys=null,this._hide(a)}},t.prototype._showOrMove=function(e,a){var n=e.get("showDelay");a=$(a,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(a,n):a()},t.prototype._showAxisTooltip=function(e,a){var n=this._ecModel,i=this._tooltipModel,o=[a.offsetX,a.offsetY],s=cl([a.tooltipOption],i),l=this._renderMode,u=[],f=ue("section",{blocks:[],noHeader:!0}),v=[],h=new xd;A(e,function(m){A(m.dataByAxis,function(_){var S=n.getComponent(_.axisDim+"Axis",_.axisIndex),x=_.value;if(!(!S||x==null)){var b=gR(x,S.axis,n,_.seriesDataIndices,_.valueLabelOpt),w=ue("section",{header:b,noHeader:!sr(b),sortBlocks:!0,blocks:[]});f.blocks.push(w),A(_.seriesDataIndices,function(T){var C=n.getSeriesByIndex(T.seriesIndex),M=T.dataIndexInside,D=C.getDataParams(M);if(!(D.dataIndex<0)){D.axisDim=_.axisDim,D.axisIndex=_.axisIndex,D.axisType=_.axisType,D.axisId=_.axisId,D.axisValue=uh(S.axis,{value:x}),D.axisValueLabel=b,D.marker=h.makeTooltipMarker("item",Ki(D.color),l);var I=GS(C.formatTooltip(M,!0,null)),L=I.frag;if(L){var P=cl([C],i).get("valueFormatter");w.blocks.push(P?G({valueFormatter:P},L):L)}I.text&&v.push(I.text),u.push(D)}})}})}),f.blocks.reverse(),v.reverse();var c=a.position,d=s.get("order"),p=ZS(f,h,l,d,n.get("useUTC"),s.get("textStyle"));p&&v.unshift(p);var g=l==="richText"?` + +`:"
",y=v.join(g);this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(e,u)?this._updatePosition(s,c,o[0],o[1],this._tooltipContent,u):this._showTooltipContent(s,y,u,Math.random()+"",o[0],o[1],c,null,h)})},t.prototype._showSeriesItemTooltip=function(e,a,n){var i=this._ecModel,o=ft(a),s=o.seriesIndex,l=i.getSeriesByIndex(s),u=o.dataModel||l,f=o.dataIndex,v=o.dataType,h=u.getData(v),c=this._renderMode,d=e.positionDefault,p=cl([h.getItemModel(f),u,l&&(l.coordinateSystem||{}).model],this._tooltipModel,d?{position:d}:null),g=p.get("trigger");if(!(g!=null&&g!=="item")){var y=u.getDataParams(f,v),m=new xd;y.marker=m.makeTooltipMarker("item",Ki(y.color),c);var _=GS(u.formatTooltip(f,!1,v)),S=p.get("order"),x=p.get("valueFormatter"),b=_.frag,w=b?ZS(x?G({valueFormatter:x},b):b,m,c,S,i.get("useUTC"),p.get("textStyle")):_.text,T="item_"+u.name+"_"+f;this._showOrMove(p,function(){this._showTooltipContent(p,w,y,T,e.offsetX,e.offsetY,e.position,e.target,m)}),n({type:"showTip",dataIndexInside:f,dataIndex:h.getRawIndex(f),seriesIndex:s,from:this.uid})}},t.prototype._showComponentItemTooltip=function(e,a,n){var i=this._renderMode==="html",o=ft(a),s=o.tooltipConfig,l=s.option||{},u=l.encodeHTMLContent;if(X(l)){var f=l;l={content:f,formatter:f},u=!0}u&&i&&l.content&&(l=et(l),l.content=ze(l.content));var v=[l],h=this._ecModel.getComponent(o.componentMainType,o.componentIndex);h&&v.push(h),v.push({formatter:l.content});var c=e.positionDefault,d=cl(v,this._tooltipModel,c?{position:c}:null),p=d.get("content"),g=Math.random()+"",y=new xd;this._showOrMove(d,function(){var m=et(d.get("formatterParams")||{});this._showTooltipContent(d,p,m,g,e.offsetX,e.offsetY,e.position,a,y)}),n({type:"showTip",from:this.uid})},t.prototype._showTooltipContent=function(e,a,n,i,o,s,l,u,f){if(this._ticket="",!(!e.get("showContent")||!e.get("show"))){var v=this._tooltipContent;v.setEnterable(e.get("enterable"));var h=e.get("formatter");l=l||e.get("position");var c=a,d=this._getNearestPoint([o,s],n,e.get("trigger"),e.get("borderColor"),e.get("defaultBorderColor",!0)),p=d.color;if(h)if(X(h)){var g=e.ecModel.get("useUTC"),y=W(n)?n[0]:n,m=y&&y.axisType&&y.axisType.indexOf("time")>=0;c=h,m&&(c=zu(y.axisValue,c,g)),c=f0(c,n,!0)}else if(tt(h)){var _=$(function(S,x){S===this._ticket&&(v.setContent(x,f,e,p,l),this._updatePosition(e,l,o,s,v,n,u))},this);this._ticket=i,c=h(n,i,_)}else c=h;v.setContent(c,f,e,p,l),v.show(e,p),this._updatePosition(e,l,o,s,v,n,u)}},t.prototype._getNearestPoint=function(e,a,n,i,o){if(n==="axis"||W(a))return{color:i||o};if(!W(a))return{color:i||a.color||a.borderColor}},t.prototype._updatePosition=function(e,a,n,i,o,s,l){var u=this._api.getWidth(),f=this._api.getHeight();a=a||e.get("position");var v=o.getSize(),h=e.get("align"),c=e.get("verticalAlign"),d=l&&l.getBoundingRect().clone();if(l&&d.applyTransform(l.transform),tt(a)&&(a=a([n,i],s,o.el,d,{viewSize:[u,f],contentSize:v.slice()})),W(a))n=Z(a[0],u),i=Z(a[1],f);else if(it(a)){var p=a;p.width=v[0],p.height=v[1];var g=Xt(p,{width:u,height:f});n=g.x,i=g.y,h=null,c=null}else if(X(a)&&l){var y=_X(a,d,v,e.get("borderWidth"));n=y[0],i=y[1]}else{var y=yX(n,i,o,u,f,h?null:20,c?null:20);n=y[0],i=y[1]}if(h&&(n-=AC(h)?v[0]/2:h==="right"?v[0]:0),c&&(i-=AC(c)?v[1]/2:c==="bottom"?v[1]:0),OR(e)){var y=mX(n,i,o,u,f);n=y[0],i=y[1]}o.moveTo(n,i)},t.prototype._updateContentNotChangedOnAxis=function(e,a){var n=this._lastDataByCoordSys,i=this._cbParamsList,o=!!n&&n.length===e.length;return o&&A(n,function(s,l){var u=s.dataByAxis||[],f=e[l]||{},v=f.dataByAxis||[];o=o&&u.length===v.length,o&&A(u,function(h,c){var d=v[c]||{},p=h.seriesDataIndices||[],g=d.seriesDataIndices||[];o=o&&h.value===d.value&&h.axisType===d.axisType&&h.axisId===d.axisId&&p.length===g.length,o&&A(p,function(y,m){var _=g[m];o=o&&y.seriesIndex===_.seriesIndex&&y.dataIndex===_.dataIndex}),i&&A(h.seriesDataIndices,function(y){var m=y.seriesIndex,_=a[m],S=i[m];_&&S&&S.data!==_.data&&(o=!1)})})}),this._lastDataByCoordSys=e,this._cbParamsList=a,!!o},t.prototype._hide=function(e){this._lastDataByCoordSys=null,e({type:"hideTip",from:this.uid})},t.prototype.dispose=function(e,a){Ct.node||!a.getDom()||(uu(this,"_updatePosition"),this._tooltipContent.dispose(),$y("itemTooltip",a))},t.type="tooltip",t})(Wt);function cl(r,t,e){var a=t.ecModel,n;e?(n=new wt(e,a,a),n=new wt(t.option,n,a)):n=t;for(var i=r.length-1;i>=0;i--){var o=r[i];o&&(o instanceof wt&&(o=o.get("tooltip",!0)),X(o)&&(o={formatter:o}),o&&(n=new wt(o,n,a)))}return n}function CC(r,t){return r.dispatchAction||$(t.dispatchAction,t)}function yX(r,t,e,a,n,i,o){var s=e.getSize(),l=s[0],u=s[1];return i!=null&&(r+l+i+2>a?r-=l+i:r+=i),o!=null&&(t+u+o>n?t-=u+o:t+=o),[r,t]}function mX(r,t,e,a,n){var i=e.getSize(),o=i[0],s=i[1];return r=Math.min(r+o,a)-o,t=Math.min(t+s,n)-s,r=Math.max(r,0),t=Math.max(t,0),[r,t]}function _X(r,t,e,a){var n=e[0],i=e[1],o=Math.ceil(Math.SQRT2*a)+8,s=0,l=0,u=t.width,f=t.height;switch(r){case"inside":s=t.x+u/2-n/2,l=t.y+f/2-i/2;break;case"top":s=t.x+u/2-n/2,l=t.y-i-o;break;case"bottom":s=t.x+u/2-n/2,l=t.y+f+o;break;case"left":s=t.x-n-o,l=t.y+f/2-i/2;break;case"right":s=t.x+u+o,l=t.y+f/2-i/2}return[s,l]}function AC(r){return r==="center"||r==="middle"}function SX(r,t,e){var a=Rm(r).queryOptionMap,n=a.keys()[0];if(!(!n||n==="series")){var i=xs(t,n,a.get(n),{useDefault:!1,enableAll:!1,enableNone:!1}),o=i.models[0];if(o){var s=e.getViewOfComponentModel(o),l;if(s.group.traverse(function(u){var f=ft(u).tooltipConfig;if(f&&f.name===r.name)return l=u,!0}),l)return{componentMainType:n,componentIndex:o.componentIndex,el:l}}}}function xX(r){_t(Xu),r.registerComponentModel(aX),r.registerComponentView(gX),r.registerAction({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},Kt),r.registerAction({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},Kt)}var bX=["rect","polygon","keep","clear"];function wX(r,t){var e=Ht(r?r.brush:[]);if(e.length){var a=[];A(e,function(l){var u=l.hasOwnProperty("toolbox")?l.toolbox:[];u instanceof Array&&(a=a.concat(u))});var n=r&&r.toolbox;W(n)&&(n=n[0]),n||(n={feature:{}},r.toolbox=[n]);var i=n.feature||(n.feature={}),o=i.brush||(i.brush={}),s=o.type||(o.type=[]);s.push.apply(s,a),TX(s),t&&!s.length&&s.push.apply(s,bX)}}function TX(r){var t={};A(r,function(e){t[e]=1}),r.length=0,A(t,function(e,a){r.push(a)})}var MC=A;function DC(r){if(r){for(var t in r)if(r.hasOwnProperty(t))return!0}}function am(r,t,e){var a={};return MC(t,function(i){var o=a[i]=n();MC(r[i],function(s,l){if(_e.isValidType(l)){var u={type:l,visual:s};e&&e(u,i),o[l]=new _e(u),l==="opacity"&&(u=et(u),u.type="colorAlpha",o.__hidden.__alphaForOpacity=new _e(u))}})}),a;function n(){var i=function(){};i.prototype.__hidden=i.prototype;var o=new i;return o}}function VR(r,t,e){var a;A(e,function(n){t.hasOwnProperty(n)&&DC(t[n])&&(a=!0)}),a&&A(e,function(n){t.hasOwnProperty(n)&&DC(t[n])?r[n]=et(t[n]):delete r[n]})}function CX(r,t,e,a,n,i){var o={};A(r,function(v){var h=_e.prepareVisualTypes(t[v]);o[v]=h});var s;function l(v){return S0(e,s,v)}function u(v,h){NL(e,s,v,h)}e.each(f);function f(v,h){s=v;var c=e.getRawDataItem(s);if(!(c&&c.visualMap===!1))for(var d=a.call(n,v),p=t[d],g=o[d],y=0,m=g.length;yt[0][1]&&(t[0][1]=i[0]),i[1]t[1][1]&&(t[1][1]=i[1])}return t&&kC(t)}};function kC(r){return new lt(r[0][0],r[1][0],r[0][1]-r[0][0],r[1][1]-r[1][0])}var kX=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e,a){this.ecModel=e,this.api=a,this.model,(this._brushController=new h_(a.getZr())).on("brush",$(this._onBrush,this)).mount()},t.prototype.render=function(e,a,n,i){this.model=e,this._updateController(e,a,n,i)},t.prototype.updateTransform=function(e,a,n,i){GR(a),this._updateController(e,a,n,i)},t.prototype.updateVisual=function(e,a,n,i){this.updateTransform(e,a,n,i)},t.prototype.updateView=function(e,a,n,i){this._updateController(e,a,n,i)},t.prototype._updateController=function(e,a,n,i){(!i||i.$from!==e.id)&&this._brushController.setPanels(e.brushTargetManager.makePanelOpts(n)).enableBrush(e.brushOption).updateCovers(e.areas.slice())},t.prototype.dispose=function(){this._brushController.dispose()},t.prototype._onBrush=function(e){var a=this.model.id,n=this.model.brushTargetManager.setOutputRanges(e.areas,this.ecModel);(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:a,areas:et(n),$from:a}),e.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:a,areas:et(n),$from:a})},t.type="brush",t})(Wt),EX=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.areas=[],e.brushOption={},e}return t.prototype.optionUpdated=function(e,a){var n=this.option;!a&&VR(n,e,["inBrush","outOfBrush"]);var i=n.inBrush=n.inBrush||{};n.outOfBrush=n.outOfBrush||{color:this.option.defaultOutOfBrushColor},i.hasOwnProperty("liftZ")||(i.liftZ=5)},t.prototype.setAreas=function(e){e&&(this.areas=U(e,function(a){return EC(this.option,a)},this))},t.prototype.setBrushOption=function(e){this.brushOption=EC(this.option,e),this.brushType=this.brushOption.brushType},t.type="brush",t.dependencies=["geo","grid","xAxis","yAxis","parallel","series"],t.defaultOption={seriesIndex:"all",brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:B.color.backgroundTint,borderColor:B.color.borderTint},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4,defaultOutOfBrushColor:B.color.disabled},t})(xt);function EC(r,t){return mt({brushType:r.brushType,brushMode:r.brushMode,transformable:r.transformable,brushStyle:new wt(r.brushStyle).getItemStyle(),removeOnClick:r.removeOnClick,z:r.z},t,!0)}var OX=["rect","polygon","lineX","lineY","keep","clear"],NX=(function(r){N(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.render=function(e,a,n){var i,o,s;a.eachComponent({mainType:"brush"},function(l){i=l.brushType,o=l.brushOption.brushMode||"single",s=s||!!l.areas.length}),this._brushType=i,this._brushMode=o,A(e.get("type",!0),function(l){e.setIconStatus(l,(l==="keep"?o==="multiple":l==="clear"?s:l===i)?"emphasis":"normal")})},t.prototype.updateView=function(e,a,n){this.render(e,a,n)},t.prototype.getIcons=function(){var e=this.model,a=e.get("icon",!0),n={};return A(e.get("type",!0),function(i){a[i]&&(n[i]=a[i])}),n},t.prototype.onclick=function(e,a,n){var i=this._brushType,o=this._brushMode;n==="clear"?(a.dispatchAction({type:"axisAreaSelect",intervals:[]}),a.dispatchAction({type:"brush",command:"clear",areas:[]})):a.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:n==="keep"?i:i===n?!1:n,brushMode:n==="keep"?o==="multiple"?"single":"multiple":o}})},t.getDefaultOption=function(e){var a={show:!0,type:OX.slice(),icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:e.getLocaleModel().get(["toolbox","brush","title"])};return a},t})(wr);function BX(r){r.registerComponentView(kX),r.registerComponentModel(EX),r.registerPreprocessor(wX),r.registerVisual(r.PRIORITY.VISUAL.BRUSH,DX),r.registerAction({type:"brush",event:"brush",update:"updateVisual"},function(t,e){e.eachComponent({mainType:"brush",query:t},function(a){a.setAreas(t.areas)})}),r.registerAction({type:"brushSelect",event:"brushSelected",update:"none"},Kt),r.registerAction({type:"brushEnd",event:"brushEnd",update:"none"},Kt),Ho("brush",NX)}var zX=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.layoutMode={type:"box",ignoreSize:!0},e}return t.type="title",t.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:"center",top:B.size.m,backgroundColor:B.color.transparent,borderColor:B.color.primary,borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:B.color.primary},subtextStyle:{fontSize:12,color:B.color.quaternary}},t})(xt),VX=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){if(this.group.removeAll(),!!e.get("show")){var i=this.group,o=e.getModel("textStyle"),s=e.getModel("subtextStyle"),l=e.get("textAlign"),u=Q(e.get("textBaseline"),e.get("textVerticalAlign")),f=new Mt({style:Ft(o,{text:e.get("text"),fill:o.getTextColor()},{disableBox:!0}),z2:10}),v=f.getBoundingRect(),h=e.get("subtext"),c=new Mt({style:Ft(s,{text:h,fill:s.getTextColor(),y:v.height+e.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),d=e.get("link"),p=e.get("sublink"),g=e.get("triggerEvent",!0);f.silent=!d&&!g,c.silent=!p&&!g,d&&f.on("click",function(){Jv(d,"_"+e.get("target"))}),p&&c.on("click",function(){Jv(p,"_"+e.get("subtarget"))}),ft(f).eventData=ft(c).eventData=g?{componentType:"title",componentIndex:e.componentIndex}:null,i.add(f),h&&i.add(c);var y=i.getBoundingRect(),m=e.getBoxLayoutParams();m.width=y.width,m.height=y.height;var _=de(e,n),S=Xt(m,_.refContainer,e.get("padding"));l||(l=e.get("left")||e.get("right"),l==="middle"&&(l="center"),l==="right"?S.x+=S.width:l==="center"&&(S.x+=S.width/2)),u||(u=e.get("top")||e.get("bottom"),u==="center"&&(u="middle"),u==="bottom"?S.y+=S.height:u==="middle"&&(S.y+=S.height/2),u=u||"top"),i.x=S.x,i.y=S.y,i.markRedraw();var x={align:l,verticalAlign:u};f.setStyle(x),c.setStyle(x),y=i.getBoundingRect();var b=S.margin,w=e.getItemStyle(["color","opacity"]);w.fill=e.get("backgroundColor");var T=new St({shape:{x:y.x-b[3],y:y.y-b[0],width:y.width+b[1]+b[3],height:y.height+b[0]+b[2],r:e.get("borderRadius")},style:w,subPixelOptimize:!0,silent:!0});i.add(T)}},t.type="title",t})(Wt);function GX(r){r.registerComponentModel(zX),r.registerComponentView(VX)}var OC=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.layoutMode="box",e}return t.prototype.init=function(e,a,n){this.mergeDefaultAndTheme(e,n),this._initData()},t.prototype.mergeOption=function(e){r.prototype.mergeOption.apply(this,arguments),this._initData()},t.prototype.setCurrentIndex=function(e){e==null&&(e=this.option.currentIndex);var a=this._data.count();this.option.loop?e=(e%a+a)%a:(e>=a&&(e=a-1),e<0&&(e=0)),this.option.currentIndex=e},t.prototype.getCurrentIndex=function(){return this.option.currentIndex},t.prototype.isIndexMax=function(){return this.getCurrentIndex()>=this._data.count()-1},t.prototype.setPlayState=function(e){this.option.autoPlay=!!e},t.prototype.getPlayState=function(){return!!this.option.autoPlay},t.prototype._initData=function(){var e=this.option,a=e.data||[],n=e.axisType,i=this._names=[],o;n==="category"?(o=[],A(a,function(u,f){var v=ve(Ss(u),""),h;it(u)?(h=et(u),h.value=f):h=f,o.push(h),i.push(v)})):o=a;var s={category:"ordinal",time:"time",value:"number"}[n]||"number",l=this._data=new Ge([{name:"value",type:s}],this);l.initData(o,i)},t.prototype.getData=function(){return this._data},t.prototype.getCategories=function(){if(this.get("axisType")==="category")return this._names.slice()},t.type="timeline",t.defaultOption={z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:B.size.m,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:B.color.secondary},data:[]},t})(xt),FR=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="timeline.slider",t.defaultOption=Un(OC.defaultOption,{backgroundColor:"rgba(0,0,0,0)",borderColor:B.color.border,borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"circle",symbolSize:12,lineStyle:{show:!0,width:2,color:B.color.accent10},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:B.color.tertiary},itemStyle:{color:B.color.accent20,borderWidth:0},checkpointStyle:{symbol:"circle",symbolSize:15,color:B.color.accent50,borderColor:B.color.accent50,borderWidth:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"rgba(0, 0, 0, 0)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:24,itemGap:12,position:"left",playIcon:"path://M15 0C23.2843 0 30 6.71573 30 15C30 23.2843 23.2843 30 15 30C6.71573 30 0 23.2843 0 15C0 6.71573 6.71573 0 15 0ZM15 3C8.37258 3 3 8.37258 3 15C3 21.6274 8.37258 27 15 27C21.6274 27 27 21.6274 27 15C27 8.37258 21.6274 3 15 3ZM11.5 10.6699C11.5 9.90014 12.3333 9.41887 13 9.80371L20.5 14.1338C21.1667 14.5187 21.1667 15.4813 20.5 15.8662L13 20.1963C12.3333 20.5811 11.5 20.0999 11.5 19.3301V10.6699Z",stopIcon:"path://M15 0C23.2843 0 30 6.71573 30 15C30 23.2843 23.2843 30 15 30C6.71573 30 0 23.2843 0 15C0 6.71573 6.71573 0 15 0ZM15 3C8.37258 3 3 8.37258 3 15C3 21.6274 8.37258 27 15 27C21.6274 27 27 21.6274 27 15C27 8.37258 21.6274 3 15 3ZM11.5 10C12.3284 10 13 10.6716 13 11.5V18.5C13 19.3284 12.3284 20 11.5 20C10.6716 20 10 19.3284 10 18.5V11.5C10 10.6716 10.6716 10 11.5 10ZM18.5 10C19.3284 10 20 10.6716 20 11.5V18.5C20 19.3284 19.3284 20 18.5 20C17.6716 20 17 19.3284 17 18.5V11.5C17 10.6716 17.6716 10 18.5 10Z",nextIcon:"path://M0.838834 18.7383C0.253048 18.1525 0.253048 17.2028 0.838834 16.617L7.55635 9.89949L0.838834 3.18198C0.253048 2.59619 0.253048 1.64645 0.838834 1.06066C1.42462 0.474874 2.37437 0.474874 2.96015 1.06066L10.7383 8.83883L10.8412 8.95277C11.2897 9.50267 11.2897 10.2963 10.8412 10.8462L10.7383 10.9602L2.96015 18.7383C2.37437 19.3241 1.42462 19.3241 0.838834 18.7383Z",prevIcon:"path://M10.9602 1.06066C11.5459 1.64645 11.5459 2.59619 10.9602 3.18198L4.24264 9.89949L10.9602 16.617C11.5459 17.2028 11.5459 18.1525 10.9602 18.7383C10.3744 19.3241 9.42462 19.3241 8.83883 18.7383L1.06066 10.9602L0.957771 10.8462C0.509245 10.2963 0.509245 9.50267 0.957771 8.95277L1.06066 8.83883L8.83883 1.06066C9.42462 0.474874 10.3744 0.474874 10.9602 1.06066Z",prevBtnSize:18,nextBtnSize:18,color:B.color.accent50,borderColor:B.color.accent50,borderWidth:0},emphasis:{label:{show:!0,color:B.color.accent60},itemStyle:{color:B.color.accent60,borderColor:B.color.accent60},controlStyle:{color:B.color.accent70,borderColor:B.color.accent70}},progress:{lineStyle:{color:B.color.accent30},itemStyle:{color:B.color.accent40}},data:[]}),t})(OC);Qt(FR,fc.prototype);var FX=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="timeline",t})(Wt),HX=(function(r){N(t,r);function t(e,a,n,i){var o=r.call(this,e,a,n)||this;return o.type=i||"value",o}return t.prototype.getLabelModel=function(){return this.model.getModel("label")},t.prototype.isHorizontal=function(){return this.model.get("orient")==="horizontal"},t})(kr),Hp=Math.PI,NC=bt(),WX=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(e,a){this.api=a},t.prototype.render=function(e,a,n){if(this.model=e,this.api=n,this.ecModel=a,this.group.removeAll(),e.get("show",!0)){var i=this._layout(e,n),o=this._createGroup("_mainGroup"),s=this._createGroup("_labelGroup"),l=this._axis=this._createAxis(i,e);e.formatTooltip=function(u){var f=l.scale.getLabel({value:u});return ue("nameValue",{noName:!0,value:f})},A(["AxisLine","AxisTick","Control","CurrentPointer"],function(u){this["_render"+u](i,o,l,e)},this),this._renderAxisLabel(i,s,l,e),this._position(i,e)}this._doPlayStop(),this._updateTicksStatus()},t.prototype.remove=function(){this._clearTimer(),this.group.removeAll()},t.prototype.dispose=function(){this._clearTimer()},t.prototype._layout=function(e,a){var n=e.get(["label","position"]),i=e.get("orient"),o=YX(e,a),s;n==null||n==="auto"?s=i==="horizontal"?o.y+o.height/2=0||s==="+"?"left":"right"},u={horizontal:s>=0||s==="+"?"top":"bottom",vertical:"middle"},f={horizontal:0,vertical:Hp/2},v=i==="vertical"?o.height:o.width,h=e.getModel("controlStyle"),c=h.get("show",!0),d=c?h.get("itemSize"):0,p=c?h.get("itemGap"):0,g=d+p,y=e.get(["label","rotate"])||0;y=y*Hp/180;var m,_,S,x=h.get("position",!0),b=c&&h.get("showPlayBtn",!0),w=c&&h.get("showPrevBtn",!0),T=c&&h.get("showNextBtn",!0),C=0,M=v;x==="left"||x==="bottom"?(b&&(m=[0,0],C+=g),w&&(_=[C,0],C+=g),T&&(S=[M-d,0],M-=g)):(b&&(m=[M-d,0],M-=g),w&&(_=[0,0],C+=g),T&&(S=[M-d,0],M-=g));var D=[C,M];return e.get("inverse")&&D.reverse(),{viewRect:o,mainLength:v,orient:i,rotation:f[i],labelRotation:y,labelPosOpt:s,labelAlign:e.get(["label","align"])||l[i],labelBaseline:e.get(["label","verticalAlign"])||e.get(["label","baseline"])||u[i],playPosition:m,prevBtnPosition:_,nextBtnPosition:S,axisExtent:D,controlSize:d,controlGap:p}},t.prototype._position=function(e,a){var n=this._mainGroup,i=this._labelGroup,o=e.viewRect;if(e.orient==="vertical"){var s=me(),l=o.x,u=o.y+o.height;Yr(s,s,[-l,-u]),rn(s,s,-Hp/2),Yr(s,s,[l,u]),o=o.clone(),o.applyTransform(s)}var f=m(o),v=m(n.getBoundingRect()),h=m(i.getBoundingRect()),c=[n.x,n.y],d=[i.x,i.y];d[0]=c[0]=f[0][0];var p=e.labelPosOpt;if(p==null||X(p)){var g=p==="+"?0:1;_(c,v,f,1,g),_(d,h,f,1,1-g)}else{var g=p>=0?0:1;_(c,v,f,1,g),d[1]=c[1]+p}n.setPosition(c),i.setPosition(d),n.rotation=i.rotation=e.rotation,y(n),y(i);function y(S){S.originX=f[0][0]-S.x,S.originY=f[1][0]-S.y}function m(S){return[[S.x,S.x+S.width],[S.y,S.y+S.height]]}function _(S,x,b,w,T){S[w]+=b[w][T]-x[w][T]}},t.prototype._createAxis=function(e,a){var n=a.getData(),i=a.get("axisType"),o=UX(a,i);o.getTicks=function(){return n.mapArray(["value"],function(u){return{value:u}})};var s=n.getDataExtent("value");o.setExtent(s[0],s[1]),o.calcNiceTicks();var l=new HX("value",o,e.axisExtent,i);return l.model=a,l},t.prototype._createGroup=function(e){var a=this[e]=new rt;return this.group.add(a),a},t.prototype._renderAxisLine=function(e,a,n,i){var o=n.getExtent();if(i.get(["lineStyle","show"])){var s=new ne({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:G({lineCap:"round"},i.getModel("lineStyle").getLineStyle()),silent:!0,z2:1});a.add(s);var l=this._progressLine=new ne({shape:{x1:o[0],x2:this._currentPointer?this._currentPointer.x:o[0],y1:0,y2:0},style:nt({lineCap:"round",lineWidth:s.style.lineWidth},i.getModel(["progress","lineStyle"]).getLineStyle()),silent:!0,z2:1});a.add(l)}},t.prototype._renderAxisTick=function(e,a,n,i){var o=this,s=i.getData(),l=n.scale.getTicks();this._tickSymbols=[],A(l,function(u){var f=n.dataToCoord(u.value),v=s.getItemModel(u.value),h=v.getModel("itemStyle"),c=v.getModel(["emphasis","itemStyle"]),d=v.getModel(["progress","itemStyle"]),p={x:f,y:0,onclick:$(o._changeTimeline,o,u.value)},g=BC(v,h,a,p);g.ensureState("emphasis").style=c.getItemStyle(),g.ensureState("progress").style=d.getItemStyle(),In(g);var y=ft(g);v.get("tooltip")?(y.dataIndex=u.value,y.dataModel=i):y.dataIndex=y.dataModel=null,o._tickSymbols.push(g)})},t.prototype._renderAxisLabel=function(e,a,n,i){var o=this,s=n.getLabelModel();if(s.get("show")){var l=i.getData(),u=n.getViewLabels();this._tickLabels=[],A(u,function(f){var v=f.tickValue,h=l.getItemModel(v),c=h.getModel("label"),d=h.getModel(["emphasis","label"]),p=h.getModel(["progress","label"]),g=n.dataToCoord(f.tickValue),y=new Mt({x:g,y:0,rotation:e.labelRotation-e.rotation,onclick:$(o._changeTimeline,o,v),silent:!1,style:Ft(c,{text:f.formattedLabel,align:e.labelAlign,verticalAlign:e.labelBaseline})});y.ensureState("emphasis").style=Ft(d),y.ensureState("progress").style=Ft(p),a.add(y),In(y),NC(y).dataIndex=v,o._tickLabels.push(y)})}},t.prototype._renderControl=function(e,a,n,i){var o=e.controlSize,s=e.rotation,l=i.getModel("controlStyle").getItemStyle(),u=i.getModel(["emphasis","controlStyle"]).getItemStyle(),f=i.getPlayState(),v=i.get("inverse",!0);h(e.nextBtnPosition,"next",$(this._changeTimeline,this,v?"-":"+")),h(e.prevBtnPosition,"prev",$(this._changeTimeline,this,v?"+":"-")),h(e.playPosition,f?"stop":"play",$(this._handlePlayClick,this,!f),!0);function h(c,d,p,g){if(c){var y=Zr(Q(i.get(["controlStyle",d+"BtnSize"]),o),o),m=[0,-y/2,y,y],_=ZX(i,d+"Icon",m,{x:c[0],y:c[1],originX:o/2,originY:0,rotation:g?-s:0,rectHover:!0,style:l,onclick:p});_.ensureState("emphasis").style=u,a.add(_),In(_)}}},t.prototype._renderCurrentPointer=function(e,a,n,i){var o=i.getData(),s=i.getCurrentIndex(),l=o.getItemModel(s).getModel("checkpointStyle"),u=this,f={onCreate:function(v){v.draggable=!0,v.drift=$(u._handlePointerDrag,u),v.ondragend=$(u._handlePointerDragend,u),zC(v,u._progressLine,s,n,i,!0)},onUpdate:function(v){zC(v,u._progressLine,s,n,i)}};this._currentPointer=BC(l,l,this._mainGroup,{},this._currentPointer,f)},t.prototype._handlePlayClick=function(e){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:e,from:this.uid})},t.prototype._handlePointerDrag=function(e,a,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},t.prototype._handlePointerDragend=function(e){this._pointerChangeTimeline([e.offsetX,e.offsetY],!0)},t.prototype._pointerChangeTimeline=function(e,a){var n=this._toAxisCoord(e)[0],i=this._axis,o=lr(i.getExtent().slice());n>o[1]&&(n=o[1]),n=0&&(s[o]=+s[o].toFixed(d)),[s,c]}var iv={min:pt(nv,"min"),max:pt(nv,"max"),average:pt(nv,"average"),median:pt(nv,"median")};function Cu(r,t){if(t){var e=r.getData(),a=r.coordinateSystem,n=a&&a.dimensions;if(!JX(t)&&!W(t.coord)&&W(n)){var i=HR(t,e,a,r);if(t=et(t),t.type&&iv[t.type]&&i.baseAxis&&i.valueAxis){var o=yt(n,i.baseAxis.dim),s=yt(n,i.valueAxis.dim),l=iv[t.type](e,i.valueAxis.dim,i.baseDataDim,i.valueDataDim,o,s);t.coord=l[0],t.value=l[1]}else t.coord=[t.xAxis!=null?t.xAxis:t.radiusAxis,t.yAxis!=null?t.yAxis:t.angleAxis]}if(t.coord==null||!W(n)){t.coord=[];var u=r.getBaseAxis();if(u&&t.type&&iv[t.type]){var f=a.getOtherAxis(u);f&&(t.value=kh(e,e.mapDimension(f.dim),t.type))}}else for(var v=t.coord,h=0;h<2;h++)iv[v[h]]&&(v[h]=kh(e,e.mapDimension(n[h]),v[h]));return t}}function HR(r,t,e,a){var n={};return r.valueIndex!=null||r.valueDim!=null?(n.valueDataDim=r.valueIndex!=null?t.getDimension(r.valueIndex):r.valueDim,n.valueAxis=e.getAxis(QX(a,n.valueDataDim)),n.baseAxis=e.getOtherAxis(n.valueAxis),n.baseDataDim=t.mapDimension(n.baseAxis.dim)):(n.baseAxis=a.getBaseAxis(),n.valueAxis=e.getOtherAxis(n.baseAxis),n.baseDataDim=t.mapDimension(n.baseAxis.dim),n.valueDataDim=t.mapDimension(n.valueAxis.dim)),n}function QX(r,t){var e=r.getData().getDimensionInfo(t);return e&&e.coordDim}function Au(r,t){return r&&r.containData&&t.coord&&!im(t)?r.containData(t.coord):!0}function t$(r,t,e){return r&&r.containZone&&t.coord&&e.coord&&!im(t)&&!im(e)?r.containZone(t.coord,e.coord):!0}function WR(r,t){return r?function(e,a,n,i){var o=i<2?e.coord&&e.coord[i]:e.value;return kn(o,t[i])}:function(e,a,n,i){return kn(e.value,t[i])}}function kh(r,t,e){if(e==="average"){var a=0,n=0;return r.each(t,function(i,o){isNaN(i)||(a+=i,n++)}),a/n}else return e==="median"?r.getMedian(t):r.getDataExtent(t)[e==="max"?1:0]}var Wp=bt(),Y_=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.init=function(){this.markerGroupMap=K()},t.prototype.render=function(e,a,n){var i=this,o=this.markerGroupMap;o.each(function(s){Wp(s).keep=!1}),a.eachSeries(function(s){var l=ba.getMarkerModelFromSeries(s,i.type);l&&i.renderSeries(s,l,a,n)}),o.each(function(s){!Wp(s).keep&&i.group.remove(s.group)}),e$(a,o,this.type)},t.prototype.markKeep=function(e){Wp(e).keep=!0},t.prototype.toggleBlurSeries=function(e,a){var n=this;A(e,function(i){var o=ba.getMarkerModelFromSeries(i,n.type);if(o){var s=o.getData();s.eachItemGraphicEl(function(l){l&&(a?nD(l):Gm(l))})}})},t.type="marker",t})(Wt);function e$(r,t,e){r.eachSeries(function(a){var n=ba.getMarkerModelFromSeries(a,e),i=t.get(a.id);if(n&&i&&i.group){var o=ji(n),s=o.z,l=o.zlevel;oc(i.group,s,l)}})}function GC(r,t,e){var a=t.coordinateSystem,n=e.getWidth(),i=e.getHeight(),o=a&&a.getArea&&a.getArea();r.each(function(s){var l=r.getItemModel(s),u=l.get("relativeTo")==="coordinate",f=u?o?o.width:0:n,v=u?o?o.height:0:i,h=u&&o?o.x:0,c=u&&o?o.y:0,d,p=Z(l.get("x"),f)+h,g=Z(l.get("y"),v)+c;if(!isNaN(p)&&!isNaN(g))d=[p,g];else if(t.getMarkerPosition)d=t.getMarkerPosition(r.getValues(r.dimensions,s));else if(a){var y=r.get(a.dimensions[0],s),m=r.get(a.dimensions[1],s);d=a.dataToPoint([y,m])}isNaN(p)||(d[0]=p),isNaN(g)||(d[1]=g),r.setItemLayout(s,d)})}var r$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.updateTransform=function(e,a,n){a.eachSeries(function(i){var o=ba.getMarkerModelFromSeries(i,"markPoint");o&&(GC(o.getData(),i,n),this.markerGroupMap.get(i.id).updateLayout())},this)},t.prototype.renderSeries=function(e,a,n,i){var o=e.coordinateSystem,s=e.id,l=e.getData(),u=this.markerGroupMap,f=u.get(s)||u.set(s,new Wu),v=a$(o,e,a);a.setData(v),GC(a.getData(),e,i),v.each(function(h){var c=v.getItemModel(h),d=c.getShallow("symbol"),p=c.getShallow("symbolSize"),g=c.getShallow("symbolRotate"),y=c.getShallow("symbolOffset"),m=c.getShallow("symbolKeepAspect");if(tt(d)||tt(p)||tt(g)||tt(y)){var _=a.getRawValue(h),S=a.getDataParams(h);tt(d)&&(d=d(_,S)),tt(p)&&(p=p(_,S)),tt(g)&&(g=g(_,S)),tt(y)&&(y=y(_,S))}var x=c.getModel("itemStyle").getItemStyle(),b=c.get("z2"),w=Gu(l,"color");x.fill||(x.fill=w),v.setItemVisual(h,{z2:Q(b,0),symbol:d,symbolSize:p,symbolRotate:g,symbolOffset:y,symbolKeepAspect:m,style:x})}),f.updateData(v),this.group.add(f.group),v.eachItemGraphicEl(function(h){h.traverse(function(c){ft(c).dataModel=a})}),this.markKeep(f),f.group.silent=a.get("silent")||e.get("silent")},t.type="markPoint",t})(Y_);function a$(r,t,e){var a;r?a=U(r&&r.dimensions,function(s){var l=t.getData().getDimensionInfo(t.getData().mapDimension(s))||{};return G(G({},l),{name:s,ordinalMeta:null})}):a=[{name:"value",type:"float"}];var n=new Ge(a,e),i=U(e.get("data"),pt(Cu,t));r&&(i=Rt(i,pt(Au,r)));var o=WR(!!r,a);return n.initData(i,null,o),n}function n$(r){r.registerComponentModel(KX),r.registerComponentView(r$),r.registerPreprocessor(function(t){U_(t.series,"markPoint")&&(t.markPoint=t.markPoint||{})})}var i$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.createMarkerModelFromSeries=function(e,a,n){return new t(e,a,n)},t.type="markLine",t.defaultOption={z:5,symbol:["circle","arrow"],symbolSize:[8,16],symbolOffset:0,precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"},t})(ba),ov=bt(),o$=function(r,t,e,a){var n=r.getData(),i;if(W(a))i=a;else{var o=a.type;if(o==="min"||o==="max"||o==="average"||o==="median"||a.xAxis!=null||a.yAxis!=null){var s=void 0,l=void 0;if(a.yAxis!=null||a.xAxis!=null)s=t.getAxis(a.yAxis!=null?"y":"x"),l=Ce(a.yAxis,a.xAxis);else{var u=HR(a,n,t,r);s=u.valueAxis;var f=k0(n,u.valueDataDim);l=kh(n,f,o)}var v=s.dim==="x"?0:1,h=1-v,c=et(a),d={coord:[]};c.type=null,c.coord=[],c.coord[h]=-1/0,d.coord[h]=1/0;var p=e.get("precision");p>=0&&Dt(l)&&(l=+l.toFixed(Math.min(p,20))),c.coord[v]=d.coord[v]=l,i=[c,d,{type:o,valueIndex:a.valueIndex,value:l}]}else i=[]}var g=[Cu(r,i[0]),Cu(r,i[1]),G({},i[2])];return g[2].type=g[2].type||null,mt(g[2],g[0]),mt(g[2],g[1]),g};function Eh(r){return!isNaN(r)&&!isFinite(r)}function FC(r,t,e,a){var n=1-r,i=a.dimensions[r];return Eh(t[n])&&Eh(e[n])&&t[r]===e[r]&&a.getAxis(i).containData(t[r])}function s$(r,t){if(r.type==="cartesian2d"){var e=t[0].coord,a=t[1].coord;if(e&&a&&(FC(1,e,a,r)||FC(0,e,a,r)))return!0}return Au(r,t[0])&&Au(r,t[1])}function Up(r,t,e,a,n){var i=a.coordinateSystem,o=r.getItemModel(t),s,l=Z(o.get("x"),n.getWidth()),u=Z(o.get("y"),n.getHeight());if(!isNaN(l)&&!isNaN(u))s=[l,u];else{if(a.getMarkerPosition)s=a.getMarkerPosition(r.getValues(r.dimensions,t));else{var f=i.dimensions,v=r.get(f[0],t),h=r.get(f[1],t);s=i.dataToPoint([v,h])}if(Bn(i,"cartesian2d")){var c=i.getAxis("x"),d=i.getAxis("y"),f=i.dimensions;Eh(r.get(f[0],t))?s[0]=c.toGlobalCoord(c.getExtent()[e?0:1]):Eh(r.get(f[1],t))&&(s[1]=d.toGlobalCoord(d.getExtent()[e?0:1]))}isNaN(l)||(s[0]=l),isNaN(u)||(s[1]=u)}r.setItemLayout(t,s)}var l$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.updateTransform=function(e,a,n){a.eachSeries(function(i){var o=ba.getMarkerModelFromSeries(i,"markLine");if(o){var s=o.getData(),l=ov(o).from,u=ov(o).to;l.each(function(f){Up(l,f,!0,i,n),Up(u,f,!1,i,n)}),s.each(function(f){s.setItemLayout(f,[l.getItemLayout(f),u.getItemLayout(f)])}),this.markerGroupMap.get(i.id).updateLayout()}},this)},t.prototype.renderSeries=function(e,a,n,i){var o=e.coordinateSystem,s=e.id,l=e.getData(),u=this.markerGroupMap,f=u.get(s)||u.set(s,new f_);this.group.add(f.group);var v=u$(o,e,a),h=v.from,c=v.to,d=v.line;ov(a).from=h,ov(a).to=c,a.setData(d);var p=a.get("symbol"),g=a.get("symbolSize"),y=a.get("symbolRotate"),m=a.get("symbolOffset");W(p)||(p=[p,p]),W(g)||(g=[g,g]),W(y)||(y=[y,y]),W(m)||(m=[m,m]),v.from.each(function(S){_(h,S,!0),_(c,S,!1)}),d.each(function(S){var x=d.getItemModel(S),b=x.getModel("lineStyle").getLineStyle();d.setItemLayout(S,[h.getItemLayout(S),c.getItemLayout(S)]);var w=x.get("z2");b.stroke==null&&(b.stroke=h.getItemVisual(S,"style").fill),d.setItemVisual(S,{z2:Q(w,0),fromSymbolKeepAspect:h.getItemVisual(S,"symbolKeepAspect"),fromSymbolOffset:h.getItemVisual(S,"symbolOffset"),fromSymbolRotate:h.getItemVisual(S,"symbolRotate"),fromSymbolSize:h.getItemVisual(S,"symbolSize"),fromSymbol:h.getItemVisual(S,"symbol"),toSymbolKeepAspect:c.getItemVisual(S,"symbolKeepAspect"),toSymbolOffset:c.getItemVisual(S,"symbolOffset"),toSymbolRotate:c.getItemVisual(S,"symbolRotate"),toSymbolSize:c.getItemVisual(S,"symbolSize"),toSymbol:c.getItemVisual(S,"symbol"),style:b})}),f.updateData(d),v.line.eachItemGraphicEl(function(S){ft(S).dataModel=a,S.traverse(function(x){ft(x).dataModel=a})});function _(S,x,b){var w=S.getItemModel(x);Up(S,x,b,e,i);var T=w.getModel("itemStyle").getItemStyle();T.fill==null&&(T.fill=Gu(l,"color")),S.setItemVisual(x,{symbolKeepAspect:w.get("symbolKeepAspect"),symbolOffset:Q(w.get("symbolOffset",!0),m[b?0:1]),symbolRotate:Q(w.get("symbolRotate",!0),y[b?0:1]),symbolSize:Q(w.get("symbolSize"),g[b?0:1]),symbol:Q(w.get("symbol",!0),p[b?0:1]),style:T})}this.markKeep(f),f.group.silent=a.get("silent")||e.get("silent")},t.type="markLine",t})(Y_);function u$(r,t,e){var a;r?a=U(r&&r.dimensions,function(u){var f=t.getData().getDimensionInfo(t.getData().mapDimension(u))||{};return G(G({},f),{name:u,ordinalMeta:null})}):a=[{name:"value",type:"float"}];var n=new Ge(a,e),i=new Ge(a,e),o=new Ge([],e),s=U(e.get("data"),pt(o$,t,r,e));r&&(s=Rt(s,pt(s$,r)));var l=WR(!!r,a);return n.initData(U(s,function(u){return u[0]}),null,l),i.initData(U(s,function(u){return u[1]}),null,l),o.initData(U(s,function(u){return u[2]})),o.hasItemOption=!0,{from:n,to:i,line:o}}function f$(r){r.registerComponentModel(i$),r.registerComponentView(l$),r.registerPreprocessor(function(t){U_(t.series,"markLine")&&(t.markLine=t.markLine||{})})}var v$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.createMarkerModelFromSeries=function(e,a,n){return new t(e,a,n)},t.type="markArea",t.defaultOption={z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},t})(ba),sv=bt(),h$=function(r,t,e,a){var n=a[0],i=a[1];if(!(!n||!i)){var o=Cu(r,n),s=Cu(r,i),l=o.coord,u=s.coord;l[0]=Ce(l[0],-1/0),l[1]=Ce(l[1],-1/0),u[0]=Ce(u[0],1/0),u[1]=Ce(u[1],1/0);var f=Wh([{},o,s]);return f.coord=[o.coord,s.coord],f.x0=o.x,f.y0=o.y,f.x1=s.x,f.y1=s.y,f}};function Oh(r){return!isNaN(r)&&!isFinite(r)}function HC(r,t,e,a){var n=1-r;return Oh(t[n])&&Oh(e[n])}function c$(r,t){var e=t.coord[0],a=t.coord[1],n={coord:e,x:t.x0,y:t.y0},i={coord:a,x:t.x1,y:t.y1};return Bn(r,"cartesian2d")?e&&a&&(HC(1,e,a)||HC(0,e,a))?!0:t$(r,n,i):Au(r,n)||Au(r,i)}function WC(r,t,e,a,n){var i=a.coordinateSystem,o=r.getItemModel(t),s,l=Z(o.get(e[0]),n.getWidth()),u=Z(o.get(e[1]),n.getHeight());if(!isNaN(l)&&!isNaN(u))s=[l,u];else{if(a.getMarkerPosition){var f=r.getValues(["x0","y0"],t),v=r.getValues(["x1","y1"],t),h=i.clampData(f),c=i.clampData(v),d=[];e[0]==="x0"?d[0]=h[0]>c[0]?v[0]:f[0]:d[0]=h[0]>c[0]?f[0]:v[0],e[1]==="y0"?d[1]=h[1]>c[1]?v[1]:f[1]:d[1]=h[1]>c[1]?f[1]:v[1],s=a.getMarkerPosition(d,e,!0)}else{var p=r.get(e[0],t),g=r.get(e[1],t),y=[p,g];i.clampData&&i.clampData(y,y),s=i.dataToPoint(y,!0)}if(Bn(i,"cartesian2d")){var m=i.getAxis("x"),_=i.getAxis("y"),p=r.get(e[0],t),g=r.get(e[1],t);Oh(p)?s[0]=m.toGlobalCoord(m.getExtent()[e[0]==="x0"?0:1]):Oh(g)&&(s[1]=_.toGlobalCoord(_.getExtent()[e[1]==="y0"?0:1]))}isNaN(l)||(s[0]=l),isNaN(u)||(s[1]=u)}return s}var UC=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],d$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.updateTransform=function(e,a,n){a.eachSeries(function(i){var o=ba.getMarkerModelFromSeries(i,"markArea");if(o){var s=o.getData();s.each(function(l){var u=U(UC,function(v){return WC(s,l,v,i,n)});s.setItemLayout(l,u);var f=s.getItemGraphicEl(l);f.setShape("points",u)})}},this)},t.prototype.renderSeries=function(e,a,n,i){var o=e.coordinateSystem,s=e.id,l=e.getData(),u=this.markerGroupMap,f=u.get(s)||u.set(s,{group:new rt});this.group.add(f.group),this.markKeep(f);var v=p$(o,e,a);a.setData(v),v.each(function(h){var c=U(UC,function(M){return WC(v,h,M,e,i)}),d=o.getAxis("x").scale,p=o.getAxis("y").scale,g=d.getExtent(),y=p.getExtent(),m=[d.parse(v.get("x0",h)),d.parse(v.get("x1",h))],_=[p.parse(v.get("y0",h)),p.parse(v.get("y1",h))];lr(m),lr(_);var S=!(g[0]>m[1]||g[1]_[1]||y[1]<_[0]),x=!S;v.setItemLayout(h,{points:c,allClipped:x});var b=v.getItemModel(h),w=b.getModel("itemStyle").getItemStyle(),T=b.get("z2"),C=Gu(l,"color");w.fill||(w.fill=C,X(w.fill)&&(w.fill=Ql(w.fill,.4))),w.stroke||(w.stroke=C),v.setItemVisual(h,"style",w),v.setItemVisual(h,"z2",Q(T,0))}),v.diff(sv(f).data).add(function(h){var c=v.getItemLayout(h),d=v.getItemVisual(h,"z2");if(!c.allClipped){var p=new Ee({z2:Q(d,0),shape:{points:c.points}});v.setItemGraphicEl(h,p),f.group.add(p)}}).update(function(h,c){var d=sv(f).data.getItemGraphicEl(c),p=v.getItemLayout(h),g=v.getItemVisual(h,"z2");p.allClipped?d&&f.group.remove(d):(d?It(d,{z2:Q(g,0),shape:{points:p.points}},a,h):d=new Ee({shape:{points:p.points}}),v.setItemGraphicEl(h,d),f.group.add(d))}).remove(function(h){var c=sv(f).data.getItemGraphicEl(h);f.group.remove(c)}).execute(),v.eachItemGraphicEl(function(h,c){var d=v.getItemModel(c),p=v.getItemVisual(c,"style");h.useStyle(v.getItemVisual(c,"style")),Se(h,ce(d),{labelFetcher:a,labelDataIndex:c,defaultText:v.getName(c)||"",inheritColor:X(p.fill)?Ql(p.fill,1):B.color.neutral99}),he(h,d),$t(h,null,null,d.get(["emphasis","disabled"])),ft(h).dataModel=a}),sv(f).data=v,f.group.silent=a.get("silent")||e.get("silent")},t.type="markArea",t})(Y_);function p$(r,t,e){var a,n,i=["x0","y0","x1","y1"];if(r){var o=U(r&&r.dimensions,function(u){var f=t.getData(),v=f.getDimensionInfo(f.mapDimension(u))||{};return G(G({},v),{name:u,ordinalMeta:null})});n=U(i,function(u,f){return{name:u,type:o[f%2].type}}),a=new Ge(n,e)}else n=[{name:"value",type:"float"}],a=new Ge(n,e);var s=U(e.get("data"),pt(h$,t,r,e));r&&(s=Rt(s,pt(c$,r)));var l=r?function(u,f,v,h){var c=u.coord[Math.floor(h/2)][h%2];return kn(c,n[h])}:function(u,f,v,h){return kn(u.value,n[h])};return a.initData(s,null,l),a.hasItemOption=!0,a}function g$(r){r.registerComponentModel(v$),r.registerComponentView(d$),r.registerPreprocessor(function(t){U_(t.series,"markArea")&&(t.markArea=t.markArea||{})})}var y$=function(r,t){if(t==="all")return{type:"all",title:r.getLocaleModel().get(["legend","selector","all"])};if(t==="inverse")return{type:"inverse",title:r.getLocaleModel().get(["legend","selector","inverse"])}},om=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.layoutMode={type:"box",ignoreSize:!0},e}return t.prototype.init=function(e,a,n){this.mergeDefaultAndTheme(e,n),e.selected=e.selected||{},this._updateSelector(e)},t.prototype.mergeOption=function(e,a){r.prototype.mergeOption.call(this,e,a),this._updateSelector(e)},t.prototype._updateSelector=function(e){var a=e.selector,n=this.ecModel;a===!0&&(a=e.selector=["all","inverse"]),W(a)&&A(a,function(i,o){X(i)&&(i={type:i}),a[o]=mt(i,y$(n,i.type))})},t.prototype.optionUpdated=function(){this._updateData(this.ecModel);var e=this._data;if(e[0]&&this.get("selectedMode")==="single"){for(var a=!1,n=0;n=0},t.prototype.getOrient=function(){return this.get("orient")==="vertical"?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},t.type="legend.plain",t.dependencies=["series"],t.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",bottom:B.size.m,align:"auto",backgroundColor:B.color.transparent,borderColor:B.color.border,borderRadius:0,borderWidth:0,padding:5,itemGap:8,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:B.color.disabled,inactiveBorderColor:B.color.disabled,inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:B.color.disabled,inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:B.color.secondary},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:B.color.tertiary,borderWidth:1,borderColor:B.color.border},emphasis:{selectorLabel:{show:!0,color:B.color.quaternary}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1},triggerEvent:!1},t})(xt),Eo=pt,sm=A,lv=rt,UR=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.newlineDisabled=!1,e}return t.prototype.init=function(){this.group.add(this._contentGroup=new lv),this.group.add(this._selectorGroup=new lv),this._isFirstRender=!0},t.prototype.getContentGroup=function(){return this._contentGroup},t.prototype.getSelectorGroup=function(){return this._selectorGroup},t.prototype.render=function(e,a,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),!!e.get("show",!0)){var o=e.get("align"),s=e.get("orient");(!o||o==="auto")&&(o=e.get("left")==="right"&&s==="vertical"?"right":"left");var l=e.get("selector",!0),u=e.get("selectorPosition",!0);l&&(!u||u==="auto")&&(u=s==="horizontal"?"end":"start"),this.renderInner(o,e,a,n,l,s,u);var f=de(e,n).refContainer,v=e.getBoxLayoutParams(),h=e.get("padding"),c=Xt(v,f,h),d=this.layoutInner(e,o,c,i,l,u),p=Xt(nt({width:d.width,height:d.height},v),f,h);this.group.x=p.x-d.x,this.group.y=p.y-d.y,this.group.markRedraw(),this.group.add(this._backgroundEl=RR(d,e))}},t.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},t.prototype.renderInner=function(e,a,n,i,o,s,l){var u=this.getContentGroup(),f=K(),v=a.get("selectedMode"),h=a.get("triggerEvent"),c=[];n.eachRawSeries(function(d){!d.get("legendHoverLink")&&c.push(d.id)}),sm(a.getData(),function(d,p){var g=this,y=d.get("name");if(!this.newlineDisabled&&(y===""||y===` +`)){var m=new lv;m.newline=!0,u.add(m);return}var _=n.getSeriesByName(y)[0];if(!f.get(y))if(_){var S=_.getData(),x=S.getVisual("legendLineStyle")||{},b=S.getVisual("legendIcon"),w=S.getVisual("style"),T=this._createItem(_,y,p,d,a,e,x,w,b,v,i);T.on("click",Eo(YC,y,null,i,c)).on("mouseover",Eo(lm,_.name,null,i,c)).on("mouseout",Eo(um,_.name,null,i,c)),n.ssr&&T.eachChild(function(C){var M=ft(C);M.seriesIndex=_.seriesIndex,M.dataIndex=p,M.ssrType="legend"}),h&&T.eachChild(function(C){g.packEventData(C,a,_,p,y)}),f.set(y,!0)}else n.eachRawSeries(function(C){var M=this;if(!f.get(y)&&C.legendVisualProvider){var D=C.legendVisualProvider;if(!D.containName(y))return;var I=D.indexOfName(y),L=D.getItemVisual(I,"style"),P=D.getItemVisual(I,"legendIcon"),k=Ve(L.fill);k&&k[3]===0&&(k[3]=.2,L=G(G({},L),{fill:Cr(k,"rgba")}));var R=this._createItem(C,y,p,d,a,e,{},L,P,v,i);R.on("click",Eo(YC,null,y,i,c)).on("mouseover",Eo(lm,null,y,i,c)).on("mouseout",Eo(um,null,y,i,c)),n.ssr&&R.eachChild(function(O){var E=ft(O);E.seriesIndex=C.seriesIndex,E.dataIndex=p,E.ssrType="legend"}),h&&R.eachChild(function(O){M.packEventData(O,a,C,p,y)}),f.set(y,!0)}},this)},this),o&&this._createSelector(o,a,i,s,l)},t.prototype.packEventData=function(e,a,n,i,o){var s={componentType:"legend",componentIndex:a.componentIndex,dataIndex:i,value:o,seriesIndex:n.seriesIndex};ft(e).eventData=s},t.prototype._createSelector=function(e,a,n,i,o){var s=this.getSelectorGroup();sm(e,function(u){var f=u.type,v=new Mt({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:f==="all"?"legendAllSelect":"legendInverseSelect",legendId:a.id})}});s.add(v);var h=a.getModel("selectorLabel"),c=a.getModel(["emphasis","selectorLabel"]);Se(v,{normal:h,emphasis:c},{defaultText:u.title}),In(v)})},t.prototype._createItem=function(e,a,n,i,o,s,l,u,f,v,h){var c=e.visualDrawType,d=o.get("itemWidth"),p=o.get("itemHeight"),g=o.isSelected(a),y=i.get("symbolRotate"),m=i.get("symbolKeepAspect"),_=i.get("icon");f=_||f||"roundRect";var S=m$(f,i,l,u,c,g,h),x=new lv,b=i.getModel("textStyle");if(tt(e.getLegendIcon)&&(!_||_==="inherit"))x.add(e.getLegendIcon({itemWidth:d,itemHeight:p,icon:f,iconRotate:y,itemStyle:S.itemStyle,lineStyle:S.lineStyle,symbolKeepAspect:m}));else{var w=_==="inherit"&&e.getData().getVisual("symbol")?y==="inherit"?e.getData().getVisual("symbolRotate"):y:0;x.add(_$({itemWidth:d,itemHeight:p,icon:f,iconRotate:w,itemStyle:S.itemStyle,symbolKeepAspect:m}))}var T=s==="left"?d+5:-5,C=s,M=o.get("formatter"),D=a;X(M)&&M?D=M.replace("{name}",a??""):tt(M)&&(D=M(a));var I=g?b.getTextColor():i.get("inactiveColor");x.add(new Mt({style:Ft(b,{text:D,x:T,y:p/2,fill:I,align:C,verticalAlign:"middle"},{inheritColor:I})}));var L=new St({shape:x.getBoundingRect(),style:{fill:"transparent"}}),P=i.getModel("tooltip");return P.get("show")&&nn({el:L,componentModel:o,itemName:a,itemTooltipOption:P.option}),x.add(L),x.eachChild(function(k){k.silent=!0}),L.silent=!v,this.getContentGroup().add(x),In(x),x.__legendDataIndex=n,x},t.prototype.layoutInner=function(e,a,n,i,o,s){var l=this.getContentGroup(),u=this.getSelectorGroup();Gi(e.get("orient"),l,e.get("itemGap"),n.width,n.height);var f=l.getBoundingRect(),v=[-f.x,-f.y];if(u.markRedraw(),l.markRedraw(),o){Gi("horizontal",u,e.get("selectorItemGap",!0));var h=u.getBoundingRect(),c=[-h.x,-h.y],d=e.get("selectorButtonGap",!0),p=e.getOrient().index,g=p===0?"width":"height",y=p===0?"height":"width",m=p===0?"y":"x";s==="end"?c[p]+=f[g]+d:v[p]+=h[g]+d,c[1-p]+=f[y]/2-h[y]/2,u.x=c[0],u.y=c[1],l.x=v[0],l.y=v[1];var _={x:0,y:0};return _[g]=f[g]+d+h[g],_[y]=Math.max(f[y],h[y]),_[m]=Math.min(0,h[m]+c[1-p]),_}else return l.x=v[0],l.y=v[1],this.group.getBoundingRect()},t.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},t.type="legend.plain",t})(Wt);function m$(r,t,e,a,n,i,o){function s(g,y){g.lineWidth==="auto"&&(g.lineWidth=y.lineWidth>0?2:0),sm(g,function(m,_){g[_]==="inherit"&&(g[_]=y[_])})}var l=t.getModel("itemStyle"),u=l.getItemStyle(),f=r.lastIndexOf("empty",0)===0?"fill":"stroke",v=l.getShallow("decal");u.decal=!v||v==="inherit"?a.decal:fs(v,o),u.fill==="inherit"&&(u.fill=a[n]),u.stroke==="inherit"&&(u.stroke=a[f]),u.opacity==="inherit"&&(u.opacity=(n==="fill"?a:e).opacity),s(u,a);var h=t.getModel("lineStyle"),c=h.getLineStyle();if(s(c,e),u.fill==="auto"&&(u.fill=a.fill),u.stroke==="auto"&&(u.stroke=a.fill),c.stroke==="auto"&&(c.stroke=a.fill),!i){var d=t.get("inactiveBorderWidth"),p=u[f];u.lineWidth=d==="auto"?a.lineWidth>0&&p?2:0:u.lineWidth,u.fill=t.get("inactiveColor"),u.stroke=t.get("inactiveBorderColor"),c.stroke=h.get("inactiveColor"),c.lineWidth=h.get("inactiveWidth")}return{itemStyle:u,lineStyle:c}}function _$(r){var t=r.icon||"roundRect",e=ie(t,0,0,r.itemWidth,r.itemHeight,r.itemStyle.fill,r.symbolKeepAspect);return e.setStyle(r.itemStyle),e.rotation=(r.iconRotate||0)*Math.PI/180,e.setOrigin([r.itemWidth/2,r.itemHeight/2]),t.indexOf("empty")>-1&&(e.style.stroke=e.style.fill,e.style.fill=B.color.neutral00,e.style.lineWidth=2),e}function YC(r,t,e,a){um(r,t,e,a),e.dispatchAction({type:"legendToggleSelect",name:r??t}),lm(r,t,e,a)}function YR(r){for(var t=r.getZr().storage.getDisplayList(),e,a=0,n=t.length;an[o],g=[-c.x,-c.y];a||(g[i]=f[u]);var y=[0,0],m=[-d.x,-d.y],_=Q(e.get("pageButtonGap",!0),e.get("itemGap",!0));if(p){var S=e.get("pageButtonPosition",!0);S==="end"?m[i]+=n[o]-d[o]:y[i]+=d[o]+_}m[1-i]+=c[s]/2-d[s]/2,f.setPosition(g),v.setPosition(y),h.setPosition(m);var x={x:0,y:0};if(x[o]=p?n[o]:c[o],x[s]=Math.max(c[s],d[s]),x[l]=Math.min(0,d[l]+m[1-i]),v.__rectSize=n[o],p){var b={x:0,y:0};b[o]=Math.max(n[o]-d[o]-_,0),b[s]=x[s],v.setClipPath(new St({shape:b})),v.__rectSize=b[o]}else h.eachChild(function(T){T.attr({invisible:!0,silent:!0})});var w=this._getPageInfo(e);return w.pageIndex!=null&&It(f,{x:w.contentPosition[0],y:w.contentPosition[1]},p?e:null),this._updatePageInfoView(e,w),x},t.prototype._pageGo=function(e,a,n){var i=this._getPageInfo(a)[e];i!=null&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:a.id})},t.prototype._updatePageInfoView=function(e,a){var n=this._controllerGroup;A(["pagePrev","pageNext"],function(f){var v=f+"DataIndex",h=a[v]!=null,c=n.childOfName(f);c&&(c.setStyle("fill",h?e.get("pageIconColor",!0):e.get("pageIconInactiveColor",!0)),c.cursor=h?"pointer":"default")});var i=n.childOfName("pageText"),o=e.get("pageFormatter"),s=a.pageIndex,l=s!=null?s+1:0,u=a.pageCount;i&&o&&i.setStyle("text",X(o)?o.replace("{current}",l==null?"":l+"").replace("{total}",u==null?"":u+""):o({current:l,total:u}))},t.prototype._getPageInfo=function(e){var a=e.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,o=e.getOrient().index,s=Yp[o],l=Zp[o],u=this._findTargetItemIndex(a),f=n.children(),v=f[u],h=f.length,c=h?1:0,d={contentPosition:[n.x,n.y],pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!v)return d;var p=S(v);d.contentPosition[o]=-p.s;for(var g=u+1,y=p,m=p,_=null;g<=h;++g)_=S(f[g]),(!_&&m.e>y.s+i||_&&!x(_,y.s))&&(m.i>y.i?y=m:y=_,y&&(d.pageNextDataIndex==null&&(d.pageNextDataIndex=y.i),++d.pageCount)),m=_;for(var g=u-1,y=p,m=p,_=null;g>=-1;--g)_=S(f[g]),(!_||!x(m,_.s))&&y.i=w&&b.s<=w+i}},t.prototype._findTargetItemIndex=function(e){if(!this._showController)return 0;var a,n=this.getContentGroup(),i;return n.eachChild(function(o,s){var l=o.__legendDataIndex;i==null&&l!=null&&(i=s),l===e&&(a=s)}),a??i},t.type="legend.scroll",t})(UR);function T$(r){r.registerAction("legendScroll","legendscroll",function(t,e){var a=t.scrollDataIndex;a!=null&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(n){n.setScrollDataIndex(a)})})}function C$(r){_t(ZR),r.registerComponentModel(b$),r.registerComponentView(w$),T$(r)}function A$(r){_t(ZR),_t(C$)}var M$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="dataZoom.inside",t.defaultOption=Un(Tu.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),t})(Tu),Z_=bt();function D$(r,t,e){Z_(r).coordSysRecordMap.each(function(a){var n=a.dataZoomInfoMap.get(t.uid);n&&(n.getRange=e)})}function L$(r,t){for(var e=Z_(r).coordSysRecordMap,a=e.keys(),n=0;ni[n+a]&&(a=u),o=o&&l.get("preventDefaultMouseMove",!0)}),{controlType:a,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!o,api:e,zInfo:{component:t.model},triggerInfo:{roamTrigger:null,isInSelf:t.containsPoint}}}}function E$(r){r.registerProcessor(r.PRIORITY.PROCESSOR.FILTER,function(t,e){var a=Z_(e),n=a.coordSysRecordMap||(a.coordSysRecordMap=K());n.each(function(i){i.dataZoomInfoMap=null}),t.eachComponent({mainType:"dataZoom",subType:"inside"},function(i){var o=LR(i);A(o.infoList,function(s){var l=s.model.uid,u=n.get(l)||n.set(l,I$(e,s.model)),f=u.dataZoomInfoMap||(u.dataZoomInfoMap=K());f.set(i.uid,{dzReferCoordSysInfo:s,model:i,getRange:null})})}),n.each(function(i){var o=i.controller,s,l=i.dataZoomInfoMap;if(l){var u=l.keys()[0];u!=null&&(s=l.get(u))}if(!s){XR(n,i);return}var f=k$(l,i,e);o.enable(f.controlType,f.opt),Rs(i,"dispatchAction",s.model.get("throttle",!0),"fixRate")})})}var O$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type="dataZoom.inside",e}return t.prototype.render=function(e,a,n){if(r.prototype.render.apply(this,arguments),e.noTarget()){this._clear();return}this.range=e.getPercentRange(),D$(n,e,{pan:$(Xp.pan,this),zoom:$(Xp.zoom,this),scrollMove:$(Xp.scrollMove,this)})},t.prototype.dispose=function(){this._clear(),r.prototype.dispose.apply(this,arguments)},t.prototype._clear=function(){L$(this.api,this.dataZoomModel),this.range=null},t.type="dataZoom.inside",t})(z_),Xp={zoom:function(r,t,e,a){var n=this.range,i=n.slice(),o=r.axisModels[0];if(o){var s=$p[t](null,[a.originX,a.originY],o,e,r),l=(s.signal>0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(i[1]-i[0])+i[0],u=Math.max(1/a.scale,0);i[0]=(i[0]-l)*u+l,i[1]=(i[1]-l)*u+l;var f=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();if(zn(0,i,[0,100],0,f.minSpan,f.maxSpan),this.range=i,n[0]!==i[0]||n[1]!==i[1])return i}},pan:qC(function(r,t,e,a,n,i){var o=$p[a]([i.oldX,i.oldY],[i.newX,i.newY],t,n,e);return o.signal*(r[1]-r[0])*o.pixel/o.pixelLength}),scrollMove:qC(function(r,t,e,a,n,i){var o=$p[a]([0,0],[i.scrollDelta,i.scrollDelta],t,n,e);return o.signal*(r[1]-r[0])*i.scrollDelta})};function qC(r){return function(t,e,a,n){var i=this.range,o=i.slice(),s=t.axisModels[0];if(s){var l=r(o,s,t,e,a,n);if(zn(l,o,[0,100],"all"),this.range=o,i[0]!==o[0]||i[1]!==o[1])return o}}}var $p={grid:function(r,t,e,a,n){var i=e.axis,o={},s=n.model.coordinateSystem.getRect();return r=r||[0,0],i.dim==="x"?(o.pixel=t[0]-r[0],o.pixelLength=s.width,o.pixelStart=s.x,o.signal=i.inverse?1:-1):(o.pixel=t[1]-r[1],o.pixelLength=s.height,o.pixelStart=s.y,o.signal=i.inverse?-1:1),o},polar:function(r,t,e,a,n){var i=e.axis,o={},s=n.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return r=r?s.pointToCoord(r):[0,0],t=s.pointToCoord(t),e.mainType==="radiusAxis"?(o.pixel=t[0]-r[0],o.pixelLength=l[1]-l[0],o.pixelStart=l[0],o.signal=i.inverse?1:-1):(o.pixel=t[1]-r[1],o.pixelLength=u[1]-u[0],o.pixelStart=u[0],o.signal=i.inverse?-1:1),o},singleAxis:function(r,t,e,a,n){var i=e.axis,o=n.model.coordinateSystem.getRect(),s={};return r=r||[0,0],i.orient==="horizontal"?(s.pixel=t[0]-r[0],s.pixelLength=o.width,s.pixelStart=o.x,s.signal=i.inverse?1:-1):(s.pixel=t[1]-r[1],s.pixelLength=o.height,s.pixelStart=o.y,s.signal=i.inverse?-1:1),s}};function $R(r){V_(r),r.registerComponentModel(M$),r.registerComponentView(O$),E$(r)}var N$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.type="dataZoom.slider",t.layoutMode="box",t.defaultOption=Un(Tu.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:B.color.accent10,borderRadius:0,backgroundColor:B.color.transparent,dataBackground:{lineStyle:{color:B.color.accent30,width:.5},areaStyle:{color:B.color.accent20,opacity:.2}},selectedDataBackground:{lineStyle:{color:B.color.accent40,width:.5},areaStyle:{color:B.color.accent20,opacity:.3}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:B.color.neutral00,borderColor:B.color.accent20},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:B.color.accent40,opacity:.5},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:B.color.tertiary},brushSelect:!0,brushStyle:{color:B.color.accent30,opacity:.3},emphasis:{handleLabel:{show:!0},handleStyle:{borderColor:B.color.accent40},moveHandleStyle:{opacity:.8}},defaultLocationEdgeGap:15}),t})(Tu),gl=St,B$=1,qp=30,z$=7,yl="horizontal",jC="vertical",V$=5,G$=["line","bar","candlestick","scatter"],F$={easing:"cubicOut",duration:100,delay:0},H$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e._displayables={},e}return t.prototype.init=function(e,a){this.api=a,this._onBrush=$(this._onBrush,this),this._onBrushEnd=$(this._onBrushEnd,this)},t.prototype.render=function(e,a,n,i){if(r.prototype.render.apply(this,arguments),Rs(this,"_dispatchZoomAction",e.get("throttle"),"fixRate"),this._orient=e.getOrient(),e.get("show")===!1){this.group.removeAll();return}if(e.noTarget()){this._clear(),this.group.removeAll();return}(!i||i.type!=="dataZoom"||i.from!==this.uid)&&this._buildView(),this._updateView()},t.prototype.dispose=function(){this._clear(),r.prototype.dispose.apply(this,arguments)},t.prototype._clear=function(){uu(this,"_dispatchZoomAction");var e=this.api.getZr();e.off("mousemove",this._onBrush),e.off("mouseup",this._onBrushEnd)},t.prototype._buildView=function(){var e=this.group;e.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var a=this._displayables.sliderGroup=new rt;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),e.add(a),this._positionGroup()},t.prototype._resetLocation=function(){var e=this.dataZoomModel,a=this.api,n=e.get("brushSelect"),i=n?z$:0,o=de(e,a).refContainer,s=this._findCoordRect(),l=e.get("defaultLocationEdgeGap",!0)||0,u=this._orient===yl?{right:o.width-s.x-s.width,top:o.height-qp-l-i,width:s.width,height:qp}:{right:l,top:s.y,width:qp,height:s.height},f=no(e.option);A(["right","top","width","height"],function(h){f[h]==="ph"&&(f[h]=u[h])});var v=Xt(f,o);this._location={x:v.x,y:v.y},this._size=[v.width,v.height],this._orient===jC&&this._size.reverse()},t.prototype._positionGroup=function(){var e=this.group,a=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),o=i&&i.get("inverse"),s=this._displayables.sliderGroup,l=(this._dataShadowInfo||{}).otherAxisInverse;s.attr(n===yl&&!o?{scaleY:l?1:-1,scaleX:1}:n===yl&&o?{scaleY:l?1:-1,scaleX:-1}:n===jC&&!o?{scaleY:l?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:l?-1:1,scaleX:-1,rotation:Math.PI/2});var u=e.getBoundingRect([s]);e.x=a.x-u.x,e.y=a.y-u.y,e.markRedraw()},t.prototype._getViewExtent=function(){return[0,this._size[0]]},t.prototype._renderBackground=function(){var e=this.dataZoomModel,a=this._size,n=this._displayables.sliderGroup,i=e.get("brushSelect");n.add(new gl({silent:!0,shape:{x:0,y:0,width:a[0],height:a[1]},style:{fill:e.get("backgroundColor")},z2:-40}));var o=new gl({shape:{x:0,y:0,width:a[0],height:a[1]},style:{fill:"transparent"},z2:0,onclick:$(this._onClickPanel,this)}),s=this.api.getZr();i?(o.on("mousedown",this._onBrushStart,this),o.cursor="crosshair",s.on("mousemove",this._onBrush),s.on("mouseup",this._onBrushEnd)):(s.off("mousemove",this._onBrush),s.off("mouseup",this._onBrushEnd)),n.add(o)},t.prototype._renderDataShadow=function(){var e=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],!e)return;var a=this._size,n=this._shadowSize||[],i=e.series,o=i.getRawData(),s=i.getShadowDim&&i.getShadowDim(),l=s&&o.getDimensionInfo(s)?i.getShadowDim():e.otherDim;if(l==null)return;var u=this._shadowPolygonPts,f=this._shadowPolylinePts;if(o!==this._shadowData||l!==this._shadowDim||a[0]!==n[0]||a[1]!==n[1]){var v=o.getDataExtent(e.thisDim),h=o.getDataExtent(l),c=(h[1]-h[0])*.3;h=[h[0]-c,h[1]+c];var d=[0,a[1]],p=[0,a[0]],g=[[a[0],0],[0,0]],y=[],m=p[1]/Math.max(1,o.count()-1),_=a[0]/(v[1]-v[0]),S=e.thisAxis.type==="time",x=-m,b=Math.round(o.count()/a[0]),w;o.each([e.thisDim,l],function(I,L,P){if(b>0&&P%b){S||(x+=m);return}x=S?(+I-v[0])*_:x+m;var k=L==null||isNaN(L)||L==="",R=k?0:kt(L,h,d,!0);k&&!w&&P?(g.push([g[g.length-1][0],0]),y.push([y[y.length-1][0],0])):!k&&w&&(g.push([x,0]),y.push([x,0])),k||(g.push([x,R]),y.push([x,R])),w=k}),u=this._shadowPolygonPts=g,f=this._shadowPolylinePts=y}this._shadowData=o,this._shadowDim=l,this._shadowSize=[a[0],a[1]];var T=this.dataZoomModel;function C(I){var L=T.getModel(I?"selectedDataBackground":"dataBackground"),P=new rt,k=new Ee({shape:{points:u},segmentIgnoreThreshold:1,style:L.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),R=new Ae({shape:{points:f},segmentIgnoreThreshold:1,style:L.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return P.add(k),P.add(R),P}for(var M=0;M<3;M++){var D=C(M===1);this._displayables.sliderGroup.add(D),this._displayables.dataShadowSegs.push(D)}},t.prototype._prepareDataShadowInfo=function(){var e=this.dataZoomModel,a=e.get("showDataShadow");if(a!==!1){var n,i=this.ecModel;return e.eachTargetAxis(function(o,s){var l=e.getAxisProxy(o,s).getTargetSeriesModels();A(l,function(u){if(!n&&!(a!==!0&&yt(G$,u.get("type"))<0)){var f=i.getComponent(An(o),s).axis,v=W$(o),h,c=u.coordinateSystem;v!=null&&c.getOtherAxis&&(h=c.getOtherAxis(f).inverse),v=u.getData().mapDimension(v);var d=u.getData().mapDimension(o);n={thisAxis:f,series:u,thisDim:d,otherDim:v,otherAxisInverse:h}}},this)},this),n}},t.prototype._renderHandle=function(){var e=this.group,a=this._displayables,n=a.handles=[null,null],i=a.handleLabels=[null,null],o=this._displayables.sliderGroup,s=this._size,l=this.dataZoomModel,u=this.api,f=l.get("borderRadius")||0,v=l.get("brushSelect"),h=a.filler=new gl({silent:v,style:{fill:l.get("fillerColor")},textConfig:{position:"inside"}});o.add(h),o.add(new gl({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:s[0],height:s[1],r:f},style:{stroke:l.get("dataBackgroundColor")||l.get("borderColor"),lineWidth:B$,fill:B.color.transparent}})),A([0,1],function(_){var S=l.get("handleIcon");!eh[S]&&S.indexOf("path://")<0&&S.indexOf("image://")<0&&(S="path://"+S);var x=ie(S,-1,0,2,2,null,!0);x.attr({cursor:U$(this._orient),draggable:!0,drift:$(this._onDragMove,this,_),ondragend:$(this._onDragEnd,this),onmouseover:$(this._showDataInfo,this,!0),onmouseout:$(this._showDataInfo,this,!1),z2:5});var b=x.getBoundingRect(),w=l.get("handleSize");this._handleHeight=Z(w,this._size[1]),this._handleWidth=b.width/b.height*this._handleHeight,x.setStyle(l.getModel("handleStyle").getItemStyle()),x.style.strokeNoScale=!0,x.rectHover=!0,x.ensureState("emphasis").style=l.getModel(["emphasis","handleStyle"]).getItemStyle(),In(x);var T=l.get("handleColor");T!=null&&(x.style.fill=T),o.add(n[_]=x);var C=l.getModel("textStyle"),M=l.get("handleLabel")||{},D=M.show||!1;e.add(i[_]=new Mt({silent:!0,invisible:!D,style:Ft(C,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:C.getTextColor(),font:C.getFont()}),z2:10}))},this);var c=h;if(v){var d=Z(l.get("moveHandleSize"),s[1]),p=a.moveHandle=new St({style:l.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:s[1]-.5,height:d}}),g=d*.8,y=a.moveHandleIcon=ie(l.get("moveHandleIcon"),-g/2,-g/2,g,g,B.color.neutral00,!0);y.silent=!0,y.y=s[1]+d/2-.5,p.ensureState("emphasis").style=l.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var m=Math.min(s[1]/2,Math.max(d,10));c=a.moveZone=new St({invisible:!0,shape:{y:s[1]-m,height:d+m}}),c.on("mouseover",function(){u.enterEmphasis(p)}).on("mouseout",function(){u.leaveEmphasis(p)}),o.add(p),o.add(y),o.add(c)}c.attr({draggable:!0,cursor:"default",drift:$(this._onDragMove,this,"all"),ondragstart:$(this._showDataInfo,this,!0),ondragend:$(this._onDragEnd,this),onmouseover:$(this._showDataInfo,this,!0),onmouseout:$(this._showDataInfo,this,!1)})},t.prototype._resetInterval=function(){var e=this._range=this.dataZoomModel.getPercentRange(),a=this._getViewExtent();this._handleEnds=[kt(e[0],[0,100],a,!0),kt(e[1],[0,100],a,!0)]},t.prototype._updateInterval=function(e,a){var n=this.dataZoomModel,i=this._handleEnds,o=this._getViewExtent(),s=n.findRepresentativeAxisProxy().getMinMaxSpan(),l=[0,100];zn(a,i,o,n.get("zoomLock")?"all":e,s.minSpan!=null?kt(s.minSpan,l,o,!0):null,s.maxSpan!=null?kt(s.maxSpan,l,o,!0):null);var u=this._range,f=this._range=lr([kt(i[0],o,l,!0),kt(i[1],o,l,!0)]);return!u||u[0]!==f[0]||u[1]!==f[1]},t.prototype._updateView=function(e){var a=this._displayables,n=this._handleEnds,i=lr(n.slice()),o=this._size;A([0,1],function(c){var d=a.handles[c],p=this._handleHeight;d.attr({scaleX:p/2,scaleY:p/2,x:n[c]+(c?-1:1),y:o[1]/2-p/2})},this),a.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:o[1]});var s={x:i[0],width:i[1]-i[0]};a.moveHandle&&(a.moveHandle.setShape(s),a.moveZone.setShape(s),a.moveZone.getBoundingRect(),a.moveHandleIcon&&a.moveHandleIcon.attr("x",s.x+s.width/2));for(var l=a.dataShadowSegs,u=[0,i[0],i[1],o[0]],f=0;fa[0]||n[1]<0||n[1]>a[1])){var i=this._handleEnds,o=(i[0]+i[1])/2,s=this._updateInterval("all",n[0]-o);this._updateView(),s&&this._dispatchZoomAction(!1)}},t.prototype._onBrushStart=function(e){var a=e.offsetX,n=e.offsetY;this._brushStart=new st(a,n),this._brushing=!0,this._brushStartTime=+new Date},t.prototype._onBrushEnd=function(e){if(this._brushing){var a=this._displayables.brushRect;if(this._brushing=!1,!!a){a.attr("ignore",!0);var n=a.shape,i=+new Date;if(!(i-this._brushStartTime<200&&Math.abs(n.width)<5)){var o=this._getViewExtent(),s=[0,100],l=this._handleEnds=[n.x,n.x+n.width],u=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();zn(0,l,o,0,u.minSpan!=null?kt(u.minSpan,s,o,!0):null,u.maxSpan!=null?kt(u.maxSpan,s,o,!0):null),this._range=lr([kt(l[0],o,s,!0),kt(l[1],o,s,!0)]),this._updateView(),this._dispatchZoomAction(!1)}}}},t.prototype._onBrush=function(e){this._brushing&&(qa(e.event),this._updateBrushRect(e.offsetX,e.offsetY))},t.prototype._updateBrushRect=function(e,a){var n=this._displayables,i=this.dataZoomModel,o=n.brushRect;o||(o=n.brushRect=new gl({silent:!0,style:i.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(o)),o.attr("ignore",!1);var s=this._brushStart,l=this._displayables.sliderGroup,u=l.transformCoordToLocal(e,a),f=l.transformCoordToLocal(s.x,s.y),v=this._size;u[0]=Math.max(Math.min(v[0],u[0]),0),o.setShape({x:f[0],y:0,width:u[0]-f[0],height:v[1]})},t.prototype._dispatchZoomAction=function(e){var a=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:e?F$:null,start:a[0],end:a[1]})},t.prototype._findCoordRect=function(){var e,a=LR(this.dataZoomModel).infoList;if(!e&&a.length){var n=a[0].model.coordinateSystem;e=n.getRect&&n.getRect()}if(!e){var i=this.api.getWidth(),o=this.api.getHeight();e={x:i*.2,y:o*.2,width:i*.6,height:o*.6}}return e},t.type="dataZoom.slider",t})(z_);function W$(r){var t={x:"y",y:"x",radius:"angle",angle:"radius"};return t[r]}function U$(r){return r==="vertical"?"ns-resize":"ew-resize"}function qR(r){r.registerComponentModel(N$),r.registerComponentView(H$),V_(r)}function Y$(r){_t($R),_t(qR)}var jR={get:function(r,t,e){var a=et((Z$[r]||{})[t]);return e&&W(a)?a[a.length-1]:a}},Z$={color:{active:["#006edd","#e0ffff"],inactive:[B.color.transparent]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},KC=_e.mapVisual,X$=_e.eachVisual,$$=W,JC=A,q$=lr,j$=kt,Nh=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.stateList=["inRange","outOfRange"],e.replacableOptionKeys=["inRange","outOfRange","target","controller","color"],e.layoutMode={type:"box",ignoreSize:!0},e.dataBound=[-1/0,1/0],e.targetVisuals={},e.controllerVisuals={},e}return t.prototype.init=function(e,a,n){this.mergeDefaultAndTheme(e,n)},t.prototype.optionUpdated=function(e,a){var n=this.option;!a&&VR(n,e,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},t.prototype.resetVisual=function(e){var a=this.stateList;e=$(e,this),this.controllerVisuals=am(this.option.controller,a,e),this.targetVisuals=am(this.option.target,a,e)},t.prototype.getItemSymbol=function(){return null},t.prototype.getTargetSeriesIndices=function(){var e=this.option.seriesId,a=this.option.seriesIndex;a==null&&e==null&&(a="all");var n=xs(this.ecModel,"series",{index:a,id:e},{useDefault:!1,enableAll:!0,enableNone:!1}).models;return U(n,function(i){return i.componentIndex})},t.prototype.eachTargetSeries=function(e,a){A(this.getTargetSeriesIndices(),function(n){var i=this.ecModel.getSeriesByIndex(n);i&&e.call(a,i)},this)},t.prototype.isTargetSeries=function(e){var a=!1;return this.eachTargetSeries(function(n){n===e&&(a=!0)}),a},t.prototype.formatValueText=function(e,a,n){var i=this.option,o=i.precision,s=this.dataBound,l=i.formatter,u;n=n||["<",">"],W(e)&&(e=e.slice(),u=!0);var f=a?e:u?[v(e[0]),v(e[1])]:v(e);if(X(l))return l.replace("{value}",u?f[0]:f).replace("{value2}",u?f[1]:f);if(tt(l))return u?l(e[0],e[1]):l(e);if(u)return e[0]===s[0]?n[0]+" "+f[1]:e[1]===s[1]?n[1]+" "+f[0]:f[0]+" - "+f[1];return f;function v(h){return h===s[0]?"min":h===s[1]?"max":(+h).toFixed(Math.min(o,20))}},t.prototype.resetExtent=function(){var e=this.option,a=q$([e.min,e.max]);this._dataExtent=a},t.prototype.getDataDimensionIndex=function(e){var a=this.option.dimension;if(a!=null)return e.getDimensionIndex(a);for(var n=e.dimensions,i=n.length-1;i>=0;i--){var o=n[i],s=e.getDimensionInfo(o);if(!s.isCalculationCoord)return s.storeDimIndex}},t.prototype.getExtent=function(){return this._dataExtent.slice()},t.prototype.completeVisualOption=function(){var e=this.ecModel,a=this.option,n={inRange:a.inRange,outOfRange:a.outOfRange},i=a.target||(a.target={}),o=a.controller||(a.controller={});mt(i,n),mt(o,n);var s=this.isCategory();l.call(this,i),l.call(this,o),u.call(this,i,"inRange","outOfRange"),f.call(this,o);function l(v){$$(a.color)&&!v.inRange&&(v.inRange={color:a.color.slice().reverse()}),v.inRange=v.inRange||{color:e.get("gradientColor")}}function u(v,h,c){var d=v[h],p=v[c];d&&!p&&(p=v[c]={},JC(d,function(g,y){if(_e.isValidType(y)){var m=jR.get(y,"inactive",s);m!=null&&(p[y]=m,y==="color"&&!p.hasOwnProperty("opacity")&&!p.hasOwnProperty("colorAlpha")&&(p.opacity=[0,0]))}}))}function f(v){var h=(v.inRange||{}).symbol||(v.outOfRange||{}).symbol,c=(v.inRange||{}).symbolSize||(v.outOfRange||{}).symbolSize,d=this.get("inactiveColor"),p=this.getItemSymbol(),g=p||"roundRect";JC(this.stateList,function(y){var m=this.itemSize,_=v[y];_||(_=v[y]={color:s?d:[d]}),_.symbol==null&&(_.symbol=h&&et(h)||(s?g:[g])),_.symbolSize==null&&(_.symbolSize=c&&et(c)||(s?m[0]:[m[0],m[0]])),_.symbol=KC(_.symbol,function(b){return b==="none"?g:b});var S=_.symbolSize;if(S!=null){var x=-1/0;X$(S,function(b){b>x&&(x=b)}),_.symbolSize=KC(S,function(b){return j$(b,[0,x],[0,m[0]],!0)})}},this)}},t.prototype.resetItemSize=function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},t.prototype.isCategory=function(){return!!this.option.categories},t.prototype.setSelected=function(e){},t.prototype.getSelected=function(){return null},t.prototype.getValueState=function(e){return null},t.prototype.getVisualMeta=function(e){return null},t.type="visualMap",t.dependencies=["series"],t.defaultOption={show:!0,z:4,min:0,max:200,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:B.color.transparent,borderColor:B.color.borderTint,contentColor:B.color.theme[0],inactiveColor:B.color.disabled,borderWidth:0,padding:B.size.m,textGap:10,precision:0,textStyle:{color:B.color.secondary}},t})(xt),QC=[20,140],K$=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.optionUpdated=function(e,a){r.prototype.optionUpdated.apply(this,arguments),this.resetExtent(),this.resetVisual(function(n){n.mappingMethod="linear",n.dataExtent=this.getExtent()}),this._resetRange()},t.prototype.resetItemSize=function(){r.prototype.resetItemSize.apply(this,arguments);var e=this.itemSize;(e[0]==null||isNaN(e[0]))&&(e[0]=QC[0]),(e[1]==null||isNaN(e[1]))&&(e[1]=QC[1])},t.prototype._resetRange=function(){var e=this.getExtent(),a=this.option.range;!a||a.auto?(e.auto=1,this.option.range=e):W(a)&&(a[0]>a[1]&&a.reverse(),a[0]=Math.max(a[0],e[0]),a[1]=Math.min(a[1],e[1]))},t.prototype.completeVisualOption=function(){r.prototype.completeVisualOption.apply(this,arguments),A(this.stateList,function(e){var a=this.option.controller[e].symbolSize;a&&a[0]!==a[1]&&(a[0]=a[1]/3)},this)},t.prototype.setSelected=function(e){this.option.range=e.slice(),this._resetRange()},t.prototype.getSelected=function(){var e=this.getExtent(),a=lr((this.get("range")||[]).slice());return a[0]>e[1]&&(a[0]=e[1]),a[1]>e[1]&&(a[1]=e[1]),a[0]=n[1]||e<=a[1])?"inRange":"outOfRange"},t.prototype.findTargetDataIndices=function(e){var a=[];return this.eachTargetSeries(function(n){var i=[],o=n.getData();o.each(this.getDataDimensionIndex(o),function(s,l){e[0]<=s&&s<=e[1]&&i.push(l)},this),a.push({seriesId:n.id,dataIndex:i})},this),a},t.prototype.getVisualMeta=function(e){var a=tA(this,"outOfRange",this.getExtent()),n=tA(this,"inRange",this.option.range.slice()),i=[];function o(c,d){i.push({value:c,color:e(c,d)})}for(var s=0,l=0,u=n.length,f=a.length;le[1])break;i.push({color:this.getControllerVisual(l,"color",a),offset:s/n})}return i.push({color:this.getControllerVisual(e[1],"color",a),offset:1}),i},t.prototype._createBarPoints=function(e,a){var n=this.visualMapModel.itemSize;return[[n[0]-a[0],e[0]],[n[0],e[0]],[n[0],e[1]],[n[0]-a[1],e[1]]]},t.prototype._createBarGroup=function(e){var a=this._orient,n=this.visualMapModel.get("inverse");return new rt(a==="horizontal"&&!n?{scaleX:e==="bottom"?1:-1,rotation:Math.PI/2}:a==="horizontal"&&n?{scaleX:e==="bottom"?-1:1,rotation:-Math.PI/2}:a==="vertical"&&!n?{scaleX:e==="left"?1:-1,scaleY:-1}:{scaleX:e==="left"?1:-1})},t.prototype._updateHandle=function(e,a){if(this._useHandle){var n=this._shapes,i=this.visualMapModel,o=n.handleThumbs,s=n.handleLabels,l=i.itemSize,u=i.getExtent(),f=this._applyTransform("left",n.mainGroup);J$([0,1],function(v){var h=o[v];h.setStyle("fill",a.handlesColor[v]),h.y=e[v];var c=na(e[v],[0,l[1]],u,!0),d=this.getControllerVisual(c,"symbolSize");h.scaleX=h.scaleY=d/l[0],h.x=l[0]-d/2;var p=Wr(n.handleLabelPoints[v],Pn(h,this.group));if(this._orient==="horizontal"){var g=f==="left"||f==="top"?(l[0]-d)/2:(l[0]-d)/-2;p[1]+=g}s[v].setStyle({x:p[0],y:p[1],text:i.formatValueText(this._dataInterval[v]),verticalAlign:"middle",align:this._orient==="vertical"?this._applyTransform("left",n.mainGroup):"center"})},this)}},t.prototype._showIndicator=function(e,a,n,i){var o=this.visualMapModel,s=o.getExtent(),l=o.itemSize,u=[0,l[1]],f=this._shapes,v=f.indicator;if(v){v.attr("invisible",!1);var h={convertOpacityToAlpha:!0},c=this.getControllerVisual(e,"color",h),d=this.getControllerVisual(e,"symbolSize"),p=na(e,s,u,!0),g=l[0]-d/2,y={x:v.x,y:v.y};v.y=p,v.x=g;var m=Wr(f.indicatorLabelPoint,Pn(v,this.group)),_=f.indicatorLabel;_.attr("invisible",!1);var S=this._applyTransform("left",f.mainGroup),x=this._orient,b=x==="horizontal";_.setStyle({text:(n||"")+o.formatValueText(a),verticalAlign:b?S:"middle",align:b?"center":S});var w={x:g,y:p,style:{fill:c}},T={style:{x:m[0],y:m[1]}};if(o.ecModel.isAnimationEnabled()&&!this._firstShowIndicator){var C={duration:100,easing:"cubicInOut",additive:!0};v.x=y.x,v.y=y.y,v.animateTo(w,C),_.animateTo(T,C)}else v.attr(w),_.attr(T);this._firstShowIndicator=!1;var M=this._shapes.handleLabels;if(M)for(var D=0;Do[1]&&(v[1]=1/0),a&&(v[0]===-1/0?this._showIndicator(f,v[1],"< ",l):v[1]===1/0?this._showIndicator(f,v[0],"> ",l):this._showIndicator(f,f,"≈ ",l));var h=this._hoverLinkDataIndices,c=[];(a||nA(n))&&(c=this._hoverLinkDataIndices=n.findTargetDataIndices(v));var d=OO(h,c);this._dispatchHighDown("downplay",Iv(d[0],n)),this._dispatchHighDown("highlight",Iv(d[1],n))}},t.prototype._hoverLinkFromSeriesMouseOver=function(e){var a;if(Ei(e.target,function(l){var u=ft(l);if(u.dataIndex!=null)return a=u,!0},!0),!!a){var n=this.ecModel.getSeriesByIndex(a.seriesIndex),i=this.visualMapModel;if(i.isTargetSeries(n)){var o=n.getData(a.dataType),s=o.getStore().get(i.getDataDimensionIndex(o),a.dataIndex);isNaN(s)||this._showIndicator(s,s)}}},t.prototype._hideIndicator=function(){var e=this._shapes;e.indicator&&e.indicator.attr("invisible",!0),e.indicatorLabel&&e.indicatorLabel.attr("invisible",!0);var a=this._shapes.handleLabels;if(a)for(var n=0;n=0&&(i.dimension=o,a.push(i))}}),r.getData().setVisual("visualMeta",a)}}];function oq(r,t,e,a){for(var n=t.targetVisuals[a],i=_e.prepareVisualTypes(n),o={color:Gu(r.getData(),"color")},s=0,l=i.length;s0:t.splitNumber>0)||t.calculable)?"continuous":"piecewise"}),r.registerAction(aq,nq),A(iq,function(t){r.registerVisual(r.PRIORITY.VISUAL.COMPONENT,t)}),r.registerPreprocessor(sq))}function tk(r){r.registerComponentModel(K$),r.registerComponentView(eq),QR(r)}var lq=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e._pieceList=[],e}return t.prototype.optionUpdated=function(e,a){r.prototype.optionUpdated.apply(this,arguments),this.resetExtent();var n=this._mode=this._determineMode();this._pieceList=[],uq[this._mode].call(this,this._pieceList),this._resetSelected(e,a);var i=this.option.categories;this.resetVisual(function(o,s){n==="categories"?(o.mappingMethod="category",o.categories=et(i)):(o.dataExtent=this.getExtent(),o.mappingMethod="piecewise",o.pieceList=U(this._pieceList,function(l){return l=et(l),s!=="inRange"&&(l.visual=null),l}))})},t.prototype.completeVisualOption=function(){var e=this.option,a={},n=_e.listVisualTypes(),i=this.isCategory();A(e.pieces,function(s){A(n,function(l){s.hasOwnProperty(l)&&(a[l]=1)})}),A(a,function(s,l){var u=!1;A(this.stateList,function(f){u=u||o(e,f,l)||o(e.target,f,l)},this),!u&&A(this.stateList,function(f){(e[f]||(e[f]={}))[l]=jR.get(l,f==="inRange"?"active":"inactive",i)})},this);function o(s,l,u){return s&&s[l]&&s[l].hasOwnProperty(u)}r.prototype.completeVisualOption.apply(this,arguments)},t.prototype._resetSelected=function(e,a){var n=this.option,i=this._pieceList,o=(a?n:e).selected||{};if(n.selected=o,A(i,function(l,u){var f=this.getSelectedMapKey(l);o.hasOwnProperty(f)||(o[f]=!0)},this),n.selectedMode==="single"){var s=!1;A(i,function(l,u){var f=this.getSelectedMapKey(l);o[f]&&(s?o[f]=!1:s=!0)},this)}},t.prototype.getItemSymbol=function(){return this.get("itemSymbol")},t.prototype.getSelectedMapKey=function(e){return this._mode==="categories"?e.value+"":e.index+""},t.prototype.getPieceList=function(){return this._pieceList},t.prototype._determineMode=function(){var e=this.option;return e.pieces&&e.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},t.prototype.setSelected=function(e){this.option.selected=et(e)},t.prototype.getValueState=function(e){var a=_e.findPieceIndex(e,this._pieceList);return a!=null&&this.option.selected[this.getSelectedMapKey(this._pieceList[a])]?"inRange":"outOfRange"},t.prototype.findTargetDataIndices=function(e){var a=[],n=this._pieceList;return this.eachTargetSeries(function(i){var o=[],s=i.getData();s.each(this.getDataDimensionIndex(s),function(l,u){var f=_e.findPieceIndex(l,n);f===e&&o.push(u)},this),a.push({seriesId:i.id,dataIndex:o})},this),a},t.prototype.getRepresentValue=function(e){var a;if(this.isCategory())a=e.value;else if(e.value!=null)a=e.value;else{var n=e.interval||[];a=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return a},t.prototype.getVisualMeta=function(e){if(this.isCategory())return;var a=[],n=["",""],i=this;function o(f,v){var h=i.getRepresentValue({interval:f});v||(v=i.getValueState(h));var c=e(h,v);f[0]===-1/0?n[0]=c:f[1]===1/0?n[1]=c:a.push({value:f[0],color:c},{value:f[1],color:c})}var s=this._pieceList.slice();if(!s.length)s.push({interval:[-1/0,1/0]});else{var l=s[0].interval[0];l!==-1/0&&s.unshift({interval:[-1/0,l]}),l=s[s.length-1].interval[1],l!==1/0&&s.push({interval:[l,1/0]})}var u=-1/0;return A(s,function(f){var v=f.interval;v&&(v[0]>u&&o([u,v[0]],"outOfRange"),o(v.slice()),u=v[1])},this),{stops:a,outerColors:n}},t.type="visualMap.piecewise",t.defaultOption=Un(Nh.defaultOption,{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieces:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0}),t})(Nh),uq={splitNumber:function(r){var t=this.option,e=Math.min(t.precision,20),a=this.getExtent(),n=t.splitNumber;n=Math.max(parseInt(n,10),1),t.splitNumber=n;for(var i=(a[1]-a[0])/n;+i.toFixed(e)!==i&&e<5;)e++;t.precision=e,i=+i.toFixed(e),t.minOpen&&r.push({interval:[-1/0,a[0]],close:[0,0]});for(var o=0,s=a[0];o","≥"][a[0]]];e.text=e.text||this.formatValueText(e.value!=null?e.value:e.interval,!1,n)},this)}};function lA(r,t){var e=r.inverse;(r.orient==="vertical"?!e:e)&&t.reverse()}var fq=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.doRender=function(){var e=this.group;e.removeAll();var a=this.visualMapModel,n=a.get("textGap"),i=a.textStyleModel,o=this._getItemAlign(),s=a.itemSize,l=this._getViewData(),u=l.endsText,f=Ce(a.get("showLabel",!0),!u),v=!a.get("selectedMode");u&&this._renderEndsText(e,u[0],s,f,o),A(l.viewPieceList,function(h){var c=h.piece,d=new rt;d.onclick=$(this._onItemClick,this,c),this._enableHoverLink(d,h.indexInModelPieceList);var p=a.getRepresentValue(c);if(this._createItemSymbol(d,p,[0,0,s[0],s[1]],v),f){var g=this.visualMapModel.getValueState(p),y=i.get("align")||o;d.add(new Mt({style:Ft(i,{x:y==="right"?-n:s[0]+n,y:s[1]/2,text:c.text,verticalAlign:i.get("verticalAlign")||"middle",align:y,opacity:Q(i.get("opacity"),g==="outOfRange"?.5:1)}),silent:v}))}e.add(d)},this),u&&this._renderEndsText(e,u[1],s,f,o),Gi(a.get("orient"),e,a.get("itemGap")),this.renderBackground(e),this.positionGroup(e)},t.prototype._enableHoverLink=function(e,a){var n=this;e.on("mouseover",function(){return i("highlight")}).on("mouseout",function(){return i("downplay")});var i=function(o){var s=n.visualMapModel;s.option.hoverLink&&n.api.dispatchAction({type:o,batch:Iv(s.findTargetDataIndices(a),s)})}},t.prototype._getItemAlign=function(){var e=this.visualMapModel,a=e.option;if(a.orient==="vertical")return JR(e,this.api,e.itemSize);var n=a.align;return(!n||n==="auto")&&(n="left"),n},t.prototype._renderEndsText=function(e,a,n,i,o){if(a){var s=new rt,l=this.visualMapModel.textStyleModel;s.add(new Mt({style:Ft(l,{x:i?o==="right"?n[0]:0:n[0]/2,y:n[1]/2,verticalAlign:"middle",align:i?o:"center",text:a})})),e.add(s)}},t.prototype._getViewData=function(){var e=this.visualMapModel,a=U(e.getPieceList(),function(s,l){return{piece:s,indexInModelPieceList:l}}),n=e.get("text"),i=e.get("orient"),o=e.get("inverse");return(i==="horizontal"?o:!o)?a.reverse():n&&(n=n.slice().reverse()),{viewPieceList:a,endsText:n}},t.prototype._createItemSymbol=function(e,a,n,i){var o=ie(this.getControllerVisual(a,"symbol"),n[0],n[1],n[2],n[3],this.getControllerVisual(a,"color"));o.silent=i,e.add(o)},t.prototype._onItemClick=function(e){var a=this.visualMapModel,n=a.option,i=n.selectedMode;if(i){var o=et(n.selected),s=a.getSelectedMapKey(e);i==="single"||i===!0?(o[s]=!0,A(o,function(l,u){o[u]=u===s})):o[s]=!o[s],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:o})}},t.type="visualMap.piecewise",t})(KR);function ek(r){r.registerComponentModel(lq),r.registerComponentView(fq),QR(r)}function vq(r){_t(tk),_t(ek)}var hq=(function(){function r(t){this._thumbnailModel=t}return r.prototype.reset=function(t){this._renderVersion=t.getMainProcessVersion()},r.prototype.renderContent=function(t){var e=t.api.getViewOfComponentModel(this._thumbnailModel);e&&(t.group.silent=!0,e.renderContent({group:t.group,targetTrans:t.targetTrans,z2Range:CD(t.group),roamType:t.roamType,viewportRect:t.viewportRect,renderVersion:this._renderVersion}))},r.prototype.updateWindow=function(t,e){var a=e.getViewOfComponentModel(this._thumbnailModel);a&&a.updateWindow({targetTrans:t,renderVersion:this._renderVersion})},r})(),cq=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e.preventAutoZ=!0,e}return t.prototype.optionUpdated=function(e,a){this._updateBridge()},t.prototype._updateBridge=function(){var e=this._birdge=this._birdge||new hq(this);if(this._target=null,this.ecModel.eachSeries(function(n){kw(n,null)}),this.shouldShow()){var a=this.getTarget();kw(a.baseMapProvider,e)}},t.prototype.shouldShow=function(){return this.getShallow("show",!0)},t.prototype.getBridge=function(){return this._birdge},t.prototype.getTarget=function(){if(this._target)return this._target;var e=this.getReferringComponents("series",{useDefault:!1,enableAll:!1,enableNone:!1}).models[0];return e?e.subType!=="graph"&&(e=null):e=this.ecModel.queryComponents({mainType:"series",subType:"graph"})[0],this._target={baseMapProvider:e},this._target},t.type="thumbnail",t.layoutMode="box",t.dependencies=["series","geo"],t.defaultOption={show:!0,right:1,bottom:1,height:"25%",width:"25%",itemStyle:{borderColor:B.color.border,borderWidth:2},windowStyle:{borderWidth:1,color:B.color.neutral30,borderColor:B.color.neutral40,opacity:.3},z:10},t})(xt),dq=(function(r){N(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e.type=t.type,e}return t.prototype.render=function(e,a,n){if(this._api=n,this._model=e,this._coordSys||(this._coordSys=new uo),!this._isEnabled()){this._clear();return}this._renderVersion=n.getMainProcessVersion();var i=this.group;i.removeAll();var o=e.getModel("itemStyle"),s=o.getItemStyle();s.fill==null&&(s.fill=a.get("backgroundColor")||B.color.neutral00);var l=de(e,n).refContainer,u=Xt(YD(e,!0),l),f=s.lineWidth||0,v=this._contentRect=qi(u.clone(),f/2,!0,!0),h=new rt;i.add(h),h.setClipPath(new St({shape:v.plain()}));var c=this._targetGroup=new rt;h.add(c);var d=u.plain();d.r=o.getShallow("borderRadius",!0),i.add(this._bgRect=new St({style:s,shape:d,silent:!1,cursor:"grab"}));var p=e.getModel("windowStyle"),g=p.getShallow("borderRadius",!0);h.add(this._windowRect=new St({shape:{x:0,y:0,width:0,height:0,r:g},style:p.getItemStyle(),silent:!1,cursor:"grab"})),this._dealRenderContent(),this._dealUpdateWindow(),fA(e,this)},t.prototype.renderContent=function(e){this._bridgeRendered=e,this._isEnabled()&&(this._dealRenderContent(),this._dealUpdateWindow(),fA(this._model,this))},t.prototype._dealRenderContent=function(){var e=this._bridgeRendered;if(!(!e||e.renderVersion!==this._renderVersion)){var a=this._targetGroup,n=this._coordSys,i=this._contentRect;if(a.removeAll(),!!e){var o=e.group,s=o.getBoundingRect();a.add(o),this._bgRect.z2=e.z2Range.min-10,n.setBoundingRect(s.x,s.y,s.width,s.height);var l=Xt({left:"center",top:"center",aspect:s.width/s.height},i);n.setViewRect(l.x,l.y,l.width,l.height),o.attr(n.getTransformInfo().raw),this._windowRect.z2=e.z2Range.max+10,this._resetRoamController(e.roamType)}}},t.prototype.updateWindow=function(e){var a=this._bridgeRendered;a&&a.renderVersion===e.renderVersion&&(a.targetTrans=e.targetTrans),this._isEnabled()&&this._dealUpdateWindow()},t.prototype._dealUpdateWindow=function(){var e=this._bridgeRendered;if(!(!e||e.renderVersion!==this._renderVersion)){var a=Dr([],e.targetTrans),n=Fr([],this._coordSys.transform,a);this._transThisToTarget=Dr([],n);var i=e.viewportRect;i?i=i.clone():i=new lt(0,0,this._api.getWidth(),this._api.getHeight()),i.applyTransform(n);var o=this._windowRect,s=o.shape.r;o.setShape(nt({r:s},i))}},t.prototype._resetRoamController=function(e){var a=this,n=this._api,i=this._roamController;if(i||(i=this._roamController=new lo(n.getZr())),!e||!this._isEnabled()){i.disable();return}i.enable(e,{api:n,zInfo:{component:this._model},triggerInfo:{roamTrigger:null,isInSelf:function(o,s,l){return a._contentRect.contain(s,l)}}}),i.off("pan").off("zoom").on("pan",$(this._onPan,this)).on("zoom",$(this._onZoom,this))},t.prototype._onPan=function(e){var a=this._transThisToTarget;if(!(!this._isEnabled()||!a)){var n=Jt([],[e.oldX,e.oldY],a),i=Jt([],[e.oldX-e.dx,e.oldY-e.dy],a);this._api.dispatchAction(uA(this._model.getTarget().baseMapProvider,{dx:i[0]-n[0],dy:i[1]-n[1]}))}},t.prototype._onZoom=function(e){var a=this._transThisToTarget;if(!(!this._isEnabled()||!a)){var n=Jt([],[e.originX,e.originY],a);this._api.dispatchAction(uA(this._model.getTarget().baseMapProvider,{zoom:1/e.scale,originX:n[0],originY:n[1]}))}},t.prototype._isEnabled=function(){var e=this._model;if(!e||!e.shouldShow())return!1;var a=e.getTarget().baseMapProvider;return!!a},t.prototype._clear=function(){this.group.removeAll(),this._bridgeRendered=null,this._roamController&&this._roamController.disable()},t.prototype.remove=function(){this._clear()},t.prototype.dispose=function(){this._clear()},t.type="thumbnail",t})(Wt);function uA(r,t){var e=r.mainType==="series"?r.subType+"Roam":r.mainType+"Roam",a={type:e};return a[r.mainType+"Id"]=r.id,G(a,t),a}function fA(r,t){var e=ji(r);oc(t.group,e.z,e.zlevel)}function pq(r){r.registerComponentModel(cq),r.registerComponentView(dq)}var gq={label:{enabled:!0},decal:{show:!1}},vA=bt(),yq={};function mq(r,t){var e=r.getModel("aria");if(!e.get("enabled"))return;var a=et(gq);mt(a.label,r.getLocaleModel().get("aria"),!1),mt(e.option,a,!1),n(),i();function n(){var u=e.getModel("decal"),f=u.get("show");if(f){var v=K();r.eachSeries(function(h){if(!h.isColorBySeries()){var c=v.get(h.type);c||(c={},v.set(h.type,c)),vA(h).scope=c}}),r.eachRawSeries(function(h){if(r.isSeriesFiltered(h))return;if(tt(h.enableAriaDecal)){h.enableAriaDecal();return}var c=h.getData();if(h.isColorBySeries()){var m=qg(h.ecModel,h.name,yq,r.getSeriesCount()),_=c.getVisual("decal");c.setVisual("decal",S(_,m))}else{var d=h.getRawData(),p={},g=vA(h).scope;c.each(function(x){var b=c.getRawIndex(x);p[b]=x});var y=d.count();d.each(function(x){var b=p[x],w=d.getName(x)||x+"",T=qg(h.ecModel,w,g,y),C=c.getItemVisual(b,"decal");c.setItemVisual(b,"decal",S(C,T))})}function S(x,b){var w=x?G(G({},b),x):b;return w.dirty=!0,w}})}}function i(){var u=t.getZr().dom;if(u){var f=r.getLocaleModel().get("aria"),v=e.getModel("label");if(v.option=nt(v.option,f),!!v.get("enabled")){if(u.setAttribute("role","img"),v.get("description")){u.setAttribute("aria-label",v.get("description"));return}var h=r.getSeriesCount(),c=v.get(["data","maxCount"])||10,d=v.get(["series","maxCount"])||10,p=Math.min(h,d),g;if(!(h<1)){var y=s();if(y){var m=v.get(["general","withTitle"]);g=o(m,{title:y})}else g=v.get(["general","withoutTitle"]);var _=[],S=h>1?v.get(["series","multiple","prefix"]):v.get(["series","single","prefix"]);g+=o(S,{seriesCount:h}),r.eachSeries(function(T,C){if(C1?v.get(["series","multiple",I]):v.get(["series","single",I]),M=o(M,{seriesId:T.seriesIndex,seriesName:T.get("name"),seriesType:l(T.subType)});var L=T.getData();if(L.count()>c){var P=v.get(["data","partialData"]);M+=o(P,{displayCnt:c})}else M+=v.get(["data","allData"]);for(var k=v.get(["data","separator","middle"]),R=v.get(["data","separator","end"]),O=v.get(["data","excludeDimensionId"]),E=[],z=0;z":"gt",">=":"gte","=":"eq","!=":"ne","<>":"ne"},xq=(function(){function r(t){var e=this._condVal=X(t)?new RegExp(t):qA(t)?t:null;if(e==null){var a="";Et(a)}}return r.prototype.evaluate=function(t){var e=typeof t;return X(e)?this._condVal.test(t):Dt(e)?this._condVal.test(t+""):!1},r})(),bq=(function(){function r(){}return r.prototype.evaluate=function(){return this.value},r})(),wq=(function(){function r(){}return r.prototype.evaluate=function(){for(var t=this.children,e=0;e2&&a.push(n),n=[L,P]}function f(L,P,k,R){qo(L,k)&&qo(P,R)||n.push(L,P,k,R,k,R)}function v(L,P,k,R,O,E){var z=Math.abs(P-L),V=Math.tan(z/4)*4/3,F=PT:D2&&a.push(n),a}function vm(r,t,e,a,n,i,o,s,l,u){if(qo(r,e)&&qo(t,a)&&qo(n,o)&&qo(i,s)){l.push(o,s);return}var f=2/u,v=f*f,h=o-r,c=s-t,d=Math.sqrt(h*h+c*c);h/=d,c/=d;var p=e-r,g=a-t,y=n-o,m=i-s,_=p*p+g*g,S=y*y+m*m;if(_=0&&T=0){l.push(o,s);return}var C=[],M=[];On(r,e,n,o,.5,C),On(t,a,i,s,.5,M),vm(C[0],M[0],C[1],M[1],C[2],M[2],C[3],M[3],l,u),vm(C[4],M[4],C[5],M[5],C[6],M[6],C[7],M[7],l,u)}function Bq(r,t){var e=fm(r),a=[];t=t||1;for(var n=0;n0)for(var u=0;uMath.abs(u),v=ak([l,u],f?0:1,t),h=(f?s:u)/v.length,c=0;cn,o=ak([a,n],i?0:1,t),s=i?"width":"height",l=i?"height":"width",u=i?"x":"y",f=i?"y":"x",v=r[s]/o.length,h=0;h1?null:new st(p*l+r,p*u+t)}function Gq(r,t,e){var a=new st;st.sub(a,e,t),a.normalize();var n=new st;st.sub(n,r,t);var i=n.dot(a);return i}function No(r,t){var e=r[r.length-1];e&&e[0]===t[0]&&e[1]===t[1]||r.push(t)}function Fq(r,t,e){for(var a=r.length,n=[],i=0;io?(u.x=f.x=s+i/2,u.y=l,f.y=l+o):(u.y=f.y=l+o/2,u.x=s,f.x=s+i),Fq(t,u,f)}function Bh(r,t,e,a){if(e===1)a.push(t);else{var n=Math.floor(e/2),i=r(t);Bh(r,i[0],n,a),Bh(r,i[1],e-n,a)}return a}function Hq(r,t){for(var e=[],a=0;a0;u/=2){var f=0,v=0;(r&u)>0&&(f=1),(t&u)>0&&(v=1),s+=u*u*(3*f^v),v===0&&(f===1&&(r=u-1-r,t=u-1-t),l=r,r=t,t=l)}return s}function Gh(r){var t=1/0,e=1/0,a=-1/0,n=-1/0,i=U(r,function(s){var l=s.getBoundingRect(),u=s.getComputedTransform(),f=l.x+l.width/2+(u?u[4]:0),v=l.y+l.height/2+(u?u[5]:0);return t=Math.min(f,t),e=Math.min(v,e),a=Math.max(f,a),n=Math.max(v,n),[f,v]}),o=U(i,function(s,l){return{cp:s,z:Kq(s[0],s[1],t,e,a,n),path:r[l]}});return o.sort(function(s,l){return s.z-l.z}).map(function(s){return s.path})}function ok(r){return Yq(r.path,r.count)}function hm(){return{fromIndividuals:[],toIndividuals:[],count:0}}function Jq(r,t,e){var a=[];function n(x){for(var b=0;b=0;n--)if(!e[n].many.length){var l=e[s].many;if(l.length<=1)if(s)s=0;else return e;var i=l.length,u=Math.ceil(i/2);e[n].many=l.slice(u,i),e[s].many=l.slice(0,u),s++}return e}var tj={clone:function(r){for(var t=[],e=1-Math.pow(1-r.path.style.opacity,1/r.count),a=0;a0))return;var s=a.getModel("universalTransition").get("delay"),l=Object.assign({setToFinal:!0},o),u,f;SA(r)&&(u=r,f=t),SA(t)&&(u=t,f=r);function v(y,m,_,S,x){var b=y.many,w=y.one;if(b.length===1&&!x){var T=m?b[0]:w,C=m?w:b[0];if(zh(T))v({many:[T],one:C},!0,_,S,!0);else{var M=s?nt({delay:s(_,S)},l):l;$_(T,C,M),i(T,C,T,C,M)}}else for(var D=nt({dividePath:tj[e],individualDelay:s&&function(O,E,z,V){return s(O+_,S)}},l),I=m?Jq(b,w,D):Qq(w,b,D),L=I.fromIndividuals,P=I.toIndividuals,k=L.length,R=0;Rt.length,c=u?xA(f,u):xA(h?t:r,[h?r:t]),d=0,p=0;psk))for(var i=a.getIndices(),o=0;o0&&b.group.traverse(function(T){T instanceof Tt&&!T.animators.length&&T.animateFrom({style:{opacity:0}},w)})})}function AA(r){var t=r.getModel("universalTransition").get("seriesKey");return t||r.id}function MA(r){return W(r)?r.sort().join(","):r}function _n(r){if(r.hostModel)return r.hostModel.getModel("universalTransition").get("divideShape")}function sj(r,t){var e=K(),a=K(),n=K();return A(r.oldSeries,function(i,o){var s=r.oldDataGroupIds[o],l=r.oldData[o],u=AA(i),f=MA(u);a.set(f,{dataGroupId:s,data:l}),W(u)&&A(u,function(v){n.set(v,{key:f,dataGroupId:s,data:l})})}),A(t.updatedSeries,function(i){if(i.isUniversalTransitionEnabled()&&i.isAnimationEnabled()){var o=i.get("dataGroupId"),s=i.getData(),l=AA(i),u=MA(l),f=a.get(u);if(f)e.set(u,{oldSeries:[{dataGroupId:f.dataGroupId,divide:_n(f.data),data:f.data}],newSeries:[{dataGroupId:o,divide:_n(s),data:s}]});else if(W(l)){var v=[];A(l,function(d){var p=a.get(d);p.data&&v.push({dataGroupId:p.dataGroupId,divide:_n(p.data),data:p.data})}),v.length&&e.set(u,{oldSeries:v,newSeries:[{dataGroupId:o,data:s,divide:_n(s)}]})}else{var h=n.get(l);if(h){var c=e.get(h.key);c||(c={oldSeries:[{dataGroupId:h.dataGroupId,data:h.data,divide:_n(h.data)}],newSeries:[]},e.set(h.key,c)),c.newSeries.push({dataGroupId:o,data:s,divide:_n(s)})}}}}),e}function DA(r,t){for(var e=0;e=0&&n.push({dataGroupId:t.oldDataGroupIds[s],data:t.oldData[s],divide:_n(t.oldData[s]),groupIdDim:o.dimension})}),A(Ht(r.to),function(o){var s=DA(e.updatedSeries,o);if(s>=0){var l=e.updatedSeries[s].getData();i.push({dataGroupId:t.oldDataGroupIds[s],data:l,divide:_n(l),groupIdDim:o.dimension})}}),n.length>0&&i.length>0&&lk(n,i,a)}function uj(r){r.registerUpdateLifecycle("series:beforeupdate",function(t,e,a){A(Ht(a.seriesTransition),function(n){A(Ht(n.to),function(i){for(var o=a.updatedSeries,s=0;so.vmin?e+=o.vmin-a+(t-o.vmin)/(o.vmax-o.vmin)*o.gapReal:e+=t-a,a=o.vmax,n=!1;break}e+=o.vmin-a+o.gapReal,a=o.vmax}return n&&(e+=t-a),e},r.prototype.unelapse=function(t){for(var e=LA,a=IA,n=!0,i=0,o=0;ol?i=s.vmin+(t-l)/(u-l)*(s.vmax-s.vmin):i=a+t-e,a=s.vmax,n=!1;break}e=u,a=s.vmax}return n&&(i=a+t-e),i},r})();function vj(){return new fj}var LA=0,IA=0;function hj(r,t){var e=0,a={tpAbs:{span:0,val:0},tpPrct:{span:0,val:0}},n=function(){return{has:!1,span:NaN,inExtFrac:NaN,val:NaN}},i={S:{tpAbs:n(),tpPrct:n()},E:{tpAbs:n(),tpPrct:n()}};A(r.breaks,function(s){var l=s.gapParsed;l.type==="tpPrct"&&(e+=l.val);var u=q_(s,t);if(u){var f=u.vmin!==s.vmin,v=u.vmax!==s.vmax,h=u.vmax-u.vmin;if(!(f&&v))if(f||v){var c=f?"S":"E";i[c][l.type].has=!0,i[c][l.type].span=h,i[c][l.type].inExtFrac=h/(s.vmax-s.vmin),i[c][l.type].val=l.val}else a[l.type].span+=h,a[l.type].val+=l.val}});var o=e*(0+(t[1]-t[0])+(a.tpAbs.val-a.tpAbs.span)+(i.S.tpAbs.has?(i.S.tpAbs.val-i.S.tpAbs.span)*i.S.tpAbs.inExtFrac:0)+(i.E.tpAbs.has?(i.E.tpAbs.val-i.E.tpAbs.span)*i.E.tpAbs.inExtFrac:0)-a.tpPrct.span-(i.S.tpPrct.has?i.S.tpPrct.span*i.S.tpPrct.inExtFrac:0)-(i.E.tpPrct.has?i.E.tpPrct.span*i.E.tpPrct.inExtFrac:0))/(1-a.tpPrct.val-(i.S.tpPrct.has?i.S.tpPrct.val*i.S.tpPrct.inExtFrac:0)-(i.E.tpPrct.has?i.E.tpPrct.val*i.E.tpPrct.inExtFrac:0));A(r.breaks,function(s){var l=s.gapParsed;l.type==="tpPrct"&&(s.gapReal=e!==0?Math.max(o,0)*l.val/e:0),l.type==="tpAbs"&&(s.gapReal=l.val),s.gapReal==null&&(s.gapReal=0)})}function cj(r,t,e,a,n,i){r!=="no"&&A(e,function(o){var s=q_(o,i);if(s)for(var l=t.length-1;l>=0;l--){var u=t[l],f=a(u),v=n*3/4;f>s.vmin-v&&ft[0]&&e=0&&o<1-1e-5}A(r,function(o){if(!(!o||o.start==null||o.end==null)&&!o.isExpanded){var s={breakOption:et(o),vmin:t(o.start),vmax:t(o.end),gapParsed:{type:"tpAbs",val:0},gapReal:null};if(o.gap!=null){var l=!1;if(X(o.gap)){var u=sr(o.gap);if(u.match(/%$/)){var f=parseFloat(u)/100;n(f)||(f=0),s.gapParsed.type="tpPrct",s.gapParsed.val=f,l=!0}}if(!l){var v=t(o.gap);(!isFinite(v)||v<0)&&(v=0),s.gapParsed.type="tpAbs",s.gapParsed.val=v}}if(s.vmin===s.vmax&&(s.gapParsed.type="tpAbs",s.gapParsed.val=0),e&&e.noNegative&&A(["vmin","vmax"],function(c){s[c]<0&&(s[c]=0)}),s.vmin>s.vmax){var h=s.vmax;s.vmax=s.vmin,s.vmin=h}a.push(s)}}),a.sort(function(o,s){return o.vmin-s.vmin});var i=-1/0;return A(a,function(o,s){i>o.vmin&&(a[s]=null),i=o.vmax}),{breaks:a.filter(function(o){return!!o})}}function j_(r,t){return dm(t)===dm(r)}function dm(r){return r.start+"_\0_"+r.end}function pj(r,t,e){var a=[];A(r,function(i,o){var s=t(i);s&&s.type==="vmin"&&a.push([o])}),A(r,function(i,o){var s=t(i);if(s&&s.type==="vmax"){var l=Fn(a,function(u){return j_(t(r[u[0]]).parsedBreak.breakOption,s.parsedBreak.breakOption)});l&&l.push(o)}});var n=[];return A(a,function(i){i.length===2&&n.push(e?i:[r[i[0]],r[i[1]]])}),n}function gj(r,t,e,a){var n,i;if(r.break){var o=r.break.parsedBreak,s=Fn(e,function(v){return j_(v.breakOption,r.break.parsedBreak.breakOption)}),l=a(Math.pow(t,o.vmin),s.vmin),u=a(Math.pow(t,o.vmax),s.vmax),f={type:o.gapParsed.type,val:o.gapParsed.type==="tpAbs"?ae(Math.pow(t,o.vmin+o.gapParsed.val))-l:o.gapParsed.val};n={type:r.break.type,parsedBreak:{breakOption:o.breakOption,vmin:l,vmax:u,gapParsed:f,gapReal:o.gapReal}},i=s[r.break.type]}return{brkRoundingCriterion:i,vBreak:n}}function yj(r,t,e){var a={noNegative:!0},n=cm(r,e,a),i=cm(r,e,a),o=Math.log(t);return i.breaks=U(i.breaks,function(s){var l=Math.log(s.vmin)/o,u=Math.log(s.vmax)/o,f={type:s.gapParsed.type,val:s.gapParsed.type==="tpAbs"?Math.log(s.vmin+s.gapParsed.val)/o-l:s.gapParsed.val};return{vmin:l,vmax:u,gapParsed:f,gapReal:s.gapReal,breakOption:s.breakOption}}),{parsedOriginal:n,parsedLogged:i}}var mj={vmin:"start",vmax:"end"};function _j(r,t){return t&&(r=r||{},r.break={type:mj[t.type],start:t.parsedBreak.vmin,end:t.parsedBreak.vmax}),r}function Sj(){HB({createScaleBreakContext:vj,pruneTicksByBreak:cj,addBreaksToTicks:dj,parseAxisBreakOption:cm,identifyAxisBreak:j_,serializeAxisBreakIdentifier:dm,retrieveAxisBreakPairs:pj,getTicksLogTransformBreak:gj,logarithmicParseBreaksFromOption:yj,makeAxisLabelFormatterParamBreak:_j})}var PA=bt();function xj(r,t){var e=Fn(r,function(a){return se().identifyAxisBreak(a.parsedBreak.breakOption,t.breakOption)});return e||r.push(e={zigzagRandomList:[],parsedBreak:t,shouldRemove:!1}),e}function bj(r){A(r,function(t){return t.shouldRemove=!0})}function wj(r){for(var t=r.length-1;t>=0;t--)r[t].shouldRemove&&r.splice(t,1)}function Tj(r,t,e,a,n){var i=e.axis;if(i.scale.isBlank()||!se())return;var o=se().retrieveAxisBreakPairs(i.scale.getTicks({breakTicks:"only_break"}),function(C){return C.break},!1);if(!o.length)return;var s=e.getModel("breakArea"),l=s.get("zigzagAmplitude"),u=s.get("zigzagMinSpan"),f=s.get("zigzagMaxSpan");u=Math.max(2,u||0),f=Math.max(u,f||0);var v=s.get("expandOnClick"),h=s.get("zigzagZ"),c=s.getModel("itemStyle"),d=c.getItemStyle(),p=d.stroke,g=d.lineWidth,y=d.lineDash,m=d.fill,_=new rt({ignoreModelZ:!0}),S=i.isHorizontal(),x=PA(t).visualList||(PA(t).visualList=[]);bj(x);for(var b=function(C){var M=o[C][0].break.parsedBreak,D=[];D[0]=i.toGlobalCoord(i.dataToCoord(M.vmin,!0)),D[1]=i.toGlobalCoord(i.dataToCoord(M.vmax,!0)),D[1]=E;Pt&&(Y=E);var Bt=[],ht=[];Bt[R]=D,ht[R]=I,!vt&&!Pt&&(Bt[R]+=H?-l:l,ht[R]-=H?l:-l),Bt[O]=Y,ht[O]=Y,V.push(Bt),F.push(ht);var at=void 0;if(jm[1]&&m.reverse(),{coordPair:m,brkId:se().serializeAxisBreakIdentifier(y.breakOption)}});l.sort(function(g,y){return g.coordPair[0]-y.coordPair[0]});for(var u=o[0],f=null,v=0;v=0?l[0].width:l[1].width),h=(v+f.x)/2-u.x,c=Math.min(h,h-f.x),d=Math.max(h,h-f.x),p=d<0?d:c>0?c:0;s=(h-p)/f.x}var g=new st,y=new st;st.scale(g,a,-s),st.scale(y,a,1-s),py(e[0],g),py(e[1],y)}function Mj(r,t){var e={breaks:[]};return A(t.breaks,function(a){if(a){var n=Fn(r.get("breaks",!0),function(s){return se().identifyAxisBreak(s,a)});if(n){var i=t.type,o={isExpanded:!!n.isExpanded};n.isExpanded=i===yc?!0:i===LI?!1:i===II?!n.isExpanded:n.isExpanded,e.breaks.push({start:n.start,end:n.end,isExpanded:!!n.isExpanded,old:o})}}}),e}function Dj(){wH({adjustBreakLabelPair:Aj,buildAxisBreakLine:Cj,rectCoordBuildBreakAxis:Tj,updateModelAxisBreak:Mj})}function Lj(r){LH(r),Sj(),Dj()}function Ij(){jH(Pj)}function Pj(r,t){A(r,function(e){if(!e.model.get(["axisLabel","inside"])){var a=Rj(e);if(a){var n=e.isHorizontal()?"height":"width",i=e.model.get(["axisLabel","margin"]);t[n]-=a[n]+i,e.position==="top"?t.y+=a.height+i:e.position==="left"&&(t.x+=a.width+i)}}})}function Rj(r){var t=r.model,e=r.scale;if(!t.get(["axisLabel","show"])||e.isBlank())return;var a,n,i=e.getExtent();e instanceof vs?n=e.count():(a=e.getTicks(),n=a.length);var o=r.getLabelModel(),s=Os(r),l,u=1;n>40&&(u=Math.ceil(n/40));for(var f=0;f1&&arguments[1]!==void 0?arguments[1]:60,n=null;return function(){for(var i=this,o=arguments.length,s=new Array(o),l=0;l{const{token:r}=Uj(),{t}=ck(),e={xAxis:{type:"category",show:!1,data:["Mon","Tue","Wed","Thu","Fri"]},yAxis:{show:!1,type:"value"},series:[{data:[120,88,116,60,70],type:"bar",itemStyle:{color:r.colorPrimary},barWidth:10}]},a={xAxis:{show:!1,type:"category",data:["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},yAxis:{show:!1,type:"value"},series:[{data:[1,2,3,2,3,2,1],type:"line",itemStyle:{color:r.colorPrimary}}]},n={title:{text:t("dashboard.analysis.annualSales"),textStyle:{color:r.colorText,fontSize:r.fontSizeLG,fontWeight:r.fontWeightStrong}},tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:r.colorPrimaryBg,color:r.colorPrimary}},borderWidth:0,backgroundColor:r.colorPrimaryBg,textStyle:{color:r.colorText}},legend:{data:[t("dashboard.analysis.grossProfit"),t("dashboard.analysis.netProfit"),t("dashboard.analysis.totalExpense")],textStyle:{color:r.colorText}},grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},xAxis:[{type:"category",boundaryGap:!1,data:[t("dashboard.analysis.january"),t("dashboard.analysis.february"),t("dashboard.analysis.march"),t("dashboard.analysis.april"),t("dashboard.analysis.may"),t("dashboard.analysis.june"),t("dashboard.analysis.july"),t("dashboard.analysis.august"),t("dashboard.analysis.september"),t("dashboard.analysis.october"),t("dashboard.analysis.november"),t("dashboard.analysis.december")]}],yAxis:[{type:"value",splitLine:{lineStyle:{color:r.colorBorder}}}],series:[{name:t("dashboard.analysis.grossProfit"),type:"line",stack:"Total",areaStyle:{color:r.colorPrimaryBorder},emphasis:{focus:"series"},itemStyle:{color:r.colorPrimary},data:[30,36,42,33,21,26,29,35,42,32,28,26]},{name:t("dashboard.analysis.netProfit"),type:"line",stack:"Total",areaStyle:{color:r.colorSuccessBorder},emphasis:{focus:"series"},itemStyle:{color:r.colorSuccess},data:[32,16,18,30,15,19,22,17,24,19,30,31]},{name:t("dashboard.analysis.totalExpense"),type:"line",stack:"Total",areaStyle:{color:r.colorWarningBorder},emphasis:{focus:"series"},itemStyle:{color:r.colorWarning},data:[36,24,36,36,39,56,24,23,21,12,16,19]}]},i={title:{text:t("dashboard.analysis.accessFrom"),textStyle:{color:r.colorText,fontSize:r.fontSizeLG,fontWeight:r.fontWeightStrong}},tooltip:{trigger:"item"},legend:{bottom:"0%",left:"center",textStyle:{color:r.colorText}},series:[{name:t("dashboard.analysis.accessFrom"),type:"pie",radius:["40%","70%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:r.borderRadius,borderColor:r.colorBorder,borderWidth:2},label:{show:!1,position:"center"},emphasis:{label:{show:!0,fontSize:40,fontWeight:"bold"}},labelLine:{show:!1},data:[{value:1048,name:t("dashboard.analysis.searchEngine")},{value:735,name:t("dashboard.analysis.direct")},{value:580,name:t("dashboard.analysis.email")},{value:484,name:t("dashboard.analysis.unionAds")},{value:300,name:t("dashboard.analysis.videoAds")}]}]},o=[{key:"1",name:"John Brown",age:32,address:"New York No. 1 Lake Park",tags:["nice","developer"]},{key:"2",name:"Jim Green",age:42,address:"London No. 1 Lake Park",tags:["loser"]},{key:"3",name:"Joe Black",age:32,address:"Sydney No. 1 Lake Park",tags:["cool","teacher"]},{key:"4",name:"Jim Green",age:42,address:"London No. 1 Lake Park",tags:["loser"]},{key:"5",name:"Joe Black",age:32,address:"Sydney No. 1 Lake Park",tags:["cool","teacher"]}],s=[{title:"Ant Design Title 1"},{title:"Ant Design Title 2"},{title:"Ant Design Title 3"},{title:"Ant Design Title 4"},{title:"Ant Design Title 5"}];return ut.jsx(ut.Fragment,{children:ut.jsxs(dk,{gutter:[20,20],children:[ut.jsx(on,{xxl:6,lg:12,xs:24,children:ut.jsxs(sn,{variant:"borderless",children:[ut.jsx("div",{children:t("dashboard.analysis.totalRevenue")}),ut.jsxs("div",{className:"flex items-center justify-between pt-4 pb-2",children:[ut.jsx("div",{className:"text-4xl flex-0",children:"¥3,415.00"}),ut.jsx(uv,{style:{width:120,height:80},option:e})]}),ut.jsxs("div",{children:[t("dashboard.since.lastWeek")," ",ut.jsxs("span",{style:{color:r.colorError},children:[ut.jsx(J_,{}),"11.28%"]})]})]})}),ut.jsx(on,{xxl:6,lg:12,xs:24,children:ut.jsxs(sn,{variant:"borderless",children:[ut.jsx("div",{children:t("dashboard.analysis.totalExpenses")}),ut.jsxs("div",{className:"flex items-center justify-between pt-4 pb-2",children:[ut.jsx("div",{className:"text-4xl flex-0",children:"¥8,425.00"}),ut.jsx(uv,{style:{width:120,height:80},option:a})]}),ut.jsxs("div",{children:[t("dashboard.since.lastWeek")," ",ut.jsxs("span",{style:{color:r.colorSuccess},children:[ut.jsx(Q_,{}),"15.33%"]})]})]})}),ut.jsx(on,{xxl:6,lg:12,xs:24,children:ut.jsxs(sn,{variant:"borderless",children:[ut.jsx("div",{children:t("dashboard.analysis.visitors")}),ut.jsxs("div",{className:"flex items-center justify-between pt-4 pb-2",children:[ut.jsx("div",{className:"text-4xl flex-0",children:"1,128"}),ut.jsx("div",{className:"text-4xl rounded-full flex items-center justify-center",style:{height:80,width:80,background:r.colorPrimaryBg},children:ut.jsx(pk,{style:{color:r.colorPrimary}})})]}),ut.jsxs("div",{children:[t("dashboard.since.lastWeek")," ",ut.jsxs("span",{style:{color:r.colorError},children:[ut.jsx(J_,{}),"32.60%"]})]})]})}),ut.jsx(on,{xxl:6,lg:12,xs:24,children:ut.jsxs(sn,{variant:"borderless",children:[ut.jsx("div",{children:t("dashboard.analysis.likes")}),ut.jsxs("div",{className:"flex items-center justify-between pt-4 pb-2",children:[ut.jsx("div",{className:"text-4xl flex-0",children:"668"}),ut.jsx("div",{className:"text-4xl rounded-full flex items-center justify-center",style:{height:80,width:80,background:r.colorPrimaryBg},children:ut.jsx(gk,{style:{color:r.colorPrimary}})})]}),ut.jsxs("div",{children:[t("dashboard.since.lastWeek")," ",ut.jsxs("span",{style:{color:r.colorSuccess},children:[ut.jsx(Q_,{}),"9.60%"]})]})]})}),ut.jsx(on,{xl:18,xs:24,children:ut.jsx(sn,{variant:"borderless",children:ut.jsx(uv,{style:{width:"100%",height:460},option:n})})}),ut.jsx(on,{xl:6,xs:24,children:ut.jsx(sn,{variant:"borderless",children:ut.jsx(uv,{style:{width:"100%",height:460},option:i})})}),ut.jsx(on,{xl:12,xs:24,children:ut.jsxs(sn,{variant:"borderless",children:[ut.jsxs("div",{className:"flex items-center justify-between mb-5",children:[ut.jsx("div",{style:{fontSize:r.fontSizeLG,fontWeight:r.fontWeightStrong},children:t("dashboard.analysis.salesRanking")}),ut.jsx(xk.Group,{options:[{label:t("dashboard.analysis.month"),value:"month"},{label:t("dashboard.analysis.year"),value:"year"},{label:t("dashboard.analysis.day"),value:"day"}],defaultValue:"day",optionType:"button",buttonStyle:"solid"})]}),ut.jsx(bk,{columns:[{title:t("dashboard.analysis.article"),dataIndex:"name",key:"name",render:l=>ut.jsx("a",{children:l})},{title:t("dashboard.analysis.age"),dataIndex:"age",key:"age"},{title:t("dashboard.analysis.address"),dataIndex:"address",key:"address"},{title:t("dashboard.analysis.tags"),key:"tags",dataIndex:"tags",render:(l,{tags:u})=>ut.jsx(ut.Fragment,{children:u.map(f=>{let v=f.length>5?"geekblue":"green";return f==="loser"&&(v="volcano"),ut.jsx(wk,{color:v,children:f.toUpperCase()},f)})})},{title:t("dashboard.analysis.action"),key:"action",render:(l,u)=>ut.jsxs(yk,{size:"middle",children:[ut.jsxs("a",{children:[t("dashboard.analysis.invite")," ",u.name]}),ut.jsx("a",{children:t("dashboard.analysis.delete")})]})}],dataSource:o,pagination:!1,scroll:{x:800}})]})}),ut.jsx(on,{xl:12,xs:24,children:ut.jsxs(sn,{variant:"borderless",children:[ut.jsx("div",{className:"mb-5",style:{fontSize:r.fontSizeLG,fontWeight:r.fontWeightStrong},children:t("dashboard.analysis.userReviews")}),ut.jsx(Dc,{dataSource:s,renderItem:(l,u)=>ut.jsx(Dc.Item,{children:ut.jsx(Dc.Item.Meta,{avatar:ut.jsx(mk,{src:`https://xsgames.co/randomusers/avatar.php?g=pixel&key=${u}`}),title:ut.jsx("a",{href:"https://ant.design",children:l.title}),description:t("dashboard.analysis.reviewDescription")})})})]})})]})})};export{Qj as default}; diff --git a/public/assets/base-layout-DQ91AFp0.js b/public/assets/base-layout-DQ91AFp0.js new file mode 100644 index 0000000..7a34dfd --- /dev/null +++ b/public/assets/base-layout-DQ91AFp0.js @@ -0,0 +1 @@ +import{r as n,z as ie,G as oe,H as ce,J as de,K as me,L as w,M as xe,N as fe,O as he,P as pe,j as e,T as S,S as H,B as b,Q as I,d as P,U as F,V as ue,W as je,X as ye,a as z,C as y,A as ge}from"./index-B-sDl1ER.js";import{C as g}from"./index-CO5DzGxy.js";import{F as M}from"./index-Bc7ikhKh.js";import{T as E}from"./index-C9m5qSM4.js";import{D as v}from"./index-VkcAtM9X.js";import{P as R}from"./progress-C__thZ4V.js";const ve=s=>{const{value:t,formatter:l,precision:i,decimalSeparator:x,groupSeparator:f="",prefixCls:d}=s;let a;if(typeof l=="function")a=l(t);else{const r=String(t),m=r.match(/^(-?)(\d*)(\.(\d+))?$/);if(!m||r==="-")a=r;else{const u=m[1];let h=m[2]||"0",c=m[4]||"";h=h.replace(/\B(?=(\d{3})+(?!\d))/g,f),typeof i=="number"&&(c=c.padEnd(i,"0").slice(0,i>0?i:0)),c&&(c=`${x}${c}`),a=[n.createElement("span",{key:"int",className:`${d}-content-value-int`},u,h),c&&n.createElement("span",{key:"decimal",className:`${d}-content-value-decimal`},c)]}}return n.createElement("span",{className:`${d}-content-value`},a)},Se=s=>{const{componentCls:t,marginXXS:l,padding:i,colorTextDescription:x,titleFontSize:f,colorTextHeading:d,contentFontSize:a,fontFamily:r}=s;return{[t]:{...ce(s),[`${t}-header`]:{paddingBottom:l,[`${t}-title`]:{color:x,fontSize:f}},[`${t}-skeleton`]:{paddingTop:i},[`${t}-content`]:{color:d,fontSize:a,fontFamily:r,[`${t}-content-value`]:{display:"inline-block",direction:"ltr"},[`${t}-content-prefix, ${t}-content-suffix`]:{display:"inline-block"},[`${t}-content-prefix`]:{marginInlineEnd:l},[`${t}-content-suffix`]:{marginInlineStart:l}}}}},be=s=>{const{fontSizeHeading3:t,fontSize:l}=s;return{titleFontSize:l,contentFontSize:t}},Te=ie("Statistic",s=>{const t=oe(s,{});return Se(t)},be),T=n.forwardRef((s,t)=>{const{prefixCls:l,className:i,rootClassName:x,style:f,valueStyle:d,value:a=0,title:r,valueRender:m,prefix:u,suffix:h,loading:c=!1,formatter:o,precision:j,decimalSeparator:C=".",groupSeparator:k=",",onMouseEnter:A,onMouseLeave:W,styles:K,classNames:U,...V}=s,{getPrefixCls:X,direction:G,className:J,style:O,classNames:Q,styles:Y}=de("statistic"),p=X("statistic",l),[Z,_]=Te(p),q={...s,decimalSeparator:C,groupSeparator:k,loading:c,value:a},[N,$]=me([Q,U],[Y,K],{props:q}),B=n.createElement(ve,{decimalSeparator:C,groupSeparator:k,prefixCls:p,formatter:o,precision:j,value:a}),ee=w(p,{[`${p}-rtl`]:G==="rtl"},J,i,x,N.root,Z,_),te=w(`${p}-header`,N.header),se=w(`${p}-title`,N.title),ne=w(`${p}-content`,N.content),re=w(`${p}-content-prefix`,N.prefix),le=w(`${p}-content-suffix`,N.suffix),D=n.useRef(null);n.useImperativeHandle(t,()=>({nativeElement:D.current}));const ae=xe(V,{aria:!0,data:!0});return n.createElement("div",{...ae,className:ee,style:{...$.root,...O,...f},ref:D,onMouseEnter:A,onMouseLeave:W},r&&n.createElement("div",{className:te,style:$.header},n.createElement("div",{className:se,style:$.title},r)),n.createElement(fe,{paragraph:!1,loading:c,className:`${p}-skeleton`,active:!0},n.createElement("div",{className:ne,style:{...d,...$.content}},u&&n.createElement("span",{className:re,style:$.prefix},u),m?m(B):B,h&&n.createElement("span",{className:le,style:$.suffix},h))))}),Ce=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]];function Ne(s,t){let l=s;const i=/\[[^\]]*]/g,x=(t.match(i)||[]).map(r=>r.slice(1,-1)),f=t.replace(i,"[]"),d=Ce.reduce((r,[m,u])=>{if(r.includes(m)){const h=Math.floor(l/u);return l-=h*u,r.replace(new RegExp(`${m}+`,"g"),c=>{const o=c.length;return h.toString().padStart(o,"0")})}return r},f);let a=0;return d.replace(i,()=>{const r=x[a];return a+=1,r})}function $e(s,t,l){const{format:i=""}=t,x=new Date(s).getTime(),f=Date.now(),d=Math.max(l?x-f:f-x,0);return Ne(d,i)}const we=1e3/60;function Ee(s){return new Date(s).getTime()}const L=s=>{const{value:t,format:l="HH:mm:ss",onChange:i,onFinish:x,type:f,...d}=s,a=f==="countdown",[r,m]=n.useState(null),u=he(()=>{const o=Date.now(),j=Ee(t);m({});const C=a?j-o:o-j;return i?.(C),a&&j{let o;const j=()=>{u()||window.clearInterval(o)},C=()=>{o=window.setInterval(j,we)},k=()=>{window.clearInterval(o)};return C(),()=>{k()}},[t,a]),n.useEffect(()=>{m({})},[]);const h=(o,j)=>r?$e(o,{...j,format:l},a):"-",c=o=>pe(o,{title:void 0});return n.createElement(T,{...d,value:t,valueRender:c,formatter:h})},ke=s=>n.createElement(L,{...s,type:"countdown"}),Ie=n.memo(ke);T.Timer=L;T.Countdown=Ie;const{Title:ze}=S,Me=()=>e.jsxs("div",{style:{minHeight:"100vh"},children:[e.jsx(g,{variant:"borderless",style:{marginBottom:20},children:e.jsxs(M,{justify:"space-between",align:"center",children:[e.jsxs("div",{children:[e.jsx(ze,{level:3,style:{marginBottom:4},children:"页面标题"}),e.jsx(S.Text,{type:"secondary",children:"这是页面的描述信息,可以简要说明页面用途"})]}),e.jsxs(H,{style:{height:"100%"},children:[e.jsx(b,{icon:e.jsx(I,{}),children:"操作一"}),e.jsx(b,{icon:e.jsx(P,{}),children:"操作二"}),e.jsx(b,{type:"primary",icon:e.jsx(F,{}),children:"主要操作"}),e.jsx(ue,{trigger:["click"],menu:{items:[{label:"导出数据",key:"1",icon:e.jsx(ye,{})},{label:"批量操作",key:"2"},{label:"更多设置",key:"3"}]},children:e.jsx(b,{style:{padding:"0 8px"},children:e.jsx(je,{style:{fontSize:18}})})})]})]})}),e.jsxs(z,{gutter:[16,16],style:{marginBottom:24},children:[e.jsx(y,{xs:24,sm:12,lg:6,children:e.jsxs(g,{variant:"borderless",children:[e.jsx(T,{title:"总用户数",value:11893,prefix:e.jsx(I,{style:{color:"#1677ff"}}),valueStyle:{color:"#1677ff"}}),e.jsxs("div",{style:{marginTop:12},children:[e.jsx(E,{color:"success",children:"+12.5%"}),e.jsx(S.Text,{type:"secondary",style:{fontSize:12},children:"较上周"})]})]})}),e.jsx(y,{xs:24,sm:12,lg:6,children:e.jsxs(g,{variant:"borderless",children:[e.jsx(T,{title:"活跃用户",value:8234,prefix:e.jsx(P,{style:{color:"#52c41a"}}),valueStyle:{color:"#52c41a"}}),e.jsxs("div",{style:{marginTop:12},children:[e.jsx(E,{color:"success",children:"+8.2%"}),e.jsx(S.Text,{type:"secondary",style:{fontSize:12},children:"较上周"})]})]})}),e.jsx(y,{xs:24,sm:12,lg:6,children:e.jsxs(g,{variant:"borderless",children:[e.jsx(T,{title:"总订单",value:32567,prefix:e.jsx(F,{style:{color:"#faad14"}}),valueStyle:{color:"#faad14"}}),e.jsxs("div",{style:{marginTop:12},children:[e.jsx(E,{color:"warning",children:"+5.3%"}),e.jsx(S.Text,{type:"secondary",style:{fontSize:12},children:"较上周"})]})]})}),e.jsx(y,{xs:24,sm:12,lg:6,children:e.jsxs(g,{variant:"borderless",children:[e.jsx(T,{title:"总收入",value:98234,prefix:"¥",valueStyle:{color:"#f5222d"}}),e.jsxs("div",{style:{marginTop:12},children:[e.jsx(E,{color:"error",children:"-2.1%"}),e.jsx(S.Text,{type:"secondary",style:{fontSize:12},children:"较上周"})]})]})})]}),e.jsxs(g,{variant:"borderless",tabList:[{label:"基本信息",key:"base"},{label:"详细信息",key:"info"},{label:"数据分析",key:"analysis"}],activeTabKey:"base",children:[e.jsxs(z,{gutter:[16,16],style:{marginBottom:24},children:[e.jsx(y,{xs:24,lg:24,children:e.jsx(g,{title:e.jsxs("span",{children:[e.jsx(I,{style:{marginRight:8}}),"用户信息概览"]}),style:{background:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)",color:"#fff",borderRadius:8},styles:{header:{color:"#fff",borderBottom:"1px solid rgba(255,255,255,0.2)"}},children:e.jsxs(z,{gutter:[16,16],children:[e.jsx(y,{span:6,children:e.jsx(ge,{size:64,icon:e.jsx(I,{})})}),e.jsxs(y,{span:18,children:[e.jsx(S.Title,{level:5,style:{color:"#fff",marginTop:0},children:"张三 / Zhang San"}),e.jsx(S.Text,{style:{color:"rgba(255,255,255,0.85)"},children:"高级管理员 · 北京市朝阳区 · 在职"})]})]})})}),e.jsx(y,{xs:24,lg:16,children:e.jsx(g,{title:"详细信息",style:{height:"100%",borderRadius:8},children:e.jsxs(v,{column:{xs:1,sm:2},children:[e.jsx(v.Item,{label:"用户名",children:"zhangsan"}),e.jsx(v.Item,{label:"手机号",children:"138****8888"}),e.jsx(v.Item,{label:"邮箱",children:"zhangsan@example.com"}),e.jsx(v.Item,{label:"部门",children:"技术部"}),e.jsx(v.Item,{label:"职位",children:"高级工程师"}),e.jsx(v.Item,{label:"入职时间",children:"2023-01-15"}),e.jsx(v.Item,{label:"状态",children:e.jsx(E,{color:"success",children:"正常"})}),e.jsx(v.Item,{label:"权限等级",children:e.jsx(E,{color:"blue",children:"管理员"})})]})})}),e.jsx(y,{xs:24,lg:8,children:e.jsxs(g,{title:"任务完成度",style:{height:"100%",borderRadius:8},children:[e.jsxs("div",{style:{marginBottom:20},children:[e.jsxs("div",{style:{marginBottom:8},children:[e.jsx("span",{children:"本周任务"}),e.jsx("span",{style:{float:"right",fontWeight:600},children:"75%"})]}),e.jsx(R,{percent:75,strokeColor:"#52c41a"})]}),e.jsxs("div",{style:{marginBottom:20},children:[e.jsxs("div",{style:{marginBottom:8},children:[e.jsx("span",{children:"本月目标"}),e.jsx("span",{style:{float:"right",fontWeight:600},children:"60%"})]}),e.jsx(R,{percent:60,strokeColor:"#1677ff"})]}),e.jsxs("div",{children:[e.jsxs("div",{style:{marginBottom:8},children:[e.jsx("span",{children:"年度KPI"}),e.jsx("span",{style:{float:"right",fontWeight:600},children:"45%"})]}),e.jsx(R,{percent:45,strokeColor:"#faad14"})]})]})})]}),e.jsxs(M,{justify:"space-between",align:"center",children:[e.jsxs(H,{children:[e.jsx(b,{size:"large",children:"重置"}),e.jsx(b,{type:"primary",size:"large",children:"保存"}),e.jsx(b,{type:"primary",size:"large",ghost:!0,children:"提交审核"})]}),e.jsx(S.Text,{type:"secondary",children:"最后更新时间: 2026-01-01 10:30:00"})]})]})]});export{Me as default}; diff --git a/public/assets/dept-DXcViZXZ.js b/public/assets/dept-DXcViZXZ.js new file mode 100644 index 0000000..ef5dbc6 --- /dev/null +++ b/public/assets/dept-DXcViZXZ.js @@ -0,0 +1 @@ +import{z as je,H as Te,a3 as ae,r,J as we,a8 as O,K as Ee,L as $,M as Q,a9 as Ne,aa as ke,a5 as Re,a6 as Pe,ab as ze,a7 as Be,ac as Me,ad as Y,ae as He,af as Ae,ag as Fe,ah as qe,ai as Le,aj as z,u as _e,j as s,T as Z,a as Ke,C as ee,S as te,B as A,ak as We,al as se,am as F,w as G,an as Ve,d as Xe,Q as Ge}from"./index-B-sDl1ER.js";import{X as re}from"./index-duCmqVUU.js";import{A as P}from"./index-CkiGQ3z2.js";import{u as Oe}from"./useAuth-BOs-nzG0.js";import{T as ne}from"./index-C9m5qSM4.js";import{C as oe}from"./index-CO5DzGxy.js";import{P as Je}from"./index-BPV0ygaW.js";import{T as Qe,F as Ye}from"./Table-B11dzOaz.js";import"./index-BZjcF0yn.js";import"./tslib.es6-BaFViOhq.js";import"./index-D3yl9SWR.js";import"./progress-C__thZ4V.js";import"./index-CeRfFUxJ.js";import"./index-DmtjhyJb.js";const q=(e,t,o,a,l)=>({background:e,border:`${ae(a.lineWidth)} ${a.lineType} ${t}`,[`${l}-icon`]:{color:o}}),Ze=e=>{const{componentCls:t,motionDurationSlow:o,marginXS:a,marginSM:l,fontSize:p,fontSizeLG:c,lineHeight:u,borderRadiusLG:m,motionEaseInOutCirc:g,withDescriptionIconSize:x,colorText:b,colorTextHeading:D,withDescriptionPadding:S,defaultPadding:w}=e;return{[t]:{...Te(e),position:"relative",display:"flex",alignItems:"center",padding:w,wordWrap:"break-word",borderRadius:m,[`&${t}-rtl`]:{direction:"rtl"},[`${t}-section`]:{flex:1,minWidth:0},[`${t}-icon`]:{marginInlineEnd:a,lineHeight:0},"&-description":{display:"none",fontSize:p,lineHeight:u},"&-title":{color:D},[`&${t}-motion-leave`]:{overflow:"hidden",opacity:1,transition:["max-height","opacity","padding-top","padding-bottom","margin-bottom"].map(i=>`${i} ${o} ${g}`).join(", ")},[`&${t}-motion-leave-active`]:{maxHeight:0,marginBottom:"0 !important",paddingTop:0,paddingBottom:0,opacity:0}},[`${t}-with-description`]:{alignItems:"flex-start",padding:S,[`${t}-icon`]:{marginInlineEnd:l,fontSize:x,lineHeight:0},[`${t}-title`]:{display:"block",marginBottom:a,color:D,fontSize:c},[`${t}-description`]:{display:"block",color:b}},[`${t}-banner`]:{marginBottom:0,border:"0 !important",borderRadius:0}}},et=e=>{const{componentCls:t,colorSuccess:o,colorSuccessBorder:a,colorSuccessBg:l,colorWarning:p,colorWarningBorder:c,colorWarningBg:u,colorError:m,colorErrorBorder:g,colorErrorBg:x,colorInfo:b,colorInfoBorder:D,colorInfoBg:S}=e;return{[t]:{"&-success":q(l,a,o,e,t),"&-info":q(S,D,b,e,t),"&-warning":q(u,c,p,e,t),"&-error":{...q(x,g,m,e,t),[`${t}-description > pre`]:{margin:0,padding:0}}}}},tt=e=>{const{componentCls:t,iconCls:o,motionDurationMid:a,marginXS:l,fontSizeIcon:p,colorIcon:c,colorIconHover:u}=e;return{[t]:{"&-actions":{marginInlineStart:l},[`${t}-close-icon`]:{marginInlineStart:l,padding:0,overflow:"hidden",fontSize:p,lineHeight:ae(p),backgroundColor:"transparent",border:"none",outline:"none",cursor:"pointer",[`${o}-close`]:{color:c,transition:`color ${a}`,"&:hover":{color:u}}},"&-close-text":{color:c,transition:`color ${a}`,"&:hover":{color:u}}}}},st=e=>({withDescriptionIconSize:e.fontSizeHeading3,defaultPadding:`${e.paddingContentVerticalSM}px 12px`,withDescriptionPadding:`${e.paddingMD}px ${e.paddingContentHorizontalLG}px`}),rt=je("Alert",e=>[Ze(e),et(e),tt(e)],st),nt=e=>{const{icon:t,type:o,className:a,style:l,successIcon:p,infoIcon:c,warningIcon:u,errorIcon:m}=e,g={success:p??r.createElement(Be,null),info:c??r.createElement(ze,null),error:m??r.createElement(Pe,null),warning:u??r.createElement(Re,null)};return r.createElement("span",{className:a,style:l},t??g[o])},ot=e=>{const{isClosable:t,prefixCls:o,closeIcon:a,handleClose:l,ariaProps:p,className:c,style:u}=e,m=a===!0||a===void 0?r.createElement(Me,null):a;return t?r.createElement("button",{type:"button",onClick:l,className:$(`${o}-close-icon`,c),tabIndex:0,style:u,...p},m):null},le=r.forwardRef((e,t)=>{const{description:o,prefixCls:a,message:l,title:p,banner:c,className:u,rootClassName:m,style:g,onMouseEnter:x,onMouseLeave:b,onClick:D,afterClose:S,showIcon:w,closable:i,closeText:v,closeIcon:h,action:C,id:_,styles:B,classNames:E,...N}=e,k=p??l,[M,K]=r.useState(!1),R=r.useRef(null);r.useImperativeHandle(t,()=>({nativeElement:R.current}));const{getPrefixCls:W,direction:H,closable:I,closeIcon:n,className:d,style:f,classNames:ce,styles:de,successIcon:ue,infoIcon:pe,warningIcon:me,errorIcon:ye}=we("alert"),y=W("alert",a),[fe,ge]=rt(y),{onClose:he,afterClose:xe}=i&&typeof i=="object"?i:{},be=U=>{K(!0),(he??e.onClose)?.(U)},V=r.useMemo(()=>e.type!==void 0?e.type:c?"warning":"info",[e.type,c]),J=r.useMemo(()=>typeof i=="object"&&i.closeIcon||v?!0:typeof i=="boolean"?i:h!==!1&&O(h)?!0:!!I,[v,h,i,I]),X=c&&w===void 0?!0:w,De={...e,prefixCls:y,type:V,showIcon:X,closable:J},[j,T]=Ee([ce,E],[de,B],{props:De}),Ie=$(y,`${y}-${V}`,{[`${y}-with-description`]:!!o,[`${y}-no-icon`]:!X,[`${y}-banner`]:!!c,[`${y}-rtl`]:H==="rtl"},d,u,m,j.root,ge,fe),Se=Q(N,{aria:!0,data:!0}),Ce=r.useMemo(()=>typeof i=="object"&&i.closeIcon?i.closeIcon:v||(h!==void 0?h:typeof I=="object"&&I.closeIcon?I.closeIcon:n),[h,i,I,v,n]),ve=r.useMemo(()=>{const U=i??I;return typeof U=="object"?Q(U,{data:!0,aria:!0}):{}},[i,I]);return r.createElement(Ne,{visible:!M,motionName:`${y}-motion`,motionAppear:!1,motionEnter:!1,onLeaveStart:U=>({maxHeight:U.offsetHeight}),onLeaveEnd:xe??S},({className:U,style:Ue},$e)=>r.createElement("div",{id:_,ref:ke(R,$e),"data-show":!M,className:$(Ie,U),style:{...T.root,...f,...g,...Ue},onMouseEnter:x,onMouseLeave:b,onClick:D,role:"alert",...Se},X?r.createElement(nt,{className:$(`${y}-icon`,j.icon),style:T.icon,description:o,icon:e.icon,prefixCls:y,type:V,successIcon:ue,infoIcon:pe,warningIcon:me,errorIcon:ye}):null,r.createElement("div",{className:$(`${y}-section`,j.section),style:T.section},k?r.createElement("div",{className:$(`${y}-title`,j.title),style:T.title},k):null,o?r.createElement("div",{className:$(`${y}-description`,j.description),style:T.description},o):null),C?r.createElement("div",{className:$(`${y}-actions`,j.actions),style:T.actions},C):null,r.createElement(ot,{className:j.close,style:T.close,isClosable:J,prefixCls:y,closeIcon:Ce,handleClose:be,ariaProps:ve})))});function at(e,t,o){return t=Y(t),He(e,Ae()?Reflect.construct(t,o||[],Y(e).constructor):t.apply(e,o))}let lt=(function(e){function t(){var o;return Le(this,t),o=at(this,t,arguments),o.state={error:void 0,info:{}},o}return Fe(t,e),qe(t,[{key:"componentDidCatch",value:function(a,l){this.setState({error:a,info:l})}},{key:"render",value:function(){const{message:a,title:l,description:p,id:c,children:u}=this.props,{error:m,info:g}=this.state,x=l??a,b=g?.componentStack||null,D=O(x)?x:m?.toString(),S=O(p)?p:b;return m?r.createElement(le,{id:c,type:"error",title:D,description:r.createElement("pre",{style:{fontSize:"0.9em",overflowX:"auto"}},S)}):u}}])})(r.PureComponent);const ie=le;ie.ErrorBoundary=lt;async function it(){return z({url:"/system/dept",method:"get"})}async function ct(e){return z({url:"/system/dept",method:"post",data:e})}async function dt(e,t){return z({url:"/system/dept/"+e,method:"put",data:t})}async function ut(e){return z({url:"/system/dept",method:"delete",data:{ids:e}})}async function pt(e,t={page:1,pageSize:10}){return z({url:"/system/dept/users/"+e,method:"get",params:t})}const L=new Map,jt=()=>{const{t:e}=_e(),{auth:t}=Oe(),o=r.useRef(null),a=r.useRef(null),[l,p]=r.useState(""),[c,u]=r.useState([]),[m,g]=r.useState("info"),x=[{key:"info",label:e("sysUserDept.tab.info")},{key:"users",label:e("sysUserDept.tab.users"),disabled:!t("system.dept.users")}],[b,D]=r.useState([]),[S,w]=r.useState([]),[i,v]=r.useState({page:1,pageSize:10,total:0}),[h,C]=r.useState(!1),[_,B]=r.useState(!1),E=async(n,d)=>{try{B(!0);const f=await pt(n,F.omit(d||i,"total"));w(f.data.data.data),v({...i,total:f.data.data.total})}finally{B(!1)}},N=async()=>{C(!0);const n=d=>d?.length?d.map(f=>(L.set(f.id.toString(),F.omit(f,"children")),{title:f.name||e("sysUserDept.tab.users"),key:f.id?.toString()||"",icon:f.type===0?s.jsx(Ve,{}):f.type===1?s.jsx(Xe,{}):s.jsx(Ge,{}),children:n(f.children||[])})):[];try{const d=await it();d.data.data&&d.data.data.length>0&&(L.clear(),D(n(d.data.data)),(!l||!L.has(l))&&(p(d.data.data[0].id.toString()),o.current?.setFieldsValue(F.omit(d.data.data[0],"children")),t("system.dept.users")&&await E(d.data.data[0].id)))}finally{C(!1)}},k=(n=!1)=>{a.current?.resetFields(),a.current?.setFieldsValue({parent_id:n?Number(l):0,sort:0,status:0,type:0}),a.current?.open()},M=n=>{if(n&&n.length>=1){p(n[0].toString());const d=L.get(n[0].toString());d&&o.current?.setFieldsValue(d),E(Number(n[0])).then()}},K=n=>{F.isArray(n)?u(n):u(n.checked)},R=async(n,d=!1)=>{try{C(!0),d?(await dt(Number(l),n),G.success(e("sysUserDept.updateSuccess"))):(await ct(n),G.success(e("sysUserDept.createSuccess")),a.current?.close()),await N()}finally{C(!1)}},W=async()=>{try{C(!0),await ut(c),await N(),u([]),G.success(e("sysUserDept.deleteSuccess"))}finally{C(!1)}},H=[{title:e("sysUserDept.column.name"),valueType:"text",dataIndex:"name",rules:[{required:!0,message:e("sysUserDept.column.name.required")}]},{title:e("sysUserDept.column.code"),valueType:"text",dataIndex:"code",rules:[{required:!0,message:e("sysUserDept.column.code.required")}]},{title:e("sysUserDept.column.type"),valueType:"radioButton",dataIndex:"type",fieldProps:{options:[{value:0,label:e("sysUserDept.column.type.0")},{value:1,label:e("sysUserDept.column.type.1")},{value:2,label:e("sysUserDept.column.type.2")}]},rules:[{required:!0,message:e("sysUserDept.column.type.required")}]},{title:e("sysUserDept.column.parent"),valueType:"treeSelect",dataIndex:"parent_id",fieldProps:{treeData:[{title:e("sysUserDept.column.parent.0"),value:0,children:b}],fieldNames:{label:"title",value:"key"},disabled:!0},rules:[{required:!0,message:e("sysUserDept.column.parent.required")}]},{title:e("sysUserDept.column.email"),valueType:"text",dataIndex:"email"},{title:e("sysUserDept.column.address"),valueType:"text",dataIndex:"address"},{title:e("sysUserDept.column.phone"),valueType:"text",dataIndex:"phone"},{title:e("sysUserDept.column.sort"),valueType:"digit",dataIndex:"sort",rules:[{required:!0,message:e("sysUserDept.column.sort.required")}]},{title:e("sysUserDept.column.status"),valueType:"radioButton",dataIndex:"status",fieldProps:{options:[{value:0,label:e("sysUserDept.column.status.0")},{value:1,label:e("sysUserDept.column.status.1")}]},rules:[{required:!0,message:e("sysUserDept.column.status.required")}]},{title:e("sysUserDept.column.remark"),valueType:"textarea",dataIndex:"remark"}],I=[{title:e("sysUserDept.users.column.id"),dataIndex:"id",key:"id",align:"center"},{title:e("sysUserDept.users.column.username"),dataIndex:"username",key:"username",align:"center"},{title:e("sysUserDept.users.column.nickname"),dataIndex:"nickname",key:"nickname",align:"center"},{title:e("sysUserDept.users.column.nickname"),dataIndex:"email",key:"email",align:"center"},{title:e("sysUserDept.users.column.mobile"),dataIndex:"mobile",key:"mobile",align:"center"},{title:e("sysUserDept.users.column.status"),dataIndex:"status",key:"status",align:"center",render:n=>s.jsxs(s.Fragment,{children:[n===1&&s.jsx(ne,{color:"success",children:e("sysUserDept.users.column.status.0")}),n===0&&s.jsx(ne,{color:"error",children:e("sysUserDept.users.column.status.1")})]})}];return r.useEffect(()=>{N()},[]),s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"mb-5",children:[s.jsx(Z.Title,{level:3,children:e("sysUserDept.page.title")}),s.jsx(Z.Text,{type:"secondary",children:e("sysUserDept.page.description")})]}),s.jsxs(Ke,{gutter:[20,20],children:[s.jsxs(ee,{xxl:12,lg:12,xs:24,children:[s.jsx(re,{layoutType:"ModalForm",formRef:a,modalProps:{title:e("sysUserDept.createModalTitle"),styles:{body:{paddingTop:20}},width:800},onFinish:async n=>(await R(n,!1),!0),columns:H,layout:"vertical",grid:!0,rowProps:{gutter:[30,0]},colProps:{span:12}}),s.jsxs(oe,{title:s.jsxs(te,{children:[s.jsx(P,{auth:"system.dept.create",children:s.jsx(A,{loading:h,children:e("sysUserDept.createButton"),icon:s.jsx(se,{}),type:"primary",onClick:()=>k()})}),s.jsx(P,{auth:"system.dept.create",children:s.jsx(A,{loading:h,children:e("sysUserDept.createChildrenButton"),icon:s.jsx(se,{}),type:"primary",onClick:()=>k(!0)})})]}),variant:"borderless",loading:h,styles:{body:{minHeight:"70vh"}},children:[c.length>0&&s.jsx(ie,{style:{marginBottom:20},description:e("sysUserDept.checkedMessage",{checked:c.length}),type:"info",action:s.jsxs(te,{children:[s.jsx(A,{size:"small",type:"primary",onClick:()=>u([]),children:e("sysUserDept.unselect")}),s.jsx(P,{auth:"system.dept.delete",children:s.jsx(Je,{okText:e("sysUserDept.delete.ok"),cancelText:e("sysUserDept.delete.cancel"),title:e("sysUserDept.delete.title"),description:e("sysUserDept.delete.description"),onConfirm:()=>W(),children:s.jsx(A,{type:"primary",icon:s.jsx(We,{}),size:"small",danger:!0,loading:h})})})]})}),s.jsx(Qe,{checkable:!0,treeData:b,showIcon:!0,checkStrictly:!0,selectedKeys:[l],defaultExpandedKeys:[l],onSelect:M,checkedKeys:c,onCheck:K})]})]}),s.jsx(ee,{xxl:12,lg:12,xs:24,children:s.jsxs(oe,{variant:"borderless",tabList:x,tabProps:{accessKey:m},onTabChange:g,styles:{body:{minHeight:"70vh"}},children:[s.jsx(re,{formRef:o,onFinish:async n=>(await R(n,!0),!0),columns:H,layout:"horizontal",style:{display:m==="info"?"block":"none"},submitter:{render:n=>s.jsx(P,{auth:"system.dept.update",children:n.submit}),submitText:e("sysUserDept.saveInfo")}}),s.jsx(P,{auth:"system.dept.users",children:s.jsx(Ye,{style:{display:m==="users"?"block":"none"},dataSource:S,bordered:!0,columns:I,loading:_,size:"small",pagination:{current:i.page,pageSize:i.pageSize,total:i.total,showSizeChanger:!0,onChange:(n,d)=>{const f={total:i.total,pageSize:d,page:n};v(f),E(Number(l),f).then()}},scroll:{x:600}})})]})})]})]})};export{jt as default}; diff --git a/public/assets/descriptions-7UvHFHcf.js b/public/assets/descriptions-7UvHFHcf.js new file mode 100644 index 0000000..59f550f --- /dev/null +++ b/public/assets/descriptions-7UvHFHcf.js @@ -0,0 +1 @@ +import{j as e,T as y,U as p,S as u,B as a,Y as b,Z as g,_ as n,a as S,C as o,A as I,Q as f,D as c,i as v}from"./index-B-sDl1ER.js";import{C as l}from"./index-CO5DzGxy.js";import{F as d}from"./index-Bc7ikhKh.js";import{S as R,T as C}from"./Timeline-BM8lZv8J.js";import{D as s}from"./index-VkcAtM9X.js";import{T as x}from"./index-C9m5qSM4.js";import{F as r}from"./Table-B11dzOaz.js";import"./index-CeRfFUxJ.js";import"./index-DmtjhyJb.js";const{Title:B,Text:t}=y,A=()=>{const m=[{title:"商品名称",dataIndex:"name",key:"name"},{title:"商品编号",dataIndex:"code",key:"code"},{title:"数量",dataIndex:"quantity",key:"quantity"},{title:"单价",dataIndex:"price",key:"price",render:i=>`¥${i.toFixed(2)}`},{title:"小计",dataIndex:"total",key:"total",render:i=>`¥${i.toFixed(2)}`}],j=[{key:"1",name:"iPhone 15 Pro Max",code:"IP15PM-256-BLK",quantity:2,price:9999,total:19998},{key:"2",name:"AirPods Pro 2",code:"APP2-WHT",quantity:1,price:1899,total:1899},{key:"3",name:'MacBook Pro 16"',code:"MBP16-M3-SLV",quantity:1,price:25999,total:25999}],h=[{time:"2026-01-01 15:30:00",status:"已签收",description:"您的订单已由本人签收,感谢您的购买"},{time:"2026-01-01 09:20:00",status:"派送中",description:"快递员正在为您派送 [北京市朝阳区] 快递员:李师傅 13800138000"},{time:"2025-12-31 18:45:00",status:"运输中",description:"您的包裹已到达 [北京分拨中心]"},{time:"2025-12-30 14:20:00",status:"已发货",description:"您的订单已从 [上海仓库] 发出,物流单号: SF1234567890"},{time:"2025-12-30 10:00:00",status:"已支付",description:"订单支付成功,等待商家发货"}];return e.jsxs("div",{style:{minHeight:"100vh"},children:[e.jsx(l,{variant:"borderless",style:{marginBottom:20},children:e.jsxs(d,{justify:"space-between",align:"center",children:[e.jsxs("div",{children:[e.jsxs(B,{level:3,style:{marginBottom:4},children:[e.jsx(p,{style:{marginRight:8}}),"订单详情"]}),e.jsx(t,{type:"secondary",children:"订单号: OD2026010100001 · 创建时间: 2025-12-30 09:45:32"})]}),e.jsxs(u,{style:{height:"100%"},children:[e.jsx(a,{icon:e.jsx(b,{}),children:"打印订单"}),e.jsx(a,{icon:e.jsx(g,{}),children:"导出订单"}),e.jsx(a,{type:"primary",children:"联系客服"})]})]})}),e.jsx(l,{variant:"borderless",style:{marginBottom:20},children:e.jsx(R,{current:4,items:[{title:"提交订单",description:"2025-12-30 09:45",icon:e.jsx(n,{})},{title:"支付完成",description:"2025-12-30 10:00",icon:e.jsx(n,{})},{title:"商家发货",description:"2025-12-30 14:20",icon:e.jsx(n,{})},{title:"运输中",description:"2025-12-31 18:45",icon:e.jsx(n,{})},{title:"已签收",description:"2026-01-01 15:30",icon:e.jsx(n,{})}]})}),e.jsxs(S,{gutter:[16,16],children:[e.jsxs(o,{xs:24,lg:16,children:[e.jsx(l,{variant:"borderless",title:"订单基本信息",style:{marginBottom:16},children:e.jsxs(s,{column:{xs:1,sm:2},bordered:!0,children:[e.jsx(s.Item,{label:"订单号",children:"OD2026010100001"}),e.jsx(s.Item,{label:"订单状态",children:e.jsx(x,{color:"success",icon:e.jsx(n,{}),children:"已完成"})}),e.jsx(s.Item,{label:"下单时间",children:"2025-12-30 09:45:32"}),e.jsx(s.Item,{label:"支付时间",children:"2025-12-30 10:00:15"}),e.jsx(s.Item,{label:"发货时间",children:"2025-12-30 14:20:00"}),e.jsx(s.Item,{label:"完成时间",children:"2026-01-01 15:30:00"}),e.jsx(s.Item,{label:"支付方式",children:e.jsx(x,{color:"blue",children:"微信支付"})}),e.jsx(s.Item,{label:"配送方式",children:"顺丰速运"}),e.jsx(s.Item,{label:"发票类型",children:"电子发票"}),e.jsx(s.Item,{label:"发票抬头",children:"北京科技有限公司"})]})}),e.jsx(l,{variant:"borderless",title:"收货信息",style:{marginBottom:16},children:e.jsxs(s,{column:{xs:1,sm:2},bordered:!0,children:[e.jsx(s.Item,{label:"收货人",children:"张三"}),e.jsx(s.Item,{label:"联系电话",children:"138****8888"}),e.jsx(s.Item,{label:"收货地址",span:2,children:"北京市朝阳区建国路88号SOHO现代城A座2106室"})]})}),e.jsx(l,{variant:"borderless",title:"商品信息",children:e.jsx(r,{columns:m,dataSource:j,pagination:!1,summary:()=>e.jsxs(r.Summary,{children:[e.jsxs(r.Summary.Row,{children:[e.jsx(r.Summary.Cell,{index:0,colSpan:4,children:e.jsx(t,{strong:!0,children:"合计"})}),e.jsx(r.Summary.Cell,{index:1,children:e.jsx(t,{strong:!0,style:{color:"#f5222d",fontSize:16},children:"¥47,896.00"})})]}),e.jsxs(r.Summary.Row,{children:[e.jsx(r.Summary.Cell,{index:0,colSpan:4,children:e.jsx(t,{children:"运费"})}),e.jsx(r.Summary.Cell,{index:1,children:e.jsx(t,{children:"¥0.00"})})]}),e.jsxs(r.Summary.Row,{children:[e.jsx(r.Summary.Cell,{index:0,colSpan:4,children:e.jsx(t,{children:"优惠"})}),e.jsx(r.Summary.Cell,{index:1,children:e.jsx(t,{style:{color:"#52c41a"},children:"-¥500.00"})})]}),e.jsxs(r.Summary.Row,{children:[e.jsx(r.Summary.Cell,{index:0,colSpan:4,children:e.jsx(t,{strong:!0,style:{fontSize:16},children:"实付金额"})}),e.jsx(r.Summary.Cell,{index:1,children:e.jsx(t,{strong:!0,style:{color:"#f5222d",fontSize:18},children:"¥47,396.00"})})]})]})})})]}),e.jsxs(o,{xs:24,lg:8,children:[e.jsxs(l,{variant:"borderless",title:"买家信息",style:{marginBottom:16},children:[e.jsxs(d,{align:"center",style:{marginBottom:16},children:[e.jsx(I,{size:48,icon:e.jsx(f,{})}),e.jsxs("div",{style:{marginLeft:12},children:[e.jsx(t,{strong:!0,children:"张三"}),e.jsx("br",{}),e.jsx(t,{type:"secondary",style:{fontSize:12},children:"会员等级: VIP金卡"})]})]}),e.jsx(c,{style:{margin:"12px 0"}}),e.jsxs(s,{column:1,size:"small",children:[e.jsx(s.Item,{label:"用户ID",children:"U202512300001"}),e.jsx(s.Item,{label:"手机号",children:"138****8888"}),e.jsx(s.Item,{label:"邮箱",children:"zhangsan@example.com"}),e.jsx(s.Item,{label:"历史订单",children:"156 笔"}),e.jsx(s.Item,{label:"累计消费",children:"¥358,960"})]})]}),e.jsxs(l,{variant:"borderless",title:"物流追踪",children:[e.jsx(t,{type:"secondary",style:{fontSize:12},children:"物流公司: 顺丰速运"}),e.jsx("br",{}),e.jsx(t,{type:"secondary",style:{fontSize:12},children:"快递单号: SF1234567890"}),e.jsx(c,{style:{margin:"12px 0"}}),e.jsx(C,{items:h.map(i=>({color:i.status==="已签收"?"green":"blue",children:e.jsxs("div",{children:[e.jsx(t,{strong:!0,children:i.status}),e.jsx("br",{}),e.jsx(t,{type:"secondary",style:{fontSize:12},children:i.description}),e.jsx("br",{}),e.jsxs(t,{type:"secondary",style:{fontSize:12},children:[e.jsx(v,{style:{marginRight:4}}),i.time]})]})}))})]})]})]}),e.jsxs(l,{variant:"borderless",title:"订单备注",style:{marginTop:16},children:[e.jsx(t,{type:"secondary",children:"买家留言: 请在工作日配送,周末家里没人。如有问题请提前电话联系。"}),e.jsx(c,{}),e.jsx(t,{type:"secondary",children:"商家备注: 已按照买家要求在工作日配送,客户体验良好。"})]})]})};export{A as default}; diff --git a/public/assets/fail-BHtOA_db.js b/public/assets/fail-BHtOA_db.js new file mode 100644 index 0000000..0f23f88 --- /dev/null +++ b/public/assets/fail-BHtOA_db.js @@ -0,0 +1 @@ +import{j as e,T as t,a0 as r,B as o}from"./index-B-sDl1ER.js";import{C as i}from"./index-CO5DzGxy.js";import{R as a}from"./index-CwBuiwuD.js";const{Paragraph:s,Text:n}=t,h=()=>e.jsx(i,{variant:"borderless",children:e.jsx(a,{status:"error",title:"Submission Failed",subTitle:"Please check and modify the following information before resubmitting.",extra:[e.jsx(o,{type:"primary",children:"Go Console"},"console"),e.jsx(o,{children:"Buy Again"},"buy")],children:e.jsxs("div",{className:"desc",children:[e.jsx(s,{children:e.jsx(n,{strong:!0,style:{fontSize:16},children:"The content you submitted has the following error:"})}),e.jsxs(s,{children:[e.jsx(r,{className:"site-result-demo-error-icon"})," Your account has been frozen. ",e.jsx("a",{children:"Thaw immediately >"})]}),e.jsxs(s,{children:[e.jsx(r,{className:"site-result-demo-error-icon"})," Your account is not yet eligible to apply. ",e.jsx("a",{children:"Apply Unlock >"})]})]})})});export{h as default}; diff --git a/public/assets/file-B4x3U0bn.js b/public/assets/file-B4x3U0bn.js new file mode 100644 index 0000000..4f27cb2 --- /dev/null +++ b/public/assets/file-B4x3U0bn.js @@ -0,0 +1 @@ +import{r as s,av as Zt,aw as Wt,L as A,R as se,O as ht,ax as Je,ay as Ut,az as Vt,a9 as Kt,aA as He,aB as qt,aC as Qt,aD as Jt,z as es,G as ts,aE as we,a3 as ss,aF as et,aG as Ze,au as We,ac as ns,aH as os,aI as is,aJ as rs,aK as as,J as xt,K as wt,aL as vt,aj as W,u as ls,j as n,aM as tt,aq as st,V as nt,B as te,aN as cs,Z as ds,a2 as ot,aO as it,aP as rt,ak as me,S as fe,ar as Te,aQ as at,T as Ct,a as us,C as lt,I as ct,aR as dt,aS as ms,aT as fs,aU as ut,aV as Xe,F as Be,aW as ps,D as gs,w as B,am as mt,aX as ys}from"./index-B-sDl1ER.js";import{X as hs,T as xs}from"./index-duCmqVUU.js";import{T as Ge}from"./index-C9m5qSM4.js";import{C as ft}from"./index-CO5DzGxy.js";import{S as ws}from"./index-DmtjhyJb.js";import{T as vs,F as pt}from"./Table-B11dzOaz.js";import{U as Cs}from"./index-D3yl9SWR.js";import{P as Fs}from"./progress-C__thZ4V.js";import{D as bs}from"./index-VkcAtM9X.js";import"./index-BZjcF0yn.js";import"./tslib.es6-BaFViOhq.js";import"./index-CeRfFUxJ.js";const $e=s.createContext(null);function Ss(e){return new Promise(t=>{if(!e){t(!1);return}const o=document.createElement("img");o.onerror=()=>t(!1),o.onload=()=>t(!0),o.src=e})}function Ft(){const e=document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{width:e,height:t}}const Ne={x:0,y:0,rotate:0,scale:1,flipX:!1,flipY:!1};function Is(e,t,o,r){const c=s.useRef(null),a=s.useRef([]),[l,u]=s.useState(Ne),p=g=>{u(Ne),Zt(Ne,l)||r?.({transform:Ne,action:g})},d=(g,b)=>{c.current===null&&(a.current=[],c.current=Wt(()=>{u(w=>{let y=w;return a.current.forEach(S=>{y={...y,...S}}),c.current=null,r?.({transform:y,action:b}),y})})),a.current.push({...l,...g})};return{transform:l,resetTransform:p,updateTransform:d,dispatchZoomChange:(g,b,w,y,S)=>{const{width:C,height:I,offsetWidth:m,offsetHeight:f,offsetLeft:j,offsetTop:F}=e.current;let k=g,h=l.scale*g;h>o?(h=o,k=o/l.scale):hr){if(t>0)return{[e]:a};if(t<0&&cr)return{[e]:t<0?a:-a};return{}}function bt(e,t,o,r){const{width:c,height:a}=Ft();let l=null;return e<=c&&t<=a?l={x:0,y:0}:(e>c||t>a)&&(l={...gt("x",o,e,c),...gt("y",r,t,a)}),l}const ye=1,ks=1;function js(e,t,o,r,c,a,l){const{rotate:u,scale:p,x:d,y:x}=c,[g,b]=s.useState(!1),w=s.useRef({diffX:0,diffY:0,transformX:0,transformY:0}),y=m=>{!t||m.button!==0||(m.preventDefault(),m.stopPropagation(),w.current={diffX:m.pageX-d,diffY:m.pageY-x,transformX:d,transformY:x},b(!0))},S=m=>{o&&g&&a({x:m.pageX-w.current.diffX,y:m.pageY-w.current.diffY},"move")},C=()=>{if(o&&g){b(!1);const{transformX:m,transformY:f}=w.current;if(!(d!==m&&x!==f))return;const F=e.current.offsetWidth*p,k=e.current.offsetHeight*p,{left:h,top:R}=e.current.getBoundingClientRect(),P=u%180!==0,T=bt(P?k:F,P?F:k,h,R);T&&a({...T},"dragRebound")}},I=m=>{if(!o||m.deltaY==0)return;const f=Math.abs(m.deltaY/100),j=Math.min(f,ks);let F=ye+j*r;m.deltaY>0&&(F=ye/F),l(F,"wheel",m.clientX,m.clientY)};return s.useEffect(()=>{if(t){window.addEventListener("mouseup",C,!1),window.addEventListener("mousemove",S,!1);try{window.top!==window.self&&(window.top.addEventListener("mouseup",C,!1),window.top.addEventListener("mousemove",S,!1))}catch{}}return()=>{window.removeEventListener("mouseup",C),window.removeEventListener("mousemove",S);try{window.top?.removeEventListener("mouseup",C),window.top?.removeEventListener("mousemove",S)}catch{}}},[o,g,d,x,u,t]),{isMoving:g,onMouseDown:y,onMouseMove:S,onMouseUp:C,onWheel:I}}function St({src:e,isCustomPlaceholder:t,fallback:o}){const[r,c]=s.useState(t?"loading":"normal"),a=s.useRef(!1),l=r==="error";s.useEffect(()=>{let x=!0;return Ss(e).then(g=>{!g&&x&&c("error")}),()=>{x=!1}},[e]),s.useEffect(()=>{t&&!a.current?c("loading"):l&&c("normal")},[e]);const u=()=>{c("normal")};return[x=>{a.current=!1,r==="loading"&&x?.complete&&(x.naturalWidth||x.naturalHeight)&&(a.current=!0,u())},l&&o?{src:o}:{onLoad:u,src:e},r]}function Ee(e,t){const o=e.x-t.x,r=e.y-t.y;return Math.hypot(o,r)}function Ts(e,t,o,r){const c=Ee(e,o),a=Ee(t,r);if(c===0&&a===0)return[e.x,e.y];const l=c/(c+a),u=e.x+l*(t.x-e.x),p=e.y+l*(t.y-e.y);return[u,p]}function Ns(e,t,o,r,c,a,l){const{rotate:u,scale:p,x:d,y:x}=c,[g,b]=s.useState(!1),w=s.useRef({point1:{x:0,y:0},point2:{x:0,y:0},eventType:"none"}),y=m=>{w.current={...w.current,...m}},S=m=>{if(!t)return;m.stopPropagation(),b(!0);const{touches:f=[]}=m;f.length>1?y({point1:{x:f[0].clientX,y:f[0].clientY},point2:{x:f[1].clientX,y:f[1].clientY},eventType:"touchZoom"}):y({point1:{x:f[0].clientX-d,y:f[0].clientY-x},eventType:"move"})},C=m=>{const{touches:f=[]}=m,{point1:j,point2:F,eventType:k}=w.current;if(f.length>1&&k==="touchZoom"){const h={x:f[0].clientX,y:f[0].clientY},R={x:f[1].clientX,y:f[1].clientY},[P,T]=Ts(j,F,h,R),D=Ee(h,R)/Ee(j,F);l(D,"touchZoom",P,T,!0),y({point1:h,point2:R,eventType:"touchZoom"})}else k==="move"&&(a({x:f[0].clientX-j.x,y:f[0].clientY-j.y},"move"),y({eventType:"move"}))},I=()=>{if(!o)return;if(g&&b(!1),y({eventType:"none"}),r>p)return a({x:0,y:0,scale:r},"touchZoom");const m=e.current.offsetWidth*p,f=e.current.offsetHeight*p,{left:j,top:F}=e.current.getBoundingClientRect(),k=u%180!==0,h=bt(k?f:m,k?m:f,j,F);h&&a({...h},"dragRebound")};return s.useEffect(()=>{const m=f=>{f.preventDefault()};return o&&t&&window.addEventListener("touchmove",m,{passive:!1}),()=>{window.removeEventListener("touchmove",m)}},[o,t]),{isTouching:g,onTouchStart:S,onTouchMove:C,onTouchEnd:I}}function Es(e){const{prefixCls:t,icon:o,onClick:r}=e;return s.createElement("button",{className:`${t}-close`,onClick:r},o)}function Ms(e){const{prefixCls:t,showProgress:o,current:r,count:c,showSwitch:a,classNames:l,styles:u,icons:p,image:d,transform:x,countRender:g,actionsRender:b,scale:w,minScale:y,maxScale:S,onActive:C,onFlipY:I,onFlipX:m,onRotateLeft:f,onRotateRight:j,onZoomOut:F,onZoomIn:k,onClose:h,onReset:R}=e,{left:P,right:T,prev:D,next:G,flipY:Y,flipX:_,rotateLeft:E,rotateRight:$,zoomOut:Q,zoomIn:H}=p,X=o&&s.createElement("div",{className:`${t}-progress`},g?g(r+1,c):s.createElement("bdi",null,`${r+1} / ${c}`)),N=`${t}-actions-action`,z=({type:ae,disabled:le,onClick:pe,icon:ge})=>s.createElement("div",{key:ae,className:A(N,`${N}-${ae}`,{[`${N}-disabled`]:!!le}),onClick:pe},ge),Z=a?z({icon:D??P,onClick:()=>C(-1),type:"prev",disabled:r===0}):void 0,U=a?z({icon:G??T,onClick:()=>C(1),type:"next",disabled:r===c-1}):void 0,J=z({icon:Y,onClick:I,type:"flipY"}),ne=z({icon:_,onClick:m,type:"flipX"}),O=z({icon:E,onClick:f,type:"rotateLeft"}),L=z({icon:$,onClick:j,type:"rotateRight"}),K=z({icon:Q,onClick:F,type:"zoomOut",disabled:w<=y}),re=z({icon:H,onClick:k,type:"zoomIn",disabled:w===S}),ie=s.createElement("div",{className:A(`${t}-actions`,l.actions),style:u.actions},J,ne,O,L,K,re);return s.createElement("div",{className:A(`${t}-footer`,l.footer),style:u.footer},X,b?b(ie,{icons:{prevIcon:Z,nextIcon:U,flipYIcon:J,flipXIcon:ne,rotateLeftIcon:O,rotateRightIcon:L,zoomOutIcon:K,zoomInIcon:re},actions:{onActive:C,onFlipY:I,onFlipX:m,onRotateLeft:f,onRotateRight:j,onZoomOut:F,onZoomIn:k,onReset:R,onClose:h},transform:x,current:r,total:c,image:d}):ie)}function Rs(e){const{prefixCls:t,onActive:o,current:r,count:c,icons:{left:a,right:l,prev:u,next:p}}=e,d=`${t}-switch`;return s.createElement(s.Fragment,null,s.createElement("div",{className:A(d,`${d}-prev`,{[`${d}-disabled`]:r===0}),onClick:()=>o(-1)},u??a),s.createElement("div",{className:A(d,`${d}-next`,{[`${d}-disabled`]:r===c-1}),onClick:()=>o(1)},p??l))}function Me(){return Me=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const[c,a]=St({src:t,fallback:e});return se.createElement("img",Me({ref:l=>{o.current=l,c(l)}},r,a))},It=e=>{const{prefixCls:t,rootClassName:o,src:r,alt:c,imageInfo:a,fallback:l,movable:u=!0,onClose:p,open:d,afterOpenChange:x,icons:g={},closeIcon:b,getContainer:w,current:y=0,count:S=1,countRender:C,scaleStep:I=.5,minScale:m=1,maxScale:f=50,motionName:j="fade",imageRender:F,imgCommonProps:k,actionsRender:h,onTransform:R,onChange:P,classNames:T={},styles:D={},mousePosition:G,zIndex:Y}=e,_=s.useRef(),E=s.useContext($e),$=E&&S>1,Q=E&&S>=1,[H,X]=s.useState(!0),{transform:N,resetTransform:z,updateTransform:Z,dispatchZoomChange:U}=Is(_,m,f,R),{isMoving:J,onMouseDown:ne,onWheel:O}=js(_,u,d,I,N,Z,U),{isTouching:L,onTouchStart:K,onTouchMove:re,onTouchEnd:ie}=Ns(_,u,d,m,N,Z,U),{rotate:ae,scale:le}=N;s.useEffect(()=>{H||X(!0)},[H]),s.useEffect(()=>{d||z("close")},[d]);const pe=V=>{d&&(le!==1?Z({x:0,y:0,scale:1},"doubleClick"):U(ye+I,"doubleClick",V.clientX,V.clientY))},ge=se.createElement($s,Me({},k,{width:e.width,height:e.height,imgRef:_,className:`${t}-img`,alt:c,style:{transform:`translate3d(${N.x}px, ${N.y}px, 0) scale3d(${N.flipX?"-":""}${le}, ${N.flipY?"-":""}${le}, 1) rotate(${ae}deg)`,transitionDuration:(!H||L)&&"0s"},fallback:l,src:r,onWheel:O,onMouseDown:ne,onDoubleClick:pe,onTouchStart:K,onTouchMove:re,onTouchEnd:ie,onTouchCancel:ie})),Ce={url:r,alt:c,...a},Pe=()=>{U(ye+I,"zoomIn")},Fe=()=>{U(ye/(ye+I),"zoomOut")},q=()=>{Z({rotate:ae+90},"rotateRight")},De=()=>{Z({rotate:ae-90},"rotateLeft")},he=()=>{Z({flipX:!N.flipX},"flipX")},oe=()=>{Z({flipY:!N.flipY},"flipY")},ce=()=>{z("reset")},de=V=>{const ee=y+V;ee>=0&&ee<=S-1&&(X(!1),z(V<0?"prev":"next"),P?.(ee,y))},be=ht(V=>{if(d){const{keyCode:ee}=V;$&&(ee===Je.LEFT?de(-1):ee===Je.RIGHT&&de(1))}});s.useEffect(()=>{if(d)return window.addEventListener("keydown",be),()=>{window.removeEventListener("keydown",be)}},[d]);const[Oe,Se]=s.useState(!1);se.useEffect(()=>{d&&Se(!0)},[d]);const Le=V=>{V||Se(!1),x?.(V)},[Ie,Ae]=s.useState(!1);Ut(()=>{d&&Ae(!0)},[d]);const ze=({top:V})=>{V&&p?.()},ke={...D.body};return G&&(ke.transformOrigin=`${G.x}px ${G.y}px`),se.createElement(Vt,{open:Ie&&d,autoDestroy:!1,getContainer:w,autoLock:Oe,onEsc:ze},se.createElement(Kt,{motionName:j,visible:Ie&&d,motionAppear:!0,motionEnter:!0,motionLeave:!0,onVisibleChanged:Le},({className:V,style:ee})=>{const xe={...D.root,...ee};return Y&&(xe.zIndex=Y),se.createElement("div",{className:A(t,o,T.root,V,{[`${t}-moving`]:J}),style:xe},se.createElement("div",{className:A(`${t}-mask`,T.mask),style:D.mask,onClick:p}),se.createElement("div",{className:A(`${t}-body`,T.body),style:ke},F?F(ge,{transform:N,image:Ce,...E?{current:y}:{}}):ge),b!==!1&&b!==null&&se.createElement(Es,{prefixCls:t,icon:b===!0?g.close:b||g.close,onClick:p}),$&&se.createElement(Rs,{prefixCls:t,current:y,count:S,icons:g,onActive:de}),se.createElement(Ms,{prefixCls:t,showProgress:Q,current:y,count:S,showSwitch:$,classNames:T,styles:D,image:Ce,transform:N,icons:g,countRender:C,actionsRender:h,scale:le,minScale:m,maxScale:f,onActive:de,onFlipY:oe,onFlipX:he,onRotateLeft:De,onRotateRight:q,onZoomOut:Fe,onZoomIn:Pe,onClose:p,onReset:ce}))}))},Ue=["crossOrigin","decoding","draggable","loading","referrerPolicy","sizes","srcSet","useMap","alt"];function Ps(e){const[t,o]=s.useState({}),r=s.useCallback((a,l)=>(o(u=>({...u,[a]:l})),()=>{o(u=>{const p={...u};return delete p[a],p})}),[]);return[s.useMemo(()=>e?e.map(a=>{if(typeof a=="string")return{data:{src:a}};const l={};return Object.keys(a).forEach(u=>{["src",...Ue].includes(u)&&(l[u]=a[u])}),{data:l}}):Object.keys(t).reduce((a,l)=>{const{canPreview:u,data:p}=t[l];return u&&a.push({data:p,id:l}),a},[]),[e,t]),r,!!e]}function Ve(){return Ve=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{open:p,onOpenChange:d,current:x,onChange:g,...b}=l&&typeof l=="object"?l:{},[w,y,S]=Ps(a),[C,I]=He(0,x),[m,f]=s.useState(!1),{src:j,...F}=w[C]?.data||{},[k,h]=He(!!p,p),R=ht(E=>{h(E),E!==k&&d?.(E,{current:C})}),[P,T]=s.useState(null),D=s.useCallback((E,$,Q,H)=>{const X=S?w.findIndex(N=>N.data.src===$):w.findIndex(N=>N.id===E);I(X<0?0:X),R(!0),T({x:Q,y:H}),f(!0)},[w,S]);s.useEffect(()=>{k?m||I(0):f(!1)},[k]);const G=(E,$)=>{I(E),g?.(E,$)},Y=()=>{R(!1),T(null)},_=s.useMemo(()=>({register:y,onPreview:D}),[y,D]);return s.createElement($e.Provider,{value:_},r,s.createElement(It,Ve({"aria-hidden":!k,open:k,prefixCls:e,onClose:Y,mousePosition:P,imgCommonProps:F,src:j,fallback:u,icons:c,current:C,count:w.length,onChange:G},b,{classNames:t?.popup,styles:o?.popup})))};let yt=0;function Os(e,t){const[o]=s.useState(()=>(yt+=1,String(yt))),r=s.useContext($e),c={data:t,canPreview:e};return s.useEffect(()=>{if(r)return r.register(o,c)},[]),s.useEffect(()=>{r&&r.register(o,c)},[e,t]),o}function ve(){return ve=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{prefixCls:t="rc-image",previewPrefixCls:o=`${t}-preview`,rootClassName:r,className:c,style:a,classNames:l={},styles:u={},width:p,height:d,src:x,alt:g,placeholder:b,fallback:w,preview:y=!0,onClick:S,onError:C,...I}=e,m=s.useContext($e),f=!!y,{src:j,open:F,onOpenChange:k,cover:h,rootClassName:R,...P}=y&&typeof y=="object"?y:{},T=typeof h=="object"&&h.placement&&h.placement||"center",D=typeof h=="object"&&h.coverNode?h.coverNode:h,[G,Y]=He(!!F,F),[_,E]=s.useState(null),$=L=>{Y(L),k?.(L)},Q=()=>{$(!1)},H=b&&b!==!0,X=j??x,[N,z,Z]=St({src:x,isCustomPlaceholder:H,fallback:w}),U=s.useMemo(()=>{const L={};return Ue.forEach(K=>{e[K]!==void 0&&(L[K]=e[K])}),L},Ue.map(L=>e[L])),J=s.useMemo(()=>({...U,src:X}),[X,U]),ne=Os(f,J),O=L=>{const K=L.target.getBoundingClientRect(),re=K.x+K.width/2,ie=K.y+K.height/2;m?m.onPreview(ne,X,re,ie):(E({x:re,y:ie}),$(!0)),S?.(L)};return s.createElement(s.Fragment,null,s.createElement("div",ve({},I,{className:A(t,r,l.root,{[`${t}-error`]:Z==="error"}),onClick:f?O:S,style:{width:p,height:d,...u.root}}),s.createElement("img",ve({},U,{className:A(`${t}-img`,{[`${t}-img-placeholder`]:b===!0},l.image,c),style:{height:d,...u.image,...a},ref:N},z,{width:p,height:d,onError:C})),Z==="loading"&&s.createElement("div",{"aria-hidden":"true",className:`${t}-placeholder`},b),h!==!1&&f&&s.createElement("div",{className:A(`${t}-cover`,l.cover,`${t}-cover-${T}`),style:{display:a?.display==="none"?"none":void 0,...u.cover}},D)),!m&&f&&s.createElement(It,ve({"aria-hidden":!G,open:G,prefixCls:o,onClose:Q,mousePosition:_,src:X,alt:g,imageInfo:{width:p,height:d},fallback:w,imgCommonProps:U},P,{classNames:l?.popup,styles:u?.popup,rootClassName:A(R,r)})))};Qe.PreviewGroup=Ds;const kt=(e,t,o,r,c,a,l)=>{const[u]=qt("ImagePreview",e?.zIndex),[p,d]=Qt(e?.mask,t?.mask,`${o}-preview`);return se.useMemo(()=>{if(!e)return e;const{cover:x,getContainer:g,closeIcon:b,rootClassName:w}=e,{closeIcon:y}=t??{};return{motionName:Jt(`${o}-preview`,"fade"),...e,...l?{cover:x??l}:{},icons:a,getContainer:g??c,zIndex:u,closeIcon:b??y,rootClassName:A(r,w),mask:p,blurClassName:d.mask}},[e,t,o,r,c,l,a,u,p,d])};function Ls(e){return s.isValidElement(e)?[e,void 0]:typeof e=="boolean"||e&&typeof e=="object"?[void 0,e]:[void 0,void 0]}function Re(e){const t=s.useMemo(()=>typeof e=="boolean"?e?{}:null:e&&typeof e=="object"?e:{},[e]);return s.useMemo(()=>{if(!t)return[t,"",""];const{open:r,onOpenChange:c,cover:a,actionsRender:l,visible:u,onVisibleChange:p,rootClassName:d,maskClassName:x,mask:g,forceRender:b,destroyOnClose:w,toolbarRender:y,...S}=t;let C;c?C=c:p&&(C=(f,j)=>{const{current:F}=j||{};F!==void 0?p(f,!f,F):p(f,!f)});const[I,m]=Ls(g);return[{...S,open:r??u,onOpenChange:C,cover:a??I,mask:m,actionsRender:l??y},d,x]},[t])}const jt=e=>({position:e||"absolute",inset:0}),As=e=>{const{componentCls:t,motionDurationSlow:o,colorTextLightSolid:r}=e;return{[t]:{[`${t}-cover`]:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",color:r,background:new we("#000").setA(.3).toRgbString(),cursor:"pointer",opacity:0,transition:`opacity ${o}`},"&:hover":{[`${t}-cover`]:{opacity:1}},[`${t}-cover-top`]:{inset:"0 0 auto 0",justifyContent:"center"},[`${t}-cover-bottom`]:{inset:"auto 0 0 0",justifyContent:"center"}}}},zs=e=>{const{motionEaseOut:t,previewCls:o,motionDurationSlow:r,componentCls:c,colorBgMask:a,marginXL:l,marginSM:u,margin:p,colorTextLightSolid:d,paddingSM:x,paddingLG:g,previewOperationHoverColor:b,previewOperationColorDisabled:w,previewOperationSize:y,zIndexPopup:S}=e,C=new we(a).setA(.1),I=C.clone().setA(.2),m={position:"absolute",color:d,backgroundColor:C.toRgbString(),borderRadius:"50%",padding:x,outline:0,border:0,cursor:"pointer",transition:`all ${r}`,display:"flex",fontSize:y,"&:hover":{backgroundColor:I.toRgbString()},"&:active":{backgroundColor:C.toRgbString()}};return{[`${c}-preview`]:{textAlign:"center",inset:0,position:"fixed",userSelect:"none",zIndex:S,[`${o}-mask`]:{inset:0,position:"absolute",background:a,backdropFilter:"blur(0px)",transition:`backdrop-filter ${r}`,[`&${c}-preview-mask-blur`]:{backdropFilter:"blur(4px)"},[`&${c}-preview-mask-hidden`]:{display:"none"}},[`${o}-body`]:{...jt(),"pointer-events":"none",display:"flex",alignItems:"center",justifyContent:"center","> *":{pointerEvents:"auto"}},[`${o}-img`]:{maxWidth:"100%",maxHeight:"70%",verticalAlign:"middle",transform:"scale3d(1, 1, 1)",transition:`transform ${r} ${t} 0s`},[`&-movable ${o}-img`]:{cursor:"grab"},[`&-moving ${o}-img`]:{cursor:"grabbing"},[`${o}-close`]:{...m,top:u,insetInlineEnd:u},[`${o}-switch`]:{...m,top:"50%",transform:"translateY(-50%)","&-disabled":{"&, &:hover, &:active":{color:w,background:"transparent",cursor:"not-allowed"}},"&-prev":{insetInlineStart:u},"&-next":{insetInlineEnd:u}},[`${o}-footer`]:{position:"absolute",bottom:l,left:{_skip_check_:!0,value:"50%"},display:"flex",flexDirection:"column",alignItems:"center",color:e.previewOperationColor,transform:"translateX(-50%)",gap:p},[`${o}-actions`]:{display:"flex",gap:x,padding:`0 ${ss(g)}`,backgroundColor:C.toRgbString(),borderRadius:100,fontSize:y,"&-action":{padding:x,cursor:"pointer",transition:`all ${r}`,display:"flex",[`&:not(${o}-actions-action-disabled):hover`]:{color:b},"&-disabled":{color:w,cursor:"not-allowed"}}}}}},Ys=e=>{const{componentCls:t}=e;return{[t]:{position:"relative",display:"inline-block",[`${t}-img`]:{width:"100%",height:"auto",verticalAlign:"middle"},[`${t}-img-placeholder`]:{backgroundColor:e.colorBgContainerDisabled,backgroundImage:"url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=')",backgroundRepeat:"no-repeat",backgroundPosition:"center center",backgroundSize:"30%"},[`${t}-placeholder`]:{...jt()}}}},_s=e=>{const{previewCls:t,motionDurationSlow:o}=e;return{[t]:{"&-fade":{transition:`opacity ${o}`,"&-enter, &-appear":{opacity:0,[`${t}-body`]:{transform:"scale(0)"},"&-active":{opacity:1,[`${t}-body`]:{transform:"scale(1)",transition:`transform ${o}`}}},"&-leave":{opacity:1,"&-active":{opacity:0,[`${t}-body`]:{transform:"scale(0)",transition:`transform ${o}`}}}}}}},Xs=e=>({zIndexPopup:e.zIndexPopupBase+80,previewOperationColor:new we(e.colorTextLightSolid).setA(.65).toRgbString(),previewOperationHoverColor:new we(e.colorTextLightSolid).setA(.85).toRgbString(),previewOperationColorDisabled:new we(e.colorTextLightSolid).setA(.25).toRgbString(),previewOperationSize:e.fontSizeIcon*1.5}),Tt=es("Image",e=>{const t=`${e.componentCls}-preview`,o=ts(e,{previewCls:t,imagePreviewSwitchSize:e.controlHeightLG});return[Ys(o),As(o),zs(o),_s(o)]},Xs),Ke={rotateLeft:s.createElement(as,null),rotateRight:s.createElement(rs,null),zoomIn:s.createElement(is,null),zoomOut:s.createElement(os,null),close:s.createElement(ns,null),left:s.createElement(We,null),right:s.createElement(Ze,null),flipX:s.createElement(et,null),flipY:s.createElement(et,{rotate:90})},Bs=({previewPrefixCls:e,preview:t,classNames:o,styles:r,...c})=>{const{getPrefixCls:a,getPopupContainer:l,direction:u,preview:p,classNames:d,styles:x}=xt("image"),g=a("image",e),b=`${g}-preview`,w=vt(g),[y,S]=Tt(g,w),C=A(y,S,w),[I,m,f]=Re(t),[j,F,k]=Re(p),h=s.useMemo(()=>({...Ke,left:u==="rtl"?s.createElement(Ze,null):s.createElement(We,null),right:u==="rtl"?s.createElement(We,null):s.createElement(Ze,null)}),[u]),R=kt(I,j,g,C,l,Ke),{mask:P,blurClassName:T}=R??{},D={...c,classNames:o,styles:r},[G,Y]=wt([d,o,{cover:A(k,f),popup:{root:A(F,m),mask:A({[`${g}-preview-mask-hidden`]:!P},T)}}],[x,r],{props:D},{popup:{_default:"root"}});return s.createElement(Qe.PreviewGroup,{preview:R,previewPrefixCls:b,icons:h,...c,classNames:G,styles:Y})},qe=e=>{const{prefixCls:t,preview:o,className:r,rootClassName:c,style:a,styles:l,classNames:u,wrapperStyle:p,fallback:d,...x}=e,{getPrefixCls:g,getPopupContainer:b,className:w,style:y,preview:S,styles:C,classNames:I,fallback:m}=xt("image"),f=g("image",t),j=vt(f),[F,k]=Tt(f,j),h=A(c,F,k,j),R=A(r,F,w),[P,T,D]=Re(o),[G,Y,_]=Re(S),E=kt(P,G,f,h,b,Ke,!0),$={...e,preview:E},Q=s.useMemo(()=>({cover:A(_,D),popup:{root:A(Y,T)}}),[T,D,Y,_]),{mask:H,blurClassName:X}=E??{},N=s.useMemo(()=>({mask:A({[`${f}-preview-mask-hidden`]:!H},X)}),[H,f,X]),z=s.useMemo(()=>[I,u,Q,{popup:N}],[I,u,Q,N]),[Z,U]=wt(z,[C,{root:p},l],{props:$},{popup:{_default:"root"}}),J={...y,...a},ne=d??m;return s.createElement(Qe,{prefixCls:f,preview:E||!1,rootClassName:h,className:R,style:J,fallback:ne,...x,classNames:Z,styles:U})};qe.PreviewGroup=Bs;function Gs(e){return W({url:"/system/file/group",method:"get",params:e})}function Hs(e){return W({url:"/system/file/group",method:"post",data:e})}function Zs(e){return W({url:`/system/file/group/${e.id}`,method:"put",data:e})}function Ws(e){return W({url:`/system/file/group/${e}`,method:"delete"})}function Us(e){return W({url:"/system/file/list",method:"get",params:e})}function Vs(e){return W({url:"/system/file/list/trashed",method:"get",params:e})}function Ks(e,t,o){const r=new FormData;return r.append("file",e),r.append("group_id",t.toString()),W({timeout:0,url:"/system/file/list/upload",method:"post",data:r,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:c=>{if(o&&c.total){const a=Math.round(c.loaded*100/c.total);o(a)}}})}function qs(e){return W({url:`/system/file/list/${e}`,method:"delete"})}function Qs(e){return W({url:"/system/file/list/batch/delete",method:"delete",data:{ids:e}})}function Js(e){return W({url:`/system/file/list/force-delete/${e}`,method:"delete"})}function en(e){return W({url:"/system/file/list/batch/force-delete",method:"delete",data:{ids:e}})}function tn(e){return W({url:`/system/file/list/restore/${e}`,method:"post"})}function sn(e){return W({url:"/system/file/list/batch/restore",method:"post",data:{ids:e}})}function nn(e,t){return W({url:"/system/file/list/copy",method:"post",data:{group_id:t,ids:e}})}function on(e,t){return W({url:"/system/file/list/move",method:"post",data:{group_id:t,ids:e}})}function rn(e,t){return W({url:`/system/file/list/rename/${e}`,method:"put",data:{name:t}})}function an(){return W({url:"/system/file/list/clean/trashed",method:"delete"})}const{Title:ln,Text:cn}=Ct,Fn=()=>{const{t:e}=ls(),[t,o]=s.useState([]),[r,c]=s.useState(new Map),[a,l]=s.useState(0),[u,p]=s.useState(null),d=s.useRef(null),[x,g]=s.useState(),[b,w]=s.useState(!0),[y,S]=s.useState([]),[C,I]=s.useState([]),[m,f]=s.useState(!1),[j,F]=s.useState(!1),[k,h]=s.useState(!1),[R,P]=s.useState(0),[T,D]=s.useState({current:1,pageSize:10,total:0}),[G,Y]=s.useState(!1),[_,E]=s.useState(),[$,Q]=s.useState(),[H,X]=s.useState(0),[N,z]=s.useState(!1),[Z,U]=s.useState(null),[J,ne]=s.useState(""),[O,L]=s.useState([]),[K,re]=s.useState([]),[ie,ae]=s.useState(!1),[le,pe]=s.useState(!1),[ge,Ce]=s.useState({current:1,pageSize:10,total:0}),[Pe,Fe]=s.useState(!1),[q,De]=s.useState(null),he=async()=>{try{w(!0);const{data:i}=await Gs(x?{keywordSearch:x}:void 0),v=i.data||[];o(v);const M=new Map,ue=Ht=>{Ht.forEach(je=>{M.set(je.id,je),je.children&&ue(je.children)})};ue(v),c(M)}finally{w(!1)}},oe=async(i=1,v=20)=>{try{f(!0),L([]);const{data:M}=await Us({group_id:Number(a)||0,page:i,pageSize:v});S(M.data?.data||[]),D({current:M.data?.current_page||i,pageSize:M.data?.per_page||v,total:M.data?.total||0})}finally{f(!1)}},ce=async(i=1,v=10)=>{try{ae(!0),L([]);const{data:M}=await Vs({page:i,pageSize:v});re(M.data?.data||[]),Ce({current:M.data?.current_page||i,pageSize:M.data?.per_page||v,total:M.data?.total||0})}finally{ae(!1)}};s.useEffect(()=>{he()},[x]),s.useEffect(()=>{oe()},[a]);const de=s.useMemo(()=>{const i=v=>v.map(M=>({key:M.id,title:M.name,icon:n.jsx(tt,{}),children:M.children?i(M.children):void 0}));return x?i(t):[{key:0,title:e("sysFile.root"),icon:n.jsx(tt,{}),children:i(t)}]},[t]),be=i=>{i.length>0&&l(i[0])},Oe=i=>{p(null),d.current?.resetFields(),d.current?.setFieldsValue({parent_id:i}),d.current?.open()},Se=i=>{p(i),d.current?.setFieldsValue(i),d.current?.open()},Le=async i=>{const v=!!u;return await(v?Zs({...i,id:u.id}):Hs(i)),B.success(v?e("sysFile.saveFolderSuccess",{action:e("sysFile.actionEdit")}):e("sysFile.saveFolderSuccess",{action:e("sysFile.actionAdd")})),d.current?.close(),await he(),!0},Ie=async i=>{window.$modal?.confirm({title:e("sysFile.confirmDeleteFolder"),content:e("sysFile.deleteFolderHint"),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{await Ws(i),B.success(e("sysFile.deleteFolderSuccess")),a===i&&l(0),await he()}})},Ae=async()=>{if(!C.length)return B.warning(e("sysFile.selectFileWarning"));try{h(!0);for(const i of C)await Ks(i.originFileObj,Number(a),P);B.success(e("sysFile.uploadSuccess")),F(!1),I([]),P(0),await oe()}finally{h(!1)}},ze=async i=>{window.$modal?.confirm({title:e("sysFile.confirmDelete"),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{await qs(i),B.success(e("sysFile.deleteSuccess")),await oe()}})},ke=async()=>{if(!O.length)return B.warning(e("sysFile.noSelected"));window.$modal?.confirm({title:e("sysFile.confirmBatchDelete",{count:O.length}),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{await Qs(O),B.success(e("sysFile.batchDeleteSuccess")),await oe()}})},V=async()=>{if(!$)return B.warning(e("sysFile.noSelected"));if(mt.isArray($)&&$.length<1)return B.warning(e("sysFile.noSelected"));_==="move"?(await on($,H),B.success(e("sysFile.moveSuccess"))):(await nn($,H),B.success(e("sysFile.moveSuccess"))),Y(!1),await oe()},ee=(i,v)=>{E(v),Q(i),Y(!0)},xe=i=>{const v=i.currentTarget.dataset.type;console.log(v,i.currentTarget.dataset);const M=O.map(ue=>Number(ue));ee(M,v)},Nt=i=>{U(i),ne(i.file_name||""),z(!0)},Et=async()=>{!Z?.id||!J.trim()||(await rn(Z.id,J.trim()),B.success(e("sysFile.renameSuccess")),z(!1),await oe())},Mt=async()=>{pe(!0),L([]),await ce()},Rt=async()=>{pe(!1),L([]),await oe()},$t=async i=>{window.$modal?.confirm({title:e("sysFile.confirmForceDelete"),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{await Js(i),B.success(e("sysFile.forceDeleteSuccess")),await ce()}})},Pt=async i=>{window.$modal?.confirm({title:e("sysFile.confirmRestore"),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{await tn(i),B.success(e("sysFile.restoreSuccess")),await ce()}})},Dt=async()=>{if(!O.length)return B.warning(e("sysFile.noSelected"));window.$modal?.confirm({title:e("sysFile.confirmBatchForceDelete",{count:O.length}),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{await en(O),B.success(e("sysFile.batchForceDeleteSuccess")),await ce()}})},Ot=async()=>{if(!O.length)return B.warning(e("sysFile.noSelected"));window.$modal?.confirm({title:e("sysFile.confirmBatchRestore",{count:O.length}),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{await sn(O),B.success(e("sysFile.batchRestoreSuccess")),await ce()}})},Lt=async()=>{window.$modal?.confirm({title:e("sysFile.confirmEmptyTrash"),okText:e("sysFile.ok"),cancelText:e("sysFile.cancel"),onOk:async()=>{const{data:i}=await an();B.success(e("sysFile.emptyTrashSuccess",{count:i.data?.count||0})),await ce()}})},At=i=>{De(i),Fe(!0)},Ye=(i=0)=>{const v=["B","KB","MB","GB"];let M=0,ue=i;for(;ue>=1024&&M<3;)ue/=1024,M++;return`${ue.toFixed(2)} ${v[M]}`},zt=[{value:10,color:"purple",label:e("sysFile.type.image")},{value:20,color:"blue",label:e("sysFile.type.audio")},{value:30,color:"magenta",label:e("sysFile.type.video")},{value:40,color:"orange",label:e("sysFile.type.archive")},{value:50,color:"success",label:e("sysFile.type.document")},{value:99,color:"error",label:e("sysFile.type.other")}],_e=i=>{const v=zt.find(M=>M.value===i);return n.jsx(Ge,{color:v?.color,children:v?.label})},Yt=async i=>{const v=document.createElement("a");v.href=`/index.php/system/file/list/download/${i}`,document.body.appendChild(v),v.click(),document.body.removeChild(v)},_t=[{title:e("sysFile.folderName"),dataIndex:"name",valueType:"text",rules:[{required:!0,message:e("sysFile.folderNameRequired")}]},{title:e("sysFile.parentFolder"),dataIndex:"parent_id",valueType:"treeSelect",fieldProps:{treeData:de,fieldNames:{label:"title",value:"key"},disabled:!0}},{title:e("sysFile.sort"),dataIndex:"sort",valueType:"digit",rules:[{required:!0,message:e("sysFile.sortRequired")}],initialValue:0},{title:e("sysFile.describe"),dataIndex:"describe",valueType:"textarea"}],Xt=[{title:e("sysFile.fileName"),dataIndex:"file_name",ellipsis:!0,width:320,render:(i,v)=>n.jsx("a",{onClick:()=>At(v),children:i})},{title:e("sysFile.fileSize"),dataIndex:"file_size",width:80,align:"center",render:Ye,sorter:!0},{title:e("sysFile.fileType"),dataIndex:"file_type",width:80,align:"center",render:_e},{title:e("sysFile.disk"),dataIndex:"disk",width:80,align:"center",render:i=>n.jsx(Ge,{children:i})},{title:e("sysFile.createdAt"),dataIndex:"created_at",width:180,align:"center",render:i=>i?st(i).format("YYYY-MM-DD HH:mm:ss"):"-"},{title:e("sysFile.preview"),dataIndex:"preview_url",width:80,align:"center",render:i=>n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center"},children:n.jsx(qe,{preview:!1,src:i,width:36,height:36})})},{title:e("sysFile.action"),width:80,key:"action",align:"center",fixed:"right",render:(i,v)=>n.jsx(nt,{trigger:["click"],menu:{items:[{key:"download",icon:n.jsx(ds,{}),label:e("sysFile.download"),onClick:()=>Yt(v.id)},{key:"rename",icon:n.jsx(ot,{}),label:e("sysFile.rename"),onClick:()=>Nt(v)},{key:"move",icon:n.jsx(it,{}),label:e("sysFile.move"),onClick:()=>ee(v.id,"move")},{key:"copy",icon:n.jsx(rt,{}),label:e("sysFile.copy"),onClick:()=>ee(v.id,"copy")},{type:"divider"},{key:"delete",label:n.jsx("span",{style:{color:"#ff4d4f"},children:e("sysFile.delete")}),icon:n.jsx(me,{style:{color:"#ff4d4f"}}),onClick:()=>ze(v.id)}]},children:n.jsx(te,{icon:n.jsx(cs,{}),size:"small"})})}],Bt=[{title:e("sysFile.fileName"),dataIndex:"file_name",ellipsis:!0,width:180},{title:e("sysFile.fileSize"),dataIndex:"file_size",width:80,align:"center",render:Ye,sorter:!0},{title:e("sysFile.fileType"),dataIndex:"file_type",width:80,align:"center",render:_e},{title:e("sysFile.disk"),dataIndex:"disk",width:80,align:"center",render:i=>n.jsx(Ge,{children:i})},{title:e("sysFile.deletedAt"),dataIndex:"deleted_at",width:120,align:"center",render:i=>i?st(i).format("YYYY-MM-DD HH:mm:ss"):"-"},{title:e("sysFile.action"),width:80,key:"action",align:"center",fixed:"right",render:(i,v)=>n.jsxs(fe,{children:[n.jsx(Te,{title:e("sysFile.restore"),children:n.jsx(te,{size:"small",icon:n.jsx(at,{}),onClick:()=>Pt(v.id)})}),n.jsx(Te,{title:e("sysFile.forceDelete"),children:n.jsx(te,{danger:!0,size:"small",type:"primary",icon:n.jsx(me,{}),onClick:()=>$t(v.id)})})]})}],Gt=i=>n.jsx(nt,{trigger:["click"],menu:{items:[{key:"add",label:n.jsxs(fe,{children:[n.jsx(ys,{}),e("sysFile.addFolder")]}),onClick:()=>Oe(Number(i.key))},{key:"edit",label:n.jsxs(fe,{children:[n.jsx(ot,{}),e("sysFile.editFolder")]}),disabled:Number(i.key)===0,onClick:()=>r.has(i.key)&&Se(r.get(i.key))},{type:"divider"},{key:"del",danger:!0,icon:n.jsx(me,{}),disabled:Number(i.key)===0,onClick:()=>Ie(Number(i.key)),label:e("sysFile.deleteFolder")}]},children:n.jsxs(fe,{children:[n.jsx(dt,{name:"icon-wenjianjia"}),mt.isFunction(i.title)?i.title(i):i.title]})});return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"mb-5",children:[n.jsx(ln,{level:3,children:e("sysFile.page.title")}),n.jsx(cn,{type:"secondary",children:e("sysFile.page.description")})]}),n.jsxs(us,{gutter:[16,16],children:[n.jsx(lt,{xs:24,lg:4,children:n.jsxs(ft,{title:n.jsxs(fe,{children:[n.jsx(dt,{style:{fontSize:18},name:"icon-wenjianjia"}),e("sysFile.fileFolder")]}),variant:"borderless",styles:{header:{paddingInline:16,paddingBlock:0,minHeight:48},body:{padding:16,minHeight:52}},children:[n.jsx(ct.Search,{placeholder:e("sysFile.folderSearchPlaceholder"),style:{marginBottom:16},onSearch:i=>g(i)}),n.jsx(ws,{spinning:b,description:e("sysFile.loading"),size:"small",children:n.jsx("div",{style:{minHeight:200},children:t.length>0&&n.jsx(vs,{showLine:!0,defaultExpandAll:!0,onSelect:be,treeData:de,defaultExpandedKeys:[0],selectedKeys:[a],titleRender:Gt})})})]})}),n.jsx(lt,{xs:24,lg:20,children:n.jsxs(ft,{variant:"borderless",styles:{body:{paddingBlock:16}},children:[n.jsxs(fe,{wrap:!0,style:{marginBottom:16},children:[n.jsx(te,{type:"primary",icon:n.jsx(ms,{}),children:e("sysFile.upload"),onClick:()=>F(!0)}),O.length>0&&!le&&n.jsxs(n.Fragment,{children:[n.jsx(te,{danger:!0,icon:n.jsx(me,{}),onClick:ke,children:e("sysFile.batchDelete")}),n.jsx(te,{icon:n.jsx(it,{}),"data-type":"move",onClick:xe,children:e("sysFile.batchMove")}),n.jsx(te,{icon:n.jsx(rt,{}),"data-type":"copy",onClick:xe,children:e("sysFile.batchCopy")})]}),n.jsx(Te,{title:e("sysFile.trash"),children:n.jsx(te,{icon:n.jsx(me,{}),onClick:()=>Mt(),children:e("sysFile.trash")})}),n.jsx(Te,{title:e("sysFile.refresh"),children:n.jsx(te,{icon:n.jsx(fs,{}),onClick:()=>oe()})})]}),n.jsx(pt,{columns:Xt,dataSource:y,rowKey:"id",size:"small",loading:m,pagination:{...T,onChange:oe,showSizeChanger:!0,showTotal:i=>e("sysFile.totalFiles",{total:i})},rowSelection:{selectedRowKeys:O,onChange:L},scroll:{x:1e3}})]})}),n.jsx(hs,{formRef:d,layoutType:"ModalForm",columns:_t,onFinish:Le,modalProps:{title:e(u?"sysFile.editFolderTitle":"sysFile.addFolderTitle"),onCancel:()=>d.current?.close()},trigger:n.jsx("span",{style:{display:"none"}})}),n.jsxs(ut,{title:e("sysFile.trash"),open:le,width:860,onClose:Rt,children:[n.jsxs(fe,{style:{marginBottom:20},children:[n.jsx(te,{disabled:O.length===0,type:"primary",icon:n.jsx(at,{}),onClick:Ot,children:e("sysFile.batchRestore")}),n.jsx(te,{disabled:O.length===0,icon:n.jsx(me,{}),onClick:Dt,children:e("sysFile.batchForceDelete")}),n.jsx(te,{danger:!0,type:"primary",icon:n.jsx(me,{}),onClick:Lt,children:e("sysFile.emptyTrash")})]}),n.jsx(pt,{columns:Bt,dataSource:K,rowKey:"id",size:"small",loading:ie,pagination:{...ge,onChange:ce,showSizeChanger:!0,showTotal:i=>e("sysFile.totalFiles",{total:i})},rowSelection:{selectedRowKeys:O,onChange:L},scroll:{x:800}})]}),n.jsx(Xe,{title:e("sysFile.uploadTitle"),open:j,onOk:Ae,onCancel:()=>{F(!1),I([]),P(0)},confirmLoading:k,children:n.jsxs(Be,{layout:"vertical",children:[n.jsx(Be.Item,{label:e("sysFile.selectFile"),required:!0,children:n.jsxs(Cs.Dragger,{fileList:C,onChange:({fileList:i})=>I(i),beforeUpload:()=>!1,multiple:!0,style:{borderRadius:8},children:[n.jsx("p",{className:"ant-upload-drag-icon",children:n.jsx(ps,{style:{fontSize:48,color:"#1890ff"}})}),n.jsx("p",{className:"ant-upload-text",children:e("sysFile.uploadDragText")}),n.jsx("p",{className:"ant-upload-hint",children:e("sysFile.uploadHint")})]})}),k&&n.jsx(Be.Item,{label:e("sysFile.uploadProgress"),children:n.jsx(Fs,{percent:R,status:"active"})})]})}),n.jsxs(Xe,{title:e("sysFile.renameTitle"),open:N,onOk:Et,styles:{body:{paddingBottom:16}},onCancel:()=>z(!1),children:[n.jsx("div",{style:{marginTop:16,marginBottom:16},children:e("sysFile.renameDescription")}),n.jsx(ct,{value:J,onChange:i=>ne(i.target.value),placeholder:e("sysFile.newFileNameRequired")})]}),n.jsxs(Xe,{title:e(_==="copy"?"sysFile.copyTitle":"sysFile.moveTitle"),open:G,onOk:V,styles:{body:{paddingBottom:16}},onCancel:()=>Y(!1),children:[n.jsx("div",{style:{marginTop:16,marginBottom:16},children:e(_==="copy"?"sysFile.copyDescription":"sysFile.moveDescription")}),n.jsx(xs,{value:H,onChange:X,treeData:de,fieldNames:{label:"title",value:"key"},style:{width:"100%"}})]}),n.jsx(ut,{title:e("sysFile.fileDetail"),placement:"right",width:480,open:Pe,onClose:()=>Fe(!1),children:q&&n.jsxs(n.Fragment,{children:[n.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center"},children:n.jsx(qe,{src:q.preview_url,alt:q.file_name,preview:!1})}),n.jsx(gs,{}),n.jsx(bs,{title:e("sysFile.basicInfo"),column:1,items:[{key:"name",label:e("sysFile.fileName"),children:q.file_name},{key:"size",label:e("sysFile.fileSize"),children:Ye(q.file_size)},{key:"type",label:e("sysFile.fileType"),children:_e(q.file_type||10)},{key:"ext",label:e("sysFile.fileExt"),children:q.file_ext},{key:"disk",label:e("sysFile.storageMethod"),children:q.disk},{key:"path",label:e("sysFile.filePath"),children:q.file_path},{key:"group",label:e("sysFile.fileGroup"),children:r.get(q.group_id||0)?.name||e("sysFile.ungrouped")},{key:"created_at",label:e("sysFile.createdAt"),children:q.created_at},{key:"updated_at",label:e("sysFile.updatedAt"),children:q.updated_at},{key:"url",label:e("sysFile.accessUrl"),children:n.jsx(Ct.Link,{copyable:!0,children:q.file_url})}]})]})})]})]})};export{Fn as default}; diff --git a/public/assets/first-CE-aqGGa.js b/public/assets/first-CE-aqGGa.js new file mode 100644 index 0000000..cf08a3a --- /dev/null +++ b/public/assets/first-CE-aqGGa.js @@ -0,0 +1 @@ +import{j as s,y as i,a,C as e,S as l,B as r}from"./index-B-sDl1ER.js";import{C as t}from"./index-CO5DzGxy.js";const x=()=>s.jsxs("div",{children:[s.jsxs(t,{style:{marginBottom:16},children:[s.jsx(i,{items:[{title:"多级菜单"},{title:"二级页面"}]}),s.jsx("h2",{style:{marginTop:16,marginBottom:0},children:"二级页面"})]}),s.jsxs(a,{gutter:[16,16],children:[s.jsx(e,{span:24,children:s.jsx(t,{style:{height:200}})}),s.jsx(e,{span:16,children:s.jsx(t,{style:{height:200}})}),s.jsx(e,{span:8,children:s.jsx(t,{style:{height:200}})})]}),s.jsx(t,{style:{marginTop:16},children:s.jsxs(l,{children:[s.jsx(r,{children:"重置"}),s.jsx(r,{type:"primary",children:"提交"})]})})]});export{x as default}; diff --git a/public/assets/fix-header-Chn14uO2.js b/public/assets/fix-header-Chn14uO2.js new file mode 100644 index 0000000..7822807 --- /dev/null +++ b/public/assets/fix-header-Chn14uO2.js @@ -0,0 +1 @@ +import{R as T,j as e,T as B,$ as R,S as i,B as l,Y as C,x as A,_ as n,a0 as g,a as u,C as x,a1 as j,D as h,A as b,F as p,a2 as v,I as k,i as w}from"./index-B-sDl1ER.js";import{C as c}from"./index-CO5DzGxy.js";import{F as a}from"./index-Bc7ikhKh.js";import{T as d}from"./index-C9m5qSM4.js";import{D as t}from"./index-VkcAtM9X.js";import{B as L}from"./index-CFsVFAkS.js";import{S as $,T as q}from"./Timeline-BM8lZv8J.js";const{Title:y,Text:s,Paragraph:D}=B,{TextArea:F}=k,Q=()=>{const[o,I]=T.useState("1"),z=[{time:"2026-01-01 14:30:00",approver:"王总",role:"总经理",status:"approved",statusText:"已通过",comment:"同意该采购申请,请采购部门尽快落实。",avatar:"W"},{time:"2026-01-01 11:20:00",approver:"李经理",role:"财务经理",status:"approved",statusText:"已通过",comment:"预算充足,财务审批通过。",avatar:"L"},{time:"2026-01-01 10:15:00",approver:"赵主管",role:"部门主管",status:"approved",statusText:"已通过",comment:"该采购申请合理,同意提交上级审批。",avatar:"Z"},{time:"2025-12-31 16:45:00",approver:"张三",role:"申请人",status:"submitted",statusText:"已提交",comment:"因公司业务需要,申请采购以下办公设备。",avatar:"Z"}],f=[{name:'MacBook Pro 16"',quantity:5,price:25999,total:129995},{name:'Dell 显示器 27"',quantity:10,price:2999,total:29990},{name:"人体工学椅",quantity:10,price:1899,total:18990},{name:"会议摄像头",quantity:2,price:3999,total:7998}],S=f.reduce((r,m)=>r+m.total,0);return e.jsxs("div",{children:[e.jsx(c,{style:{marginBottom:16,backgroundColor:"#fff"},children:e.jsxs(a,{justify:"space-between",align:"center",style:{marginBottom:12},children:[e.jsxs("div",{children:[e.jsxs(y,{level:3,style:{margin:0},children:[e.jsx(R,{style:{marginRight:8}}),"采购审批申请"]}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"申请单号: PR2025123100001 · 创建时间: 2025-12-31 16:45:32"})]}),e.jsxs(i,{children:[e.jsx(l,{icon:e.jsx(C,{}),children:"打印"}),e.jsx(l,{icon:e.jsx(A,{}),children:"导出"}),e.jsx(l,{type:"primary",icon:e.jsx(n,{}),children:"审批通过"}),e.jsx(l,{danger:!0,icon:e.jsx(g,{}),children:"驳回"})]})]})}),e.jsxs(c,{style:{marginBottom:16,backgroundColor:"#fff"},tabList:[{label:e.jsxs("span",{children:[e.jsx(j,{})," 审批详情"]}),key:"1"},{label:e.jsxs("span",{children:[e.jsx(w,{})," 审批进度"]}),key:"2"},{label:e.jsxs("span",{children:[e.jsx(v,{})," 审批意见"]}),key:"3"}],activeTabKey:o,onTabChange:I,children:[o==="1"&&e.jsxs(u,{gutter:[20,20],children:[e.jsxs(x,{xs:24,lg:16,children:[e.jsxs("div",{style:{marginBottom:16},children:[e.jsxs(a,{justify:"space-between",align:"center",style:{marginBottom:16},children:[e.jsx(y,{level:5,style:{margin:0},children:"申请信息"}),e.jsx(d,{color:"success",icon:e.jsx(n,{}),children:"审批通过"})]}),e.jsxs(t,{column:{xs:1,sm:2},bordered:!0,children:[e.jsx(t.Item,{label:"申请单号",children:"PR2025123100001"}),e.jsx(t.Item,{label:"申请状态",children:e.jsx(L,{status:"success",text:"已通过"})}),e.jsx(t.Item,{label:"申请人",children:"张三"}),e.jsx(t.Item,{label:"申请部门",children:"技术研发部"}),e.jsx(t.Item,{label:"联系电话",children:"138****8888"}),e.jsx(t.Item,{label:"邮箱",children:"zhangsan@example.com"}),e.jsx(t.Item,{label:"申请时间",children:"2025-12-31 16:45:32"}),e.jsx(t.Item,{label:"完成时间",children:"2026-01-01 14:30:00"}),e.jsx(t.Item,{label:"申请类型",children:e.jsx(d,{color:"blue",children:"办公设备采购"})}),e.jsx(t.Item,{label:"紧急程度",children:e.jsx(d,{color:"orange",children:"普通"})}),e.jsx(t.Item,{label:"预算编号",children:"BUD-2026-Q1-001"}),e.jsx(t.Item,{label:"成本中心",children:"CC-RD-001"}),e.jsx(t.Item,{label:"申请事由",span:2,children:"因公司业务扩展,技术研发部新增10名员工,需采购相应办公设备以满足日常工作需求。"})]})]}),e.jsxs("div",{style:{marginBottom:16},children:[e.jsx(y,{level:5,style:{marginBottom:16},children:"采购明细"}),e.jsx("div",{style:{overflowX:"auto"},children:e.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{style:{backgroundColor:"#fafafa"},children:[e.jsx("th",{style:{padding:"12px",textAlign:"left",border:"1px solid #f0f0f0"},children:"物品名称"}),e.jsx("th",{style:{padding:"12px",textAlign:"center",border:"1px solid #f0f0f0"},children:"数量"}),e.jsx("th",{style:{padding:"12px",textAlign:"right",border:"1px solid #f0f0f0"},children:"单价(¥)"}),e.jsx("th",{style:{padding:"12px",textAlign:"right",border:"1px solid #f0f0f0"},children:"小计(¥)"})]})}),e.jsx("tbody",{children:f.map((r,m)=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"12px",border:"1px solid #f0f0f0"},children:r.name}),e.jsx("td",{style:{padding:"12px",textAlign:"center",border:"1px solid #f0f0f0"},children:r.quantity}),e.jsx("td",{style:{padding:"12px",textAlign:"right",border:"1px solid #f0f0f0"},children:r.price.toLocaleString()}),e.jsx("td",{style:{padding:"12px",textAlign:"right",border:"1px solid #f0f0f0"},children:r.total.toLocaleString()})]},m))}),e.jsx("tfoot",{children:e.jsxs("tr",{style:{backgroundColor:"#fafafa",fontWeight:600},children:[e.jsx("td",{colSpan:3,style:{padding:"12px",textAlign:"right",border:"1px solid #f0f0f0"},children:"合计金额:"}),e.jsxs("td",{style:{padding:"12px",textAlign:"right",border:"1px solid #f0f0f0",color:"#f5222d",fontSize:16},children:["¥",S.toLocaleString()]})]})})]})})]}),e.jsxs("div",{children:[e.jsx(y,{level:5,style:{marginBottom:16},children:"附件材料"}),e.jsxs(i,{direction:"vertical",style:{width:"100%"},children:[e.jsxs(a,{justify:"space-between",align:"center",children:[e.jsxs(i,{children:[e.jsx(j,{style:{fontSize:16,color:"#1677ff"}}),e.jsx(s,{children:"采购申请表.pdf"}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"(2.3 MB)"})]}),e.jsx(l,{type:"link",size:"small",children:"下载"})]}),e.jsx(h,{style:{margin:"8px 0"}}),e.jsxs(a,{justify:"space-between",align:"center",children:[e.jsxs(i,{children:[e.jsx(j,{style:{fontSize:16,color:"#1677ff"}}),e.jsx(s,{children:"设备报价单.xlsx"}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"(1.8 MB)"})]}),e.jsx(l,{type:"link",size:"small",children:"下载"})]}),e.jsx(h,{style:{margin:"8px 0"}}),e.jsxs(a,{justify:"space-between",align:"center",children:[e.jsxs(i,{children:[e.jsx(j,{style:{fontSize:16,color:"#1677ff"}}),e.jsx(s,{children:"预算说明文档.docx"}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"(856 KB)"})]}),e.jsx(l,{type:"link",size:"small",children:"下载"})]})]})]})]}),e.jsxs(x,{xs:24,lg:8,children:[e.jsxs(c,{title:"申请人信息",style:{marginBottom:16},children:[e.jsxs(a,{align:"center",style:{marginBottom:16},children:[e.jsx(b,{size:48,style:{backgroundColor:"#1677ff"},children:"张三"}),e.jsxs("div",{style:{marginLeft:12},children:[e.jsx(s,{strong:!0,children:"张三"}),e.jsx("br",{}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"技术研发部 · 高级工程师"})]})]}),e.jsx(h,{style:{margin:"12px 0"}}),e.jsxs(t,{column:1,size:"small",children:[e.jsx(t.Item,{label:"员工编号",children:"EMP202301001"}),e.jsx(t.Item,{label:"联系电话",children:"138****8888"}),e.jsx(t.Item,{label:"电子邮箱",children:"zhangsan@example.com"}),e.jsx(t.Item,{label:"所属部门",children:"技术研发部"}),e.jsx(t.Item,{label:"直属领导",children:"赵主管"})]})]}),e.jsx(c,{title:"审批流程",children:e.jsx($,{direction:"vertical",current:3,items:[{title:"申请人提交",description:e.jsxs("div",{children:[e.jsx(s,{children:"张三 · 技术研发部"}),e.jsx("br",{}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"2025-12-31 16:45"})]}),status:"finish",icon:e.jsx(n,{})},{title:"部门审批",description:e.jsxs("div",{children:[e.jsx(s,{children:"赵主管 · 部门主管"}),e.jsx("br",{}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"2026-01-01 10:15"}),e.jsx("br",{}),e.jsx(d,{color:"success",style:{marginTop:4},children:"已通过"})]}),status:"finish",icon:e.jsx(n,{})},{title:"财务审批",description:e.jsxs("div",{children:[e.jsx(s,{children:"李经理 · 财务经理"}),e.jsx("br",{}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"2026-01-01 11:20"}),e.jsx("br",{}),e.jsx(d,{color:"success",style:{marginTop:4},children:"已通过"})]}),status:"finish",icon:e.jsx(n,{})},{title:"总经理审批",description:e.jsxs("div",{children:[e.jsx(s,{children:"王总 · 总经理"}),e.jsx("br",{}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"2026-01-01 14:30"}),e.jsx("br",{}),e.jsx(d,{color:"success",style:{marginTop:4},children:"已通过"})]}),status:"finish",icon:e.jsx(n,{})}]})})]})]}),o==="2"&&e.jsx(q,{style:{maxWidth:600,paddingTop:20},mode:"left",items:z.map(r=>({color:r.status==="approved"?"green":"blue",label:e.jsx(s,{type:"secondary",children:r.time}),children:e.jsxs(c,{size:"small",style:{marginBottom:8},children:[e.jsxs(a,{align:"center",style:{marginBottom:8},children:[e.jsx(b,{style:{backgroundColor:r.status==="approved"?"#52c41a":"#1677ff"},children:r.avatar}),e.jsxs("div",{style:{marginLeft:12},children:[e.jsx(s,{strong:!0,children:r.approver}),e.jsxs(s,{type:"secondary",style:{marginLeft:8,fontSize:12},children:["(",r.role,")"]}),e.jsx("br",{}),e.jsx(d,{color:r.status==="approved"?"success":"processing",style:{marginTop:4},children:r.statusText})]})]}),e.jsx(D,{type:"secondary",style:{marginBottom:0,paddingLeft:60,fontSize:13},children:r.comment})]})}))}),o==="3"&&e.jsxs(u,{gutter:[16,16],children:[e.jsx(x,{xs:24,lg:16,children:e.jsx(c,{title:"填写审批意见",children:e.jsxs(p,{layout:"vertical",children:[e.jsx(p.Item,{label:"审批结果",required:!0,children:e.jsxs(i,{children:[e.jsx(l,{type:"primary",icon:e.jsx(n,{}),size:"large",children:"通过"}),e.jsx(l,{danger:!0,icon:e.jsx(g,{}),size:"large",children:"驳回"}),e.jsx(l,{icon:e.jsx(v,{}),size:"large",children:"转审"})]})}),e.jsx(p.Item,{label:"审批意见",required:!0,children:e.jsx(F,{rows:6,placeholder:"请输入您的审批意见...",maxLength:500,showCount:!0})}),e.jsx(p.Item,{children:e.jsxs(i,{children:[e.jsx(l,{type:"primary",size:"large",children:"提交审批意见"}),e.jsx(l,{size:"large",children:"保存草稿"})]})})]})})}),e.jsx(x,{xs:24,lg:8,children:e.jsxs(c,{title:"审批提示",children:[e.jsxs(i,{direction:"vertical",style:{width:"100%"},children:[e.jsx(s,{type:"secondary",children:"• 请仔细核对申请信息和采购明细"}),e.jsx(s,{type:"secondary",children:"• 审批意见将发送给申请人和相关人员"}),e.jsx(s,{type:"secondary",children:"• 审批通过后将自动流转至下一审批节点"}),e.jsx(s,{type:"secondary",children:"• 驳回后申请人可修改后重新提交"}),e.jsx(s,{type:"secondary",children:"• 转审可将审批任务转交给其他人员"})]}),e.jsx(h,{}),e.jsx(s,{strong:!0,children:"审批时限"}),e.jsx("br",{}),e.jsx(s,{type:"secondary",style:{fontSize:12},children:"请在 2026-01-03 前完成审批"})]})})]})]})]})};export{Q as default}; diff --git a/public/assets/icon-selector-Bry1jSXk.js b/public/assets/icon-selector-Bry1jSXk.js new file mode 100644 index 0000000..02e0e51 --- /dev/null +++ b/public/assets/icon-selector-Bry1jSXk.js @@ -0,0 +1 @@ +import{r as l,j as e,T as d,S as p,w as t,D as o}from"./index-B-sDl1ER.js";import{I as r,X as u}from"./index-duCmqVUU.js";import{C as a}from"./index-CO5DzGxy.js";import"./index-BZjcF0yn.js";import"./tslib.es6-BaFViOhq.js";import"./index-D3yl9SWR.js";import"./progress-C__thZ4V.js";import"./index-C9m5qSM4.js";import"./Table-B11dzOaz.js";import"./index-CeRfFUxJ.js";import"./index-DmtjhyJb.js";const{Title:h,Paragraph:j,Text:i}=d,X=()=>{const[n,c]=l.useState(""),m=l.useRef(void 0),x=[{dataIndex:"systemName",title:"系统名称",valueType:"text",rules:[{required:!0,message:"请输入系统名称"}],fieldProps:{placeholder:"请输入系统名称"}},{dataIndex:"systemIcon",title:"系统图标",rules:[{required:!0,message:"请选择系统图标"}],fieldRender:()=>e.jsx(r,{placeholder:"请选择系统图标"})},{dataIndex:"description",title:"系统描述",valueType:"textarea",fieldProps:{placeholder:"请输入系统描述",rows:4}}];return e.jsxs("div",{children:[e.jsxs(d,{style:{margin:"12px 0 24px 0"},children:[e.jsx(h,{level:2,children:"图标选择器组件示例"}),e.jsx(j,{children:"基于 Ant Design Select + Modal + Tabs 封装的图标选择器组件,支持多分类图标选择。"})]}),e.jsxs(p,{direction:"vertical",size:"large",style:{width:"100%"},children:[e.jsxs(a,{title:"独立使用",bordered:!0,children:[e.jsx(i,{children:"基础用法:"}),e.jsx("div",{className:"mt-2",children:e.jsx(r,{value:n,onChange:s=>{c(s||""),s?t.success(`选中图标: ${s}`):t.info("已清空图标")},placeholder:"请选择图标"})}),e.jsx(o,{}),e.jsx(i,{children:"禁用状态:"}),e.jsx("div",{className:"mt-2",children:e.jsx(r,{value:"HomeOutlined",disabled:!0,placeholder:"禁用状态"})}),e.jsx(o,{}),e.jsx(i,{children:"只读状态:"}),e.jsx("div",{className:"mt-2",children:e.jsx(r,{value:"SettingOutlined",readonly:!0,placeholder:"只读状态"})}),e.jsx(i,{type:"secondary",className:"mt-2 block text-sm",children:"只读模式下不能打开选择弹窗,但可以清空"})]}),e.jsx(a,{title:"在 XinForm 中使用",bordered:!0,children:e.jsx(u,{formRef:m,columns:x,onFinish:async s=>(console.log("XinForm 提交:",s),t.success("提交成功!"),t.info(`系统图标: ${s.systemIcon}`),!0),submitter:{submitText:"提交表单",render:s=>s.submit}})})]})]})};export{X as default}; diff --git a/public/assets/image-uploader-BPDdWUpW.js b/public/assets/image-uploader-BPDdWUpW.js new file mode 100644 index 0000000..e534cfa --- /dev/null +++ b/public/assets/image-uploader-BPDdWUpW.js @@ -0,0 +1 @@ +import{F as l,r as c,j as e,T as d,S as g,B as m}from"./index-B-sDl1ER.js";import{I as a}from"./index-BZjcF0yn.js";import{C as p}from"./index-CO5DzGxy.js";import"./tslib.es6-BaFViOhq.js";import"./index-D3yl9SWR.js";import"./progress-C__thZ4V.js";const{Title:h,Paragraph:j}=d,C=()=>{const[t]=l.useForm(),[i,o]=c.useState(null),[r,n]=c.useState([]),x=async()=>{try{const s=await t.validateFields();console.log("Form values:",s),console.log("Single image:",i),console.log("Multiple images:",r)}catch(s){console.error("Validation failed:",s)}},u=()=>{t.resetFields(),o(null),n([])};return e.jsxs("div",{children:[e.jsxs(d,{style:{margin:"12px 0 24px 0"},children:[e.jsx(h,{level:2,children:"图片上传组件示例"}),e.jsx(j,{children:"基于 Ant Design Upload 封装的图片上传组件,支持图片剪裁、多张图片上传、尺寸限制、禁用状态等。"})]}),e.jsx(p,{title:"基础用法",style:{marginBottom:24},children:e.jsxs(l,{form:t,layout:"vertical",children:[e.jsx(l.Item,{label:"单张图片上传",name:"avatar",extra:"支持单张图片上传,最大 5MB,尺寸不超过 1920x1080",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"single",value:i,onChange:s=>o(s)})}),e.jsx(l.Item,{label:"多张图片上传",name:"gallery",extra:"支持最多 5 张图片上传",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"multiple",maxCount:5,value:r,onChange:s=>n(s)})}),e.jsx(l.Item,{children:e.jsxs(g,{children:[e.jsx(m,{type:"primary",onClick:x,children:"提交"}),e.jsx(m,{onClick:u,children:"重置"})]})})]})}),e.jsx(p,{title:"高级配置",style:{marginBottom:24},children:e.jsxs(l,{layout:"vertical",children:[e.jsx(l.Item,{label:"自定义尺寸限制",extra:"限制图片尺寸为 800x600,大小不超过 2MB",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"single",maxWidth:800,maxHeight:600,maxSize:2})}),e.jsx(l.Item,{label:"裁剪功能 - 自由裁剪",extra:"启用裁剪功能,可自由调整裁剪区域",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"single",croppable:!0})}),e.jsx(l.Item,{label:"裁剪功能 - 1:1 正方形",extra:"固定 1:1 比例裁剪,适合头像上传",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"single",croppable:!0,cropperOptions:{aspect:1}})}),e.jsx(l.Item,{label:"裁剪功能 - 圆形裁剪",extra:"圆形裁剪模式,适合头像上传",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"single",croppable:!0,cropperOptions:{cropShape:"round",aspect:1}})}),e.jsx(l.Item,{label:"裁剪功能 - 16:9 宽屏",extra:"固定 16:9 比例裁剪,适合横幅图片",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"single",croppable:!0,cropperOptions:{aspect:16/9}})}),e.jsx(l.Item,{label:"禁用状态",children:e.jsx(a,{action:"/sys/file/list/upload/image",mode:"single",disabled:!0})})]})})]})};export{C as default}; diff --git a/public/assets/index-B-sDl1ER.js b/public/assets/index-B-sDl1ER.js new file mode 100644 index 0000000..f6bcae6 --- /dev/null +++ b/public/assets/index-B-sDl1ER.js @@ -0,0 +1,326 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/analysis-BO3IE-J4.js","assets/tslib.es6-BaFViOhq.js","assets/index-CO5DzGxy.js","assets/index-CeRfFUxJ.js","assets/Table-B11dzOaz.js","assets/index-DmtjhyJb.js","assets/index-C9m5qSM4.js","assets/index-S1dQ7QE3.js","assets/monitor-D14Jvfho.js","assets/workplace-vTGxhfQ1.js","assets/index-CFsVFAkS.js","assets/icon-selector-Bry1jSXk.js","assets/index-duCmqVUU.js","assets/index-BZjcF0yn.js","assets/index-D3yl9SWR.js","assets/progress-C__thZ4V.js","assets/image-uploader-BPDdWUpW.js","assets/user-selector-Bf4m-hi5.js","assets/xin-form-CcQ8xq2p.js","assets/xin-table-SsTJg5qL.js","assets/index-rMui37zI.js","assets/index-CkiGQ3z2.js","assets/index-Bc7ikhKh.js","assets/403-D_RpddD3.js","assets/index-CwBuiwuD.js","assets/404-nJtFVjOX.js","assets/500-bhOU7TY_.js","assets/first-CE-aqGGa.js","assets/second-BzkscI87.js","assets/third-rWpa1lfh.js","assets/base-layout-DQ91AFp0.js","assets/index-VkcAtM9X.js","assets/descriptions-7UvHFHcf.js","assets/Timeline-BM8lZv8J.js","assets/fix-header-Chn14uO2.js","assets/fail-BHtOA_db.js","assets/info-6rLhG2_3.js","assets/success-CVvPs_8f.js","assets/warning-DK6ICCsI.js","assets/dept-DXcViZXZ.js","assets/useAuth-BOs-nzG0.js","assets/index-BPV0ygaW.js","assets/index-CUwz3zP2.js","assets/item-Du51lIrU.js","assets/file-B4x3U0bn.js","assets/info-CTM73LVB.js","assets/mail-CyS6Gfyv.js","assets/role-BeZ3fBY0.js","assets/rule-C6i2u_mD.js","assets/setting-CV7SVDYb.js","assets/storage-hWfzGhh2.js","assets/user-DaIHvCk0.js","assets/profile-D0iHbJ6r.js"])))=>i.map(i=>d[i]); +function yW(t,e){for(var n=0;nr[s]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const l of s)if(l.type==="childList")for(const c of l.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&r(c)}).observe(document,{childList:!0,subtree:!0});function n(s){const l={};return s.integrity&&(l.integrity=s.integrity),s.referrerPolicy&&(l.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?l.credentials="include":s.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function r(s){if(s.ep)return;s.ep=!0;const l=n(s);fetch(s.href,l)}})();var Qf=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function z7(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var dm={exports:{}},Z8={};var WP;function wW(){if(WP)return Z8;WP=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(r,s,l){var c=null;if(l!==void 0&&(c=""+l),s.key!==void 0&&(c=""+s.key),"key"in s){l={};for(var d in s)d!=="key"&&(l[d]=s[d])}else l=s;return s=l.ref,{$$typeof:t,type:r,key:c,ref:s!==void 0?s:null,props:l}}return Z8.Fragment=e,Z8.jsx=n,Z8.jsxs=n,Z8}var GP;function OW(){return GP||(GP=1,dm.exports=wW()),dm.exports}var pe=OW(),fm={exports:{}},J8={},hm={exports:{}},mm={};var XP;function xW(){return XP||(XP=1,(function(t){function e(N,U){var K=N.length;N.push(U);e:for(;0>>1,te=N[Z];if(0>>1;Zs(J,K))ses(ie,J)?(N[Z]=ie,N[se]=K,Z=se):(N[Z]=J,N[W]=K,Z=W);else if(ses(ie,K))N[Z]=ie,N[se]=K,Z=se;else break e}}return U}function s(N,U){var K=N.sortIndex-U.sortIndex;return K!==0?K:N.id-U.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var l=performance;t.unstable_now=function(){return l.now()}}else{var c=Date,d=c.now();t.unstable_now=function(){return c.now()-d}}var m=[],h=[],v=1,b=null,y=3,O=!1,w=!1,S=!1,C=!1,z=typeof setTimeout=="function"?setTimeout:null,M=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function H(N){for(var U=n(h);U!==null;){if(U.callback===null)r(h);else if(U.startTime<=N)r(h),U.sortIndex=U.expirationTime,e(m,U);else break;U=n(h)}}function j(N){if(S=!1,H(N),!w)if(n(m)!==null)w=!0,_||(_=!0,X());else{var U=n(h);U!==null&&q(j,U.startTime-N)}}var _=!1,P=-1,L=5,V=-1;function D(){return C?!0:!(t.unstable_now()-VN&&D());){var Z=b.callback;if(typeof Z=="function"){b.callback=null,y=b.priorityLevel;var te=Z(b.expirationTime<=N);if(N=t.unstable_now(),typeof te=="function"){b.callback=te,H(N),U=!0;break t}b===n(m)&&r(m),H(N)}else r(m);b=n(m)}if(b!==null)U=!0;else{var B=n(h);B!==null&&q(j,B.startTime-N),U=!1}}break e}finally{b=null,y=K,O=!1}U=void 0}}finally{U?X():_=!1}}}var X;if(typeof T=="function")X=function(){T(F)};else if(typeof MessageChannel<"u"){var Q=new MessageChannel,Y=Q.port2;Q.port1.onmessage=F,X=function(){Y.postMessage(null)}}else X=function(){z(F,0)};function q(N,U){P=z(function(){N(t.unstable_now())},U)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(N){N.callback=null},t.unstable_forceFrameRate=function(N){0>N||125Z?(N.sortIndex=K,e(h,N),n(m)===null&&N===n(h)&&(S?(M(P),P=-1):S=!0,q(j,K-Z))):(N.sortIndex=te,e(m,N),w||O||(w=!0,_||(_=!0,X()))),N},t.unstable_shouldYield=D,t.unstable_wrapCallback=function(N){var U=y;return function(){var K=y;y=U;try{return N.apply(this,arguments)}finally{y=K}}}})(mm)),mm}var KP;function SW(){return KP||(KP=1,hm.exports=xW()),hm.exports}var gm={exports:{}},dn={};var YP;function $W(){if(YP)return dn;YP=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),c=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),y=Symbol.iterator;function O(B){return B===null||typeof B!="object"?null:(B=y&&B[y]||B["@@iterator"],typeof B=="function"?B:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,C={};function z(B,W,J){this.props=B,this.context=W,this.refs=C,this.updater=J||w}z.prototype.isReactComponent={},z.prototype.setState=function(B,W){if(typeof B!="object"&&typeof B!="function"&&B!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,B,W,"setState")},z.prototype.forceUpdate=function(B){this.updater.enqueueForceUpdate(this,B,"forceUpdate")};function M(){}M.prototype=z.prototype;function T(B,W,J){this.props=B,this.context=W,this.refs=C,this.updater=J||w}var H=T.prototype=new M;H.constructor=T,S(H,z.prototype),H.isPureReactComponent=!0;var j=Array.isArray;function _(){}var P={H:null,A:null,T:null,S:null},L=Object.prototype.hasOwnProperty;function V(B,W,J){var se=J.ref;return{$$typeof:t,type:B,key:W,ref:se!==void 0?se:null,props:J}}function D(B,W){return V(B.type,W,B.props)}function F(B){return typeof B=="object"&&B!==null&&B.$$typeof===t}function X(B){var W={"=":"=0",":":"=2"};return"$"+B.replace(/[=:]/g,function(J){return W[J]})}var Q=/\/+/g;function Y(B,W){return typeof B=="object"&&B!==null&&B.key!=null?X(""+B.key):W.toString(36)}function q(B){switch(B.status){case"fulfilled":return B.value;case"rejected":throw B.reason;default:switch(typeof B.status=="string"?B.then(_,_):(B.status="pending",B.then(function(W){B.status==="pending"&&(B.status="fulfilled",B.value=W)},function(W){B.status==="pending"&&(B.status="rejected",B.reason=W)})),B.status){case"fulfilled":return B.value;case"rejected":throw B.reason}}throw B}function N(B,W,J,se,ie){var le=typeof B;(le==="undefined"||le==="boolean")&&(B=null);var ce=!1;if(B===null)ce=!0;else switch(le){case"bigint":case"string":case"number":ce=!0;break;case"object":switch(B.$$typeof){case t:case e:ce=!0;break;case v:return ce=B._init,N(ce(B._payload),W,J,se,ie)}}if(ce)return ie=ie(B),ce=se===""?"."+Y(B,0):se,j(ie)?(J="",ce!=null&&(J=ce.replace(Q,"$&/")+"/"),N(ie,W,J,"",function(fe){return fe})):ie!=null&&(F(ie)&&(ie=D(ie,J+(ie.key==null||B&&B.key===ie.key?"":(""+ie.key).replace(Q,"$&/")+"/")+ce)),W.push(ie)),1;ce=0;var he=se===""?".":se+":";if(j(B))for(var Oe=0;Oe"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),pm.exports=CW(),pm.exports}var kP;function zW(){if(kP)return J8;kP=1;var t=SW(),e=WH(),n=RB();function r(o){var i="https://react.dev/errors/"+o;if(1te||(o.current=Z[te],Z[te]=null,te--)}function J(o,i){te++,Z[te]=o.current,o.current=i}var se=B(null),ie=B(null),le=B(null),ce=B(null);function he(o,i){switch(J(le,i),J(ie,o),J(se,null),i.nodeType){case 9:case 11:o=(o=i.documentElement)&&(o=o.namespaceURI)?k1(o):0;break;default:if(o=i.tagName,i=i.namespaceURI)i=k1(i),o=_a(i,o);else switch(o){case"svg":o=1;break;case"math":o=2;break;default:o=0}}W(se),J(se,o)}function Oe(){W(se),W(ie),W(le)}function fe(o){o.memoizedState!==null&&J(ce,o);var i=se.current,u=_a(i,o.type);i!==u&&(J(ie,o),J(se,u))}function ye(o){ie.current===o&&(W(se),W(ie)),ce.current===o&&(W(ce),Rc._currentValue=K)}var ve,xe;function Re(o){if(ve===void 0)try{throw Error()}catch(u){var i=u.stack.trim().match(/\n( *(at )?)/);ve=i&&i[1]||"",xe=-1)":-1x||me[g]!==He[x]){var We=` +`+me[g].replace(" at new "," at ");return o.displayName&&We.includes("")&&(We=We.replace("",o.displayName)),We}while(1<=g&&0<=x);break}}}finally{$e=!1,Error.prepareStackTrace=u}return(u=o?o.displayName||o.name:"")?Re(u):""}function Me(o,i){switch(o.tag){case 26:case 27:case 5:return Re(o.type);case 16:return Re("Lazy");case 13:return o.child!==i&&i!==null?Re("Suspense Fallback"):Re("Suspense");case 19:return Re("SuspenseList");case 0:case 15:return _e(o.type,!1);case 11:return _e(o.type.render,!1);case 1:return _e(o.type,!0);case 31:return Re("Activity");default:return""}}function Pe(o){try{var i="",u=null;do i+=Me(o,u),u=o,o=o.return;while(o);return i}catch(g){return` +Error generating stack: `+g.message+` +`+g.stack}}var Ae=Object.prototype.hasOwnProperty,ht=t.unstable_scheduleCallback,Ve=t.unstable_cancelCallback,Ze=t.unstable_shouldYield,st=t.unstable_requestPaint,mt=t.unstable_now,Ot=t.unstable_getCurrentPriorityLevel,zt=t.unstable_ImmediatePriority,pt=t.unstable_UserBlockingPriority,ct=t.unstable_NormalPriority,yt=t.unstable_LowPriority,ut=t.unstable_IdlePriority,tt=t.log,dt=t.unstable_setDisableYieldValue,ft=null,nt=null;function Ye(o){if(typeof tt=="function"&&dt(o),nt&&typeof nt.setStrictMode=="function")try{nt.setStrictMode(ft,o)}catch{}}var Pt=Math.clz32?Math.clz32:vn,en=Math.log,It=Math.LN2;function vn(o){return o>>>=0,o===0?32:31-(en(o)/It|0)|0}var Ft=256,Ct=262144,$t=4194304;function Vt(o){var i=o&42;if(i!==0)return i;switch(o&-o){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return o&261888;case 262144:case 524288:case 1048576:case 2097152:return o&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return o&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return o}}function Jt(o,i,u){var g=o.pendingLanes;if(g===0)return 0;var x=0,R=o.suspendedLanes,A=o.pingedLanes;o=o.warmLanes;var k=g&134217727;return k!==0?(g=k&~R,g!==0?x=Vt(g):(A&=k,A!==0?x=Vt(A):u||(u=k&~o,u!==0&&(x=Vt(u))))):(k=g&~R,k!==0?x=Vt(k):A!==0?x=Vt(A):u||(u=g&~o,u!==0&&(x=Vt(u)))),x===0?0:i!==0&&i!==x&&(i&R)===0&&(R=x&-x,u=i&-i,R>=u||R===32&&(u&4194048)!==0)?i:x}function lt(o,i){return(o.pendingLanes&~(o.suspendedLanes&~o.pingedLanes)&i)===0}function gt(o,i){switch(o){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function vt(){var o=$t;return $t<<=1,($t&62914560)===0&&($t=4194304),o}function rt(o){for(var i=[],u=0;31>u;u++)i.push(o);return i}function Ne(o,i){o.pendingLanes|=i,i!==268435456&&(o.suspendedLanes=0,o.pingedLanes=0,o.warmLanes=0)}function Ge(o,i,u,g,x,R){var A=o.pendingLanes;o.pendingLanes=u,o.suspendedLanes=0,o.pingedLanes=0,o.warmLanes=0,o.expiredLanes&=u,o.entangledLanes&=u,o.errorRecoveryDisabledLanes&=u,o.shellSuspendCounter=0;var k=o.entanglements,me=o.expirationTimes,He=o.hiddenUpdates;for(u=A&~u;0"u")return null;try{return o.activeElement||o.body}catch{return o.body}}var Mt=/[\n"\\]/g;function nn(o){return o.replace(Mt,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function Es(o,i,u,g,x,R,A,k){o.name="",A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?o.type=A:o.removeAttribute("type"),i!=null?A==="number"?(i===0&&o.value===""||o.value!=i)&&(o.value=""+or(i)):o.value!==""+or(i)&&(o.value=""+or(i)):A!=="submit"&&A!=="reset"||o.removeAttribute("value"),i!=null?Ll(o,A,or(i)):u!=null?Ll(o,A,or(u)):g!=null&&o.removeAttribute("value"),x==null&&R!=null&&(o.defaultChecked=!!R),x!=null&&(o.checked=x&&typeof x!="function"&&typeof x!="symbol"),k!=null&&typeof k!="function"&&typeof k!="symbol"&&typeof k!="boolean"?o.name=""+or(k):o.removeAttribute("name")}function Pl(o,i,u,g,x,R,A,k){if(R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"&&(o.type=R),i!=null||u!=null){if(!(R!=="submit"&&R!=="reset"||i!=null)){Ho(o);return}u=u!=null?""+or(u):"",i=i!=null?""+or(i):u,k||i===o.value||(o.value=i),o.defaultValue=i}g=g??x,g=typeof g!="function"&&typeof g!="symbol"&&!!g,o.checked=k?o.checked:!!g,o.defaultChecked=!!g,A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(o.name=A),Ho(o)}function Ll(o,i,u){i==="number"&&Wi(o.ownerDocument)===o||o.defaultValue===""+u||(o.defaultValue=""+u)}function ss(o,i,u,g){if(o=o.options,i){i={};for(var x=0;x"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),c0=!1;if(Ts)try{var Zc={};Object.defineProperty(Zc,"passive",{get:function(){c0=!0}}),window.addEventListener("test",Zc,Zc),window.removeEventListener("test",Zc,Zc)}catch{c0=!1}var li=null,u0=null,Zn=null;function nr(){if(Zn)return Zn;var o,i=u0,u=i.length,g,x="value"in li?li.value:li.textContent,R=x.length;for(o=0;o=Yi),nd=" ",n2=!1;function r2(o,i){switch(o){case"keyup":return td.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function rd(o){return o=o.detail,typeof o=="object"&&"data"in o?o.data:null}var Qi=!1;function Wa(o,i){switch(o){case"compositionend":return rd(i);case"keypress":return i.which!==32?null:(n2=!0,nd);case"textInput":return o=i.data,o===nd&&n2?null:o;default:return null}}function g0(o,i){if(Qi)return o==="compositionend"||!t2&&r2(o,i)?(o=nr(),Zn=u0=li=null,Qi=!1,o):null;switch(o){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:u,offset:i-o};o=g}e:{for(;u;){if(u.nextSibling){u=u.nextSibling;break e}u=u.parentNode}u=void 0}u=od(u)}}function id(o,i){return o&&i?o===i?!0:o&&o.nodeType===3?!1:i&&i.nodeType===3?id(o,i.parentNode):"contains"in o?o.contains(i):o.compareDocumentPosition?!!(o.compareDocumentPosition(i)&16):!1:!1}function ld(o){o=o!=null&&o.ownerDocument!=null&&o.ownerDocument.defaultView!=null?o.ownerDocument.defaultView:window;for(var i=Wi(o.document);i instanceof o.HTMLIFrameElement;){try{var u=typeof i.contentWindow.location.href=="string"}catch{u=!1}if(u)o=i.contentWindow;else break;i=Wi(o.document)}return i}function O0(o){var i=o&&o.nodeName&&o.nodeName.toLowerCase();return i&&(i==="input"&&(o.type==="text"||o.type==="search"||o.type==="tel"||o.type==="url"||o.type==="password")||i==="textarea"||o.contentEditable==="true")}var Nl=Ts&&"documentMode"in document&&11>=document.documentMode,Se=null,qe=null,Ie=null,jt=!1;function rn(o,i,u){var g=u.window===u?u.document:u.nodeType===9?u:u.ownerDocument;jt||Se==null||Se!==Wi(g)||(g=Se,"selectionStart"in g&&O0(g)?g={start:g.selectionStart,end:g.selectionEnd}:(g=(g.ownerDocument&&g.ownerDocument.defaultView||window).getSelection(),g={anchorNode:g.anchorNode,anchorOffset:g.anchorOffset,focusNode:g.focusNode,focusOffset:g.focusOffset}),Ie&&Fl(Ie,g)||(Ie=g,g=Y1(qe,"onSelect"),0>=A,x-=A,ls=1<<32-Pt(i)+x|u<fn?(zn=_t,_t=null):zn=_t.sibling;var Bn=je(ze,_t,Te[fn],Ke);if(Bn===null){_t===null&&(_t=zn);break}o&&_t&&Bn.alternate===null&&i(ze,_t),we=R(Bn,we,fn),Vn===null?At=Bn:Vn.sibling=Bn,Vn=Bn,_t=zn}if(fn===Te.length)return u(ze,_t),Tn&&Ka(ze,fn),At;if(_t===null){for(;fnfn?(zn=_t,_t=null):zn=_t.sibling;var Vi=je(ze,_t,Bn.value,Ke);if(Vi===null){_t===null&&(_t=zn);break}o&&_t&&Vi.alternate===null&&i(ze,_t),we=R(Vi,we,fn),Vn===null?At=Vi:Vn.sibling=Vi,Vn=Vi,_t=zn}if(Bn.done)return u(ze,_t),Tn&&Ka(ze,fn),At;if(_t===null){for(;!Bn.done;fn++,Bn=Te.next())Bn=Qe(ze,Bn.value,Ke),Bn!==null&&(we=R(Bn,we,fn),Vn===null?At=Bn:Vn.sibling=Bn,Vn=Bn);return Tn&&Ka(ze,fn),At}for(_t=g(_t);!Bn.done;fn++,Bn=Te.next())Bn=Fe(_t,ze,fn,Bn.value,Ke),Bn!==null&&(o&&Bn.alternate!==null&&_t.delete(Bn.key===null?fn:Bn.key),we=R(Bn,we,fn),Vn===null?At=Bn:Vn.sibling=Bn,Vn=Bn);return o&&_t.forEach(function(um){return i(ze,um)}),Tn&&Ka(ze,fn),At}function er(ze,we,Te,Ke){if(typeof Te=="object"&&Te!==null&&Te.type===S&&Te.key===null&&(Te=Te.props.children),typeof Te=="object"&&Te!==null){switch(Te.$$typeof){case O:e:{for(var At=Te.key;we!==null;){if(we.key===At){if(At=Te.type,At===S){if(we.tag===7){u(ze,we.sibling),Ke=x(we,Te.props.children),Ke.return=ze,ze=Ke;break e}}else if(we.elementType===At||typeof At=="object"&&At!==null&&At.$$typeof===L&&Vo(At)===we.type){u(ze,we.sibling),Ke=x(we,Te.props),Bo(Ke,Te),Ke.return=ze,ze=Ke;break e}u(ze,we);break}else i(ze,we);we=we.sibling}Te.type===S?(Ke=el(Te.props.children,ze.mode,Ke,Te.key),Ke.return=ze,ze=Ke):(Ke=h2(Te.type,Te.key,Te.props,null,ze.mode,Ke),Bo(Ke,Te),Ke.return=ze,ze=Ke)}return A(ze);case w:e:{for(At=Te.key;we!==null;){if(we.key===At)if(we.tag===4&&we.stateNode.containerInfo===Te.containerInfo&&we.stateNode.implementation===Te.implementation){u(ze,we.sibling),Ke=x(we,Te.children||[]),Ke.return=ze,ze=Ke;break e}else{u(ze,we);break}else i(ze,we);we=we.sibling}Ke=i1(Te,ze.mode,Ke),Ke.return=ze,ze=Ke}return A(ze);case L:return Te=Vo(Te),er(ze,we,Te,Ke)}if(q(Te))return Lt(ze,we,Te,Ke);if(X(Te)){if(At=X(Te),typeof At!="function")throw Error(r(150));return Te=At.call(Te),Xt(ze,we,Te,Ke)}if(typeof Te.then=="function")return er(ze,we,tc(Te),Ke);if(Te.$$typeof===T)return er(ze,we,bo(ze,Te),Ke);va(ze,Te)}return typeof Te=="string"&&Te!==""||typeof Te=="number"||typeof Te=="bigint"?(Te=""+Te,we!==null&&we.tag===6?(u(ze,we.sibling),Ke=x(we,Te),Ke.return=ze,ze=Ke):(u(ze,we),Ke=Wl(Te,ze.mode,Ke),Ke.return=ze,ze=Ke),A(ze)):u(ze,we)}return function(ze,we,Te,Ke){try{Ya=0;var At=er(ze,we,Te,Ke);return ec=null,At}catch(_t){if(_t===kl||_t===d1)throw _t;var Vn=na(29,_t,null,ze.mode);return Vn.lanes=Ke,Vn.return=ze,Vn}}}var vi=yd(!0),E0=yd(!1),wo=!1;function us(o){o.updateQueue={baseState:o.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function w2(o,i){o=o.updateQueue,i.updateQueue===o&&(i.updateQueue={baseState:o.baseState,firstBaseUpdate:o.firstBaseUpdate,lastBaseUpdate:o.lastBaseUpdate,shared:o.shared,callbacks:null})}function bi(o){return{lane:o,tag:0,payload:null,callback:null,next:null}}function Ao(o,i,u){var g=o.updateQueue;if(g===null)return null;if(g=g.shared,(Nn&2)!==0){var x=g.pending;return x===null?i.next=i:(i.next=x.next,x.next=i),g.pending=i,i=o1(o),x0(o,null,u),i}return ki(o,g,i,u),o1(o)}function f1(o,i,u){if(i=i.updateQueue,i!==null&&(i=i.shared,(u&4194048)!==0)){var g=i.lanes;g&=o.pendingLanes,u|=g,i.lanes=u,at(o,u)}}function O2(o,i){var u=o.updateQueue,g=o.alternate;if(g!==null&&(g=g.updateQueue,u===g)){var x=null,R=null;if(u=u.firstBaseUpdate,u!==null){do{var A={lane:u.lane,tag:u.tag,payload:u.payload,callback:null,next:null};R===null?x=R=A:R=R.next=A,u=u.next}while(u!==null);R===null?x=R=i:R=R.next=i}else x=R=i;u={baseState:g.baseState,firstBaseUpdate:x,lastBaseUpdate:R,shared:g.shared,callbacks:g.callbacks},o.updateQueue=u;return}o=u.lastBaseUpdate,o===null?u.firstBaseUpdate=i:o.next=i,u.lastBaseUpdate=i}var Ur=!1;function sl(){if(Ur){var o=Jl;if(o!==null)throw o}}function nc(o,i,u,g){Ur=!1;var x=o.updateQueue;wo=!1;var R=x.firstBaseUpdate,A=x.lastBaseUpdate,k=x.shared.pending;if(k!==null){x.shared.pending=null;var me=k,He=me.next;me.next=null,A===null?R=He:A.next=He,A=me;var We=o.alternate;We!==null&&(We=We.updateQueue,k=We.lastBaseUpdate,k!==A&&(k===null?We.firstBaseUpdate=He:k.next=He,We.lastBaseUpdate=me))}if(R!==null){var Qe=x.baseState;A=0,We=He=me=null,k=R;do{var je=k.lane&-536870913,Fe=je!==k.lane;if(Fe?(Cn&je)===je:(g&je)===je){je!==0&&je===Zl&&(Ur=!0),We!==null&&(We=We.next={lane:0,tag:k.tag,payload:k.payload,callback:null,next:null});e:{var Lt=o,Xt=k;je=i;var er=u;switch(Xt.tag){case 1:if(Lt=Xt.payload,typeof Lt=="function"){Qe=Lt.call(er,Qe,je);break e}Qe=Lt;break e;case 3:Lt.flags=Lt.flags&-65537|128;case 0:if(Lt=Xt.payload,je=typeof Lt=="function"?Lt.call(er,Qe,je):Lt,je==null)break e;Qe=b({},Qe,je);break e;case 2:wo=!0}}je=k.callback,je!==null&&(o.flags|=64,Fe&&(o.flags|=8192),Fe=x.callbacks,Fe===null?x.callbacks=[je]:Fe.push(je))}else Fe={lane:je,tag:k.tag,payload:k.payload,callback:k.callback,next:null},We===null?(He=We=Fe,me=Qe):We=We.next=Fe,A|=je;if(k=k.next,k===null){if(k=x.shared.pending,k===null)break;Fe=k,k=Fe.next,Fe.next=null,x.lastBaseUpdate=Fe,x.shared.pending=null}}while(!0);We===null&&(me=Qe),x.baseState=me,x.firstBaseUpdate=He,x.lastBaseUpdate=We,R===null&&(x.shared.lanes=0),zi|=A,o.lanes=A,o.memoizedState=Qe}}function Fo(o,i){if(typeof o!="function")throw Error(r(191,o));o.call(i)}function x2(o,i){var u=o.callbacks;if(u!==null)for(o.callbacks=null,o=0;oR?R:8;var A=N.T,k={};N.T=k,dc(o,!1,i,u);try{var me=x(),He=N.S;if(He!==null&&He(k,me),me!==null&&typeof me=="object"&&typeof me.then=="function"){var We=Ch(me,g);uc(o,i,We,no(o))}else uc(o,i,g,no(o))}catch(Qe){uc(o,i,{then:function(){},status:"rejected",reason:Qe},no())}finally{U.p=R,A!==null&&k.types!==null&&(A.types=k.types),N.T=A}}function P2(){}function Oi(o,i,u,g){if(o.tag!==5)throw Error(r(476));var x=W0(o).queue;Td(o,x,i,K,u===null?P2:function(){return G0(o),u(g)})}function W0(o){var i=o.memoizedState;if(i!==null)return i;i={memoizedState:K,baseState:K,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:No,lastRenderedState:K},next:null};var u={};return i.next={memoizedState:u,baseState:u,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:No,lastRenderedState:u},next:null},o.memoizedState=i,o=o.alternate,o!==null&&(o.memoizedState=i),i}function G0(o){var i=W0(o);i.next===null&&(i=o.alternate.memoizedState),uc(o,i.next.queue,{},no())}function X0(){return ra(Rc)}function K0(){return Tr().memoizedState}function ll(){return Tr().memoizedState}function O1(o){for(var i=o.return;i!==null;){switch(i.tag){case 24:case 3:var u=no();o=bi(u);var g=Ao(i,o,u);g!==null&&(La(g,i,u),f1(g,i,u)),i={cache:_o()},o.payload=i;return}i=i.return}}function Mh(o,i,u){var g=no();u={lane:g,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},x1(o)?S1(i,u):(u=f2(o,i,u,g),u!==null&&(La(u,o,g),L2(u,i,g)))}function Y0(o,i,u){var g=no();uc(o,i,u,g)}function uc(o,i,u,g){var x={lane:g,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null};if(x1(o))S1(i,x);else{var R=o.alternate;if(o.lanes===0&&(R===null||R.lanes===0)&&(R=i.lastRenderedReducer,R!==null))try{var A=i.lastRenderedState,k=R(A,u);if(x.hasEagerState=!0,x.eagerState=k,wr(k,A))return ki(o,i,x,0),ar===null&&Io(),!1}catch{}if(u=f2(o,i,x,g),u!==null)return La(u,o,g),L2(u,i,g),!0}return!1}function dc(o,i,u,g){if(g={lane:2,revertLane:ro(),gesture:null,action:g,hasEagerState:!1,eagerState:null,next:null},x1(o)){if(i)throw Error(r(479))}else i=f2(o,u,g,2),i!==null&&La(i,o,2)}function x1(o){var i=o.alternate;return o===cn||i!==null&&i===cn}function S1(o,i){rc=g1=!0;var u=o.pending;u===null?i.next=i:(i.next=u.next,u.next=i),o.pending=i}function L2(o,i,u){if((u&4194048)!==0){var g=i.lanes;g&=o.pendingLanes,u|=g,i.lanes=u,at(o,u)}}var xi={readContext:ra,use:ic,useCallback:gr,useContext:gr,useEffect:gr,useImperativeHandle:gr,useLayoutEffect:gr,useInsertionEffect:gr,useMemo:gr,useReducer:gr,useRef:gr,useState:gr,useDebugValue:gr,useDeferredValue:gr,useTransition:gr,useSyncExternalStore:gr,useId:gr,useHostTransitionStatus:gr,useFormState:gr,useActionState:gr,useOptimistic:gr,useMemoCache:gr,useCacheRefresh:gr};xi.useEffectEvent=gr;var Hd={readContext:ra,use:ic,useCallback:function(o,i){return da().memoizedState=[o,i===void 0?null:i],o},useContext:ra,useEffect:N0,useImperativeHandle:function(o,i,u){u=u!=null?u.concat([o]):null,Do(4194308,4,U0.bind(null,i,o),u)},useLayoutEffect:function(o,i){return Do(4194308,4,o,i)},useInsertionEffect:function(o,i){Do(4,2,o,i)},useMemo:function(o,i){var u=da();i=i===void 0?null:i;var g=o();if(il){Ye(!0);try{o()}finally{Ye(!1)}}return u.memoizedState=[g,i],g},useReducer:function(o,i,u){var g=da();if(u!==void 0){var x=u(i);if(il){Ye(!0);try{u(i)}finally{Ye(!1)}}}else x=i;return g.memoizedState=g.baseState=x,o={pending:null,lanes:0,dispatch:null,lastRenderedReducer:o,lastRenderedState:x},g.queue=o,o=o.dispatch=Mh.bind(null,cn,o),[g.memoizedState,o]},useRef:function(o){var i=da();return o={current:o},i.memoizedState=o},useState:function(o){o=cc(o);var i=o.queue,u=Y0.bind(null,cn,i);return i.dispatch=u,[o.memoizedState,u]},useDebugValue:j2,useDeferredValue:function(o,i){var u=da();return So(u,o,i)},useTransition:function(){var o=cc(!1);return o=Td.bind(null,cn,o.queue,!0,!1),da().memoizedState=o,[!1,o]},useSyncExternalStore:function(o,i,u){var g=cn,x=da();if(Tn){if(u===void 0)throw Error(r(407));u=u()}else{if(u=i(),ar===null)throw Error(r(349));(Cn&127)!==0||I0(g,i,u)}x.memoizedState=u;var R={value:u,getSnapshot:i};return x.queue=R,N0(xd.bind(null,g,R,o),[o]),g.flags|=2048,ka(9,{destroy:void 0},Od.bind(null,g,R,u,i),null),u},useId:function(){var o=da(),i=ar.identifierPrefix;if(Tn){var u=po,g=ls;u=(g&~(1<<32-Pt(g)-1)).toString(32)+u,i="_"+i+"R_"+u,u=$2++,0<\/script>",R=R.removeChild(R.firstChild);break;case"select":R=typeof g.is=="string"?A.createElement("select",{is:g.is}):A.createElement("select"),g.multiple?R.multiple=!0:g.size&&(R.size=g.size);break;default:R=typeof g.is=="string"?A.createElement(x,{is:g.is}):A.createElement(x)}}R[et]=i,R[xt]=g;e:for(A=i.child;A!==null;){if(A.tag===5||A.tag===6)R.appendChild(A.stateNode);else if(A.tag!==4&&A.tag!==27&&A.child!==null){A.child.return=A,A=A.child;continue}if(A===i)break e;for(;A.sibling===null;){if(A.return===null||A.return===i)break e;A=A.return}A.sibling.return=A.return,A=A.sibling}i.stateNode=R;e:switch(sa(R,x,g),x){case"button":case"input":case"select":case"textarea":g=!!g.autoFocus;break e;case"img":g=!0;break e;default:g=!1}g&&Fs(i)}}return rr(i),o8(i,i.type,o===null?null:o.memoizedProps,i.pendingProps,u),null;case 6:if(o&&i.stateNode!=null)o.memoizedProps!==g&&Fs(i);else{if(typeof g!="string"&&i.stateNode===null)throw Error(r(166));if(o=le.current,nl(i)){if(o=i.stateNode,u=i.memoizedProps,g=null,x=Lr,x!==null)switch(x.tag){case 27:case 5:g=x.memoizedProps}o[et]=i,o=!!(o.nodeValue===u||g!==null&&g.suppressHydrationWarning===!0||Of(o.nodeValue,u)),o||hi(i,!0)}else o=J1(o).createTextNode(g),o[et]=i,i.stateNode=o}return rr(i),null;case 31:if(u=i.memoizedState,o===null||o.memoizedState!==null){if(g=nl(i),u!==null){if(o===null){if(!g)throw Error(r(318));if(o=i.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(r(557));o[et]=i}else ee(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;rr(i),o=!1}else u=mi(),o!==null&&o.memoizedState!==null&&(o.memoizedState.hydrationErrors=u),o=!0;if(!o)return i.flags&256?(Ea(i),i):(Ea(i),null);if((i.flags&128)!==0)throw Error(r(558))}return rr(i),null;case 13:if(g=i.memoizedState,o===null||o.memoizedState!==null&&o.memoizedState.dehydrated!==null){if(x=nl(i),g!==null&&g.dehydrated!==null){if(o===null){if(!x)throw Error(r(318));if(x=i.memoizedState,x=x!==null?x.dehydrated:null,!x)throw Error(r(317));x[et]=i}else ee(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;rr(i),x=!1}else x=mi(),o!==null&&o.memoizedState!==null&&(o.memoizedState.hydrationErrors=x),x=!0;if(!x)return i.flags&256?(Ea(i),i):(Ea(i),null)}return Ea(i),(i.flags&128)!==0?(i.lanes=u,i):(u=g!==null,o=o!==null&&o.memoizedState!==null,u&&(g=i.child,x=null,g.alternate!==null&&g.alternate.memoizedState!==null&&g.alternate.memoizedState.cachePool!==null&&(x=g.alternate.memoizedState.cachePool.pool),R=null,g.memoizedState!==null&&g.memoizedState.cachePool!==null&&(R=g.memoizedState.cachePool.pool),R!==x&&(g.flags|=2048)),u!==o&&u&&(i.child.flags|=8192),P1(i,i.updateQueue),rr(i),null);case 4:return Oe(),o===null&&L8(i.stateNode.containerInfo),rr(i),null;case 10:return _s(i.type),rr(i),null;case 19:if(W(Mr),g=i.memoizedState,g===null)return rr(i),null;if(x=(i.flags&128)!==0,R=g.rendering,R===null)if(x)L1(g,!1);else{if(xr!==0||o!==null&&(o.flags&128)!==0)for(o=i.child;o!==null;){if(R=S2(o),R!==null){for(i.flags|=128,L1(g,!1),o=R.updateQueue,i.updateQueue=o,P1(i,o),i.subtreeFlags=0,o=u,u=i.child;u!==null;)fd(u,o),u=u.sibling;return J(Mr,Mr.current&1|2),Tn&&Ka(i,g.treeForkCount),i.child}o=o.sibling}g.tail!==null&&mt()>dl&&(i.flags|=128,x=!0,L1(g,!1),i.lanes=4194304)}else{if(!x)if(o=S2(R),o!==null){if(i.flags|=128,x=!0,o=o.updateQueue,i.updateQueue=o,P1(i,o),L1(g,!0),g.tail===null&&g.tailMode==="hidden"&&!R.alternate&&!Tn)return rr(i),null}else 2*mt()-g.renderingStartTime>dl&&u!==536870912&&(i.flags|=128,x=!0,L1(g,!1),i.lanes=4194304);g.isBackwards?(R.sibling=i.child,i.child=R):(o=g.last,o!==null?o.sibling=R:i.child=R,g.last=R)}return g.tail!==null?(o=g.tail,g.rendering=o,g.tail=o.sibling,g.renderingStartTime=mt(),o.sibling=null,u=Mr.current,J(Mr,x?u&1|2:u&1),Tn&&Ka(i,g.treeForkCount),o):(rr(i),null);case 22:case 23:return Ea(i),h1(),g=i.memoizedState!==null,o!==null?o.memoizedState!==null!==g&&(i.flags|=8192):g&&(i.flags|=8192),g?(u&536870912)!==0&&(i.flags&128)===0&&(rr(i),i.subtreeFlags&6&&(i.flags|=8192)):rr(i),u=i.updateQueue,u!==null&&P1(i,u.retryQueue),u=null,o!==null&&o.memoizedState!==null&&o.memoizedState.cachePool!==null&&(u=o.memoizedState.cachePool.pool),g=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(g=i.memoizedState.cachePool.pool),g!==u&&(i.flags|=2048),o!==null&&W(ol),null;case 24:return u=null,o!==null&&(u=o.memoizedState.cache),i.memoizedState.cache!==u&&(i.flags|=2048),_s(Ir),rr(i),null;case 25:return null;case 30:return null}throw Error(r(156,i.tag))}function I1(o,i){switch(tl(i),i.tag){case 1:return o=i.flags,o&65536?(i.flags=o&-65537|128,i):null;case 3:return _s(Ir),Oe(),o=i.flags,(o&65536)!==0&&(o&128)===0?(i.flags=o&-65537|128,i):null;case 26:case 27:case 5:return ye(i),null;case 31:if(i.memoizedState!==null){if(Ea(i),i.alternate===null)throw Error(r(340));ee()}return o=i.flags,o&65536?(i.flags=o&-65537|128,i):null;case 13:if(Ea(i),o=i.memoizedState,o!==null&&o.dehydrated!==null){if(i.alternate===null)throw Error(r(340));ee()}return o=i.flags,o&65536?(i.flags=o&-65537|128,i):null;case 19:return W(Mr),null;case 4:return Oe(),null;case 10:return _s(i.type),null;case 22:case 23:return Ea(i),h1(),o!==null&&W(ol),o=i.flags,o&65536?(i.flags=o&-65537|128,i):null;case 24:return _s(Ir),null;case 25:return null;default:return null}}function q2(o,i){switch(tl(i),i.tag){case 3:_s(Ir),Oe();break;case 26:case 27:case 5:ye(i);break;case 4:Oe();break;case 31:i.memoizedState!==null&&Ea(i);break;case 13:Ea(i);break;case 19:W(Mr);break;case 10:_s(i.type);break;case 22:case 23:Ea(i),h1(),o!==null&&W(ol);break;case 24:_s(Ir)}}function hc(o,i){try{var u=i.updateQueue,g=u!==null?u.lastEffect:null;if(g!==null){var x=g.next;u=x;do{if((u.tag&o)===o){g=void 0;var R=u.create,A=u.inst;g=R(),A.destroy=g}u=u.next}while(u!==x)}}catch(k){Yn(i,i.return,k)}}function Ns(o,i,u){try{var g=i.updateQueue,x=g!==null?g.lastEffect:null;if(x!==null){var R=x.next;g=R;do{if((g.tag&o)===o){var A=g.inst,k=A.destroy;if(k!==void 0){A.destroy=void 0,x=i;var me=u,He=k;try{He()}catch(We){Yn(x,me,We)}}}g=g.next}while(g!==R)}}catch(We){Yn(i,i.return,We)}}function _1(o){var i=o.updateQueue;if(i!==null){var u=o.stateNode;try{x2(i,u)}catch(g){Yn(o,o.return,g)}}}function i8(o,i,u){u.props=ya(o.type,o.memoizedProps),u.state=o.memoizedState;try{u.componentWillUnmount()}catch(g){Yn(o,i,g)}}function Ta(o,i){try{var u=o.ref;if(u!==null){switch(o.tag){case 26:case 27:case 5:var g=o.stateNode;break;case 30:g=o.stateNode;break;default:g=o.stateNode}typeof u=="function"?o.refCleanup=u(g):u.current=g}}catch(x){Yn(o,i,x)}}function ha(o,i){var u=o.ref,g=o.refCleanup;if(u!==null)if(typeof g=="function")try{g()}catch(x){Yn(o,i,x)}finally{o.refCleanup=null,o=o.alternate,o!=null&&(o.refCleanup=null)}else if(typeof u=="function")try{u(null)}catch(x){Yn(o,i,x)}else u.current=null}function Fd(o){var i=o.type,u=o.memoizedProps,g=o.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":u.autoFocus&&g.focus();break e;case"img":u.src?g.src=u.src:u.srcSet&&(g.srcset=u.srcSet)}}catch(x){Yn(o,o.return,x)}}function W2(o,i,u){try{var g=o.stateNode;qh(g,o.type,u,i),g[xt]=i}catch(x){Yn(o,o.return,x)}}function Nd(o){return o.tag===5||o.tag===3||o.tag===26||o.tag===27&&Yt(o.type)||o.tag===4}function l8(o){e:for(;;){for(;o.sibling===null;){if(o.return===null||Nd(o.return))return null;o=o.return}for(o.sibling.return=o.return,o=o.sibling;o.tag!==5&&o.tag!==6&&o.tag!==18;){if(o.tag===27&&Yt(o.type)||o.flags&2||o.child===null||o.tag===4)continue e;o.child.return=o,o=o.child}if(!(o.flags&2))return o.stateNode}}function c8(o,i,u){var g=o.tag;if(g===5||g===6)o=o.stateNode,i?(u.nodeType===9?u.body:u.nodeName==="HTML"?u.ownerDocument.body:u).insertBefore(o,i):(i=u.nodeType===9?u.body:u.nodeName==="HTML"?u.ownerDocument.body:u,i.appendChild(o),u=u._reactRootContainer,u!=null||i.onclick!==null||(i.onclick=Ms));else if(g!==4&&(g===27&&Yt(o.type)&&(u=o.stateNode,i=null),o=o.child,o!==null))for(c8(o,i,u),o=o.sibling;o!==null;)c8(o,i,u),o=o.sibling}function G2(o,i,u){var g=o.tag;if(g===5||g===6)o=o.stateNode,i?u.insertBefore(o,i):u.appendChild(o);else if(g!==4&&(g===27&&Yt(o.type)&&(u=o.stateNode),o=o.child,o!==null))for(G2(o,i,u),o=o.sibling;o!==null;)G2(o,i,u),o=o.sibling}function Dd(o){var i=o.stateNode,u=o.memoizedProps;try{for(var g=o.type,x=i.attributes;x.length;)i.removeAttributeNode(x[0]);sa(i,g,u),i[et]=o,i[xt]=u}catch(R){Yn(o,o.return,R)}}var Ds=!1,_r=!1,u8=!1,Ud=typeof WeakSet=="function"?WeakSet:Set,Qr=null;function jh(o,i){if(o=o.containerInfo,Z1=h3,o=ld(o),O0(o)){if("selectionStart"in o)var u={start:o.selectionStart,end:o.selectionEnd};else e:{u=(u=o.ownerDocument)&&u.defaultView||window;var g=u.getSelection&&u.getSelection();if(g&&g.rangeCount!==0){u=g.anchorNode;var x=g.anchorOffset,R=g.focusNode;g=g.focusOffset;try{u.nodeType,R.nodeType}catch{u=null;break e}var A=0,k=-1,me=-1,He=0,We=0,Qe=o,je=null;t:for(;;){for(var Fe;Qe!==u||x!==0&&Qe.nodeType!==3||(k=A+x),Qe!==R||g!==0&&Qe.nodeType!==3||(me=A+g),Qe.nodeType===3&&(A+=Qe.nodeValue.length),(Fe=Qe.firstChild)!==null;)je=Qe,Qe=Fe;for(;;){if(Qe===o)break t;if(je===u&&++He===x&&(k=A),je===R&&++We===g&&(me=A),(Fe=Qe.nextSibling)!==null)break;Qe=je,je=Qe.parentNode}Qe=Fe}u=k===-1||me===-1?null:{start:k,end:me}}else u=null}u=u||{start:0,end:0}}else u=null;for(B8={focusedElem:o,selectionRange:u},h3=!1,Qr=i;Qr!==null;)if(i=Qr,o=i.child,(i.subtreeFlags&1028)!==0&&o!==null)o.return=i,Qr=o;else for(;Qr!==null;){switch(i=Qr,R=i.alternate,o=i.flags,i.tag){case 0:if((o&4)!==0&&(o=i.updateQueue,o=o!==null?o.events:null,o!==null))for(u=0;u title"))),sa(R,g,u),R[et]=o,$n(R),g=R;break e;case"link":var A=Lf("link","href",x).get(g+(u.href||""));if(A){for(var k=0;ker&&(A=er,er=Xt,Xt=A);var ze=sd(k,Xt),we=sd(k,er);if(ze&&we&&(Fe.rangeCount!==1||Fe.anchorNode!==ze.node||Fe.anchorOffset!==ze.offset||Fe.focusNode!==we.node||Fe.focusOffset!==we.offset)){var Te=Qe.createRange();Te.setStart(ze.node,ze.offset),Fe.removeAllRanges(),Xt>er?(Fe.addRange(Te),Fe.extend(we.node,we.offset)):(Te.setEnd(we.node,we.offset),Fe.addRange(Te))}}}}for(Qe=[],Fe=k;Fe=Fe.parentNode;)Fe.nodeType===1&&Qe.push({element:Fe,left:Fe.scrollLeft,top:Fe.scrollTop});for(typeof k.focus=="function"&&k.focus(),k=0;ku?32:u,N.T=null,u=w8,w8=null;var R=Ei,A=Ws;if(qr=0,vc=Ei=null,Ws=0,(Nn&6)!==0)throw Error(r(331));var k=Nn;if(Nn|=4,Zd(R.current),Kd(R,R.current,A,u),Nn=k,X1(0,!1),nt&&typeof nt.onPostCommitFiberRoot=="function")try{nt.onPostCommitFiberRoot(ft,R)}catch{}return!0}finally{U.p=x,N.T=g,z8(o,i)}}function E8(o,i,u){i=Xa(u,i),i=k0(o.stateNode,i,2),o=Ao(o,i,2),o!==null&&(Ne(o,2),gs(o))}function Yn(o,i,u){if(o.tag===3)E8(o,o,u);else for(;i!==null;){if(i.tag===3){E8(i,o,u);break}else if(i.tag===1){var g=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof g.componentDidCatch=="function"&&(Ri===null||!Ri.has(g))){o=Xa(u,o),u=fs(2),g=Ao(i,u,2),g!==null&&(V2(u,g,i,o),Ne(g,2),gs(g));break}}i=i.return}}function M8(o,i,u){var g=o.pingCache;if(g===null){g=o.pingCache=new Ih;var x=new Set;g.set(i,x)}else x=g.get(i),x===void 0&&(x=new Set,g.set(i,x));x.has(u)||(p8=!0,x.add(u),o=Ah.bind(null,o,i,u),i.then(o,o))}function Ah(o,i,u){var g=o.pingCache;g!==null&&g.delete(i),o.pingedLanes|=o.suspendedLanes&u,o.warmLanes&=~u,ar===o&&(Cn&u)===u&&(xr===4||xr===3&&(Cn&62914560)===Cn&&300>mt()-N1?(Nn&2)===0&&bc(o,0):v8|=u,pc===Cn&&(pc=0)),gs(o)}function G1(o,i){i===0&&(i=vt()),o=is(o,i),o!==null&&(Ne(o,i),gs(o))}function e3(o){var i=o.memoizedState,u=0;i!==null&&(u=i.retryLane),G1(o,u)}function Fh(o,i){var u=0;switch(o.tag){case 31:case 13:var g=o.stateNode,x=o.memoizedState;x!==null&&(u=x.retryLane);break;case 19:g=o.stateNode;break;case 22:g=o.stateNode._retryCache;break;default:throw Error(r(314))}g!==null&&g.delete(i),G1(o,u)}function Nh(o,i){return ht(o,i)}var wc=null,fl=null,T8=!1,t3=!1,H8=!1,Mi=0;function gs(o){o!==fl&&o.next===null&&(fl===null?wc=fl=o:fl=fl.next=o),t3=!0,T8||(T8=!0,Uh())}function X1(o,i){if(!H8&&t3){H8=!0;do for(var u=!1,g=wc;g!==null;){if(o!==0){var x=g.pendingLanes;if(x===0)var R=0;else{var A=g.suspendedLanes,k=g.pingedLanes;R=(1<<31-Pt(42|o)+1)-1,R&=x&~(A&~k),R=R&201326741?R&201326741|1:R?R|2:0}R!==0&&(u=!0,gf(g,R))}else R=Cn,R=Jt(g,g===ar?R:0,g.cancelPendingCommit!==null||g.timeoutHandle!==-1),(R&3)===0||lt(g,R)||(u=!0,gf(g,R));g=g.next}while(u);H8=!1}}function Dh(){ff()}function ff(){t3=T8=!1;var o=0;Mi!==0&&Wh()&&(o=Mi);for(var i=mt(),u=null,g=wc;g!==null;){var x=g.next,R=hf(g,i);R===0?(g.next=null,u===null?wc=x:u.next=x,x===null&&(fl=u)):(u=g,(o!==0||(R&3)!==0)&&(t3=!0)),g=x}qr!==0&&qr!==5||X1(o),Mi!==0&&(Mi=0)}function hf(o,i){for(var u=o.suspendedLanes,g=o.pingedLanes,x=o.expirationTimes,R=o.pendingLanes&-62914561;0k)break;var We=me.transferSize,Qe=me.initiatorType;We&&V8(Qe)&&(me=me.responseEnd,A+=We*(me"u"?null:document;function Tf(o,i,u){var g=ji;if(g&&typeof i=="string"&&i){var x=nn(i);x='link[rel="'+o+'"][href="'+x+'"]',typeof u=="string"&&(x+='[crossorigin="'+u+'"]'),Mf.has(x)||(Mf.add(x),o={rel:o,crossOrigin:u,href:i},g.querySelector(x)===null&&(i=g.createElement("link"),sa(i,"link",o),$n(i),g.head.appendChild(i)))}}function D8(o){Ks.D(o),Tf("dns-prefetch",o,null)}function Zh(o,i){Ks.C(o,i),Tf("preconnect",o,i)}function Jh(o,i,u){Ks.L(o,i,u);var g=ji;if(g&&o&&i){var x='link[rel="preload"][as="'+nn(i)+'"]';i==="image"&&u&&u.imageSrcSet?(x+='[imagesrcset="'+nn(u.imageSrcSet)+'"]',typeof u.imageSizes=="string"&&(x+='[imagesizes="'+nn(u.imageSizes)+'"]')):x+='[href="'+nn(o)+'"]';var R=x;switch(i){case"style":R=xc(o);break;case"script":R=$c(o)}Co.has(R)||(o=b({rel:"preload",href:i==="image"&&u&&u.imageSrcSet?void 0:o,as:i},u),Co.set(R,o),g.querySelector(x)!==null||i==="style"&&g.querySelector(Sc(R))||i==="script"&&g.querySelector(Cc(R))||(i=g.createElement("link"),sa(i,"link",o),$n(i),g.head.appendChild(i)))}}function kh(o,i){Ks.m(o,i);var u=ji;if(u&&o){var g=i&&typeof i.as=="string"?i.as:"script",x='link[rel="modulepreload"][as="'+nn(g)+'"][href="'+nn(o)+'"]',R=x;switch(g){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":R=$c(o)}if(!Co.has(R)&&(o=b({rel:"modulepreload",href:o},i),Co.set(R,o),u.querySelector(x)===null)){switch(g){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(u.querySelector(Cc(R)))return}g=u.createElement("link"),sa(g,"link",o),$n(g),u.head.appendChild(g)}}}function Zr(o,i,u){Ks.S(o,i,u);var g=ji;if(g&&o){var x=Mn(g).hoistableStyles,R=xc(o);i=i||"default";var A=x.get(R);if(!A){var k={loading:0,preload:null};if(A=g.querySelector(Sc(R)))k.loading=5;else{o=b({rel:"stylesheet",href:o,"data-precedence":i},u),(u=Co.get(R))&&U8(o,u);var me=A=g.createElement("link");$n(me),sa(me,"link",o),me._p=new Promise(function(He,We){me.onload=He,me.onerror=We}),me.addEventListener("load",function(){k.loading|=1}),me.addEventListener("error",function(){k.loading|=2}),k.loading|=4,l3(A,i,g)}A={type:"stylesheet",instance:A,count:1,state:k},x.set(R,A)}}}function Va(o,i){Ks.X(o,i);var u=ji;if(u&&o){var g=Mn(u).hoistableScripts,x=$c(o),R=g.get(x);R||(R=u.querySelector(Cc(x)),R||(o=b({src:o,async:!0},i),(i=Co.get(x))&&c3(o,i),R=u.createElement("script"),$n(R),sa(R,"link",o),u.head.appendChild(R)),R={type:"script",instance:R,count:1,state:null},g.set(x,R))}}function em(o,i){Ks.M(o,i);var u=ji;if(u&&o){var g=Mn(u).hoistableScripts,x=$c(o),R=g.get(x);R||(R=u.querySelector(Cc(x)),R||(o=b({src:o,async:!0,type:"module"},i),(i=Co.get(x))&&c3(o,i),R=u.createElement("script"),$n(R),sa(R,"link",o),u.head.appendChild(R)),R={type:"script",instance:R,count:1,state:null},g.set(x,R))}}function Hf(o,i,u,g){var x=(x=le.current)?i3(x):null;if(!x)throw Error(r(446));switch(o){case"meta":case"title":return null;case"style":return typeof u.precedence=="string"&&typeof u.href=="string"?(i=xc(u.href),u=Mn(x).hoistableStyles,g=u.get(i),g||(g={type:"style",instance:null,count:0,state:null},u.set(i,g)),g):{type:"void",instance:null,count:0,state:null};case"link":if(u.rel==="stylesheet"&&typeof u.href=="string"&&typeof u.precedence=="string"){o=xc(u.href);var R=Mn(x).hoistableStyles,A=R.get(o);if(A||(x=x.ownerDocument||x,A={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},R.set(o,A),(R=x.querySelector(Sc(o)))&&!R._p&&(A.instance=R,A.state.loading=5),Co.has(o)||(u={rel:"preload",as:"style",href:u.href,crossOrigin:u.crossOrigin,integrity:u.integrity,media:u.media,hrefLang:u.hrefLang,referrerPolicy:u.referrerPolicy},Co.set(o,u),R||tm(x,o,u,A.state))),i&&g===null)throw Error(r(528,""));return A}if(i&&g!==null)throw Error(r(529,""));return null;case"script":return i=u.async,u=u.src,typeof u=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=$c(u),u=Mn(x).hoistableScripts,g=u.get(i),g||(g={type:"script",instance:null,count:0,state:null},u.set(i,g)),g):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,o))}}function xc(o){return'href="'+nn(o)+'"'}function Sc(o){return'link[rel="stylesheet"]['+o+"]"}function jf(o){return b({},o,{"data-precedence":o.precedence,precedence:null})}function tm(o,i,u,g){o.querySelector('link[rel="preload"][as="style"]['+i+"]")?g.loading=1:(i=o.createElement("link"),g.preload=i,i.addEventListener("load",function(){return g.loading|=1}),i.addEventListener("error",function(){return g.loading|=2}),sa(i,"link",u),$n(i),o.head.appendChild(i))}function $c(o){return'[src="'+nn(o)+'"]'}function Cc(o){return"script[async]"+o}function Pf(o,i,u){if(i.count++,i.instance===null)switch(i.type){case"style":var g=o.querySelector('style[data-href~="'+nn(u.href)+'"]');if(g)return i.instance=g,$n(g),g;var x=b({},u,{"data-href":u.href,"data-precedence":u.precedence,href:null,precedence:null});return g=(o.ownerDocument||o).createElement("style"),$n(g),sa(g,"style",x),l3(g,u.precedence,o),i.instance=g;case"stylesheet":x=xc(u.href);var R=o.querySelector(Sc(x));if(R)return i.state.loading|=4,i.instance=R,$n(R),R;g=jf(u),(x=Co.get(x))&&U8(g,x),R=(o.ownerDocument||o).createElement("link"),$n(R);var A=R;return A._p=new Promise(function(k,me){A.onload=k,A.onerror=me}),sa(R,"link",g),i.state.loading|=4,l3(R,u.precedence,o),i.instance=R;case"script":return R=$c(u.src),(x=o.querySelector(Cc(R)))?(i.instance=x,$n(x),x):(g=u,(x=Co.get(R))&&(g=b({},u),c3(g,x)),o=o.ownerDocument||o,x=o.createElement("script"),$n(x),sa(x,"link",g),o.head.appendChild(x),i.instance=x);case"void":return null;default:throw Error(r(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(g=i.instance,i.state.loading|=4,l3(g,u.precedence,o));return i.instance}function l3(o,i,u){for(var g=u.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),x=g.length?g[g.length-1]:null,R=x,A=0;A title"):null)}function nm(o,i,u){if(u===1||i.itemProp!=null)return!1;switch(o){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;return i.rel==="stylesheet"?(o=i.disabled,typeof i.precedence=="string"&&o==null):!0;case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function _f(o){return!(o.type==="stylesheet"&&(o.state.loading&3)===0)}function zc(o,i,u,g){if(u.type==="stylesheet"&&(typeof g.media!="string"||matchMedia(g.media).matches!==!1)&&(u.state.loading&4)===0){if(u.instance===null){var x=xc(g.href),R=i.querySelector(Sc(x));if(R){i=R._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(o.count++,o=u3.bind(o),i.then(o,o)),u.state.loading|=4,u.instance=R,$n(R);return}R=i.ownerDocument||i,g=jf(g),(x=Co.get(x))&&U8(g,x),R=R.createElement("link"),$n(R);var A=R;A._p=new Promise(function(k,me){A.onload=k,A.onerror=me}),sa(R,"link",g),u.instance=R}o.stylesheets===null&&(o.stylesheets=new Map),o.stylesheets.set(u,i),(i=u.state.preload)&&(u.state.loading&3)===0&&(o.count++,u=u3.bind(o),i.addEventListener("load",u),i.addEventListener("error",u))}}var q8=0;function rm(o,i){return o.stylesheets&&o.count===0&&f3(o,o.stylesheets),0q8?50:800)+i);return o.unsuspend=u,function(){o.unsuspend=null,clearTimeout(g),clearTimeout(x)}}:null}function u3(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)f3(this,this.stylesheets);else if(this.unsuspend){var o=this.unsuspend;this.unsuspend=null,o()}}}var d3=null;function f3(o,i){o.stylesheets=null,o.unsuspend!==null&&(o.count++,d3=new Map,i.forEach(Vf,o),d3=null,u3.call(o))}function Vf(o,i){if(!(i.state.loading&4)){var u=d3.get(o);if(u)var g=u.get(null);else{u=new Map,d3.set(o,u);for(var x=o.querySelectorAll("link[data-precedence],style[data-precedence]"),R=0;R"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),fm.exports=zW(),fm.exports}var EB=RW();const EW=z7(EB),MW="modulepreload",TW=function(t){return"/"+t},tL={},An=function(e,n,r){let s=Promise.resolve();if(n&&n.length>0){let m=function(h){return Promise.all(h.map(v=>Promise.resolve(v).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),d=c?.nonce||c?.getAttribute("nonce");s=m(n.map(h=>{if(h=TW(h),h in tL)return;tL[h]=!0;const v=h.endsWith(".css"),b=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${b}`))return;const y=document.createElement("link");if(y.rel=v?"stylesheet":MW,v||(y.as="script"),y.crossOrigin="",y.href=h,d&&y.setAttribute("nonce",d),document.head.appendChild(y),v)return new Promise((O,w)=>{y.addEventListener("load",O),y.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${h}`)))})}))}function l(c){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=c,window.dispatchEvent(d),!d.defaultPrevented)throw c}return s.then(c=>{for(const d of c||[])d.status==="rejected"&&l(d.reason);return e().catch(l)})};var a=WH();const ae=z7(a),MB=yW({__proto__:null,default:ae},[a]);var TB=t=>{throw TypeError(t)},HW=(t,e,n)=>e.has(t)||TB("Cannot "+n),vm=(t,e,n)=>(HW(t,e,"read from private field"),n?n.call(t):e.get(t)),jW=(t,e,n)=>e.has(t)?TB("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),nL="popstate";function rL(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function PW(t={}){function e(r,s){let l=s.state?.masked,{pathname:c,search:d,hash:m}=l||r.location;return I6("",{pathname:c,search:d,hash:m},s.state&&s.state.usr||null,s.state&&s.state.key||"default",l?{pathname:r.location.pathname,search:r.location.search,hash:r.location.hash}:void 0)}function n(r,s){return typeof s=="string"?s:Ni(s)}return IW(e,n,null,t)}function xn(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function Ar(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function LW(){return Math.random().toString(36).substring(2,10)}function aL(t,e){return{usr:t.state,key:t.key,idx:e,masked:t.unstable_mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function I6(t,e,n=null,r,s){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?Rl(e):e,state:n,key:e&&e.key||r||LW(),unstable_mask:s}}function Ni({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Rl(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substring(r),t=t.substring(0,r)),t&&(e.pathname=t)}return e}function IW(t,e,n,r={}){let{window:s=document.defaultView,v5Compat:l=!1}=r,c=s.history,d="POP",m=null,h=v();h==null&&(h=0,c.replaceState({...c.state,idx:h},""));function v(){return(c.state||{idx:null}).idx}function b(){d="POP";let C=v(),z=C==null?null:C-h;h=C,m&&m({action:d,location:S.location,delta:z})}function y(C,z){d="PUSH";let M=rL(C)?C:I6(S.location,C,z);h=v()+1;let T=aL(M,h),H=S.createHref(M.unstable_mask||M);try{c.pushState(T,"",H)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;s.location.assign(H)}l&&m&&m({action:d,location:S.location,delta:1})}function O(C,z){d="REPLACE";let M=rL(C)?C:I6(S.location,C,z);h=v();let T=aL(M,h),H=S.createHref(M.unstable_mask||M);c.replaceState(T,"",H),l&&m&&m({action:d,location:S.location,delta:0})}function w(C){return HB(C)}let S={get action(){return d},get location(){return t(s,c)},listen(C){if(m)throw new Error("A history only accepts one active listener");return s.addEventListener(nL,b),m=C,()=>{s.removeEventListener(nL,b),m=null}},createHref(C){return e(s,C)},createURL:w,encodeLocation(C){let z=w(C);return{pathname:z.pathname,search:z.search,hash:z.hash}},push:y,replace:O,go(C){return c.go(C)}};return S}function HB(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),xn(n,"No window.location.(origin|href) available to create URL");let r=typeof t=="string"?t:Ni(t);return r=r.replace(/ $/,"%20"),!e&&r.startsWith("//")&&(r=n+r),new URL(r,n)}var f6,oL=class{constructor(t){if(jW(this,f6,new Map),t)for(let[e,n]of t)this.set(e,n)}get(t){if(vm(this,f6).has(t))return vm(this,f6).get(t);if(t.defaultValue!==void 0)return t.defaultValue;throw new Error("No value found for context")}set(t,e){vm(this,f6).set(t,e)}};f6=new WeakMap;var _W=new Set(["lazy","caseSensitive","path","id","index","children"]);function VW(t){return _W.has(t)}var BW=new Set(["lazy","caseSensitive","path","id","index","middleware","children"]);function AW(t){return BW.has(t)}function FW(t){return t.index===!0}function _6(t,e,n=[],r={},s=!1){return t.map((l,c)=>{let d=[...n,String(c)],m=typeof l.id=="string"?l.id:d.join("-");if(xn(l.index!==!0||!l.children,"Cannot specify children on an index route"),xn(s||!r[m],`Found a route id collision on id "${m}". Route id's must be globally unique within Data Router usages`),FW(l)){let h={...l,id:m};return r[m]=sL(h,e(h)),h}else{let h={...l,id:m,children:void 0};return r[m]=sL(h,e(h)),l.children&&(h.children=_6(l.children,e,d,r,s)),h}})}function sL(t,e){return Object.assign(t,{...e,...typeof e.lazy=="object"&&e.lazy!=null?{lazy:{...t.lazy,...e.lazy}}:{}})}function Lc(t,e,n="/"){return h6(t,e,n,!1)}function h6(t,e,n,r){let s=typeof e=="string"?Rl(e):e,l=Os(s.pathname||"/",n);if(l==null)return null;let c=jB(t);DW(c);let d=null;for(let m=0;d==null&&m{let v={relativePath:h===void 0?c.path||"":h,caseSensitive:c.caseSensitive===!0,childrenIndex:d,route:c};if(v.relativePath.startsWith("/")){if(!v.relativePath.startsWith(r)&&m)return;xn(v.relativePath.startsWith(r),`Absolute route path "${v.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),v.relativePath=v.relativePath.slice(r.length)}let b=ks([r,v.relativePath]),y=n.concat(v);c.children&&c.children.length>0&&(xn(c.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${b}".`),jB(c.children,e,y,b,m)),!(c.path==null&&!c.index)&&e.push({path:b,score:YW(b,c.index),routesMeta:y})};return t.forEach((c,d)=>{if(c.path===""||!c.path?.includes("?"))l(c,d);else for(let m of PB(c.path))l(c,d,!0,m)}),e}function PB(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,s=n.endsWith("?"),l=n.replace(/\?$/,"");if(r.length===0)return s?[l,""]:[l];let c=PB(r.join("/")),d=[];return d.push(...c.map(m=>m===""?l:[l,m].join("/"))),s&&d.push(...c),d.map(m=>t.startsWith("/")&&m===""?"/":m)}function DW(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:QW(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var UW=/^:[\w-]+$/,qW=3,WW=2,GW=1,XW=10,KW=-2,iL=t=>t==="*";function YW(t,e){let n=t.split("/"),r=n.length;return n.some(iL)&&(r+=KW),e&&(r+=WW),n.filter(s=>!iL(s)).reduce((s,l)=>s+(UW.test(l)?qW:l===""?GW:XW),r)}function QW(t,e){return t.length===e.length&&t.slice(0,-1).every((r,s)=>r===e[s])?t[t.length-1]-e[e.length-1]:0}function ZW(t,e,n=!1){let{routesMeta:r}=t,s={},l="/",c=[];for(let d=0;d{if(v==="*"){let w=d[y]||"";c=l.slice(0,l.length-w.length).replace(/(.)\/+$/,"$1")}const O=d[y];return b&&!O?h[v]=void 0:h[v]=(O||"").replace(/%2F/g,"/"),h},{}),pathname:l,pathnameBase:c,pattern:t}}function JW(t,e=!1,n=!0){Ar(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let r=[],s="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(c,d,m,h,v)=>{if(r.push({paramName:d,isOptional:m!=null}),m){let b=v.charAt(h+c.length);return b&&b!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(r.push({paramName:"*"}),s+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?s+="\\/*$":t!==""&&t!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,e?void 0:"i"),r]}function kW(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return Ar(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function Os(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}function eG({basename:t,pathname:e}){return e==="/"?t:ks([t,e])}var LB=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,GH=t=>LB.test(t);function tG(t,e="/"){let{pathname:n,search:r="",hash:s=""}=typeof t=="string"?Rl(t):t,l;return n?(n=n.replace(/\/\/+/g,"/"),n.startsWith("/")?l=lL(n.substring(1),"/"):l=lL(n,e)):l=e,{pathname:l,search:rG(r),hash:aG(s)}}function lL(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(s=>{s===".."?n.length>1&&n.pop():s!=="."&&n.push(s)}),n.length>1?n.join("/"):"/"}function bm(t,e,n,r){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function IB(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function R7(t){let e=IB(t);return e.map((n,r)=>r===e.length-1?n.pathname:n.pathnameBase)}function su(t,e,n,r=!1){let s;typeof t=="string"?s=Rl(t):(s={...t},xn(!s.pathname||!s.pathname.includes("?"),bm("?","pathname","search",s)),xn(!s.pathname||!s.pathname.includes("#"),bm("#","pathname","hash",s)),xn(!s.search||!s.search.includes("#"),bm("#","search","hash",s)));let l=t===""||s.pathname==="",c=l?"/":s.pathname,d;if(c==null)d=n;else{let b=e.length-1;if(!r&&c.startsWith("..")){let y=c.split("/");for(;y[0]==="..";)y.shift(),b-=1;s.pathname=y.join("/")}d=b>=0?e[b]:"/"}let m=tG(s,d),h=c&&c!=="/"&&c.endsWith("/"),v=(l||c===".")&&n.endsWith("/");return!m.pathname.endsWith("/")&&(h||v)&&(m.pathname+="/"),m}var ks=t=>t.join("/").replace(/\/\/+/g,"/"),nG=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),rG=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,aG=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,iu=class{constructor(t,e,n,r=!1){this.status=t,this.statusText=e||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function V6(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function lu(t){return t.map(e=>e.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var _B=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function VB(t,e){let n=t;if(typeof n!="string"||!LB.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,s=!1;if(_B)try{let l=new URL(window.location.href),c=n.startsWith("//")?new URL(l.protocol+n):new URL(n),d=Os(c.pathname,e);c.origin===l.origin&&d!=null?n=d+c.search+c.hash:s=!0}catch{Ar(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:s,to:n}}var Vc=Symbol("Uninstrumented");function oG(t,e){let n={lazy:[],"lazy.loader":[],"lazy.action":[],"lazy.middleware":[],middleware:[],loader:[],action:[]};t.forEach(s=>s({id:e.id,index:e.index,path:e.path,instrument(l){let c=Object.keys(n);for(let d of c)l[d]&&n[d].push(l[d])}}));let r={};if(typeof e.lazy=="function"&&n.lazy.length>0){let s=j3(n.lazy,e.lazy,()=>{});s&&(r.lazy=s)}if(typeof e.lazy=="object"){let s=e.lazy;["middleware","loader","action"].forEach(l=>{let c=s[l],d=n[`lazy.${l}`];if(typeof c=="function"&&d.length>0){let m=j3(d,c,()=>{});m&&(r.lazy=Object.assign(r.lazy||{},{[l]:m}))}})}return["loader","action"].forEach(s=>{let l=e[s];if(typeof l=="function"&&n[s].length>0){let c=l[Vc]??l,d=j3(n[s],c,(...m)=>cL(m[0]));d&&(s==="loader"&&c.hydrate===!0&&(d.hydrate=!0),d[Vc]=c,r[s]=d)}}),e.middleware&&e.middleware.length>0&&n.middleware.length>0&&(r.middleware=e.middleware.map(s=>{let l=s[Vc]??s,c=j3(n.middleware,l,(...d)=>cL(d[0]));return c?(c[Vc]=l,c):s})),r}function sG(t,e){let n={navigate:[],fetch:[]};if(e.forEach(r=>r({instrument(s){let l=Object.keys(s);for(let c of l)s[c]&&n[c].push(s[c])}})),n.navigate.length>0){let r=t.navigate[Vc]??t.navigate,s=j3(n.navigate,r,(...l)=>{let[c,d]=l;return{to:typeof c=="number"||typeof c=="string"?c:c?Ni(c):".",...uL(t,d??{})}});s&&(s[Vc]=r,t.navigate=s)}if(n.fetch.length>0){let r=t.fetch[Vc]??t.fetch,s=j3(n.fetch,r,(...l)=>{let[c,,d,m]=l;return{href:d??".",fetcherKey:c,...uL(t,m??{})}});s&&(s[Vc]=r,t.fetch=s)}return t}function j3(t,e,n){return t.length===0?null:async(...r)=>{let s=await BB(t,n(...r),()=>e(...r),t.length-1);if(s.type==="error")throw s.value;return s.value}}async function BB(t,e,n,r){let s=t[r],l;if(s){let c,d=async()=>(c?console.error("You cannot call instrumented handlers more than once"):c=BB(t,e,n,r-1),l=await c,xn(l,"Expected a result"),l.type==="error"&&l.value instanceof Error?{status:"error",error:l.value}:{status:"success",error:void 0});try{await s(d,e)}catch(m){console.error("An instrumentation function threw an error:",m)}c||await d(),await c}else try{l={type:"success",value:await n()}}catch(c){l={type:"error",value:c}}return l||{type:"error",value:new Error("No result assigned in instrumentation chain.")}}function cL(t){let{request:e,context:n,params:r,unstable_pattern:s}=t;return{request:iG(e),params:{...r},unstable_pattern:s,context:lG(n)}}function uL(t,e){return{currentUrl:Ni(t.state.location),..."formMethod"in e?{formMethod:e.formMethod}:{},..."formEncType"in e?{formEncType:e.formEncType}:{},..."formData"in e?{formData:e.formData}:{},..."body"in e?{body:e.body}:{}}}function iG(t){return{method:t.method,url:t.url,headers:{get:(...e)=>t.headers.get(...e)}}}function lG(t){if(uG(t)){let e={...t};return Object.freeze(e),e}else return{get:e=>t.get(e)}}var cG=Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function uG(t){if(t===null||typeof t!="object")return!1;const e=Object.getPrototypeOf(t);return e===Object.prototype||e===null||Object.getOwnPropertyNames(e).sort().join("\0")===cG}var AB=["POST","PUT","PATCH","DELETE"],dG=new Set(AB),fG=["GET",...AB],hG=new Set(fG),FB=new Set([301,302,303,307,308]),mG=new Set([307,308]),ym={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},gG={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},k8={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},pG=t=>({hasErrorBoundary:!!t.hasErrorBoundary}),NB="remix-router-transitions",DB=Symbol("ResetLoaderData");function vG(t){const e=t.window?t.window:typeof window<"u"?window:void 0,n=typeof e<"u"&&typeof e.document<"u"&&typeof e.document.createElement<"u";xn(t.routes.length>0,"You must provide a non-empty routes array to createRouter");let r=t.hydrationRouteProperties||[],s=t.mapRouteProperties||pG,l=s;if(t.unstable_instrumentations){let re=t.unstable_instrumentations;l=ue=>({...s(ue),...oG(re.map(ge=>ge.route).filter(Boolean),ue)})}let c={},d=_6(t.routes,l,void 0,c),m,h=t.basename||"/";h.startsWith("/")||(h=`/${h}`);let v=t.dataStrategy||xG,b={...t.future},y=null,O=new Set,w=null,S=null,C=null,z=t.hydrationData!=null,M=Lc(d,t.history.location,h),T=!1,H=null,j,_;if(M==null&&!t.patchRoutesOnNavigation){let re=ws(404,{pathname:t.history.location.pathname}),{matches:ue,route:ge}=Zf(d);j=!0,_=!j,M=ue,H={[ge.id]:re}}else if(M&&!t.hydrationData&&rt(M,d,t.history.location.pathname).active&&(M=null),M)if(M.some(re=>re.route.lazy))j=!1,_=!j;else if(!M.some(re=>XH(re.route)))j=!0,_=!j;else{let re=t.hydrationData?t.hydrationData.loaderData:null,ue=t.hydrationData?t.hydrationData.errors:null,ge=M;if(ue){let Le=M.findIndex(De=>ue[De.route.id]!==void 0);ge=ge.slice(0,Le+1)}_=!1,j=ge.every(Le=>{let De=UB(Le.route,re,ue);return _=_||De.renderFallback,!De.shouldLoad})}else{j=!1,_=!j,M=[];let re=rt(null,d,t.history.location.pathname);re.active&&re.matches&&(T=!0,M=re.matches)}let P,L={historyAction:t.history.action,location:t.history.location,matches:M,initialized:j,renderFallback:_,navigation:ym,restoreScrollPosition:t.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:t.hydrationData&&t.hydrationData.loaderData||{},actionData:t.hydrationData&&t.hydrationData.actionData||null,errors:t.hydrationData&&t.hydrationData.errors||H,fetchers:new Map,blockers:new Map},V="POP",D=null,F=!1,X,Q=!1,Y=new Map,q=null,N=!1,U=!1,K=new Set,Z=new Map,te=0,B=-1,W=new Map,J=new Set,se=new Map,ie=new Map,le=new Set,ce=new Map,he,Oe=null;function fe(){if(y=t.history.listen(({action:re,location:ue,delta:ge})=>{if(he){he(),he=void 0;return}Ar(ce.size===0||ge!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let Le=$t({currentLocation:L.location,nextLocation:ue,historyAction:re});if(Le&&ge!=null){let De=new Promise(it=>{he=it});t.history.go(ge*-1),Ct(Le,{state:"blocked",location:ue,proceed(){Ct(Le,{state:"proceeding",proceed:void 0,reset:void 0,location:ue}),De.then(()=>t.history.go(ge))},reset(){let it=new Map(L.blockers);it.set(Le,k8),xe({blockers:it})}}),D?.resolve(),D=null;return}return Me(re,ue)}),n){FG(e,Y);let re=()=>NG(e,Y);e.addEventListener("pagehide",re),q=()=>e.removeEventListener("pagehide",re)}return L.initialized||Me("POP",L.location,{initialHydration:!0}),P}function ye(){y&&y(),q&&q(),O.clear(),X&&X.abort(),L.fetchers.forEach((re,ue)=>ft(ue)),L.blockers.forEach((re,ue)=>Ft(ue))}function ve(re){return O.add(re),()=>O.delete(re)}function xe(re,ue={}){re.matches&&(re.matches=re.matches.map(De=>{let it=c[De.route.id],et=De.route;return et.element!==it.element||et.errorElement!==it.errorElement||et.hydrateFallbackElement!==it.hydrateFallbackElement?{...De,route:it}:De})),L={...L,...re};let ge=[],Le=[];L.fetchers.forEach((De,it)=>{De.state==="idle"&&(le.has(it)?ge.push(it):Le.push(it))}),le.forEach(De=>{!L.fetchers.has(De)&&!Z.has(De)&&ge.push(De)}),[...O].forEach(De=>De(L,{deletedFetchers:ge,newErrors:re.errors??null,viewTransitionOpts:ue.viewTransitionOpts,flushSync:ue.flushSync===!0})),ge.forEach(De=>ft(De)),Le.forEach(De=>L.fetchers.delete(De))}function Re(re,ue,{flushSync:ge}={}){let Le=L.actionData!=null&&L.navigation.formMethod!=null&&Aa(L.navigation.formMethod)&&L.navigation.state==="loading"&&re.state?._isRedirect!==!0,De;ue.actionData?Object.keys(ue.actionData).length>0?De=ue.actionData:De=null:Le?De=L.actionData:De=null;let it=ue.loaderData?wL(L.loaderData,ue.loaderData,ue.matches||[],ue.errors):L.loaderData,et=L.blockers;et.size>0&&(et=new Map(et),et.forEach((bt,Ue)=>et.set(Ue,k8)));let xt=N?!1:vt(re,ue.matches||L.matches),wt=F===!0||L.navigation.formMethod!=null&&Aa(L.navigation.formMethod)&&re.state?._isRedirect!==!0;m&&(d=m,m=void 0),N||V==="POP"||(V==="PUSH"?t.history.push(re,re.state):V==="REPLACE"&&t.history.replace(re,re.state));let Xe;if(V==="POP"){let bt=Y.get(L.location.pathname);bt&&bt.has(re.pathname)?Xe={currentLocation:L.location,nextLocation:re}:Y.has(re.pathname)&&(Xe={currentLocation:re,nextLocation:L.location})}else if(Q){let bt=Y.get(L.location.pathname);bt?bt.add(re.pathname):(bt=new Set([re.pathname]),Y.set(L.location.pathname,bt)),Xe={currentLocation:L.location,nextLocation:re}}xe({...ue,actionData:De,loaderData:it,historyAction:V,location:re,initialized:!0,renderFallback:!1,navigation:ym,revalidation:"idle",restoreScrollPosition:xt,preventScrollReset:wt,blockers:et},{viewTransitionOpts:Xe,flushSync:ge===!0}),V="POP",F=!1,Q=!1,N=!1,U=!1,D?.resolve(),D=null,Oe?.resolve(),Oe=null}async function $e(re,ue){if(D?.resolve(),D=null,typeof re=="number"){D||(D=$L());let Nt=D.promise;return t.history.go(re),Nt}let ge=Rg(L.location,L.matches,h,re,ue?.fromRouteId,ue?.relative),{path:Le,submission:De,error:it}=dL(!1,ge,ue),et;ue?.unstable_mask&&(et={pathname:"",search:"",hash:"",...typeof ue.unstable_mask=="string"?Rl(ue.unstable_mask):{...L.location.unstable_mask,...ue.unstable_mask}});let xt=L.location,wt=I6(xt,Le,ue&&ue.state,void 0,et);wt={...wt,...t.history.encodeLocation(wt)};let Xe=ue&&ue.replace!=null?ue.replace:void 0,bt="PUSH";Xe===!0?bt="REPLACE":Xe===!1||De!=null&&Aa(De.formMethod)&&De.formAction===L.location.pathname+L.location.search&&(bt="REPLACE");let Ue=ue&&"preventScrollReset"in ue?ue.preventScrollReset===!0:void 0,St=(ue&&ue.flushSync)===!0,Ht=$t({currentLocation:xt,nextLocation:wt,historyAction:bt});if(Ht){Ct(Ht,{state:"blocked",location:wt,proceed(){Ct(Ht,{state:"proceeding",proceed:void 0,reset:void 0,location:wt}),$e(re,ue)},reset(){let Nt=new Map(L.blockers);Nt.set(Ht,k8),xe({blockers:Nt})}});return}await Me(bt,wt,{submission:De,pendingError:it,preventScrollReset:Ue,replace:ue&&ue.replace,enableViewTransition:ue&&ue.viewTransition,flushSync:St,callSiteDefaultShouldRevalidate:ue&&ue.unstable_defaultShouldRevalidate})}function _e(){Oe||(Oe=$L()),ct(),xe({revalidation:"loading"});let re=Oe.promise;return L.navigation.state==="submitting"?re:L.navigation.state==="idle"?(Me(L.historyAction,L.location,{startUninterruptedRevalidation:!0}),re):(Me(V||L.historyAction,L.navigation.location,{overrideNavigation:L.navigation,enableViewTransition:Q===!0}),re)}async function Me(re,ue,ge){X&&X.abort(),X=null,V=re,N=(ge&&ge.startUninterruptedRevalidation)===!0,gt(L.location,L.matches),F=(ge&&ge.preventScrollReset)===!0,Q=(ge&&ge.enableViewTransition)===!0;let Le=m||d,De=ge&&ge.overrideNavigation,it=ge?.initialHydration&&L.matches&&L.matches.length>0&&!T?L.matches:Lc(Le,ue,h),et=(ge&&ge.flushSync)===!0;if(it&&L.initialized&&!U&&TG(L.location,ue)&&!(ge&&ge.submission&&Aa(ge.submission.formMethod))){Re(ue,{matches:it},{flushSync:et});return}let xt=rt(it,Le,ue.pathname);if(xt.active&&xt.matches&&(it=xt.matches),!it){let{error:Kt,notFoundMatches:kt,route:Gt}=Vt(ue.pathname);Re(ue,{matches:kt,loaderData:{},errors:{[Gt.id]:Kt}},{flushSync:et});return}X=new AbortController;let wt=H3(t.history,ue,X.signal,ge&&ge.submission),Xe=t.getContext?await t.getContext():new oL,bt;if(ge&&ge.pendingError)bt=[Ic(it).route.id,{type:"error",error:ge.pendingError}];else if(ge&&ge.submission&&Aa(ge.submission.formMethod)){let Kt=await Pe(wt,ue,ge.submission,it,Xe,xt.active,ge&&ge.initialHydration===!0,{replace:ge.replace,flushSync:et});if(Kt.shortCircuited)return;if(Kt.pendingActionResult){let[kt,Gt]=Kt.pendingActionResult;if(ko(Gt)&&V6(Gt.error)&&Gt.error.status===404){X=null,Re(ue,{matches:Kt.matches,loaderData:{},errors:{[kt]:Gt.error}});return}}it=Kt.matches||it,bt=Kt.pendingActionResult,De=wm(ue,ge.submission),et=!1,xt.active=!1,wt=H3(t.history,wt.url,wt.signal)}let{shortCircuited:Ue,matches:St,loaderData:Ht,errors:Nt}=await Ae(wt,ue,it,Xe,xt.active,De,ge&&ge.submission,ge&&ge.fetcherSubmission,ge&&ge.replace,ge&&ge.initialHydration===!0,et,bt,ge&&ge.callSiteDefaultShouldRevalidate);Ue||(X=null,Re(ue,{matches:St||it,...OL(bt),loaderData:Ht,errors:Nt}))}async function Pe(re,ue,ge,Le,De,it,et,xt={}){ct();let wt=BG(ue,ge);if(xe({navigation:wt},{flushSync:xt.flushSync===!0}),it){let Ue=await Ne(Le,ue.pathname,re.signal);if(Ue.type==="aborted")return{shortCircuited:!0};if(Ue.type==="error"){if(Ue.partialMatches.length===0){let{matches:Ht,route:Nt}=Zf(d);return{matches:Ht,pendingActionResult:[Nt.id,{type:"error",error:Ue.error}]}}let St=Ic(Ue.partialMatches).route.id;return{matches:Ue.partialMatches,pendingActionResult:[St,{type:"error",error:Ue.error}]}}else if(Ue.matches)Le=Ue.matches;else{let{notFoundMatches:St,error:Ht,route:Nt}=Vt(ue.pathname);return{matches:St,pendingActionResult:[Nt.id,{type:"error",error:Ht}]}}}let Xe,bt=w5(Le,ue);if(!bt.route.action&&!bt.route.lazy)Xe={type:"error",error:ws(405,{method:re.method,pathname:ue.pathname,routeId:bt.route.id})};else{let Ue=V3(l,c,re,Le,bt,et?[]:r,De),St=await zt(re,Ue,De,null);if(Xe=St[bt.route.id],!Xe){for(let Ht of Le)if(St[Ht.route.id]){Xe=St[Ht.route.id];break}}if(re.signal.aborted)return{shortCircuited:!0}}if(g4(Xe)){let Ue;return xt&&xt.replace!=null?Ue=xt.replace:Ue=vL(Xe.response.headers.get("Location"),new URL(re.url),h,t.history)===L.location.pathname+L.location.search,await Ot(re,Xe,!0,{submission:ge,replace:Ue}),{shortCircuited:!0}}if(ko(Xe)){let Ue=Ic(Le,bt.route.id);return(xt&&xt.replace)!==!0&&(V="PUSH"),{matches:Le,pendingActionResult:[Ue.route.id,Xe,bt.route.id]}}return{matches:Le,pendingActionResult:[bt.route.id,Xe]}}async function Ae(re,ue,ge,Le,De,it,et,xt,wt,Xe,bt,Ue,St){let Ht=it||wm(ue,et),Nt=et||xt||SL(Ht),Kt=!N&&!Xe;if(De){if(Kt){let Dn=ht(Ue);xe({navigation:Ht,...Dn!==void 0?{actionData:Dn}:{}},{flushSync:bt})}let on=await Ne(ge,ue.pathname,re.signal);if(on.type==="aborted")return{shortCircuited:!0};if(on.type==="error"){if(on.partialMatches.length===0){let{matches:$r,route:or}=Zf(d);return{matches:$r,loaderData:{},errors:{[or.id]:on.error}}}let Dn=Ic(on.partialMatches).route.id;return{matches:on.partialMatches,loaderData:{},errors:{[Dn]:on.error}}}else if(on.matches)ge=on.matches;else{let{error:Dn,notFoundMatches:$r,route:or}=Vt(ue.pathname);return{matches:$r,loaderData:{},errors:{[or.id]:Dn}}}}let kt=m||d,{dsMatches:Gt,revalidatingFetchers:Mn}=fL(re,Le,l,c,t.history,L,ge,Nt,ue,Xe?[]:r,Xe===!0,U,K,le,se,J,kt,h,t.patchRoutesOnNavigation!=null,Ue,St);if(B=++te,!t.dataStrategy&&!Gt.some(on=>on.shouldLoad)&&!Gt.some(on=>on.route.middleware&&on.route.middleware.length>0)&&Mn.length===0){let on=en();return Re(ue,{matches:ge,loaderData:{},errors:Ue&&ko(Ue[1])?{[Ue[0]]:Ue[1].error}:null,...OL(Ue),...on?{fetchers:new Map(L.fetchers)}:{}},{flushSync:bt}),{shortCircuited:!0}}if(Kt){let on={};if(!De){on.navigation=Ht;let Dn=ht(Ue);Dn!==void 0&&(on.actionData=Dn)}Mn.length>0&&(on.fetchers=Ve(Mn)),xe(on,{flushSync:bt})}Mn.forEach(on=>{Ye(on.key),on.controller&&Z.set(on.key,on.controller)});let $n=()=>Mn.forEach(on=>Ye(on.key));X&&X.signal.addEventListener("abort",$n);let{loaderResults:Kr,fetcherResults:Yr}=await pt(Gt,Mn,re,Le);if(re.signal.aborted)return{shortCircuited:!0};X&&X.signal.removeEventListener("abort",$n),Mn.forEach(on=>Z.delete(on.key));let bn=Jf(Kr);if(bn)return await Ot(re,bn.result,!0,{replace:wt}),{shortCircuited:!0};if(bn=Jf(Yr),bn)return J.add(bn.key),await Ot(re,bn.result,!0,{replace:wt}),{shortCircuited:!0};let{loaderData:Nr,errors:co}=yL(L,ge,Kr,Ue,Mn,Yr);Xe&&L.errors&&(co={...L.errors,...co});let Dt=en(),br=It(B),yr=Dt||br||Mn.length>0;return{matches:ge,loaderData:Nr,errors:co,...yr?{fetchers:new Map(L.fetchers)}:{}}}function ht(re){if(re&&!ko(re[1]))return{[re[0]]:re[1].data};if(L.actionData)return Object.keys(L.actionData).length===0?null:L.actionData}function Ve(re){return re.forEach(ue=>{let ge=L.fetchers.get(ue.key),Le=e6(void 0,ge?ge.data:void 0);L.fetchers.set(ue.key,Le)}),new Map(L.fetchers)}async function Ze(re,ue,ge,Le){Ye(re);let De=(Le&&Le.flushSync)===!0,it=m||d,et=Rg(L.location,L.matches,h,ge,ue,Le?.relative),xt=Lc(it,et,h),wt=rt(xt,it,et);if(wt.active&&wt.matches&&(xt=wt.matches),!xt){ut(re,ue,ws(404,{pathname:et}),{flushSync:De});return}let{path:Xe,submission:bt,error:Ue}=dL(!0,et,Le);if(Ue){ut(re,ue,Ue,{flushSync:De});return}let St=t.getContext?await t.getContext():new oL,Ht=(Le&&Le.preventScrollReset)===!0;if(bt&&Aa(bt.formMethod)){await st(re,ue,Xe,xt,St,wt.active,De,Ht,bt,Le&&Le.unstable_defaultShouldRevalidate);return}se.set(re,{routeId:ue,path:Xe}),await mt(re,ue,Xe,xt,St,wt.active,De,Ht,bt)}async function st(re,ue,ge,Le,De,it,et,xt,wt,Xe){ct(),se.delete(re);let bt=L.fetchers.get(re);yt(re,AG(wt,bt),{flushSync:et});let Ue=new AbortController,St=H3(t.history,ge,Ue.signal,wt);if(it){let _n=await Ne(Le,new URL(St.url).pathname,St.signal,re);if(_n.type==="aborted")return;if(_n.type==="error"){ut(re,ue,_n.error,{flushSync:et});return}else if(_n.matches)Le=_n.matches;else{ut(re,ue,ws(404,{pathname:ge}),{flushSync:et});return}}let Ht=w5(Le,ge);if(!Ht.route.action&&!Ht.route.lazy){let _n=ws(405,{method:wt.formMethod,pathname:ge,routeId:ue});ut(re,ue,_n,{flushSync:et});return}Z.set(re,Ue);let Nt=te,Kt=V3(l,c,St,Le,Ht,r,De),kt=await zt(St,Kt,De,re),Gt=kt[Ht.route.id];if(!Gt){for(let _n of Kt)if(kt[_n.route.id]){Gt=kt[_n.route.id];break}}if(St.signal.aborted){Z.get(re)===Ue&&Z.delete(re);return}if(le.has(re)){if(g4(Gt)||ko(Gt)){yt(re,pl(void 0));return}}else{if(g4(Gt))if(Z.delete(re),B>Nt){yt(re,pl(void 0));return}else return J.add(re),yt(re,e6(wt)),Ot(St,Gt,!1,{fetcherSubmission:wt,preventScrollReset:xt});if(ko(Gt)){ut(re,ue,Gt.error);return}}let Mn=L.navigation.location||L.location,$n=H3(t.history,Mn,Ue.signal),Kr=m||d,Yr=L.navigation.state!=="idle"?Lc(Kr,L.navigation.location,h):L.matches;xn(Yr,"Didn't find any matches after fetcher action");let bn=++te;W.set(re,bn);let Nr=e6(wt,Gt.data);L.fetchers.set(re,Nr);let{dsMatches:co,revalidatingFetchers:Dt}=fL($n,De,l,c,t.history,L,Yr,wt,Mn,r,!1,U,K,le,se,J,Kr,h,t.patchRoutesOnNavigation!=null,[Ht.route.id,Gt],Xe);Dt.filter(_n=>_n.key!==re).forEach(_n=>{let Rs=_n.key,Ho=L.fetchers.get(Rs),jo=e6(void 0,Ho?Ho.data:void 0);L.fetchers.set(Rs,jo),Ye(Rs),_n.controller&&Z.set(Rs,_n.controller)}),xe({fetchers:new Map(L.fetchers)});let br=()=>Dt.forEach(_n=>Ye(_n.key));Ue.signal.addEventListener("abort",br);let{loaderResults:yr,fetcherResults:on}=await pt(co,Dt,$n,De);if(Ue.signal.aborted)return;if(Ue.signal.removeEventListener("abort",br),W.delete(re),Z.delete(re),Dt.forEach(_n=>Z.delete(_n.key)),L.fetchers.has(re)){let _n=pl(Gt.data);L.fetchers.set(re,_n)}let Dn=Jf(yr);if(Dn)return Ot($n,Dn.result,!1,{preventScrollReset:xt});if(Dn=Jf(on),Dn)return J.add(Dn.key),Ot($n,Dn.result,!1,{preventScrollReset:xt});let{loaderData:$r,errors:or}=yL(L,Yr,yr,void 0,Dt,on);It(bn),L.navigation.state==="loading"&&bn>B?(xn(V,"Expected pending action"),X&&X.abort(),Re(L.navigation.location,{matches:Yr,loaderData:$r,errors:or,fetchers:new Map(L.fetchers)})):(xe({errors:or,loaderData:wL(L.loaderData,$r,Yr,or),fetchers:new Map(L.fetchers)}),U=!1)}async function mt(re,ue,ge,Le,De,it,et,xt,wt){let Xe=L.fetchers.get(re);yt(re,e6(wt,Xe?Xe.data:void 0),{flushSync:et});let bt=new AbortController,Ue=H3(t.history,ge,bt.signal);if(it){let Gt=await Ne(Le,new URL(Ue.url).pathname,Ue.signal,re);if(Gt.type==="aborted")return;if(Gt.type==="error"){ut(re,ue,Gt.error,{flushSync:et});return}else if(Gt.matches)Le=Gt.matches;else{ut(re,ue,ws(404,{pathname:ge}),{flushSync:et});return}}let St=w5(Le,ge);Z.set(re,bt);let Ht=te,Nt=V3(l,c,Ue,Le,St,r,De),kt=(await zt(Ue,Nt,De,re))[St.route.id];if(Z.get(re)===bt&&Z.delete(re),!Ue.signal.aborted){if(le.has(re)){yt(re,pl(void 0));return}if(g4(kt))if(B>Ht){yt(re,pl(void 0));return}else{J.add(re),await Ot(Ue,kt,!1,{preventScrollReset:xt});return}if(ko(kt)){ut(re,ue,kt.error);return}yt(re,pl(kt.data))}}async function Ot(re,ue,ge,{submission:Le,fetcherSubmission:De,preventScrollReset:it,replace:et}={}){ge||(D?.resolve(),D=null),ue.response.headers.has("X-Remix-Revalidate")&&(U=!0);let xt=ue.response.headers.get("Location");xn(xt,"Expected a Location header on the redirect Response"),xt=vL(xt,new URL(re.url),h,t.history);let wt=I6(L.location,xt,{_isRedirect:!0});if(n){let Nt=!1;if(ue.response.headers.has("X-Remix-Reload-Document"))Nt=!0;else if(GH(xt)){const Kt=HB(xt,!0);Nt=Kt.origin!==e.location.origin||Os(Kt.pathname,h)==null}if(Nt){et?e.location.replace(xt):e.location.assign(xt);return}}X=null;let Xe=et===!0||ue.response.headers.has("X-Remix-Replace")?"REPLACE":"PUSH",{formMethod:bt,formAction:Ue,formEncType:St}=L.navigation;!Le&&!De&&bt&&Ue&&St&&(Le=SL(L.navigation));let Ht=Le||De;if(mG.has(ue.response.status)&&Ht&&Aa(Ht.formMethod))await Me(Xe,wt,{submission:{...Ht,formAction:xt},preventScrollReset:it||F,enableViewTransition:ge?Q:void 0});else{let Nt=wm(wt,Le);await Me(Xe,wt,{overrideNavigation:Nt,fetcherSubmission:De,preventScrollReset:it||F,enableViewTransition:ge?Q:void 0})}}async function zt(re,ue,ge,Le){let De,it={};try{De=await $G(v,re,ue,Le,ge,!1)}catch(et){return ue.filter(xt=>xt.shouldLoad).forEach(xt=>{it[xt.route.id]={type:"error",error:et}}),it}if(re.signal.aborted)return it;if(!Aa(re.method))for(let et of ue){if(De[et.route.id]?.type==="error")break;!De.hasOwnProperty(et.route.id)&&!L.loaderData.hasOwnProperty(et.route.id)&&(!L.errors||!L.errors.hasOwnProperty(et.route.id))&&et.shouldCallHandler()&&(De[et.route.id]={type:"error",result:new Error(`No result returned from dataStrategy for route ${et.route.id}`)})}for(let[et,xt]of Object.entries(De))if(LG(xt)){let wt=xt.result;it[et]={type:"redirect",response:EG(wt,re,et,ue,h)}}else it[et]=await RG(xt);return it}async function pt(re,ue,ge,Le){let De=zt(ge,re,Le,null),it=Promise.all(ue.map(async wt=>{if(wt.matches&&wt.match&&wt.request&&wt.controller){let bt=(await zt(wt.request,wt.matches,Le,wt.key))[wt.match.route.id];return{[wt.key]:bt}}else return Promise.resolve({[wt.key]:{type:"error",error:ws(404,{pathname:wt.path})}})})),et=await De,xt=(await it).reduce((wt,Xe)=>Object.assign(wt,Xe),{});return{loaderResults:et,fetcherResults:xt}}function ct(){U=!0,se.forEach((re,ue)=>{Z.has(ue)&&K.add(ue),Ye(ue)})}function yt(re,ue,ge={}){L.fetchers.set(re,ue),xe({fetchers:new Map(L.fetchers)},{flushSync:(ge&&ge.flushSync)===!0})}function ut(re,ue,ge,Le={}){let De=Ic(L.matches,ue);ft(re),xe({errors:{[De.route.id]:ge},fetchers:new Map(L.fetchers)},{flushSync:(Le&&Le.flushSync)===!0})}function tt(re){return ie.set(re,(ie.get(re)||0)+1),le.has(re)&&le.delete(re),L.fetchers.get(re)||gG}function dt(re,ue){Ye(re,ue?.reason),yt(re,pl(null))}function ft(re){let ue=L.fetchers.get(re);Z.has(re)&&!(ue&&ue.state==="loading"&&W.has(re))&&Ye(re),se.delete(re),W.delete(re),J.delete(re),le.delete(re),K.delete(re),L.fetchers.delete(re)}function nt(re){let ue=(ie.get(re)||0)-1;ue<=0?(ie.delete(re),le.add(re)):ie.set(re,ue),xe({fetchers:new Map(L.fetchers)})}function Ye(re,ue){let ge=Z.get(re);ge&&(ge.abort(ue),Z.delete(re))}function Pt(re){for(let ue of re){let ge=tt(ue),Le=pl(ge.data);L.fetchers.set(ue,Le)}}function en(){let re=[],ue=!1;for(let ge of J){let Le=L.fetchers.get(ge);xn(Le,`Expected fetcher: ${ge}`),Le.state==="loading"&&(J.delete(ge),re.push(ge),ue=!0)}return Pt(re),ue}function It(re){let ue=[];for(let[ge,Le]of W)if(Le0}function vn(re,ue){let ge=L.blockers.get(re)||k8;return ce.get(re)!==ue&&ce.set(re,ue),ge}function Ft(re){L.blockers.delete(re),ce.delete(re)}function Ct(re,ue){let ge=L.blockers.get(re)||k8;xn(ge.state==="unblocked"&&ue.state==="blocked"||ge.state==="blocked"&&ue.state==="blocked"||ge.state==="blocked"&&ue.state==="proceeding"||ge.state==="blocked"&&ue.state==="unblocked"||ge.state==="proceeding"&&ue.state==="unblocked",`Invalid blocker state transition: ${ge.state} -> ${ue.state}`);let Le=new Map(L.blockers);Le.set(re,ue),xe({blockers:Le})}function $t({currentLocation:re,nextLocation:ue,historyAction:ge}){if(ce.size===0)return;ce.size>1&&Ar(!1,"A router only supports one blocker at a time");let Le=Array.from(ce.entries()),[De,it]=Le[Le.length-1],et=L.blockers.get(De);if(!(et&&et.state==="proceeding")&&it({currentLocation:re,nextLocation:ue,historyAction:ge}))return De}function Vt(re){let ue=ws(404,{pathname:re}),ge=m||d,{matches:Le,route:De}=Zf(ge);return{notFoundMatches:Le,route:De,error:ue}}function Jt(re,ue,ge){if(w=re,C=ue,S=ge||null,!z&&L.navigation===ym){z=!0;let Le=vt(L.location,L.matches);Le!=null&&xe({restoreScrollPosition:Le})}return()=>{w=null,C=null,S=null}}function lt(re,ue){return S&&S(re,ue.map(Le=>NW(Le,L.loaderData)))||re.key}function gt(re,ue){if(w&&C){let ge=lt(re,ue);w[ge]=C()}}function vt(re,ue){if(w){let ge=lt(re,ue),Le=w[ge];if(typeof Le=="number")return Le}return null}function rt(re,ue,ge){if(t.patchRoutesOnNavigation)if(re){if(Object.keys(re[0].params).length>0)return{active:!0,matches:h6(ue,ge,h,!0)}}else return{active:!0,matches:h6(ue,ge,h,!0)||[]};return{active:!1,matches:null}}async function Ne(re,ue,ge,Le){if(!t.patchRoutesOnNavigation)return{type:"success",matches:re};let De=re;for(;;){let it=m==null,et=m||d,xt=c;try{await t.patchRoutesOnNavigation({signal:ge,path:ue,matches:De,fetcherKey:Le,patch:(bt,Ue)=>{ge.aborted||hL(bt,Ue,et,xt,l,!1)}})}catch(bt){return{type:"error",error:bt,partialMatches:De}}finally{it&&!ge.aborted&&(d=[...d])}if(ge.aborted)return{type:"aborted"};let wt=Lc(et,ue,h),Xe=null;if(wt){if(Object.keys(wt[0].params).length===0)return{type:"success",matches:wt};if(Xe=h6(et,ue,h,!0),!(Xe&&De.lengthge.route.id===ue[Le].route.id)}function Rt(re){c={},m=_6(re,l,void 0,c)}function at(re,ue,ge=!1){let Le=m==null;hL(re,ue,m||d,c,l,ge),Le&&(d=[...d],xe({}))}return P={get basename(){return h},get future(){return b},get state(){return L},get routes(){return d},get window(){return e},initialize:fe,subscribe:ve,enableScrollRestoration:Jt,navigate:$e,fetch:Ze,revalidate:_e,createHref:re=>t.history.createHref(re),encodeLocation:re=>t.history.encodeLocation(re),getFetcher:tt,resetFetcher:dt,deleteFetcher:nt,dispose:ye,getBlocker:vn,deleteBlocker:Ft,patchRoutes:at,_internalFetchControllers:Z,_internalSetRoutes:Rt,_internalSetStateDoNotUseOrYouWillBreakYourApp(re){xe(re)}},t.unstable_instrumentations&&(P=sG(P,t.unstable_instrumentations.map(re=>re.router).filter(Boolean))),P}function bG(t){return t!=null&&("formData"in t&&t.formData!=null||"body"in t&&t.body!==void 0)}function Rg(t,e,n,r,s,l){let c,d;if(s){c=[];for(let h of e)if(c.push(h),h.route.id===s){d=h;break}}else c=e,d=e[e.length-1];let m=su(r||".",R7(c),Os(t.pathname,n)||t.pathname,l==="path");if(r==null&&(m.search=t.search,m.hash=t.hash),(r==null||r===""||r===".")&&d){let h=YH(m.search);if(d.route.index&&!h)m.search=m.search?m.search.replace(/^\?/,"?index&"):"?index";else if(!d.route.index&&h){let v=new URLSearchParams(m.search),b=v.getAll("index");v.delete("index"),b.filter(O=>O).forEach(O=>v.append("index",O));let y=v.toString();m.search=y?`?${y}`:""}}return n!=="/"&&(m.pathname=eG({basename:n,pathname:m.pathname})),Ni(m)}function dL(t,e,n){if(!n||!bG(n))return{path:e};if(n.formMethod&&!VG(n.formMethod))return{path:e,error:ws(405,{method:n.formMethod})};let r=()=>({path:e,error:ws(400,{type:"invalid-body"})}),l=(n.formMethod||"get").toUpperCase(),c=YB(e);if(n.body!==void 0){if(n.formEncType==="text/plain"){if(!Aa(l))return r();let b=typeof n.body=="string"?n.body:n.body instanceof FormData||n.body instanceof URLSearchParams?Array.from(n.body.entries()).reduce((y,[O,w])=>`${y}${O}=${w} +`,""):String(n.body);return{path:e,submission:{formMethod:l,formAction:c,formEncType:n.formEncType,formData:void 0,json:void 0,text:b}}}else if(n.formEncType==="application/json"){if(!Aa(l))return r();try{let b=typeof n.body=="string"?JSON.parse(n.body):n.body;return{path:e,submission:{formMethod:l,formAction:c,formEncType:n.formEncType,formData:void 0,json:b,text:void 0}}}catch{return r()}}}xn(typeof FormData=="function","FormData is not available in this environment");let d,m;if(n.formData)d=Mg(n.formData),m=n.formData;else if(n.body instanceof FormData)d=Mg(n.body),m=n.body;else if(n.body instanceof URLSearchParams)d=n.body,m=bL(d);else if(n.body==null)d=new URLSearchParams,m=new FormData;else try{d=new URLSearchParams(n.body),m=bL(d)}catch{return r()}let h={formMethod:l,formAction:c,formEncType:n&&n.formEncType||"application/x-www-form-urlencoded",formData:m,json:void 0,text:void 0};if(Aa(h.formMethod))return{path:e,submission:h};let v=Rl(e);return t&&v.search&&YH(v.search)&&d.append("index",""),v.search=`?${d}`,{path:Ni(v),submission:h}}function fL(t,e,n,r,s,l,c,d,m,h,v,b,y,O,w,S,C,z,M,T,H){let j=T?ko(T[1])?T[1].error:T[1].data:void 0,_=s.createURL(l.location),P=s.createURL(m),L;if(v&&l.errors){let q=Object.keys(l.errors)[0];L=c.findIndex(N=>N.route.id===q)}else if(T&&ko(T[1])){let q=T[0];L=c.findIndex(N=>N.route.id===q)-1}let V=T?T[1].statusCode:void 0,D=V&&V>=400,F={currentUrl:_,currentParams:l.matches[0]?.params||{},nextUrl:P,nextParams:c[0].params,...d,actionResult:j,actionStatus:V},X=lu(c),Q=c.map((q,N)=>{let{route:U}=q,K=null;if(L!=null&&N>L)K=!1;else if(U.lazy)K=!0;else if(!XH(U))K=!1;else if(v){let{shouldLoad:W}=UB(U,l.loaderData,l.errors);K=W}else yG(l.loaderData,l.matches[N],q)&&(K=!0);if(K!==null)return Eg(n,r,t,X,q,h,e,K);let Z=!1;typeof H=="boolean"?Z=H:D?Z=!1:(b||_.pathname+_.search===P.pathname+P.search||_.search!==P.search||wG(l.matches[N],q))&&(Z=!0);let te={...F,defaultShouldRevalidate:Z},B=O6(q,te);return Eg(n,r,t,X,q,h,e,B,te,H)}),Y=[];return w.forEach((q,N)=>{if(v||!c.some(se=>se.route.id===q.routeId)||O.has(N))return;let U=l.fetchers.get(N),K=U&&U.state!=="idle"&&U.data===void 0,Z=Lc(C,q.path,z);if(!Z){if(M&&K)return;Y.push({key:N,routeId:q.routeId,path:q.path,matches:null,match:null,request:null,controller:null});return}if(S.has(N))return;let te=w5(Z,q.path),B=new AbortController,W=H3(s,q.path,B.signal),J=null;if(y.has(N))y.delete(N),J=V3(n,r,W,Z,te,h,e);else if(K)b&&(J=V3(n,r,W,Z,te,h,e));else{let se;typeof H=="boolean"?se=H:D?se=!1:se=b;let ie={...F,defaultShouldRevalidate:se};O6(te,ie)&&(J=V3(n,r,W,Z,te,h,e,ie))}J&&Y.push({key:N,routeId:q.routeId,path:q.path,matches:J,match:te,request:W,controller:B})}),{dsMatches:Q,revalidatingFetchers:Y}}function XH(t){return t.loader!=null||t.middleware!=null&&t.middleware.length>0}function UB(t,e,n){if(t.lazy)return{shouldLoad:!0,renderFallback:!0};if(!XH(t))return{shouldLoad:!1,renderFallback:!1};let r=e!=null&&t.id in e,s=n!=null&&n[t.id]!==void 0;if(!r&&s)return{shouldLoad:!1,renderFallback:!1};if(typeof t.loader=="function"&&t.loader.hydrate===!0)return{shouldLoad:!0,renderFallback:!r};let l=!r&&!s;return{shouldLoad:l,renderFallback:l}}function yG(t,e,n){let r=!e||n.route.id!==e.route.id,s=!t.hasOwnProperty(n.route.id);return r||s}function wG(t,e){let n=t.route.path;return t.pathname!==e.pathname||n!=null&&n.endsWith("*")&&t.params["*"]!==e.params["*"]}function O6(t,e){if(t.route.shouldRevalidate){let n=t.route.shouldRevalidate(e);if(typeof n=="boolean")return n}return e.defaultShouldRevalidate}function hL(t,e,n,r,s,l){let c;if(t){let h=r[t];xn(h,`No route found to patch children into: routeId = ${t}`),h.children||(h.children=[]),c=h.children}else c=n;let d=[],m=[];if(e.forEach(h=>{let v=c.find(b=>qB(h,b));v?m.push({existingRoute:v,newRoute:h}):d.push(h)}),d.length>0){let h=_6(d,s,[t||"_","patch",String(c?.length||"0")],r);c.push(...h)}if(l&&m.length>0)for(let h=0;he.children?.some(s=>qB(n,s)))??!1:!1}var mL=new WeakMap,WB=({key:t,route:e,manifest:n,mapRouteProperties:r})=>{let s=n[e.id];if(xn(s,"No route found in manifest"),!s.lazy||typeof s.lazy!="object")return;let l=s.lazy[t];if(!l)return;let c=mL.get(s);c||(c={},mL.set(s,c));let d=c[t];if(d)return d;let m=(async()=>{let h=VW(t),b=s[t]!==void 0&&t!=="hasErrorBoundary";if(h)Ar(!h,"Route property "+t+" is not a supported lazy route property. This property will be ignored."),c[t]=Promise.resolve();else if(b)Ar(!1,`Route "${s.id}" has a static property "${t}" defined. The lazy property will be ignored.`);else{let y=await l();y!=null&&(Object.assign(s,{[t]:y}),Object.assign(s,r(s)))}typeof s.lazy=="object"&&(s.lazy[t]=void 0,Object.values(s.lazy).every(y=>y===void 0)&&(s.lazy=void 0))})();return c[t]=m,m},gL=new WeakMap;function OG(t,e,n,r,s){let l=n[t.id];if(xn(l,"No route found in manifest"),!t.lazy)return{lazyRoutePromise:void 0,lazyHandlerPromise:void 0};if(typeof t.lazy=="function"){let v=gL.get(l);if(v)return{lazyRoutePromise:v,lazyHandlerPromise:v};let b=(async()=>{xn(typeof t.lazy=="function","No lazy route function found");let y=await t.lazy(),O={};for(let w in y){let S=y[w];if(S===void 0)continue;let C=AW(w),M=l[w]!==void 0&&w!=="hasErrorBoundary";C?Ar(!C,"Route property "+w+" is not a supported property to be returned from a lazy route function. This property will be ignored."):M?Ar(!M,`Route "${l.id}" has a static property "${w}" defined but its lazy function is also returning a value for this property. The lazy route property "${w}" will be ignored.`):O[w]=S}Object.assign(l,O),Object.assign(l,{...r(l),lazy:void 0})})();return gL.set(l,b),b.catch(()=>{}),{lazyRoutePromise:b,lazyHandlerPromise:b}}let c=Object.keys(t.lazy),d=[],m;for(let v of c){if(s&&s.includes(v))continue;let b=WB({key:v,route:t,manifest:n,mapRouteProperties:r});b&&(d.push(b),v===e&&(m=b))}let h=d.length>0?Promise.all(d).then(()=>{}):void 0;return h?.catch(()=>{}),m?.catch(()=>{}),{lazyRoutePromise:h,lazyHandlerPromise:m}}async function pL(t){let e=t.matches.filter(s=>s.shouldLoad),n={};return(await Promise.all(e.map(s=>s.resolve()))).forEach((s,l)=>{n[e[l].route.id]=s}),n}async function xG(t){return t.matches.some(e=>e.route.middleware)?GB(t,()=>pL(t)):pL(t)}function GB(t,e){return SG(t,e,r=>{if(_G(r))throw r;return r},jG,n);function n(r,s,l){if(l)return Promise.resolve(Object.assign(l.value,{[s]:{type:"error",result:r}}));{let{matches:c}=t,d=Math.min(Math.max(c.findIndex(h=>h.route.id===s),0),Math.max(c.findIndex(h=>h.shouldCallHandler()),0)),m=Ic(c,c[d].route.id).route.id;return Promise.resolve({[m]:{type:"error",result:r}})}}}async function SG(t,e,n,r,s){let{matches:l,request:c,params:d,context:m,unstable_pattern:h}=t,v=l.flatMap(y=>y.route.middleware?y.route.middleware.map(O=>[y.route.id,O]):[]);return await XB({request:c,params:d,context:m,unstable_pattern:h},v,e,n,r,s)}async function XB(t,e,n,r,s,l,c=0){let{request:d}=t;if(d.signal.aborted)throw d.signal.reason??new Error(`Request aborted: ${d.method} ${d.url}`);let m=e[c];if(!m)return await n();let[h,v]=m,b,y=async()=>{if(b)throw new Error("You may only call `next()` once per middleware");try{return b={value:await XB(t,e,n,r,s,l,c+1)},b.value}catch(O){return b={value:await l(O,h,b)},b.value}};try{let O=await v(t,y),w=O!=null?r(O):void 0;return s(w)?w:b?w??b.value:(b={value:await y()},b.value)}catch(O){return await l(O,h,b)}}function KB(t,e,n,r,s){let l=WB({key:"middleware",route:r.route,manifest:e,mapRouteProperties:t}),c=OG(r.route,Aa(n.method)?"action":"loader",e,t,s);return{middleware:l,route:c.lazyRoutePromise,handler:c.lazyHandlerPromise}}function Eg(t,e,n,r,s,l,c,d,m=null,h){let v=!1,b=KB(t,e,n,s,l);return{...s,_lazyPromises:b,shouldLoad:d,shouldRevalidateArgs:m,shouldCallHandler(y){return v=!0,m?typeof h=="boolean"?O6(s,{...m,defaultShouldRevalidate:h}):typeof y=="boolean"?O6(s,{...m,defaultShouldRevalidate:y}):O6(s,m):d},resolve(y){let{lazy:O,loader:w,middleware:S}=s.route,C=v||d||y&&!Aa(n.method)&&(O||w),z=S&&S.length>0&&!w&&!O;return C&&(Aa(n.method)||!z)?CG({request:n,unstable_pattern:r,match:s,lazyHandlerPromise:b?.handler,lazyRoutePromise:b?.route,handlerOverride:y,scopedContext:c}):Promise.resolve({type:"data",result:void 0})}}}function V3(t,e,n,r,s,l,c,d=null){return r.map(m=>m.route.id!==s.route.id?{...m,shouldLoad:!1,shouldRevalidateArgs:d,shouldCallHandler:()=>!1,_lazyPromises:KB(t,e,n,m,l),resolve:()=>Promise.resolve({type:"data",result:void 0})}:Eg(t,e,n,lu(r),m,l,c,!0,d))}async function $G(t,e,n,r,s,l){n.some(h=>h._lazyPromises?.middleware)&&await Promise.all(n.map(h=>h._lazyPromises?.middleware));let c={request:e,unstable_pattern:lu(n),params:n[0].params,context:s,matches:n},m=await t({...c,fetcherKey:r,runClientMiddleware:h=>{let v=c;return GB(v,()=>h({...v,fetcherKey:r,runClientMiddleware:()=>{throw new Error("Cannot call `runClientMiddleware()` from within an `runClientMiddleware` handler")}}))}});try{await Promise.all(n.flatMap(h=>[h._lazyPromises?.handler,h._lazyPromises?.route]))}catch{}return m}async function CG({request:t,unstable_pattern:e,match:n,lazyHandlerPromise:r,lazyRoutePromise:s,handlerOverride:l,scopedContext:c}){let d,m,h=Aa(t.method),v=h?"action":"loader",b=y=>{let O,w=new Promise((z,M)=>O=M);m=()=>O(),t.signal.addEventListener("abort",m);let S=z=>typeof y!="function"?Promise.reject(new Error(`You cannot call the handler for a route which defines a boolean "${v}" [routeId: ${n.route.id}]`)):y({request:t,unstable_pattern:e,params:n.params,context:c},...z!==void 0?[z]:[]),C=(async()=>{try{return{type:"data",result:await(l?l(M=>S(M)):S())}}catch(z){return{type:"error",result:z}}})();return Promise.race([C,w])};try{let y=h?n.route.action:n.route.loader;if(r||s)if(y){let O,[w]=await Promise.all([b(y).catch(S=>{O=S}),r,s]);if(O!==void 0)throw O;d=w}else{await r;let O=h?n.route.action:n.route.loader;if(O)[d]=await Promise.all([b(O),s]);else if(v==="action"){let w=new URL(t.url),S=w.pathname+w.search;throw ws(405,{method:t.method,pathname:S,routeId:n.route.id})}else return{type:"data",result:void 0}}else if(y)d=await b(y);else{let O=new URL(t.url),w=O.pathname+O.search;throw ws(404,{pathname:w})}}catch(y){return{type:"error",result:y}}finally{m&&t.signal.removeEventListener("abort",m)}return d}async function zG(t){let e=t.headers.get("Content-Type");return e&&/\bapplication\/json\b/.test(e)?t.body==null?null:t.json():t.text()}async function RG(t){let{result:e,type:n}=t;if(KH(e)){let r;try{r=await zG(e)}catch(s){return{type:"error",error:s}}return n==="error"?{type:"error",error:new iu(e.status,e.statusText,r),statusCode:e.status,headers:e.headers}:{type:"data",data:r,statusCode:e.status,headers:e.headers}}return n==="error"?xL(e)?e.data instanceof Error?{type:"error",error:e.data,statusCode:e.init?.status,headers:e.init?.headers?new Headers(e.init.headers):void 0}:{type:"error",error:HG(e),statusCode:V6(e)?e.status:void 0,headers:e.init?.headers?new Headers(e.init.headers):void 0}:{type:"error",error:e,statusCode:V6(e)?e.status:void 0}:xL(e)?{type:"data",data:e.data,statusCode:e.init?.status,headers:e.init?.headers?new Headers(e.init.headers):void 0}:{type:"data",data:e}}function EG(t,e,n,r,s){let l=t.headers.get("Location");if(xn(l,"Redirects returned/thrown from loaders/actions must have a Location header"),!GH(l)){let c=r.slice(0,r.findIndex(d=>d.route.id===n)+1);l=Rg(new URL(e.url),c,s,l),t.headers.set("Location",l)}return t}function vL(t,e,n,r){let s=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];if(GH(t)){let l=t,c=l.startsWith("//")?new URL(e.protocol+l):new URL(l);if(s.includes(c.protocol))throw new Error("Invalid redirect location");let d=Os(c.pathname,n)!=null;if(c.origin===e.origin&&d)return c.pathname+c.search+c.hash}try{let l=r.createURL(t);if(s.includes(l.protocol))throw new Error("Invalid redirect location")}catch{}return t}function H3(t,e,n,r){let s=t.createURL(YB(e)).toString(),l={signal:n};if(r&&Aa(r.formMethod)){let{formMethod:c,formEncType:d}=r;l.method=c.toUpperCase(),d==="application/json"?(l.headers=new Headers({"Content-Type":d}),l.body=JSON.stringify(r.json)):d==="text/plain"?l.body=r.text:d==="application/x-www-form-urlencoded"&&r.formData?l.body=Mg(r.formData):l.body=r.formData}return new Request(s,l)}function Mg(t){let e=new URLSearchParams;for(let[n,r]of t.entries())e.append(n,typeof r=="string"?r:r.name);return e}function bL(t){let e=new FormData;for(let[n,r]of t.entries())e.append(n,r);return e}function MG(t,e,n,r=!1,s=!1){let l={},c=null,d,m=!1,h={},v=n&&ko(n[1])?n[1].error:void 0;return t.forEach(b=>{if(!(b.route.id in e))return;let y=b.route.id,O=e[y];if(xn(!g4(O),"Cannot handle redirect results in processLoaderData"),ko(O)){let w=O.error;if(v!==void 0&&(w=v,v=void 0),c=c||{},s)c[y]=w;else{let S=Ic(t,y);c[S.route.id]==null&&(c[S.route.id]=w)}r||(l[y]=DB),m||(m=!0,d=V6(O.error)?O.error.status:500),O.headers&&(h[y]=O.headers)}else l[y]=O.data,O.statusCode&&O.statusCode!==200&&!m&&(d=O.statusCode),O.headers&&(h[y]=O.headers)}),v!==void 0&&n&&(c={[n[0]]:v},n[2]&&(l[n[2]]=void 0)),{loaderData:l,errors:c,statusCode:d||200,loaderHeaders:h}}function yL(t,e,n,r,s,l){let{loaderData:c,errors:d}=MG(e,n,r);return s.filter(m=>!m.matches||m.matches.some(h=>h.shouldLoad)).forEach(m=>{let{key:h,match:v,controller:b}=m;if(b&&b.signal.aborted)return;let y=l[h];if(xn(y,"Did not find corresponding fetcher result"),ko(y)){let O=Ic(t.matches,v?.route.id);d&&d[O.route.id]||(d={...d,[O.route.id]:y.error}),t.fetchers.delete(h)}else if(g4(y))xn(!1,"Unhandled fetcher revalidation redirect");else{let O=pl(y.data);t.fetchers.set(h,O)}}),{loaderData:c,errors:d}}function wL(t,e,n,r){let s=Object.entries(e).filter(([,l])=>l!==DB).reduce((l,[c,d])=>(l[c]=d,l),{});for(let l of n){let c=l.route.id;if(!e.hasOwnProperty(c)&&t.hasOwnProperty(c)&&l.route.loader&&(s[c]=t[c]),r&&r.hasOwnProperty(c))break}return s}function OL(t){return t?ko(t[1])?{actionData:{}}:{actionData:{[t[0]]:t[1].data}}:{}}function Ic(t,e){return(e?t.slice(0,t.findIndex(r=>r.route.id===e)+1):[...t]).reverse().find(r=>r.route.hasErrorBoundary===!0)||t[0]}function Zf(t){let e=t.length===1?t[0]:t.find(n=>n.index||!n.path||n.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:e}],route:e}}function ws(t,{pathname:e,routeId:n,method:r,type:s,message:l}={}){let c="Unknown Server Error",d="Unknown @remix-run/router error";return t===400?(c="Bad Request",r&&e&&n?d=`You made a ${r} request to "${e}" but did not provide a \`loader\` for route "${n}", so there is no way to handle the request.`:s==="invalid-body"&&(d="Unable to encode submission body")):t===403?(c="Forbidden",d=`Route "${n}" does not match URL "${e}"`):t===404?(c="Not Found",d=`No route matches URL "${e}"`):t===405&&(c="Method Not Allowed",r&&e&&n?d=`You made a ${r.toUpperCase()} request to "${e}" but did not provide an \`action\` for route "${n}", so there is no way to handle the request.`:r&&(d=`Invalid request method "${r.toUpperCase()}"`)),new iu(t||500,c,new Error(d),!0)}function Jf(t){let e=Object.entries(t);for(let n=e.length-1;n>=0;n--){let[r,s]=e[n];if(g4(s))return{key:r,result:s}}}function YB(t){let e=typeof t=="string"?Rl(t):t;return Ni({...e,hash:""})}function TG(t,e){return t.pathname!==e.pathname||t.search!==e.search?!1:t.hash===""?e.hash!=="":t.hash===e.hash?!0:e.hash!==""}function HG(t){return new iu(t.init?.status??500,t.init?.statusText??"Internal Server Error",t.data)}function jG(t){return t!=null&&typeof t=="object"&&Object.entries(t).every(([e,n])=>typeof e=="string"&&PG(n))}function PG(t){return t!=null&&typeof t=="object"&&"type"in t&&"result"in t&&(t.type==="data"||t.type==="error")}function LG(t){return KH(t.result)&&FB.has(t.result.status)}function ko(t){return t.type==="error"}function g4(t){return(t&&t.type)==="redirect"}function xL(t){return typeof t=="object"&&t!=null&&"type"in t&&"data"in t&&"init"in t&&t.type==="DataWithResponseInit"}function KH(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.headers=="object"&&typeof t.body<"u"}function IG(t){return FB.has(t)}function _G(t){return KH(t)&&IG(t.status)&&t.headers.has("Location")}function VG(t){return hG.has(t.toUpperCase())}function Aa(t){return dG.has(t.toUpperCase())}function YH(t){return new URLSearchParams(t).getAll("index").some(e=>e==="")}function w5(t,e){let n=typeof e=="string"?Rl(e).search:e.search;if(t[t.length-1].route.index&&YH(n||""))return t[t.length-1];let r=IB(t);return r[r.length-1]}function SL(t){let{formMethod:e,formAction:n,formEncType:r,text:s,formData:l,json:c}=t;if(!(!e||!n||!r)){if(s!=null)return{formMethod:e,formAction:n,formEncType:r,formData:void 0,json:void 0,text:s};if(l!=null)return{formMethod:e,formAction:n,formEncType:r,formData:l,json:void 0,text:void 0};if(c!==void 0)return{formMethod:e,formAction:n,formEncType:r,formData:void 0,json:c,text:void 0}}}function wm(t,e){return e?{state:"loading",location:t,formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text}:{state:"loading",location:t,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function BG(t,e){return{state:"submitting",location:t,formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text}}function e6(t,e){return t?{state:"loading",formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text,data:e}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function AG(t,e){return{state:"submitting",formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text,data:e?e.data:void 0}}function pl(t){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function FG(t,e){try{let n=t.sessionStorage.getItem(NB);if(n){let r=JSON.parse(n);for(let[s,l]of Object.entries(r||{}))l&&Array.isArray(l)&&e.set(s,new Set(l||[]))}}catch{}}function NG(t,e){if(e.size>0){let n={};for(let[r,s]of e)n[r]=[...s];try{t.sessionStorage.setItem(NB,JSON.stringify(n))}catch(r){Ar(!1,`Failed to save applied view transitions in sessionStorage (${r}).`)}}}function $L(){let t,e,n=new Promise((r,s)=>{t=async l=>{r(l);try{await n}catch{}},e=async l=>{s(l);try{await n}catch{}}});return{promise:n,resolve:t,reject:e}}var I4=a.createContext(null);I4.displayName="DataRouter";var cu=a.createContext(null);cu.displayName="DataRouterState";var QB=a.createContext(!1);function DG(){return a.useContext(QB)}var QH=a.createContext({isTransitioning:!1});QH.displayName="ViewTransition";var ZB=a.createContext(new Map);ZB.displayName="Fetchers";var UG=a.createContext(null);UG.displayName="Await";var as=a.createContext(null);as.displayName="Navigation";var E7=a.createContext(null);E7.displayName="Location";var ai=a.createContext({outlet:null,matches:[],isDataRoute:!1});ai.displayName="Route";var ZH=a.createContext(null);ZH.displayName="RouteError";var JB="REACT_ROUTER_ERROR",qG="REDIRECT",WG="ROUTE_ERROR_RESPONSE";function GG(t){if(t.startsWith(`${JB}:${qG}:{`))try{let e=JSON.parse(t.slice(28));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.location=="string"&&typeof e.reloadDocument=="boolean"&&typeof e.replace=="boolean")return e}catch{}}function XG(t){if(t.startsWith(`${JB}:${WG}:{`))try{let e=JSON.parse(t.slice(40));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string")return new iu(e.status,e.statusText,e.data)}catch{}}function KG(t,{relative:e}={}){xn(Y3(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=a.useContext(as),{hash:s,pathname:l,search:c}=uu(t,{relative:e}),d=l;return n!=="/"&&(d=l==="/"?n:ks([n,l])),r.createHref({pathname:d,search:c,hash:s})}function Y3(){return a.useContext(E7)!=null}function os(){return xn(Y3(),"useLocation() may be used only in the context of a component."),a.useContext(E7).location}var kB="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function eA(t){a.useContext(as).static||a.useLayoutEffect(t)}function Gc(){let{isDataRoute:t}=a.useContext(ai);return t?cX():YG()}function YG(){xn(Y3(),"useNavigate() may be used only in the context of a component.");let t=a.useContext(I4),{basename:e,navigator:n}=a.useContext(as),{matches:r}=a.useContext(ai),{pathname:s}=os(),l=JSON.stringify(R7(r)),c=a.useRef(!1);return eA(()=>{c.current=!0}),a.useCallback((m,h={})=>{if(Ar(c.current,kB),!c.current)return;if(typeof m=="number"){n.go(m);return}let v=su(m,JSON.parse(l),s,h.relative==="path");t==null&&e!=="/"&&(v.pathname=v.pathname==="/"?e:ks([e,v.pathname])),(h.replace?n.replace:n.push)(v,h.state,h)},[e,n,l,s,t])}var QG=a.createContext(null);function ZG(t){let e=a.useContext(ai).outlet;return a.useMemo(()=>e&&a.createElement(QG.Provider,{value:t},e),[e,t])}function uu(t,{relative:e}={}){let{matches:n}=a.useContext(ai),{pathname:r}=os(),s=JSON.stringify(R7(n));return a.useMemo(()=>su(t,JSON.parse(s),r,e==="path"),[t,s,r,e])}function JG(t,e,n){xn(Y3(),"useRoutes() may be used only in the context of a component.");let{navigator:r}=a.useContext(as),{matches:s}=a.useContext(ai),l=s[s.length-1],c=l?l.params:{},d=l?l.pathname:"/",m=l?l.pathnameBase:"/",h=l&&l.route;{let C=h&&h.path||"";nA(d,!h||C.endsWith("*")||C.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${d}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let v=os(),b;b=v;let y=b.pathname||"/",O=y;if(m!=="/"){let C=m.replace(/^\//,"").split("/");O="/"+y.replace(/^\//,"").split("/").slice(C.length).join("/")}let w=Lc(t,{pathname:O});return Ar(h||w!=null,`No routes matched location "${b.pathname}${b.search}${b.hash}" `),Ar(w==null||w[w.length-1].route.element!==void 0||w[w.length-1].route.Component!==void 0||w[w.length-1].route.lazy!==void 0,`Matched leaf route at location "${b.pathname}${b.search}${b.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`),rX(w&&w.map(C=>Object.assign({},C,{params:Object.assign({},c,C.params),pathname:ks([m,r.encodeLocation?r.encodeLocation(C.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:C.pathname]),pathnameBase:C.pathnameBase==="/"?m:ks([m,r.encodeLocation?r.encodeLocation(C.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:C.pathnameBase])})),s,n)}function kG(){let t=lX(),e=V6(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,r="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:r},l={padding:"2px 4px",backgroundColor:r},c=null;return console.error("Error handled by React Router default ErrorBoundary:",t),c=a.createElement(a.Fragment,null,a.createElement("p",null,"💿 Hey developer 👋"),a.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",a.createElement("code",{style:l},"ErrorBoundary")," or"," ",a.createElement("code",{style:l},"errorElement")," prop on your route.")),a.createElement(a.Fragment,null,a.createElement("h2",null,"Unexpected Application Error!"),a.createElement("h3",{style:{fontStyle:"italic"}},e),n?a.createElement("pre",{style:s},n):null,c)}var eX=a.createElement(kG,null),tA=class extends a.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||e.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){this.props.onError?this.props.onError(t,e):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const n=XG(t.digest);n&&(t=n)}let e=t!==void 0?a.createElement(ai.Provider,{value:this.props.routeContext},a.createElement(ZH.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?a.createElement(tX,{error:t},e):e}};tA.contextType=QB;var Om=new WeakMap;function tX({children:t,error:e}){let{basename:n}=a.useContext(as);if(typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){let r=GG(e.digest);if(r){let s=Om.get(e);if(s)throw s;let l=VB(r.location,n);if(_B&&!Om.get(e))if(l.isExternal||r.reloadDocument)window.location.href=l.absoluteURL||l.to;else{const c=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(l.to,{replace:r.replace}));throw Om.set(e,c),c}return a.createElement("meta",{httpEquiv:"refresh",content:`0;url=${l.absoluteURL||l.to}`})}}return t}function nX({routeContext:t,match:e,children:n}){let r=a.useContext(I4);return r&&r.static&&r.staticContext&&(e.route.errorElement||e.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=e.route.id),a.createElement(ai.Provider,{value:t},n)}function rX(t,e=[],n){let r=n?.state;if(t==null){if(!r)return null;if(r.errors)t=r.matches;else if(e.length===0&&!r.initialized&&r.matches.length>0)t=r.matches;else return null}let s=t,l=r?.errors;if(l!=null){let v=s.findIndex(b=>b.route.id&&l?.[b.route.id]!==void 0);xn(v>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(l).join(",")}`),s=s.slice(0,Math.min(s.length,v+1))}let c=!1,d=-1;if(n&&r){c=r.renderFallback;for(let v=0;v=0?s=s.slice(0,d+1):s=[s[0]];break}}}}let m=n?.onError,h=r&&m?(v,b)=>{m(v,{location:r.location,params:r.matches?.[0]?.params??{},unstable_pattern:lu(r.matches),errorInfo:b})}:void 0;return s.reduceRight((v,b,y)=>{let O,w=!1,S=null,C=null;r&&(O=l&&b.route.id?l[b.route.id]:void 0,S=b.route.errorElement||eX,c&&(d<0&&y===0?(nA("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),w=!0,C=null):d===y&&(w=!0,C=b.route.hydrateFallbackElement||null)));let z=e.concat(s.slice(0,y+1)),M=()=>{let T;return O?T=S:w?T=C:b.route.Component?T=a.createElement(b.route.Component,null):b.route.element?T=b.route.element:T=v,a.createElement(nX,{match:b,routeContext:{outlet:v,matches:z,isDataRoute:r!=null},children:T})};return r&&(b.route.ErrorBoundary||b.route.errorElement||y===0)?a.createElement(tA,{location:r.location,revalidation:r.revalidation,component:S,error:O,children:M(),routeContext:{outlet:null,matches:z,isDataRoute:!0},onError:h}):M()},null)}function JH(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function aX(t){let e=a.useContext(I4);return xn(e,JH(t)),e}function oX(t){let e=a.useContext(cu);return xn(e,JH(t)),e}function sX(t){let e=a.useContext(ai);return xn(e,JH(t)),e}function kH(t){let e=sX(t),n=e.matches[e.matches.length-1];return xn(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function iX(){return kH("useRouteId")}function lX(){let t=a.useContext(ZH),e=oX("useRouteError"),n=kH("useRouteError");return t!==void 0?t:e.errors?.[n]}function cX(){let{router:t}=aX("useNavigate"),e=kH("useNavigate"),n=a.useRef(!1);return eA(()=>{n.current=!0}),a.useCallback(async(s,l={})=>{Ar(n.current,kB),n.current&&(typeof s=="number"?await t.navigate(s):await t.navigate(s,{fromRouteId:e,...l}))},[t,e])}var CL={};function nA(t,e,n){!e&&!CL[t]&&(CL[t]=!0,Ar(!1,n))}var zL={};function RL(t,e){!t&&!zL[e]&&(zL[e]=!0,console.warn(e))}var uX="useOptimistic",EL=MB[uX],dX=()=>{};function fX(t){return EL?EL(t):[t,dX]}function hX(t){let e={hasErrorBoundary:t.hasErrorBoundary||t.ErrorBoundary!=null||t.errorElement!=null};return t.Component&&(t.element&&Ar(!1,"You should not include both `Component` and `element` on your route - `Component` will be used."),Object.assign(e,{element:a.createElement(t.Component),Component:void 0})),t.HydrateFallback&&(t.hydrateFallbackElement&&Ar(!1,"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used."),Object.assign(e,{hydrateFallbackElement:a.createElement(t.HydrateFallback),HydrateFallback:void 0})),t.ErrorBoundary&&(t.errorElement&&Ar(!1,"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used."),Object.assign(e,{errorElement:a.createElement(t.ErrorBoundary),ErrorBoundary:void 0})),e}var mX=["HydrateFallback","hydrateFallbackElement"],gX=class{constructor(){this.status="pending",this.promise=new Promise((t,e)=>{this.resolve=n=>{this.status==="pending"&&(this.status="resolved",t(n))},this.reject=n=>{this.status==="pending"&&(this.status="rejected",e(n))}})}};function pX({router:t,flushSync:e,onError:n,unstable_useTransitions:r}){r=DG()||r;let[l,c]=a.useState(t.state),[d,m]=fX(l),[h,v]=a.useState(),[b,y]=a.useState({isTransitioning:!1}),[O,w]=a.useState(),[S,C]=a.useState(),[z,M]=a.useState(),T=a.useRef(new Map),H=a.useCallback((L,{deletedFetchers:V,newErrors:D,flushSync:F,viewTransitionOpts:X})=>{D&&n&&Object.values(D).forEach(Y=>n(Y,{location:L.location,params:L.matches[0]?.params??{},unstable_pattern:lu(L.matches)})),L.fetchers.forEach((Y,q)=>{Y.data!==void 0&&T.current.set(q,Y.data)}),V.forEach(Y=>T.current.delete(Y)),RL(F===!1||e!=null,'You provided the `flushSync` option to a router update, but you are not using the `` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from "react-router/dom"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.');let Q=t.window!=null&&t.window.document!=null&&typeof t.window.document.startViewTransition=="function";if(RL(X==null||Q,"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available."),!X||!Q){e&&F?e(()=>c(L)):r===!1?c(L):a.startTransition(()=>{r===!0&&m(Y=>ML(Y,L)),c(L)});return}if(e&&F){e(()=>{S&&(O?.resolve(),S.skipTransition()),y({isTransitioning:!0,flushSync:!0,currentLocation:X.currentLocation,nextLocation:X.nextLocation})});let Y=t.window.document.startViewTransition(()=>{e(()=>c(L))});Y.finished.finally(()=>{e(()=>{w(void 0),C(void 0),v(void 0),y({isTransitioning:!1})})}),e(()=>C(Y));return}S?(O?.resolve(),S.skipTransition(),M({state:L,currentLocation:X.currentLocation,nextLocation:X.nextLocation})):(v(L),y({isTransitioning:!0,flushSync:!1,currentLocation:X.currentLocation,nextLocation:X.nextLocation}))},[t.window,e,S,O,r,m,n]);a.useLayoutEffect(()=>t.subscribe(H),[t,H]),a.useEffect(()=>{b.isTransitioning&&!b.flushSync&&w(new gX)},[b]),a.useEffect(()=>{if(O&&h&&t.window){let L=h,V=O.promise,D=t.window.document.startViewTransition(async()=>{r===!1?c(L):a.startTransition(()=>{r===!0&&m(F=>ML(F,L)),c(L)}),await V});D.finished.finally(()=>{w(void 0),C(void 0),v(void 0),y({isTransitioning:!1})}),C(D)}},[h,O,t.window,r,m]),a.useEffect(()=>{O&&h&&d.location.key===h.location.key&&O.resolve()},[O,S,d.location,h]),a.useEffect(()=>{!b.isTransitioning&&z&&(v(z.state),y({isTransitioning:!0,flushSync:!1,currentLocation:z.currentLocation,nextLocation:z.nextLocation}),M(void 0))},[b.isTransitioning,z]);let j=a.useMemo(()=>({createHref:t.createHref,encodeLocation:t.encodeLocation,go:L=>t.navigate(L),push:(L,V,D)=>t.navigate(L,{state:V,preventScrollReset:D?.preventScrollReset}),replace:(L,V,D)=>t.navigate(L,{replace:!0,state:V,preventScrollReset:D?.preventScrollReset})}),[t]),_=t.basename||"/",P=a.useMemo(()=>({router:t,navigator:j,static:!1,basename:_,onError:n}),[t,j,_,n]);return a.createElement(a.Fragment,null,a.createElement(I4.Provider,{value:P},a.createElement(cu.Provider,{value:d},a.createElement(ZB.Provider,{value:T.current},a.createElement(QH.Provider,{value:b},a.createElement(OX,{basename:_,location:d.location,navigationType:d.historyAction,navigator:j,unstable_useTransitions:r},a.createElement(vX,{routes:t.routes,future:t.future,state:d,isStatic:!1,onError:n})))))),null)}function ML(t,e){return{...t,navigation:e.navigation.state!=="idle"?e.navigation:t.navigation,revalidation:e.revalidation!=="idle"?e.revalidation:t.revalidation,actionData:e.navigation.state!=="submitting"?e.actionData:t.actionData,fetchers:e.fetchers}}var vX=a.memo(bX);function bX({routes:t,future:e,state:n,isStatic:r,onError:s}){return JG(t,void 0,{state:n,isStatic:r,onError:s})}function yX({to:t,replace:e,state:n,relative:r}){xn(Y3()," may be used only in the context of a component.");let{static:s}=a.useContext(as);Ar(!s," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:l}=a.useContext(ai),{pathname:c}=os(),d=Gc(),m=su(t,R7(l),c,r==="path"),h=JSON.stringify(m);return a.useEffect(()=>{d(JSON.parse(h),{replace:e,state:n,relative:r})},[d,h,r,e,n]),null}function wX(t){return ZG(t.context)}function OX({basename:t="/",children:e=null,location:n,navigationType:r="POP",navigator:s,static:l=!1,unstable_useTransitions:c}){xn(!Y3(),"You cannot render a inside another . You should never have more than one in your app.");let d=t.replace(/^\/*/,"/"),m=a.useMemo(()=>({basename:d,navigator:s,static:l,unstable_useTransitions:c,future:{}}),[d,s,l,c]);typeof n=="string"&&(n=Rl(n));let{pathname:h="/",search:v="",hash:b="",state:y=null,key:O="default",unstable_mask:w}=n,S=a.useMemo(()=>{let C=Os(h,d);return C==null?null:{location:{pathname:C,search:v,hash:b,state:y,key:O,unstable_mask:w},navigationType:r}},[d,h,v,b,y,O,r,w]);return Ar(S!=null,` is not able to match the URL "${h}${v}${b}" because it does not start with the basename, so the won't render anything.`),S==null?null:a.createElement(as.Provider,{value:m},a.createElement(E7.Provider,{children:e,value:S}))}var O5="get",x5="application/x-www-form-urlencoded";function M7(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function xX(t){return M7(t)&&t.tagName.toLowerCase()==="button"}function SX(t){return M7(t)&&t.tagName.toLowerCase()==="form"}function $X(t){return M7(t)&&t.tagName.toLowerCase()==="input"}function CX(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function zX(t,e){return t.button===0&&(!e||e==="_self")&&!CX(t)}function Tg(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((e,n)=>{let r=t[n];return e.concat(Array.isArray(r)?r.map(s=>[n,s]):[[n,r]])},[]))}function RX(t,e){let n=Tg(t);return e&&e.forEach((r,s)=>{n.has(s)||e.getAll(s).forEach(l=>{n.append(s,l)})}),n}var kf=null;function EX(){if(kf===null)try{new FormData(document.createElement("form"),0),kf=!1}catch{kf=!0}return kf}var MX=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function xm(t){return t!=null&&!MX.has(t)?(Ar(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${x5}"`),null):t}function TX(t,e){let n,r,s,l,c;if(SX(t)){let d=t.getAttribute("action");r=d?Os(d,e):null,n=t.getAttribute("method")||O5,s=xm(t.getAttribute("enctype"))||x5,l=new FormData(t)}else if(xX(t)||$X(t)&&(t.type==="submit"||t.type==="image")){let d=t.form;if(d==null)throw new Error('Cannot submit a + ); + + const closeButton = ( + + ); + + const resetButton = ( + + ); + + const buttons: SubmitterButton = { + submit: submitButton, + close: closeButton, + reset: resetButton, + }; + + if (typeof submitter?.render === 'function') { + return submitter.render(buttons, formRef); + } + + if(layoutType === 'Form') { + return ( + + + {buttons.reset} + {buttons.submit} + + + ); + }else { + return ( + + {buttons.reset} + {buttons.submit} + {buttons.close} + + ); + } + }, [loading, form, submitter, t]); + + // 表单内容 + const formContent = useMemo(() => ( + + {grid ? ( + + {columns.map((column, index) => renderFormItem(column, index))} + + ) : ( + columns.map((column, index) => renderFormItem(column, index)) + )} + {(layoutType === 'Form') && renderSubmitter} + + ), [ form, handleFinish, props, grid, rowProps, columns, renderFormItem, layoutType, renderSubmitter ]); + + // 触发器 + const triggerElement = useMemo(() => { + if (!trigger) return null; + return React.cloneElement(trigger as React.ReactElement<{ onClick?: () => void }>, { + onClick: handleOpen, + }); + }, [trigger, handleOpen]); + + // 根据 layoutType 渲染 + if (layoutType === 'ModalForm') { + return ( + <> + {triggerElement} + + {formContent} + + + ); + } + + if (layoutType === 'DrawerForm') { + return ( + <> + {triggerElement} + + {formContent} + + + ); + } + + return formContent; +} + +export default XinForm; + +export type { XinFormProps, XinFormRef }; diff --git a/web/components/XinForm/typings.ts b/web/components/XinForm/typings.ts new file mode 100644 index 0000000..0b70810 --- /dev/null +++ b/web/components/XinForm/typings.ts @@ -0,0 +1,85 @@ +import type { + FormProps, + RowProps, + ModalProps, + DrawerProps, + FormInstance, + ButtonProps, + ColProps, +} from 'antd'; +import {type ReactNode, type RefObject} from 'react'; +import type { FormColumn } from '@/components/XinFormField/FieldRender/typings'; + +/** + * 表单操作栏按钮 + */ +export type SubmitterButton = { + /** 提交按钮 */ + submit: ReactNode; + /** 重置按钮 */ + reset: ReactNode; + /** 关闭按钮 */ + close: ReactNode; +} + +/** + * 表单操作栏属性 + */ +export interface SubmitterProps { + /** 操作栏渲染 */ + render?: false | ((dom: SubmitterButton, form?: RefObject) => ReactNode); + /** 提交按钮文本 */ + submitText?: string | ReactNode; + /** 重置按钮文本 */ + resetText?: string | ReactNode; + /** 关闭按钮文本 */ + closeText?: string | ReactNode; + /** 提交按钮属性 */ + submitButtonProps?: Omit; + /** 重置按钮属性 */ + resetButtonProps?: Omit; + /** 关闭按钮属性 */ + closeButtonProps?: Omit; +} + +/** + * XinForm 实例方法 + */ +export interface XinFormRef extends FormInstance { + /** 打开弹窗/抽屉 (仅 ModalForm/DrawerForm 有效) */ + open: () => void; + /** 关闭弹窗/抽屉 (仅 ModalForm/DrawerForm 有效) */ + close: () => void; + /** 获取弹窗/抽屉的打开状态 */ + isOpen: () => boolean; + /** 设置加载状态 */ + setLoading: (loading: boolean) => void; +} + +/** + * XinForm 组件属性 + */ +export type XinFormProps = Omit, 'onFinish'> & { + /** 表单列配置 */ + columns: FormColumn[]; + /** 表单布局类型 */ + layoutType?: 'Form' | 'ModalForm' | 'DrawerForm'; + /** 是否使用 Grid 布局 */ + grid?: boolean; + /** 开启 grid 模式时传递给 Row */ + rowProps?: RowProps; + /** 传递给表单项的 Col */ + colProps?: ColProps; + /** 表单提交 */ + onFinish?: (values: T) => Promise; + /** 表单实例引用 */ + formRef?: RefObject; + /** ModalForm 弹窗配置 */ + modalProps?: Omit; + /** DrawerForm 抽屉配置 */ + drawerProps?: Omit; + /** 触发器 */ + trigger?: ReactNode; + /** 渲染表单操作栏 */ + submitter?: SubmitterProps; +} diff --git a/web/components/XinFormField/FieldRender/index.tsx b/web/components/XinFormField/FieldRender/index.tsx new file mode 100644 index 0000000..f465914 --- /dev/null +++ b/web/components/XinFormField/FieldRender/index.tsx @@ -0,0 +1,138 @@ +import type { FormColumn } from "./typings"; +import { + Input, + InputNumber, + Select, + Radio, + Checkbox, + Switch, + DatePicker, + TimePicker, + TreeSelect, + Cascader, + Rate, + Slider, + ColorPicker +} from 'antd'; +import type { + InputProps, + InputNumberProps, + SelectProps, + TreeSelectProps, + RadioGroupProps, + SwitchProps, + RateProps, + SliderSingleProps, + DatePickerProps, + TimePickerProps, + ColorPickerProps +} from 'antd'; +import type { PasswordProps, TextAreaProps } from "antd/es/input"; +import type { RangePickerProps } from "antd/es/date-picker"; +import type { CheckboxGroupProps } from 'antd/es/checkbox'; +import IconSelector from '@/components/XinFormField/IconSelector'; +import ImageUploader from '@/components/XinFormField/ImageUploader'; +import UserSelector from '@/components/XinFormField/UserSelector'; +import type { IconSelectProps } from '@/components/XinFormField/IconSelector/typings'; +import type { ImageUploaderProps } from '@/components/XinFormField/ImageUploader/typings'; +import type { UserSelectorProps } from '@/components/XinFormField/UserSelector/typings'; +import type {ReactNode} from "react"; + +const { TextArea, Password } = Input; +const { RangePicker } = DatePicker; + +interface FieldsRenderProps extends Record { + valueType: FormColumn['valueType']; +} + +export default function FieldRender(props: FieldsRenderProps) { + const { valueType, ...fieldProps } = props; + let dom: ReactNode; + switch (valueType) { + case 'password': + dom = ; + break; + case 'textarea': + dom =