draw-table-vue 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -40
- package/dist/assets/index-BoSk-1mt.css +1 -0
- package/dist/assets/index-C5vPZIAB.js +1 -0
- package/{index.html → dist/index.html} +2 -1
- package/dist/package.json +24 -0
- package/package.json +15 -1
- package/.vscode/extensions.json +0 -3
- package/docs/DESIGN.md +0 -38
- package/examples/BasicUsage.vue +0 -116
- package/pnpm-lock.yaml +0 -952
- package/src/App.vue +0 -26
- package/src/main.ts +0 -5
- package/src/style.css +0 -79
- package/src/table/components/CanvasTable.vue +0 -659
- package/src/table/core/renderer.ts +0 -948
- package/src/table/index.ts +0 -3
- package/src/table/types/index.ts +0 -77
- package/tsconfig.app.json +0 -16
- package/tsconfig.json +0 -7
- package/tsconfig.node.json +0 -26
- package/vite.config.ts +0 -7
- /package/{public → dist}/vite.svg +0 -0
package/README.md
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
# draw-table-vue
|
|
2
2
|
|
|
3
|
-
A high-performance, customizable table component for Vue 3
|
|
3
|
+
A high-performance, highly customizable table component for Vue 3 built on HTML5 Canvas. Perfect for handling large datasets (100,000+ rows) with complex features like multi-level headers, fixed columns, and custom cell rendering.
|
|
4
4
|
|
|
5
|
-
## ✨ Features
|
|
5
|
+
## ✨ Key Features
|
|
6
6
|
|
|
7
|
-
- 🚀 **
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
7
|
+
- 🚀 **Canvas Powered**: Smooth 60FPS scrolling even with hundreds of thousands of rows.
|
|
8
|
+
- 📦 **Rich Built-in Types**: Text, Image, Checkbox, Radio, Switch, Tags, Color-Picker.
|
|
9
|
+
- 🔗 **Multi-level Headers**: Support for complex column grouping and nested headers.
|
|
10
|
+
- 📌 **Fixed Columns**: Easily freeze columns to the left or right (coming soon).
|
|
11
|
+
- ➕ **Expandable Rows**: Custom content per row with smooth height adjustments.
|
|
12
|
+
- ✅ **Selection**: Single or multiple row selection with "Select All" functionality.
|
|
13
|
+
- 📊 **Summary Rows**: Flexible bottom-fixed summary rows with custom logic.
|
|
14
|
+
- 🛠 **Custom Rendering**: Use Vue VNodes (via `h` function) for custom cells, headers, and editors.
|
|
15
|
+
- 📐 **Auto-Responsive**: Automatically adjusts to container size changes.
|
|
15
16
|
|
|
16
17
|
## 📦 Installation
|
|
17
18
|
|
|
@@ -25,7 +26,6 @@ npm install draw-table-vue
|
|
|
25
26
|
<script setup lang="ts">
|
|
26
27
|
import { ref } from 'vue';
|
|
27
28
|
import { CanvasTable } from 'draw-table-vue';
|
|
28
|
-
import 'draw-table-vue/dist/style.css'; // If styles are exported separately
|
|
29
29
|
|
|
30
30
|
const columns = [
|
|
31
31
|
{ key: 'id', title: 'ID', width: 60, fixed: 'left' },
|
|
@@ -40,54 +40,139 @@ const data = ref([
|
|
|
40
40
|
</script>
|
|
41
41
|
|
|
42
42
|
<template>
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
<!-- The container must have a defined height -->
|
|
44
|
+
<div style="height: 500px;">
|
|
45
|
+
<CanvasTable
|
|
46
|
+
:columns="columns"
|
|
47
|
+
v-model:data="data"
|
|
48
|
+
/>
|
|
45
49
|
</div>
|
|
46
50
|
</template>
|
|
47
51
|
```
|
|
48
52
|
|
|
49
53
|
## 📖 API Reference
|
|
50
54
|
|
|
51
|
-
### CanvasTable Props
|
|
55
|
+
### `CanvasTable` Props
|
|
52
56
|
|
|
53
57
|
| Prop | Type | Default | Description |
|
|
54
58
|
| --- | --- | --- | --- |
|
|
55
|
-
| `columns` | `ColumnConfig[]` | `[]` |
|
|
56
|
-
| `data` | `TableRow[]` | `[]` |
|
|
57
|
-
| `options` | `TableOptions
|
|
59
|
+
| `columns` | `ColumnConfig[]` | `[]` | List of column definitions. |
|
|
60
|
+
| `data` | `TableRow[]` | `[]` | Array of data objects. Supports `v-model:data`. |
|
|
61
|
+
| `options` | `Partial<TableOptions>` | `{}` | Global configuration for the table. |
|
|
58
62
|
|
|
59
|
-
###
|
|
63
|
+
### `CanvasTable` Events
|
|
64
|
+
|
|
65
|
+
| Event | Arguments | Description |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| `update:data` | `(data: TableRow[])` | Triggered when data is modified (e.g. via editors). |
|
|
68
|
+
| `select-change` | `(keys: (string\|number)[])` | Triggered when row selection changes. |
|
|
69
|
+
| `header-command` | `({ command: string, column: ColumnConfig })` | Triggered by header menu items. |
|
|
70
|
+
|
|
71
|
+
### `ColumnConfig`
|
|
60
72
|
|
|
61
73
|
| Property | Type | Description |
|
|
62
74
|
| --- | --- | --- |
|
|
63
|
-
| `key` | `string` |
|
|
64
|
-
| `title` | `string` |
|
|
65
|
-
| `type` | `
|
|
66
|
-
| `width` | `number` | Width
|
|
75
|
+
| `key` | `string` | Unique key identifying the data field. |
|
|
76
|
+
| `title` | `string` | Text displayed in the column header. |
|
|
77
|
+
| `type` | `CellType` | `text` \| `image` \| `checkbox` \| `radio` \| `switch` \| `color-picker` \| `tags` \| `expand` \| `selection` |
|
|
78
|
+
| `width` | `number` | Width in pixels (default: 100). |
|
|
67
79
|
| `fixed` | `boolean \| 'left'` | Pin column to the left. |
|
|
68
|
-
| `align` | `'left' \| 'center' \| 'right'` |
|
|
69
|
-
| `children` | `ColumnConfig[]` |
|
|
70
|
-
| `summary` | `SummaryFunction[]` |
|
|
80
|
+
| `align` | `'left' \| 'center' \| 'right'` | Horizontal alignment of content. |
|
|
81
|
+
| `children` | `ColumnConfig[]` | Nested columns for group headers. |
|
|
82
|
+
| `summary` | `SummaryFunction[]` | Array of functions to calculate summary values. |
|
|
71
83
|
| `renderCell` | `Function` | Custom cell renderer (Canvas-based). |
|
|
72
|
-
| `renderHeader` | `Function` | Custom header renderer (Vue-based). |
|
|
73
|
-
| `renderEdit` | `Function` | Custom
|
|
84
|
+
| `renderHeader` | `Function` | Custom header renderer (Vue-based VNode). |
|
|
85
|
+
| `renderEdit` | `Function` | Custom editor content (Vue-based VNode). |
|
|
86
|
+
| `renderHeaderMenu` | `Function` | Custom header menu items generator. |
|
|
74
87
|
|
|
75
|
-
### TableOptions
|
|
88
|
+
### `TableOptions`
|
|
76
89
|
|
|
77
90
|
| Option | Type | Default | Description |
|
|
78
91
|
| --- | --- | --- | --- |
|
|
79
|
-
| `rowHeight` | `number` | `40` |
|
|
80
|
-
| `headerHeight` | `number` | `48` | Height of the header. |
|
|
81
|
-
| `border` | `boolean` | `true` |
|
|
82
|
-
| `stripe` | `boolean` | `false` |
|
|
83
|
-
| `multiSelect` | `boolean` | `false` | Enable
|
|
84
|
-
| `renderExpand` | `Function` | - |
|
|
85
|
-
| `spanMethod` | `Function` | - |
|
|
86
|
-
|
|
87
|
-
##
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
92
|
+
| `rowHeight` | `number` | `40` | Default height for each row. |
|
|
93
|
+
| `headerHeight` | `number` | `48` | Height of the header (auto-scales for groups). |
|
|
94
|
+
| `border` | `boolean` | `true` | Whether to show cell borders. |
|
|
95
|
+
| `stripe` | `boolean` | `false` | Whether to show zebra stripes. |
|
|
96
|
+
| `multiSelect` | `boolean` | `false` | Enable checkbox selection. |
|
|
97
|
+
| `renderExpand` | `Function` | - | Renderer for expanded row content (Vue-based VNode). |
|
|
98
|
+
| `spanMethod` | `Function` | - | Function for merging cells (returns `{rowspan, colspan}`). |
|
|
99
|
+
|
|
100
|
+
## 🧩 Advanced Usage
|
|
101
|
+
|
|
102
|
+
### Column Grouping
|
|
103
|
+
```javascript
|
|
104
|
+
const columns = [
|
|
105
|
+
{
|
|
106
|
+
title: 'User Info',
|
|
107
|
+
fixed: 'left',
|
|
108
|
+
children: [
|
|
109
|
+
{ key: 'name', title: 'Name', width: 120 },
|
|
110
|
+
{ key: 'age', title: 'Age', width: 80 }
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{ key: 'address', title: 'Address', width: 200 }
|
|
114
|
+
];
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Custom Rendering (Vue VNodes)
|
|
118
|
+
You can provide custom renderers for headers and cell editors using Vue's `h` function.
|
|
119
|
+
|
|
120
|
+
```javascript
|
|
121
|
+
{
|
|
122
|
+
key: 'name',
|
|
123
|
+
title: 'Name',
|
|
124
|
+
renderHeader: (col, h) => h('span', { style: { color: 'red' } }, col.title),
|
|
125
|
+
renderEdit: (data, h) => h('div', [
|
|
126
|
+
h('h3', 'Edit User'),
|
|
127
|
+
h('input', {
|
|
128
|
+
value: data.name,
|
|
129
|
+
onInput: (e) => data.name = e.target.value
|
|
130
|
+
})
|
|
131
|
+
])
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Summary Rows
|
|
136
|
+
Summary rows are calculated based on the `summary` property of a column.
|
|
137
|
+
|
|
138
|
+
```javascript
|
|
139
|
+
{
|
|
140
|
+
key: 'amount',
|
|
141
|
+
title: 'Amount',
|
|
142
|
+
summary: [
|
|
143
|
+
(data) => {
|
|
144
|
+
const total = data.reduce((acc, r) => acc + r.amount, 0);
|
|
145
|
+
return { label: 'Total', value: total };
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Cell Merging
|
|
152
|
+
Use `spanMethod` to merge cells.
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
const options = {
|
|
156
|
+
spanMethod: ({ rowIndex, columnIndex }) => {
|
|
157
|
+
if (rowIndex === 0 && columnIndex === 0) {
|
|
158
|
+
return { rowspan: 2, colspan: 1 };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## 🛠 Development
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# Install dependencies
|
|
168
|
+
npm install
|
|
169
|
+
|
|
170
|
+
# Run dev server with examples
|
|
171
|
+
npm run dev
|
|
172
|
+
|
|
173
|
+
# Build library
|
|
174
|
+
npm run build
|
|
175
|
+
```
|
|
91
176
|
|
|
92
177
|
## 📄 License
|
|
93
178
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.card{padding:2em}#app{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}.canvas-table-container[data-v-34fbfef2]{width:100%;height:100%;border:1px solid #ebeef5;box-sizing:border-box}.canvas-wrapper[data-v-34fbfef2]{background:#fff}.scrollbar[data-v-34fbfef2]{position:absolute;overflow:auto;z-index:10}.scrollbar.horizontal[data-v-34fbfef2]{bottom:0;left:0;right:0;height:12px}.scrollbar.vertical[data-v-34fbfef2]{top:0;right:0;bottom:0;width:12px}.scrollbar[data-v-34fbfef2]::-webkit-scrollbar{width:8px;height:8px}.scrollbar[data-v-34fbfef2]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}.scrollbar[data-v-34fbfef2]::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.table-overlays[data-v-34fbfef2]{z-index:5}.edit-btn[data-v-34fbfef2]{width:20px;height:20px;background:#fff;border:1px solid #dcdfe6;border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#409eff;box-shadow:0 2px 4px #0000001a}.edit-btn[data-v-34fbfef2]:hover{background:#f5f7fa}.header-menu-overlay[data-v-34fbfef2]{position:absolute;inset:0;pointer-events:auto;z-index:20}.header-menu[data-v-34fbfef2]{background:#fff;border:1px solid #ebeef5;border-radius:4px;box-shadow:0 2px 12px #0000001a;padding:5px 0;min-width:120px}.menu-item[data-v-34fbfef2]{padding:8px 12px;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:14px}.menu-item[data-v-34fbfef2]:hover{background:#f5f7fa;color:#409eff}.edit-dialog-popover[data-v-34fbfef2]{background:#fff;border-radius:4px;width:300px;box-shadow:0 2px 12px #0000001a;border:1px solid #ebeef5;display:flex;flex-direction:column;z-index:2000}.popover-click-mask[data-v-34fbfef2]{position:fixed;inset:0;z-index:1999}.edit-dialog-content[data-v-34fbfef2]{padding:12px}.edit-dialog-footer[data-v-34fbfef2]{padding:8px 12px;border-top:1px solid #ebeef5;display:flex;justify-content:flex-end;gap:8px}button.small[data-v-34fbfef2]{padding:4px 12px;font-size:12px}button.primary[data-v-34fbfef2]{background:#409eff;color:#fff;border-color:#409eff}body{margin:0;padding:0;height:100vh;overflow:hidden}#app{width:100%;height:100%}.app-container{padding:20px;height:100%;display:flex;flex-direction:column}.table-holder{flex:1;min-height:0;margin-top:20px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))i(n);new MutationObserver(n=>{for(const r of n)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&i(l)}).observe(document,{childList:!0,subtree:!0});function s(n){const r={};return n.integrity&&(r.integrity=n.integrity),n.referrerPolicy&&(r.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?r.credentials="include":n.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(n){if(n.ep)return;n.ep=!0;const r=s(n);fetch(n.href,r)}})();function Xs(t){const e=Object.create(null);for(const s of t.split(","))e[s]=1;return s=>s in e}const X={},me=[],Ft=()=>{},Qi=()=>!1,fs=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),qs=t=>t.startsWith("onUpdate:"),nt=Object.assign,Gs=(t,e)=>{const s=t.indexOf(e);s>-1&&t.splice(s,1)},or=Object.prototype.hasOwnProperty,V=(t,e)=>or.call(t,e),W=Array.isArray,xe=t=>Ke(t)==="[object Map]",tn=t=>Ke(t)==="[object Set]",yi=t=>Ke(t)==="[object Date]",k=t=>typeof t=="function",J=t=>typeof t=="string",$t=t=>typeof t=="symbol",j=t=>t!==null&&typeof t=="object",en=t=>(j(t)||k(t))&&k(t.then)&&k(t.catch),sn=Object.prototype.toString,Ke=t=>sn.call(t),cr=t=>Ke(t).slice(8,-1),nn=t=>Ke(t)==="[object Object]",Js=t=>J(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,Pe=Xs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),as=t=>{const e=Object.create(null);return(s=>e[s]||(e[s]=t(s)))},fr=/-\w/g,_t=as(t=>t.replace(fr,e=>e.slice(1).toUpperCase())),ar=/\B([A-Z])/g,ce=as(t=>t.replace(ar,"-$1").toLowerCase()),us=as(t=>t.charAt(0).toUpperCase()+t.slice(1)),bs=as(t=>t?`on${us(t)}`:""),Zt=(t,e)=>!Object.is(t,e),_s=(t,...e)=>{for(let s=0;s<t.length;s++)t[s](...e)},rn=(t,e,s,i=!1)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:i,value:s})},ur=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let bi;const hs=()=>bi||(bi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function wt(t){if(W(t)){const e={};for(let s=0;s<t.length;s++){const i=t[s],n=J(i)?gr(i):wt(i);if(n)for(const r in n)e[r]=n[r]}return e}else if(J(t)||j(t))return t}const hr=/;(?![^(]*\))/g,dr=/:([^]+)/,pr=/\/\*[^]*?\*\//g;function gr(t){const e={};return t.replace(pr,"").split(hr).forEach(s=>{if(s){const i=s.split(dr);i.length>1&&(e[i[0].trim()]=i[1].trim())}}),e}function Zs(t){let e="";if(J(t))e=t;else if(W(t))for(let s=0;s<t.length;s++){const i=Zs(t[s]);i&&(e+=i+" ")}else if(j(t))for(const s in t)t[s]&&(e+=s+" ");return e.trim()}const mr="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",xr=Xs(mr);function ln(t){return!!t||t===""}function vr(t,e){if(t.length!==e.length)return!1;let s=!0;for(let i=0;s&&i<t.length;i++)s=Qs(t[i],e[i]);return s}function Qs(t,e){if(t===e)return!0;let s=yi(t),i=yi(e);if(s||i)return s&&i?t.getTime()===e.getTime():!1;if(s=$t(t),i=$t(e),s||i)return t===e;if(s=W(t),i=W(e),s||i)return s&&i?vr(t,e):!1;if(s=j(t),i=j(e),s||i){if(!s||!i)return!1;const n=Object.keys(t).length,r=Object.keys(e).length;if(n!==r)return!1;for(const l in t){const o=t.hasOwnProperty(l),c=e.hasOwnProperty(l);if(o&&!c||!o&&c||!Qs(t[l],e[l]))return!1}}return String(t)===String(e)}const on=t=>!!(t&&t.__v_isRef===!0),Os=t=>J(t)?t:t==null?"":W(t)||j(t)&&(t.toString===sn||!k(t.toString))?on(t)?Os(t.value):JSON.stringify(t,cn,2):String(t),cn=(t,e)=>on(e)?cn(t,e.value):xe(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((s,[i,n],r)=>(s[ws(i,r)+" =>"]=n,s),{})}:tn(e)?{[`Set(${e.size})`]:[...e.values()].map(s=>ws(s))}:$t(e)?ws(e):j(e)&&!W(e)&&!nn(e)?String(e):e,ws=(t,e="")=>{var s;return $t(t)?`Symbol(${(s=t.description)!=null?s:e})`:t};let gt;class yr{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=gt,!e&>&&(this.index=(gt.scopes||(gt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,s;if(this.scopes)for(e=0,s=this.scopes.length;e<s;e++)this.scopes[e].pause();for(e=0,s=this.effects.length;e<s;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let e,s;if(this.scopes)for(e=0,s=this.scopes.length;e<s;e++)this.scopes[e].resume();for(e=0,s=this.effects.length;e<s;e++)this.effects[e].resume()}}run(e){if(this._active){const s=gt;try{return gt=this,e()}finally{gt=s}}}on(){++this._on===1&&(this.prevScope=gt,gt=this)}off(){this._on>0&&--this._on===0&&(gt=this.prevScope,this.prevScope=void 0)}stop(e){if(this._active){this._active=!1;let s,i;for(s=0,i=this.effects.length;s<i;s++)this.effects[s].stop();for(this.effects.length=0,s=0,i=this.cleanups.length;s<i;s++)this.cleanups[s]();if(this.cleanups.length=0,this.scopes){for(s=0,i=this.scopes.length;s<i;s++)this.scopes[s].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){const n=this.parent.scopes.pop();n&&n!==this&&(this.parent.scopes[this.index]=n,n.index=this.index)}this.parent=void 0}}}function br(){return gt}let Y;const Ss=new WeakSet;class fn{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,gt&>.active&>.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Ss.has(this)&&(Ss.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||un(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,_i(this),hn(this);const e=Y,s=Tt;Y=this,Tt=!0;try{return this.fn()}finally{dn(this),Y=e,Tt=s,this.flags&=-3}}stop(){if(this.flags&1){for(let e=this.deps;e;e=e.nextDep)si(e);this.deps=this.depsTail=void 0,_i(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Ss.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Is(this)&&this.run()}get dirty(){return Is(this)}}let an=0,He,Me;function un(t,e=!1){if(t.flags|=8,e){t.next=Me,Me=t;return}t.next=He,He=t}function ti(){an++}function ei(){if(--an>0)return;if(Me){let e=Me;for(Me=void 0;e;){const s=e.next;e.next=void 0,e.flags&=-9,e=s}}let t;for(;He;){let e=He;for(He=void 0;e;){const s=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(i){t||(t=i)}e=s}}if(t)throw t}function hn(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function dn(t){let e,s=t.depsTail,i=s;for(;i;){const n=i.prevDep;i.version===-1?(i===s&&(s=n),si(i),_r(i)):e=i,i.dep.activeLink=i.prevActiveLink,i.prevActiveLink=void 0,i=n}t.deps=e,t.depsTail=s}function Is(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(pn(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function pn(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===We)||(t.globalVersion=We,!t.isSSR&&t.flags&128&&(!t.deps&&!t._dirty||!Is(t))))return;t.flags|=2;const e=t.dep,s=Y,i=Tt;Y=t,Tt=!0;try{hn(t);const n=t.fn(t._value);(e.version===0||Zt(n,t._value))&&(t.flags|=128,t._value=n,e.version++)}catch(n){throw e.version++,n}finally{Y=s,Tt=i,dn(t),t.flags&=-3}}function si(t,e=!1){const{dep:s,prevSub:i,nextSub:n}=t;if(i&&(i.nextSub=n,t.prevSub=void 0),n&&(n.prevSub=i,t.nextSub=void 0),s.subs===t&&(s.subs=i,!i&&s.computed)){s.computed.flags&=-5;for(let r=s.computed.deps;r;r=r.nextDep)si(r,!0)}!e&&!--s.sc&&s.map&&s.map.delete(s.key)}function _r(t){const{prevDep:e,nextDep:s}=t;e&&(e.nextDep=s,t.prevDep=void 0),s&&(s.prevDep=e,t.nextDep=void 0)}let Tt=!0;const gn=[];function jt(){gn.push(Tt),Tt=!1}function zt(){const t=gn.pop();Tt=t===void 0?!0:t}function _i(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const s=Y;Y=void 0;try{e()}finally{Y=s}}}let We=0;class wr{constructor(e,s){this.sub=e,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ii{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!Y||!Tt||Y===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==Y)s=this.activeLink=new wr(Y,this),Y.deps?(s.prevDep=Y.depsTail,Y.depsTail.nextDep=s,Y.depsTail=s):Y.deps=Y.depsTail=s,mn(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const i=s.nextDep;i.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=i),s.prevDep=Y.depsTail,s.nextDep=void 0,Y.depsTail.nextDep=s,Y.depsTail=s,Y.deps===s&&(Y.deps=i)}return s}trigger(e){this.version++,We++,this.notify(e)}notify(e){ti();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{ei()}}}function mn(t){if(t.dep.sc++,t.sub.flags&4){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let i=e.deps;i;i=i.nextDep)mn(i)}const s=t.dep.subs;s!==t&&(t.prevSub=s,s&&(s.nextSub=t)),t.dep.subs=t}}const Ls=new WeakMap,le=Symbol(""),Fs=Symbol(""),De=Symbol("");function lt(t,e,s){if(Tt&&Y){let i=Ls.get(t);i||Ls.set(t,i=new Map);let n=i.get(s);n||(i.set(s,n=new ii),n.map=i,n.key=s),n.track()}}function Ut(t,e,s,i,n,r){const l=Ls.get(t);if(!l){We++;return}const o=c=>{c&&c.trigger()};if(ti(),e==="clear")l.forEach(o);else{const c=W(t),a=c&&Js(s);if(c&&s==="length"){const u=Number(i);l.forEach((d,g)=>{(g==="length"||g===De||!$t(g)&&g>=u)&&o(d)})}else switch((s!==void 0||l.has(void 0))&&o(l.get(s)),a&&o(l.get(De)),e){case"add":c?a&&o(l.get("length")):(o(l.get(le)),xe(t)&&o(l.get(Fs)));break;case"delete":c||(o(l.get(le)),xe(t)&&o(l.get(Fs)));break;case"set":xe(t)&&o(l.get(le));break}}ei()}function pe(t){const e=K(t);return e===t?e:(lt(e,"iterate",De),bt(t)?e:e.map(Rt))}function ds(t){return lt(t=K(t),"iterate",De),t}function qt(t,e){return Yt(t)?_e(oe(t)?Rt(e):e):Rt(e)}const Sr={__proto__:null,[Symbol.iterator](){return Cs(this,Symbol.iterator,t=>qt(this,t))},concat(...t){return pe(this).concat(...t.map(e=>W(e)?pe(e):e))},entries(){return Cs(this,"entries",t=>(t[1]=qt(this,t[1]),t))},every(t,e){return Bt(this,"every",t,e,void 0,arguments)},filter(t,e){return Bt(this,"filter",t,e,s=>s.map(i=>qt(this,i)),arguments)},find(t,e){return Bt(this,"find",t,e,s=>qt(this,s),arguments)},findIndex(t,e){return Bt(this,"findIndex",t,e,void 0,arguments)},findLast(t,e){return Bt(this,"findLast",t,e,s=>qt(this,s),arguments)},findLastIndex(t,e){return Bt(this,"findLastIndex",t,e,void 0,arguments)},forEach(t,e){return Bt(this,"forEach",t,e,void 0,arguments)},includes(...t){return Ts(this,"includes",t)},indexOf(...t){return Ts(this,"indexOf",t)},join(t){return pe(this).join(t)},lastIndexOf(...t){return Ts(this,"lastIndexOf",t)},map(t,e){return Bt(this,"map",t,e,void 0,arguments)},pop(){return Te(this,"pop")},push(...t){return Te(this,"push",t)},reduce(t,...e){return wi(this,"reduce",t,e)},reduceRight(t,...e){return wi(this,"reduceRight",t,e)},shift(){return Te(this,"shift")},some(t,e){return Bt(this,"some",t,e,void 0,arguments)},splice(...t){return Te(this,"splice",t)},toReversed(){return pe(this).toReversed()},toSorted(t){return pe(this).toSorted(t)},toSpliced(...t){return pe(this).toSpliced(...t)},unshift(...t){return Te(this,"unshift",t)},values(){return Cs(this,"values",t=>qt(this,t))}};function Cs(t,e,s){const i=ds(t),n=i[e]();return i!==t&&!bt(t)&&(n._next=n.next,n.next=()=>{const r=n._next();return r.done||(r.value=s(r.value)),r}),n}const Cr=Array.prototype;function Bt(t,e,s,i,n,r){const l=ds(t),o=l!==t&&!bt(t),c=l[e];if(c!==Cr[e]){const d=c.apply(t,r);return o?Rt(d):d}let a=s;l!==t&&(o?a=function(d,g){return s.call(this,qt(t,d),g,t)}:s.length>2&&(a=function(d,g){return s.call(this,d,g,t)}));const u=c.call(l,a,i);return o&&n?n(u):u}function wi(t,e,s,i){const n=ds(t);let r=s;return n!==t&&(bt(t)?s.length>3&&(r=function(l,o,c){return s.call(this,l,o,c,t)}):r=function(l,o,c){return s.call(this,l,qt(t,o),c,t)}),n[e](r,...i)}function Ts(t,e,s){const i=K(t);lt(i,"iterate",De);const n=i[e](...s);return(n===-1||n===!1)&&oi(s[0])?(s[0]=K(s[0]),i[e](...s)):n}function Te(t,e,s=[]){jt(),ti();const i=K(t)[e].apply(t,s);return ei(),zt(),i}const Tr=Xs("__proto__,__v_isRef,__isVue"),xn=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter($t));function Rr(t){$t(t)||(t=String(t));const e=K(this);return lt(e,"has",t),e.hasOwnProperty(t)}class vn{constructor(e=!1,s=!1){this._isReadonly=e,this._isShallow=s}get(e,s,i){if(s==="__v_skip")return e.__v_skip;const n=this._isReadonly,r=this._isShallow;if(s==="__v_isReactive")return!n;if(s==="__v_isReadonly")return n;if(s==="__v_isShallow")return r;if(s==="__v_raw")return i===(n?r?$r:wn:r?_n:bn).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(i)?e:void 0;const l=W(e);if(!n){let c;if(l&&(c=Sr[s]))return c;if(s==="hasOwnProperty")return Rr}const o=Reflect.get(e,s,ct(e)?e:i);if(($t(s)?xn.has(s):Tr(s))||(n||lt(e,"get",s),r))return o;if(ct(o)){const c=l&&Js(s)?o:o.value;return n&&j(c)?Ws(c):c}return j(o)?n?Ws(o):ri(o):o}}class yn extends vn{constructor(e=!1){super(!1,e)}set(e,s,i,n){let r=e[s];const l=W(e)&&Js(s);if(!this._isShallow){const a=Yt(r);if(!bt(i)&&!Yt(i)&&(r=K(r),i=K(i)),!l&&ct(r)&&!ct(i))return a||(r.value=i),!0}const o=l?Number(s)<e.length:V(e,s),c=Reflect.set(e,s,i,ct(e)?e:n);return e===K(n)&&(o?Zt(i,r)&&Ut(e,"set",s,i):Ut(e,"add",s,i)),c}deleteProperty(e,s){const i=V(e,s);e[s];const n=Reflect.deleteProperty(e,s);return n&&i&&Ut(e,"delete",s,void 0),n}has(e,s){const i=Reflect.has(e,s);return(!$t(s)||!xn.has(s))&<(e,"has",s),i}ownKeys(e){return lt(e,"iterate",W(e)?"length":le),Reflect.ownKeys(e)}}class Er extends vn{constructor(e=!1){super(!0,e)}set(e,s){return!0}deleteProperty(e,s){return!0}}const Ar=new yn,Pr=new Er,Hr=new yn(!0);const $s=t=>t,ze=t=>Reflect.getPrototypeOf(t);function Mr(t,e,s){return function(...i){const n=this.__v_raw,r=K(n),l=xe(r),o=t==="entries"||t===Symbol.iterator&&l,c=t==="keys"&&l,a=n[t](...i),u=s?$s:e?_e:Rt;return!e&<(r,"iterate",c?Fs:le),nt(Object.create(a),{next(){const{value:d,done:g}=a.next();return g?{value:d,done:g}:{value:o?[u(d[0]),u(d[1])]:u(d),done:g}}})}}function Ye(t){return function(...e){return t==="delete"?!1:t==="clear"?void 0:this}}function Or(t,e){const s={get(n){const r=this.__v_raw,l=K(r),o=K(n);t||(Zt(n,o)&<(l,"get",n),lt(l,"get",o));const{has:c}=ze(l),a=e?$s:t?_e:Rt;if(c.call(l,n))return a(r.get(n));if(c.call(l,o))return a(r.get(o));r!==l&&r.get(n)},get size(){const n=this.__v_raw;return!t&<(K(n),"iterate",le),n.size},has(n){const r=this.__v_raw,l=K(r),o=K(n);return t||(Zt(n,o)&<(l,"has",n),lt(l,"has",o)),n===o?r.has(n):r.has(n)||r.has(o)},forEach(n,r){const l=this,o=l.__v_raw,c=K(o),a=e?$s:t?_e:Rt;return!t&<(c,"iterate",le),o.forEach((u,d)=>n.call(r,a(u),a(d),l))}};return nt(s,t?{add:Ye("add"),set:Ye("set"),delete:Ye("delete"),clear:Ye("clear")}:{add(n){!e&&!bt(n)&&!Yt(n)&&(n=K(n));const r=K(this);return ze(r).has.call(r,n)||(r.add(n),Ut(r,"add",n,n)),this},set(n,r){!e&&!bt(r)&&!Yt(r)&&(r=K(r));const l=K(this),{has:o,get:c}=ze(l);let a=o.call(l,n);a||(n=K(n),a=o.call(l,n));const u=c.call(l,n);return l.set(n,r),a?Zt(r,u)&&Ut(l,"set",n,r):Ut(l,"add",n,r),this},delete(n){const r=K(this),{has:l,get:o}=ze(r);let c=l.call(r,n);c||(n=K(n),c=l.call(r,n)),o&&o.call(r,n);const a=r.delete(n);return c&&Ut(r,"delete",n,void 0),a},clear(){const n=K(this),r=n.size!==0,l=n.clear();return r&&Ut(n,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(n=>{s[n]=Mr(n,t,e)}),s}function ni(t,e){const s=Or(t,e);return(i,n,r)=>n==="__v_isReactive"?!t:n==="__v_isReadonly"?t:n==="__v_raw"?i:Reflect.get(V(s,n)&&n in i?s:i,n,r)}const Ir={get:ni(!1,!1)},Lr={get:ni(!1,!0)},Fr={get:ni(!0,!1)};const bn=new WeakMap,_n=new WeakMap,wn=new WeakMap,$r=new WeakMap;function Wr(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Dr(t){return t.__v_skip||!Object.isExtensible(t)?0:Wr(cr(t))}function ri(t){return Yt(t)?t:li(t,!1,Ar,Ir,bn)}function kr(t){return li(t,!1,Hr,Lr,_n)}function Ws(t){return li(t,!0,Pr,Fr,wn)}function li(t,e,s,i,n){if(!j(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const r=Dr(t);if(r===0)return t;const l=n.get(t);if(l)return l;const o=new Proxy(t,r===2?i:s);return n.set(t,o),o}function oe(t){return Yt(t)?oe(t.__v_raw):!!(t&&t.__v_isReactive)}function Yt(t){return!!(t&&t.__v_isReadonly)}function bt(t){return!!(t&&t.__v_isShallow)}function oi(t){return t?!!t.__v_raw:!1}function K(t){const e=t&&t.__v_raw;return e?K(e):t}function Nr(t){return!V(t,"__v_skip")&&Object.isExtensible(t)&&rn(t,"__v_skip",!0),t}const Rt=t=>j(t)?ri(t):t,_e=t=>j(t)?Ws(t):t;function ct(t){return t?t.__v_isRef===!0:!1}function it(t){return Sn(t,!1)}function Br(t){return Sn(t,!0)}function Sn(t,e){return ct(t)?t:new Kr(t,e)}class Kr{constructor(e,s){this.dep=new ii,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?e:K(e),this._value=s?e:Rt(e),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(e){const s=this._rawValue,i=this.__v_isShallow||bt(e)||Yt(e);e=i?e:K(e),Zt(e,s)&&(this._rawValue=e,this._value=i?e:Rt(e),this.dep.trigger())}}function Cn(t){return ct(t)?t.value:t}const Vr={get:(t,e,s)=>e==="__v_raw"?t:Cn(Reflect.get(t,e,s)),set:(t,e,s,i)=>{const n=t[e];return ct(n)&&!ct(s)?(n.value=s,!0):Reflect.set(t,e,s,i)}};function Tn(t){return oe(t)?t:new Proxy(t,Vr)}class Ur{constructor(e,s,i){this.fn=e,this.setter=s,this._value=void 0,this.dep=new ii(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=We-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=i}notify(){if(this.flags|=16,!(this.flags&8)&&Y!==this)return un(this,!0),!0}get value(){const e=this.dep.track();return pn(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function jr(t,e,s=!1){let i,n;return k(t)?i=t:(i=t.get,n=t.set),new Ur(i,n,s)}const Xe={},es=new WeakMap;let ne;function zr(t,e=!1,s=ne){if(s){let i=es.get(s);i||es.set(s,i=[]),i.push(t)}}function Yr(t,e,s=X){const{immediate:i,deep:n,once:r,scheduler:l,augmentJob:o,call:c}=s,a=P=>n?P:bt(P)||n===!1||n===0?Jt(P,1):Jt(P);let u,d,g,v,S=!1,C=!1;if(ct(t)?(d=()=>t.value,S=bt(t)):oe(t)?(d=()=>a(t),S=!0):W(t)?(C=!0,S=t.some(P=>oe(P)||bt(P)),d=()=>t.map(P=>{if(ct(P))return P.value;if(oe(P))return a(P);if(k(P))return c?c(P,2):P()})):k(t)?e?d=c?()=>c(t,2):t:d=()=>{if(g){jt();try{g()}finally{zt()}}const P=ne;ne=u;try{return c?c(t,3,[v]):t(v)}finally{ne=P}}:d=Ft,e&&n){const P=d,D=n===!0?1/0:n;d=()=>Jt(P(),D)}const M=br(),H=()=>{u.stop(),M&&M.active&&Gs(M.effects,u)};if(r&&e){const P=e;e=(...D)=>{P(...D),H()}}let A=C?new Array(t.length).fill(Xe):Xe;const O=P=>{if(!(!(u.flags&1)||!u.dirty&&!P))if(e){const D=u.run();if(n||S||(C?D.some((G,Q)=>Zt(G,A[Q])):Zt(D,A))){g&&g();const G=ne;ne=u;try{const Q=[D,A===Xe?void 0:C&&A[0]===Xe?[]:A,v];A=D,c?c(e,3,Q):e(...Q)}finally{ne=G}}}else u.run()};return o&&o(O),u=new fn(d),u.scheduler=l?()=>l(O,!1):O,v=P=>zr(P,!1,u),g=u.onStop=()=>{const P=es.get(u);if(P){if(c)c(P,4);else for(const D of P)D();es.delete(u)}},e?i?O(!0):A=u.run():l?l(O.bind(null,!0),!0):u.run(),H.pause=u.pause.bind(u),H.resume=u.resume.bind(u),H.stop=H,H}function Jt(t,e=1/0,s){if(e<=0||!j(t)||t.__v_skip||(s=s||new Map,(s.get(t)||0)>=e))return t;if(s.set(t,e),e--,ct(t))Jt(t.value,e,s);else if(W(t))for(let i=0;i<t.length;i++)Jt(t[i],e,s);else if(tn(t)||xe(t))t.forEach(i=>{Jt(i,e,s)});else if(nn(t)){for(const i in t)Jt(t[i],e,s);for(const i of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,i)&&Jt(t[i],e,s)}return t}function Ve(t,e,s,i){try{return i?t(...i):t()}catch(n){ps(n,e,s)}}function Wt(t,e,s,i){if(k(t)){const n=Ve(t,e,s,i);return n&&en(n)&&n.catch(r=>{ps(r,e,s)}),n}if(W(t)){const n=[];for(let r=0;r<t.length;r++)n.push(Wt(t[r],e,s,i));return n}}function ps(t,e,s,i=!0){const n=e?e.vnode:null,{errorHandler:r,throwUnhandledErrorInProduction:l}=e&&e.appContext.config||X;if(e){let o=e.parent;const c=e.proxy,a=`https://vuejs.org/error-reference/#runtime-${s}`;for(;o;){const u=o.ec;if(u){for(let d=0;d<u.length;d++)if(u[d](t,c,a)===!1)return}o=o.parent}if(r){jt(),Ve(r,null,10,[t,c,a]),zt();return}}Xr(t,s,n,i,l)}function Xr(t,e,s,i=!0,n=!1){if(n)throw t;console.error(t)}const ut=[];let It=-1;const ve=[];let Gt=null,ge=0;const Rn=Promise.resolve();let ss=null;function qr(t){const e=ss||Rn;return t?e.then(this?t.bind(this):t):e}function Gr(t){let e=It+1,s=ut.length;for(;e<s;){const i=e+s>>>1,n=ut[i],r=ke(n);r<t||r===t&&n.flags&2?e=i+1:s=i}return e}function ci(t){if(!(t.flags&1)){const e=ke(t),s=ut[ut.length-1];!s||!(t.flags&2)&&e>=ke(s)?ut.push(t):ut.splice(Gr(e),0,t),t.flags|=1,En()}}function En(){ss||(ss=Rn.then(Pn))}function Jr(t){W(t)?ve.push(...t):Gt&&t.id===-1?Gt.splice(ge+1,0,t):t.flags&1||(ve.push(t),t.flags|=1),En()}function Si(t,e,s=It+1){for(;s<ut.length;s++){const i=ut[s];if(i&&i.flags&2){if(t&&i.id!==t.uid)continue;ut.splice(s,1),s--,i.flags&4&&(i.flags&=-2),i(),i.flags&4||(i.flags&=-2)}}}function An(t){if(ve.length){const e=[...new Set(ve)].sort((s,i)=>ke(s)-ke(i));if(ve.length=0,Gt){Gt.push(...e);return}for(Gt=e,ge=0;ge<Gt.length;ge++){const s=Gt[ge];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}Gt=null,ge=0}}const ke=t=>t.id==null?t.flags&2?-1:1/0:t.id;function Pn(t){try{for(It=0;It<ut.length;It++){const e=ut[It];e&&!(e.flags&8)&&(e.flags&4&&(e.flags&=-2),Ve(e,e.i,e.i?15:14),e.flags&4||(e.flags&=-2))}}finally{for(;It<ut.length;It++){const e=ut[It];e&&(e.flags&=-2)}It=-1,ut.length=0,An(),ss=null,(ut.length||ve.length)&&Pn()}}let Ct=null,Hn=null;function is(t){const e=Ct;return Ct=t,Hn=t&&t.type.__scopeId||null,e}function Zr(t,e=Ct,s){if(!e||t._n)return t;const i=(...n)=>{i._d&&ls(-1);const r=is(e);let l;try{l=t(...n)}finally{is(r),i._d&&ls(1)}return l};return i._n=!0,i._c=!0,i._d=!0,i}function se(t,e,s,i){const n=t.dirs,r=e&&e.dirs;for(let l=0;l<n.length;l++){const o=n[l];r&&(o.oldValue=r[l].value);let c=o.dir[i];c&&(jt(),Wt(c,s,8,[t.el,o,t,e]),zt())}}function Qr(t,e){if(ot){let s=ot.provides;const i=ot.parent&&ot.parent.provides;i===s&&(s=ot.provides=Object.create(i)),s[t]=e}}function Je(t,e,s=!1){const i=eo();if(i||be){let n=be?be._context.provides:i?i.parent==null||i.ce?i.vnode.appContext&&i.vnode.appContext.provides:i.parent.provides:void 0;if(n&&t in n)return n[t];if(arguments.length>1)return s&&k(e)?e.call(i&&i.proxy):e}}const tl=Symbol.for("v-scx"),el=()=>Je(tl);function ye(t,e,s){return Mn(t,e,s)}function Mn(t,e,s=X){const{immediate:i,deep:n,flush:r,once:l}=s,o=nt({},s),c=e&&i||!e&&r!=="post";let a;if(Be){if(r==="sync"){const v=el();a=v.__watcherHandles||(v.__watcherHandles=[])}else if(!c){const v=()=>{};return v.stop=Ft,v.resume=Ft,v.pause=Ft,v}}const u=ot;o.call=(v,S,C)=>Wt(v,u,S,C);let d=!1;r==="post"?o.scheduler=v=>{rt(v,u&&u.suspense)}:r!=="sync"&&(d=!0,o.scheduler=(v,S)=>{S?v():ci(v)}),o.augmentJob=v=>{e&&(v.flags|=4),d&&(v.flags|=2,u&&(v.id=u.uid,v.i=u))};const g=Yr(t,e,o);return Be&&(a?a.push(g):c&&g()),g}function sl(t,e,s){const i=this.proxy,n=J(t)?t.includes(".")?On(i,t):()=>i[t]:t.bind(i,i);let r;k(e)?r=e:(r=e.handler,s=e);const l=Ue(this),o=Mn(n,r.bind(i),s);return l(),o}function On(t,e){const s=e.split(".");return()=>{let i=t;for(let n=0;n<s.length&&i;n++)i=i[s[n]];return i}}const In=Symbol("_vte"),il=t=>t.__isTeleport,Oe=t=>t&&(t.disabled||t.disabled===""),Ci=t=>t&&(t.defer||t.defer===""),Ti=t=>typeof SVGElement<"u"&&t instanceof SVGElement,Ri=t=>typeof MathMLElement=="function"&&t instanceof MathMLElement,Ds=(t,e)=>{const s=t&&t.to;return J(s)?e?e(s):null:s},Ln={name:"Teleport",__isTeleport:!0,process(t,e,s,i,n,r,l,o,c,a){const{mc:u,pc:d,pbc:g,o:{insert:v,querySelector:S,createText:C,createComment:M}}=a,H=Oe(e.props);let{shapeFlag:A,children:O,dynamicChildren:P}=e;if(t==null){const D=e.el=C(""),G=e.anchor=C("");v(D,s,i),v(G,s,i);const Q=(et,ft)=>{A&16&&u(O,et,ft,n,r,l,o,c)},tt=()=>{const et=e.target=Ds(e.props,S),ft=ks(et,e,C,v);et&&(l!=="svg"&&Ti(et)?l="svg":l!=="mathml"&&Ri(et)&&(l="mathml"),n&&n.isCE&&(n.ce._teleportTargets||(n.ce._teleportTargets=new Set)).add(et),H||(Q(et,ft),Ze(e,!1)))};H&&(Q(s,G),Ze(e,!0)),Ci(e.props)?(e.el.__isMounted=!1,rt(()=>{tt(),delete e.el.__isMounted},r)):tt()}else{if(Ci(e.props)&&t.el.__isMounted===!1){rt(()=>{Ln.process(t,e,s,i,n,r,l,o,c,a)},r);return}e.el=t.el,e.targetStart=t.targetStart;const D=e.anchor=t.anchor,G=e.target=t.target,Q=e.targetAnchor=t.targetAnchor,tt=Oe(t.props),et=tt?s:G,ft=tt?D:Q;if(l==="svg"||Ti(G)?l="svg":(l==="mathml"||Ri(G))&&(l="mathml"),P?(g(t.dynamicChildren,P,et,n,r,l,o),di(t,e,!0)):c||d(t,e,et,ft,n,r,l,o,!1),H)tt?e.props&&t.props&&e.props.to!==t.props.to&&(e.props.to=t.props.to):qe(e,s,D,a,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const Et=e.target=Ds(e.props,S);Et&&qe(e,Et,null,a,0)}else tt&&qe(e,G,Q,a,1);Ze(e,H)}},remove(t,e,s,{um:i,o:{remove:n}},r){const{shapeFlag:l,children:o,anchor:c,targetStart:a,targetAnchor:u,target:d,props:g}=t;if(d&&(n(a),n(u)),r&&n(c),l&16){const v=r||!Oe(g);for(let S=0;S<o.length;S++){const C=o[S];i(C,e,s,v,!!C.dynamicChildren)}}},move:qe,hydrate:nl};function qe(t,e,s,{o:{insert:i},m:n},r=2){r===0&&i(t.targetAnchor,e,s);const{el:l,anchor:o,shapeFlag:c,children:a,props:u}=t,d=r===2;if(d&&i(l,e,s),(!d||Oe(u))&&c&16)for(let g=0;g<a.length;g++)n(a[g],e,s,2);d&&i(o,e,s)}function nl(t,e,s,i,n,r,{o:{nextSibling:l,parentNode:o,querySelector:c,insert:a,createText:u}},d){function g(M,H){let A=H;for(;A;){if(A&&A.nodeType===8){if(A.data==="teleport start anchor")e.targetStart=A;else if(A.data==="teleport anchor"){e.targetAnchor=A,M._lpa=e.targetAnchor&&l(e.targetAnchor);break}}A=l(A)}}function v(M,H){H.anchor=d(l(M),H,o(M),s,i,n,r)}const S=e.target=Ds(e.props,c),C=Oe(e.props);if(S){const M=S._lpa||S.firstChild;e.shapeFlag&16&&(C?(v(t,e),g(S,M),e.targetAnchor||ks(S,e,u,a,o(t)===S?t:null)):(e.anchor=l(t),g(S,M),e.targetAnchor||ks(S,e,u,a),d(M&&l(M),e,S,s,i,n,r))),Ze(e,C)}else C&&e.shapeFlag&16&&(v(t,e),e.targetStart=t,e.targetAnchor=l(t));return e.anchor&&l(e.anchor)}const rl=Ln;function Ze(t,e){const s=t.ctx;if(s&&s.ut){let i,n;for(e?(i=t.el,n=t.anchor):(i=t.targetStart,n=t.targetAnchor);i&&i!==n;)i.nodeType===1&&i.setAttribute("data-v-owner",s.uid),i=i.nextSibling;s.ut()}}function ks(t,e,s,i,n=null){const r=e.targetStart=s(""),l=e.targetAnchor=s("");return r[In]=l,t&&(i(r,t,n),i(l,t,n)),l}const ll=Symbol("_leaveCb");function fi(t,e){t.shapeFlag&6&&t.component?(t.transition=e,fi(t.component.subTree,e)):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Ns(t,e){return k(t)?nt({name:t.name},e,{setup:t}):t}function Fn(t){t.ids=[t.ids[0]+t.ids[2]+++"-",0,0]}function Ei(t,e){let s;return!!((s=Object.getOwnPropertyDescriptor(t,e))&&!s.configurable)}const ns=new WeakMap;function Ie(t,e,s,i,n=!1){if(W(t)){t.forEach((C,M)=>Ie(C,e&&(W(e)?e[M]:e),s,i,n));return}if(Le(i)&&!n){i.shapeFlag&512&&i.type.__asyncResolved&&i.component.subTree.component&&Ie(t,e,s,i.component.subTree);return}const r=i.shapeFlag&4?gi(i.component):i.el,l=n?null:r,{i:o,r:c}=t,a=e&&e.r,u=o.refs===X?o.refs={}:o.refs,d=o.setupState,g=K(d),v=d===X?Qi:C=>Ei(u,C)?!1:V(g,C),S=(C,M)=>!(M&&Ei(u,M));if(a!=null&&a!==c){if(Ai(e),J(a))u[a]=null,v(a)&&(d[a]=null);else if(ct(a)){const C=e;S(a,C.k)&&(a.value=null),C.k&&(u[C.k]=null)}}if(k(c))Ve(c,o,12,[l,u]);else{const C=J(c),M=ct(c);if(C||M){const H=()=>{if(t.f){const A=C?v(c)?d[c]:u[c]:S()||!t.k?c.value:u[t.k];if(n)W(A)&&Gs(A,r);else if(W(A))A.includes(r)||A.push(r);else if(C)u[c]=[r],v(c)&&(d[c]=u[c]);else{const O=[r];S(c,t.k)&&(c.value=O),t.k&&(u[t.k]=O)}}else C?(u[c]=l,v(c)&&(d[c]=l)):M&&(S(c,t.k)&&(c.value=l),t.k&&(u[t.k]=l))};if(l){const A=()=>{H(),ns.delete(t)};A.id=-1,ns.set(t,A),rt(A,s)}else Ai(t),H()}}}function Ai(t){const e=ns.get(t);e&&(e.flags|=8,ns.delete(t))}hs().requestIdleCallback;hs().cancelIdleCallback;const Le=t=>!!t.type.__asyncLoader,$n=t=>t.type.__isKeepAlive;function ol(t,e){Wn(t,"a",e)}function cl(t,e){Wn(t,"da",e)}function Wn(t,e,s=ot){const i=t.__wdc||(t.__wdc=()=>{let n=s;for(;n;){if(n.isDeactivated)return;n=n.parent}return t()});if(gs(e,i,s),s){let n=s.parent;for(;n&&n.parent;)$n(n.parent.vnode)&&fl(i,e,s,n),n=n.parent}}function fl(t,e,s,i){const n=gs(e,t,i,!0);ai(()=>{Gs(i[e],n)},s)}function gs(t,e,s=ot,i=!1){if(s){const n=s[t]||(s[t]=[]),r=e.__weh||(e.__weh=(...l)=>{jt();const o=Ue(s),c=Wt(e,s,t,l);return o(),zt(),c});return i?n.unshift(r):n.push(r),r}}const Xt=t=>(e,s=ot)=>{(!Be||t==="sp")&&gs(t,(...i)=>e(...i),s)},al=Xt("bm"),Dn=Xt("m"),ul=Xt("bu"),hl=Xt("u"),dl=Xt("bum"),ai=Xt("um"),pl=Xt("sp"),gl=Xt("rtg"),ml=Xt("rtc");function xl(t,e=ot){gs("ec",t,e)}const vl="components",kn=Symbol.for("v-ndc");function yl(t){return J(t)?bl(vl,t,!1)||t:t||kn}function bl(t,e,s=!0,i=!1){const n=Ct||ot;if(n){const r=n.type;{const o=lo(r,!1);if(o&&(o===e||o===_t(e)||o===us(_t(e))))return r}const l=Pi(n[t]||r[t],e)||Pi(n.appContext[t],e);return!l&&i?r:l}}function Pi(t,e){return t&&(t[e]||t[_t(e)]||t[us(_t(e))])}function Hi(t,e,s,i){let n;const r=s,l=W(t);if(l||J(t)){const o=l&&oe(t);let c=!1,a=!1;o&&(c=!bt(t),a=Yt(t),t=ds(t)),n=new Array(t.length);for(let u=0,d=t.length;u<d;u++)n[u]=e(c?a?_e(Rt(t[u])):Rt(t[u]):t[u],u,void 0,r)}else if(typeof t=="number"){n=new Array(t);for(let o=0;o<t;o++)n[o]=e(o+1,o,void 0,r)}else if(j(t))if(t[Symbol.iterator])n=Array.from(t,(o,c)=>e(o,c,void 0,r));else{const o=Object.keys(t);n=new Array(o.length);for(let c=0,a=o.length;c<a;c++){const u=o[c];n[c]=e(t[u],u,c,r)}}else n=[];return n}const Bs=t=>t?nr(t)?gi(t):Bs(t.parent):null,Fe=nt(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>Bs(t.parent),$root:t=>Bs(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>Bn(t),$forceUpdate:t=>t.f||(t.f=()=>{ci(t.update)}),$nextTick:t=>t.n||(t.n=qr.bind(t.proxy)),$watch:t=>sl.bind(t)}),Rs=(t,e)=>t!==X&&!t.__isScriptSetup&&V(t,e),_l={get({_:t},e){if(e==="__v_skip")return!0;const{ctx:s,setupState:i,data:n,props:r,accessCache:l,type:o,appContext:c}=t;if(e[0]!=="$"){const g=l[e];if(g!==void 0)switch(g){case 1:return i[e];case 2:return n[e];case 4:return s[e];case 3:return r[e]}else{if(Rs(i,e))return l[e]=1,i[e];if(n!==X&&V(n,e))return l[e]=2,n[e];if(V(r,e))return l[e]=3,r[e];if(s!==X&&V(s,e))return l[e]=4,s[e];Ks&&(l[e]=0)}}const a=Fe[e];let u,d;if(a)return e==="$attrs"&<(t.attrs,"get",""),a(t);if((u=o.__cssModules)&&(u=u[e]))return u;if(s!==X&&V(s,e))return l[e]=4,s[e];if(d=c.config.globalProperties,V(d,e))return d[e]},set({_:t},e,s){const{data:i,setupState:n,ctx:r}=t;return Rs(n,e)?(n[e]=s,!0):i!==X&&V(i,e)?(i[e]=s,!0):V(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(r[e]=s,!0)},has({_:{data:t,setupState:e,accessCache:s,ctx:i,appContext:n,props:r,type:l}},o){let c;return!!(s[o]||t!==X&&o[0]!=="$"&&V(t,o)||Rs(e,o)||V(r,o)||V(i,o)||V(Fe,o)||V(n.config.globalProperties,o)||(c=l.__cssModules)&&c[o])},defineProperty(t,e,s){return s.get!=null?t._.accessCache[e]=0:V(s,"value")&&this.set(t,e,s.value,null),Reflect.defineProperty(t,e,s)}};function Mi(t){return W(t)?t.reduce((e,s)=>(e[s]=null,e),{}):t}let Ks=!0;function wl(t){const e=Bn(t),s=t.proxy,i=t.ctx;Ks=!1,e.beforeCreate&&Oi(e.beforeCreate,t,"bc");const{data:n,computed:r,methods:l,watch:o,provide:c,inject:a,created:u,beforeMount:d,mounted:g,beforeUpdate:v,updated:S,activated:C,deactivated:M,beforeDestroy:H,beforeUnmount:A,destroyed:O,unmounted:P,render:D,renderTracked:G,renderTriggered:Q,errorCaptured:tt,serverPrefetch:et,expose:ft,inheritAttrs:Et,components:fe,directives:te,filters:ae}=e;if(a&&Sl(a,i,null),l)for(const q in l){const B=l[q];k(B)&&(i[q]=B.bind(s))}if(n){const q=n.call(s,s);j(q)&&(t.data=ri(q))}if(Ks=!0,r)for(const q in r){const B=r[q],Dt=k(B)?B.bind(s,s):k(B.get)?B.get.bind(s,s):Ft,ue=!k(B)&&k(B.set)?B.set.bind(s):Ft,kt=re({get:Dt,set:ue});Object.defineProperty(i,q,{enumerable:!0,configurable:!0,get:()=>kt.value,set:yt=>kt.value=yt})}if(o)for(const q in o)Nn(o[q],i,s,q);if(c){const q=k(c)?c.call(s):c;Reflect.ownKeys(q).forEach(B=>{Qr(B,q[B])})}u&&Oi(u,t,"c");function st(q,B){W(B)?B.forEach(Dt=>q(Dt.bind(s))):B&&q(B.bind(s))}if(st(al,d),st(Dn,g),st(ul,v),st(hl,S),st(ol,C),st(cl,M),st(xl,tt),st(ml,G),st(gl,Q),st(dl,A),st(ai,P),st(pl,et),W(ft))if(ft.length){const q=t.exposed||(t.exposed={});ft.forEach(B=>{Object.defineProperty(q,B,{get:()=>s[B],set:Dt=>s[B]=Dt,enumerable:!0})})}else t.exposed||(t.exposed={});D&&t.render===Ft&&(t.render=D),Et!=null&&(t.inheritAttrs=Et),fe&&(t.components=fe),te&&(t.directives=te),et&&Fn(t)}function Sl(t,e,s=Ft){W(t)&&(t=Vs(t));for(const i in t){const n=t[i];let r;j(n)?"default"in n?r=Je(n.from||i,n.default,!0):r=Je(n.from||i):r=Je(n),ct(r)?Object.defineProperty(e,i,{enumerable:!0,configurable:!0,get:()=>r.value,set:l=>r.value=l}):e[i]=r}}function Oi(t,e,s){Wt(W(t)?t.map(i=>i.bind(e.proxy)):t.bind(e.proxy),e,s)}function Nn(t,e,s,i){let n=i.includes(".")?On(s,i):()=>s[i];if(J(t)){const r=e[t];k(r)&&ye(n,r)}else if(k(t))ye(n,t.bind(s));else if(j(t))if(W(t))t.forEach(r=>Nn(r,e,s,i));else{const r=k(t.handler)?t.handler.bind(s):e[t.handler];k(r)&&ye(n,r,t)}}function Bn(t){const e=t.type,{mixins:s,extends:i}=e,{mixins:n,optionsCache:r,config:{optionMergeStrategies:l}}=t.appContext,o=r.get(e);let c;return o?c=o:!n.length&&!s&&!i?c=e:(c={},n.length&&n.forEach(a=>rs(c,a,l,!0)),rs(c,e,l)),j(e)&&r.set(e,c),c}function rs(t,e,s,i=!1){const{mixins:n,extends:r}=e;r&&rs(t,r,s,!0),n&&n.forEach(l=>rs(t,l,s,!0));for(const l in e)if(!(i&&l==="expose")){const o=Cl[l]||s&&s[l];t[l]=o?o(t[l],e[l]):e[l]}return t}const Cl={data:Ii,props:Li,emits:Li,methods:Ae,computed:Ae,beforeCreate:at,created:at,beforeMount:at,mounted:at,beforeUpdate:at,updated:at,beforeDestroy:at,beforeUnmount:at,destroyed:at,unmounted:at,activated:at,deactivated:at,errorCaptured:at,serverPrefetch:at,components:Ae,directives:Ae,watch:Rl,provide:Ii,inject:Tl};function Ii(t,e){return e?t?function(){return nt(k(t)?t.call(this,this):t,k(e)?e.call(this,this):e)}:e:t}function Tl(t,e){return Ae(Vs(t),Vs(e))}function Vs(t){if(W(t)){const e={};for(let s=0;s<t.length;s++)e[t[s]]=t[s];return e}return t}function at(t,e){return t?[...new Set([].concat(t,e))]:e}function Ae(t,e){return t?nt(Object.create(null),t,e):e}function Li(t,e){return t?W(t)&&W(e)?[...new Set([...t,...e])]:nt(Object.create(null),Mi(t),Mi(e??{})):e}function Rl(t,e){if(!t)return e;if(!e)return t;const s=nt(Object.create(null),t);for(const i in e)s[i]=at(t[i],e[i]);return s}function Kn(){return{app:null,config:{isNativeTag:Qi,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let El=0;function Al(t,e){return function(i,n=null){k(i)||(i=nt({},i)),n!=null&&!j(n)&&(n=null);const r=Kn(),l=new WeakSet,o=[];let c=!1;const a=r.app={_uid:El++,_component:i,_props:n,_container:null,_context:r,_instance:null,version:co,get config(){return r.config},set config(u){},use(u,...d){return l.has(u)||(u&&k(u.install)?(l.add(u),u.install(a,...d)):k(u)&&(l.add(u),u(a,...d))),a},mixin(u){return r.mixins.includes(u)||r.mixins.push(u),a},component(u,d){return d?(r.components[u]=d,a):r.components[u]},directive(u,d){return d?(r.directives[u]=d,a):r.directives[u]},mount(u,d,g){if(!c){const v=a._ceVNode||ht(i,n);return v.appContext=r,g===!0?g="svg":g===!1&&(g=void 0),t(v,u,g),c=!0,a._container=u,u.__vue_app__=a,gi(v.component)}},onUnmount(u){o.push(u)},unmount(){c&&(Wt(o,a._instance,16),t(null,a._container),delete a._container.__vue_app__)},provide(u,d){return r.provides[u]=d,a},runWithContext(u){const d=be;be=a;try{return u()}finally{be=d}}};return a}}let be=null;const Pl=(t,e)=>e==="modelValue"||e==="model-value"?t.modelModifiers:t[`${e}Modifiers`]||t[`${_t(e)}Modifiers`]||t[`${ce(e)}Modifiers`];function Hl(t,e,...s){if(t.isUnmounted)return;const i=t.vnode.props||X;let n=s;const r=e.startsWith("update:"),l=r&&Pl(i,e.slice(7));l&&(l.trim&&(n=s.map(u=>J(u)?u.trim():u)),l.number&&(n=s.map(ur)));let o,c=i[o=bs(e)]||i[o=bs(_t(e))];!c&&r&&(c=i[o=bs(ce(e))]),c&&Wt(c,t,6,n);const a=i[o+"Once"];if(a){if(!t.emitted)t.emitted={};else if(t.emitted[o])return;t.emitted[o]=!0,Wt(a,t,6,n)}}const Ml=new WeakMap;function Vn(t,e,s=!1){const i=s?Ml:e.emitsCache,n=i.get(t);if(n!==void 0)return n;const r=t.emits;let l={},o=!1;if(!k(t)){const c=a=>{const u=Vn(a,e,!0);u&&(o=!0,nt(l,u))};!s&&e.mixins.length&&e.mixins.forEach(c),t.extends&&c(t.extends),t.mixins&&t.mixins.forEach(c)}return!r&&!o?(j(t)&&i.set(t,null),null):(W(r)?r.forEach(c=>l[c]=null):nt(l,r),j(t)&&i.set(t,l),l)}function ms(t,e){return!t||!fs(e)?!1:(e=e.slice(2).replace(/Once$/,""),V(t,e[0].toLowerCase()+e.slice(1))||V(t,ce(e))||V(t,e))}function Fi(t){const{type:e,vnode:s,proxy:i,withProxy:n,propsOptions:[r],slots:l,attrs:o,emit:c,render:a,renderCache:u,props:d,data:g,setupState:v,ctx:S,inheritAttrs:C}=t,M=is(t);let H,A;try{if(s.shapeFlag&4){const P=n||i,D=P;H=Lt(a.call(D,P,u,d,v,g,S)),A=o}else{const P=e;H=Lt(P.length>1?P(d,{attrs:o,slots:l,emit:c}):P(d,null)),A=e.props?o:Ol(o)}}catch(P){$e.length=0,ps(P,t,1),H=ht(Qt)}let O=H;if(A&&C!==!1){const P=Object.keys(A),{shapeFlag:D}=O;P.length&&D&7&&(r&&P.some(qs)&&(A=Il(A,r)),O=we(O,A,!1,!0))}return s.dirs&&(O=we(O,null,!1,!0),O.dirs=O.dirs?O.dirs.concat(s.dirs):s.dirs),s.transition&&fi(O,s.transition),H=O,is(M),H}const Ol=t=>{let e;for(const s in t)(s==="class"||s==="style"||fs(s))&&((e||(e={}))[s]=t[s]);return e},Il=(t,e)=>{const s={};for(const i in t)(!qs(i)||!(i.slice(9)in e))&&(s[i]=t[i]);return s};function Ll(t,e,s){const{props:i,children:n,component:r}=t,{props:l,children:o,patchFlag:c}=e,a=r.emitsOptions;if(e.dirs||e.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return i?$i(i,l,a):!!l;if(c&8){const u=e.dynamicProps;for(let d=0;d<u.length;d++){const g=u[d];if(Un(l,i,g)&&!ms(a,g))return!0}}}else return(n||o)&&(!o||!o.$stable)?!0:i===l?!1:i?l?$i(i,l,a):!0:!!l;return!1}function $i(t,e,s){const i=Object.keys(e);if(i.length!==Object.keys(t).length)return!0;for(let n=0;n<i.length;n++){const r=i[n];if(Un(e,t,r)&&!ms(s,r))return!0}return!1}function Un(t,e,s){const i=t[s],n=e[s];return s==="style"&&j(i)&&j(n)?!Qs(i,n):i!==n}function Fl({vnode:t,parent:e},s){for(;e;){const i=e.subTree;if(i.suspense&&i.suspense.activeBranch===t&&(i.el=t.el),i===t)(t=e.vnode).el=s,e=e.parent;else break}}const jn={},zn=()=>Object.create(jn),Yn=t=>Object.getPrototypeOf(t)===jn;function $l(t,e,s,i=!1){const n={},r=zn();t.propsDefaults=Object.create(null),Xn(t,e,n,r);for(const l in t.propsOptions[0])l in n||(n[l]=void 0);s?t.props=i?n:kr(n):t.type.props?t.props=n:t.props=r,t.attrs=r}function Wl(t,e,s,i){const{props:n,attrs:r,vnode:{patchFlag:l}}=t,o=K(n),[c]=t.propsOptions;let a=!1;if((i||l>0)&&!(l&16)){if(l&8){const u=t.vnode.dynamicProps;for(let d=0;d<u.length;d++){let g=u[d];if(ms(t.emitsOptions,g))continue;const v=e[g];if(c)if(V(r,g))v!==r[g]&&(r[g]=v,a=!0);else{const S=_t(g);n[S]=Us(c,o,S,v,t,!1)}else v!==r[g]&&(r[g]=v,a=!0)}}}else{Xn(t,e,n,r)&&(a=!0);let u;for(const d in o)(!e||!V(e,d)&&((u=ce(d))===d||!V(e,u)))&&(c?s&&(s[d]!==void 0||s[u]!==void 0)&&(n[d]=Us(c,o,d,void 0,t,!0)):delete n[d]);if(r!==o)for(const d in r)(!e||!V(e,d))&&(delete r[d],a=!0)}a&&Ut(t.attrs,"set","")}function Xn(t,e,s,i){const[n,r]=t.propsOptions;let l=!1,o;if(e)for(let c in e){if(Pe(c))continue;const a=e[c];let u;n&&V(n,u=_t(c))?!r||!r.includes(u)?s[u]=a:(o||(o={}))[u]=a:ms(t.emitsOptions,c)||(!(c in i)||a!==i[c])&&(i[c]=a,l=!0)}if(r){const c=K(s),a=o||X;for(let u=0;u<r.length;u++){const d=r[u];s[d]=Us(n,c,d,a[d],t,!V(a,d))}}return l}function Us(t,e,s,i,n,r){const l=t[s];if(l!=null){const o=V(l,"default");if(o&&i===void 0){const c=l.default;if(l.type!==Function&&!l.skipFactory&&k(c)){const{propsDefaults:a}=n;if(s in a)i=a[s];else{const u=Ue(n);i=a[s]=c.call(null,e),u()}}else i=c;n.ce&&n.ce._setProp(s,i)}l[0]&&(r&&!o?i=!1:l[1]&&(i===""||i===ce(s))&&(i=!0))}return i}const Dl=new WeakMap;function qn(t,e,s=!1){const i=s?Dl:e.propsCache,n=i.get(t);if(n)return n;const r=t.props,l={},o=[];let c=!1;if(!k(t)){const u=d=>{c=!0;const[g,v]=qn(d,e,!0);nt(l,g),v&&o.push(...v)};!s&&e.mixins.length&&e.mixins.forEach(u),t.extends&&u(t.extends),t.mixins&&t.mixins.forEach(u)}if(!r&&!c)return j(t)&&i.set(t,me),me;if(W(r))for(let u=0;u<r.length;u++){const d=_t(r[u]);Wi(d)&&(l[d]=X)}else if(r)for(const u in r){const d=_t(u);if(Wi(d)){const g=r[u],v=l[d]=W(g)||k(g)?{type:g}:nt({},g),S=v.type;let C=!1,M=!0;if(W(S))for(let H=0;H<S.length;++H){const A=S[H],O=k(A)&&A.name;if(O==="Boolean"){C=!0;break}else O==="String"&&(M=!1)}else C=k(S)&&S.name==="Boolean";v[0]=C,v[1]=M,(C||V(v,"default"))&&o.push(d)}}const a=[l,o];return j(t)&&i.set(t,a),a}function Wi(t){return t[0]!=="$"&&!Pe(t)}const ui=t=>t==="_"||t==="_ctx"||t==="$stable",hi=t=>W(t)?t.map(Lt):[Lt(t)],kl=(t,e,s)=>{if(e._n)return e;const i=Zr((...n)=>hi(e(...n)),s);return i._c=!1,i},Gn=(t,e,s)=>{const i=t._ctx;for(const n in t){if(ui(n))continue;const r=t[n];if(k(r))e[n]=kl(n,r,i);else if(r!=null){const l=hi(r);e[n]=()=>l}}},Jn=(t,e)=>{const s=hi(e);t.slots.default=()=>s},Zn=(t,e,s)=>{for(const i in e)(s||!ui(i))&&(t[i]=e[i])},Nl=(t,e,s)=>{const i=t.slots=zn();if(t.vnode.shapeFlag&32){const n=e._;n?(Zn(i,e,s),s&&rn(i,"_",n,!0)):Gn(e,i)}else e&&Jn(t,e)},Bl=(t,e,s)=>{const{vnode:i,slots:n}=t;let r=!0,l=X;if(i.shapeFlag&32){const o=e._;o?s&&o===1?r=!1:Zn(n,e,s):(r=!e.$stable,Gn(e,n)),l=e}else e&&(Jn(t,e),l={default:1});if(r)for(const o in n)!ui(o)&&l[o]==null&&delete n[o]},rt=zl;function Kl(t){return Vl(t)}function Vl(t,e){const s=hs();s.__VUE__=!0;const{insert:i,remove:n,patchProp:r,createElement:l,createText:o,createComment:c,setText:a,setElementText:u,parentNode:d,nextSibling:g,setScopeId:v=Ft,insertStaticContent:S}=t,C=(f,h,p,x=null,m=null,y=null,T=void 0,w=null,_=!!h.dynamicChildren)=>{if(f===h)return;f&&!Re(f,h)&&(x=he(f),yt(f,m,y,!0),f=null),h.patchFlag===-2&&(_=!1,h.dynamicChildren=null);const{type:b,ref:L,shapeFlag:E}=h;switch(b){case xs:M(f,h,p,x);break;case Qt:H(f,h,p,x);break;case As:f==null&&A(h,p,x,T);break;case St:fe(f,h,p,x,m,y,T,w,_);break;default:E&1?D(f,h,p,x,m,y,T,w,_):E&6?te(f,h,p,x,m,y,T,w,_):(E&64||E&128)&&b.process(f,h,p,x,m,y,T,w,_,R)}L!=null&&m?Ie(L,f&&f.ref,y,h||f,!h):L==null&&f&&f.ref!=null&&Ie(f.ref,null,y,f,!0)},M=(f,h,p,x)=>{if(f==null)i(h.el=o(h.children),p,x);else{const m=h.el=f.el;h.children!==f.children&&a(m,h.children)}},H=(f,h,p,x)=>{f==null?i(h.el=c(h.children||""),p,x):h.el=f.el},A=(f,h,p,x)=>{[f.el,f.anchor]=S(f.children,h,p,x,f.el,f.anchor)},O=({el:f,anchor:h},p,x)=>{let m;for(;f&&f!==h;)m=g(f),i(f,p,x),f=m;i(h,p,x)},P=({el:f,anchor:h})=>{let p;for(;f&&f!==h;)p=g(f),n(f),f=p;n(h)},D=(f,h,p,x,m,y,T,w,_)=>{if(h.type==="svg"?T="svg":h.type==="math"&&(T="mathml"),f==null)G(h,p,x,m,y,T,w,_);else{const b=f.el&&f.el._isVueCE?f.el:null;try{b&&b._beginPatch(),et(f,h,m,y,T,w,_)}finally{b&&b._endPatch()}}},G=(f,h,p,x,m,y,T,w)=>{let _,b;const{props:L,shapeFlag:E,transition:I,dirs:$}=f;if(_=f.el=l(f.type,y,L&&L.is,L),E&8?u(_,f.children):E&16&&tt(f.children,_,null,x,m,Es(f,y),T,w),$&&se(f,null,x,"created"),Q(_,f,f.scopeId,T,x),L){for(const z in L)z!=="value"&&!Pe(z)&&r(_,z,null,L[z],y,x);"value"in L&&r(_,"value",null,L.value,y),(b=L.onVnodeBeforeMount)&&Mt(b,x,f)}$&&se(f,null,x,"beforeMount");const N=Ul(m,I);N&&I.beforeEnter(_),i(_,h,p),((b=L&&L.onVnodeMounted)||N||$)&&rt(()=>{b&&Mt(b,x,f),N&&I.enter(_),$&&se(f,null,x,"mounted")},m)},Q=(f,h,p,x,m)=>{if(p&&v(f,p),x)for(let y=0;y<x.length;y++)v(f,x[y]);if(m){let y=m.subTree;if(h===y||er(y.type)&&(y.ssContent===h||y.ssFallback===h)){const T=m.vnode;Q(f,T,T.scopeId,T.slotScopeIds,m.parent)}}},tt=(f,h,p,x,m,y,T,w,_=0)=>{for(let b=_;b<f.length;b++){const L=f[b]=w?Vt(f[b]):Lt(f[b]);C(null,L,h,p,x,m,y,T,w)}},et=(f,h,p,x,m,y,T)=>{const w=h.el=f.el;let{patchFlag:_,dynamicChildren:b,dirs:L}=h;_|=f.patchFlag&16;const E=f.props||X,I=h.props||X;let $;if(p&&ie(p,!1),($=I.onVnodeBeforeUpdate)&&Mt($,p,h,f),L&&se(h,f,p,"beforeUpdate"),p&&ie(p,!0),(E.innerHTML&&I.innerHTML==null||E.textContent&&I.textContent==null)&&u(w,""),b?ft(f.dynamicChildren,b,w,p,x,Es(h,m),y):T||B(f,h,w,null,p,x,Es(h,m),y,!1),_>0){if(_&16)Et(w,E,I,p,m);else if(_&2&&E.class!==I.class&&r(w,"class",null,I.class,m),_&4&&r(w,"style",E.style,I.style,m),_&8){const N=h.dynamicProps;for(let z=0;z<N.length;z++){const U=N[z],dt=E[U],pt=I[U];(pt!==dt||U==="value")&&r(w,U,dt,pt,m,p)}}_&1&&f.children!==h.children&&u(w,h.children)}else!T&&b==null&&Et(w,E,I,p,m);(($=I.onVnodeUpdated)||L)&&rt(()=>{$&&Mt($,p,h,f),L&&se(h,f,p,"updated")},x)},ft=(f,h,p,x,m,y,T)=>{for(let w=0;w<h.length;w++){const _=f[w],b=h[w],L=_.el&&(_.type===St||!Re(_,b)||_.shapeFlag&198)?d(_.el):p;C(_,b,L,null,x,m,y,T,!0)}},Et=(f,h,p,x,m)=>{if(h!==p){if(h!==X)for(const y in h)!Pe(y)&&!(y in p)&&r(f,y,h[y],null,m,x);for(const y in p){if(Pe(y))continue;const T=p[y],w=h[y];T!==w&&y!=="value"&&r(f,y,w,T,m,x)}"value"in p&&r(f,"value",h.value,p.value,m)}},fe=(f,h,p,x,m,y,T,w,_)=>{const b=h.el=f?f.el:o(""),L=h.anchor=f?f.anchor:o("");let{patchFlag:E,dynamicChildren:I,slotScopeIds:$}=h;$&&(w=w?w.concat($):$),f==null?(i(b,p,x),i(L,p,x),tt(h.children||[],p,L,m,y,T,w,_)):E>0&&E&64&&I&&f.dynamicChildren&&f.dynamicChildren.length===I.length?(ft(f.dynamicChildren,I,p,m,y,T,w),(h.key!=null||m&&h===m.subTree)&&di(f,h,!0)):B(f,h,p,L,m,y,T,w,_)},te=(f,h,p,x,m,y,T,w,_)=>{h.slotScopeIds=w,f==null?h.shapeFlag&512?m.ctx.activate(h,p,x,T,_):ae(h,p,x,m,y,T,_):Se(f,h,_)},ae=(f,h,p,x,m,y,T)=>{const w=f.component=to(f,x,m);if($n(f)&&(w.ctx.renderer=R),so(w,!1,T),w.asyncDep){if(m&&m.registerDep(w,st,T),!f.el){const _=w.subTree=ht(Qt);H(null,_,h,p),f.placeholder=_.el}}else st(w,f,h,p,m,y,T)},Se=(f,h,p)=>{const x=h.component=f.component;if(Ll(f,h,p))if(x.asyncDep&&!x.asyncResolved){q(x,h,p);return}else x.next=h,x.update();else h.el=f.el,x.vnode=h},st=(f,h,p,x,m,y,T)=>{const w=()=>{if(f.isMounted){let{next:E,bu:I,u:$,parent:N,vnode:z}=f;{const Pt=Qn(f);if(Pt){E&&(E.el=z.el,q(f,E,T)),Pt.asyncDep.then(()=>{rt(()=>{f.isUnmounted||b()},m)});return}}let U=E,dt;ie(f,!1),E?(E.el=z.el,q(f,E,T)):E=z,I&&_s(I),(dt=E.props&&E.props.onVnodeBeforeUpdate)&&Mt(dt,N,E,z),ie(f,!0);const pt=Fi(f),At=f.subTree;f.subTree=pt,C(At,pt,d(At.el),he(At),f,m,y),E.el=pt.el,U===null&&Fl(f,pt.el),$&&rt($,m),(dt=E.props&&E.props.onVnodeUpdated)&&rt(()=>Mt(dt,N,E,z),m)}else{let E;const{el:I,props:$}=h,{bm:N,m:z,parent:U,root:dt,type:pt}=f,At=Le(h);ie(f,!1),N&&_s(N),!At&&(E=$&&$.onVnodeBeforeMount)&&Mt(E,U,h),ie(f,!0);{dt.ce&&dt.ce._hasShadowRoot()&&dt.ce._injectChildStyle(pt);const Pt=f.subTree=Fi(f);C(null,Pt,p,x,f,m,y),h.el=Pt.el}if(z&&rt(z,m),!At&&(E=$&&$.onVnodeMounted)){const Pt=h;rt(()=>Mt(E,U,Pt),m)}(h.shapeFlag&256||U&&Le(U.vnode)&&U.vnode.shapeFlag&256)&&f.a&&rt(f.a,m),f.isMounted=!0,h=p=x=null}};f.scope.on();const _=f.effect=new fn(w);f.scope.off();const b=f.update=_.run.bind(_),L=f.job=_.runIfDirty.bind(_);L.i=f,L.id=f.uid,_.scheduler=()=>ci(L),ie(f,!0),b()},q=(f,h,p)=>{h.component=f;const x=f.vnode.props;f.vnode=h,f.next=null,Wl(f,h.props,x,p),Bl(f,h.children,p),jt(),Si(f),zt()},B=(f,h,p,x,m,y,T,w,_=!1)=>{const b=f&&f.children,L=f?f.shapeFlag:0,E=h.children,{patchFlag:I,shapeFlag:$}=h;if(I>0){if(I&128){ue(b,E,p,x,m,y,T,w,_);return}else if(I&256){Dt(b,E,p,x,m,y,T,w,_);return}}$&8?(L&16&&ee(b,m,y),E!==b&&u(p,E)):L&16?$&16?ue(b,E,p,x,m,y,T,w,_):ee(b,m,y,!0):(L&8&&u(p,""),$&16&&tt(E,p,x,m,y,T,w,_))},Dt=(f,h,p,x,m,y,T,w,_)=>{f=f||me,h=h||me;const b=f.length,L=h.length,E=Math.min(b,L);let I;for(I=0;I<E;I++){const $=h[I]=_?Vt(h[I]):Lt(h[I]);C(f[I],$,p,null,m,y,T,w,_)}b>L?ee(f,m,y,!0,!1,E):tt(h,p,x,m,y,T,w,_,E)},ue=(f,h,p,x,m,y,T,w,_)=>{let b=0;const L=h.length;let E=f.length-1,I=L-1;for(;b<=E&&b<=I;){const $=f[b],N=h[b]=_?Vt(h[b]):Lt(h[b]);if(Re($,N))C($,N,p,null,m,y,T,w,_);else break;b++}for(;b<=E&&b<=I;){const $=f[E],N=h[I]=_?Vt(h[I]):Lt(h[I]);if(Re($,N))C($,N,p,null,m,y,T,w,_);else break;E--,I--}if(b>E){if(b<=I){const $=I+1,N=$<L?h[$].el:x;for(;b<=I;)C(null,h[b]=_?Vt(h[b]):Lt(h[b]),p,N,m,y,T,w,_),b++}}else if(b>I)for(;b<=E;)yt(f[b],m,y,!0),b++;else{const $=b,N=b,z=new Map;for(b=N;b<=I;b++){const mt=h[b]=_?Vt(h[b]):Lt(h[b]);mt.key!=null&&z.set(mt.key,b)}let U,dt=0;const pt=I-N+1;let At=!1,Pt=0;const Ce=new Array(pt);for(b=0;b<pt;b++)Ce[b]=0;for(b=$;b<=E;b++){const mt=f[b];if(dt>=pt){yt(mt,m,y,!0);continue}let Ht;if(mt.key!=null)Ht=z.get(mt.key);else for(U=N;U<=I;U++)if(Ce[U-N]===0&&Re(mt,h[U])){Ht=U;break}Ht===void 0?yt(mt,m,y,!0):(Ce[Ht-N]=b+1,Ht>=Pt?Pt=Ht:At=!0,C(mt,h[Ht],p,null,m,y,T,w,_),dt++)}const mi=At?jl(Ce):me;for(U=mi.length-1,b=pt-1;b>=0;b--){const mt=N+b,Ht=h[mt],xi=h[mt+1],vi=mt+1<L?xi.el||tr(xi):x;Ce[b]===0?C(null,Ht,p,vi,m,y,T,w,_):At&&(U<0||b!==mi[U]?kt(Ht,p,vi,2):U--)}}},kt=(f,h,p,x,m=null)=>{const{el:y,type:T,transition:w,children:_,shapeFlag:b}=f;if(b&6){kt(f.component.subTree,h,p,x);return}if(b&128){f.suspense.move(h,p,x);return}if(b&64){T.move(f,h,p,R);return}if(T===St){i(y,h,p);for(let E=0;E<_.length;E++)kt(_[E],h,p,x);i(f.anchor,h,p);return}if(T===As){O(f,h,p);return}if(x!==2&&b&1&&w)if(x===0)w.beforeEnter(y),i(y,h,p),rt(()=>w.enter(y),m);else{const{leave:E,delayLeave:I,afterLeave:$}=w,N=()=>{f.ctx.isUnmounted?n(y):i(y,h,p)},z=()=>{y._isLeaving&&y[ll](!0),E(y,()=>{N(),$&&$()})};I?I(y,N,z):z()}else i(y,h,p)},yt=(f,h,p,x=!1,m=!1)=>{const{type:y,props:T,ref:w,children:_,dynamicChildren:b,shapeFlag:L,patchFlag:E,dirs:I,cacheIndex:$}=f;if(E===-2&&(m=!1),w!=null&&(jt(),Ie(w,null,p,f,!0),zt()),$!=null&&(h.renderCache[$]=void 0),L&256){h.ctx.deactivate(f);return}const N=L&1&&I,z=!Le(f);let U;if(z&&(U=T&&T.onVnodeBeforeUnmount)&&Mt(U,h,f),L&6)ys(f.component,p,x);else{if(L&128){f.suspense.unmount(p,x);return}N&&se(f,null,h,"beforeUnmount"),L&64?f.type.remove(f,h,p,R,x):b&&!b.hasOnce&&(y!==St||E>0&&E&64)?ee(b,h,p,!1,!0):(y===St&&E&384||!m&&L&16)&&ee(_,h,p),x&&je(f)}(z&&(U=T&&T.onVnodeUnmounted)||N)&&rt(()=>{U&&Mt(U,h,f),N&&se(f,null,h,"unmounted")},p)},je=f=>{const{type:h,el:p,anchor:x,transition:m}=f;if(h===St){vs(p,x);return}if(h===As){P(f);return}const y=()=>{n(p),m&&!m.persisted&&m.afterLeave&&m.afterLeave()};if(f.shapeFlag&1&&m&&!m.persisted){const{leave:T,delayLeave:w}=m,_=()=>T(p,y);w?w(f.el,y,_):_()}else y()},vs=(f,h)=>{let p;for(;f!==h;)p=g(f),n(f),f=p;n(h)},ys=(f,h,p)=>{const{bum:x,scope:m,job:y,subTree:T,um:w,m:_,a:b}=f;Di(_),Di(b),x&&_s(x),m.stop(),y&&(y.flags|=8,yt(T,f,h,p)),w&&rt(w,h),rt(()=>{f.isUnmounted=!0},h)},ee=(f,h,p,x=!1,m=!1,y=0)=>{for(let T=y;T<f.length;T++)yt(f[T],h,p,x,m)},he=f=>{if(f.shapeFlag&6)return he(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=g(f.anchor||f.el),p=h&&h[In];return p?g(p):h};let Nt=!1;const de=(f,h,p)=>{let x;f==null?h._vnode&&(yt(h._vnode,null,null,!0),x=h._vnode.component):C(h._vnode||null,f,h,null,null,null,p),h._vnode=f,Nt||(Nt=!0,Si(x),An(),Nt=!1)},R={p:C,um:yt,m:kt,r:je,mt:ae,mc:tt,pc:B,pbc:ft,n:he,o:t};return{render:de,hydrate:void 0,createApp:Al(de)}}function Es({type:t,props:e},s){return s==="svg"&&t==="foreignObject"||s==="mathml"&&t==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:s}function ie({effect:t,job:e},s){s?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function Ul(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function di(t,e,s=!1){const i=t.children,n=e.children;if(W(i)&&W(n))for(let r=0;r<i.length;r++){const l=i[r];let o=n[r];o.shapeFlag&1&&!o.dynamicChildren&&((o.patchFlag<=0||o.patchFlag===32)&&(o=n[r]=Vt(n[r]),o.el=l.el),!s&&o.patchFlag!==-2&&di(l,o)),o.type===xs&&(o.patchFlag===-1&&(o=n[r]=Vt(o)),o.el=l.el),o.type===Qt&&!o.el&&(o.el=l.el)}}function jl(t){const e=t.slice(),s=[0];let i,n,r,l,o;const c=t.length;for(i=0;i<c;i++){const a=t[i];if(a!==0){if(n=s[s.length-1],t[n]<a){e[i]=n,s.push(i);continue}for(r=0,l=s.length-1;r<l;)o=r+l>>1,t[s[o]]<a?r=o+1:l=o;a<t[s[r]]&&(r>0&&(e[i]=s[r-1]),s[r]=i)}}for(r=s.length,l=s[r-1];r-- >0;)s[r]=l,l=e[l];return s}function Qn(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:Qn(e)}function Di(t){if(t)for(let e=0;e<t.length;e++)t[e].flags|=8}function tr(t){if(t.placeholder)return t.placeholder;const e=t.component;return e?tr(e.subTree):null}const er=t=>t.__isSuspense;function zl(t,e){e&&e.pendingBranch?W(t)?e.effects.push(...t):e.effects.push(t):Jr(t)}const St=Symbol.for("v-fgt"),xs=Symbol.for("v-txt"),Qt=Symbol.for("v-cmt"),As=Symbol.for("v-stc"),$e=[];let vt=null;function xt(t=!1){$e.push(vt=t?null:[])}function Yl(){$e.pop(),vt=$e[$e.length-1]||null}let Ne=1;function ls(t,e=!1){Ne+=t,t<0&&vt&&e&&(vt.hasOnce=!0)}function sr(t){return t.dynamicChildren=Ne>0?vt||me:null,Yl(),Ne>0&&vt&&vt.push(t),t}function Ot(t,e,s,i,n,r){return sr(Z(t,e,s,i,n,r,!0))}function js(t,e,s,i,n){return sr(ht(t,e,s,i,n,!0))}function os(t){return t?t.__v_isVNode===!0:!1}function Re(t,e){return t.type===e.type&&t.key===e.key}const ir=({key:t})=>t??null,Qe=({ref:t,ref_key:e,ref_for:s})=>(typeof t=="number"&&(t=""+t),t!=null?J(t)||ct(t)||k(t)?{i:Ct,r:t,k:e,f:!!s}:t:null);function Z(t,e=null,s=null,i=0,n=null,r=t===St?0:1,l=!1,o=!1){const c={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&ir(e),ref:e&&Qe(e),scopeId:Hn,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:i,dynamicProps:n,dynamicChildren:null,appContext:null,ctx:Ct};return o?(pi(c,s),r&128&&t.normalize(c)):s&&(c.shapeFlag|=J(s)?8:16),Ne>0&&!l&&vt&&(c.patchFlag>0||r&6)&&c.patchFlag!==32&&vt.push(c),c}const ht=Xl;function Xl(t,e=null,s=null,i=0,n=null,r=!1){if((!t||t===kn)&&(t=Qt),os(t)){const o=we(t,e,!0);return s&&pi(o,s),Ne>0&&!r&&vt&&(o.shapeFlag&6?vt[vt.indexOf(t)]=o:vt.push(o)),o.patchFlag=-2,o}if(oo(t)&&(t=t.__vccOpts),e){e=ql(e);let{class:o,style:c}=e;o&&!J(o)&&(e.class=Zs(o)),j(c)&&(oi(c)&&!W(c)&&(c=nt({},c)),e.style=wt(c))}const l=J(t)?1:er(t)?128:il(t)?64:j(t)?4:k(t)?2:0;return Z(t,e,s,i,n,l,r,!0)}function ql(t){return t?oi(t)||Yn(t)?nt({},t):t:null}function we(t,e,s=!1,i=!1){const{props:n,ref:r,patchFlag:l,children:o,transition:c}=t,a=e?Jl(n||{},e):n,u={__v_isVNode:!0,__v_skip:!0,type:t.type,props:a,key:a&&ir(a),ref:e&&e.ref?s&&r?W(r)?r.concat(Qe(e)):[r,Qe(e)]:Qe(e):r,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:o,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==St?l===-1?16:l|16:l,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:c,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&we(t.ssContent),ssFallback:t.ssFallback&&we(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return c&&i&&fi(u,c.clone(u)),u}function Gl(t=" ",e=0){return ht(xs,null,t,e)}function Ge(t="",e=!1){return e?(xt(),js(Qt,null,t)):ht(Qt,null,t)}function Lt(t){return t==null||typeof t=="boolean"?ht(Qt):W(t)?ht(St,null,t.slice()):os(t)?Vt(t):ht(xs,null,String(t))}function Vt(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:we(t)}function pi(t,e){let s=0;const{shapeFlag:i}=t;if(e==null)e=null;else if(W(e))s=16;else if(typeof e=="object")if(i&65){const n=e.default;n&&(n._c&&(n._d=!1),pi(t,n()),n._c&&(n._d=!0));return}else{s=32;const n=e._;!n&&!Yn(e)?e._ctx=Ct:n===3&&Ct&&(Ct.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else k(e)?(e={default:e,_ctx:Ct},s=32):(e=String(e),i&64?(s=16,e=[Gl(e)]):s=8);t.children=e,t.shapeFlag|=s}function Jl(...t){const e={};for(let s=0;s<t.length;s++){const i=t[s];for(const n in i)if(n==="class")e.class!==i.class&&(e.class=Zs([e.class,i.class]));else if(n==="style")e.style=wt([e.style,i.style]);else if(fs(n)){const r=e[n],l=i[n];l&&r!==l&&!(W(r)&&r.includes(l))&&(e[n]=r?[].concat(r,l):l)}else n!==""&&(e[n]=i[n])}return e}function Mt(t,e,s,i=null){Wt(t,e,7,[s,i])}const Zl=Kn();let Ql=0;function to(t,e,s){const i=t.type,n=(e?e.appContext:t.appContext)||Zl,r={uid:Ql++,vnode:t,type:i,parent:e,appContext:n,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new yr(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(n.provides),ids:e?e.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:qn(i,n),emitsOptions:Vn(i,n),emit:null,emitted:null,propsDefaults:X,inheritAttrs:i.inheritAttrs,ctx:X,data:X,props:X,attrs:X,slots:X,refs:X,setupState:X,setupContext:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return r.ctx={_:r},r.root=e?e.root:r,r.emit=Hl.bind(null,r),t.ce&&t.ce(r),r}let ot=null;const eo=()=>ot||Ct;let cs,zs;{const t=hs(),e=(s,i)=>{let n;return(n=t[s])||(n=t[s]=[]),n.push(i),r=>{n.length>1?n.forEach(l=>l(r)):n[0](r)}};cs=e("__VUE_INSTANCE_SETTERS__",s=>ot=s),zs=e("__VUE_SSR_SETTERS__",s=>Be=s)}const Ue=t=>{const e=ot;return cs(t),t.scope.on(),()=>{t.scope.off(),cs(e)}},ki=()=>{ot&&ot.scope.off(),cs(null)};function nr(t){return t.vnode.shapeFlag&4}let Be=!1;function so(t,e=!1,s=!1){e&&zs(e);const{props:i,children:n}=t.vnode,r=nr(t);$l(t,i,r,e),Nl(t,n,s||e);const l=r?io(t,e):void 0;return e&&zs(!1),l}function io(t,e){const s=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,_l);const{setup:i}=s;if(i){jt();const n=t.setupContext=i.length>1?ro(t):null,r=Ue(t),l=Ve(i,t,0,[t.props,n]),o=en(l);if(zt(),r(),(o||t.sp)&&!Le(t)&&Fn(t),o){if(l.then(ki,ki),e)return l.then(c=>{Ni(t,c)}).catch(c=>{ps(c,t,0)});t.asyncDep=l}else Ni(t,l)}else rr(t)}function Ni(t,e,s){k(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:j(e)&&(t.setupState=Tn(e)),rr(t)}function rr(t,e,s){const i=t.type;t.render||(t.render=i.render||Ft);{const n=Ue(t);jt();try{wl(t)}finally{zt(),n()}}}const no={get(t,e){return lt(t,"get",""),t[e]}};function ro(t){const e=s=>{t.exposed=s||{}};return{attrs:new Proxy(t.attrs,no),slots:t.slots,emit:t.emit,expose:e}}function gi(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(Tn(Nr(t.exposed)),{get(e,s){if(s in e)return e[s];if(s in Fe)return Fe[s](t)},has(e,s){return s in e||s in Fe}})):t.proxy}function lo(t,e=!0){return k(t)?t.displayName||t.name:t.name||e&&t.__name}function oo(t){return k(t)&&"__vccOpts"in t}const re=(t,e)=>jr(t,e,Be);function Ee(t,e,s){try{ls(-1);const i=arguments.length;return i===2?j(e)&&!W(e)?os(e)?ht(t,null,[e]):ht(t,e):ht(t,null,e):(i>3?s=Array.prototype.slice.call(arguments,2):i===3&&os(s)&&(s=[s]),ht(t,e,s))}finally{ls(1)}}const co="3.5.29";let Ys;const Bi=typeof window<"u"&&window.trustedTypes;if(Bi)try{Ys=Bi.createPolicy("vue",{createHTML:t=>t})}catch{}const lr=Ys?t=>Ys.createHTML(t):t=>t,fo="http://www.w3.org/2000/svg",ao="http://www.w3.org/1998/Math/MathML",Kt=typeof document<"u"?document:null,Ki=Kt&&Kt.createElement("template"),uo={insert:(t,e,s)=>{e.insertBefore(t,s||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,s,i)=>{const n=e==="svg"?Kt.createElementNS(fo,t):e==="mathml"?Kt.createElementNS(ao,t):s?Kt.createElement(t,{is:s}):Kt.createElement(t);return t==="select"&&i&&i.multiple!=null&&n.setAttribute("multiple",i.multiple),n},createText:t=>Kt.createTextNode(t),createComment:t=>Kt.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>Kt.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,s,i,n,r){const l=s?s.previousSibling:e.lastChild;if(n&&(n===r||n.nextSibling))for(;e.insertBefore(n.cloneNode(!0),s),!(n===r||!(n=n.nextSibling)););else{Ki.innerHTML=lr(i==="svg"?`<svg>${t}</svg>`:i==="mathml"?`<math>${t}</math>`:t);const o=Ki.content;if(i==="svg"||i==="mathml"){const c=o.firstChild;for(;c.firstChild;)o.appendChild(c.firstChild);o.removeChild(c)}e.insertBefore(o,s)}return[l?l.nextSibling:e.firstChild,s?s.previousSibling:e.lastChild]}},ho=Symbol("_vtc");function po(t,e,s){const i=t[ho];i&&(e=(e?[e,...i]:[...i]).join(" ")),e==null?t.removeAttribute("class"):s?t.setAttribute("class",e):t.className=e}const Vi=Symbol("_vod"),go=Symbol("_vsh"),mo=Symbol(""),xo=/(?:^|;)\s*display\s*:/;function vo(t,e,s){const i=t.style,n=J(s);let r=!1;if(s&&!n){if(e)if(J(e))for(const l of e.split(";")){const o=l.slice(0,l.indexOf(":")).trim();s[o]==null&&ts(i,o,"")}else for(const l in e)s[l]==null&&ts(i,l,"");for(const l in s)l==="display"&&(r=!0),ts(i,l,s[l])}else if(n){if(e!==s){const l=i[mo];l&&(s+=";"+l),i.cssText=s,r=xo.test(s)}}else e&&t.removeAttribute("style");Vi in t&&(t[Vi]=r?i.display:"",t[go]&&(i.display="none"))}const Ui=/\s*!important$/;function ts(t,e,s){if(W(s))s.forEach(i=>ts(t,e,i));else if(s==null&&(s=""),e.startsWith("--"))t.setProperty(e,s);else{const i=yo(t,e);Ui.test(s)?t.setProperty(ce(i),s.replace(Ui,""),"important"):t[i]=s}}const ji=["Webkit","Moz","ms"],Ps={};function yo(t,e){const s=Ps[e];if(s)return s;let i=_t(e);if(i!=="filter"&&i in t)return Ps[e]=i;i=us(i);for(let n=0;n<ji.length;n++){const r=ji[n]+i;if(r in t)return Ps[e]=r}return e}const zi="http://www.w3.org/1999/xlink";function Yi(t,e,s,i,n,r=xr(e)){i&&e.startsWith("xlink:")?s==null?t.removeAttributeNS(zi,e.slice(6,e.length)):t.setAttributeNS(zi,e,s):s==null||r&&!ln(s)?t.removeAttribute(e):t.setAttribute(e,r?"":$t(s)?String(s):s)}function Xi(t,e,s,i,n){if(e==="innerHTML"||e==="textContent"){s!=null&&(t[e]=e==="innerHTML"?lr(s):s);return}const r=t.tagName;if(e==="value"&&r!=="PROGRESS"&&!r.includes("-")){const o=r==="OPTION"?t.getAttribute("value")||"":t.value,c=s==null?t.type==="checkbox"?"on":"":String(s);(o!==c||!("_value"in t))&&(t.value=c),s==null&&t.removeAttribute(e),t._value=s;return}let l=!1;if(s===""||s==null){const o=typeof t[e];o==="boolean"?s=ln(s):s==null&&o==="string"?(s="",l=!0):o==="number"&&(s=0,l=!0)}try{t[e]=s}catch{}l&&t.removeAttribute(n||e)}function bo(t,e,s,i){t.addEventListener(e,s,i)}function _o(t,e,s,i){t.removeEventListener(e,s,i)}const qi=Symbol("_vei");function wo(t,e,s,i,n=null){const r=t[qi]||(t[qi]={}),l=r[e];if(i&&l)l.value=i;else{const[o,c]=So(e);if(i){const a=r[e]=Ro(i,n);bo(t,o,a,c)}else l&&(_o(t,o,l,c),r[e]=void 0)}}const Gi=/(?:Once|Passive|Capture)$/;function So(t){let e;if(Gi.test(t)){e={};let i;for(;i=t.match(Gi);)t=t.slice(0,t.length-i[0].length),e[i[0].toLowerCase()]=!0}return[t[2]===":"?t.slice(3):ce(t.slice(2)),e]}let Hs=0;const Co=Promise.resolve(),To=()=>Hs||(Co.then(()=>Hs=0),Hs=Date.now());function Ro(t,e){const s=i=>{if(!i._vts)i._vts=Date.now();else if(i._vts<=s.attached)return;Wt(Eo(i,s.value),e,5,[i])};return s.value=t,s.attached=To(),s}function Eo(t,e){if(W(e)){const s=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{s.call(t),t._stopped=!0},e.map(i=>n=>!n._stopped&&i&&i(n))}else return e}const Ji=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,Ao=(t,e,s,i,n,r)=>{const l=n==="svg";e==="class"?po(t,i,l):e==="style"?vo(t,s,i):fs(e)?qs(e)||wo(t,e,s,i,r):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):Po(t,e,i,l))?(Xi(t,e,i),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&Yi(t,e,i,l,r,e!=="value")):t._isVueCE&&(/[A-Z]/.test(e)||!J(i))?Xi(t,_t(e),i,r,e):(e==="true-value"?t._trueValue=i:e==="false-value"&&(t._falseValue=i),Yi(t,e,i,l))};function Po(t,e,s,i){if(i)return!!(e==="innerHTML"||e==="textContent"||e in t&&Ji(e)&&k(s));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const n=t.tagName;if(n==="IMG"||n==="VIDEO"||n==="CANVAS"||n==="SOURCE")return!1}return Ji(e)&&J(s)?!1:e in t}const Ho=["ctrl","shift","alt","meta"],Mo={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>Ho.some(s=>t[`${s}Key`]&&!e.includes(s))},Ms=(t,e)=>{if(!t)return t;const s=t._withMods||(t._withMods={}),i=e.join(".");return s[i]||(s[i]=((n,...r)=>{for(let l=0;l<e.length;l++){const o=Mo[e[l]];if(o&&o(n,e))return}return t(n,...r)}))},Oo=nt({patchProp:Ao},uo);let Zi;function Io(){return Zi||(Zi=Kl(Oo))}const Lo=((...t)=>{const e=Io().createApp(...t),{mount:s}=e;return e.mount=i=>{const n=$o(i);if(!n)return;const r=e._component;!k(r)&&!r.render&&!r.template&&(r.template=n.innerHTML),n.nodeType===1&&(n.textContent="");const l=s(n,!1,Fo(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),l},e});function Fo(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function $o(t){return J(t)?document.querySelector(t):t}class Wo{ctx;canvas;columns=[];data=[];options={rowHeight:40,headerHeight:48,border:!0,stripe:!0,multiSelect:!1,fixedHeader:!0,renderExpand:()=>null,spanMethod:()=>{}};scrollX=0;scrollY=0;width=0;height=0;columnPositions=[];rowOffsets=[];totalWidth=0;totalHeight=0;fixedLeftWidth=0;summaryRows=[];expandedRowKeys=new Set;selectedRowKeys=new Set;imageCache=new Map;hoverHeaderIndex=-1;flattenedColumns=[];columnLevels=0;constructor(e){this.canvas=e;const s=e.getContext("2d");if(!s)throw new Error("Could not get canvas context");this.ctx=s}destroy(){this.imageCache.forEach(e=>{e.onload=null,e.onerror=null,e.src=""}),this.imageCache.clear(),this.data=[],this.columns=[],this.summaryRows=[]}setExpandedRows(e){this.expandedRowKeys=new Set(e),this.calculateLayout(),this.render()}setData(e){this.data=e,this.calculateLayout(),this.render()}setColumns(e){this.columns=e,this.flattenColumns(),this.calculateLayout(),this.render()}flattenColumns(){this.flattenedColumns=[],this.columnLevels=0;const e=(i,n=0)=>{this.columnLevels=Math.max(this.columnLevels,n+1),i.forEach(r=>{r.children&&r.children.length>0?e(r.children,n+1):this.flattenedColumns.push(r)})};e(this.columns);const s=40;this.columnLevels>1?this.options.headerHeight=this.columnLevels*s:this.options.headerHeight=48}setOptions(e){this.options={...this.options,...e},this.calculateLayout(),this.render()}resize(e,s){this.width=e,this.height=s;const i=window.devicePixelRatio||1;this.canvas.width=e*i,this.canvas.height=s*i,this.canvas.style.width=`${e}px`,this.canvas.style.height=`${s}px`,this.ctx.resetTransform(),this.ctx.scale(i,i),this.render()}scrollTo(e,s){this.scrollX=e,this.scrollY=s,this.render()}calculateLayout(){let e=0;this.columnPositions=[0];let s=0;this.flattenedColumns.forEach(r=>{const l=r.width||100;e+=l,this.columnPositions.push(e),(r.fixed==="left"||r.fixed===!0)&&(s=e)}),this.totalWidth=e,this.fixedLeftWidth=s;let i=0;this.rowOffsets=[0];const{rowHeight:n}=this.options;this.data.forEach(r=>{i+=n,this.expandedRowKeys.has(r.id)&&(i+=n*3),this.rowOffsets.push(i)}),this.totalHeight=i,this.calculateSummaries()}getRowRange(e=20){const{headerHeight:s}=this.options,i=this.summaryRows.length*this.options.rowHeight,n=this.height-s-i,r=this.scrollY,l=r+n;let o=0;for(;o<this.rowOffsets.length&&(this.rowOffsets[o+1]??0)<r;)o++;let c=o;for(;c<this.rowOffsets.length&&(this.rowOffsets[c]??0)<l;)c++;return{startRow:Math.max(0,o-e),endRow:Math.min(this.data.length,c+1)}}calculateSummaries(){this.summaryRows=[];const e=new Map;this.flattenedColumns.forEach((s,i)=>{s.summary&&s.summary.forEach(n=>{try{const r=n(this.data);if(r&&r.label){const{label:l,value:o}=r;e.has(l)||e.set(l,new Array(this.flattenedColumns.length).fill("")),e.get(l)[i]=o}}catch(r){console.error("Summary calculation error:",r)}})}),e.forEach((s,i)=>{s[0]=i,this.summaryRows.push(s)})}render(){this.ctx.clearRect(0,0,this.width,this.height),this.drawBody(),this.drawFixedLeftBody(),this.drawHeader(),this.drawSummaryRows()}getColumnWidth(e){return e.children&&e.children.length>0?e.children.reduce((i,n)=>i+this.getColumnWidth(n),0):e.width||100}isColumnFixed(e){return e.fixed==="left"||e.fixed==="right"||e.fixed===!0?!0:e.children&&e.children.length>0?e.children.some(s=>this.isColumnFixed(s)):!1}drawHeader(){const{headerHeight:e}=this.options,s=this.columnLevels>1?40:e;this.ctx.save(),this.ctx.fillStyle="#f5f7fa",this.ctx.fillRect(0,0,this.width,e);const i=(n,r,l,o,c)=>{let a=r;n.forEach(u=>{const d=this.getColumnWidth(u),g=this.isColumnFixed(u);if(c!==g){a+=d;return}const v=!u.children||u.children.length===0,S=v?(this.columnLevels-o)*s:s,C=c?a:a-this.scrollX;(c||C+d>this.fixedLeftWidth&&C<this.width)&&(c||(this.ctx.save(),this.ctx.beginPath(),this.ctx.rect(this.fixedLeftWidth,0,this.width-this.fixedLeftWidth,e),this.ctx.clip()),this.drawHeaderCell(u,C,d,S,l,v),c||this.ctx.restore()),u.children&&u.children.length>0&&i(u.children,a,l+s,o+1,c),a+=d})};i(this.columns,0,0,0,!1),i(this.columns,0,0,0,!0),this.ctx.restore()}setHoverHeader(e){this.hoverHeaderIndex!==e&&(this.hoverHeaderIndex=e,this.render())}setSelectedRows(e){this.selectedRowKeys=new Set(e),this.render()}drawHeaderCell(e,s,i,n,r,l){if(this.ctx.save(),this.ctx.beginPath(),this.ctx.rect(s,r,i,n),this.ctx.clip(),this.ctx.fillStyle="#f5f7fa",this.ctx.fillRect(s,r,i,n),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.lineWidth=1,this.ctx.strokeRect(s+.5,r+.5,i,n)),e.type==="selection"){const o=this.data.length>0&&this.selectedRowKeys.size===this.data.length;this.drawCheckboxCell(o,s,r,i,n,"center")}else{this.ctx.fillStyle="#303133",this.ctx.font="bold 14px sans-serif",this.ctx.textBaseline="middle";const o=e.align||(l?"left":"center");this.ctx.textAlign=o;let c=s+10;o==="center"&&(c=s+i/2),o==="right"&&(c=s+i-24);const a=e.title||"";if(this.ctx.fillText(a,c,r+n/2),l&&e.type!=="selection"&&e.type!=="expand"){const u=this.flattenedColumns.indexOf(e);if(this.hoverHeaderIndex===u){this.ctx.fillStyle="#909399",this.ctx.beginPath();const d=s+i-18,g=r+n/2;this.ctx.arc(d,g-4,1.5,0,Math.PI*2),this.ctx.arc(d,g,1.5,0,Math.PI*2),this.ctx.arc(d,g+4,1.5,0,Math.PI*2),this.ctx.fill()}}}this.ctx.restore()}getHeaderAt(e,s){const{headerHeight:i}=this.options;if(s>i)return null;const n=this.columnLevels>1?40:i,r=(o,c,a,u)=>{let d=c;for(const g of o){const v=this.isColumnFixed(g);if(u!==v){d+=this.getColumnWidth(g);continue}const S=this.getColumnWidth(g),C=!g.children||g.children.length===0,M=C?(this.columnLevels-a)*n:n,H=a*n,A=u?d:d-this.scrollX;if(!u&&A<this.fixedLeftWidth){d+=S;continue}if(e>=A&&e<A+S&&s>=H&&s<H+M){const O=C&&g.type!=="selection"&&g.type!=="expand"&&e>=A+S-24;return{column:g,rect:{x:A,y:H,width:S,height:M},isMenu:O}}if(g.children&&g.children.length>0){const O=r(g.children,d,a+1,u);if(O)return O}d+=S}return null},l=r(this.columns,0,0,!0);return l||r(this.columns,0,0,!1)}drawBody(){const{headerHeight:e}=this.options,{startRow:s,endRow:i}=this.getRowRange(this.height),n=this.summaryRows.length*this.options.rowHeight;this.ctx.save(),this.ctx.beginPath(),this.ctx.rect(this.fixedLeftWidth,e,this.width-this.fixedLeftWidth,this.height-e-n),this.ctx.clip();const r=new Set,l=[];for(let o=s;o<i;o++){const c=this.data[o];if(!c)continue;const a=(this.rowOffsets[o]??0)-this.scrollY+e,u=(this.rowOffsets[o+1]??0)-(this.rowOffsets[o]??0),d=o%2===1&&this.options.stripe?"#fafafa":"#fff";if(this.flattenedColumns.forEach((g,v)=>{if(g.fixed==="left"||g.fixed===!0||r.has(`${o},${v}`))return;const S=(this.columnPositions[v]??0)-this.scrollX,C=(this.columnPositions[v+1]??0)-(this.columnPositions[v]??0),M=this.options.spanMethod({row:o,column:g,rowIndex:o,columnIndex:v});if(M){const{rowspan:H,colspan:A}=M;if(H===0||A===0)return;const O=(this.columnPositions[v+A]??this.totalWidth)-(this.columnPositions[v]??0),P=(this.rowOffsets[o+H]??this.totalHeight)-(this.rowOffsets[o]??0);for(let D=0;D<H;D++)for(let G=0;G<A;G++)r.add(`${o+D},${v+G}`);l.push({col:g,val:c[g.key||""],x:S,y:a,w:O,h:P,r:o,c:v,bgColor:d})}else this.ctx.fillStyle=d,this.ctx.fillRect(S,a,C,this.options.rowHeight),this.drawCell(g,c[g.key||""],S,a,C,this.options.rowHeight,o),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.strokeRect(S+.5,a+.5,C,this.options.rowHeight))}),this.expandedRowKeys.has(c.id)){const g=a+this.options.rowHeight,v=u-this.options.rowHeight;this.ctx.fillStyle="#fdfdfd",this.ctx.fillRect(0,g,this.width,v),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.beginPath(),this.ctx.moveTo(0,g),this.ctx.lineTo(this.width,g),this.ctx.stroke()),this.drawExpandPlaceholder(c,this.fixedLeftWidth-this.scrollX,g,this.totalWidth-this.fixedLeftWidth,v)}}l.forEach(({col:o,val:c,x:a,y:u,w:d,h:g,r:v,bgColor:S})=>{this.ctx.fillStyle=S,this.ctx.fillRect(a,u,d,g),this.drawCell(o,c,a,u,d,g,v),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.strokeRect(a+.5,u+.5,d,g))}),this.ctx.restore()}drawFixedLeftBody(){const{headerHeight:e}=this.options,{startRow:s,endRow:i}=this.getRowRange(this.height),n=this.summaryRows.length*this.options.rowHeight;this.ctx.save(),this.ctx.beginPath(),this.ctx.rect(0,e,this.fixedLeftWidth,this.height-e-n),this.ctx.clip();const r=new Set,l=[];for(let o=s;o<i;o++){const c=this.data[o];if(!c)continue;const a=(this.rowOffsets[o]??0)-this.scrollY+e,u=o%2===1&&this.options.stripe?"#fafafa":"#fff";this.flattenedColumns.forEach((d,g)=>{if(!(d.fixed==="left"||d.fixed===!0)||r.has(`${o},${g}`))return;const v=this.columnPositions[g]??0,S=(this.columnPositions[g+1]??0)-(this.columnPositions[g]??0),C=this.options.spanMethod({row:o,column:d,rowIndex:o,columnIndex:g});if(C){const{rowspan:M,colspan:H}=C;if(M===0||H===0)return;const A=(this.columnPositions[g+H]??this.fixedLeftWidth)-(this.columnPositions[g]??0),O=(this.rowOffsets[o+M]??this.totalHeight)-(this.rowOffsets[o]??0);for(let P=0;P<M;P++)for(let D=0;D<H;D++)r.add(`${o+P},${g+D}`);l.push({col:d,val:c[d.key||""],x:v,y:a,w:A,h:O,r:o,c:g,bgColor:u})}else this.ctx.fillStyle=u,this.ctx.fillRect(v,a,S,this.options.rowHeight),this.drawCell(d,c[d.key||""],v,a,S,this.options.rowHeight,o),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.strokeRect(v+.5,a+.5,S,this.options.rowHeight))})}l.forEach(({col:o,val:c,x:a,y:u,w:d,h:g,r:v,bgColor:S})=>{this.ctx.fillStyle=S,this.ctx.fillRect(a,u,d,g),this.drawCell(o,c,a,u,d,g,v),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.strokeRect(a+.5,u+.5,d,g))}),this.ctx.restore()}drawExpandPlaceholder(e,s,i,n,r){this.ctx.save(),this.ctx.fillStyle="#fef0f0",this.ctx.fillRect(s,i,n,r),this.ctx.fillStyle="#f56c6c",this.ctx.font="italic 12px sans-serif",this.ctx.textAlign="center",this.ctx.fillText(`Expanded content for row ${e.id} (Rendered via h function in overlay)`,s+n/2,i+r/2),this.ctx.restore()}drawSummaryRows(){if(this.summaryRows.length===0)return;const{rowHeight:e}=this.options,s=this.summaryRows.length*e,i=this.height-s;this.ctx.save(),this.ctx.fillStyle="#fdf6ec",this.ctx.fillRect(0,i,this.width,s);let n=0;for(let r=0;r<this.flattenedColumns.length;r++){const l=this.flattenedColumns[r];if(l&&(l.type==="selection"||l.type==="expand"||l.key==="id"))n++;else break}n===0&&(n=1),this.summaryRows.forEach((r,l)=>{const o=i+l*e;this.ctx.save(),this.ctx.beginPath(),this.ctx.rect(this.fixedLeftWidth,o,this.width-this.fixedLeftWidth,e),this.ctx.clip(),this.flattenedColumns.forEach((c,a)=>{if(c.fixed==="left"||c.fixed===!0||a<n)return;const u=(this.columnPositions[a]??0)-this.scrollX,d=(this.columnPositions[a+1]??0)-(this.columnPositions[a]??0);this.drawTextCell(r[a],u,o,d,e,c.align),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.strokeRect(u+.5,o+.5,d,e))}),this.ctx.restore(),this.flattenedColumns.forEach((c,a)=>{if(c.fixed==="left"||c.fixed===!0){const u=this.columnPositions[a]??0,d=(this.columnPositions[a+1]??0)-(this.columnPositions[a]??0);if(a===0){const g=(this.columnPositions[n]??this.fixedLeftWidth)-(this.columnPositions[0]??0);this.ctx.save(),this.ctx.font="bold 13px sans-serif",this.ctx.fillStyle="#e6a23c",this.drawTextCell(r[0],u,o,g,e,"center"),this.ctx.restore(),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.strokeRect(u+.5,o+.5,g,e))}else{if(a<n)return;this.drawTextCell(r[a],u,o,d,e,c.align),this.options.border&&(this.ctx.strokeStyle="#ebeef5",this.ctx.strokeRect(u+.5,o+.5,d,e))}}})}),this.ctx.restore()}drawCell(e,s,i,n,r,l,o){if(this.ctx.save(),this.ctx.beginPath(),this.ctx.rect(i,n,r,l),this.ctx.clip(),e.renderCell)this.drawTextCell(s,i,n,r,l,e.align);else switch(e.type){case"expand":this.drawExpandButton(i+(r-16)/2,n+(this.options.rowHeight-16)/2,this.expandedRowKeys.has(this.data[o]?.id??""));break;case"selection":const c=this.selectedRowKeys.has(this.data[o]?.id??"");this.drawCheckboxCell(c,i,n,r,this.options.rowHeight,"center");break;case"image":this.drawImageCell(s,i,n,r,l,e.align);break;case"checkbox":this.drawCheckboxCell(s,i,n,r,l,e.align);break;case"radio":this.drawRadioCell(s,i,n,r,l,e.align);break;case"switch":this.drawSwitchCell(s,i,n,r,l,e.align);break;case"color-picker":this.drawColorPickerCell(s,i,n,r,l,e.align);break;case"tags":this.drawTagsCell(s,i,n,r,l);break;default:this.drawTextCell(s,i,n,r,l,e.align);break}this.ctx.restore()}drawExpandButton(e,s,i){this.ctx.save(),this.ctx.translate(e+8,s+8),i&&this.ctx.rotate(Math.PI/2),this.ctx.strokeStyle="#909399",this.ctx.lineWidth=2,this.ctx.beginPath(),this.ctx.moveTo(-3,-5),this.ctx.lineTo(3,0),this.ctx.lineTo(-3,5),this.ctx.stroke(),this.ctx.restore()}drawTextCell(e,s,i,n,r,l){this.ctx.fillStyle="#606266",this.ctx.font="14px sans-serif",this.ctx.textAlign=l||"left",this.ctx.textBaseline="middle";let o=s+10;l==="center"&&(o=s+n/2),l==="right"&&(o=s+n-10);const c=e==null?"":String(e);this.ctx.fillText(c,o,i+r/2)}drawImageCell(e,s,i,n,r,l){if(!e)return;const o=String(e),c=Math.min(n,r)-10;let a=s+5;l==="center"&&(a=s+(n-c)/2),l==="right"&&(a=s+n-c-5);let u=this.imageCache.get(o);u||(u=new Image,u.src=o,this.imageCache.set(o,u),u.onload=()=>this.render(),u.onerror=()=>{console.error(`Failed to load image: ${o}`),this.imageCache.delete(o)}),u.complete&&u.naturalWidth>0?this.ctx.drawImage(u,a,i+(r-c)/2,c,c):(this.ctx.fillStyle="#f5f7fa",this.ctx.fillRect(a,i+(r-c)/2,c,c))}drawCheckboxCell(e,s,i,n,r,l){let c=s+10;l==="center"&&(c=s+(n-16)/2),l==="right"&&(c=s+n-16-10);const a=i+(r-16)/2;this.ctx.strokeStyle=e?"#409eff":"#dcdfe6",this.ctx.fillStyle=e?"#409eff":"#fff",this.ctx.lineWidth=1,this.ctx.strokeRect(c+.5,a+.5,16,16),e&&(this.ctx.fillRect(c+1,a+1,15,15),this.ctx.strokeStyle="#fff",this.ctx.beginPath(),this.ctx.moveTo(c+4,a+8),this.ctx.lineTo(c+7,a+11),this.ctx.lineTo(c+12,a+5),this.ctx.stroke())}drawRadioCell(e,s,i,n,r,l){let c=s+10;l==="center"&&(c=s+(n-16)/2),l==="right"&&(c=s+n-16-10);const a=i+(r-16)/2,u=c+16/2,d=a+16/2;this.ctx.strokeStyle=e?"#409eff":"#dcdfe6",this.ctx.fillStyle="#fff",this.ctx.beginPath(),this.ctx.arc(u,d,16/2,0,Math.PI*2),this.ctx.stroke(),this.ctx.fill(),e&&(this.ctx.fillStyle="#409eff",this.ctx.beginPath(),this.ctx.arc(u,d,16/4,0,Math.PI*2),this.ctx.fill())}drawSwitchCell(e,s,i,n,r,l){let a=s+10;l==="center"&&(a=s+(n-32)/2),l==="right"&&(a=s+n-32-10);const u=i+(r-16)/2;this.ctx.fillStyle=e?"#13ce66":"#ff4949",this.ctx.beginPath(),this.ctx.roundRect?.(a,u,32,16,16/2),this.ctx.fill(),this.ctx.fillStyle="#fff",this.ctx.beginPath();const d=e?a+32-16+2:a+2;this.ctx.arc(d+12/2,u+16/2,12/2,0,Math.PI*2),this.ctx.fill()}drawColorPickerCell(e,s,i,n,r,l){let c=s+10;l==="center"&&(c=s+(n-20)/2),l==="right"&&(c=s+n-20-10);const a=i+(r-20)/2;this.ctx.fillStyle=e||"#000",this.ctx.fillRect(c,a,20,20),this.ctx.strokeStyle="#dcdfe6",this.ctx.strokeRect(c+.5,a+.5,20,20)}drawTagsCell(e,s,i,n,r){if(!Array.isArray(e))return;let l=s+5;const o=20,c=5,a=12;e.forEach(u=>{const d=String(u);this.ctx.font=`${a}px sans-serif`;const v=this.ctx.measureText(d).width+c*2;if(l+v>s+n-5)return;const S=i+(r-o)/2;this.ctx.fillStyle="#ecf5ff",this.ctx.strokeStyle="#d9ecff",this.ctx.beginPath(),this.ctx.roundRect?.(l,S,v,o,4),this.ctx.fill(),this.ctx.stroke(),this.ctx.fillStyle="#409eff",this.ctx.textAlign="center",this.ctx.fillText(d,l+v/2,S+o-a/2),l+=v+5})}getCellAt(e,s){const{headerHeight:i}=this.options;if(s<i)return null;const{startRow:n,endRow:r}=this.getRowRange(this.height);for(let l=n;l<r;l++){const o=this.data[l];if(!o)continue;const c=(this.rowOffsets[l]??0)-this.scrollY+i,a=(this.rowOffsets[l+1]??0)-(this.rowOffsets[l]??0);if(s>=c&&s<c+a)for(let u=0;u<this.flattenedColumns.length;u++){const d=this.flattenedColumns[u],g=(this.columnPositions[u+1]??0)-(this.columnPositions[u]??0);let v=0;if(d.fixed==="left"||d.fixed===!0)v=this.columnPositions[u]??0;else if(v=(this.columnPositions[u]??0)-this.scrollX,v<this.fixedLeftWidth)continue;if(e>=v&&e<v+g){const S=d.type==="expand",C=d.type==="selection";return{row:l,col:u,rect:{x:v,y:c,width:g,height:a},column:d,data:o,isExpandBtn:S,isSelection:C}}}}return null}getRowOffsets(){return this.rowOffsets}getScrollX(){return this.scrollX}getScrollY(){return this.scrollY}getFixedLeftWidth(){return this.fixedLeftWidth}getTotalWidth(){return this.totalWidth}getTotalHeight(){return this.totalHeight}}const Do=["onClick"],ko={class:"icon"},No={class:"label"},Bo={class:"edit-dialog-content"},Ko=Ns({__name:"CanvasTable",props:{columns:{},data:{},options:{}},emits:["update:data","select-change","header-command"],setup(t,{emit:e}){const s=Ns({props:["vnode"],setup(R){return()=>R.vnode}}),i=t,n=e,r=it(null),l=it(null),o=it(null),c=it(null),a=Br(null),u=it(0),d=it(0),g=it(0),v=it(0),S=it(0),C=it(0),M=it(null),H=it(null),A=it(null),O=it(new Set),P=it(new Set),D=it(null),G=re(()=>({width:"100%",height:"100%",position:"relative",overflow:"hidden"})),Q=re(()=>({position:"absolute",top:0,left:0,pointerEvents:"none",width:"100%",height:"100%"})),tt=re(()=>{if(!M.value)return{};const{rect:R}=M.value;return{position:"absolute",left:`${R.x+R.width-24}px`,top:`${R.y+(R.height-20)/2}px`,pointerEvents:"auto"}}),et=re(()=>{if(!H.value||!l.value)return{};const R=l.value.getBoundingClientRect(),{rect:F}=H.value;let f=R.top+F.y+F.height+5,h=R.left+F.x;const p=300;return h+p>window.innerWidth&&(h=window.innerWidth-p-20),{position:"fixed",top:`${f}px`,left:`${h}px`,zIndex:2e3,pointerEvents:"auto"}}),ft=re(()=>{if(!D.value)return{};const{rect:R}=D.value;return{position:"absolute",left:`${R.x+R.width-120}px`,top:`${R.y+R.height}px`,pointerEvents:"auto"}}),Et=re(()=>{if(!D.value)return[];const{column:R}=D.value,F=[{label:"Fix to Left",onCommand:f=>{const h=i.columns.findIndex(p=>p.key===f.key);i.columns.forEach((p,x)=>{x<=h&&(p.fixed="left")}),a.value?.setColumns(i.columns)}},{label:"Unfix",onCommand:f=>{f.fixed=!1,a.value?.setColumns(i.columns)}}];return R.renderHeaderMenu?R.renderHeaderMenu(R,F):F}),fe=R=>{D.value&&(R.onCommand(D.value.column),D.value=null)},te=R=>{if(!l.value||!a.value)return;const F=l.value.getBoundingClientRect(),f=R.clientX-F.left,h=R.clientY-F.top,p=a.value.getHeaderAt(f,h);if(p){const x=i.columns.findIndex(m=>m.key===p.column.key);a.value.setHoverHeader(x),p.isMenu||p.column.type==="selection"?l.value.style.cursor="pointer":l.value.style.cursor="default"}else a.value.setHoverHeader(-1),l.value.style.cursor="default";M.value=a.value.getCellAt(f,h),M.value&&(M.value.isExpandBtn||M.value.isSelection)&&(l.value.style.cursor="pointer")},ae=R=>{if(!l.value||!a.value)return;const F=l.value.getBoundingClientRect(),f=R.clientX-F.left,h=R.clientY-F.top,p=a.value.getHeaderAt(f,h);if(p){p.isMenu?D.value={column:p.column,rect:p.rect}:p.column.type==="selection"&&(O.value.size===i.data.length?O.value.clear():i.data.forEach(y=>O.value.add(y.id)),a.value.setSelectedRows(Array.from(O.value)),n("select-change",Array.from(O.value)));return}const x=a.value.getCellAt(f,h);if(x){if(x.isExpandBtn){q(x.data.id);return}const m=x.data.id;if(x.isSelection){O.value.has(m)?O.value.delete(m):O.value.add(m),a.value.setSelectedRows(Array.from(O.value)),n("select-change",Array.from(O.value));return}i.options?.multiSelect?O.value.has(m)?O.value.delete(m):O.value.add(m):(O.value.clear(),O.value.add(m)),n("select-change",Array.from(O.value))}},Se=R=>{if(!l.value||!a.value)return;const F=l.value.getBoundingClientRect(),f=R.clientX-F.left,h=R.clientY-F.top,p=a.value.getCellAt(f,h);p&&p.column.renderEdit&&st(p)},st=R=>{H.value=R,A.value=JSON.parse(JSON.stringify(R.data))},q=R=>{P.value.has(R)?P.value.delete(R):P.value.add(R),a.value?.setExpandedRows(Array.from(P.value)),Nt()},B=()=>{H.value=null,A.value=null},Dt=()=>{if(H.value&&A.value){const R=H.value.data.id,F=i.data.findIndex(f=>f.id===R);if(F!==-1){const f=[...i.data];f[F]=A.value,n("update:data",f),a.value?.setData(f)}}B()},ue=R=>!R.column.renderEdit||!A.value?null:R.column.renderEdit(A.value,(F,f,h)=>f&&(typeof f=="string"||Array.isArray(f)||f.__v_isVNode)?Ee(F,null,f):Ee(F,f,h)),kt=R=>{if(!a.value)return{};const F=i.data.findIndex(m=>m.id===R);if(F===-1)return{};const f=a.value.getRowOffsets(),h=(f[F]??0)-C.value+(i.options?.headerHeight||48),p=(f[F+1]??0)-(f[F]??0)-(i.options?.rowHeight||40),x=a.value.getFixedLeftWidth();return{position:"absolute",top:`${h+(i.options?.rowHeight||40)}px`,left:`${x}px`,width:`${g.value-x}px`,height:`${p}px`,pointerEvents:"auto",overflow:"hidden",backgroundColor:"#fff",borderBottom:"1px solid #ebeef5",display:"flex"}},yt=()=>({marginLeft:`-${S.value}px`,minWidth:`${u.value-a.value?.getFixedLeftWidth()}px`}),je=R=>{const F=i.data.find(f=>f.id===R);return!F||!i.options?.renderExpand?null:Ee("div",{style:yt()},[i.options.renderExpand(F,(f,h,p)=>h&&(typeof h=="string"||Array.isArray(h)||h.__v_isVNode)?Ee(f,null,h):Ee(f,h,p))])},vs=R=>{const F=R.target;S.value=F.scrollLeft,a.value?.scrollTo(S.value,C.value),M.value=null},ys=R=>{const F=R.target;C.value=F.scrollTop,a.value?.scrollTo(S.value,C.value),M.value=null},ee=R=>{if(!c.value||!o.value)return;const F=R.deltaY,f=R.shiftKey?R.deltaY:R.deltaX;c.value.scrollTop+=F,o.value.scrollLeft+=f},he=R=>{const F=R[0];if(!F||!a.value)return;const{width:f,height:h}=F.contentRect;g.value=f,v.value=h,a.value.resize(f,h),Nt()},Nt=()=>{a.value&&(u.value=a.value.getTotalWidth(),d.value=a.value.getTotalHeight())};let de=null;return Dn(()=>{l.value&&(a.value=new Wo(l.value),a.value.setColumns(i.columns),a.value.setData(i.data),a.value.setOptions(i.options||{}),Nt(),de=new ResizeObserver(he),r.value&&de.observe(r.value),l.value.addEventListener("mousemove",te),l.value.addEventListener("mousedown",ae),l.value.addEventListener("dblclick",Se))}),ai(()=>{de?.disconnect(),l.value?.removeEventListener("mousemove",te),l.value?.removeEventListener("mousedown",ae),l.value?.removeEventListener("dblclick",Se),a.value?.destroy(),a.value=null}),ye(()=>i.columns,R=>{a.value?.setColumns(R),Nt()},{deep:!0}),ye(()=>i.data,R=>{a.value?.setData(R),Nt()},{deep:!0}),ye(()=>i.options,R=>{R&&a.value?.setOptions(R)},{deep:!0}),(R,F)=>(xt(),Ot("div",{class:"canvas-table-container",ref_key:"containerRef",ref:r},[Z("div",{class:"canvas-wrapper",style:wt(G.value),onWheel:Ms(ee,["prevent"])},[Z("canvas",{ref_key:"canvasRef",ref:l},null,512),Z("div",{class:"scrollbar horizontal",ref_key:"hScrollRef",ref:o,onScroll:vs},[Z("div",{style:wt({width:u.value+"px",height:"1px"})},null,4)],544),Z("div",{class:"scrollbar vertical",ref_key:"vScrollRef",ref:c,onScroll:ys},[Z("div",{style:wt({height:d.value+"px",width:"1px"})},null,4)],544),Z("div",{class:"table-overlays",style:wt(Q.value)},[M.value&&M.value.column.renderEdit?(xt(),Ot("div",{key:0,class:"edit-btn",style:wt(tt.value),onClick:F[0]||(F[0]=Ms(f=>st(M.value),["stop"]))},[...F[2]||(F[2]=[Z("svg",{viewBox:"0 0 24 24",width:"14",height:"14"},[Z("path",{fill:"currentColor",d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"})],-1)])],4)):Ge("",!0),D.value?(xt(),Ot("div",{key:1,class:"header-menu-overlay",onClick:F[1]||(F[1]=Ms(f=>D.value=null,["self"]))},[Z("div",{class:"header-menu",style:wt(ft.value)},[(xt(!0),Ot(St,null,Hi(Et.value,f=>(xt(),Ot("div",{key:f.label,class:"menu-item",onClick:h=>fe(f)},[Z("span",ko,Os(f.icon||"•"),1),Z("span",No,Os(f.label),1)],8,Do))),128))],4)])):Ge("",!0),(xt(!0),Ot(St,null,Hi(P.value,f=>(xt(),Ot("div",{key:f,class:"expand-row-overlay",style:wt(kt(f))},[(xt(),js(yl(je(f))))],4))),128)),(xt(),js(rl,{to:"body"},[H.value?(xt(),Ot("div",{key:0,class:"edit-dialog-popover",style:wt(et.value)},[Z("div",Bo,[ht(Cn(s),{vnode:ue(H.value)},null,8,["vnode"])]),Z("div",{class:"edit-dialog-footer"},[Z("button",{class:"small",onClick:B},"Cancel"),Z("button",{class:"small primary",onClick:Dt},"Save")])],4)):Ge("",!0),H.value?(xt(),Ot("div",{key:1,class:"popover-click-mask",onClick:B})):Ge("",!0)]))],4)],36)],512))}}),Vo=(t,e)=>{const s=t.__vccOpts||t;for(const[i,n]of e)s[i]=n;return s},Uo=Vo(Ko,[["__scopeId","data-v-34fbfef2"]]),jo={class:"app-container"},zo={class:"table-holder"},Yo=Ns({__name:"App",setup(t){const e=it([{key:"expand",title:"",type:"expand",width:40,align:"center",fixed:"left"},{key:"selection",title:"",type:"selection",width:40,align:"center",fixed:"left"},{title:"Group 1",fixed:"left",children:[{key:"id",title:"ID",type:"text",width:60,align:"center",fixed:"left"},{key:"name",title:"Name",type:"text",width:150,fixed:"left",renderHeader:(r,l)=>l("div",{style:{color:"red"}},r.title),renderEdit:(r,l)=>l("div",{style:{padding:"20px"}},[l("h3","Edit Name"),l("input",{value:r.name,style:{width:"100%",padding:"8px",marginTop:"10px"},onInput:o=>r.name=o.target.value})])}]},{key:"avatar",title:"Avatar",type:"image",width:80,align:"center"},{key:"age",title:"Age",type:"text",width:80,align:"center",summary:[r=>{const l=r.reduce((o,c)=>o+(Number(c.age)||0),0);return{label:"平均值",value:Math.round(l/r.length)}},r=>({label:"最大值",value:r.reduce((o,c)=>Math.max(o,Number(c.age)||0),0)})]},{key:"status",title:"Active",type:"switch",width:100,align:"center",summary:[r=>({label:"平均值",value:`${r.filter(o=>o.status).length} active`})]},{key:"tags",title:"Tags",type:"tags",width:200},{key:"color",title:"Color",type:"color-picker",width:100,align:"center"},{key:"address",title:"Address",type:"text",width:300},{key:"email",title:"Email",type:"text",width:200}]),i=it((r=>Array.from({length:r},(l,o)=>({id:o+1,name:`User ${o+1}`,avatar:`https://api.dicebear.com/7.x/avataaars/svg?seed=${o}`,age:20+o%30,status:o%2===0,tags:["Vue","TS","Canvas"].slice(0,o%3+1),color:o%2===0?"#409eff":"#67c23a",address:`Street ${o+1}, City ${o%10}`,email:`user${o+1}@example.com`})))(1e3)),n={border:!0,stripe:!0,multiSelect:!0,renderExpand:(r,l)=>l("div",{style:{padding:"20px",background:"#fafafa"}},[l("h4",{},`Details for ${r.name}`),l("p",{},`This is an expanded row for user ${r.id}. You can put any component here.`),l("div",{style:{display:"flex",gap:"10px"}},[l("button",{onClick:()=>alert("Action 1")},"Action 1"),l("button",{onClick:()=>alert("Action 2")},"Action 2")])]),spanMethod:({rowIndex:r,columnIndex:l})=>{if(r===2&&l===7)return{rowspan:2,colspan:2};if((r===2||r===3)&&(l===7||l===8))return r===2&&l===7?{rowspan:2,colspan:2}:{rowspan:0,colspan:0}}};return(r,l)=>(xt(),Ot("div",jo,[l[1]||(l[1]=Z("h1",null,"Canvas Table Demo (1000 Rows)",-1)),Z("div",zo,[ht(Uo,{columns:e.value,data:i.value,"onUpdate:data":l[0]||(l[0]=o=>i.value=o),options:n},null,8,["columns","data"])])]))}});Lo(Yo).mount("#app");
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>draw-table</title>
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-C5vPZIAB.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BoSk-1mt.css">
|
|
8
10
|
</head>
|
|
9
11
|
<body>
|
|
10
12
|
<div id="app"></div>
|
|
11
|
-
<script type="module" src="/src/main.ts"></script>
|
|
12
13
|
</body>
|
|
13
14
|
</html>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "draw-table-vue",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "vite",
|
|
7
|
+
"build": "vue-tsc -b && vite build",
|
|
8
|
+
"preview": "vite preview"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"vue": "^3.5.25"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@types/node": "^24.10.1",
|
|
15
|
+
"@vitejs/plugin-vue": "^6.0.2",
|
|
16
|
+
"@vue/tsconfig": "^0.8.1",
|
|
17
|
+
"typescript": "~5.9.3",
|
|
18
|
+
"vite": "^7.3.1",
|
|
19
|
+
"vue-tsc": "^3.1.5"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=20.19.0"
|
|
23
|
+
}
|
|
24
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "draw-table-vue",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"main": "./dist/draw-table.umd.js",
|
|
6
|
+
"module": "./dist/draw-table.es.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/draw-table.es.js",
|
|
12
|
+
"require": "./dist/draw-table.umd.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
5
18
|
"scripts": {
|
|
6
19
|
"dev": "vite",
|
|
7
20
|
"build": "vue-tsc -b && vite build",
|
|
@@ -16,6 +29,7 @@
|
|
|
16
29
|
"@vue/tsconfig": "^0.8.1",
|
|
17
30
|
"typescript": "~5.9.3",
|
|
18
31
|
"vite": "^7.3.1",
|
|
32
|
+
"vite-plugin-dts": "^4.5.4",
|
|
19
33
|
"vue-tsc": "^3.1.5"
|
|
20
34
|
},
|
|
21
35
|
"engines": {
|
package/.vscode/extensions.json
DELETED
package/docs/DESIGN.md
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Canvas 表格组件设计文档
|
|
2
|
-
|
|
3
|
-
## 1. 核心架构
|
|
4
|
-
|
|
5
|
-
本组件采用 **Canvas 渲染引擎 + Vue 状态管理** 的混合架构,旨在解决大数据量下 DOM 渲染性能瓶颈。
|
|
6
|
-
|
|
7
|
-
### 1.1 CanvasRenderer (渲染引擎)
|
|
8
|
-
- **职责**:负责表格的所有图形绘制,包括单元格、表头、固定列、固定行、聚合行等。
|
|
9
|
-
- **虚拟滚动**:基于 `scrollY` 和 `scrollX` 计算可见区域的行和列。
|
|
10
|
-
- **布局引擎**:维护 `columnPositions` 和 `rowOffsets`,支持动态行高(如展开行)和多级表头。
|
|
11
|
-
- **坐标映射**:提供 `getCellAt(x, y)` 和 `getHeaderAt(x, y)` 方法,将屏幕坐标映射到数据模型,支持精确识别展开按钮点击。
|
|
12
|
-
- **内存优化**:实现 `imageCache` 机制,通过 `Map` 缓存已加载 of 图片对象,并在组件卸载时显式销毁资源,防止内存泄漏。
|
|
13
|
-
- **列展平逻辑**:支持嵌套的 `children` 列配置,内部通过 `flattenedColumns` 进行数据映射,确保多级表头下的数据正确对齐。
|
|
14
|
-
|
|
15
|
-
### 1.2 CanvasTable.vue (Vue 容器)
|
|
16
|
-
- **职责**:管理 Canvas 生命周期、同步原生滚动条、维护覆盖层(编辑弹窗、按钮、展开内容)。
|
|
17
|
-
- **交互层**:利用 `Teleport` 将弹窗挂载到 `body`,解决层级冲突;通过 `h` 函数代理逻辑,智能处理 VNode 参数,支持高度自定义的编辑与展开内容渲染。
|
|
18
|
-
- **自适应**:通过 `ResizeObserver` 监听容器尺寸变化,动态调整 Canvas 分辨率与渲染内容。
|
|
19
|
-
|
|
20
|
-
## 2. 核心功能实现
|
|
21
|
-
|
|
22
|
-
### 2.1 多单元格类型支持
|
|
23
|
-
- **内置类型**:`text`, `image`, `checkbox`, `radio`, `switch`, `color-picker`, `tags`。
|
|
24
|
-
- **特殊列**:`selection` (勾选列), `expand` (展开列)。
|
|
25
|
-
- **扩展性**:每种类型在 `renderer.ts` 中有独立的绘制方法,支持通过配置 `ColumnConfig.type` 切换。
|
|
26
|
-
|
|
27
|
-
### 2.2 行内编辑与展开
|
|
28
|
-
- **编辑**:悬浮显示编辑图标或双击主行区域,弹出基于 `h` 函数渲染的自定义对话框。
|
|
29
|
-
- **展开**:使用专门的 `expand` 列展示展开按钮。展开时,主数据行保持固定高度显示在顶部,详细内容在下方撑开显示。
|
|
30
|
-
|
|
31
|
-
### 2.3 布局与样式
|
|
32
|
-
- **固定行列**:支持左侧固定列(通过 `fixed: 'left'` 配置)和顶部/底部固定行。
|
|
33
|
-
- **合并单元格**:支持 `spanMethod` 动态合并行列。
|
|
34
|
-
- **样式**:内置边框、斑马线、聚合行(Summary Rows)支持。
|
|
35
|
-
|
|
36
|
-
## 3. 性能表现
|
|
37
|
-
- **按需绘制**:仅绘制可见区域,1000+ 行数据滚动依然保持 60FPS。
|
|
38
|
-
- **资源清理**:在 `onUnmounted` 中自动销毁渲染引擎实例,释放内存占用。
|