Repository: hellowuxin/vue3-mindmap Branch: main Commit: 9bed9eec0ff9 Files: 65 Total size: 780.8 KB Directory structure: gitextract_itl2mnzt/ ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── workflows/ │ └── blank.yml ├── .gitignore ├── .versionrc.json ├── CHANGELOG.md ├── Directory.md ├── LICENSE ├── README.md ├── docs/ │ ├── assets/ │ │ ├── index.4c10fd8c.js │ │ ├── index.55b3b50b.css │ │ └── vendor.5fc36a9d.js │ └── index.html ├── index.html ├── jest.config.ts ├── package.json ├── src/ │ ├── App.vue │ ├── components/ │ │ ├── Contextmenu.vue │ │ └── Mindmap/ │ │ ├── Mindmap.vue │ │ ├── assistant.ts │ │ ├── attribute/ │ │ │ ├── get.ts │ │ │ ├── index.ts │ │ │ └── set.ts │ │ ├── css/ │ │ │ ├── Mindmap.module.scss │ │ │ ├── Mindmap.module.scss.d.ts │ │ │ └── index.ts │ │ ├── d3.ts │ │ ├── data/ │ │ │ ├── ImData.ts │ │ │ ├── __tests__/ │ │ │ │ ├── ImData.integration.ts │ │ │ │ ├── ImData.unit.ts │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── ImData.unit.ts.snap │ │ │ │ └── config.ts │ │ │ ├── flextree/ │ │ │ │ ├── algorithm.ts │ │ │ │ ├── helper.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── draw/ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── interface.ts │ │ ├── listener/ │ │ │ ├── index.ts │ │ │ ├── listener.ts │ │ │ └── switcher.ts │ │ ├── state/ │ │ │ ├── Snapshot.ts │ │ │ ├── __tests__/ │ │ │ │ └── Snapshot.test.ts │ │ │ └── index.ts │ │ └── variable/ │ │ ├── contextmenu.ts │ │ ├── element.ts │ │ ├── index.ts │ │ └── selection.ts │ ├── i18n/ │ │ ├── en.ts │ │ ├── index.ts │ │ ├── ptBR.ts │ │ └── zh.ts │ ├── learn.json │ ├── main.ts │ ├── mitt.ts │ └── shims-vue.d.ts ├── tsconfig.json ├── tsconfig.lib.json ├── vite-lib.config.ts └── vite.config.ts ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ [*.{js,jsx,ts,tsx,vue}] indent_style = space indent_size = 2 trim_trailing_whitespace = true insert_final_newline = true ================================================ FILE: .eslintignore ================================================ dist/** docs/** ================================================ FILE: .eslintrc.json ================================================ { "root": true, "env": { "browser": true, "node": true, "es2021": true }, "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended" ], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "plugins": [ "@typescript-eslint", "eslint-plugin-tsdoc" ], "rules": { "tsdoc/syntax": "warn", "quotes": ["error", "single"], "no-multi-spaces": "error", "no-trailing-spaces": "error" } } ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: https://www.afdian.net/@hellowuxin ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. iOS] - Browser [e.g. chrome, safari] - Version [e.g. 22] **Smartphone (please complete the following information):** - Device: [e.g. iPhone6] - OS: [e.g. iOS8.1] - Browser [e.g. stock browser, safari] - Version [e.g. 22] **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/workflows/blank.yml ================================================ # This is a basic workflow to help you get started with Actions name: CI # Controls when the action will run. on: # Triggers the workflow on push or pull request events but only for the main branch push: branches: [ main ] pull_request: branches: [ main ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: build run: | npm ci npx jest npm run coverage - name: Coveralls GitHub Action uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} ================================================ FILE: .gitignore ================================================ .DS_Store node_modules /dist coverage # local env files .env.local .env.*.local # Log files npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* # Editor directories and files .idea .vscode *.suo *.ntvs* *.njsproj *.sln *.sw? *.code-workspace ================================================ FILE: .versionrc.json ================================================ { "header": "# Changelog\n" } ================================================ FILE: CHANGELOG.md ================================================ # Changelog ### [0.5.12](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.11...v0.5.12) (2022-03-05) ### Features * emits: ['update:modelValue'] ([cf9fce9](https://github.com/hellowuxin/vue3-mindmap/commit/cf9fce9038ce60977fe3e3c308c1af92bed32c11)) * 添加巴西葡萄牙语 ([2302ac8](https://github.com/hellowuxin/vue3-mindmap/commit/2302ac83dbfc2c694510573422be4b1349f6a88d)) ### [0.5.11](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.9...v0.5.11) (2022-01-13) ### Features * 国际化 ([b98c99b](https://github.com/hellowuxin/vue3-mindmap/commit/b98c99badd26320c1f5c9741a6fc1118fa5e63db)) ### [0.5.10](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.9...v0.5.10) (2021-10-28) ### [0.5.9](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.8...v0.5.9) (2021-10-28) ### Bug Fixes * edit为false时,右键菜单不可有编辑类型的选项([#21](https://github.com/hellowuxin/vue3-mindmap/issues/21)) ([aff7101](https://github.com/hellowuxin/vue3-mindmap/commit/aff710137764ebaa9de5a75403c9a4626b436527)) ### [0.5.8](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.7...v0.5.8) (2021-06-05) ### Bug Fixes * 修复编辑状态下换行的异常行为([#12](https://github.com/hellowuxin/vue3-mindmap/issues/12)) ([654305c](https://github.com/hellowuxin/vue3-mindmap/commit/654305c818a5bd77497aa8844fb61f2f8d19e83a)) ### [0.5.7](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.6...v0.5.7) (2021-05-14) ### Features * 现在可以剪切节点 ([3db4349](https://github.com/hellowuxin/vue3-mindmap/commit/3db43498ac6bf96e929c1d7fe6af8c7d03691903)) * 现在可以只删除单个节点 ([69678df](https://github.com/hellowuxin/vue3-mindmap/commit/69678df3a837bc950cafd2667f027401f4d50375)) * 现在折叠状态下也可以添加子节点 ([b206658](https://github.com/hellowuxin/vue3-mindmap/commit/b20665871519a35bd9d8fbdcdb41a96031fc9cdc)) ### [0.5.6](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.5...v0.5.6) (2021-05-13) ### Features * 新增节点被遮挡时,移动至可见 ([a534ac7](https://github.com/hellowuxin/vue3-mindmap/commit/a534ac7c961844018e98459151f5d18c60f29ea4)) * 现在可以复制和粘贴单个节点 ([51ac02c](https://github.com/hellowuxin/vue3-mindmap/commit/51ac02c0c54687b9a2093b192b4d275a056f8026)) * 现在可以复制粘贴子树 ([843528d](https://github.com/hellowuxin/vue3-mindmap/commit/843528d5cf06a24715bc608724e249db26ce1f00)) * 编辑文本时也保持可见 ([e1cf965](https://github.com/hellowuxin/vue3-mindmap/commit/e1cf9656389d094ba2088cce4a904e420b02462d)) ### Bug Fixes * 修正判断是否遮挡的元素 ([92908a5](https://github.com/hellowuxin/vue3-mindmap/commit/92908a525ed464d65b7d6a72da94036758615efa)) * 修正当更新asstSvg内容时,可能挤占空间的错误情况 ([09e6f0f](https://github.com/hellowuxin/vue3-mindmap/commit/09e6f0f420ded45edb8fadefa36c66368b4248e6)) * 增加元素与视图的空隙,方便区分 ([b77b430](https://github.com/hellowuxin/vue3-mindmap/commit/b77b4306ad3771c044eba8ce7191be8d106cf4e6)) * 当元素宽度或高度超过视图的宽度或高度,保持右下角可见 ([f93d531](https://github.com/hellowuxin/vue3-mindmap/commit/f93d5319167157276dd09bc611e6f6c0b69dc6c6)) * 避免产生空隙 ([2ae4939](https://github.com/hellowuxin/vue3-mindmap/commit/2ae4939d29bd4d42460db21394a49e70c6c49900)) ### [0.5.5](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.4...v0.5.5) (2021-05-09) ### Bug Fixes * 修复节点都在同侧时不能改变左右布局的问题([#11](https://github.com/hellowuxin/vue3-mindmap/issues/11)) ([656cf0a](https://github.com/hellowuxin/vue3-mindmap/commit/656cf0ae637f9f632ed166864b625b81333e42a4)) * 修正了添加一级节点的新父节点时颜色不统一的问题 ([4e3221c](https://github.com/hellowuxin/vue3-mindmap/commit/4e3221c64eafaa2299ad3c7c50adcf0800d2fa5f)) ### [0.5.4](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.3...v0.5.4) (2021-05-08) ### Features * 可以直接添加兄弟节点 ([0ede6a1](https://github.com/hellowuxin/vue3-mindmap/commit/0ede6a1d91ecda23546cf1dc678e8f8175d685d1)) * 可以直接添加新父节点 ([ce7ad06](https://github.com/hellowuxin/vue3-mindmap/commit/ce7ad063d787673cf5ada4b5cd13376d5f816a8a)) * 添加兄弟节点也会立刻进入编辑模式 ([731ac89](https://github.com/hellowuxin/vue3-mindmap/commit/731ac893fbcf0f81a8dd4e6ef41ed37d96439f72)) ### Bug Fixes * [#10](https://github.com/hellowuxin/vue3-mindmap/issues/10) ([e965ce7](https://github.com/hellowuxin/vue3-mindmap/commit/e965ce74064b87ae1a8b6a5222b7c44d3c0cf3f3)) * 避免与html attr冲突 ([859b8eb](https://github.com/hellowuxin/vue3-mindmap/commit/859b8eb4777cdaa292c74c090749dbdbe4213252)) ### [0.5.3](https://github.com/hellowuxin/vue3-mindmap/compare/v0.5.2...v0.5.3) (2021-05-02) ### Bug Fixes * 纠正右键某些位置时,菜单内容不能完全展示 ([f4656c0](https://github.com/hellowuxin/vue3-mindmap/commit/f4656c0389b6f2c2ec27e14dd4944c414bd8d48d)) * 纠正左树中trigger的位置 ([d11e32d](https://github.com/hellowuxin/vue3-mindmap/commit/d11e32d047851e9e6254f060510cbafe0c9c7a6f)) ================================================ FILE: Directory.md ================================================ ```text src ├── App.vue // 演示页面 ├── components // 核心组件 │   ├── Contextmenu.vue // 右键菜单 │   └── Mindmap // 思维导图 │   ├── Mindmap.vue // 主体 │   ├── assistant.ts // 工具函数 │   ├── attribute // svg属性工具 │   ├── css // 样式 │   ├── d3.ts // d3库 │   ├── data // 数据层 │   ├── draw // 视图层 │   ├── interface.ts // 接口 │   ├── listener // 交互层 │   ├── state // 历史状态记录/时间旅行 │   └── variable // 通用变量 └── i18n // 国际化 ``` ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2021 伍鑫 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # vue3-mindmap [![npm](https://img.shields.io/npm/v/vue3-mindmap)](https://www.npmjs.com/package/vue3-mindmap) [![build](https://github.com/hellowuxin/vue3-mindmap/actions/workflows/blank.yml/badge.svg)](https://github.com/hellowuxin/vue3-mindmap/actions) [![coveralls](https://img.shields.io/coveralls/github/hellowuxin/vue3-mindmap)](https://coveralls.io/github/hellowuxin/vue3-mindmap) > Mindmap component for Vue3 inspired by [MindNode](https://mindnode.com) [live demo / 演示页面](https://5xin.xyz/vue3-mindmap) [Directory Description / 目录说明](./Directory.md) ## Install ```sh npm install vue3-mindmap ``` ## PROPS | Name | Type | Default | Description | | --- | --- | --- | --- | | v-model | Data[] | undefined | 设置思维导图数据 | | x-gap | Number | 84 | 设置节点横向间隔 | | y-gap | Number | 18 | 设置节点纵向间隔 | | branch | Number | 4 | 设置连线的宽度 | | scale-extent | [Number, Number] | [0.1, 0.8] | 设置缩放范围 | | timetravel | Boolean | false | 是否显示撤销重做按钮 | | drag | Boolean | false | 设置节点是否可拖拽 | | zoom | Boolean | false | 是否可缩放、拖移 | | edit | Boolean | false | 是否可编辑 | | center-btn | Boolean | false | 是否显示居中按钮 | | fit-btn | Boolean | false | 是否显示缩放按钮 | | add-node-btn | Boolean | false | 是否显示添加节点按钮 | | download-btn | Boolean | false | 是否显示下载按钮 | | sharp-corner | Boolean | false | 设置分支为圆角或直角 | | ctm | Boolean | false | 是否响应右键菜单 | | locale | 'zh' \| 'en' \| 'ptBR' | 'zh' | i18n | ## Example ```html ``` ## 注意 - 当xGap小于一定数值,父节点的trigger由于添加按钮的存在可能遮挡住子节点的trigger,无法响应子节点的点击 ## 待解决 - 直角分支radius ## Todo - 多选节点 - 多主节点 - 更多节点样式 ================================================ FILE: docs/assets/index.4c10fd8c.js ================================================ import{m as e,r as t,p as n,s as a,c as l,l as o,a as i,b as s,z as r,d,i as c,e as h,t as u,h as p,f as g,g as m,o as f,P as v,j as b,k as x,n as y,u as w,q as _,v as k,w as $,x as M,y as B,A as L,F as z,B as C,C as S,D as E,E as D,G as N,H as A,I as V,J as P,K as G,L as j,M as O,N as K}from"./vendor.5fc36a9d.js";var R=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",get svg(){return de},get g(){return ce},get asstSvg(){return he},get foreign(){return ue}}),H=[{name:"如何学习D3",children:[{name:"预备知识",children:[{name:"HTML & CSS"},{name:"JavaScript"},{name:"DOM"},{name:"SVG"},{name:"test\ntest"}]},{name:"安装",collapse:!0,children:[{name:"折叠节点"}]},{name:"入门",children:[{name:"选择集"},{name:"test"},{name:"绑定数据"},{name:"添加删除元素"},{name:"简单图形",children:[{name:"柱形图"},{name:"折线图"},{name:"散点图"}]},{name:"比例尺"},{name:"生成器"},{name:"过渡"}],left:!0},{name:"进阶",left:!0},{name:"一级节点",children:[{name:"子节点1"},{name:"子节点2"},{name:"子节点3"}]}]}];const I=e();var T={container:"Mindmap_container_fgvb6","svg-wrapper":"Mindmap_svg-wrapper_fgvb6","asst-svg":"Mindmap_asst-svg_fgvb6",svg:"Mindmap_svg_fgvb6",trigger:"Mindmap_trigger_fgvb6",dragging:"Mindmap_dragging_fgvb6","add-btn":"Mindmap_add-btn_fgvb6",hidden:"Mindmap_hidden_fgvb6","expand-btn":"Mindmap_expand-btn_fgvb6",text:"Mindmap_text_fgvb6",selected:"Mindmap_selected_fgvb6",content:"Mindmap_content_fgvb6",root:"Mindmap_root_fgvb6",edited:"Mindmap_edited_fgvb6",outline:"Mindmap_outline_fgvb6",collapse:"Mindmap_collapse_fgvb6","button-list":"Mindmap_button-list_fgvb6","right-bottom":"Mindmap_right-bottom_fgvb6","right-top":"Mindmap_right-top_fgvb6",disabled:"Mindmap_disabled_fgvb6",gps:"Mindmap_gps_fgvb6",fit:"Mindmap_fit_fgvb6",download:"Mindmap_download_fgvb6",prev:"Mindmap_prev_fgvb6",next:"Mindmap_next_fgvb6",close:"Mindmap_close_fgvb6"};const W=t(),Y=t(),U=t(),F=t(),q=t(),J=t();function X(){const e=this.querySelector(`g.${T["add-btn"]}`);e&&(e.style.opacity="1")}function Z(){const e=this.querySelector(`g.${T["add-btn"]}`);e&&(e.style.opacity="0")}const Q=(e,t)=>{e.stopPropagation(),ot(t)};function ee(e,t){var n,a;const l=null==(n=this.parentNode)?void 0:n.parentNode,{foreign:o}=R;if(Ge&&o&&J.value){l.classList.add(T.edited),I.emit("edit-flag",!1),o.attr("x",t.x-2-(t.left?t.width:0)).attr("y",t.y-hn.data.y-2).attr("data-id",t.id).attr("data-name",t.name).style("display","");const e=J.value;e.textContent=t.name,e.focus(),null==(a=getSelection())||a.selectAllChildren(e);const n=l.querySelector(`:scope > .${T.content}`);n&&ht(n)}}const te=()=>{var e;if(null==(e=document.getElementsByClassName(T.edited)[0])||e.classList.remove(T.edited,T.selected),q.value&&J.value){q.value.style.display="none";const e=q.value.getAttribute("data-id"),t=q.value.getAttribute("data-name"),n=J.value.textContent;e&&null!==n&&n!==t&&pn(e,n)}},ne=e=>{if(e.preventDefault(),!W.value)return;const t=lt(W.value,e);ge.value=t;const n=e.composedPath().find((e=>{var t;return null==(t=e.classList)?void 0:t.contains("node")}));if(n){const{classList:e}=n,t=e.contains(T.root),a=e.contains(T.collapse);e.contains(T.selected)||ot(n),ve.value.disabled=t,_e.value.disabled=t,Me.value.disabled=t,ye.value.disabled=t,we.value.disabled=t,xe.value.disabled=t,fe.value.disabled=!a,me.value.disabled=a||e.contains("leaf"),pe.value=!1}else pe.value=!0;I.emit("showContextmenu",!0)},ae=e=>{var t,n;switch(e){case"zoomfit":ct();break;case"zoomin":case"zoomout":ut(!0);break;case"add":le(new MouseEvent("click"),it());break;case"delete":vn(it().id);break;case"delete-one":bn(it().id);break;case"collapse":yn(it().id);break;case"expand":xn(it().id);break;case"add-sibling":{const e=it(),t=wn(e.id,"");t&&oe(t)}break;case"add-sibling-before":{const e=it(),t=wn(e.id,"",!0);t&&oe(t)}break;case"add-parent":{const e=it(),t=_n(e.id,"");t&&oe(t)}break;case"cut":{const{id:e}=it(),n=null==(t=hn.find(e))?void 0:t.rawData;n&&navigator.clipboard.writeText(JSON.stringify(n)),vn(e)}break;case"copy":{const e=it(),t=null==(n=hn.find(e.id))?void 0:n.rawData;t&&navigator.clipboard.writeText(JSON.stringify(t))}break;case"paste":{const e=it();navigator.clipboard.readText().then((t=>{const n=ft(t)||{name:t};fn(e.id,n)}))}}},le=(e,t)=>{const n=fn(t.id,"");n&&oe(n,e)};function oe(e,t=new MouseEvent("click")){const{g:n}=R;if(!n)return;const a=n.selectAll(`g[data-id='${xt(e)}'] > g.${T.content} > g.${T.text}`).node();a&&(I.emit("edit-flag",!0),ee.call(a,t,e))}const ie=(e,t)=>{xn(t.id)};const se=e=>{const{svg:t}=R;t&&(e?(Fe(t),t.on("dblclick.zoom",null)):t.on(".zoom",null))},re=e=>{W.value&&(e?W.value.addEventListener("contextmenu",ne):W.value.removeEventListener("contextmenu",ne))};let de,ce,he,ue;I.on("selection-svg",(e=>de=e)),I.on("selection-g",(e=>ce=e)),I.on("selection-asstSvg",(e=>he=e)),I.on("selection-foreign",(e=>ue=e));const pe=t(!0),ge=t({left:0,top:0}),me=t({name:"collapse",disabled:!0}),fe=t({name:"expand",disabled:!0}),ve=t({name:"delete",disabled:!1}),be=t({name:"add",disabled:!1}),xe=t({name:"add-parent",disabled:!1}),ye=t({name:"add-sibling",disabled:!1}),we=t({name:"add-sibling-before",disabled:!0}),_e=t({name:"cut",disabled:!1}),ke=t({name:"copy",disabled:!1}),$e=t({name:"paste",disabled:!1}),Me=t({name:"delete-one",disabled:!1}),Be=l((()=>[[be.value,xe.value,ye.value,we.value],[_e.value,ke.value,$e.value,ve.value,Me.value],[{name:"selectall",disabled:!0}],[me.value,fe.value]].filter(((e,t)=>0!==t&&1!==t||Ze.value.edit)))),Le=l((()=>[[{name:"zoomin",disabled:Ue.value.k>=Pe[1]},{name:"zoomout",disabled:Ue.value.k<=Pe[0]},{name:"zoomfit",disabled:!1}],[{name:"selectall",disabled:!0}]])),ze=l((()=>pe.value?Le.value:Be.value)),Ce=o().source((e=>e.source)).target((e=>e.target)),Se=i().curve(s),Ee=({source:e,target:t})=>Se([e,t]);let De=!1,Ne=Ce;const Ae=t(!1);I.on("sharp-corner",(e=>{De!==e&&(Ae.value=!0),De=!!e,Ne=e?Ee:Ce}));let Ve=4;I.on("branch",(e=>Ve=e||Ve));let Pe=[.1,8];I.on("scale-extent",(e=>Pe=e||Pe));let Ge=!1;I.on("edit-flag",(e=>Ge=!!e));let je=18,Oe=84,Ke=Math.min(je/2-1,10);I.on("gap",(e=>{e&&(Oe=e.xGap,je=e.yGap,Ke=Math.min(je/2-1,10),Ke=Math.min(Oe/2-1,Ke))}));const Re=new ResizeObserver((e=>{const{foreign:t}=R;if(!t)return;const n=e[0],a=n.target,{width:l,height:o}=n.contentRect,i=2*(parseInt(getComputedStyle(a).paddingLeft||"0",10)+parseInt(getComputedStyle(a.parentNode).borderTopWidth||"0",10));t.attr("width",l+i).attr("height",o+i),"none"!==t.style("display")&&ht(a)})),He={side:12,padding:2,margin:8},Ie=He.side+2*He.padding,Te=16,We=4,Ye=2,Ue=t(c),Fe=r().on("zoom",(e=>{const{g:t}=R;t&&(Ue.value=e.transform,t.attr("transform",e.transform.toString()))})).scaleExtent(Pe),qe=d().container((function(){var e,t;return null==(t=null==(e=this.parentNode)?void 0:e.parentNode)?void 0:t.parentNode})).on("drag",(function(e,t){var a;const l=null==(a=this.parentNode)?void 0:a.parentNode;Y.value&&Y.value.classList.add(T.dragging);const{g:o}=R;if(!o)return;rt(l,t,[e.x-t.x,e.y-t.y]);const i=n(e,U.value);i[1]+=hn.data.y;const s=o.selectAll("g.node").filter((e=>{if(e!==t&&e!==t.parent&&!e.id.startsWith(t.id)){let t=Ke,n=e.width+Ke;e.left&&0!==e.depth&&([t,n]=[n,t]);const a={x0:e.x-t,x1:e.x+n,y0:e.y-Ke,y1:e.y+e.height+Ke};return i[0]>a.x0&&i[1]>a.y0&&i[0]{e!==d&&e.classList.remove(T.outline)})),null==d||d.classList.add(T.outline)})).on("end",(function(e,t){var n;const l=null==(n=this.parentNode)?void 0:n.parentNode;Y.value&&Y.value.classList.remove(T.dragging);const o=document.getElementsByClassName(T.outline)[0];if(o){o.classList.remove(T.outline);const e=o.getAttribute("data-id");if(!e)throw new Error("outline data-id null");return t.px=0,t.py=0,void gn(e,t.id)}const i=t.x-hn.getRootWidth()/2,s=1===t.depth&&i*(i+t.px)<0,r=s?e=>e.left!==t.left:e=>e.left===t.left,d=l.parentNode;let c=s?{y:1/0,id:t.id}:t,h=s?{y:-1/0,id:t.id}:t;const u=a(d).selectAll(`g.${vt(t).join(".")}`).filter((e=>e!==t&&r(e))),p=t.y+t.py;u.each((e=>{(s||e.y>t.y)&&e.yh.y&&(h=e),(s||e.yp&&e.ye?Xe=e:null));const Ze=t({drag:!1,edit:!1});const Qe=new class{constructor(e=20){this.length=e,this.snapshots=[],this.cursor=-1}get hasPrev(){return this.cursor>0}get hasNext(){return this.snapshots.length>this.cursor+1}snap(e){const t=h.cloneDeep(e);for(;this.cursorthis.length&&this.snapshots.shift(),this.cursor=this.snapshots.length-1}prev(){return this.hasPrev?(this.cursor-=1,h.cloneDeep(this.snapshots[this.cursor])):null}next(){return this.hasNext?(this.cursor+=1,h.cloneDeep(this.snapshots[this.cursor])):null}},et=t(!1),tt=t(!1),nt=e=>{const t=e.split("\n");return t.length>1&&""===t[t.length-1]&&t.pop(),t},at=(e,t)=>u().duration(e).ease(t),lt=(e,t)=>{const{pageX:n,pageY:a}=t,l=e.getBoundingClientRect();return{left:n-(l.left+window.pageXOffset),top:a-(l.top+window.pageYOffset)}};function ot(e){const t=e instanceof SVGGElement?e:document.querySelector(`g[data-id='${xt(e)}']`),n=document.getElementsByClassName(T.selected)[0];if(!t)throw new Error("selectGNode failed");n?n!==t?(n.classList.remove(T.selected),t.classList.add(T.selected)):I.emit("edit-flag",!0):t.classList.add(T.selected)}function it(){return a(`.${T.selected}`).data()[0]}const st=e=>{const{asstSvg:t}=R;if(!t)throw new Error("asstSvg undefined");const n=nt(e),a=t.append("text");a.selectAll("tspan").data(n).enter().append("tspan").text((e=>e)).attr("x",0);const l=a.node().getBBox();return a.remove(),{width:Math.max(l.width,22),height:Math.max(l.height,22)*n.length}},rt=(e,t,n,l=0)=>{const o=at(l,g);t.px=n[0],t.py=n[1],a(e).transition(o).attr("transform",bt),a(`g[data-id='${xt(t)}'] > path`).transition(o).attr("d",(e=>wt(e)))},dt=()=>{const{svg:e}=R;if(!e)return;const t=hn.data;Fe.translateTo(e,0+t.width/2,0+t.height/2)},ct=()=>{const{svg:e}=R;if(!e||!U.value||!Y.value)return;const t=U.value.getBBox(),n=Y.value.getBoundingClientRect(),a=Math.min(n.width/t.width,n.height/t.height),l=n.width/2,o=n.height/2,i=t.width*a/2,s=t.height*a/2,r=c.translate(-t.x*a+l-i,-t.y*a+o-s).scale(a);Fe.transform(e,r)},ht=e=>{const{svg:t}=R;if(t&&Y.value){const{k:n}=Ue.value,a=e.getBoundingClientRect(),{x:l,y:o,width:i,height:s}=Y.value.getBoundingClientRect(),r=a.x-l,d=r+a.width,c=a.y-o,h=c+a.height,u=2;let p=0,g=0;r<0&&(p=-r/n+u),(a.width>i||d>i)&&(p=-(d-i)/n-u),c<0&&(g=-c/n+u),(a.height>s||h>s)&&(g=-(h-s)/n-u),Fe.translateBy(t,p,g)}},ut=e=>{const{svg:t}=R;t&&Fe.scaleBy(t,e?1.1:.9)},pt=()=>{var e,t;W.value&&(e=W.value,t=hn.data.name,p(e).then((e=>{const n=e.toDataURL(),a=open();a&&(a.document.write(``),a.document.title=t,a.document.close())})))},gt=()=>{const e=Qe.next();e&&(hn.data=e,un(!1))},mt=()=>{const e=Qe.prev();e&&(hn.data=e,un(!1))},ft=e=>{let t;try{return t=JSON.parse(e),"name"in t&&t}catch(n){return!1}},vt=e=>{const t=["node"];return e&&t.push(`depth-${e.depth}`),t},bt=e=>`translate(${e.dx+e.px},${e.dy+e.py})`,xt=e=>e.id,yt=e=>{const t=nt(e.name),n=e.height/t.length;return t.map((e=>({name:e,height:n})))},wt=e=>{let t=0,n=0;const a=Math.max(Ke-3,0);let l=e.width+a;let o=3;const{parent:i}=e;i&&(t=i.width,n=i.height,0===i.depth&&(De||(t/=2),n/=2,o=0)),e.left&&(i&&(0!==i.depth?t=-t:De&&(t=0)),l=-l);const s=[-e.dx+t-e.px,-e.dy+n+o-e.py],r=[0,e.height+3];return`${Ne({source:s,target:r})}L${l},${r[1]}`},_t=(e,t,n,a,l)=>{e?(St(t,10),Lt(n,10,6),zt(a,10),l&&Ct(l,10)):(St(t,Ke),Lt(n,Ke),zt(a,Ke),l&&Ct(l,Ke))},kt=(e,t)=>{const n=e.attr("class",(e=>(e=>{const t=vt(e);return e&&(0===e.depth&&t.push(T.root),e.collapse?t.push(T.collapse):e.children&&0!==e.children.length||t.push("leaf")),t})(e).join(" "))).attr("data-id",xt);(t?n.transition(t):n).attr("transform",bt)},$t=(e,t)=>{(t?e.transition(t):e).attr("transform",(e=>`translate(${e.left?-e.width:0},0)`))},Mt=e=>{e.attr("alignment-baseline","text-before-edge").text((e=>e.name||" ")).attr("x",0).attr("dy",((e,t)=>t?e.height:0))},Bt=(e,t)=>{e.attr("cx",t).attr("cy",0).attr("r",1)},Lt=(e,t,n=4)=>{e.attr("x",(e=>-t-(e.left?e.width:0))).attr("y",-t).attr("rx",n).attr("ry",n).attr("width",(e=>e.width+2*t)).attr("height",(e=>e.height+2*t))},zt=(e,t)=>{e.attr("class",T["expand-btn"]).attr("transform",(e=>((e,t)=>{const n=0===e.depth?e.height/2:e.height+3;let a=e.width+t+Te/2+4;return e.left&&(a=-a),`translate(${a},${n})`})(e,t))).style("color",(e=>e.color))},Ct=(e,t)=>{e.attr("class",(e=>(e=>{const t=[T["add-btn"]];return e.collapse&&t.push(T.hidden),t})(e).join(" "))).attr("transform",(e=>((e,t)=>{const n=0===e.depth?e.height/2:e.height+3;let a=e.width+t+Ie/2+He.margin;return e.left&&(a=-a),`translate(${a},${n})`})(e,t)))},St=(e,t)=>{const n=Ie+He.margin,a=2*t;e.attr("class",T.trigger).attr("x",(e=>-t-(e.left?e.width+n:0))).attr("y",-t).attr("width",(e=>e.width+a+n)).attr("height",(e=>e.height+a))},Et=(e,t)=>{const n=e.attr("stroke",(e=>e.color)).attr("stroke-width",Ve);if(t){const e=n.transition(t);Ae.value?e.attrTween("d",Dt):e.attr("d",wt)}else n.attr("d",wt)};function Dt(e,t,n){const a=wt(e),l=n[t],o=l.cloneNode(),i=l.getTotalLength();o.setAttribute("d",a);const s=o.getTotalLength(),r=[0],d=10/Math.max(i,s);let c=0;for(;(c+=d)<1;)r.push(c);r.push(1);const h=r.map((e=>{const t=l.getPointAtLength(e*i),n=o.getPointAtLength(e*s);return m([t.x,t.y],[n.x,n.y])}));return e=>e<1?"M"+h.map((t=>t(e))).join("L"):a}const Nt=e=>{const t=e.append("tspan");return Mt(t),t},At=e=>(Mt(e),e),Vt=e=>{const t=e.append("g");return(e=>{const{side:t,padding:n}=He,a=-n-t/2,l=t+2*n;e.attr("x",a).attr("y",a).attr("rx",4).attr("ry",4).attr("width",l).attr("height",l)})(t.append("rect")),t.append("path").attr("d",((e,t)=>{const n=-t/2,a=-e/2,l=e/2,o=t/2;return`M${o},${l}H${l}V${o}H${a}V${l}H${n}V${a}H${a}V${n}H${l}V${a}H${o}V${l}Z`})(2,He.side)),t},Pt=e=>{const t=Vt(e);return t.on("click",le),t},Gt=e=>{const t=e.append("g");return t.append("rect").attr("x",-Te/2).attr("y",-We/2).attr("width",Te).attr("height",We).attr("rx",Ye).attr("ry",Ye).attr("stroke",(e=>e.color||"grey")).attr("fill",(e=>e.color||"grey")),Bt(t.append("circle"),-4),Bt(t.append("circle"),0),Bt(t.append("circle"),4),t},jt=e=>{var t;const n=!(null==(t=e.data()[0])?void 0:t.depth),a=e.append("g");kt(a),Et(a.append("path"));const l=a.append("g").attr("class",T.content),o=l.append("rect"),i=l.append("g").attr("class",T.text),s=i.append("rect"),r=i.append("text");$t(r);const d=r.selectAll("tspan").data(yt).enter().append("tspan");let c;Mt(d),Je.value&&(c=Pt(l));const h=Gt(l);return _t(n,o,s,h,c),((e,t)=>{if(e.select(`:scope > g.${T.content} > g.${T["expand-btn"]}`).on("click",ie),Ze.value.drag||Ze.value.edit){const n=e.select(`:scope > g.${T.content} > g.${T.text}`);n.on("mousedown",Q),Ze.value.drag&&!t&&qe(n),Ze.value.edit&&n.on("click",ee)}Je.value&&e.select(`:scope > g.${T.content}`).on("mouseenter",X).on("mouseleave",Z)})(a,n),a.each(((e,t)=>{e.children&&Kt(e.children,a.filter(((e,n)=>t===n)))})),l.raise(),a},Ot=e=>{var t;const n=!(null==(t=e.data()[0])?void 0:t.depth),a=at(500,g);kt(e,a),Et(e.select(":scope > path"),a);const l=e.select(`:scope > g.${T.content}`),o=l.select(":scope > rect"),i=l.select(`g.${T.text}`),s=i.select("rect"),r=i.select("text");$t(r,a),r.selectAll("tspan").data(yt).join(Nt,At,(e=>e.remove()));let d=l.select(`g.${T["add-btn"]}`);const c=l.select(`g.${T["expand-btn"]}`);return Je.value?d.node()||(d=Pt(l)):d.remove(),_t(n,o,s,c,d),e.each(((t,n)=>{t.children&&Kt(t.children,e.filter(((e,t)=>n===t)))})),l.raise(),e},Kt=(e=[hn.data],t=ce)=>{t.selectAll(`g.${vt(e[0]).join(".")}`).data(e,(e=>e.gKey)).join(jt,Ot)};class Rt{constructor(e,t,n,a){this.w=e,this.h=t,this.y=n,this.c=a,this.cs=a.length,this.x=0,this.prelim=0,this.mod=0,this.shift=0,this.change=0,this.tl=null,this.tr=null,this.el=null,this.er=null,this.msel=0,this.mser=0}}function Ht(e){0===e.cs?(e.el=e,e.er=e,e.msel=e.mser=0):(e.el=e.c[0].el,e.msel=e.c[0].msel,e.er=e.c[e.cs-1].er,e.mser=e.c[e.cs-1].mser)}function It(e){return e.y+e.h}class Tt{constructor(e,t,n){this.lowY=e,this.index=t,this.next=n}}function Wt(e,t,n){for(;null!==n&&e>=n.lowY;)n=n.next;return new Tt(e,t,n)}function Yt(e,t,n,a){e.c[t].mod+=a,e.c[t].msel+=a,e.c[t].mser+=a,function(e,t,n,a){if(n!==t-1){const l=t-n;e.c[n+1].shift+=a/l,e.c[t].shift-=a/l,e.c[t].change-=a-a/l}}(e,t,n,a)}function Ut(e){return 0===e.cs?e.tl:e.c[0]}function Ft(e){return 0===e.cs?e.tr:e.c[e.cs-1]}function qt(e,t,n){let a=e.c[t-1],l=a.mod,o=e.c[t],i=o.mod;for(;null!==a&&null!==o;){It(a)>n.lowY&&(n=n.next);const s=l+a.prelim+a.w-(i+o.prelim);s>0&&(i+=s,Yt(e,t,n.index,s));const r=It(a),d=It(o);r<=d&&(a=Ft(a),null!==a&&(l+=a.mod)),r>=d&&(o=Ut(o),null!==o&&(i+=o.mod))}null===a&&null!==o?function(e,t,n,a){const l=e.c[0].el;l.tl=n;const o=a-n.mod-e.c[0].msel;l.mod+=o,l.prelim-=o,e.c[0].el=e.c[t].el,e.c[0].msel=e.c[t].msel}(e,t,o,i):null!==a&&null===o&&function(e,t,n,a){const l=e.c[t].er;l.tr=n;const o=a-n.mod-e.c[t].mser;l.mod+=o,l.prelim-=o,e.c[t].er=e.c[t-1].er,e.c[t].mser=e.c[t-1].mser}(e,t,a,l)}function Jt(e){if(0===e.cs)return void Ht(e);Jt(e.c[0]);let t=Wt(It(e.c[0].el),0,null);for(let n=1;n[e.width,e.height]=[e.height,e.width],nn=e=>{e.parent?(e.dx=e.x-e.parent.x,e.dy=e.y-e.parent.y):(e.dx=0,e.dy=0)},an=(e,t)=>e.id=t,ln=e=>{e.parent?e.depth=e.parent.depth+1:e.depth=0},on=e=>{e.parent&&e.parent.color&&(e.color=e.parent.color)},sn=e=>{e.depth>1&&e.parent&&(e.left=e.parent.left)},rn=(e,t,n="0")=>{var a;t.forEach((t=>{t(e,n)}));const{children:l}=e;if(l)for(let o=0;o{const n=new Qt(t,e);return new en(n)};class cn{constructor(e,t,n,a,l=f(v)){this.colorNumber=0,this.gKey=0,this.rootWidth=0,this.diffY=0,this.colorScale=l,this.getSize=a,this.layout=dn(t,n),this.data=this.createMdataFromData(e,"0"),this.renew()}createMdataFromData(e,t,n=null){const{name:a,collapse:l,children:o}=e,{width:i,height:s}=this.getSize(a),r=n?n.depth+1:0;let d=!1,c=n?n.color:"";1===r?(d=!!e.left,c=this.colorScale(`${this.colorNumber+=1}`)):0!==r&&n&&(d=n.left);const h={id:t,name:a,rawData:e,parent:n,left:d,color:c,depth:r,x:0,y:0,dx:0,dy:0,px:0,py:0,width:i,height:s,children:[],_children:[],collapse:!!l,gKey:this.gKey+=1};return o&&(h.collapse?o.forEach(((e,n)=>{h._children.push(this.createMdataFromData(e,`${t}-${n}`,h))})):o.forEach(((e,n)=>{h.children.push(this.createMdataFromData(e,`${t}-${n}`,h))}))),h}renew(...e){rn(this.data,[tn,ln,sn]),this.data=this.l(this.data);const t=[tn,this.renewXY.bind(this),nn];rn(this.data,t.concat(e))}l(e){const{left:t,right:n}=(e=>{const t=Object.assign({},e),n=Object.assign({},e);if(e.collapse);else{const{children:a}=e;t.children=[],n.children=[],a.forEach((e=>{e.left?t.children.push(e):n.children.push(e),e.parent&&(e.parent=n)}))}return{left:t,right:n}})(e);return this.layout.layout(t),this.layout.layout(n),this.diffY=n.x-t.x,this.rootWidth=t.height,n.children=e.children,n}renewXY(e){[e.x,e.y]=[e.y,e.x],e.left&&(e.x=-e.x+this.rootWidth,e.y+=this.diffY)}getRootWidth(){return this.rootWidth}setBoundingBox(e,t){this.layout=dn(e,t),this.renew()}find(e){const t=e.split("-").map((e=>~~e));let n=this.data;for(let a=1;a0){const n=this.find(e);if(n&&n.name!==t){n.name=t,n.rawData.name=t;const e=this.getSize(n.name);n.width=e.width,n.height=e.height,this.renew()}return n}return null}moveChild(e,t){var n,a;if(e===t)return null;const l=this.find(e),o=this.find(t),i=t.split("-").pop();if(i&&l&&o){const e=o.parent;null==(n=null==e?void 0:e.children)||n.splice(~~i,1),null==(a=null==e?void 0:e.rawData.children)||a.splice(~~i,1),o.parent=l,o.gKey=this.gKey+=1,o.depth=o.parent.depth+1,1===o.depth?o.color=this.colorScale(`${this.colorNumber+=1}`):o.left=o.parent.left,l.collapse?l._children.push(o):l.children.push(o),l.rawData.children?l.rawData.children.push(o.rawData):l.rawData.children=[o.rawData],this.renew(an,on)}return o}moveSibling(e,t,n=0){const a=e.split("-"),l=t.split("-");let o=a.pop(),i=l.pop();if(e===t||a.length!==l.length||!o||!i)return null;const s=this.find(e),r=this.find(t);if(r&&s&&s.parent){o=parseInt(o,10),i=parseInt(i,10),o{e.parent=a,1===e.depth&&(e.rawData.left=e.left)})),this.renew(an)}}addSibling(e,t,n=!1){var a;const l=this.find(e);if(l&&l.parent){const o=parseInt(e.split("-").pop(),10),{parent:i,left:s}=l,r={name:t,left:s},d=this.getSize(t),c=n?o:o+1,h={name:t,parent:i,children:[],_children:[],color:i.color?i.color:this.colorScale(`${this.colorNumber+=1}`),collapse:!1,rawData:r,id:`${i.id}-${c}`,left:s,gKey:this.gKey+=1,depth:l.depth,width:d.width,height:d.height,x:0,y:0,dx:0,dy:0,px:0,py:0};return i.children.splice(c,0,h),null==(a=i.rawData.children)||a.splice(c,0,r),this.renew(an),h}return null}addParent(e,t){var n;const a=this.find(e);if(a&&a.parent){const{parent:e,left:l,color:o}=a,i=this.getSize(t),s=parseInt(a.id.split("-").pop(),10),r={name:t,children:[a.rawData],left:l};null==(n=e.rawData.children)||n.splice(s,1,r);const d={rawData:r,left:l,name:t,color:o,collapse:!1,parent:e,id:a.id,depth:a.depth,width:i.width,height:i.height,gKey:this.gKey+=1,children:[a],_children:[],x:0,y:0,dx:0,dy:0,px:0,py:0};return a.parent=d,e.children.splice(s,1,d),this.renew(an),d}return null}changeLeft(e){const t=this.find(e);return t&&(t.left=!t.left,this.renew()),t}}let hn;I.on("mmdata",(e=>e?hn=e:null));const un=(e=!0)=>{e&&Qe.snap(hn.data),Xe.emit("update:modelValue",b([hn.data.rawData])),et.value=Qe.hasPrev,tt.value=Qe.hasNext,Kt()},pn=(e,t)=>{hn.rename(e,t),un()},gn=(e,t)=>{hn.moveChild(e,t),un()},mn=(e,t,n=0)=>{hn.moveSibling(e,t,n),un()},fn=(e,t)=>{const n=hn.add(e,t);return un(),n},vn=e=>{hn.delete(e),un()},bn=e=>{hn.deleteOne(e),un()},xn=e=>{hn.expand(e),un()},yn=e=>{hn.collapse(e),un()},wn=(e,t,n=!1)=>{const a=hn.addSibling(e,t,n);return un(),a},_n=(e,t)=>{const n=hn.addParent(e,t);return un(),n},kn=e=>{hn.changeLeft(e),un()};x.init({fallbackLng:"zh",lng:"zh",resources:{zh:{translation:{contextmenu:{collapse:"折叠节点",expand:"展开节点",delete:"删除节点","delete-one":"删除单个节点",add:"新建子节点","add-parent":"新建父节点","add-sibling":"新建兄弟节点","add-sibling-before":"在此之前新建兄弟节点",cut:"剪切",copy:"拷贝",paste:"粘贴",selectall:"全选",zoomin:"放大",zoomout:"缩小",zoomfit:"缩放至合适大小"}}},en:{translation:{contextmenu:{collapse:"collapse",expand:"expand",delete:"delete","delete-one":"delete a single node",add:"add child node","add-parent":"add parent node","add-sibling":"add sibling node","add-sibling-before":"add sibling node before",cut:"cut",copy:"copy",paste:"paste",selectall:"select all",zoomin:"zoom in",zoomout:"zoom out",zoomfit:"zoom fit"}}},ptBR:{translation:{contextmenu:{collapse:"Fechar",expand:"Abrir",delete:"Excluir","delete-one":"Excluir único nó",add:"Adicionar nó filho","add-parent":"Adicionar nó antes","add-sibling":"Adicionar nó abaixo","add-sibling-before":"Adicionar nó acima",cut:"Recortar",copy:"Copiar",paste:"Colar",selectall:"Selecionar tudo",zoomin:"Aproximar",zoomout:"Retrair",zoomfit:"Centralizar"}}}}});var $n=y({name:"contextmenu",props:{position:{default:{top:0,left:0}},groups:Array},emits:["click-item"],setup(e,n){const a=t(!1),l=w(),o=t(),i=t(),s=_({top:0,left:0});I.on("showContextmenu",(async t=>{if(!o.value||!i.value)return;a.value=!!t,await k();const{offsetWidth:n,offsetHeight:l}=o.value,{offsetWidth:r,offsetHeight:d}=i.value,{top:c,left:h}=e.position;s.top=c+d>l?l-d-8:c,s.left=h+r>n?h-r:h}));const r=()=>a.value=!1;return{style:l,show:a,close:r,onClick:e=>{r(),n.emit("click-item",e)},menuEle:i,containerEle:o,pos:s,i18n:x}}});var Mn={container:"Contextmenu_container_154ic",menu:"Contextmenu_menu_154ic",disabled:"Contextmenu_disabled_154ic"};($n.__cssModules={}).$style=Mn,$n.render=function(e,t,n,a,l,o){return $((S(),B("div",{class:e.style.container,ref:"containerEle"},[L("div",{onMousedown:t[1]||(t[1]=(...t)=>e.close&&e.close(...t))},null,32),L("div",{ref:"menuEle",id:e.style.menu,style:{top:e.pos.top+"px",left:e.pos.left+"px"}},[(S(!0),B(z,null,C(e.groups,((t,n)=>(S(),B("ul",{key:n},[(S(!0),B(z,null,C(t,(t=>(S(),B("li",{class:t.disabled?e.style.disabled:"",key:t.name,onClick:n=>e.onClick(t.name)},E(e.i18n.t(`contextmenu.${t.name}`)),11,["onClick"])))),128))])))),128))],12,["id"])],2)),[[M,e.show]])};var Bn=y({name:"Mindmap",components:{Contextmenu:$n},emits:["update:modelValue"],props:{modelValue:{type:Array,required:!0},xGap:{type:Number,default:Oe},yGap:{type:Number,default:je},branch:{type:Number,default:Ve,validator:e=>e>=1&&e<=6},scaleExtent:{type:Object,default:Pe},sharpCorner:Boolean,centerBtn:Boolean,fitBtn:Boolean,downloadBtn:Boolean,timetravel:Boolean,addNodeBtn:Boolean,edit:Boolean,drag:Boolean,keyboard:Boolean,ctm:Boolean,zoom:Boolean,locale:{type:String,default:"zh"}},setup:(e,t)=>(D((()=>x.changeLanguage(e.locale))),D((()=>I.emit("scale-extent",e.scaleExtent))),D((()=>I.emit("branch",e.branch))),D((()=>I.emit("sharp-corner",e.sharpCorner))),D((()=>I.emit("gap",{xGap:e.xGap,yGap:e.yGap}))),D((()=>I.emit("mindmap-context",t))),D((()=>Je.value=e.edit&&e.addNodeBtn)),D((()=>Ze.value.drag=e.drag)),D((()=>Ze.value.edit=e.edit)),N((()=>{if(!(Y.value&&U.value&&F.value&&q.value&&J.value))return;I.emit("selection-svg",a(Y.value)),I.emit("selection-g",a(U.value)),I.emit("selection-asstSvg",a(F.value)),I.emit("selection-foreign",a(q.value)),I.emit("mmdata",new cn(h.cloneDeep(e.modelValue[0]),Oe,je,st)),Ae.value=!1,un();const{svg:t,foreign:n}=R;null==n||n.raise(),J.value&&(Re.observe(J.value),J.value.addEventListener("blur",te),J.value.addEventListener("mousedown",(e=>e.stopPropagation()))),ct(),null==t||t.on("mousedown",(()=>{const e=document.getElementsByClassName(T.selected)[0];null==e||e.classList.remove(T.selected)})),se(e.zoom),re(e.ctm)})),A((()=>[e.branch,Je.value,e.sharpCorner]),(()=>{Kt(),Ae.value=!1})),A((()=>[e.xGap,e.yGap]),(e=>{hn.setBoundingBox(e[0],e[1]),Kt()})),A((()=>[e.drag,e.edit]),(e=>{(e=>{const{g:t}=R;if(!t)return;const n=t.selectAll(`g.${T.text}`);e?n.on("mousedown",Q):n.on("mousedown",null)})(e[0]||e[1]),(e=>{const{g:t}=R;if(!t)return;const n=t.selectAll(`g.node:not(.${T.root}) > g > g.${T.text}`);e?qe(n):n.on(".drag",null)})(e[0]),(e=>{const{g:t}=R;if(!J.value||!t)return;const n=t.selectAll(`g.${T.text}`);e?n.on("click",ee):n.on("click",null)})(e[1])})),A((()=>e.zoom),(e=>se(e))),A((()=>e.ctm),(e=>re(e))),{wrapperEle:W,svgEle:Y,gEle:U,style:T,asstSvgEle:F,foreignEle:q,foreignDivEle:J,centerView:dt,fitView:ct,download:pt,menu:ze,contextmenuPos:ge,onClickMenu:ae,next:gt,prev:mt,hasPrev:et,hasNext:tt})});const Ln={ref:"gEle"},zn={ref:"foreignEle",style:{display:"none"}},Cn={ref:"foreignDivEle",contenteditable:""};Bn.render=function(e,t,n,a,l,o){const i=V("contextmenu");return S(),B("div",{class:e.style.container},[L("div",{id:e.style["svg-wrapper"],ref:"wrapperEle"},[(S(),B("svg",{class:e.style.svg,ref:"svgEle"},[L("g",Ln,[(S(),B("foreignObject",zn,[L("div",Cn,null,512)],512))],512)],2))],8,["id"]),(S(),B("svg",{ref:"asstSvgEle",class:e.style["asst-svg"]},null,2)),L("div",{class:[e.style["button-list"],e.style["right-bottom"]]},[e.centerBtn?(S(),B("button",{key:0,onClick:t[1]||(t[1]=t=>e.centerView())},[L("i",{class:e.style.gps},null,2)])):P("",!0),e.fitBtn?(S(),B("button",{key:1,onClick:t[2]||(t[2]=t=>e.fitView())},[L("i",{class:e.style.fit},null,2)])):P("",!0),e.downloadBtn?(S(),B("button",{key:2,onClick:t[3]||(t[3]=t=>e.download())},[L("i",{class:e.style.download},null,2)])):P("",!0)],2),e.timetravel?(S(),B("div",{key:0,class:[e.style["button-list"],e.style["right-top"]]},[L("button",{onClick:t[4]||(t[4]=(...t)=>e.prev&&e.prev(...t)),class:{[e.style.disabled]:!e.hasPrev}},[L("i",{class:e.style.prev},null,2)],2),L("button",{onClick:t[5]||(t[5]=(...t)=>e.next&&e.next(...t)),class:{[e.style.disabled]:!e.hasNext}},[L("i",{class:e.style.next},null,2)],2)],2)):P("",!0),e.ctm?(S(),B(i,{key:1,position:e.contextmenuPos,groups:e.menu,onClickItem:e.onClickMenu},null,8,["position","groups","onClickItem"])):P("",!0)],2)};var Sn=y({name:"App",components:{Mindmap:Bn},setup(){const e=_({"center-btn":{value:!0},"fit-btn":{value:!0},timetravel:{value:!0},"download-btn":{value:!0},"add-node-btn":{value:!0},keyboard:{value:!1,disabled:!0},zoom:{value:!0},drag:{value:!0},edit:{value:!0},contextmenu:{value:!0},"sharp-corner":{value:!1},vertical:{value:!1,disabled:!0}}),n=_({branch:{value:4,min:1,max:6},"x-gap":{value:84,min:0,max:100},"y-gap":{value:18,min:0,max:100}});return{data:t(H),checkboxList:e,rangeList:n,onChange:()=>console.log("update:model-value"),locale:t("zh")}}});const En={class:"container"},Dn=L("div",{class:"left-top"},[L("a",{href:"https://github.com/hellowuxin/vue3-mindmap",target:"_blank"},"GitHub")],-1),Nn=L("div",{class:"right-top"},[L("span",null,"Props")],-1),An={class:"right-bottom"},Vn=L("label",{for:"language-select"},"Language",-1),Pn=L("option",{value:"zh"},"简体中文",-1),Gn=L("option",{value:"en"},"English",-1),jn=L("option",{value:"ptBR"},"Brazilian Portuguese",-1);Sn.render=function(e,t,n,a,l,o){const i=V("mindmap");return S(),B("div",En,[Dn,Nn,L(i,{class:"left-bottom",modelValue:e.data,"onUpdate:modelValue":[t[1]||(t[1]=t=>e.data=t),e.onChange],branch:e.rangeList.branch.value,"x-gap":e.rangeList["x-gap"].value,"y-gap":e.rangeList["y-gap"].value,zoom:e.checkboxList.zoom.value,"fit-btn":e.checkboxList["fit-btn"].value,"center-btn":e.checkboxList["center-btn"].value,"download-btn":e.checkboxList["download-btn"].value,drag:e.checkboxList.drag.value,edit:e.checkboxList.edit.value,"add-node-btn":e.checkboxList["add-node-btn"].value,"sharp-corner":e.checkboxList["sharp-corner"].value,ctm:e.checkboxList.contextmenu.value,timetravel:e.checkboxList.timetravel.value,locale:e.locale},null,8,["modelValue","branch","x-gap","y-gap","zoom","fit-btn","center-btn","download-btn","drag","edit","add-node-btn","sharp-corner","ctm","timetravel","onUpdate:modelValue","locale"]),L("div",An,[L("div",null,[Vn,$(L("select",{id:"language-select","onUpdate:modelValue":t[2]||(t[2]=t=>e.locale=t)},[Pn,Gn,jn],512),[[G,e.locale]])]),(S(!0),B(z,null,C(e.checkboxList,((e,t)=>(S(),B("div",{key:t},[$(L("input",{type:"checkbox",name:t.toString(),"onUpdate:modelValue":t=>e.value=t,disabled:e.disabled},null,8,["name","onUpdate:modelValue","disabled"]),[[j,e.value]]),L("label",{for:t.toString()},E(t),9,["for"])])))),128)),(S(!0),B(z,null,C(e.rangeList,((e,t)=>(S(),B("div",{key:t},[$(L("input",{type:"range",name:t,"onUpdate:modelValue":t=>e.value=t,min:e.min,max:e.max},null,8,["name","onUpdate:modelValue","min","max"]),[[O,e.value,void 0,{number:!0}]]),L("label",{for:t},E(t)+"("+E(e.value)+")",9,["for"])])))),128))])])},K(Sn).mount("#app"); ================================================ FILE: docs/assets/index.55b3b50b.css ================================================ .Mindmap_container_fgvb6{position:relative;height:100%}.Mindmap_container_fgvb6 svg text{white-space:pre}.Mindmap_container_fgvb6 #Mindmap_svg-wrapper_fgvb6{width:100%;height:100%}.Mindmap_container_fgvb6 .Mindmap_asst-svg_fgvb6{position:absolute;width:0;height:0}.Mindmap_svg_fgvb6{display:block;width:100%;height:100%;background-color:#eeeef3}.Mindmap_svg_fgvb6 path{fill:none;stroke-linecap:round}.Mindmap_svg_fgvb6 text{fill:#4b4b4b;cursor:default}.Mindmap_svg_fgvb6 foreignObject{background-color:#fff;border:1px solid #aaa}.Mindmap_svg_fgvb6 foreignObject div{display:inline-block;outline:0;width:max-content;min-width:22px;padding:1px;white-space:pre}.Mindmap_svg_fgvb6 .Mindmap_trigger_fgvb6{fill:transparent}.Mindmap_svg_fgvb6.Mindmap_dragging_fgvb6 .Mindmap_add-btn_fgvb6{visibility:hidden}.Mindmap_svg_fgvb6 .Mindmap_add-btn_fgvb6{opacity:0}.Mindmap_svg_fgvb6 .Mindmap_add-btn_fgvb6.Mindmap_hidden_fgvb6{visibility:hidden}.Mindmap_svg_fgvb6 .Mindmap_add-btn_fgvb6 rect{stroke-width:1;stroke:grey;fill:#fff}.Mindmap_svg_fgvb6 .Mindmap_add-btn_fgvb6 path{fill:#8685ff}.Mindmap_svg_fgvb6 .Mindmap_expand-btn_fgvb6{visibility:hidden}.Mindmap_svg_fgvb6 .Mindmap_expand-btn_fgvb6:hover rect{fill:#fff}.Mindmap_svg_fgvb6 .Mindmap_expand-btn_fgvb6:hover circle{fill:currentColor}.Mindmap_svg_fgvb6 .Mindmap_text_fgvb6>rect{opacity:0;fill:rgba(0,0,255,.15);stroke-width:1;stroke:#fff}.Mindmap_svg_fgvb6 .Mindmap_selected_fgvb6>.Mindmap_content_fgvb6>.Mindmap_text_fgvb6>rect{opacity:1}.Mindmap_svg_fgvb6 .Mindmap_root_fgvb6.Mindmap_selected_fgvb6>.Mindmap_content_fgvb6>.Mindmap_text_fgvb6>rect{stroke-width:3;stroke:rgba(0,0,255,.15)}.Mindmap_svg_fgvb6 .Mindmap_edited_fgvb6>.Mindmap_content_fgvb6>.Mindmap_text_fgvb6{opacity:0}.Mindmap_svg_fgvb6 .Mindmap_outline_fgvb6>.Mindmap_content_fgvb6>.Mindmap_text_fgvb6>rect{opacity:1;fill:transparent;stroke-width:3;stroke:rgba(0,0,255,.15)}.Mindmap_svg_fgvb6 .Mindmap_root_fgvb6>.Mindmap_content_fgvb6>.Mindmap_text_fgvb6>rect{opacity:1;fill:#fff}.Mindmap_svg_fgvb6 .Mindmap_collapse_fgvb6>.Mindmap_content_fgvb6>.Mindmap_expand-btn_fgvb6{visibility:visible}.Mindmap_button-list_fgvb6{position:absolute}.Mindmap_button-list_fgvb6.Mindmap_right-bottom_fgvb6{bottom:0;right:0}.Mindmap_button-list_fgvb6.Mindmap_right-top_fgvb6{top:0;right:0;display:flex}.Mindmap_button-list_fgvb6 button{position:relative;cursor:pointer;width:36px;height:36px;border-radius:50%;background-color:transparent;display:flex;align-items:center;justify-content:center;padding:0;border:0;color:#3f51b5}.Mindmap_button-list_fgvb6 button::before{background-color:currentColor;border-radius:inherit;content:"";opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;transition:opacity .2s cubic-bezier(.4,0,.6,1)}.Mindmap_button-list_fgvb6 button:hover::before{opacity:.1}.Mindmap_button-list_fgvb6 button.Mindmap_disabled_fgvb6{pointer-events:none}.Mindmap_button-list_fgvb6 button.Mindmap_disabled_fgvb6 i{filter:invert(85%) sepia(20%) saturate(0) hue-rotate(125deg) brightness(86%) contrast(93%)}.Mindmap_button-list_fgvb6 button i{filter:invert(25%) sepia(40%) saturate(5050%) hue-rotate(227deg) brightness(78%) contrast(74%);width:24px;height:24px}.Mindmap_button-list_fgvb6 button i.Mindmap_gps_fgvb6{background-image:url(/vue3-mindmap/icons/24px/crosshairs-gps.png)}.Mindmap_button-list_fgvb6 button i.Mindmap_fit_fgvb6{background-image:url(/vue3-mindmap/icons/24px/fit-to-page-outline.png)}.Mindmap_button-list_fgvb6 button i.Mindmap_download_fgvb6{background-image:url(/vue3-mindmap/icons/24px/download.png)}.Mindmap_button-list_fgvb6 button i.Mindmap_prev_fgvb6{background-image:url(/vue3-mindmap/icons/24px/prev.png)}.Mindmap_button-list_fgvb6 button i.Mindmap_next_fgvb6{background-image:url(/vue3-mindmap/icons/24px/next.png)}.Mindmap_button-list_fgvb6 button i.Mindmap_close_fgvb6{background-image:url(/vue3-mindmap/icons/24px/close.png)}.Contextmenu_container_154ic{position:absolute;left:0;top:0;right:0;bottom:0}.Contextmenu_container_154ic>div:first-child{width:100%;height:100%}#Contextmenu_menu_154ic{position:absolute;border-radius:4px;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);padding:4px 4px;background-color:#eae9ed;color:#3a353d;font-weight:700;font-size:small;white-space:nowrap}#Contextmenu_menu_154ic ul{list-style-type:none;margin:0;padding:0;border-radius:inherit}#Contextmenu_menu_154ic ul:not(:last-child)::after{display:block;content:"";background-color:#cbcbcb;height:1px;margin:4px 10px}#Contextmenu_menu_154ic ul li{position:relative;padding:2px 10px;cursor:pointer;border-radius:inherit}#Contextmenu_menu_154ic ul li::before{border-radius:inherit;background-color:#000;bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:.3s cubic-bezier(.25,.8,.5,1)}#Contextmenu_menu_154ic ul li:not(.Contextmenu_disabled_154ic):hover::before{opacity:.09}#Contextmenu_menu_154ic ul li.Contextmenu_disabled_154ic{color:#aeb2b5;pointer-events:none}.container{width:100%;height:calc(100vh - 16px);border-radius:4px;border:thin solid rgba(0,0,0,.12);overflow:hidden;background-color:rgba(0,0,0,.12);display:grid;grid-template-columns:75% 1px 25%;grid-template-rows:48px 1px auto}.right-top{grid-column:3/4}.left-bottom{grid-row:3/4}.right-bottom{grid-column:3/4;grid-row:3/4;background-color:#fff;padding:12px;display:flex;flex-direction:column;gap:10px;overflow:scroll}.right-bottom div{display:flex;align-items:center;gap:5px}.left-top,.right-top{background-color:#eee;padding:0 12px;display:flex;align-items:center}input[type=checkbox]{cursor:pointer}input:disabled{cursor:not-allowed} ================================================ FILE: docs/assets/vendor.5fc36a9d.js ================================================ function A(A,t){const e=Object.create(null),n=A.split(",");for(let r=0;r!!e[A.toLowerCase()]:A=>!!e[A]}const t=A("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),e=A("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function n(A){if(E(A)){const t={};for(let e=0;e{if(A){const e=A.split(o);e.length>1&&(t[e[0].trim()]=e[1].trim())}})),t}function s(A){let t="";if(H(A))t=A;else if(E(A))for(let e=0;ea(A,t)))}const c=A=>null==A?"":N(A)?JSON.stringify(A,l,2):String(A),l=(A,t)=>y(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((A,[t,e])=>(A[`${t} =>`]=e,A)),{})}:F(t)?{[`Set(${t.size})`]:[...t.values()]}:!N(t)||E(t)||T(t)?t:String(t),f={},h=[],B=()=>{},p=()=>!1,g=/^on[^a-z]/,d=A=>g.test(A),w=A=>A.startsWith("onUpdate:"),Q=Object.assign,v=(A,t)=>{const e=A.indexOf(t);e>-1&&A.splice(e,1)},U=Object.prototype.hasOwnProperty,C=(A,t)=>U.call(A,t),E=Array.isArray,y=A=>"[object Map]"===O(A),F=A=>"[object Set]"===O(A),m=A=>A instanceof Date,_=A=>"function"==typeof A,H=A=>"string"==typeof A,b=A=>"symbol"==typeof A,N=A=>null!==A&&"object"==typeof A,K=A=>N(A)&&_(A.then)&&_(A.catch),I=Object.prototype.toString,O=A=>I.call(A),T=A=>"[object Object]"===O(A),x=A=>H(A)&&"NaN"!==A&&"-"!==A[0]&&""+parseInt(A,10)===A,S=A(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),R=A=>{const t=Object.create(null);return e=>t[e]||(t[e]=A(e))},L=/-(\w)/g,M=R((A=>A.replace(L,((A,t)=>t?t.toUpperCase():"")))),D=/\B([A-Z])/g,k=R((A=>A.replace(D,"-$1").toLowerCase())),P=R((A=>A.charAt(0).toUpperCase()+A.slice(1))),z=R((A=>A?`on${P(A)}`:"")),V=(A,t)=>A!==t&&(A==A||t==t),X=(A,t)=>{for(let e=0;e{Object.defineProperty(A,t,{configurable:!0,enumerable:!1,value:e})},G=A=>{const t=parseFloat(A);return isNaN(t)?A:t},j=new WeakMap,W=[];let Y;const q=Symbol(""),$=Symbol("");function Z(A,t=f){(function(A){return A&&!0===A._isEffect})(A)&&(A=A.raw);const e=function(A,t){const e=function(){if(!e.active)return t.scheduler?void 0:A();if(!W.includes(e)){eA(e);try{return rA.push(nA),nA=!0,W.push(e),Y=e,A()}finally{W.pop(),iA(),Y=W[W.length-1]}}};return e.id=tA++,e.allowRecurse=!!t.allowRecurse,e._isEffect=!0,e.active=!0,e.raw=A,e.deps=[],e.options=t,e}(A,t);return t.lazy||e(),e}function AA(A){A.active&&(eA(A),A.options.onStop&&A.options.onStop(),A.active=!1)}let tA=0;function eA(A){const{deps:t}=A;if(t.length){for(let e=0;e{A&&A.forEach((A=>{(A!==Y||A.allowRecurse)&&s.add(A)}))};if("clear"===t)i.forEach(a);else if("length"===e&&E(A))i.forEach(((A,t)=>{("length"===t||t>=n)&&a(A)}));else switch(void 0!==e&&a(i.get(e)),t){case"add":E(A)?x(e)&&a(i.get("length")):(a(i.get(q)),y(A)&&a(i.get($)));break;case"delete":E(A)||(a(i.get(q)),y(A)&&a(i.get($)));break;case"set":y(A)&&a(i.get(q))}s.forEach((A=>{A.options.scheduler?A.options.scheduler(A):A()}))}const uA=A("__proto__,__v_isRef,__isVue"),cA=new Set(Object.getOwnPropertyNames(Symbol).map((A=>Symbol[A])).filter(b)),lA=gA(),fA=gA(!1,!0),hA=gA(!0),BA=gA(!0,!0),pA={};function gA(A=!1,t=!1){return function(e,n,r){if("__v_isReactive"===n)return!A;if("__v_isReadonly"===n)return A;if("__v_raw"===n&&r===(A?t?JA:XA:t?VA:zA).get(e))return e;const o=E(e);if(!A&&o&&C(pA,n))return Reflect.get(pA,n,r);const i=Reflect.get(e,n,r);if(b(n)?cA.has(n):uA(n))return i;if(A||sA(e,0,n),t)return i;if(et(i)){return!o||!x(n)?i.value:i}return N(i)?A?WA(i):jA(i):i}}["includes","indexOf","lastIndexOf"].forEach((A=>{const t=Array.prototype[A];pA[A]=function(...A){const e=At(this);for(let t=0,r=this.length;t{const t=Array.prototype[A];pA[A]=function(...A){oA();const e=t.apply(this,A);return iA(),e}}));function dA(A=!1){return function(t,e,n,r){let o=t[e];if(!A&&(n=At(n),o=At(o),!E(t)&&et(o)&&!et(n)))return o.value=n,!0;const i=E(t)&&x(e)?Number(e)!0,deleteProperty:(A,t)=>!0},vA=Q({},wA,{get:fA,set:dA(!0)});Q({},QA,{get:BA});const UA=A=>N(A)?jA(A):A,CA=A=>N(A)?WA(A):A,EA=A=>A,yA=A=>Reflect.getPrototypeOf(A);function FA(A,t,e=!1,n=!1){const r=At(A=A.__v_raw),o=At(t);t!==o&&!e&&sA(r,0,t),!e&&sA(r,0,o);const{has:i}=yA(r),s=n?EA:e?CA:UA;return i.call(r,t)?s(A.get(t)):i.call(r,o)?s(A.get(o)):void 0}function mA(A,t=!1){const e=this.__v_raw,n=At(e),r=At(A);return A!==r&&!t&&sA(n,0,A),!t&&sA(n,0,r),A===r?e.has(A):e.has(A)||e.has(r)}function _A(A,t=!1){return A=A.__v_raw,!t&&sA(At(A),0,q),Reflect.get(A,"size",A)}function HA(A){A=At(A);const t=At(this);return yA(t).has.call(t,A)||(t.add(A),aA(t,"add",A,A)),this}function bA(A,t){t=At(t);const e=At(this),{has:n,get:r}=yA(e);let o=n.call(e,A);o||(A=At(A),o=n.call(e,A));const i=r.call(e,A);return e.set(A,t),o?V(t,i)&&aA(e,"set",A,t):aA(e,"add",A,t),this}function NA(A){const t=At(this),{has:e,get:n}=yA(t);let r=e.call(t,A);r||(A=At(A),r=e.call(t,A)),n&&n.call(t,A);const o=t.delete(A);return r&&aA(t,"delete",A,void 0),o}function KA(){const A=At(this),t=0!==A.size,e=A.clear();return t&&aA(A,"clear",void 0,void 0),e}function IA(A,t){return function(e,n){const r=this,o=r.__v_raw,i=At(o),s=t?EA:A?CA:UA;return!A&&sA(i,0,q),o.forEach(((A,t)=>e.call(n,s(A),s(t),r)))}}function OA(A,t,e){return function(...n){const r=this.__v_raw,o=At(r),i=y(o),s="entries"===A||A===Symbol.iterator&&i,a="keys"===A&&i,u=r[A](...n),c=e?EA:t?CA:UA;return!t&&sA(o,0,a?$:q),{next(){const{value:A,done:t}=u.next();return t?{value:A,done:t}:{value:s?[c(A[0]),c(A[1])]:c(A),done:t}},[Symbol.iterator](){return this}}}}function TA(A){return function(...t){return"delete"!==A&&this}}const xA={get(A){return FA(this,A)},get size(){return _A(this)},has:mA,add:HA,set:bA,delete:NA,clear:KA,forEach:IA(!1,!1)},SA={get(A){return FA(this,A,!1,!0)},get size(){return _A(this)},has:mA,add:HA,set:bA,delete:NA,clear:KA,forEach:IA(!1,!0)},RA={get(A){return FA(this,A,!0)},get size(){return _A(this,!0)},has(A){return mA.call(this,A,!0)},add:TA("add"),set:TA("set"),delete:TA("delete"),clear:TA("clear"),forEach:IA(!0,!1)},LA={get(A){return FA(this,A,!0,!0)},get size(){return _A(this,!0)},has(A){return mA.call(this,A,!0)},add:TA("add"),set:TA("set"),delete:TA("delete"),clear:TA("clear"),forEach:IA(!0,!0)};function MA(A,t){const e=t?A?LA:SA:A?RA:xA;return(t,n,r)=>"__v_isReactive"===n?!A:"__v_isReadonly"===n?A:"__v_raw"===n?t:Reflect.get(C(e,n)&&n in t?e:t,n,r)}["keys","values","entries",Symbol.iterator].forEach((A=>{xA[A]=OA(A,!1,!1),RA[A]=OA(A,!0,!1),SA[A]=OA(A,!1,!0),LA[A]=OA(A,!0,!0)}));const DA={get:MA(!1,!1)},kA={get:MA(!1,!0)},PA={get:MA(!0,!1)},zA=new WeakMap,VA=new WeakMap,XA=new WeakMap,JA=new WeakMap;function GA(A){return A.__v_skip||!Object.isExtensible(A)?0:function(A){switch(A){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((A=>O(A).slice(8,-1))(A))}function jA(A){return A&&A.__v_isReadonly?A:YA(A,!1,wA,DA,zA)}function WA(A){return YA(A,!0,QA,PA,XA)}function YA(A,t,e,n,r){if(!N(A))return A;if(A.__v_raw&&(!t||!A.__v_isReactive))return A;const o=r.get(A);if(o)return o;const i=GA(A);if(0===i)return A;const s=new Proxy(A,2===i?n:e);return r.set(A,s),s}function qA(A){return $A(A)?qA(A.__v_raw):!(!A||!A.__v_isReactive)}function $A(A){return!(!A||!A.__v_isReadonly)}function ZA(A){return qA(A)||$A(A)}function At(A){return A&&At(A.__v_raw)||A}const tt=A=>N(A)?jA(A):A;function et(A){return Boolean(A&&!0===A.__v_isRef)}function nt(A){return function(A,t=!1){if(et(A))return A;return new rt(A,t)}(A)}class rt{constructor(A,t=!1){this._rawValue=A,this._shallow=t,this.__v_isRef=!0,this._value=t?A:tt(A)}get value(){return sA(At(this),0,"value"),this._value}set value(A){V(At(A),this._rawValue)&&(this._rawValue=A,this._value=this._shallow?A:tt(A),aA(At(this),"set","value",A))}}const ot={get:(A,t,e)=>{return et(n=Reflect.get(A,t,e))?n.value:n;var n},set:(A,t,e,n)=>{const r=A[t];return et(r)&&!et(e)?(r.value=e,!0):Reflect.set(A,t,e,n)}};function it(A){return qA(A)?A:new Proxy(A,ot)}class st{constructor(A,t){this._object=A,this._key=t,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(A){this._object[this._key]=A}}class at{constructor(A,t,e){this._setter=t,this._dirty=!0,this.__v_isRef=!0,this.effect=Z(A,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,aA(At(this),"set","value"))}}),this.__v_isReadonly=e}get value(){const A=At(this);return A._dirty&&(A._value=this.effect(),A._dirty=!1),sA(A,0,"value"),A._value}set value(A){this._setter(A)}}function ut(A,t,e,n){let r;try{r=n?A(...n):A()}catch(o){lt(o,t,e)}return r}function ct(A,t,e,n){if(_(A)){const r=ut(A,t,e,n);return r&&K(r)&&r.catch((A=>{lt(A,t,e)})),r}const r=[];for(let o=0;o>>1;Kt(Bt[A])-1?Bt.splice(t,0,A):Bt.push(A),_t()}}function _t(){ft||ht||(ht=!0,Et=Ct.then(It))}function Ht(A,t,e,n){E(A)?e.push(...A):t&&t.includes(A,A.allowRecurse?n+1:n)||e.push(A),_t()}function bt(A,t=null){if(gt.length){for(yt=t,dt=[...new Set(gt)],gt.length=0,wt=0;wtKt(A)-Kt(t))),Ut=0;Utnull==A.id?1/0:A.id;function It(A){ht=!1,ft=!0,bt(A),Bt.sort(((A,t)=>Kt(A)-Kt(t)));try{for(pt=0;ptA.trim())):t&&(r=e.map(G))}let s,a=n[s=z(t)]||n[s=z(M(t))];!a&&o&&(a=n[s=z(k(t))]),a&&ct(a,A,6,r);const u=n[s+"Once"];if(u){if(A.emitted){if(A.emitted[s])return}else(A.emitted={})[s]=!0;ct(u,A,6,r)}}function Tt(A,t,e=!1){if(!t.deopt&&void 0!==A.__emits)return A.__emits;const n=A.emits;let r={},o=!1;if(!_(A)){const n=A=>{const e=Tt(A,t,!0);e&&(o=!0,Q(r,e))};!e&&t.mixins.length&&t.mixins.forEach(n),A.extends&&n(A.extends),A.mixins&&A.mixins.forEach(n)}return n||o?(E(n)?n.forEach((A=>r[A]=null)):Q(r,n),A.__emits=r):A.__emits=null}function xt(A,t){return!(!A||!d(t))&&(t=t.slice(2).replace(/Once$/,""),C(A,t[0].toLowerCase()+t.slice(1))||C(A,k(t))||C(A,t))}let St=0;const Rt=A=>St+=A;let Lt=null,Mt=null;function Dt(A){const t=Lt;return Lt=A,Mt=A&&A.type.__scopeId||null,t}function kt(A){const{type:t,vnode:e,proxy:n,withProxy:r,props:o,propsOptions:[i],slots:s,attrs:a,emit:u,render:c,renderCache:l,data:f,setupState:h,ctx:B}=A;let p;const g=Dt(A);try{let A;if(4&e.shapeFlag){const t=r||n;p=rn(c.call(t,t,l,o,h,f,B)),A=a}else{const e=t;0,p=rn(e.length>1?e(o,{attrs:a,slots:s,emit:u}):e(o,null)),A=t.props?a:zt(a)}let g=p;if(!1!==t.inheritAttrs&&A){const t=Object.keys(A),{shapeFlag:e}=g;t.length&&(1&e||6&e)&&(i&&t.some(w)&&(A=Vt(A,i)),g=tn(g,A))}e.dirs&&(g.dirs=g.dirs?g.dirs.concat(e.dirs):e.dirs),e.transition&&(g.transition=e.transition),p=g}catch(d){Ve.length=0,lt(d,A,1),p=An(Pe)}return Dt(g),p}function Pt(A){let t;for(let e=0;e{let t;for(const e in A)("class"===e||"style"===e||d(e))&&((t||(t={}))[e]=A[e]);return t},Vt=(A,t)=>{const e={};for(const n in A)w(n)&&n.slice(9)in t||(e[n]=A[n]);return e};function Xt(A,t,e){const n=Object.keys(t);if(n.length!==Object.keys(A).length)return!0;for(let r=0;r{i=!0;const[e,n]=Yt(A,t,!0);Q(r,e),n&&o.push(...n)};!e&&t.mixins.length&&t.mixins.forEach(n),A.extends&&n(A.extends),A.mixins&&A.mixins.forEach(n)}if(!n&&!i)return A.__props=h;if(E(n))for(let s=0;s-1,e[1]=n<0||t-1||C(e,"default"))&&o.push(A)}}}return A.__props=[r,o]}function qt(A){return"$"!==A[0]}function $t(A){const t=A&&A.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Zt(A,t){return $t(A)===$t(t)}function Ae(A,t){return E(t)?t.findIndex((t=>Zt(t,A))):_(t)&&Zt(t,A)?0:-1}function te(A,t,e=En,n=!1){if(e){const r=e[A]||(e[A]=[]),o=t.__weh||(t.__weh=(...n)=>{if(e.isUnmounted)return;oA(),yn(e);const r=ct(t,e,A,n);return yn(null),iA(),r});return n?r.unshift(o):r.push(o),o}}const ee=A=>(t,e=En)=>!mn&&te(A,t,e),ne=ee("bm"),re=ee("m"),oe=ee("bu"),ie=ee("u"),se=ee("bum"),ae=ee("um"),ue=ee("rtg"),ce=ee("rtc");function le(A,t){return Be(A,null,t)}const fe={};function he(A,t,e){return Be(A,t,e)}function Be(A,t,{immediate:e,deep:n,flush:r,onTrack:o,onTrigger:i}=f,s=En){let a,u,c=!1;if(et(A)?(a=()=>A.value,c=!!A._shallow):qA(A)?(a=()=>A,n=!0):a=E(A)?()=>A.map((A=>et(A)?A.value:qA(A)?ge(A):_(A)?ut(A,s,2,[s&&s.proxy]):void 0)):_(A)?t?()=>ut(A,s,2,[s&&s.proxy]):()=>{if(!s||!s.isUnmounted)return u&&u(),ct(A,s,3,[l])}:B,t&&n){const A=a;a=()=>ge(A())}let l=A=>{u=d.options.onStop=()=>{ut(A,s,4)}},h=E(A)?[]:fe;const p=()=>{if(d.active)if(t){const A=d();(n||c||V(A,h))&&(u&&u(),ct(t,s,3,[A,h===fe?void 0:h,l]),h=A)}else d()};let g;p.allowRecurse=!!t,g="sync"===r?p:"post"===r?()=>Ie(p,s&&s.suspense):()=>{!s||s.isMounted?function(A){Ht(A,dt,gt,wt)}(p):p()};const d=Z(a,{lazy:!0,onTrack:o,onTrigger:i,scheduler:g});return bn(d,s),t?e?p():h=d():"post"===r?Ie(d,s&&s.suspense):d(),()=>{AA(d),s&&v(s.effects,d)}}function pe(A,t,e){const n=this.proxy;return Be(H(A)?()=>n[A]:A.bind(n),t.bind(n),e,this)}function ge(A,t=new Set){if(!N(A)||t.has(A))return A;if(t.add(A),et(A))ge(A.value,t);else if(E(A))for(let e=0;e{ge(A,t)}));else for(const e in A)ge(A[e],t);return A}const de=A=>A.type.__isKeepAlive;function we(A,t,e=En){const n=A.__wdc||(A.__wdc=()=>{let t=e;for(;t;){if(t.isDeactivated)return;t=t.parent}A()});if(te(t,n,e),e){let A=e.parent;for(;A&&A.parent;)de(A.parent.vnode)&&Qe(n,t,e,A),A=A.parent}}function Qe(A,t,e,n){const r=te(t,A,n,!0);ae((()=>{v(n[t],r)}),e)}const ve=A=>"_"===A[0]||"$stable"===A,Ue=A=>E(A)?A.map(rn):[rn(A)],Ce=(A,t,e)=>function(A,t=Lt){if(!t)return A;const e=(...e)=>{St||Je(!0);const n=Dt(t),r=A(...e);return Dt(n),St||Ge(),r};return e._c=!0,e}((A=>Ue(t(A))),e),Ee=(A,t)=>{const e=A._ctx;for(const n in A){if(ve(n))continue;const r=A[n];if(_(r))t[n]=Ce(0,r,e);else if(null!=r){const A=Ue(r);t[n]=()=>A}}},ye=(A,t)=>{const e=Ue(t);A.slots.default=()=>e};function Fe(A,t){if(null===Lt)return A;const e=Lt.proxy,n=A.dirs||(A.dirs=[]);for(let r=0;r(o.has(A)||(A&&_(A.install)?(o.add(A),A.install(s,...t)):_(A)&&(o.add(A),A(s,...t))),s),mixin:A=>(r.mixins.includes(A)||(r.mixins.push(A),(A.props||A.emits)&&(r.deopt=!0)),s),component:(A,t)=>t?(r.components[A]=t,s):r.components[A],directive:(A,t)=>t?(r.directives[A]=t,s):r.directives[A],mount(o,a,u){if(!i){const c=An(e,n);return c.appContext=r,a&&t?t(c,o):A(c,o,u),i=!0,s._container=o,o.__vue_app__=s,c.component.proxy}},unmount(){i&&(A(null,s._container),delete s._container.__vue_app__)},provide:(A,t)=>(r.provides[A]=t,s)};return s}}function Ne(A){return _(A)?{setup:A,name:A.name}:A}const Ke={scheduler:mt,allowRecurse:!0},Ie=function(A,t){t&&t.pendingBranch?E(A)?t.effects.push(...A):t.effects.push(A):Ht(A,vt,Qt,Ut)},Oe=(A,t,e,n)=>{if(E(A))return void A.forEach(((A,r)=>Oe(A,t&&(E(t)?t[r]:t),e,n)));let r;if(n){if((A=>!!A.type.__asyncLoader)(n))return;r=4&n.shapeFlag?n.component.exposed||n.component.proxy:n.el}else r=null;const{i:o,r:i}=A,s=t&&t.r,a=o.refs===f?o.refs={}:o.refs,u=o.setupState;if(null!=s&&s!==i&&(H(s)?(a[s]=null,C(u,s)&&(u[s]=null)):et(s)&&(s.value=null)),H(i)){const A=()=>{a[i]=r,C(u,i)&&(u[i]=r)};r?(A.id=-1,Ie(A,e)):A()}else if(et(i)){const A=()=>{i.value=r};r?(A.id=-1,Ie(A,e)):A()}else _(i)&&ut(i,o,12,[r,a])};function Te(A){return function(A,t){const{insert:e,remove:n,patchProp:r,forcePatchProp:o,createElement:i,createText:s,createComment:a,setText:u,setElementText:c,parentNode:l,nextSibling:p,setScopeId:g=B,cloneNode:d,insertStaticContent:w}=A,v=(A,t,e,n=null,r=null,o=null,i=!1,s=null,a=!1)=>{A&&!Ye(A,t)&&(n=nA(A),Y(A,r,o,!0),A=null),-2===t.patchFlag&&(a=!1,t.dynamicChildren=null);const{type:u,ref:c,shapeFlag:l}=t;switch(u){case ke:U(A,t,e,n);break;case Pe:E(A,t,e,n);break;case ze:null==A&&y(t,e,n,i);break;case De:x(A,t,e,n,r,o,i,s,a);break;default:1&l?_(A,t,e,n,r,o,i,s,a):6&l?R(A,t,e,n,r,o,i,s,a):(64&l||128&l)&&u.process(A,t,e,n,r,o,i,s,a,sA)}null!=c&&r&&Oe(c,A&&A.ref,o,t)},U=(A,t,n,r)=>{if(null==A)e(t.el=s(t.children),n,r);else{const e=t.el=A.el;t.children!==A.children&&u(e,t.children)}},E=(A,t,n,r)=>{null==A?e(t.el=a(t.children||""),n,r):t.el=A.el},y=(A,t,e,n)=>{[A.el,A.anchor]=w(A.children,t,e,n)},F=({el:A,anchor:t},n,r)=>{let o;for(;A&&A!==t;)o=p(A),e(A,n,r),A=o;e(t,n,r)},m=({el:A,anchor:t})=>{let e;for(;A&&A!==t;)e=p(A),n(A),A=e;n(t)},_=(A,t,e,n,r,o,i,s,a)=>{i=i||"svg"===t.type,null==A?H(t,e,n,r,o,i,s,a):I(A,t,r,o,i,s,a)},H=(A,t,n,o,s,a,u,l)=>{let f,h;const{type:B,props:p,shapeFlag:g,transition:w,patchFlag:Q,dirs:v}=A;if(A.el&&void 0!==d&&-1===Q)f=A.el=d(A.el);else{if(f=A.el=i(A.type,a,p&&p.is,p),8&g?c(f,A.children):16&g&&N(A.children,f,null,o,s,a&&"foreignObject"!==B,u,l||!!A.dynamicChildren),v&&me(A,null,o,"created"),p){for(const t in p)S(t)||r(f,t,null,p[t],a,A.children,o,s,eA);(h=p.onVnodeBeforeMount)&&xe(h,o,A)}b(f,A,A.scopeId,u,o)}v&&me(A,null,o,"beforeMount");const U=(!s||s&&!s.pendingBranch)&&w&&!w.persisted;U&&w.beforeEnter(f),e(f,t,n),((h=p&&p.onVnodeMounted)||U||v)&&Ie((()=>{h&&xe(h,o,A),U&&w.enter(f),v&&me(A,null,o,"mounted")}),s)},b=(A,t,e,n,r)=>{if(e&&g(A,e),n)for(let o=0;o{for(let u=a;u{const u=t.el=A.el;let{patchFlag:l,dynamicChildren:h,dirs:B}=t;l|=16&A.patchFlag;const p=A.props||f,g=t.props||f;let d;if((d=g.onVnodeBeforeUpdate)&&xe(d,e,t,A),B&&me(t,A,e,"beforeUpdate"),l>0){if(16&l)T(u,t,p,g,e,n,i);else if(2&l&&p.class!==g.class&&r(u,"class",null,g.class,i),4&l&&r(u,"style",p.style,g.style,i),8&l){const s=t.dynamicProps;for(let t=0;t{d&&xe(d,e,t,A),B&&me(t,A,e,"updated")}),n)},O=(A,t,e,n,r,o,i)=>{for(let s=0;s{if(e!==n){for(const u in n){if(S(u))continue;const c=n[u],l=e[u];(c!==l||o&&o(A,u))&&r(A,u,l,c,a,t.children,i,s,eA)}if(e!==f)for(const o in e)S(o)||o in n||r(A,o,e[o],null,a,t.children,i,s,eA)}},x=(A,t,n,r,o,i,a,u,c)=>{const l=t.el=A?A.el:s(""),f=t.anchor=A?A.anchor:s("");let{patchFlag:h,dynamicChildren:B,slotScopeIds:p}=t;h>0&&(c=!0),p&&(u=u?u.concat(p):p),null==A?(e(l,n,r),e(f,n,r),N(t.children,n,f,o,i,a,u,c)):h>0&&64&h&&B&&A.dynamicChildren?(O(A.dynamicChildren,B,n,o,i,a,u),(null!=t.key||o&&t===o.subTree)&&Se(A,t,!0)):V(A,t,n,f,o,i,a,u,c)},R=(A,t,e,n,r,o,i,s,a)=>{t.slotScopeIds=s,null==A?512&t.shapeFlag?r.ctx.activate(t,e,n,i,a):L(t,e,n,r,o,i,a):D(A,t,a)},L=(A,t,e,n,r,o,i)=>{const s=A.component=function(A,t,e){const n=A.type,r=(t?t.appContext:A.appContext)||Un,o={uid:Cn++,vnode:A,type:n,parent:t,appContext:r,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,withProxy:null,effects:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Yt(n,r),emitsOptions:Tt(n,r),emit:null,emitted:null,propsDefaults:f,ctx:f,data:f,props:f,attrs:f,slots:f,refs:f,setupState:f,setupContext:null,suspense:e,suspenseId:e?e.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};return o.ctx={_:o},o.root=t?t.root:o,o.emit=Ot.bind(null,o),o}(A,n,r);if(de(A)&&(s.ctx.renderer=sA),function(A,t=!1){mn=t;const{props:e,children:n}=A.vnode,r=Fn(A);Gt(A,e,r,t),((A,t)=>{if(32&A.vnode.shapeFlag){const e=t._;e?(A.slots=t,J(t,"_",e)):Ee(t,A.slots={})}else A.slots={},t&&ye(A,t);J(A.slots,qe,1)})(A,n);const o=r?function(A,t){const e=A.type;A.accessCache=Object.create(null),A.proxy=new Proxy(A.ctx,Qn);const{setup:n}=e;if(n){const e=A.setupContext=n.length>1?function(A){const t=t=>{A.exposed=it(t)};return{attrs:A.attrs,slots:A.slots,emit:A.emit,expose:t}}(A):null;En=A,oA();const r=ut(n,A,0,[A.props,e]);if(iA(),En=null,K(r)){if(t)return r.then((t=>{_n(A,t)})).catch((t=>{lt(t,A,0)}));A.asyncDep=r}else _n(A,r)}else Hn(A)}(A,t):void 0;mn=!1}(s),s.asyncDep){if(r&&r.registerDep(s,P),!A.el){const A=s.subTree=An(Pe);E(null,A,t,e)}}else P(s,A,t,e,r,o,i)},D=(A,t,e)=>{const n=t.component=A.component;if(function(A,t,e){const{props:n,children:r,component:o}=A,{props:i,children:s,patchFlag:a}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(!(e&&a>=0))return!(!r&&!s||s&&s.$stable)||n!==i&&(n?!i||Xt(n,i,u):!!i);if(1024&a)return!0;if(16&a)return n?Xt(n,i,u):!!i;if(8&a){const A=t.dynamicProps;for(let t=0;tpt&&Bt.splice(t,1)}(n.update),n.update()}else t.component=A.component,t.el=A.el,n.vnode=t},P=(A,t,e,n,r,o,i)=>{A.update=Z((function(){if(A.isMounted){let t,{next:e,bu:n,u:s,parent:a,vnode:u}=A,c=e;e?(e.el=u.el,z(A,e,i)):e=u,n&&X(n),(t=e.props&&e.props.onVnodeBeforeUpdate)&&xe(t,a,e,u);const f=kt(A),h=A.subTree;A.subTree=f,v(h,f,l(h.el),nA(h),A,r,o),e.el=f.el,null===c&&function({vnode:A,parent:t},e){for(;t&&t.subTree===A;)(A=t.vnode).el=e,t=t.parent}(A,f.el),s&&Ie(s,r),(t=e.props&&e.props.onVnodeUpdated)&&Ie((()=>{xe(t,a,e,u)}),r)}else{let i;const{el:s,props:a}=t,{bm:u,m:c,parent:l}=A;u&&X(u),(i=a&&a.onVnodeBeforeMount)&&xe(i,l,t);const f=A.subTree=kt(A);if(s&&cA?cA(t.el,f,A,r,null):(v(null,f,e,n,A,r,o),t.el=f.el),c&&Ie(c,r),i=a&&a.onVnodeMounted){const A=t;Ie((()=>{xe(i,l,A)}),r)}const{a:h}=A;h&&256&t.shapeFlag&&Ie(h,r),A.isMounted=!0,t=e=n=null}}),Ke)},z=(A,t,e)=>{t.component=A;const n=A.vnode.props;A.vnode=t,A.next=null,function(A,t,e,n){const{props:r,attrs:o,vnode:{patchFlag:i}}=A,s=At(r),[a]=A.propsOptions;if(!(n||i>0)||16&i){let n;jt(A,t,r,o);for(const o in s)t&&(C(t,o)||(n=k(o))!==o&&C(t,n))||(a?!e||void 0===e[o]&&void 0===e[n]||(r[o]=Wt(a,t||f,o,void 0,A)):delete r[o]);if(o!==s)for(const A in o)t&&C(t,A)||delete o[A]}else if(8&i){const e=A.vnode.dynamicProps;for(let n=0;n{const{vnode:n,slots:r}=A;let o=!0,i=f;if(32&n.shapeFlag){const A=t._;A?e&&1===A?o=!1:(Q(r,t),e||1!==A||delete r._):(o=!t.$stable,Ee(t,r)),i=t}else t&&(ye(A,t),i={default:1});if(o)for(const s in r)ve(s)||s in i||delete r[s]})(A,t.children,e),oA(),bt(void 0,A.update),iA()},V=(A,t,e,n,r,o,i,s,a=!1)=>{const u=A&&A.children,l=A?A.shapeFlag:0,f=t.children,{patchFlag:h,shapeFlag:B}=t;if(h>0){if(128&h)return void j(u,f,e,n,r,o,i,s,a);if(256&h)return void G(u,f,e,n,r,o,i,s,a)}8&B?(16&l&&eA(u,r,o),f!==u&&c(e,f)):16&l?16&B?j(u,f,e,n,r,o,i,s,a):eA(u,r,o,!0):(8&l&&c(e,""),16&B&&N(f,e,n,r,o,i,s,a))},G=(A,t,e,n,r,o,i,s,a)=>{t=t||h;const u=(A=A||h).length,c=t.length,l=Math.min(u,c);let f;for(f=0;fc?eA(A,r,o,!0,!1,l):N(t,e,n,r,o,i,s,a,l)},j=(A,t,e,n,r,o,i,s,a)=>{let u=0;const c=t.length;let l=A.length-1,f=c-1;for(;u<=l&&u<=f;){const n=A[u],c=t[u]=a?on(t[u]):rn(t[u]);if(!Ye(n,c))break;v(n,c,e,null,r,o,i,s,a),u++}for(;u<=l&&u<=f;){const n=A[l],u=t[f]=a?on(t[f]):rn(t[f]);if(!Ye(n,u))break;v(n,u,e,null,r,o,i,s,a),l--,f--}if(u>l){if(u<=f){const A=f+1,l=Af)for(;u<=l;)Y(A[u],r,o,!0),u++;else{const B=u,p=u,g=new Map;for(u=p;u<=f;u++){const A=t[u]=a?on(t[u]):rn(t[u]);null!=A.key&&g.set(A.key,u)}let d,w=0;const Q=f-p+1;let U=!1,C=0;const E=new Array(Q);for(u=0;u=Q){Y(n,r,o,!0);continue}let c;if(null!=n.key)c=g.get(n.key);else for(d=p;d<=f;d++)if(0===E[d-p]&&Ye(n,t[d])){c=d;break}void 0===c?Y(n,r,o,!0):(E[c-p]=u+1,c>=C?C=c:U=!0,v(n,t[c],e,null,r,o,i,s,a),w++)}const y=U?function(A){const t=A.slice(),e=[0];let n,r,o,i,s;const a=A.length;for(n=0;n0&&(t[n]=e[o-1]),e[o]=n)}}o=e.length,i=e[o-1];for(;o-- >0;)e[o]=i,i=t[i];return e}(E):h;for(d=y.length-1,u=Q-1;u>=0;u--){const A=p+u,l=t[A],f=A+1{const{el:i,type:s,transition:a,children:u,shapeFlag:c}=A;if(6&c)return void W(A.component.subTree,t,n,r);if(128&c)return void A.suspense.move(t,n,r);if(64&c)return void s.move(A,t,n,sA);if(s===De){e(i,t,n);for(let A=0;Aa.enter(i)),o);else{const{leave:A,delayLeave:r,afterLeave:o}=a,s=()=>e(i,t,n),u=()=>{A(i,(()=>{s(),o&&o()}))};r?r(i,s,u):u()}else e(i,t,n)},Y=(A,t,e,n=!1,r=!1)=>{const{type:o,props:i,ref:s,children:a,dynamicChildren:u,shapeFlag:c,patchFlag:l,dirs:f}=A;if(null!=s&&Oe(s,null,e,null),256&c)return void t.ctx.deactivate(A);const h=1&c&&f;let B;if((B=i&&i.onVnodeBeforeUnmount)&&xe(B,t,A),6&c)tA(A.component,e,n);else{if(128&c)return void A.suspense.unmount(e,n);h&&me(A,null,t,"beforeUnmount"),64&c?A.type.remove(A,t,e,r,sA,n):u&&(o!==De||l>0&&64&l)?eA(u,t,e,!1,!0):(o===De&&(128&l||256&l)||!r&&16&c)&&eA(a,t,e),n&&q(A)}((B=i&&i.onVnodeUnmounted)||h)&&Ie((()=>{B&&xe(B,t,A),h&&me(A,null,t,"unmounted")}),e)},q=A=>{const{type:t,el:e,anchor:r,transition:o}=A;if(t===De)return void $(e,r);if(t===ze)return void m(A);const i=()=>{n(e),o&&!o.persisted&&o.afterLeave&&o.afterLeave()};if(1&A.shapeFlag&&o&&!o.persisted){const{leave:t,delayLeave:n}=o,r=()=>t(e,i);n?n(A.el,i,r):r()}else i()},$=(A,t)=>{let e;for(;A!==t;)e=p(A),n(A),A=e;n(t)},tA=(A,t,e)=>{const{bum:n,effects:r,update:o,subTree:i,um:s}=A;if(n&&X(n),r)for(let a=0;a{A.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&A.asyncDep&&!A.asyncResolved&&A.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},eA=(A,t,e,n=!1,r=!1,o=0)=>{for(let i=o;i6&A.shapeFlag?nA(A.component.subTree):128&A.shapeFlag?A.suspense.next():p(A.anchor||A.el),rA=(A,t,e)=>{null==A?t._vnode&&Y(t._vnode,null,null,!0):v(t._vnode||null,A,t,null,null,null,e),Nt(),t._vnode=A},sA={p:v,um:Y,m:W,r:q,mt:L,mc:N,pc:V,pbc:O,n:nA,o:A};let uA,cA;t&&([uA,cA]=t(sA));return{render:rA,hydrate:uA,createApp:be(rA,uA)}}(A)}function xe(A,t,e,n=null){ct(A,t,7,[e,n])}function Se(A,t,e=!1){const n=A.children,r=t.children;if(E(n)&&E(r))for(let o=0;onull!=A?A:null,Ze=({ref:A})=>null!=A?H(A)||et(A)||_(A)?{i:Lt,r:A}:A:null,An=function(A,t=null,e=null,r=0,o=null,i=!1){A&&A!==Le||(A=Pe);if(We(A)){const n=tn(A,t,!0);return e&&sn(n,e),n}a=A,_(a)&&"__vccOpts"in a&&(A=A.__vccOpts);var a;if(t){(ZA(t)||qe in t)&&(t=Q({},t));let{class:A,style:e}=t;A&&!H(A)&&(t.class=s(A)),N(e)&&(ZA(e)&&!E(e)&&(e=Q({},e)),t.style=n(e))}const u=H(A)?1:(A=>A.__isSuspense)(A)?128:(A=>A.__isTeleport)(A)?64:N(A)?4:_(A)?2:0,c={__v_isVNode:!0,__v_skip:!0,type:A,props:t,key:t&&$e(t),ref:t&&Ze(t),scopeId:Mt,slotScopeIds:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:u,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null};if(sn(c,e),128&u){const{content:A,fallback:t}=function(A){const{shapeFlag:t,children:e}=A;let n,r;return 32&t?(n=Jt(e.default),r=Jt(e.fallback)):(n=Jt(e),r=rn(null)),{content:n,fallback:r}}(c);c.ssContent=A,c.ssFallback=t}!i&&Xe&&(r>0||6&u)&&32!==r&&Xe.push(c);return c};function tn(A,t,e=!1){const{props:r,ref:o,patchFlag:i,children:a}=A,u=t?function(...A){const t=Q({},A[0]);for(let e=1;e1)return e&&_(t)?t():t}}let un=!0;function cn(A,t,e=[],n=[],r=[],o=!1){const{mixins:i,extends:s,data:a,computed:u,methods:c,watch:l,provide:h,inject:p,components:g,directives:d,beforeMount:w,mounted:v,beforeUpdate:U,updated:C,activated:y,deactivated:F,beforeDestroy:m,beforeUnmount:H,destroyed:b,unmounted:K,render:I,renderTracked:O,renderTriggered:T,errorCaptured:x,expose:S}=t,R=A.proxy,L=A.ctx,M=A.appContext.mixins;if(o&&I&&A.render===B&&(A.render=I),o||(un=!1,ln("beforeCreate","bc",t,A,M),un=!0,hn(A,M,e,n,r)),s&&cn(A,s,e,n,r,!0),i&&hn(A,i,e,n,r),p)if(E(p))for(let f=0;fBn(A,t,R))),a&&Bn(A,a,R)),u)for(const f in u){const A=u[f],t=Kn({get:_(A)?A.bind(R,R):_(A.get)?A.get.bind(R,R):B,set:!_(A)&&_(A.set)?A.set.bind(R):B});Object.defineProperty(L,f,{enumerable:!0,configurable:!0,get:()=>t.value,set:A=>t.value=A})}var D;if(l&&n.push(l),!o&&n.length&&n.forEach((A=>{for(const t in A)pn(A[t],L,R,t)})),h&&r.push(h),!o&&r.length&&r.forEach((A=>{const t=_(A)?A.call(R):A;Reflect.ownKeys(t).forEach((A=>{!function(A,t){if(En){let e=En.provides;const n=En.parent&&En.parent.provides;n===e&&(e=En.provides=Object.create(n)),e[A]=t}}(A,t[A])}))})),o&&(g&&Q(A.components||(A.components=Q({},A.type.components)),g),d&&Q(A.directives||(A.directives=Q({},A.type.directives)),d)),o||ln("created","c",t,A,M),w&&ne(w.bind(R)),v&&re(v.bind(R)),U&&oe(U.bind(R)),C&&ie(C.bind(R)),y&&we(y.bind(R),"a",D),F&&function(A,t){we(A,"da",t)}(F.bind(R)),x&&((A,t=En)=>{te("ec",A,t)})(x.bind(R)),O&&ce(O.bind(R)),T&&ue(T.bind(R)),H&&se(H.bind(R)),K&&ae(K.bind(R)),E(S)&&!o)if(S.length){const t=A.exposed||(A.exposed=it({}));S.forEach((A=>{t[A]=function(A,t){return et(A[t])?A[t]:new st(A,t)}(R,A)}))}else A.exposed||(A.exposed=f)}function ln(A,t,e,n,r){for(let o=0;o{let t=A;for(let A=0;Ae[n];if(H(A)){const e=t[A];_(e)&&he(r,e)}else if(_(A))he(r,A.bind(e));else if(N(A))if(E(A))A.forEach((A=>pn(A,t,e,n)));else{const n=_(A.handler)?A.handler.bind(e):t[A.handler];_(n)&&he(r,n,A)}}function gn(A,t,e){const n=e.appContext.config.optionMergeStrategies,{mixins:r,extends:o}=t;o&&gn(A,o,e),r&&r.forEach((t=>gn(A,t,e)));for(const i in t)n&&C(n,i)?A[i]=n[i](A[i],t[i],e.proxy,i):A[i]=t[i]}const dn=A=>A?Fn(A)?A.exposed?A.exposed:A.proxy:dn(A.parent):null,wn=Q(Object.create(null),{$:A=>A,$el:A=>A.vnode.el,$data:A=>A.data,$props:A=>A.props,$attrs:A=>A.attrs,$slots:A=>A.slots,$refs:A=>A.refs,$parent:A=>dn(A.parent),$root:A=>dn(A.root),$emit:A=>A.emit,$options:A=>function(A){const t=A.type,{__merged:e,mixins:n,extends:r}=t;if(e)return e;const o=A.appContext.mixins;if(!o.length&&!n&&!r)return t;const i={};return o.forEach((t=>gn(i,t,A))),gn(i,t,A),t.__merged=i}(A),$forceUpdate:A=>()=>mt(A.update),$nextTick:A=>Ft.bind(A.proxy),$watch:A=>pe.bind(A)}),Qn={get({_:A},t){const{ctx:e,setupState:n,data:r,props:o,accessCache:i,type:s,appContext:a}=A;if("__v_skip"===t)return!0;let u;if("$"!==t[0]){const s=i[t];if(void 0!==s)switch(s){case 0:return n[t];case 1:return r[t];case 3:return e[t];case 2:return o[t]}else{if(n!==f&&C(n,t))return i[t]=0,n[t];if(r!==f&&C(r,t))return i[t]=1,r[t];if((u=A.propsOptions[0])&&C(u,t))return i[t]=2,o[t];if(e!==f&&C(e,t))return i[t]=3,e[t];un&&(i[t]=4)}}const c=wn[t];let l,h;return c?("$attrs"===t&&sA(A,0,t),c(A)):(l=s.__cssModules)&&(l=l[t])?l:e!==f&&C(e,t)?(i[t]=3,e[t]):(h=a.config.globalProperties,C(h,t)?h[t]:void 0)},set({_:A},t,e){const{data:n,setupState:r,ctx:o}=A;if(r!==f&&C(r,t))r[t]=e;else if(n!==f&&C(n,t))n[t]=e;else if(C(A.props,t))return!1;return("$"!==t[0]||!(t.slice(1)in A))&&(o[t]=e,!0)},has({_:{data:A,setupState:t,accessCache:e,ctx:n,appContext:r,propsOptions:o}},i){let s;return void 0!==e[i]||A!==f&&C(A,i)||t!==f&&C(t,i)||(s=o[0])&&C(s,i)||C(n,i)||C(wn,i)||C(r.config.globalProperties,i)}},vn=Q({},Qn,{get(A,t){if(t!==Symbol.unscopables)return Qn.get(A,t,A)},has:(A,e)=>"_"!==e[0]&&!t(e)}),Un=_e();let Cn=0;let En=null;const yn=A=>{En=A};function Fn(A){return 4&A.vnode.shapeFlag}let mn=!1;function _n(A,t,e){_(t)?A.render=t:N(t)&&(A.setupState=it(t)),Hn(A)}function Hn(A,t){const e=A.type;A.render||(A.render=e.render||B,A.render._rc&&(A.withProxy=new Proxy(A.ctx,vn))),En=A,oA(),cn(A,e),iA(),En=null}function bn(A,t=En){t&&(t.effects||(t.effects=[])).push(A)}function Nn(A){return _(A)&&A.displayName||A.name}function Kn(A){const t=function(A){let t,e;return _(A)?(t=A,e=B):(t=A.get,e=A.set),new at(t,e,_(A)||!A.set)}(A);return bn(t.effect),t}function In(A,t){let e;if(E(A)||H(A)){e=new Array(A.length);for(let n=0,r=A.length;n{t.insertBefore(A,e||null)},remove:A=>{const t=A.parentNode;t&&t.removeChild(A)},createElement:(A,t,e,n)=>{const r=t?xn.createElementNS(Tn,A):xn.createElement(A,e?{is:e}:void 0);return"select"===A&&n&&null!=n.multiple&&r.setAttribute("multiple",n.multiple),r},createText:A=>xn.createTextNode(A),createComment:A=>xn.createComment(A),setText:(A,t)=>{A.nodeValue=t},setElementText:(A,t)=>{A.textContent=t},parentNode:A=>A.parentNode,nextSibling:A=>A.nextSibling,querySelector:A=>xn.querySelector(A),setScopeId(A,t){A.setAttribute(t,"")},cloneNode(A){const t=A.cloneNode(!0);return"_value"in A&&(t._value=A._value),t},insertStaticContent(A,t,e,n){const r=n?Rn||(Rn=xn.createElementNS(Tn,"svg")):Sn||(Sn=xn.createElement("div"));r.innerHTML=A;const o=r.firstChild;let i=o,s=i;for(;i;)s=i,Ln.insert(i,t,e),i=r.firstChild;return[o,s]}};const Mn=/\s*!important$/;function Dn(A,t,e){if(E(e))e.forEach((e=>Dn(A,t,e)));else if(t.startsWith("--"))A.setProperty(t,e);else{const n=function(A,t){const e=Pn[t];if(e)return e;let n=M(t);if("filter"!==n&&n in A)return Pn[t]=n;n=P(n);for(let r=0;rdocument.createEvent("Event").timeStamp&&(Vn=()=>performance.now());const A=navigator.userAgent.match(/firefox\/(\d+)/i);Xn=!!(A&&Number(A[1])<=53)}let Jn=0;const Gn=Promise.resolve(),jn=()=>{Jn=0};function Wn(A,t,e,n){A.addEventListener(t,e,n)}function Yn(A,t,e,n,r=null){const o=A._vei||(A._vei={}),i=o[t];if(n&&i)i.value=n;else{const[e,s]=function(A){let t;if(qn.test(A)){let e;for(t={};e=A.match(qn);)A=A.slice(0,A.length-e[0].length),t[e[0].toLowerCase()]=!0}return[k(A.slice(2)),t]}(t);if(n){Wn(A,e,o[t]=function(A,t){const e=A=>{const n=A.timeStamp||Vn();(Xn||n>=e.attached-1)&&ct(function(A,t){if(E(t)){const e=A.stopImmediatePropagation;return A.stopImmediatePropagation=()=>{e.call(A),A._stopped=!0},t.map((A=>t=>!t._stopped&&A(t)))}return t}(A,e.value),t,5,[A])};return e.value=A,e.attached=(()=>Jn||(Gn.then(jn),Jn=Vn()))(),e}(n,r),s)}else i&&(!function(A,t,e,n){A.removeEventListener(t,e,n)}(A,e,i,s),o[t]=void 0)}}const qn=/(?:Once|Passive|Capture)$/;const $n=/^on[a-z]/;function Zn(A="$style"){{const t=En||Lt;if(!t)return f;const e=t.type.__cssModules;if(!e)return f;const n=e[A];return n||f}}const Ar=A=>{const t=A.props["onUpdate:modelValue"];return E(t)?A=>X(t,A):t};function tr(A){A.target.composing=!0}function er(A){const t=A.target;t.composing&&(t.composing=!1,function(A,t){const e=document.createEvent("HTMLEvents");e.initEvent(t,!0,!0),A.dispatchEvent(e)}(t,"input"))}const nr={created(A,{modifiers:{lazy:t,trim:e,number:n}},r){A._assign=Ar(r);const o=n||"number"===A.type;Wn(A,t?"change":"input",(t=>{if(t.target.composing)return;let n=A.value;e?n=n.trim():o&&(n=G(n)),A._assign(n)})),e&&Wn(A,"change",(()=>{A.value=A.value.trim()})),t||(Wn(A,"compositionstart",tr),Wn(A,"compositionend",er),Wn(A,"change",er))},mounted(A,{value:t}){A.value=null==t?"":t},beforeUpdate(A,{value:t,modifiers:{trim:e,number:n}},r){if(A._assign=Ar(r),A.composing)return;if(document.activeElement===A){if(e&&A.value.trim()===t)return;if((n||"number"===A.type)&&G(A.value)===t)return}const o=null==t?"":t;A.value!==o&&(A.value=o)}},rr={created(A,t,e){A._assign=Ar(e),Wn(A,"change",(()=>{const t=A._modelValue,e=ar(A),n=A.checked,r=A._assign;if(E(t)){const A=u(t,e),o=-1!==A;if(n&&!o)r(t.concat(e));else if(!n&&o){const e=[...t];e.splice(A,1),r(e)}}else if(F(t)){const A=new Set(t);n?A.add(e):A.delete(e),r(A)}else r(ur(A,n))}))},mounted:or,beforeUpdate(A,t,e){A._assign=Ar(e),or(A,t,e)}};function or(A,{value:t,oldValue:e},n){A._modelValue=t,E(t)?A.checked=u(t,n.props.value)>-1:F(t)?A.checked=t.has(n.props.value):t!==e&&(A.checked=a(t,ur(A,!0)))}const ir={created(A,{value:t,modifiers:{number:e}},n){const r=F(t);Wn(A,"change",(()=>{const t=Array.prototype.filter.call(A.options,(A=>A.selected)).map((A=>e?G(ar(A)):ar(A)));A._assign(A.multiple?r?new Set(t):t:t[0])})),A._assign=Ar(n)},mounted(A,{value:t}){sr(A,t)},beforeUpdate(A,t,e){A._assign=Ar(e)},updated(A,{value:t}){sr(A,t)}};function sr(A,t){const e=A.multiple;if(!e||E(t)||F(t)){for(let n=0,r=A.options.length;n-1:r.selected=t.has(o);else if(a(ar(r),t))return void(A.selectedIndex=n)}e||(A.selectedIndex=-1)}}function ar(A){return"_value"in A?A._value:A.value}function ur(A,t){const e=t?"_trueValue":"_falseValue";return e in A?A[e]:t}const cr={beforeMount(A,{value:t},{transition:e}){A._vod="none"===A.style.display?"":A.style.display,e&&t?e.beforeEnter(A):lr(A,t)},mounted(A,{value:t},{transition:e}){e&&t&&e.enter(A)},updated(A,{value:t,oldValue:e},{transition:n}){!t!=!e&&(n?t?(n.beforeEnter(A),lr(A,!0),n.enter(A)):n.leave(A,(()=>{lr(A,!1)})):lr(A,t))},beforeUnmount(A,{value:t}){lr(A,t)}};function lr(A,t){A.style.display=t?A._vod:"none"}const fr=Q({patchProp:(A,t,n,r,o=!1,i,s,a,u)=>{switch(t){case"class":!function(A,t,e){if(null==t&&(t=""),e)A.setAttribute("class",t);else{const e=A._vtc;e&&(t=(t?[t,...e]:[...e]).join(" ")),A.className=t}}(A,r,o);break;case"style":!function(A,t,e){const n=A.style;if(e)if(H(e)){if(t!==e){const t=n.display;n.cssText=e,"_vod"in A&&(n.display=t)}}else{for(const A in e)Dn(n,A,e[A]);if(t&&!H(t))for(const A in t)null==e[A]&&Dn(n,A,"")}else A.removeAttribute("style")}(A,n,r);break;default:d(t)?w(t)||Yn(A,t,0,r,s):function(A,t,e,n){if(n)return"innerHTML"===t||!!(t in A&&$n.test(t)&&_(e));if("spellcheck"===t||"draggable"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===A.tagName)return!1;if("type"===t&&"TEXTAREA"===A.tagName)return!1;if($n.test(t)&&H(e))return!1;return t in A}(A,t,r,o)?function(A,t,e,n,r,o,i){if("innerHTML"===t||"textContent"===t)return n&&i(n,r,o),void(A[t]=null==e?"":e);if("value"!==t||"PROGRESS"===A.tagName){if(""===e||null==e){const n=typeof A[t];if(""===e&&"boolean"===n)return void(A[t]=!0);if(null==e&&"string"===n)return A[t]="",void A.removeAttribute(t);if("number"===n)return A[t]=0,void A.removeAttribute(t)}try{A[t]=e}catch(s){}}else{A._value=e;const t=null==e?"":e;A.value!==t&&(A.value=t)}}(A,t,r,i,s,a,u):("true-value"===t?A._trueValue=r:"false-value"===t&&(A._falseValue=r),function(A,t,n,r){if(r&&t.startsWith("xlink:"))null==n?A.removeAttributeNS(zn,t.slice(6,t.length)):A.setAttributeNS(zn,t,n);else{const r=e(t);null==n||r&&!1===n?A.removeAttribute(t):A.setAttribute(t,r?"":n)}}(A,t,r,o))}},forcePatchProp:(A,t)=>"value"===t},Ln);let hr;const Br=(...A)=>{const t=(hr||(hr=Te(fr))).createApp(...A),{mount:e}=t;return t.mount=A=>{const n=function(A){if(H(A)){return document.querySelector(A)}return A}(A);if(!n)return;const r=t._component;_(r)||r.render||r.template||(r.template=n.innerHTML),n.innerHTML="";const o=e(n,!1,n instanceof SVGElement);return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),o},t};function pr(A){return{all:A=A||new Map,on:function(t,e){var n=A.get(t);n&&n.push(e)||A.set(t,[e])},off:function(t,e){var n=A.get(t);n&&n.splice(n.indexOf(e)>>>0,1)},emit:function(t,e){(A.get(t)||[]).slice().map((function(A){A(e)})),(A.get("*")||[]).slice().map((function(A){A(t,e)}))}}}const gr=Math.PI,dr=2*gr,wr=dr-1e-6;function Qr(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function vr(){return new Qr}function Ur(A){return function(){return A}}Qr.prototype=vr.prototype={constructor:Qr,moveTo:function(A,t){this._+="M"+(this._x0=this._x1=+A)+","+(this._y0=this._y1=+t)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(A,t){this._+="L"+(this._x1=+A)+","+(this._y1=+t)},quadraticCurveTo:function(A,t,e,n){this._+="Q"+ +A+","+ +t+","+(this._x1=+e)+","+(this._y1=+n)},bezierCurveTo:function(A,t,e,n,r,o){this._+="C"+ +A+","+ +t+","+ +e+","+ +n+","+(this._x1=+r)+","+(this._y1=+o)},arcTo:function(A,t,e,n,r){A=+A,t=+t,e=+e,n=+n,r=+r;var o=this._x1,i=this._y1,s=e-A,a=n-t,u=o-A,c=i-t,l=u*u+c*c;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=A)+","+(this._y1=t);else if(l>1e-6)if(Math.abs(c*s-a*u)>1e-6&&r){var f=e-o,h=n-i,B=s*s+a*a,p=f*f+h*h,g=Math.sqrt(B),d=Math.sqrt(l),w=r*Math.tan((gr-Math.acos((B+l-p)/(2*g*d)))/2),Q=w/d,v=w/g;Math.abs(Q-1)>1e-6&&(this._+="L"+(A+Q*u)+","+(t+Q*c)),this._+="A"+r+","+r+",0,0,"+ +(c*f>u*h)+","+(this._x1=A+v*s)+","+(this._y1=t+v*a)}else this._+="L"+(this._x1=A)+","+(this._y1=t);else;},arc:function(A,t,e,n,r,o){A=+A,t=+t,o=!!o;var i=(e=+e)*Math.cos(n),s=e*Math.sin(n),a=A+i,u=t+s,c=1^o,l=o?n-r:r-n;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+a+","+u:(Math.abs(this._x1-a)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+a+","+u),e&&(l<0&&(l=l%dr+dr),l>wr?this._+="A"+e+","+e+",0,1,"+c+","+(A-i)+","+(t-s)+"A"+e+","+e+",0,1,"+c+","+(this._x1=a)+","+(this._y1=u):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=gr)+","+c+","+(this._x1=A+e*Math.cos(r))+","+(this._y1=t+e*Math.sin(r))))},rect:function(A,t,e,n){this._+="M"+(this._x0=this._x1=+A)+","+(this._y0=this._y1=+t)+"h"+ +e+"v"+ +n+"h"+-e+"Z"},toString:function(){return this._}};var Cr=Array.prototype.slice;function Er(A){this._context=A}function yr(A){return new Er(A)}function Fr(A){return A[0]}function mr(A){return A[1]}function _r(A,t){var e=Ur(!0),n=null,r=yr,o=null;function i(i){var s,a,u,c,l=(c=i,i="object"==typeof c&&"length"in c?c:Array.from(c)).length,f=!1;for(null==n&&(o=r(u=vr())),s=0;s<=l;++s)!(s=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(A,t){switch(A=+A,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(A,t):this._context.moveTo(A,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(A,t);else{var e=this._x*(1-this._t)+A*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,t)}}this._x=A,this._y=t}};var Tr=function A(t){function e(A){return 1-Math.pow(1-A,t)}return t=+t,e.exponent=A,e}(3),xr={value:()=>{}};function Sr(){for(var A,t=0,e=arguments.length,n={};t=0&&(e=A.slice(n+1),A=A.slice(0,n)),A&&!t.hasOwnProperty(A))throw new Error("unknown type: "+A);return{type:A,name:e}}))}function Mr(A,t){for(var e,n=0,r=A.length;n0)for(var e,n,r=new Array(e),o=0;o=0&&"xmlns"!==(t=A.slice(0,e))&&(A=A.slice(e+1)),Pr.hasOwnProperty(t)?{space:Pr[t],local:A}:A}function Vr(A){return function(){var t=this.ownerDocument,e=this.namespaceURI;return e===kr&&t.documentElement.namespaceURI===kr?t.createElement(A):t.createElementNS(e,A)}}function Xr(A){return function(){return this.ownerDocument.createElementNS(A.space,A.local)}}function Jr(A){var t=zr(A);return(t.local?Xr:Vr)(t)}function Gr(){}function jr(A){return null==A?Gr:function(){return this.querySelector(A)}}function Wr(A){return"object"==typeof A&&"length"in A?A:Array.from(A)}function Yr(){return[]}function qr(A){return null==A?Yr:function(){return this.querySelectorAll(A)}}function $r(A){return function(){return this.matches(A)}}function Zr(A){return function(t){return t.matches(A)}}var Ao=Array.prototype.find;function to(){return this.firstElementChild}var eo=Array.prototype.filter;function no(){return this.children}function ro(A){return new Array(A.length)}function oo(A,t){this.ownerDocument=A.ownerDocument,this.namespaceURI=A.namespaceURI,this._next=null,this._parent=A,this.__data__=t}function io(A){return function(){return A}}function so(A,t,e,n,r,o){for(var i,s=0,a=t.length,u=o.length;st?1:A>=t?0:NaN}function lo(A){return function(){this.removeAttribute(A)}}function fo(A){return function(){this.removeAttributeNS(A.space,A.local)}}function ho(A,t){return function(){this.setAttribute(A,t)}}function Bo(A,t){return function(){this.setAttributeNS(A.space,A.local,t)}}function po(A,t){return function(){var e=t.apply(this,arguments);null==e?this.removeAttribute(A):this.setAttribute(A,e)}}function go(A,t){return function(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(A.space,A.local):this.setAttributeNS(A.space,A.local,e)}}function wo(A){return A.ownerDocument&&A.ownerDocument.defaultView||A.document&&A||A.defaultView}function Qo(A){return function(){this.style.removeProperty(A)}}function vo(A,t,e){return function(){this.style.setProperty(A,t,e)}}function Uo(A,t,e){return function(){var n=t.apply(this,arguments);null==n?this.style.removeProperty(A):this.style.setProperty(A,n,e)}}function Co(A,t){return A.style.getPropertyValue(t)||wo(A).getComputedStyle(A,null).getPropertyValue(t)}function Eo(A){return function(){delete this[A]}}function yo(A,t){return function(){this[A]=t}}function Fo(A,t){return function(){var e=t.apply(this,arguments);null==e?delete this[A]:this[A]=e}}function mo(A){return A.trim().split(/^|\s+/)}function _o(A){return A.classList||new Ho(A)}function Ho(A){this._node=A,this._names=mo(A.getAttribute("class")||"")}function bo(A,t){for(var e=_o(A),n=-1,r=t.length;++n=0&&(t=A.slice(e+1),A=A.slice(0,e)),{type:A,name:t}}))}function Go(A){return function(){var t=this.__on;if(t){for(var e,n=0,r=-1,o=t.length;n=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(A){return this._names.indexOf(A)>=0}};var $o=[null];function Zo(A,t){this._groups=A,this._parents=t}function Ai(){return new Zo([[document.documentElement]],$o)}function ti(A){return"string"==typeof A?new Zo([[document.querySelector(A)]],[document.documentElement]):new Zo([[A]],$o)}function ei(A,t){if(A=function(A){let t;for(;t=A.sourceEvent;)A=t;return A}(A),void 0===t&&(t=A.currentTarget),t){var e=t.ownerSVGElement||t;if(e.createSVGPoint){var n=e.createSVGPoint();return n.x=A.clientX,n.y=A.clientY,[(n=n.matrixTransform(t.getScreenCTM().inverse())).x,n.y]}if(t.getBoundingClientRect){var r=t.getBoundingClientRect();return[A.clientX-r.left-t.clientLeft,A.clientY-r.top-t.clientTop]}}return[A.pageX,A.pageY]}function ni(A){A.stopImmediatePropagation()}function ri(A){A.preventDefault(),A.stopImmediatePropagation()}function oi(A){var t=A.document.documentElement,e=ti(A).on("dragstart.drag",ri,!0);"onselectstart"in t?e.on("selectstart.drag",ri,!0):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect="none")}function ii(A,t){var e=A.document.documentElement,n=ti(A).on("dragstart.drag",null);t&&(n.on("click.drag",ri,!0),setTimeout((function(){n.on("click.drag",null)}),0)),"onselectstart"in e?n.on("selectstart.drag",null):(e.style.MozUserSelect=e.__noselect,delete e.__noselect)}Zo.prototype=Ai.prototype={constructor:Zo,select:function(A){"function"!=typeof A&&(A=jr(A));for(var t=this._groups,e=t.length,n=new Array(e),r=0;r=U&&(U=v+1);!(Q=g[U])&&++U=0;)(n=r[o])&&(i&&4^n.compareDocumentPosition(i)&&i.parentNode.insertBefore(n,i),i=n);return this},sort:function(A){function t(t,e){return t&&e?A(t.__data__,e.__data__):!t-!e}A||(A=co);for(var e=this._groups,n=e.length,r=new Array(n),o=0;o1?this.each((null==t?Qo:"function"==typeof t?Uo:vo)(A,t,null==e?"":e)):Co(this.node(),A)},property:function(A,t){return arguments.length>1?this.each((null==t?Eo:"function"==typeof t?Fo:yo)(A,t)):this.node()[A]},classed:function(A,t){var e=mo(A+"");if(arguments.length<2){for(var n=_o(this.node()),r=-1,o=e.length;++r()=>A;function ai(A,{sourceEvent:t,subject:e,target:n,identifier:r,active:o,x:i,y:s,dx:a,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:A,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:e,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},identifier:{value:r,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:i,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}function ui(A){return!A.ctrlKey&&!A.button}function ci(){return this.parentNode}function li(A,t){return null==t?{x:A.x,y:A.y}:t}function fi(){return navigator.maxTouchPoints||"ontouchstart"in this}function hi(){var A,t,e,n,r=ui,o=ci,i=li,s=fi,a={},u=Sr("start","drag","end"),c=0,l=0;function f(A){A.on("mousedown.drag",h).filter(s).on("touchstart.drag",g).on("touchmove.drag",d).on("touchend.drag touchcancel.drag",w).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(i,s){if(!n&&r.call(this,i,s)){var a=Q(this,o.call(this,i,s),i,s,"mouse");a&&(ti(i.view).on("mousemove.drag",B,!0).on("mouseup.drag",p,!0),oi(i.view),ni(i),e=!1,A=i.clientX,t=i.clientY,a("start",i))}}function B(n){if(ri(n),!e){var r=n.clientX-A,o=n.clientY-t;e=r*r+o*o>l}a.mouse("drag",n)}function p(A){ti(A.view).on("mousemove.drag mouseup.drag",null),ii(A.view,e),ri(A),a.mouse("end",A)}function g(A,t){if(r.call(this,A,t)){var e,n,i=A.changedTouches,s=o.call(this,A,t),a=i.length;for(e=0;e>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===e?Oi(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===e?Oi(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=Ci.exec(A))?new Si(t[1],t[2],t[3],1):(t=Ei.exec(A))?new Si(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=yi.exec(A))?Oi(t[1],t[2],t[3],t[4]):(t=Fi.exec(A))?Oi(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=mi.exec(A))?Di(t[1],t[2]/100,t[3]/100,1):(t=_i.exec(A))?Di(t[1],t[2]/100,t[3]/100,t[4]):Hi.hasOwnProperty(A)?Ii(Hi[A]):"transparent"===A?new Si(NaN,NaN,NaN,0):null}function Ii(A){return new Si(A>>16&255,A>>8&255,255&A,1)}function Oi(A,t,e,n){return n<=0&&(A=t=e=NaN),new Si(A,t,e,n)}function Ti(A){return A instanceof gi||(A=Ki(A)),A?new Si((A=A.rgb()).r,A.g,A.b,A.opacity):new Si}function xi(A,t,e,n){return 1===arguments.length?Ti(A):new Si(A,t,e,null==n?1:n)}function Si(A,t,e,n){this.r=+A,this.g=+t,this.b=+e,this.opacity=+n}function Ri(){return"#"+Mi(this.r)+Mi(this.g)+Mi(this.b)}function Li(){var A=this.opacity;return(1===(A=isNaN(A)?1:Math.max(0,Math.min(1,A)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===A?")":", "+A+")")}function Mi(A){return((A=Math.max(0,Math.min(255,Math.round(A)||0)))<16?"0":"")+A.toString(16)}function Di(A,t,e,n){return n<=0?A=t=e=NaN:e<=0||e>=1?A=t=NaN:t<=0&&(A=NaN),new Pi(A,t,e,n)}function ki(A){if(A instanceof Pi)return new Pi(A.h,A.s,A.l,A.opacity);if(A instanceof gi||(A=Ki(A)),!A)return new Pi;if(A instanceof Pi)return A;var t=(A=A.rgb()).r/255,e=A.g/255,n=A.b/255,r=Math.min(t,e,n),o=Math.max(t,e,n),i=NaN,s=o-r,a=(o+r)/2;return s?(i=t===o?(e-n)/s+6*(e0&&a<1?0:i,new Pi(i,s,a,A.opacity)}function Pi(A,t,e,n){this.h=+A,this.s=+t,this.l=+e,this.opacity=+n}function zi(A,t,e){return 255*(A<60?t+(e-t)*A/60:A<180?e:A<240?t+(e-t)*(240-A)/60:t)}Bi(gi,Ki,{copy:function(A){return Object.assign(new this.constructor,this,A)},displayable:function(){return this.rgb().displayable()},hex:bi,formatHex:bi,formatHsl:function(){return ki(this).formatHsl()},formatRgb:Ni,toString:Ni}),Bi(Si,xi,pi(gi,{brighter:function(A){return A=null==A?di:Math.pow(di,A),new Si(this.r*A,this.g*A,this.b*A,this.opacity)},darker:function(A){return A=null==A?.7:Math.pow(.7,A),new Si(this.r*A,this.g*A,this.b*A,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ri,formatHex:Ri,formatRgb:Li,toString:Li})),Bi(Pi,(function(A,t,e,n){return 1===arguments.length?ki(A):new Pi(A,t,e,null==n?1:n)}),pi(gi,{brighter:function(A){return A=null==A?di:Math.pow(di,A),new Pi(this.h,this.s,this.l*A,this.opacity)},darker:function(A){return A=null==A?.7:Math.pow(.7,A),new Pi(this.h,this.s,this.l*A,this.opacity)},rgb:function(){var A=this.h%360+360*(this.h<0),t=isNaN(A)||isNaN(this.s)?0:this.s,e=this.l,n=e+(e<.5?e:1-e)*t,r=2*e-n;return new Si(zi(A>=240?A-240:A+120,r,n),zi(A,r,n),zi(A<120?A+240:A-120,r,n),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var A=this.opacity;return(1===(A=isNaN(A)?1:Math.max(0,Math.min(1,A)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===A?")":", "+A+")")}}));var Vi=A=>()=>A;function Xi(A){return 1==(A=+A)?Ji:function(t,e){return e-t?function(A,t,e){return A=Math.pow(A,e),t=Math.pow(t,e)-A,e=1/e,function(n){return Math.pow(A+n*t,e)}}(t,e,A):Vi(isNaN(t)?e:t)}}function Ji(A,t){var e=t-A;return e?function(A,t){return function(e){return A+e*t}}(A,e):Vi(isNaN(A)?t:A)}var Gi=function A(t){var e=Xi(t);function n(A,t){var n=e((A=xi(A)).r,(t=xi(t)).r),r=e(A.g,t.g),o=e(A.b,t.b),i=Ji(A.opacity,t.opacity);return function(t){return A.r=n(t),A.g=r(t),A.b=o(t),A.opacity=i(t),A+""}}return n.gamma=A,n}(1);function ji(A,t){t||(t=[]);var e,n=A?Math.min(t.length,A.length):0,r=t.slice();return function(o){for(e=0;eo&&(r=t.slice(o,r),s[i]?s[i]+=r:s[++i]=r),(e=e[0])===(n=n[0])?s[i]?s[i]+=n:s[++i]=n:(s[++i]=null,a.push({i:i,x:qi(e,n)})),o=As.lastIndex;return o180?t+=360:t-A>180&&(A+=360),o.push({i:e.push(r(e)+"rotate(",null,n)-2,x:qi(A,t)})):t&&e.push(r(e)+"rotate("+t+n)}(o.rotate,i.rotate,s,a),function(A,t,e,o){A!==t?o.push({i:e.push(r(e)+"skewX(",null,n)-2,x:qi(A,t)}):t&&e.push(r(e)+"skewX("+t+n)}(o.skewX,i.skewX,s,a),function(A,t,e,n,o,i){if(A!==e||t!==n){var s=o.push(r(o)+"scale(",null,",",null,")");i.push({i:s-4,x:qi(A,e)},{i:s-2,x:qi(t,n)})}else 1===e&&1===n||o.push(r(o)+"scale("+e+","+n+")")}(o.scaleX,o.scaleY,i.scaleX,i.scaleY,s,a),o=i=null,function(A){for(var t,e=-1,n=a.length;++e=0&&t._call.call(null,A),t=t._next;--Bs}()}finally{Bs=0,function(){var A,t,e=ls,n=1/0;for(;e;)e._call?(n>e._time&&(n=e._time),A=e,e=e._next):(t=e._next,e._next=null,e=A?A._next=t:ls=t);fs=A,Hs(n)}(),ws=0}}function _s(){var A=vs.now(),t=A-ds;t>1e3&&(Qs-=t,ds=A)}function Hs(A){Bs||(ps&&(ps=clearTimeout(ps)),A-ws>24?(A<1/0&&(ps=setTimeout(ms,A-vs.now()-Qs)),gs&&(gs=clearInterval(gs))):(gs||(ds=vs.now(),gs=setInterval(_s,1e3)),Bs=1,Us(ms)))}function bs(A,t,e){var n=new ys;return t=null==t?0:+t,n.restart((e=>{n.stop(),A(e+t)}),t,e),n}ys.prototype=Fs.prototype={constructor:ys,restart:function(A,t,e){if("function"!=typeof A)throw new TypeError("callback is not a function");e=(null==e?Cs():+e)+(null==t?0:+t),this._next||fs===this||(fs?fs._next=this:ls=this,fs=this),this._call=A,this._time=e,Hs()},stop:function(){this._call&&(this._call=null,this._time=1/0,Hs())}};var Ns=Sr("start","end","cancel","interrupt"),Ks=[];function Is(A,t,e,n,r,o){var i=A.__transition;if(i){if(e in i)return}else A.__transition={};!function(A,t,e){var n,r=A.__transition;function o(A){e.state=1,e.timer.restart(i,e.delay,e.time),e.delay<=A&&i(A-e.delay)}function i(o){var u,c,l,f;if(1!==e.state)return a();for(u in r)if((f=r[u]).name===e.name){if(3===f.state)return bs(i);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",A,A.__data__,f.index,f.group),delete r[u]):+u0)throw new Error("too late; already scheduled");return e}function Ts(A,t){var e=xs(A,t);if(e.state>3)throw new Error("too late; already running");return e}function xs(A,t){var e=A.__transition;if(!e||!(e=e[t]))throw new Error("transition not found");return e}function Ss(A,t){var e,n,r,o=A.__transition,i=!0;if(o){for(r in t=null==t?null:t+"",o)(e=o[r]).name===t?(n=e.state>2&&e.state<5,e.state=6,e.timer.stop(),e.on.call(n?"interrupt":"cancel",A,A.__data__,e.index,e.group),delete o[r]):i=!1;i&&delete A.__transition}}function Rs(A,t){var e,n;return function(){var r=Ts(this,A),o=r.tween;if(o!==e)for(var i=0,s=(n=e=o).length;i=0&&(A=A.slice(0,t)),!A||"start"===A}))}(t)?Os:Ts;return function(){var i=o(this,A),s=i.on;s!==n&&(r=(n=s).copy()).on(t,e),i.on=r}}var na=Ai.prototype.constructor;function ra(A){return function(){this.style.removeProperty(A)}}function oa(A,t,e){return function(n){this.style.setProperty(A,t.call(this,n),e)}}function ia(A,t,e){var n,r;function o(){var o=t.apply(this,arguments);return o!==r&&(n=(r=o)&&oa(A,o,e)),n}return o._value=t,o}function sa(A){return function(t){this.textContent=A.call(this,t)}}function aa(A){var t,e;function n(){var n=A.apply(this,arguments);return n!==e&&(t=(e=n)&&sa(n)),t}return n._value=A,n}var ua=0;function ca(A,t,e,n){this._groups=A,this._parents=t,this._name=e,this._id=n}function la(A){return Ai().transition(A)}function fa(){return++ua}var ha=Ai.prototype;ca.prototype=la.prototype={constructor:ca,select:function(A){var t=this._name,e=this._id;"function"!=typeof A&&(A=jr(A));for(var n=this._groups,r=n.length,o=new Array(r),i=0;i()=>A;function da(A,{sourceEvent:t,target:e,transform:n,dispatch:r}){Object.defineProperties(this,{type:{value:A,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:e,enumerable:!0,configurable:!0},transform:{value:n,enumerable:!0,configurable:!0},_:{value:r}})}function wa(A,t,e){this.k=A,this.x=t,this.y=e}wa.prototype={constructor:wa,scale:function(A){return 1===A?this:new wa(this.k*A,this.x,this.y)},translate:function(A,t){return 0===A&0===t?this:new wa(this.k,this.x+this.k*A,this.y+this.k*t)},apply:function(A){return[A[0]*this.k+this.x,A[1]*this.k+this.y]},applyX:function(A){return A*this.k+this.x},applyY:function(A){return A*this.k+this.y},invert:function(A){return[(A[0]-this.x)/this.k,(A[1]-this.y)/this.k]},invertX:function(A){return(A-this.x)/this.k},invertY:function(A){return(A-this.y)/this.k},rescaleX:function(A){return A.copy().domain(A.range().map(this.invertX,this).map(A.invert,A))},rescaleY:function(A){return A.copy().domain(A.range().map(this.invertY,this).map(A.invert,A))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Qa=new wa(1,0,0);function va(A){A.stopImmediatePropagation()}function Ua(A){A.preventDefault(),A.stopImmediatePropagation()}function Ca(A){return!(A.ctrlKey&&"wheel"!==A.type||A.button)}function Ea(){var A=this;return A instanceof SVGElement?(A=A.ownerSVGElement||A).hasAttribute("viewBox")?[[(A=A.viewBox.baseVal).x,A.y],[A.x+A.width,A.y+A.height]]:[[0,0],[A.width.baseVal.value,A.height.baseVal.value]]:[[0,0],[A.clientWidth,A.clientHeight]]}function ya(){return this.__zoom||Qa}function Fa(A){return-A.deltaY*(1===A.deltaMode?.05:A.deltaMode?1:.002)*(A.ctrlKey?10:1)}function ma(){return navigator.maxTouchPoints||"ontouchstart"in this}function _a(A,t,e){var n=A.invertX(t[0][0])-e[0][0],r=A.invertX(t[1][0])-e[1][0],o=A.invertY(t[0][1])-e[0][1],i=A.invertY(t[1][1])-e[1][1];return A.translate(r>n?(n+r)/2:Math.min(0,n)||Math.max(0,r),i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i))}function Ha(){var A,t,e,n=Ca,r=Ea,o=_a,i=Fa,s=ma,a=[0,1/0],u=[[-1/0,-1/0],[1/0,1/0]],c=250,l=hs,f=Sr("start","zoom","end"),h=500,B=0,p=10;function g(A){A.property("__zoom",ya).on("wheel.zoom",E).on("mousedown.zoom",y).on("dblclick.zoom",F).filter(s).on("touchstart.zoom",m).on("touchmove.zoom",_).on("touchend.zoom touchcancel.zoom",H).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(A,t){return(t=Math.max(a[0],Math.min(a[1],t)))===A.k?A:new wa(t,A.x,A.y)}function w(A,t,e){var n=t[0]-e[0]*A.k,r=t[1]-e[1]*A.k;return n===A.x&&r===A.y?A:new wa(A.k,n,r)}function Q(A){return[(+A[0][0]+ +A[1][0])/2,(+A[0][1]+ +A[1][1])/2]}function v(A,t,e,n){A.on("start.zoom",(function(){U(this,arguments).event(n).start()})).on("interrupt.zoom end.zoom",(function(){U(this,arguments).event(n).end()})).tween("zoom",(function(){var A=this,o=arguments,i=U(A,o).event(n),s=r.apply(A,o),a=null==e?Q(s):"function"==typeof e?e.apply(A,o):e,u=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),c=A.__zoom,f="function"==typeof t?t.apply(A,o):t,h=l(c.invert(a).concat(u/c.k),f.invert(a).concat(u/f.k));return function(A){if(1===A)A=f;else{var t=h(A),e=u/t[2];A=new wa(e,a[0]-t[0]*e,a[1]-t[1]*e)}i.zoom(null,A)}}))}function U(A,t,e){return!e&&A.__zooming||new C(A,t)}function C(A,t){this.that=A,this.args=t,this.active=0,this.sourceEvent=null,this.extent=r.apply(A,t),this.taps=0}function E(A,...t){if(n.apply(this,arguments)){var e=U(this,t).event(A),r=this.__zoom,s=Math.max(a[0],Math.min(a[1],r.k*Math.pow(2,i.apply(this,arguments)))),c=ei(A);if(e.wheel)e.mouse[0][0]===c[0]&&e.mouse[0][1]===c[1]||(e.mouse[1]=r.invert(e.mouse[0]=c)),clearTimeout(e.wheel);else{if(r.k===s)return;e.mouse=[c,r.invert(c)],Ss(this),e.start()}Ua(A),e.wheel=setTimeout(l,150),e.zoom("mouse",o(w(d(r,s),e.mouse[0],e.mouse[1]),e.extent,u))}function l(){e.wheel=null,e.end()}}function y(A,...t){if(!e&&n.apply(this,arguments)){var r=U(this,t,!0).event(A),i=ti(A.view).on("mousemove.zoom",f,!0).on("mouseup.zoom",h,!0),s=ei(A,a),a=A.currentTarget,c=A.clientX,l=A.clientY;oi(A.view),va(A),r.mouse=[s,this.__zoom.invert(s)],Ss(this),r.start()}function f(A){if(Ua(A),!r.moved){var t=A.clientX-c,e=A.clientY-l;r.moved=t*t+e*e>B}r.event(A).zoom("mouse",o(w(r.that.__zoom,r.mouse[0]=ei(A,a),r.mouse[1]),r.extent,u))}function h(A){i.on("mousemove.zoom mouseup.zoom",null),ii(A.view,r.moved),Ua(A),r.event(A).end()}}function F(A,...t){if(n.apply(this,arguments)){var e=this.__zoom,i=ei(A.changedTouches?A.changedTouches[0]:A,this),s=e.invert(i),a=e.k*(A.shiftKey?.5:2),l=o(w(d(e,a),i,s),r.apply(this,t),u);Ua(A),c>0?ti(this).transition().duration(c).call(v,l,i,A):ti(this).call(g.transform,l,i,A)}}function m(e,...r){if(n.apply(this,arguments)){var o,i,s,a,u=e.touches,c=u.length,l=U(this,r,e.changedTouches.length===c).event(e);for(va(e),i=0;i-1},mA.prototype.set=function(A,t){var e=this.__data__,n=KA(e,A);return n<0?e.push([A,t]):e[n][1]=t,this},_A.prototype.clear=function(){this.__data__={hash:new FA,map:new(hA||mA),string:new FA}},_A.prototype.delete=function(A){return SA(this,A).delete(A)},_A.prototype.get=function(A){return SA(this,A).get(A)},_A.prototype.has=function(A){return SA(this,A).has(A)},_A.prototype.set=function(A,t){return SA(this,A).set(A,t),this},HA.prototype.clear=function(){this.__data__=new mA},HA.prototype.delete=function(A){return this.__data__.delete(A)},HA.prototype.get=function(A){return this.__data__.get(A)},HA.prototype.has=function(A){return this.__data__.has(A)},HA.prototype.set=function(A,t){var e=this.__data__;if(e instanceof mA){var n=e.__data__;if(!hA||n.length<199)return n.push([A,t]),this;e=this.__data__=new _A(n)}return e.set(A,t),this};var LA=uA?V(uA,Object):function(){return[]},MA=function(A){return AA.call(A)};function DA(A,t){return!!(t=null==t?n:t)&&("number"==typeof A||K.test(A))&&A>-1&&A%1==0&&A-1&&A%1==0&&A<=n}(A.length)&&!GA(A)}var JA=cA||function(){return!1};function GA(A){var t=jA(A)?AA.call(A):"";return t==s||t==a}function jA(A){var t=typeof A;return!!A&&("object"==t||"function"==t)}function WA(A){return XA(A)?bA(A):function(A){if(!kA(A))return lA(A);var t=[];for(var e in Object(A))Z.call(A,e)&&"constructor"!=e&&t.push(e);return t}(A)}A.exports=function(A){return IA(A,!0,!0)}})),Ia=function(A,t){return(Ia=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(A,t){A.__proto__=t}||function(A,t){for(var e in t)t.hasOwnProperty(e)&&(A[e]=t[e])})(A,t)}; /*! * html2canvas 1.0.0-rc.7 * Copyright (c) 2020 Niklas von Hertzen * Released under MIT License */ /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */function Oa(A,t){function e(){this.constructor=A}Ia(A,t),A.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}var Ta=function(){return(Ta=Object.assign||function(A){for(var t,e=1,n=arguments.length;e0&&r[r.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]=55296&&r<=56319&&e>10),i%1024+56320)),(r+1===e||n.length>16384)&&(o+=String.fromCharCode.apply(String,n),n.length=0)}return o},ka="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Pa="undefined"==typeof Uint8Array?[]:new Uint8Array(256),za=0;za=0){if(A<55296||A>56319&&A<=65535)return t=((t=this.index[A>>5])<<2)+(31&A),this.data[t];if(A<=65535)return t=((t=this.index[2048+(A-55296>>5)])<<2)+(31&A),this.data[t];if(A>11),t=this.index[t],t+=A>>5&63,t=((t=this.index[t])<<2)+(31&A),this.data[t];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},A}(),eu=10,nu=13,ru=15,ou=17,iu=18,su=19,au=20,uu=21,cu=22,lu=24,fu=25,hu=26,Bu=27,pu=28,gu=30,du=32,wu=33,Qu=34,vu=35,Uu=37,Cu=38,Eu=39,yu=40,Fu=42,mu=(Ga=function(A){var t,e,n,r,o,i=.75*A.length,s=A.length,a=0;"="===A[A.length-1]&&(i--,"="===A[A.length-2]&&i--);var u="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.slice?new ArrayBuffer(i):new Array(i),c=Array.isArray(u)?u:new Uint8Array(u);for(t=0;t>4,c[a++]=(15&n)<<4|r>>2,c[a++]=(3&r)<<6|63&o;return u}("KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA"),ja=Array.isArray(Ga)?function(A){for(var t=A.length,e=[],n=0;n0;){var i=n[--o];if(Array.isArray(A)?-1!==A.indexOf(i):A===i)for(var s=e;s<=n.length;){var a;if((a=n[++s])===t)return!0;if(a!==eu)break}if(i!==eu)break}return!1},xu=function(A,t){for(var e=A;e>=0;){var n=t[e];if(n!==eu)return n;e--}return 0},Su=function(A,t,e,n,r){if(0===e[n])return"×";var o=n-1;if(Array.isArray(r)&&!0===r[o])return"×";var i=o-1,s=o+1,a=t[o],u=i>=0?t[i]:0,c=t[s];if(2===a&&3===c)return"×";if(-1!==Hu.indexOf(a))return"!";if(-1!==Hu.indexOf(c))return"×";if(-1!==bu.indexOf(c))return"×";if(8===xu(o,t))return"÷";if(11===mu.get(A[o])&&(c===Uu||c===du||c===wu))return"×";if(7===a||7===c)return"×";if(9===a)return"×";if(-1===[eu,nu,ru].indexOf(a)&&9===c)return"×";if(-1!==[ou,iu,su,lu,pu].indexOf(c))return"×";if(xu(o,t)===cu)return"×";if(Tu(23,cu,o,t))return"×";if(Tu([ou,iu],uu,o,t))return"×";if(Tu(12,12,o,t))return"×";if(a===eu)return"÷";if(23===a||23===c)return"×";if(16===c||16===a)return"÷";if(-1!==[nu,ru,uu].indexOf(c)||14===a)return"×";if(36===u&&-1!==Ou.indexOf(a))return"×";if(a===pu&&36===c)return"×";if(c===au&&-1!==_u.concat(au,su,fu,Uu,du,wu).indexOf(a))return"×";if(-1!==_u.indexOf(c)&&a===fu||-1!==_u.indexOf(a)&&c===fu)return"×";if(a===Bu&&-1!==[Uu,du,wu].indexOf(c)||-1!==[Uu,du,wu].indexOf(a)&&c===hu)return"×";if(-1!==_u.indexOf(a)&&-1!==Nu.indexOf(c)||-1!==Nu.indexOf(a)&&-1!==_u.indexOf(c))return"×";if(-1!==[Bu,hu].indexOf(a)&&(c===fu||-1!==[cu,ru].indexOf(c)&&t[s+1]===fu)||-1!==[cu,ru].indexOf(a)&&c===fu||a===fu&&-1!==[fu,pu,lu].indexOf(c))return"×";if(-1!==[fu,pu,lu,ou,iu].indexOf(c))for(var l=o;l>=0;){if((f=t[l])===fu)return"×";if(-1===[pu,lu].indexOf(f))break;l--}if(-1!==[Bu,hu].indexOf(c))for(l=-1!==[ou,iu].indexOf(a)?i:o;l>=0;){var f;if((f=t[l])===fu)return"×";if(-1===[pu,lu].indexOf(f))break;l--}if(Cu===a&&-1!==[Cu,Eu,Qu,vu].indexOf(c)||-1!==[Eu,Qu].indexOf(a)&&-1!==[Eu,yu].indexOf(c)||-1!==[yu,vu].indexOf(a)&&c===yu)return"×";if(-1!==Iu.indexOf(a)&&-1!==[au,hu].indexOf(c)||-1!==Iu.indexOf(c)&&a===Bu)return"×";if(-1!==_u.indexOf(a)&&-1!==_u.indexOf(c))return"×";if(a===lu&&-1!==_u.indexOf(c))return"×";if(-1!==_u.concat(fu).indexOf(a)&&c===cu||-1!==_u.concat(fu).indexOf(c)&&a===iu)return"×";if(41===a&&41===c){for(var h=e[o],B=1;h>0&&41===t[--h];)B++;if(B%2!=0)return"×"}return a===du&&c===wu?"×":"÷"},Ru=function(A,t){t||(t={lineBreak:"normal",wordBreak:"normal"});var e=function(A,t){void 0===t&&(t="strict");var e=[],n=[],r=[];return A.forEach((function(A,o){var i=mu.get(A);if(i>50?(r.push(!0),i-=50):r.push(!1),-1!==["normal","auto","loose"].indexOf(t)&&-1!==[8208,8211,12316,12448].indexOf(A))return n.push(o),e.push(16);if(4===i||11===i){if(0===o)return n.push(o),e.push(gu);var s=e[o-1];return-1===Ku.indexOf(s)?(n.push(n[o-1]),e.push(s)):(n.push(o),e.push(gu))}return n.push(o),31===i?e.push("strict"===t?uu:Uu):i===Fu||29===i?e.push(gu):43===i?A>=131072&&A<=196605||A>=196608&&A<=262141?e.push(Uu):e.push(gu):void e.push(i)})),[n,e,r]}(A,t.lineBreak),n=e[0],r=e[1],o=e[2];return"break-all"!==t.wordBreak&&"break-word"!==t.wordBreak||(r=r.map((function(A){return-1!==[fu,gu,Fu].indexOf(A)?Uu:A}))),[n,r,"keep-all"===t.wordBreak?o.map((function(t,e){return t&&A[e]>=19968&&A[e]<=40959})):void 0]},Lu=function(){function A(A,t,e,n){this.codePoints=A,this.required="!"===t,this.start=e,this.end=n}return A.prototype.slice=function(){return Da.apply(void 0,this.codePoints.slice(this.start,this.end))},A}();(Za=$a||($a={}))[Za.STRING_TOKEN=0]="STRING_TOKEN",Za[Za.BAD_STRING_TOKEN=1]="BAD_STRING_TOKEN",Za[Za.LEFT_PARENTHESIS_TOKEN=2]="LEFT_PARENTHESIS_TOKEN",Za[Za.RIGHT_PARENTHESIS_TOKEN=3]="RIGHT_PARENTHESIS_TOKEN",Za[Za.COMMA_TOKEN=4]="COMMA_TOKEN",Za[Za.HASH_TOKEN=5]="HASH_TOKEN",Za[Za.DELIM_TOKEN=6]="DELIM_TOKEN",Za[Za.AT_KEYWORD_TOKEN=7]="AT_KEYWORD_TOKEN",Za[Za.PREFIX_MATCH_TOKEN=8]="PREFIX_MATCH_TOKEN",Za[Za.DASH_MATCH_TOKEN=9]="DASH_MATCH_TOKEN",Za[Za.INCLUDE_MATCH_TOKEN=10]="INCLUDE_MATCH_TOKEN",Za[Za.LEFT_CURLY_BRACKET_TOKEN=11]="LEFT_CURLY_BRACKET_TOKEN",Za[Za.RIGHT_CURLY_BRACKET_TOKEN=12]="RIGHT_CURLY_BRACKET_TOKEN",Za[Za.SUFFIX_MATCH_TOKEN=13]="SUFFIX_MATCH_TOKEN",Za[Za.SUBSTRING_MATCH_TOKEN=14]="SUBSTRING_MATCH_TOKEN",Za[Za.DIMENSION_TOKEN=15]="DIMENSION_TOKEN",Za[Za.PERCENTAGE_TOKEN=16]="PERCENTAGE_TOKEN",Za[Za.NUMBER_TOKEN=17]="NUMBER_TOKEN",Za[Za.FUNCTION=18]="FUNCTION",Za[Za.FUNCTION_TOKEN=19]="FUNCTION_TOKEN",Za[Za.IDENT_TOKEN=20]="IDENT_TOKEN",Za[Za.COLUMN_TOKEN=21]="COLUMN_TOKEN",Za[Za.URL_TOKEN=22]="URL_TOKEN",Za[Za.BAD_URL_TOKEN=23]="BAD_URL_TOKEN",Za[Za.CDC_TOKEN=24]="CDC_TOKEN",Za[Za.CDO_TOKEN=25]="CDO_TOKEN",Za[Za.COLON_TOKEN=26]="COLON_TOKEN",Za[Za.SEMICOLON_TOKEN=27]="SEMICOLON_TOKEN",Za[Za.LEFT_SQUARE_BRACKET_TOKEN=28]="LEFT_SQUARE_BRACKET_TOKEN",Za[Za.RIGHT_SQUARE_BRACKET_TOKEN=29]="RIGHT_SQUARE_BRACKET_TOKEN",Za[Za.UNICODE_RANGE_TOKEN=30]="UNICODE_RANGE_TOKEN",Za[Za.WHITESPACE_TOKEN=31]="WHITESPACE_TOKEN",Za[Za.EOF_TOKEN=32]="EOF_TOKEN";var Mu=function(A){return A>=48&&A<=57},Du=function(A){return Mu(A)||A>=65&&A<=70||A>=97&&A<=102},ku=function(A){return 10===A||9===A||32===A},Pu=function(A){return function(A){return function(A){return A>=97&&A<=122}(A)||function(A){return A>=65&&A<=90}(A)}(A)||function(A){return A>=128}(A)||95===A},zu=function(A){return Pu(A)||Mu(A)||45===A},Vu=function(A){return A>=0&&A<=8||11===A||A>=14&&A<=31||127===A},Xu=function(A,t){return 92===A&&10!==t},Ju=function(A,t,e){return 45===A?Pu(t)||Xu(t,e):!!Pu(A)||!(92!==A||!Xu(A,t))},Gu=function(A,t,e){return 43===A||45===A?!!Mu(t)||46===t&&Mu(e):Mu(46===A?t:A)},ju=function(A){var t=0,e=1;43!==A[t]&&45!==A[t]||(45===A[t]&&(e=-1),t++);for(var n=[];Mu(A[t]);)n.push(A[t++]);var r=n.length?parseInt(Da.apply(void 0,n),10):0;46===A[t]&&t++;for(var o=[];Mu(A[t]);)o.push(A[t++]);var i=o.length,s=i?parseInt(Da.apply(void 0,o),10):0;69!==A[t]&&101!==A[t]||t++;var a=1;43!==A[t]&&45!==A[t]||(45===A[t]&&(a=-1),t++);for(var u=[];Mu(A[t]);)u.push(A[t++]);var c=u.length?parseInt(Da.apply(void 0,u),10):0;return e*(r+s*Math.pow(10,-i))*Math.pow(10,a*c)},Wu={type:$a.LEFT_PARENTHESIS_TOKEN},Yu={type:$a.RIGHT_PARENTHESIS_TOKEN},qu={type:$a.COMMA_TOKEN},$u={type:$a.SUFFIX_MATCH_TOKEN},Zu={type:$a.PREFIX_MATCH_TOKEN},Ac={type:$a.COLUMN_TOKEN},tc={type:$a.DASH_MATCH_TOKEN},ec={type:$a.INCLUDE_MATCH_TOKEN},nc={type:$a.LEFT_CURLY_BRACKET_TOKEN},rc={type:$a.RIGHT_CURLY_BRACKET_TOKEN},oc={type:$a.SUBSTRING_MATCH_TOKEN},ic={type:$a.BAD_URL_TOKEN},sc={type:$a.BAD_STRING_TOKEN},ac={type:$a.CDO_TOKEN},uc={type:$a.CDC_TOKEN},cc={type:$a.COLON_TOKEN},lc={type:$a.SEMICOLON_TOKEN},fc={type:$a.LEFT_SQUARE_BRACKET_TOKEN},hc={type:$a.RIGHT_SQUARE_BRACKET_TOKEN},Bc={type:$a.WHITESPACE_TOKEN},pc={type:$a.EOF_TOKEN},gc=function(){function A(){this._value=[]}return A.prototype.write=function(A){this._value=this._value.concat(Ma(A))},A.prototype.read=function(){for(var A=[],t=this.consumeToken();t!==pc;)A.push(t),t=this.consumeToken();return A},A.prototype.consumeToken=function(){var A=this.consumeCodePoint();switch(A){case 34:return this.consumeStringToken(34);case 35:var t=this.peekCodePoint(0),e=this.peekCodePoint(1),n=this.peekCodePoint(2);if(zu(t)||Xu(e,n)){var r=Ju(t,e,n)?2:1,o=this.consumeName();return{type:$a.HASH_TOKEN,value:o,flags:r}}break;case 36:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),$u;break;case 39:return this.consumeStringToken(39);case 40:return Wu;case 41:return Yu;case 42:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),oc;break;case 43:if(Gu(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case 44:return qu;case 45:var i=A,s=this.peekCodePoint(0),a=this.peekCodePoint(1);if(Gu(i,s,a))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(Ju(i,s,a))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(45===s&&62===a)return this.consumeCodePoint(),this.consumeCodePoint(),uc;break;case 46:if(Gu(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case 47:if(42===this.peekCodePoint(0))for(this.consumeCodePoint();;){var u=this.consumeCodePoint();if(42===u&&47===(u=this.consumeCodePoint()))return this.consumeToken();if(-1===u)return this.consumeToken()}break;case 58:return cc;case 59:return lc;case 60:if(33===this.peekCodePoint(0)&&45===this.peekCodePoint(1)&&45===this.peekCodePoint(2))return this.consumeCodePoint(),this.consumeCodePoint(),ac;break;case 64:var c=this.peekCodePoint(0),l=this.peekCodePoint(1),f=this.peekCodePoint(2);if(Ju(c,l,f)){o=this.consumeName();return{type:$a.AT_KEYWORD_TOKEN,value:o}}break;case 91:return fc;case 92:if(Xu(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case 93:return hc;case 61:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Zu;break;case 123:return nc;case 125:return rc;case 117:case 85:var h=this.peekCodePoint(0),B=this.peekCodePoint(1);return 43!==h||!Du(B)&&63!==B||(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case 124:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),tc;if(124===this.peekCodePoint(0))return this.consumeCodePoint(),Ac;break;case 126:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),ec;break;case-1:return pc}return ku(A)?(this.consumeWhiteSpace(),Bc):Mu(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):Pu(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:$a.DELIM_TOKEN,value:Da(A)}},A.prototype.consumeCodePoint=function(){var A=this._value.shift();return void 0===A?-1:A},A.prototype.reconsumeCodePoint=function(A){this._value.unshift(A)},A.prototype.peekCodePoint=function(A){return A>=this._value.length?-1:this._value[A]},A.prototype.consumeUnicodeRangeToken=function(){for(var A=[],t=this.consumeCodePoint();Du(t)&&A.length<6;)A.push(t),t=this.consumeCodePoint();for(var e=!1;63===t&&A.length<6;)A.push(t),t=this.consumeCodePoint(),e=!0;if(e){var n=parseInt(Da.apply(void 0,A.map((function(A){return 63===A?48:A}))),16),r=parseInt(Da.apply(void 0,A.map((function(A){return 63===A?70:A}))),16);return{type:$a.UNICODE_RANGE_TOKEN,start:n,end:r}}var o=parseInt(Da.apply(void 0,A),16);if(45===this.peekCodePoint(0)&&Du(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];Du(t)&&i.length<6;)i.push(t),t=this.consumeCodePoint();r=parseInt(Da.apply(void 0,i),16);return{type:$a.UNICODE_RANGE_TOKEN,start:o,end:r}}return{type:$a.UNICODE_RANGE_TOKEN,start:o,end:o}},A.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return"url"===A.toLowerCase()&&40===this.peekCodePoint(0)?(this.consumeCodePoint(),this.consumeUrlToken()):40===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:$a.FUNCTION_TOKEN,value:A}):{type:$a.IDENT_TOKEN,value:A}},A.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),-1===this.peekCodePoint(0))return{type:$a.URL_TOKEN,value:""};var t=this.peekCodePoint(0);if(39===t||34===t){var e=this.consumeStringToken(this.consumeCodePoint());return e.type===$a.STRING_TOKEN&&(this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0))?(this.consumeCodePoint(),{type:$a.URL_TOKEN,value:e.value}):(this.consumeBadUrlRemnants(),ic)}for(;;){var n=this.consumeCodePoint();if(-1===n||41===n)return{type:$a.URL_TOKEN,value:Da.apply(void 0,A)};if(ku(n))return this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:$a.URL_TOKEN,value:Da.apply(void 0,A)}):(this.consumeBadUrlRemnants(),ic);if(34===n||39===n||40===n||Vu(n))return this.consumeBadUrlRemnants(),ic;if(92===n){if(!Xu(n,this.peekCodePoint(0)))return this.consumeBadUrlRemnants(),ic;A.push(this.consumeEscapedCodePoint())}else A.push(n)}},A.prototype.consumeWhiteSpace=function(){for(;ku(this.peekCodePoint(0));)this.consumeCodePoint()},A.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(41===A||-1===A)return;Xu(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},A.prototype.consumeStringSlice=function(A){for(var t="";A>0;){var e=Math.min(6e4,A);t+=Da.apply(void 0,this._value.splice(0,e)),A-=e}return this._value.shift(),t},A.prototype.consumeStringToken=function(A){for(var t="",e=0;;){var n=this._value[e];if(-1===n||void 0===n||n===A)return t+=this.consumeStringSlice(e),{type:$a.STRING_TOKEN,value:t};if(10===n)return this._value.splice(0,e),sc;if(92===n){var r=this._value[e+1];-1!==r&&void 0!==r&&(10===r?(t+=this.consumeStringSlice(e),e=-1,this._value.shift()):Xu(n,r)&&(t+=this.consumeStringSlice(e),t+=Da(this.consumeEscapedCodePoint()),e=-1))}e++}},A.prototype.consumeNumber=function(){var A=[],t=4,e=this.peekCodePoint(0);for(43!==e&&45!==e||A.push(this.consumeCodePoint());Mu(this.peekCodePoint(0));)A.push(this.consumeCodePoint());e=this.peekCodePoint(0);var n=this.peekCodePoint(1);if(46===e&&Mu(n))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=8;Mu(this.peekCodePoint(0));)A.push(this.consumeCodePoint());e=this.peekCodePoint(0),n=this.peekCodePoint(1);var r=this.peekCodePoint(2);if((69===e||101===e)&&((43===n||45===n)&&Mu(r)||Mu(n)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=8;Mu(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[ju(A),t]},A.prototype.consumeNumericToken=function(){var A=this.consumeNumber(),t=A[0],e=A[1],n=this.peekCodePoint(0),r=this.peekCodePoint(1),o=this.peekCodePoint(2);if(Ju(n,r,o)){var i=this.consumeName();return{type:$a.DIMENSION_TOKEN,number:t,flags:e,unit:i}}return 37===n?(this.consumeCodePoint(),{type:$a.PERCENTAGE_TOKEN,number:t,flags:e}):{type:$a.NUMBER_TOKEN,number:t,flags:e}},A.prototype.consumeEscapedCodePoint=function(){var A=this.consumeCodePoint();if(Du(A)){for(var t=Da(A);Du(this.peekCodePoint(0))&&t.length<6;)t+=Da(this.consumeCodePoint());ku(this.peekCodePoint(0))&&this.consumeCodePoint();var e=parseInt(t,16);return 0===e||function(A){return A>=55296&&A<=57343}(e)||e>1114111?65533:e}return-1===A?65533:A},A.prototype.consumeName=function(){for(var A="";;){var t=this.consumeCodePoint();if(zu(t))A+=Da(t);else{if(!Xu(t,this.peekCodePoint(0)))return this.reconsumeCodePoint(t),A;A+=Da(this.consumeEscapedCodePoint())}}},A}(),dc=function(){function A(A){this._tokens=A}return A.create=function(t){var e=new gc;return e.write(t),new A(e.read())},A.parseValue=function(t){return A.create(t).parseComponentValue()},A.parseValues=function(t){return A.create(t).parseComponentValues()},A.prototype.parseComponentValue=function(){for(var A=this.consumeToken();A.type===$a.WHITESPACE_TOKEN;)A=this.consumeToken();if(A.type===$a.EOF_TOKEN)throw new SyntaxError("Error parsing CSS component value, unexpected EOF");this.reconsumeToken(A);var t=this.consumeComponentValue();do{A=this.consumeToken()}while(A.type===$a.WHITESPACE_TOKEN);if(A.type===$a.EOF_TOKEN)return t;throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one")},A.prototype.parseComponentValues=function(){for(var A=[];;){var t=this.consumeComponentValue();if(t.type===$a.EOF_TOKEN)return A;A.push(t),A.push()}},A.prototype.consumeComponentValue=function(){var A=this.consumeToken();switch(A.type){case $a.LEFT_CURLY_BRACKET_TOKEN:case $a.LEFT_SQUARE_BRACKET_TOKEN:case $a.LEFT_PARENTHESIS_TOKEN:return this.consumeSimpleBlock(A.type);case $a.FUNCTION_TOKEN:return this.consumeFunction(A)}return A},A.prototype.consumeSimpleBlock=function(A){for(var t={type:A,values:[]},e=this.consumeToken();;){if(e.type===$a.EOF_TOKEN||mc(e,A))return t;this.reconsumeToken(e),t.values.push(this.consumeComponentValue()),e=this.consumeToken()}},A.prototype.consumeFunction=function(A){for(var t={name:A.value,values:[],type:$a.FUNCTION};;){var e=this.consumeToken();if(e.type===$a.EOF_TOKEN||e.type===$a.RIGHT_PARENTHESIS_TOKEN)return t;this.reconsumeToken(e),t.values.push(this.consumeComponentValue())}},A.prototype.consumeToken=function(){var A=this._tokens.shift();return void 0===A?pc:A},A.prototype.reconsumeToken=function(A){this._tokens.unshift(A)},A}(),wc=function(A){return A.type===$a.DIMENSION_TOKEN},Qc=function(A){return A.type===$a.NUMBER_TOKEN},vc=function(A){return A.type===$a.IDENT_TOKEN},Uc=function(A){return A.type===$a.STRING_TOKEN},Cc=function(A,t){return vc(A)&&A.value===t},Ec=function(A){return A.type!==$a.WHITESPACE_TOKEN},yc=function(A){return A.type!==$a.WHITESPACE_TOKEN&&A.type!==$a.COMMA_TOKEN},Fc=function(A){var t=[],e=[];return A.forEach((function(A){if(A.type===$a.COMMA_TOKEN){if(0===e.length)throw new Error("Error parsing function args, zero tokens for arg");return t.push(e),void(e=[])}A.type!==$a.WHITESPACE_TOKEN&&e.push(A)})),e.length&&t.push(e),t},mc=function(A,t){return t===$a.LEFT_CURLY_BRACKET_TOKEN&&A.type===$a.RIGHT_CURLY_BRACKET_TOKEN||(t===$a.LEFT_SQUARE_BRACKET_TOKEN&&A.type===$a.RIGHT_SQUARE_BRACKET_TOKEN||t===$a.LEFT_PARENTHESIS_TOKEN&&A.type===$a.RIGHT_PARENTHESIS_TOKEN)},_c=function(A){return A.type===$a.NUMBER_TOKEN||A.type===$a.DIMENSION_TOKEN},Hc=function(A){return A.type===$a.PERCENTAGE_TOKEN||_c(A)},bc=function(A){return A.length>1?[A[0],A[1]]:[A[0]]},Nc={type:$a.NUMBER_TOKEN,number:0,flags:4},Kc={type:$a.PERCENTAGE_TOKEN,number:50,flags:4},Ic={type:$a.PERCENTAGE_TOKEN,number:100,flags:4},Oc=function(A,t,e){var n=A[0],r=A[1];return[Tc(n,t),Tc(void 0!==r?r:n,e)]},Tc=function(A,t){if(A.type===$a.PERCENTAGE_TOKEN)return A.number/100*t;if(wc(A))switch(A.unit){case"rem":case"em":return 16*A.number;case"px":default:return A.number}return A.number},xc=function(A){if(A.type===$a.DIMENSION_TOKEN)switch(A.unit){case"deg":return Math.PI*A.number/180;case"grad":return Math.PI/200*A.number;case"rad":return A.number;case"turn":return 2*Math.PI*A.number}throw new Error("Unsupported angle type")},Sc=function(A){return A.type===$a.DIMENSION_TOKEN&&("deg"===A.unit||"grad"===A.unit||"rad"===A.unit||"turn"===A.unit)},Rc=function(A){switch(A.filter(vc).map((function(A){return A.value})).join(" ")){case"to bottom right":case"to right bottom":case"left top":case"top left":return[Nc,Nc];case"to top":case"bottom":return Lc(0);case"to bottom left":case"to left bottom":case"right top":case"top right":return[Nc,Ic];case"to right":case"left":return Lc(90);case"to top left":case"to left top":case"right bottom":case"bottom right":return[Ic,Ic];case"to bottom":case"top":return Lc(180);case"to top right":case"to right top":case"left bottom":case"bottom left":return[Ic,Nc];case"to left":case"right":return Lc(270)}return 0},Lc=function(A){return Math.PI*A/180},Mc=function(A){if(A.type===$a.FUNCTION){var t=qc[A.name];if(void 0===t)throw new Error('Attempting to parse an unsupported color function "'+A.name+'"');return t(A.values)}if(A.type===$a.HASH_TOKEN){if(3===A.value.length){var e=A.value.substring(0,1),n=A.value.substring(1,2),r=A.value.substring(2,3);return Pc(parseInt(e+e,16),parseInt(n+n,16),parseInt(r+r,16),1)}if(4===A.value.length){e=A.value.substring(0,1),n=A.value.substring(1,2),r=A.value.substring(2,3);var o=A.value.substring(3,4);return Pc(parseInt(e+e,16),parseInt(n+n,16),parseInt(r+r,16),parseInt(o+o,16)/255)}if(6===A.value.length){e=A.value.substring(0,2),n=A.value.substring(2,4),r=A.value.substring(4,6);return Pc(parseInt(e,16),parseInt(n,16),parseInt(r,16),1)}if(8===A.value.length){e=A.value.substring(0,2),n=A.value.substring(2,4),r=A.value.substring(4,6),o=A.value.substring(6,8);return Pc(parseInt(e,16),parseInt(n,16),parseInt(r,16),parseInt(o,16)/255)}}if(A.type===$a.IDENT_TOKEN){var i=$c[A.value.toUpperCase()];if(void 0!==i)return i}return $c.TRANSPARENT},Dc=function(A){return 0==(255&A)},kc=function(A){var t=255&A,e=255&A>>8,n=255&A>>16,r=255&A>>24;return t<255?"rgba("+r+","+n+","+e+","+t/255+")":"rgb("+r+","+n+","+e+")"},Pc=function(A,t,e,n){return(A<<24|t<<16|e<<8|Math.round(255*n)<<0)>>>0},zc=function(A,t){if(A.type===$a.NUMBER_TOKEN)return A.number;if(A.type===$a.PERCENTAGE_TOKEN){var e=3===t?1:255;return 3===t?A.number/100*e:Math.round(A.number/100*e)}return 0},Vc=function(A){var t=A.filter(yc);if(3===t.length){var e=t.map(zc),n=e[0],r=e[1],o=e[2];return Pc(n,r,o,1)}if(4===t.length){var i=t.map(zc),s=(n=i[0],r=i[1],o=i[2],i[3]);return Pc(n,r,o,s)}return 0};function Xc(A,t,e){return e<0&&(e+=1),e>=1&&(e-=1),e<1/6?(t-A)*e*6+A:e<.5?t:e<2/3?6*(t-A)*(2/3-e)+A:A}var Jc,Gc,jc,Wc,Yc=function(A){var t=A.filter(yc),e=t[0],n=t[1],r=t[2],o=t[3],i=(e.type===$a.NUMBER_TOKEN?Lc(e.number):xc(e))/(2*Math.PI),s=Hc(n)?n.number/100:0,a=Hc(r)?r.number/100:0,u=void 0!==o&&Hc(o)?Tc(o,1):1;if(0===s)return Pc(255*a,255*a,255*a,1);var c=a<=.5?a*(s+1):a+s-a*s,l=2*a-c,f=Xc(l,c,i+1/3),h=Xc(l,c,i),B=Xc(l,c,i-1/3);return Pc(255*f,255*h,255*B,u)},qc={hsl:Yc,hsla:Yc,rgb:Vc,rgba:Vc},$c={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199};(Gc=Jc||(Jc={}))[Gc.VALUE=0]="VALUE",Gc[Gc.LIST=1]="LIST",Gc[Gc.IDENT_VALUE=2]="IDENT_VALUE",Gc[Gc.TYPE_VALUE=3]="TYPE_VALUE",Gc[Gc.TOKEN_VALUE=4]="TOKEN_VALUE",(Wc=jc||(jc={}))[Wc.BORDER_BOX=0]="BORDER_BOX",Wc[Wc.PADDING_BOX=1]="PADDING_BOX",Wc[Wc.CONTENT_BOX=2]="CONTENT_BOX";var Zc,Al,tl={name:"background-clip",initialValue:"border-box",prefix:!1,type:Jc.LIST,parse:function(A){return A.map((function(A){if(vc(A))switch(A.value){case"padding-box":return jc.PADDING_BOX;case"content-box":return jc.CONTENT_BOX}return jc.BORDER_BOX}))}},el={name:"background-color",initialValue:"transparent",prefix:!1,type:Jc.TYPE_VALUE,format:"color"},nl=function(A){var t=Mc(A[0]),e=A[1];return e&&Hc(e)?{color:t,stop:e}:{color:t,stop:null}},rl=function(A,t){var e=A[0],n=A[A.length-1];null===e.stop&&(e.stop=Nc),null===n.stop&&(n.stop=Ic);for(var r=[],o=0,i=0;io?r.push(a):r.push(o),o=a}else r.push(null)}var u=null;for(i=0;iA.optimumDistance)?{optimumCorner:t,optimumDistance:s}:A}),{optimumDistance:r?1/0:-1/0,optimumCorner:null}).optimumCorner},al=function(A){var t=Lc(180),e=[];return Fc(A).forEach((function(A,n){if(0===n){var r=A[0];if(r.type===$a.IDENT_TOKEN&&-1!==["top","left","right","bottom"].indexOf(r.value))return void(t=Rc(A));if(Sc(r))return void(t=(xc(r)+Lc(270))%Lc(360))}var o=nl(A);e.push(o)})),{angle:t,stops:e,type:Zc.LINEAR_GRADIENT}},ul=function(A){return 0===A[0]&&255===A[1]&&0===A[2]&&255===A[3]},cl=function(A,t,e,n,r){var o="http://www.w3.org/2000/svg",i=document.createElementNS(o,"svg"),s=document.createElementNS(o,"foreignObject");return i.setAttributeNS(null,"width",A.toString()),i.setAttributeNS(null,"height",t.toString()),s.setAttributeNS(null,"width","100%"),s.setAttributeNS(null,"height","100%"),s.setAttributeNS(null,"x",e.toString()),s.setAttributeNS(null,"y",n.toString()),s.setAttributeNS(null,"externalResourcesRequired","true"),i.appendChild(s),s.appendChild(r),i},ll=function(A){return new Promise((function(t,e){var n=new Image;n.onload=function(){return t(n)},n.onerror=e,n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent((new XMLSerializer).serializeToString(A))}))},fl={get SUPPORT_RANGE_BOUNDS(){var A=function(A){if(A.createRange){var t=A.createRange();if(t.getBoundingClientRect){var e=A.createElement("boundtest");e.style.height="123px",e.style.display="block",A.body.appendChild(e),t.selectNode(e);var n=t.getBoundingClientRect(),r=Math.round(n.height);if(A.body.removeChild(e),123===r)return!0}}return!1}(document);return Object.defineProperty(fl,"SUPPORT_RANGE_BOUNDS",{value:A}),A},get SUPPORT_SVG_DRAWING(){var A=function(A){var t=new Image,e=A.createElement("canvas"),n=e.getContext("2d");if(!n)return!1;t.src="data:image/svg+xml,";try{n.drawImage(t,0,0),e.toDataURL()}catch(r){return!1}return!0}(document);return Object.defineProperty(fl,"SUPPORT_SVG_DRAWING",{value:A}),A},get SUPPORT_FOREIGNOBJECT_DRAWING(){var A="function"==typeof Array.from&&"function"==typeof window.fetch?function(A){var t=A.createElement("canvas"),e=100;t.width=e,t.height=e;var n=t.getContext("2d");if(!n)return Promise.reject(!1);n.fillStyle="rgb(0, 255, 0)",n.fillRect(0,0,e,e);var r=new Image,o=t.toDataURL();r.src=o;var i=cl(e,e,0,0,r);return n.fillStyle="red",n.fillRect(0,0,e,e),ll(i).then((function(t){n.drawImage(t,0,0);var r=n.getImageData(0,0,e,e).data;n.fillStyle="red",n.fillRect(0,0,e,e);var i=A.createElement("div");return i.style.backgroundImage="url("+o+")",i.style.height="100px",ul(r)?ll(cl(e,e,0,0,i)):Promise.reject(!1)})).then((function(A){return n.drawImage(A,0,0),ul(n.getImageData(0,0,e,e).data)})).catch((function(){return!1}))}(document):Promise.resolve(!1);return Object.defineProperty(fl,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:A}),A},get SUPPORT_CORS_IMAGES(){var A=void 0!==(new Image).crossOrigin;return Object.defineProperty(fl,"SUPPORT_CORS_IMAGES",{value:A}),A},get SUPPORT_RESPONSE_TYPE(){var A="string"==typeof(new XMLHttpRequest).responseType;return Object.defineProperty(fl,"SUPPORT_RESPONSE_TYPE",{value:A}),A},get SUPPORT_CORS_XHR(){var A="withCredentials"in new XMLHttpRequest;return Object.defineProperty(fl,"SUPPORT_CORS_XHR",{value:A}),A}},hl=function(){function A(A){var t=A.id,e=A.enabled;this.id=t,this.enabled=e,this.start=Date.now()}return A.prototype.debug=function(){for(var A=[],t=0;t0&&setTimeout((function(){return t("Timed out ("+o._options.imageTimeout+"ms) loading image")}),o._options.imageTimeout)}))];case 3:return[2,i.sent()]}}))}))},A.prototype.has=function(A){return void 0!==this._cache[A]},A.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},A.prototype.proxy=function(A){var t=this,e=this._options.proxy;if(!e)throw new Error("No proxy defined");var n=A.substring(0,256);return new Promise((function(r,o){var i=fl.SUPPORT_RESPONSE_TYPE?"blob":"text",s=new XMLHttpRequest;if(s.onload=function(){if(200===s.status)if("text"===i)r(s.response);else{var A=new FileReader;A.addEventListener("load",(function(){return r(A.result)}),!1),A.addEventListener("error",(function(A){return o(A)}),!1),A.readAsDataURL(s.response)}else o("Failed to proxy resource "+n+" with status code "+s.status)},s.onerror=o,s.open("GET",e+"?url="+encodeURIComponent(A)+"&responseType="+i),"text"!==i&&s instanceof XMLHttpRequest&&(s.responseType=i),t._options.imageTimeout){var a=t._options.imageTimeout;s.timeout=a,s.ontimeout=function(){return o("Timed out ("+a+"ms) proxying "+n)}}s.send()}))},A}(),gl=/^data:image\/svg\+xml/i,dl=/^data:image\/.*;base64,/i,wl=/^data:image\/.*/i,Ql=function(A){return fl.SUPPORT_SVG_DRAWING||!El(A)},vl=function(A){return wl.test(A)},Ul=function(A){return dl.test(A)},Cl=function(A){return"blob"===A.substr(0,4)},El=function(A){return"svg"===A.substr(-3).toLowerCase()||gl.test(A)},yl=function(A){var t=Fl.CIRCLE,e=_l.FARTHEST_CORNER,n=[],r=[];return Fc(A).forEach((function(A,o){var i=!0;if(0===o?i=A.reduce((function(A,t){if(vc(t))switch(t.value){case"center":return r.push(Kc),!1;case"top":case"left":return r.push(Nc),!1;case"right":case"bottom":return r.push(Ic),!1}else if(Hc(t)||_c(t))return r.push(t),!1;return A}),i):1===o&&(i=A.reduce((function(A,n){if(vc(n))switch(n.value){case"circle":return t=Fl.CIRCLE,!1;case"ellipse":return t=Fl.ELLIPSE,!1;case"contain":case"closest-side":return e=_l.CLOSEST_SIDE,!1;case"farthest-side":return e=_l.FARTHEST_SIDE,!1;case"closest-corner":return e=_l.CLOSEST_CORNER,!1;case"cover":case"farthest-corner":return e=_l.FARTHEST_CORNER,!1}else if(_c(n)||Hc(n))return Array.isArray(e)||(e=[]),e.push(n),!1;return A}),i)),i){var s=nl(A);n.push(s)}})),{size:e,shape:t,stops:n,position:r,type:Zc.RADIAL_GRADIENT}};(Al=Zc||(Zc={}))[Al.URL=0]="URL",Al[Al.LINEAR_GRADIENT=1]="LINEAR_GRADIENT",Al[Al.RADIAL_GRADIENT=2]="RADIAL_GRADIENT";var Fl,ml,_l,Hl;(ml=Fl||(Fl={}))[ml.CIRCLE=0]="CIRCLE",ml[ml.ELLIPSE=1]="ELLIPSE",(Hl=_l||(_l={}))[Hl.CLOSEST_SIDE=0]="CLOSEST_SIDE",Hl[Hl.FARTHEST_SIDE=1]="FARTHEST_SIDE",Hl[Hl.CLOSEST_CORNER=2]="CLOSEST_CORNER",Hl[Hl.FARTHEST_CORNER=3]="FARTHEST_CORNER";var bl=function(A){if(A.type===$a.URL_TOKEN){var t={url:A.value,type:Zc.URL};return Bl.getInstance().addImage(A.value),t}if(A.type===$a.FUNCTION){var e=Il[A.name];if(void 0===e)throw new Error('Attempting to parse an unsupported image function "'+A.name+'"');return e(A.values)}throw new Error("Unsupported image type")};var Nl,Kl,Il={"linear-gradient":function(A){var t=Lc(180),e=[];return Fc(A).forEach((function(A,n){if(0===n){var r=A[0];if(r.type===$a.IDENT_TOKEN&&"to"===r.value)return void(t=Rc(A));if(Sc(r))return void(t=xc(r))}var o=nl(A);e.push(o)})),{angle:t,stops:e,type:Zc.LINEAR_GRADIENT}},"-moz-linear-gradient":al,"-ms-linear-gradient":al,"-o-linear-gradient":al,"-webkit-linear-gradient":al,"radial-gradient":function(A){var t=Fl.CIRCLE,e=_l.FARTHEST_CORNER,n=[],r=[];return Fc(A).forEach((function(A,o){var i=!0;if(0===o){var s=!1;i=A.reduce((function(A,n){if(s)if(vc(n))switch(n.value){case"center":return r.push(Kc),A;case"top":case"left":return r.push(Nc),A;case"right":case"bottom":return r.push(Ic),A}else(Hc(n)||_c(n))&&r.push(n);else if(vc(n))switch(n.value){case"circle":return t=Fl.CIRCLE,!1;case"ellipse":return t=Fl.ELLIPSE,!1;case"at":return s=!0,!1;case"closest-side":return e=_l.CLOSEST_SIDE,!1;case"cover":case"farthest-side":return e=_l.FARTHEST_SIDE,!1;case"contain":case"closest-corner":return e=_l.CLOSEST_CORNER,!1;case"farthest-corner":return e=_l.FARTHEST_CORNER,!1}else if(_c(n)||Hc(n))return Array.isArray(e)||(e=[]),e.push(n),!1;return A}),i)}if(i){var a=nl(A);n.push(a)}})),{size:e,shape:t,stops:n,position:r,type:Zc.RADIAL_GRADIENT}},"-moz-radial-gradient":yl,"-ms-radial-gradient":yl,"-o-radial-gradient":yl,"-webkit-radial-gradient":yl,"-webkit-gradient":function(A){var t=Lc(180),e=[],n=Zc.LINEAR_GRADIENT,r=Fl.CIRCLE,o=_l.FARTHEST_CORNER;return Fc(A).forEach((function(A,t){var r=A[0];if(0===t){if(vc(r)&&"linear"===r.value)return void(n=Zc.LINEAR_GRADIENT);if(vc(r)&&"radial"===r.value)return void(n=Zc.RADIAL_GRADIENT)}if(r.type===$a.FUNCTION)if("from"===r.name){var o=Mc(r.values[0]);e.push({stop:Nc,color:o})}else if("to"===r.name){o=Mc(r.values[0]);e.push({stop:Ic,color:o})}else if("color-stop"===r.name){var i=r.values.filter(yc);if(2===i.length){o=Mc(i[1]);var s=i[0];Qc(s)&&e.push({stop:{type:$a.PERCENTAGE_TOKEN,number:100*s.number,flags:s.flags},color:o})}}})),n===Zc.LINEAR_GRADIENT?{angle:(t+Lc(180))%Lc(360),stops:e,type:n}:{size:o,shape:r,stops:e,position:[],type:n}}},Ol={name:"background-image",initialValue:"none",type:Jc.LIST,prefix:!1,parse:function(A){if(0===A.length)return[];var t=A[0];return t.type===$a.IDENT_TOKEN&&"none"===t.value?[]:A.filter((function(A){return yc(A)&&function(A){return A.type!==$a.FUNCTION||Il[A.name]}(A)})).map(bl)}},Tl={name:"background-origin",initialValue:"border-box",prefix:!1,type:Jc.LIST,parse:function(A){return A.map((function(A){if(vc(A))switch(A.value){case"padding-box":return 1;case"content-box":return 2}return 0}))}},xl={name:"background-position",initialValue:"0% 0%",type:Jc.LIST,prefix:!1,parse:function(A){return Fc(A).map((function(A){return A.filter(Hc)})).map(bc)}};(Kl=Nl||(Nl={}))[Kl.REPEAT=0]="REPEAT",Kl[Kl.NO_REPEAT=1]="NO_REPEAT",Kl[Kl.REPEAT_X=2]="REPEAT_X",Kl[Kl.REPEAT_Y=3]="REPEAT_Y";var Sl,Rl,Ll={name:"background-repeat",initialValue:"repeat",prefix:!1,type:Jc.LIST,parse:function(A){return Fc(A).map((function(A){return A.filter(vc).map((function(A){return A.value})).join(" ")})).map(Ml)}},Ml=function(A){switch(A){case"no-repeat":return Nl.NO_REPEAT;case"repeat-x":case"repeat no-repeat":return Nl.REPEAT_X;case"repeat-y":case"no-repeat repeat":return Nl.REPEAT_Y;case"repeat":default:return Nl.REPEAT}};(Rl=Sl||(Sl={})).AUTO="auto",Rl.CONTAIN="contain",Rl.COVER="cover";var Dl,kl,Pl={name:"background-size",initialValue:"0",prefix:!1,type:Jc.LIST,parse:function(A){return Fc(A).map((function(A){return A.filter(zl)}))}},zl=function(A){return vc(A)||Hc(A)},Vl=function(A){return{name:"border-"+A+"-color",initialValue:"transparent",prefix:!1,type:Jc.TYPE_VALUE,format:"color"}},Xl=Vl("top"),Jl=Vl("right"),Gl=Vl("bottom"),jl=Vl("left"),Wl=function(A){return{name:"border-radius-"+A,initialValue:"0 0",prefix:!1,type:Jc.LIST,parse:function(A){return bc(A.filter(Hc))}}},Yl=Wl("top-left"),ql=Wl("top-right"),$l=Wl("bottom-right"),Zl=Wl("bottom-left");(kl=Dl||(Dl={}))[kl.NONE=0]="NONE",kl[kl.SOLID=1]="SOLID";var Af,tf,ef=function(A){return{name:"border-"+A+"-style",initialValue:"solid",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"none":return Dl.NONE}return Dl.SOLID}}},nf=ef("top"),rf=ef("right"),of=ef("bottom"),sf=ef("left"),af=function(A){return{name:"border-"+A+"-width",initialValue:"0",type:Jc.VALUE,prefix:!1,parse:function(A){return wc(A)?A.number:0}}},uf=af("top"),cf=af("right"),lf=af("bottom"),ff=af("left"),hf={name:"color",initialValue:"transparent",prefix:!1,type:Jc.TYPE_VALUE,format:"color"},Bf={name:"display",initialValue:"inline-block",prefix:!1,type:Jc.LIST,parse:function(A){return A.filter(vc).reduce((function(A,t){return A|pf(t.value)}),0)}},pf=function(A){switch(A){case"block":return 2;case"inline":return 4;case"run-in":return 8;case"flow":return 16;case"flow-root":return 32;case"table":return 64;case"flex":case"-webkit-flex":return 128;case"grid":case"-ms-grid":return 256;case"ruby":return 512;case"subgrid":return 1024;case"list-item":return 2048;case"table-row-group":return 4096;case"table-header-group":return 8192;case"table-footer-group":return 16384;case"table-row":return 32768;case"table-cell":return 65536;case"table-column-group":return 131072;case"table-column":return 262144;case"table-caption":return 524288;case"ruby-base":return 1048576;case"ruby-text":return 2097152;case"ruby-base-container":return 4194304;case"ruby-text-container":return 8388608;case"contents":return 16777216;case"inline-block":return 33554432;case"inline-list-item":return 67108864;case"inline-table":return 134217728;case"inline-flex":return 268435456;case"inline-grid":return 536870912}return 0};(tf=Af||(Af={}))[tf.NONE=0]="NONE",tf[tf.LEFT=1]="LEFT",tf[tf.RIGHT=2]="RIGHT",tf[tf.INLINE_START=3]="INLINE_START",tf[tf.INLINE_END=4]="INLINE_END";var gf,df,wf={name:"float",initialValue:"none",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"left":return Af.LEFT;case"right":return Af.RIGHT;case"inline-start":return Af.INLINE_START;case"inline-end":return Af.INLINE_END}return Af.NONE}},Qf={name:"letter-spacing",initialValue:"0",prefix:!1,type:Jc.VALUE,parse:function(A){return A.type===$a.IDENT_TOKEN&&"normal"===A.value?0:A.type===$a.NUMBER_TOKEN||A.type===$a.DIMENSION_TOKEN?A.number:0}};(df=gf||(gf={})).NORMAL="normal",df.STRICT="strict";var vf,Uf,Cf={name:"line-break",initialValue:"normal",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"strict":return gf.STRICT;case"normal":default:return gf.NORMAL}}},Ef={name:"line-height",initialValue:"normal",prefix:!1,type:Jc.TOKEN_VALUE},yf={name:"list-style-image",initialValue:"none",type:Jc.VALUE,prefix:!1,parse:function(A){return A.type===$a.IDENT_TOKEN&&"none"===A.value?null:bl(A)}};(Uf=vf||(vf={}))[Uf.INSIDE=0]="INSIDE",Uf[Uf.OUTSIDE=1]="OUTSIDE";var Ff,mf,_f={name:"list-style-position",initialValue:"outside",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"inside":return vf.INSIDE;case"outside":default:return vf.OUTSIDE}}};(mf=Ff||(Ff={}))[mf.NONE=-1]="NONE",mf[mf.DISC=0]="DISC",mf[mf.CIRCLE=1]="CIRCLE",mf[mf.SQUARE=2]="SQUARE",mf[mf.DECIMAL=3]="DECIMAL",mf[mf.CJK_DECIMAL=4]="CJK_DECIMAL",mf[mf.DECIMAL_LEADING_ZERO=5]="DECIMAL_LEADING_ZERO",mf[mf.LOWER_ROMAN=6]="LOWER_ROMAN",mf[mf.UPPER_ROMAN=7]="UPPER_ROMAN",mf[mf.LOWER_GREEK=8]="LOWER_GREEK",mf[mf.LOWER_ALPHA=9]="LOWER_ALPHA",mf[mf.UPPER_ALPHA=10]="UPPER_ALPHA",mf[mf.ARABIC_INDIC=11]="ARABIC_INDIC",mf[mf.ARMENIAN=12]="ARMENIAN",mf[mf.BENGALI=13]="BENGALI",mf[mf.CAMBODIAN=14]="CAMBODIAN",mf[mf.CJK_EARTHLY_BRANCH=15]="CJK_EARTHLY_BRANCH",mf[mf.CJK_HEAVENLY_STEM=16]="CJK_HEAVENLY_STEM",mf[mf.CJK_IDEOGRAPHIC=17]="CJK_IDEOGRAPHIC",mf[mf.DEVANAGARI=18]="DEVANAGARI",mf[mf.ETHIOPIC_NUMERIC=19]="ETHIOPIC_NUMERIC",mf[mf.GEORGIAN=20]="GEORGIAN",mf[mf.GUJARATI=21]="GUJARATI",mf[mf.GURMUKHI=22]="GURMUKHI",mf[mf.HEBREW=22]="HEBREW",mf[mf.HIRAGANA=23]="HIRAGANA",mf[mf.HIRAGANA_IROHA=24]="HIRAGANA_IROHA",mf[mf.JAPANESE_FORMAL=25]="JAPANESE_FORMAL",mf[mf.JAPANESE_INFORMAL=26]="JAPANESE_INFORMAL",mf[mf.KANNADA=27]="KANNADA",mf[mf.KATAKANA=28]="KATAKANA",mf[mf.KATAKANA_IROHA=29]="KATAKANA_IROHA",mf[mf.KHMER=30]="KHMER",mf[mf.KOREAN_HANGUL_FORMAL=31]="KOREAN_HANGUL_FORMAL",mf[mf.KOREAN_HANJA_FORMAL=32]="KOREAN_HANJA_FORMAL",mf[mf.KOREAN_HANJA_INFORMAL=33]="KOREAN_HANJA_INFORMAL",mf[mf.LAO=34]="LAO",mf[mf.LOWER_ARMENIAN=35]="LOWER_ARMENIAN",mf[mf.MALAYALAM=36]="MALAYALAM",mf[mf.MONGOLIAN=37]="MONGOLIAN",mf[mf.MYANMAR=38]="MYANMAR",mf[mf.ORIYA=39]="ORIYA",mf[mf.PERSIAN=40]="PERSIAN",mf[mf.SIMP_CHINESE_FORMAL=41]="SIMP_CHINESE_FORMAL",mf[mf.SIMP_CHINESE_INFORMAL=42]="SIMP_CHINESE_INFORMAL",mf[mf.TAMIL=43]="TAMIL",mf[mf.TELUGU=44]="TELUGU",mf[mf.THAI=45]="THAI",mf[mf.TIBETAN=46]="TIBETAN",mf[mf.TRAD_CHINESE_FORMAL=47]="TRAD_CHINESE_FORMAL",mf[mf.TRAD_CHINESE_INFORMAL=48]="TRAD_CHINESE_INFORMAL",mf[mf.UPPER_ARMENIAN=49]="UPPER_ARMENIAN",mf[mf.DISCLOSURE_OPEN=50]="DISCLOSURE_OPEN",mf[mf.DISCLOSURE_CLOSED=51]="DISCLOSURE_CLOSED";var Hf,bf,Nf={name:"list-style-type",initialValue:"none",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"disc":return Ff.DISC;case"circle":return Ff.CIRCLE;case"square":return Ff.SQUARE;case"decimal":return Ff.DECIMAL;case"cjk-decimal":return Ff.CJK_DECIMAL;case"decimal-leading-zero":return Ff.DECIMAL_LEADING_ZERO;case"lower-roman":return Ff.LOWER_ROMAN;case"upper-roman":return Ff.UPPER_ROMAN;case"lower-greek":return Ff.LOWER_GREEK;case"lower-alpha":return Ff.LOWER_ALPHA;case"upper-alpha":return Ff.UPPER_ALPHA;case"arabic-indic":return Ff.ARABIC_INDIC;case"armenian":return Ff.ARMENIAN;case"bengali":return Ff.BENGALI;case"cambodian":return Ff.CAMBODIAN;case"cjk-earthly-branch":return Ff.CJK_EARTHLY_BRANCH;case"cjk-heavenly-stem":return Ff.CJK_HEAVENLY_STEM;case"cjk-ideographic":return Ff.CJK_IDEOGRAPHIC;case"devanagari":return Ff.DEVANAGARI;case"ethiopic-numeric":return Ff.ETHIOPIC_NUMERIC;case"georgian":return Ff.GEORGIAN;case"gujarati":return Ff.GUJARATI;case"gurmukhi":return Ff.GURMUKHI;case"hebrew":return Ff.HEBREW;case"hiragana":return Ff.HIRAGANA;case"hiragana-iroha":return Ff.HIRAGANA_IROHA;case"japanese-formal":return Ff.JAPANESE_FORMAL;case"japanese-informal":return Ff.JAPANESE_INFORMAL;case"kannada":return Ff.KANNADA;case"katakana":return Ff.KATAKANA;case"katakana-iroha":return Ff.KATAKANA_IROHA;case"khmer":return Ff.KHMER;case"korean-hangul-formal":return Ff.KOREAN_HANGUL_FORMAL;case"korean-hanja-formal":return Ff.KOREAN_HANJA_FORMAL;case"korean-hanja-informal":return Ff.KOREAN_HANJA_INFORMAL;case"lao":return Ff.LAO;case"lower-armenian":return Ff.LOWER_ARMENIAN;case"malayalam":return Ff.MALAYALAM;case"mongolian":return Ff.MONGOLIAN;case"myanmar":return Ff.MYANMAR;case"oriya":return Ff.ORIYA;case"persian":return Ff.PERSIAN;case"simp-chinese-formal":return Ff.SIMP_CHINESE_FORMAL;case"simp-chinese-informal":return Ff.SIMP_CHINESE_INFORMAL;case"tamil":return Ff.TAMIL;case"telugu":return Ff.TELUGU;case"thai":return Ff.THAI;case"tibetan":return Ff.TIBETAN;case"trad-chinese-formal":return Ff.TRAD_CHINESE_FORMAL;case"trad-chinese-informal":return Ff.TRAD_CHINESE_INFORMAL;case"upper-armenian":return Ff.UPPER_ARMENIAN;case"disclosure-open":return Ff.DISCLOSURE_OPEN;case"disclosure-closed":return Ff.DISCLOSURE_CLOSED;case"none":default:return Ff.NONE}}},Kf=function(A){return{name:"margin-"+A,initialValue:"0",prefix:!1,type:Jc.TOKEN_VALUE}},If=Kf("top"),Of=Kf("right"),Tf=Kf("bottom"),xf=Kf("left");(bf=Hf||(Hf={}))[bf.VISIBLE=0]="VISIBLE",bf[bf.HIDDEN=1]="HIDDEN",bf[bf.SCROLL=2]="SCROLL",bf[bf.AUTO=3]="AUTO";var Sf,Rf,Lf={name:"overflow",initialValue:"visible",prefix:!1,type:Jc.LIST,parse:function(A){return A.filter(vc).map((function(A){switch(A.value){case"hidden":return Hf.HIDDEN;case"scroll":return Hf.SCROLL;case"auto":return Hf.AUTO;case"visible":default:return Hf.VISIBLE}}))}};(Rf=Sf||(Sf={})).NORMAL="normal",Rf.BREAK_WORD="break-word";var Mf,Df,kf={name:"overflow-wrap",initialValue:"normal",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"break-word":return Sf.BREAK_WORD;case"normal":default:return Sf.NORMAL}}},Pf=function(A){return{name:"padding-"+A,initialValue:"0",prefix:!1,type:Jc.TYPE_VALUE,format:"length-percentage"}},zf=Pf("top"),Vf=Pf("right"),Xf=Pf("bottom"),Jf=Pf("left");(Df=Mf||(Mf={}))[Df.LEFT=0]="LEFT",Df[Df.CENTER=1]="CENTER",Df[Df.RIGHT=2]="RIGHT";var Gf,jf,Wf={name:"text-align",initialValue:"left",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"right":return Mf.RIGHT;case"center":case"justify":return Mf.CENTER;case"left":default:return Mf.LEFT}}};(jf=Gf||(Gf={}))[jf.STATIC=0]="STATIC",jf[jf.RELATIVE=1]="RELATIVE",jf[jf.ABSOLUTE=2]="ABSOLUTE",jf[jf.FIXED=3]="FIXED",jf[jf.STICKY=4]="STICKY";var Yf,qf,$f={name:"position",initialValue:"static",prefix:!1,type:Jc.IDENT_VALUE,parse:function(A){switch(A){case"relative":return Gf.RELATIVE;case"absolute":return Gf.ABSOLUTE;case"fixed":return Gf.FIXED;case"sticky":return Gf.STICKY}return Gf.STATIC}},Zf={name:"text-shadow",initialValue:"none",type:Jc.LIST,prefix:!1,parse:function(A){return 1===A.length&&Cc(A[0],"none")?[]:Fc(A).map((function(A){for(var t={color:$c.TRANSPARENT,offsetX:Nc,offsetY:Nc,blur:Nc},e=0,n=0;n1?1:0],this.overflowWrap=xh(kf,A.overflowWrap),this.paddingTop=xh(zf,A.paddingTop),this.paddingRight=xh(Vf,A.paddingRight),this.paddingBottom=xh(Xf,A.paddingBottom),this.paddingLeft=xh(Jf,A.paddingLeft),this.position=xh($f,A.position),this.textAlign=xh(Wf,A.textAlign),this.textDecorationColor=xh(gh,A.textDecorationColor||A.color),this.textDecorationLine=xh(dh,A.textDecorationLine),this.textShadow=xh(Zf,A.textShadow),this.textTransform=xh(eh,A.textTransform),this.transform=xh(nh,A.transform),this.transformOrigin=xh(sh,A.transformOrigin),this.visibility=xh(ch,A.visibility),this.wordBreak=xh(hh,A.wordBreak),this.zIndex=xh(Bh,A.zIndex)}return A.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===Ah.VISIBLE},A.prototype.isTransparent=function(){return Dc(this.backgroundColor)},A.prototype.isTransformed=function(){return null!==this.transform},A.prototype.isPositioned=function(){return this.position!==Gf.STATIC},A.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},A.prototype.isFloating=function(){return this.float!==Af.NONE},A.prototype.isInlineLevel=function(){return Fh(this.display,4)||Fh(this.display,33554432)||Fh(this.display,268435456)||Fh(this.display,536870912)||Fh(this.display,67108864)||Fh(this.display,134217728)},A}(),Oh=function(A){this.content=xh(mh,A.content),this.quotes=xh(bh,A.quotes)},Th=function(A){this.counterIncrement=xh(_h,A.counterIncrement),this.counterReset=xh(Hh,A.counterReset)},xh=function(A,t){var e=new gc,n=null!=t?t.toString():A.initialValue;e.write(n);var r=new dc(e.read());switch(A.type){case Jc.IDENT_VALUE:var o=r.parseComponentValue();return A.parse(vc(o)?o.value:A.initialValue);case Jc.VALUE:return A.parse(r.parseComponentValue());case Jc.LIST:return A.parse(r.parseComponentValues());case Jc.TOKEN_VALUE:return r.parseComponentValue();case Jc.TYPE_VALUE:switch(A.format){case"angle":return xc(r.parseComponentValue());case"color":return Mc(r.parseComponentValue());case"image":return bl(r.parseComponentValue());case"length":var i=r.parseComponentValue();return _c(i)?i:Nc;case"length-percentage":var s=r.parseComponentValue();return Hc(s)?s:Nc}}throw new Error("Attempting to parse unsupported css format type "+A.format)},Sh=function(A){this.styles=new Ih(window.getComputedStyle(A,null)),this.textNodes=[],this.elements=[],null!==this.styles.transform&&hB(A)&&(A.style.transform="none"),this.bounds=La(A),this.flags=0},Rh=function(A,t){this.text=A,this.bounds=t},Lh=function(A){var t=A.ownerDocument;if(t){var e=t.createElement("html2canvaswrapper");e.appendChild(A.cloneNode(!0));var n=A.parentNode;if(n){n.replaceChild(e,A);var r=La(e);return e.firstChild&&n.replaceChild(e.firstChild,e),r}}return new Ra(0,0,0,0)},Mh=function(A,t,e){var n=A.ownerDocument;if(!n)throw new Error("Node has no owner document");var r=n.createRange();return r.setStart(A,t),r.setEnd(A,t+e),Ra.fromClientRect(r.getBoundingClientRect())},Dh=function(A,t){return 0!==t.letterSpacing?Ma(A).map((function(A){return Da(A)})):kh(A,t)},kh=function(A,t){for(var e,n=function(A,t){var e=Ma(A),n=Ru(e,t),r=n[0],o=n[1],i=n[2],s=e.length,a=0,u=0;return{next:function(){if(u>=s)return{done:!0,value:null};for(var A="×";u0)if(fl.SUPPORT_RANGE_BOUNDS)r.push(new Rh(A,Mh(e,o,A.length)));else{var n=e.splitText(A.length);r.push(new Rh(A,Lh(e))),e=n}else fl.SUPPORT_RANGE_BOUNDS||(e=e.splitText(A.length));o+=A.length})),r}(this.text,t,A)},zh=function(A,t){switch(t){case Yf.LOWERCASE:return A.toLowerCase();case Yf.CAPITALIZE:return A.replace(Vh,Xh);case Yf.UPPERCASE:return A.toUpperCase();default:return A}},Vh=/(^|\s|:|-|\(|\))([a-z])/g,Xh=function(A,t,e){return A.length>0?t+e.toUpperCase():A},Jh=function(A){function t(t){var e=A.call(this,t)||this;return e.src=t.currentSrc||t.src,e.intrinsicWidth=t.naturalWidth,e.intrinsicHeight=t.naturalHeight,Bl.getInstance().addImage(e.src),e}return Oa(t,A),t}(Sh),Gh=function(A){function t(t){var e=A.call(this,t)||this;return e.canvas=t,e.intrinsicWidth=t.width,e.intrinsicHeight=t.height,e}return Oa(t,A),t}(Sh),jh=function(A){function t(t){var e=A.call(this,t)||this,n=new XMLSerializer;return e.svg="data:image/svg+xml,"+encodeURIComponent(n.serializeToString(t)),e.intrinsicWidth=t.width.baseVal.value,e.intrinsicHeight=t.height.baseVal.value,Bl.getInstance().addImage(e.svg),e}return Oa(t,A),t}(Sh),Wh=function(A){function t(t){var e=A.call(this,t)||this;return e.value=t.value,e}return Oa(t,A),t}(Sh),Yh=function(A){function t(t){var e=A.call(this,t)||this;return e.start=t.start,e.reversed="boolean"==typeof t.reversed&&!0===t.reversed,e}return Oa(t,A),t}(Sh),qh=[{type:$a.DIMENSION_TOKEN,flags:0,unit:"px",number:3}],$h=[{type:$a.PERCENTAGE_TOKEN,flags:0,number:50}],Zh="password",AB=function(A){function t(t){var e,n,r,o=A.call(this,t)||this;switch(o.type=t.type.toLowerCase(),o.checked=t.checked,o.value=0===(n=(e=t).type===Zh?new Array(e.value.length+1).join("•"):e.value).length?e.placeholder||"":n,"checkbox"!==o.type&&"radio"!==o.type||(o.styles.backgroundColor=3739148031,o.styles.borderTopColor=o.styles.borderRightColor=o.styles.borderBottomColor=o.styles.borderLeftColor=2779096575,o.styles.borderTopWidth=o.styles.borderRightWidth=o.styles.borderBottomWidth=o.styles.borderLeftWidth=1,o.styles.borderTopStyle=o.styles.borderRightStyle=o.styles.borderBottomStyle=o.styles.borderLeftStyle=Dl.SOLID,o.styles.backgroundClip=[jc.BORDER_BOX],o.styles.backgroundOrigin=[0],o.bounds=(r=o.bounds).width>r.height?new Ra(r.left+(r.width-r.height)/2,r.top,r.height,r.height):r.width0)t.textNodes.push(new Ph(n,t.styles));else if(fB(n)){var o=sB(n);o.styles.isVisible()&&(uB(n,o,e)?o.flags|=4:cB(o.styles)&&(o.flags|=2),-1!==oB.indexOf(n.tagName)&&(o.flags|=8),t.elements.push(o),FB(n)||wB(n)||mB(n)||iB(n,o,e))}},sB=function(A){return UB(A)?new Jh(A):vB(A)?new Gh(A):wB(A)?new jh(A):pB(A)?new Wh(A):gB(A)?new Yh(A):dB(A)?new AB(A):mB(A)?new tB(A):FB(A)?new eB(A):CB(A)?new rB(A):new Sh(A)},aB=function(A){var t=sB(A);return t.flags|=4,iB(A,t,t),t},uB=function(A,t,e){return t.styles.isPositionedWithZIndex()||t.styles.opacity<1||t.styles.isTransformed()||QB(A)&&e.styles.isTransparent()},cB=function(A){return A.isPositioned()||A.isFloating()},lB=function(A){return A.nodeType===Node.TEXT_NODE},fB=function(A){return A.nodeType===Node.ELEMENT_NODE},hB=function(A){return fB(A)&&void 0!==A.style&&!BB(A)},BB=function(A){return"object"==typeof A.className},pB=function(A){return"LI"===A.tagName},gB=function(A){return"OL"===A.tagName},dB=function(A){return"INPUT"===A.tagName},wB=function(A){return"svg"===A.tagName},QB=function(A){return"BODY"===A.tagName},vB=function(A){return"CANVAS"===A.tagName},UB=function(A){return"IMG"===A.tagName},CB=function(A){return"IFRAME"===A.tagName},EB=function(A){return"STYLE"===A.tagName},yB=function(A){return"SCRIPT"===A.tagName},FB=function(A){return"TEXTAREA"===A.tagName},mB=function(A){return"SELECT"===A.tagName},_B=function(){function A(){this.counters={}}return A.prototype.getCounterValue=function(A){var t=this.counters[A];return t&&t.length?t[t.length-1]:1},A.prototype.getCounterValues=function(A){var t=this.counters[A];return t||[]},A.prototype.pop=function(A){var t=this;A.forEach((function(A){return t.counters[A].pop()}))},A.prototype.parse=function(A){var t=this,e=A.counterIncrement,n=A.counterReset,r=!0;null!==e&&e.forEach((function(A){var e=t.counters[A.counter];e&&0!==A.increment&&(r=!1,e[Math.max(0,e.length-1)]+=A.increment)}));var o=[];return r&&n.forEach((function(A){var e=t.counters[A.counter];o.push(A.counter),e||(e=t.counters[A.counter]=[]),e.push(A.reset)})),o},A}(),HB={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]},bB={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["Ք","Փ","Ւ","Ց","Ր","Տ","Վ","Ս","Ռ","Ջ","Պ","Չ","Ո","Շ","Ն","Յ","Մ","Ճ","Ղ","Ձ","Հ","Կ","Ծ","Խ","Լ","Ի","Ժ","Թ","Ը","Է","Զ","Ե","Դ","Գ","Բ","Ա"]},NB={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:["י׳","ט׳","ח׳","ז׳","ו׳","ה׳","ד׳","ג׳","ב׳","א׳","ת","ש","ר","ק","צ","פ","ע","ס","נ","מ","ל","כ","יט","יח","יז","טז","טו","י","ט","ח","ז","ו","ה","ד","ג","ב","א"]},KB={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["ჵ","ჰ","ჯ","ჴ","ხ","ჭ","წ","ძ","ც","ჩ","შ","ყ","ღ","ქ","ფ","ჳ","ტ","ს","რ","ჟ","პ","ო","ჲ","ნ","მ","ლ","კ","ი","თ","ჱ","ზ","ვ","ე","დ","გ","ბ","ა"]},IB=function(A,t,e,n,r,o){return Ae?RB(A,r,o.length>0):n.integers.reduce((function(t,e,r){for(;A>=e;)A-=e,t+=n.values[r];return t}),"")+o},OB=function(A,t,e,n){var r="";do{e||A--,r=n(A)+r,A/=t}while(A*t>=t);return r},TB=function(A,t,e,n,r){var o=e-t+1;return(A<0?"-":"")+(OB(Math.abs(A),o,n,(function(A){return Da(Math.floor(A%o)+t)}))+r)},xB=function(A,t,e){void 0===e&&(e=". ");var n=t.length;return OB(Math.abs(A),n,!1,(function(A){return t[Math.floor(A%n)]}))+e},SB=function(A,t,e,n,r,o){if(A<-9999||A>9999)return RB(A,Ff.CJK_DECIMAL,r.length>0);var i=Math.abs(A),s=r;if(0===i)return t[0]+s;for(var a=0;i>0&&a<=4;a++){var u=i%10;0===u&&Fh(o,1)&&""!==s?s=t[u]+s:u>1||1===u&&0===a||1===u&&1===a&&Fh(o,2)||1===u&&1===a&&Fh(o,4)&&A>100||1===u&&a>1&&Fh(o,8)?s=t[u]+(a>0?e[a-1]:"")+s:1===u&&a>0&&(s=e[a-1]+s),i=Math.floor(i/10)}return(A<0?n:"")+s},RB=function(A,t,e){var n=e?". ":"",r=e?"、":"",o=e?", ":"",i=e?" ":"";switch(t){case Ff.DISC:return"•"+i;case Ff.CIRCLE:return"◦"+i;case Ff.SQUARE:return"◾"+i;case Ff.DECIMAL_LEADING_ZERO:var s=TB(A,48,57,!0,n);return s.length<4?"0"+s:s;case Ff.CJK_DECIMAL:return xB(A,"〇一二三四五六七八九",r);case Ff.LOWER_ROMAN:return IB(A,1,3999,HB,Ff.DECIMAL,n).toLowerCase();case Ff.UPPER_ROMAN:return IB(A,1,3999,HB,Ff.DECIMAL,n);case Ff.LOWER_GREEK:return TB(A,945,969,!1,n);case Ff.LOWER_ALPHA:return TB(A,97,122,!1,n);case Ff.UPPER_ALPHA:return TB(A,65,90,!1,n);case Ff.ARABIC_INDIC:return TB(A,1632,1641,!0,n);case Ff.ARMENIAN:case Ff.UPPER_ARMENIAN:return IB(A,1,9999,bB,Ff.DECIMAL,n);case Ff.LOWER_ARMENIAN:return IB(A,1,9999,bB,Ff.DECIMAL,n).toLowerCase();case Ff.BENGALI:return TB(A,2534,2543,!0,n);case Ff.CAMBODIAN:case Ff.KHMER:return TB(A,6112,6121,!0,n);case Ff.CJK_EARTHLY_BRANCH:return xB(A,"子丑寅卯辰巳午未申酉戌亥",r);case Ff.CJK_HEAVENLY_STEM:return xB(A,"甲乙丙丁戊己庚辛壬癸",r);case Ff.CJK_IDEOGRAPHIC:case Ff.TRAD_CHINESE_INFORMAL:return SB(A,"零一二三四五六七八九","十百千萬","負",r,14);case Ff.TRAD_CHINESE_FORMAL:return SB(A,"零壹貳參肆伍陸柒捌玖","拾佰仟萬","負",r,15);case Ff.SIMP_CHINESE_INFORMAL:return SB(A,"零一二三四五六七八九","十百千萬","负",r,14);case Ff.SIMP_CHINESE_FORMAL:return SB(A,"零壹贰叁肆伍陆柒捌玖","拾佰仟萬","负",r,15);case Ff.JAPANESE_INFORMAL:return SB(A,"〇一二三四五六七八九","十百千万","マイナス",r,0);case Ff.JAPANESE_FORMAL:return SB(A,"零壱弐参四伍六七八九","拾百千万","マイナス",r,7);case Ff.KOREAN_HANGUL_FORMAL:return SB(A,"영일이삼사오육칠팔구","십백천만","마이너스",o,7);case Ff.KOREAN_HANJA_INFORMAL:return SB(A,"零一二三四五六七八九","十百千萬","마이너스",o,0);case Ff.KOREAN_HANJA_FORMAL:return SB(A,"零壹貳參四五六七八九","拾百千","마이너스",o,7);case Ff.DEVANAGARI:return TB(A,2406,2415,!0,n);case Ff.GEORGIAN:return IB(A,1,19999,KB,Ff.DECIMAL,n);case Ff.GUJARATI:return TB(A,2790,2799,!0,n);case Ff.GURMUKHI:return TB(A,2662,2671,!0,n);case Ff.HEBREW:return IB(A,1,10999,NB,Ff.DECIMAL,n);case Ff.HIRAGANA:return xB(A,"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん");case Ff.HIRAGANA_IROHA:return xB(A,"いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす");case Ff.KANNADA:return TB(A,3302,3311,!0,n);case Ff.KATAKANA:return xB(A,"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン",r);case Ff.KATAKANA_IROHA:return xB(A,"イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス",r);case Ff.LAO:return TB(A,3792,3801,!0,n);case Ff.MONGOLIAN:return TB(A,6160,6169,!0,n);case Ff.MYANMAR:return TB(A,4160,4169,!0,n);case Ff.ORIYA:return TB(A,2918,2927,!0,n);case Ff.PERSIAN:return TB(A,1776,1785,!0,n);case Ff.TAMIL:return TB(A,3046,3055,!0,n);case Ff.TELUGU:return TB(A,3174,3183,!0,n);case Ff.THAI:return TB(A,3664,3673,!0,n);case Ff.TIBETAN:return TB(A,3872,3881,!0,n);case Ff.DECIMAL:default:return TB(A,48,57,!0,n)}},LB=function(){function A(A,t){if(this.options=t,this.scrolledElements=[],this.referenceElement=A,this.counters=new _B,this.quoteDepth=0,!A.ownerDocument)throw new Error("Cloned element does not have an owner document");this.documentElement=this.cloneNode(A.ownerDocument.documentElement)}return A.prototype.toIFrame=function(A,t){var e=this,n=kB(A,t);if(!n.contentWindow)return Promise.reject("Unable to find iframe window");var r=A.defaultView.pageXOffset,o=A.defaultView.pageYOffset,i=n.contentWindow,s=i.document,a=PB(n).then((function(){return xa(e,void 0,void 0,(function(){var A;return Sa(this,(function(e){switch(e.label){case 0:return this.scrolledElements.forEach(JB),i&&(i.scrollTo(t.left,t.top),!/(iPad|iPhone|iPod)/g.test(navigator.userAgent)||i.scrollY===t.top&&i.scrollX===t.left||(s.documentElement.style.top=-t.top+"px",s.documentElement.style.left=-t.left+"px",s.documentElement.style.position="absolute")),A=this.options.onclone,void 0===this.clonedReferenceElement?[2,Promise.reject("Error finding the "+this.referenceElement.nodeName+" in the cloned document")]:s.fonts&&s.fonts.ready?[4,s.fonts.ready]:[3,2];case 1:e.sent(),e.label=2;case 2:return"function"==typeof A?[2,Promise.resolve().then((function(){return A(s)})).then((function(){return n}))]:[2,n]}}))}))}));return s.open(),s.write(VB(document.doctype)+""),XB(this.referenceElement.ownerDocument,r,o),s.replaceChild(s.adoptNode(this.documentElement),s.documentElement),s.close(),a},A.prototype.createElementClone=function(A){if(vB(A))return this.createCanvasClone(A);if(EB(A))return this.createStyleClone(A);var t=A.cloneNode(!1);return UB(t)&&"lazy"===t.loading&&(t.loading="eager"),t},A.prototype.createStyleClone=function(A){try{var t=A.sheet;if(t&&t.cssRules){var e=[].slice.call(t.cssRules,0).reduce((function(A,t){return t&&"string"==typeof t.cssText?A+t.cssText:A}),""),n=A.cloneNode(!1);return n.textContent=e,n}}catch(r){if(hl.getInstance(this.options.id).error("Unable to access cssRules property",r),"SecurityError"!==r.name)throw r}return A.cloneNode(!1)},A.prototype.createCanvasClone=function(A){if(this.options.inlineImages&&A.ownerDocument){var t=A.ownerDocument.createElement("img");try{return t.src=A.toDataURL(),t}catch(o){hl.getInstance(this.options.id).info("Unable to clone canvas contents, canvas is tainted")}}var e=A.cloneNode(!1);try{e.width=A.width,e.height=A.height;var n=A.getContext("2d"),r=e.getContext("2d");return r&&(n?r.putImageData(n.getImageData(0,0,A.width,A.height),0,0):r.drawImage(A,0,0)),e}catch(o){}return e},A.prototype.cloneNode=function(A){if(lB(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);var t=A.ownerDocument.defaultView;if(t&&fB(A)&&(hB(A)||BB(A))){var e=this.createElementClone(A),n=t.getComputedStyle(A),r=t.getComputedStyle(A,":before"),o=t.getComputedStyle(A,":after");this.referenceElement===A&&hB(e)&&(this.clonedReferenceElement=e),QB(e)&&WB(e);for(var i=this.counters.parse(new Th(n)),s=this.resolvePseudoContent(A,e,r,Ch.BEFORE),a=A.firstChild;a;a=a.nextSibling)fB(a)&&(yB(a)||a.hasAttribute("data-html2canvas-ignore")||"function"==typeof this.options.ignoreElements&&this.options.ignoreElements(a))||this.options.copyStyles&&fB(a)&&EB(a)||e.appendChild(this.cloneNode(a));s&&e.insertBefore(s,e.firstChild);var u=this.resolvePseudoContent(A,e,o,Ch.AFTER);return u&&e.appendChild(u),this.counters.pop(i),n&&(this.options.copyStyles||BB(A))&&!CB(A)&&zB(n,e),0===A.scrollTop&&0===A.scrollLeft||this.scrolledElements.push([e,A.scrollLeft,A.scrollTop]),(FB(A)||mB(A))&&(FB(e)||mB(e))&&(e.value=A.value),e}return A.cloneNode(!1)},A.prototype.resolvePseudoContent=function(A,t,e,n){var r=this;if(e){var o=e.content,i=t.ownerDocument;if(i&&o&&"none"!==o&&"-moz-alt-content"!==o&&"none"!==e.display){this.counters.parse(new Th(e));var s=new Oh(e),a=i.createElement("html2canvaspseudoelement");zB(e,a),s.content.forEach((function(t){if(t.type===$a.STRING_TOKEN)a.appendChild(i.createTextNode(t.value));else if(t.type===$a.URL_TOKEN){var e=i.createElement("img");e.src=t.value,e.style.opacity="1",a.appendChild(e)}else if(t.type===$a.FUNCTION){if("attr"===t.name){var n=t.values.filter(vc);n.length&&a.appendChild(i.createTextNode(A.getAttribute(n[0].value)||""))}else if("counter"===t.name){var o=t.values.filter(yc),u=o[0],c=o[1];if(u&&vc(u)){var l=r.counters.getCounterValue(u.value),f=c&&vc(c)?Nf.parse(c.value):Ff.DECIMAL;a.appendChild(i.createTextNode(RB(l,f,!1)))}}else if("counters"===t.name){var h=t.values.filter(yc),B=(u=h[0],h[1]);c=h[2];if(u&&vc(u)){var p=r.counters.getCounterValues(u.value),g=c&&vc(c)?Nf.parse(c.value):Ff.DECIMAL,d=B&&B.type===$a.STRING_TOKEN?B.value:"",w=p.map((function(A){return RB(A,g,!1)})).join(d);a.appendChild(i.createTextNode(w))}}}else if(t.type===$a.IDENT_TOKEN)switch(t.value){case"open-quote":a.appendChild(i.createTextNode(Nh(s.quotes,r.quoteDepth++,!0)));break;case"close-quote":a.appendChild(i.createTextNode(Nh(s.quotes,--r.quoteDepth,!1)));break;default:a.appendChild(i.createTextNode(t.value))}})),a.className=GB+" "+jB;var u=n===Ch.BEFORE?" "+GB:" "+jB;return BB(t)?t.className.baseValue+=u:t.className+=u,a}}},A.destroy=function(A){return!!A.parentNode&&(A.parentNode.removeChild(A),!0)},A}();(Eh=Ch||(Ch={}))[Eh.BEFORE=0]="BEFORE",Eh[Eh.AFTER=1]="AFTER";var MB,DB,kB=function(A,t){var e=A.createElement("iframe");return e.className="html2canvas-container",e.style.visibility="hidden",e.style.position="fixed",e.style.left="-10000px",e.style.top="0px",e.style.border="0",e.width=t.width.toString(),e.height=t.height.toString(),e.scrolling="no",e.setAttribute("data-html2canvas-ignore","true"),A.body.appendChild(e),e},PB=function(A){return new Promise((function(t,e){var n=A.contentWindow;if(!n)return e("No window assigned for iframe");var r=n.document;n.onload=A.onload=r.onreadystatechange=function(){n.onload=A.onload=r.onreadystatechange=null;var e=setInterval((function(){r.body.childNodes.length>0&&"complete"===r.readyState&&(clearInterval(e),t(A))}),50)}}))},zB=function(A,t){for(var e=A.length-1;e>=0;e--){var n=A.item(e);"content"!==n&&t.style.setProperty(n,A.getPropertyValue(n))}return t},VB=function(A){var t="";return A&&(t+=""),t},XB=function(A,t,e){A&&A.defaultView&&(t!==A.defaultView.pageXOffset||e!==A.defaultView.pageYOffset)&&A.defaultView.scrollTo(t,e)},JB=function(A){var t=A[0],e=A[1],n=A[2];t.scrollLeft=e,t.scrollTop=n},GB="___html2canvas___pseudoelement_before",jB="___html2canvas___pseudoelement_after",WB=function(A){YB(A,"."+GB+':before{\n content: "" !important;\n display: none !important;\n}\n .'+jB+':after{\n content: "" !important;\n display: none !important;\n}')},YB=function(A,t){var e=A.ownerDocument;if(e){var n=e.createElement("style");n.textContent=t,A.appendChild(n)}};(DB=MB||(MB={}))[DB.VECTOR=0]="VECTOR",DB[DB.BEZIER_CURVE=1]="BEZIER_CURVE";var qB,$B,ZB=function(A,t){return A.length===t.length&&A.some((function(A,e){return A===t[e]}))},Ap=function(){function A(A,t){this.type=MB.VECTOR,this.x=A,this.y=t}return A.prototype.add=function(t,e){return new A(this.x+t,this.y+e)},A}(),tp=function(A,t,e){return new Ap(A.x+(t.x-A.x)*e,A.y+(t.y-A.y)*e)},ep=function(){function A(A,t,e,n){this.type=MB.BEZIER_CURVE,this.start=A,this.startControl=t,this.endControl=e,this.end=n}return A.prototype.subdivide=function(t,e){var n=tp(this.start,this.startControl,t),r=tp(this.startControl,this.endControl,t),o=tp(this.endControl,this.end,t),i=tp(n,r,t),s=tp(r,o,t),a=tp(i,s,t);return e?new A(this.start,n,i,a):new A(a,s,o,this.end)},A.prototype.add=function(t,e){return new A(this.start.add(t,e),this.startControl.add(t,e),this.endControl.add(t,e),this.end.add(t,e))},A.prototype.reverse=function(){return new A(this.end,this.endControl,this.startControl,this.start)},A}(),np=function(A){return A.type===MB.BEZIER_CURVE},rp=function(A){var t=A.styles,e=A.bounds,n=Oc(t.borderTopLeftRadius,e.width,e.height),r=n[0],o=n[1],i=Oc(t.borderTopRightRadius,e.width,e.height),s=i[0],a=i[1],u=Oc(t.borderBottomRightRadius,e.width,e.height),c=u[0],l=u[1],f=Oc(t.borderBottomLeftRadius,e.width,e.height),h=f[0],B=f[1],p=[];p.push((r+s)/e.width),p.push((h+c)/e.width),p.push((o+B)/e.height),p.push((a+l)/e.height);var g=Math.max.apply(Math,p);g>1&&(r/=g,o/=g,s/=g,a/=g,c/=g,l/=g,h/=g,B/=g);var d=e.width-s,w=e.height-l,Q=e.width-c,v=e.height-B,U=t.borderTopWidth,C=t.borderRightWidth,E=t.borderBottomWidth,y=t.borderLeftWidth,F=Tc(t.paddingTop,A.bounds.width),m=Tc(t.paddingRight,A.bounds.width),_=Tc(t.paddingBottom,A.bounds.width),H=Tc(t.paddingLeft,A.bounds.width);this.topLeftBorderBox=r>0||o>0?op(e.left,e.top,r,o,qB.TOP_LEFT):new Ap(e.left,e.top),this.topRightBorderBox=s>0||a>0?op(e.left+d,e.top,s,a,qB.TOP_RIGHT):new Ap(e.left+e.width,e.top),this.bottomRightBorderBox=c>0||l>0?op(e.left+Q,e.top+w,c,l,qB.BOTTOM_RIGHT):new Ap(e.left+e.width,e.top+e.height),this.bottomLeftBorderBox=h>0||B>0?op(e.left,e.top+v,h,B,qB.BOTTOM_LEFT):new Ap(e.left,e.top+e.height),this.topLeftPaddingBox=r>0||o>0?op(e.left+y,e.top+U,Math.max(0,r-y),Math.max(0,o-U),qB.TOP_LEFT):new Ap(e.left+y,e.top+U),this.topRightPaddingBox=s>0||a>0?op(e.left+Math.min(d,e.width+y),e.top+U,d>e.width+y?0:s-y,a-U,qB.TOP_RIGHT):new Ap(e.left+e.width-C,e.top+U),this.bottomRightPaddingBox=c>0||l>0?op(e.left+Math.min(Q,e.width-y),e.top+Math.min(w,e.height+U),Math.max(0,c-C),l-E,qB.BOTTOM_RIGHT):new Ap(e.left+e.width-C,e.top+e.height-E),this.bottomLeftPaddingBox=h>0||B>0?op(e.left+y,e.top+v,Math.max(0,h-y),B-E,qB.BOTTOM_LEFT):new Ap(e.left+y,e.top+e.height-E),this.topLeftContentBox=r>0||o>0?op(e.left+y+H,e.top+U+F,Math.max(0,r-(y+H)),Math.max(0,o-(U+F)),qB.TOP_LEFT):new Ap(e.left+y+H,e.top+U+F),this.topRightContentBox=s>0||a>0?op(e.left+Math.min(d,e.width+y+H),e.top+U+F,d>e.width+y+H?0:s-y+H,a-(U+F),qB.TOP_RIGHT):new Ap(e.left+e.width-(C+m),e.top+U+F),this.bottomRightContentBox=c>0||l>0?op(e.left+Math.min(Q,e.width-(y+H)),e.top+Math.min(w,e.height+U+F),Math.max(0,c-(C+m)),l-(E+_),qB.BOTTOM_RIGHT):new Ap(e.left+e.width-(C+m),e.top+e.height-(E+_)),this.bottomLeftContentBox=h>0||B>0?op(e.left+y+H,e.top+v,Math.max(0,h-(y+H)),B-(E+_),qB.BOTTOM_LEFT):new Ap(e.left+y+H,e.top+e.height-(E+_))};($B=qB||(qB={}))[$B.TOP_LEFT=0]="TOP_LEFT",$B[$B.TOP_RIGHT=1]="TOP_RIGHT",$B[$B.BOTTOM_RIGHT=2]="BOTTOM_RIGHT",$B[$B.BOTTOM_LEFT=3]="BOTTOM_LEFT";var op=function(A,t,e,n,r){var o=(Math.sqrt(2)-1)/3*4,i=e*o,s=n*o,a=A+e,u=t+n;switch(r){case qB.TOP_LEFT:return new ep(new Ap(A,u),new Ap(A,u-s),new Ap(a-i,t),new Ap(a,t));case qB.TOP_RIGHT:return new ep(new Ap(A,t),new Ap(A+i,t),new Ap(a,u-s),new Ap(a,u));case qB.BOTTOM_RIGHT:return new ep(new Ap(a,t),new Ap(a,t+s),new Ap(A+i,u),new Ap(A,u));case qB.BOTTOM_LEFT:default:return new ep(new Ap(a,u),new Ap(a-i,u),new Ap(A,t+s),new Ap(A,t))}},ip=function(A){return[A.topLeftBorderBox,A.topRightBorderBox,A.bottomRightBorderBox,A.bottomLeftBorderBox]},sp=function(A){return[A.topLeftPaddingBox,A.topRightPaddingBox,A.bottomRightPaddingBox,A.bottomLeftPaddingBox]},ap=function(A,t,e){this.type=0,this.offsetX=A,this.offsetY=t,this.matrix=e,this.target=6},up=function(A,t){this.type=1,this.target=t,this.path=A},cp=function(A){this.element=A,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]},lp=function(){function A(A,t){if(this.container=A,this.effects=t.slice(0),this.curves=new rp(A),null!==A.styles.transform){var e=A.bounds.left+A.styles.transformOrigin[0].number,n=A.bounds.top+A.styles.transformOrigin[1].number,r=A.styles.transform;this.effects.push(new ap(e,n,r))}if(A.styles.overflowX!==Hf.VISIBLE){var o=ip(this.curves),i=sp(this.curves);ZB(o,i)?this.effects.push(new up(o,6)):(this.effects.push(new up(o,2)),this.effects.push(new up(i,4)))}}return A.prototype.getParentEffects=function(){var A=this.effects.slice(0);if(this.container.styles.overflowX!==Hf.VISIBLE){var t=ip(this.curves),e=sp(this.curves);ZB(t,e)||A.push(new up(e,6))}return A},A}(),fp=function(A,t,e,n){A.container.elements.forEach((function(r){var o=Fh(r.flags,4),i=Fh(r.flags,2),s=new lp(r,A.getParentEffects());Fh(r.styles.display,2048)&&n.push(s);var a=Fh(r.flags,8)?[]:n;if(o||i){var u=o||r.styles.isPositioned()?e:t,c=new cp(s);if(r.styles.isPositioned()||r.styles.opacity<1||r.styles.isTransformed()){var l=r.styles.zIndex.order;if(l<0){var f=0;u.negativeZIndex.some((function(A,t){return l>A.element.container.styles.zIndex.order?(f=t,!1):f>0})),u.negativeZIndex.splice(f,0,c)}else if(l>0){var h=0;u.positiveZIndex.some((function(A,t){return l>=A.element.container.styles.zIndex.order?(h=t+1,!1):h>0})),u.positiveZIndex.splice(h,0,c)}else u.zeroOrAutoZIndexOrTransformedOrOpacity.push(c)}else r.styles.isFloating()?u.nonPositionedFloats.push(c):u.nonPositionedInlineLevel.push(c);fp(s,c,o?c:e,a)}else r.styles.isInlineLevel()?t.inlineLevel.push(s):t.nonInlineLevel.push(s),fp(s,t,e,a);Fh(r.flags,8)&&hp(r,a)}))},hp=function(A,t){for(var e=A instanceof Yh?A.start:1,n=A instanceof Yh&&A.reversed,r=0;r0&&A.intrinsicHeight>0){var n=gp(A),r=sp(t);this.path(r),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(e,0,0,A.intrinsicWidth,A.intrinsicHeight,n.left,n.top,n.width,n.height),this.ctx.restore()}},A.prototype.renderNodeContent=function(t){return xa(this,void 0,void 0,(function(){var e,n,r,o,i,s,a,u,c,l,f,h,B,p;return Sa(this,(function(g){switch(g.label){case 0:this.applyEffects(t.effects,4),e=t.container,n=t.curves,r=e.styles,o=0,i=e.textNodes,g.label=1;case 1:return o0&&E>0&&(d=n.ctx.createPattern(B,"repeat"),n.renderRepeat(Q,d,F,m))):function(A){return A.type===Zc.RADIAL_GRADIENT}(e)&&(w=dp(A,t,[null,null,null]),Q=w[0],v=w[1],U=w[2],C=w[3],E=w[4],y=0===e.position.length?[Kc]:e.position,F=Tc(y[0],C),m=Tc(y[y.length-1],E),_=function(A,t,e,n,r){var o=0,i=0;switch(A.size){case _l.CLOSEST_SIDE:A.shape===Fl.CIRCLE?o=i=Math.min(Math.abs(t),Math.abs(t-n),Math.abs(e),Math.abs(e-r)):A.shape===Fl.ELLIPSE&&(o=Math.min(Math.abs(t),Math.abs(t-n)),i=Math.min(Math.abs(e),Math.abs(e-r)));break;case _l.CLOSEST_CORNER:if(A.shape===Fl.CIRCLE)o=i=Math.min(il(t,e),il(t,e-r),il(t-n,e),il(t-n,e-r));else if(A.shape===Fl.ELLIPSE){var s=Math.min(Math.abs(e),Math.abs(e-r))/Math.min(Math.abs(t),Math.abs(t-n)),a=sl(n,r,t,e,!0),u=a[0],c=a[1];i=s*(o=il(u-t,(c-e)/s))}break;case _l.FARTHEST_SIDE:A.shape===Fl.CIRCLE?o=i=Math.max(Math.abs(t),Math.abs(t-n),Math.abs(e),Math.abs(e-r)):A.shape===Fl.ELLIPSE&&(o=Math.max(Math.abs(t),Math.abs(t-n)),i=Math.max(Math.abs(e),Math.abs(e-r)));break;case _l.FARTHEST_CORNER:if(A.shape===Fl.CIRCLE)o=i=Math.max(il(t,e),il(t,e-r),il(t-n,e),il(t-n,e-r));else if(A.shape===Fl.ELLIPSE){s=Math.max(Math.abs(e),Math.abs(e-r))/Math.max(Math.abs(t),Math.abs(t-n));var l=sl(n,r,t,e,!1);u=l[0],c=l[1],i=s*(o=il(u-t,(c-e)/s))}}return Array.isArray(A.size)&&(o=Tc(A.size[0],n),i=2===A.size.length?Tc(A.size[1],r):o),[o,i]}(e,F,m,C,E),H=_[0],b=_[1],H>0&&H>0&&(N=n.ctx.createRadialGradient(v+F,U+m,0,v+F,U+m,H),rl(e.stops,2*H).forEach((function(A){return N.addColorStop(A.stop,kc(A.color))})),n.path(Q),n.ctx.fillStyle=N,H!==b?(K=A.bounds.left+.5*A.bounds.width,I=A.bounds.top+.5*A.bounds.height,T=1/(O=b/H),n.ctx.save(),n.ctx.translate(K,I),n.ctx.transform(1,0,0,O,0,0),n.ctx.translate(-K,-I),n.ctx.fillRect(v,T*(U-I)+I,C,E*T),n.ctx.restore()):n.ctx.fill())),x.label=6;case 6:return t--,[2]}}))},n=this,r=0,o=A.styles.backgroundImage.slice(0).reverse(),s.label=1;case 1:return r"']/g,j=RegExp(J.source),W=RegExp(G.source),Y=/<%-([\s\S]+?)%>/g,q=/<%([\s\S]+?)%>/g,$=/<%=([\s\S]+?)%>/g,Z=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,AA=/^\w*$/,tA=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,eA=/[\\^$.*+?()[\]{}|]/g,nA=RegExp(eA.source),rA=/^\s+/,oA=/\s/,iA=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,sA=/\{\n\/\* \[wrapped with (.+)\] \*/,aA=/,? & /,uA=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,cA=/[()=,{}\[\]\/\s]/,lA=/\\(\\)?/g,fA=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,hA=/\w*$/,BA=/^[-+]0x[0-9a-f]+$/i,pA=/^0b[01]+$/i,gA=/^\[object .+?Constructor\]$/,dA=/^0o[0-7]+$/i,wA=/^(?:0|[1-9]\d*)$/,QA=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,vA=/($^)/,UA=/['\n\r\u2028\u2029\\]/g,CA="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",EA="\\u2700-\\u27bf",yA="a-z\\xdf-\\xf6\\xf8-\\xff",FA="A-Z\\xc0-\\xd6\\xd8-\\xde",mA="\\ufe0e\\ufe0f",_A="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",HA="['’]",bA="[\\ud800-\\udfff]",NA="["+_A+"]",KA="["+CA+"]",IA="\\d+",OA="[\\u2700-\\u27bf]",TA="["+yA+"]",xA="[^\\ud800-\\udfff"+_A+IA+EA+yA+FA+"]",SA="\\ud83c[\\udffb-\\udfff]",RA="[^\\ud800-\\udfff]",LA="(?:\\ud83c[\\udde6-\\uddff]){2}",MA="[\\ud800-\\udbff][\\udc00-\\udfff]",DA="["+FA+"]",kA="(?:"+TA+"|"+xA+")",PA="(?:"+DA+"|"+xA+")",zA="(?:['’](?:d|ll|m|re|s|t|ve))?",VA="(?:['’](?:D|LL|M|RE|S|T|VE))?",XA="(?:"+KA+"|"+SA+")"+"?",JA="[\\ufe0e\\ufe0f]?",GA=JA+XA+("(?:\\u200d(?:"+[RA,LA,MA].join("|")+")"+JA+XA+")*"),jA="(?:"+[OA,LA,MA].join("|")+")"+GA,WA="(?:"+[RA+KA+"?",KA,LA,MA,bA].join("|")+")",YA=RegExp(HA,"g"),qA=RegExp(KA,"g"),$A=RegExp(SA+"(?="+SA+")|"+WA+GA,"g"),ZA=RegExp([DA+"?"+TA+"+"+zA+"(?="+[NA,DA,"$"].join("|")+")",PA+"+"+VA+"(?="+[NA,DA+kA,"$"].join("|")+")",DA+"?"+kA+"+"+zA,DA+"+"+VA,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",IA,jA].join("|"),"g"),At=RegExp("[\\u200d\\ud800-\\udfff"+CA+mA+"]"),tt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,et=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],nt=-1,rt={};rt[T]=rt[x]=rt[S]=rt[R]=rt[L]=rt[M]=rt[D]=rt[k]=rt[P]=!0,rt[g]=rt[d]=rt[I]=rt[w]=rt[O]=rt[Q]=rt[v]=rt[U]=rt[E]=rt[y]=rt[F]=rt[_]=rt[H]=rt[b]=rt[K]=!1;var ot={};ot[g]=ot[d]=ot[I]=ot[O]=ot[w]=ot[Q]=ot[T]=ot[x]=ot[S]=ot[R]=ot[L]=ot[E]=ot[y]=ot[F]=ot[_]=ot[H]=ot[b]=ot[N]=ot[M]=ot[D]=ot[k]=ot[P]=!0,ot[v]=ot[U]=ot[K]=!1;var it={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},st=parseFloat,at=parseInt,ut="object"==typeof ba&&ba&&ba.Object===Object&&ba,ct="object"==typeof self&&self&&self.Object===Object&&self,lt=ut||ct||Function("return this")(),ft=t&&!t.nodeType&&t,ht=ft&&A&&!A.nodeType&&A,Bt=ht&&ht.exports===ft,pt=Bt&&ut.process,gt=function(){try{var A=ht&&ht.require&&ht.require("util").types;return A||pt&&pt.binding&&pt.binding("util")}catch(t){}}(),dt=gt&>.isArrayBuffer,wt=gt&>.isDate,Qt=gt&>.isMap,vt=gt&>.isRegExp,Ut=gt&>.isSet,Ct=gt&>.isTypedArray;function Et(A,t,e){switch(e.length){case 0:return A.call(t);case 1:return A.call(t,e[0]);case 2:return A.call(t,e[0],e[1]);case 3:return A.call(t,e[0],e[1],e[2])}return A.apply(t,e)}function yt(A,t,e,n){for(var r=-1,o=null==A?0:A.length;++r-1}function Nt(A,t,e){for(var n=-1,r=null==A?0:A.length;++n-1;);return e}function Zt(A,t){for(var e=A.length;e--&&Mt(t,A[e],0)>-1;);return e}function Ae(A,t){for(var e=A.length,n=0;e--;)A[e]===t&&++n;return n}var te=Vt({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),ee=Vt({"&":"&","<":"<",">":">",'"':""","'":"'"});function ne(A){return"\\"+it[A]}function re(A){return At.test(A)}function oe(A){var t=-1,e=Array(A.size);return A.forEach((function(A,n){e[++t]=[n,A]})),e}function ie(A,t){return function(e){return A(t(e))}}function se(A,t){for(var e=-1,n=A.length,r=0,i=[];++e",""":'"',"'":"'"});var he=function A(t){var oA,CA=(t=null==t?lt:he.defaults(lt.Object(),t,he.pick(lt,et))).Array,EA=t.Date,yA=t.Error,FA=t.Function,mA=t.Math,_A=t.Object,HA=t.RegExp,bA=t.String,NA=t.TypeError,KA=CA.prototype,IA=FA.prototype,OA=_A.prototype,TA=t["__core-js_shared__"],xA=IA.toString,SA=OA.hasOwnProperty,RA=0,LA=(oA=/[^.]+$/.exec(TA&&TA.keys&&TA.keys.IE_PROTO||""))?"Symbol(src)_1."+oA:"",MA=OA.toString,DA=xA.call(_A),kA=lt._,PA=HA("^"+xA.call(SA).replace(eA,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),zA=Bt?t.Buffer:e,VA=t.Symbol,XA=t.Uint8Array,JA=zA?zA.allocUnsafe:e,GA=ie(_A.getPrototypeOf,_A),jA=_A.create,WA=OA.propertyIsEnumerable,$A=KA.splice,At=VA?VA.isConcatSpreadable:e,it=VA?VA.iterator:e,ut=VA?VA.toStringTag:e,ct=function(){try{var A=fo(_A,"defineProperty");return A({},"",{}),A}catch(t){}}(),ft=t.clearTimeout!==lt.clearTimeout&&t.clearTimeout,ht=EA&&EA.now!==lt.Date.now&&EA.now,pt=t.setTimeout!==lt.setTimeout&&t.setTimeout,gt=mA.ceil,St=mA.floor,Vt=_A.getOwnPropertySymbols,Be=zA?zA.isBuffer:e,pe=t.isFinite,ge=KA.join,de=ie(_A.keys,_A),we=mA.max,Qe=mA.min,ve=EA.now,Ue=t.parseInt,Ce=mA.random,Ee=KA.reverse,ye=fo(t,"DataView"),Fe=fo(t,"Map"),me=fo(t,"Promise"),_e=fo(t,"Set"),He=fo(t,"WeakMap"),be=fo(_A,"create"),Ne=He&&new He,Ke={},Ie=zo(ye),Oe=zo(Fe),Te=zo(me),xe=zo(_e),Se=zo(He),Re=VA?VA.prototype:e,Le=Re?Re.valueOf:e,Me=Re?Re.toString:e;function De(A){if(is(A)&&!Wi(A)&&!(A instanceof Ve)){if(A instanceof ze)return A;if(SA.call(A,"__wrapped__"))return Vo(A)}return new ze(A)}var ke=function(){function A(){}return function(t){if(!os(t))return{};if(jA)return jA(t);A.prototype=t;var n=new A;return A.prototype=e,n}}();function Pe(){}function ze(A,t){this.__wrapped__=A,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=e}function Ve(A){this.__wrapped__=A,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=B,this.__views__=[]}function Xe(A){var t=-1,e=null==A?0:A.length;for(this.clear();++t=t?A:t)),A}function un(A,t,n,r,o,i){var s,a=1&t,u=2&t,c=4&t;if(n&&(s=o?n(A,r,o,i):n(A)),s!==e)return s;if(!os(A))return A;var l=Wi(A);if(l){if(s=function(A){var t=A.length,e=new A.constructor(t);t&&"string"==typeof A[0]&&SA.call(A,"index")&&(e.index=A.index,e.input=A.input);return e}(A),!a)return Nr(A,s)}else{var f=po(A),h=f==U||f==C;if(Zi(A))return yr(A,a);if(f==F||f==g||h&&!o){if(s=u||h?{}:wo(A),!a)return u?function(A,t){return Kr(A,Bo(A),t)}(A,function(A,t){return A&&Kr(t,Rs(t),A)}(s,A)):function(A,t){return Kr(A,ho(A),t)}(A,rn(s,A))}else{if(!ot[f])return o?A:{};s=function(A,t,e){var n=A.constructor;switch(t){case I:return Fr(A);case w:case Q:return new n(+A);case O:return function(A,t){var e=t?Fr(A.buffer):A.buffer;return new A.constructor(e,A.byteOffset,A.byteLength)}(A,e);case T:case x:case S:case R:case L:case M:case D:case k:case P:return mr(A,e);case E:return new n;case y:case b:return new n(A);case _:return function(A){var t=new A.constructor(A.source,hA.exec(A));return t.lastIndex=A.lastIndex,t}(A);case H:return new n;case N:return r=A,Le?_A(Le.call(r)):{}}var r}(A,f,a)}}i||(i=new We);var B=i.get(A);if(B)return B;i.set(A,s),ls(A)?A.forEach((function(e){s.add(un(e,t,n,e,A,i))})):ss(A)&&A.forEach((function(e,r){s.set(r,un(e,t,n,r,A,i))}));var p=l?e:(c?u?oo:ro:u?Rs:Ss)(A);return Ft(p||A,(function(e,r){p&&(e=A[r=e]),tn(s,r,un(e,t,n,r,A,i))})),s}function cn(A,t,n){var r=n.length;if(null==A)return!r;for(A=_A(A);r--;){var o=n[r],i=t[o],s=A[o];if(s===e&&!(o in A)||!i(s))return!1}return!0}function ln(A,t,r){if("function"!=typeof A)throw new NA(n);return Oo((function(){A.apply(e,r)}),t)}function fn(A,t,e,n){var r=-1,o=bt,i=!0,s=A.length,a=[],u=t.length;if(!s)return a;e&&(t=Kt(t,Wt(e))),n?(o=Nt,i=!1):t.length>=200&&(o=qt,i=!1,t=new je(t));A:for(;++r-1},Je.prototype.set=function(A,t){var e=this.__data__,n=en(e,A);return n<0?(++this.size,e.push([A,t])):e[n][1]=t,this},Ge.prototype.clear=function(){this.size=0,this.__data__={hash:new Xe,map:new(Fe||Je),string:new Xe}},Ge.prototype.delete=function(A){var t=co(this,A).delete(A);return this.size-=t?1:0,t},Ge.prototype.get=function(A){return co(this,A).get(A)},Ge.prototype.has=function(A){return co(this,A).has(A)},Ge.prototype.set=function(A,t){var e=co(this,A),n=e.size;return e.set(A,t),this.size+=e.size==n?0:1,this},je.prototype.add=je.prototype.push=function(A){return this.__data__.set(A,r),this},je.prototype.has=function(A){return this.__data__.has(A)},We.prototype.clear=function(){this.__data__=new Je,this.size=0},We.prototype.delete=function(A){var t=this.__data__,e=t.delete(A);return this.size=t.size,e},We.prototype.get=function(A){return this.__data__.get(A)},We.prototype.has=function(A){return this.__data__.has(A)},We.prototype.set=function(A,t){var e=this.__data__;if(e instanceof Je){var n=e.__data__;if(!Fe||n.length<199)return n.push([A,t]),this.size=++e.size,this;e=this.__data__=new Ge(n)}return e.set(A,t),this.size=e.size,this};var hn=Tr(Un),Bn=Tr(Cn,!0);function pn(A,t){var e=!0;return hn(A,(function(A,n,r){return e=!!t(A,n,r)})),e}function gn(A,t,n){for(var r=-1,o=A.length;++r0&&e(s)?t>1?wn(s,t-1,e,n,r):It(r,s):n||(r[r.length]=s)}return r}var Qn=xr(),vn=xr(!0);function Un(A,t){return A&&Qn(A,t,Ss)}function Cn(A,t){return A&&vn(A,t,Ss)}function En(A,t){return Ht(t,(function(t){return es(A[t])}))}function yn(A,t){for(var n=0,r=(t=vr(t,A)).length;null!=A&&nt}function Hn(A,t){return null!=A&&SA.call(A,t)}function bn(A,t){return null!=A&&t in _A(A)}function Nn(A,t,n){for(var r=n?Nt:bt,o=A[0].length,i=A.length,s=i,a=CA(i),u=1/0,c=[];s--;){var l=A[s];s&&t&&(l=Kt(l,Wt(t))),u=Qe(l.length,u),a[s]=!n&&(t||o>=120&&l.length>=120)?new je(s&&l):e}l=A[0];var f=-1,h=a[0];A:for(;++f=s?a:a*("desc"==e[n]?-1:1)}return A.index-t.index}(A,t,e)}))}function Jn(A,t,e){for(var n=-1,r=t.length,o={};++n-1;)s!==A&&$A.call(s,a,1),$A.call(A,a,1);return A}function jn(A,t){for(var e=A?t.length:0,n=e-1;e--;){var r=t[e];if(e==n||r!==o){var o=r;vo(r)?$A.call(A,r,1):fr(A,r)}}return A}function Wn(A,t){return A+St(Ce()*(t-A+1))}function Yn(A,t){var e="";if(!A||t<1||t>f)return e;do{t%2&&(e+=A),(t=St(t/2))&&(A+=A)}while(t);return e}function qn(A,t){return To(Ho(A,t,aa),A+"")}function $n(A){return qe(Xs(A))}function Zn(A,t){var e=Xs(A);return Ro(e,an(t,0,e.length))}function Ar(A,t,n,r){if(!os(A))return A;for(var o=-1,i=(t=vr(t,A)).length,s=i-1,a=A;null!=a&&++or?0:r+t),(e=e>r?r:e)<0&&(e+=r),r=t>e?0:e-t>>>0,t>>>=0;for(var o=CA(r);++n>>1,i=A[o];null!==i&&!hs(i)&&(e?i<=t:i=200){var u=t?null:Yr(A);if(u)return ae(u);i=!1,r=qt,a=new je}else a=t?[]:s;A:for(;++n=r?A:rr(A,t,n)}var Er=ft||function(A){return lt.clearTimeout(A)};function yr(A,t){if(t)return A.slice();var e=A.length,n=JA?JA(e):new A.constructor(e);return A.copy(n),n}function Fr(A){var t=new A.constructor(A.byteLength);return new XA(t).set(new XA(A)),t}function mr(A,t){var e=t?Fr(A.buffer):A.buffer;return new A.constructor(e,A.byteOffset,A.length)}function _r(A,t){if(A!==t){var n=A!==e,r=null===A,o=A==A,i=hs(A),s=t!==e,a=null===t,u=t==t,c=hs(t);if(!a&&!c&&!i&&A>t||i&&s&&u&&!a&&!c||r&&s&&u||!n&&u||!o)return 1;if(!r&&!i&&!c&&A1?n[o-1]:e,s=o>2?n[2]:e;for(i=A.length>3&&"function"==typeof i?(o--,i):e,s&&Uo(n[0],n[1],s)&&(i=o<3?e:i,o=1),t=_A(t);++r-1?o[i?t[s]:s]:e}}function Dr(A){return no((function(t){var r=t.length,o=r,i=ze.prototype.thru;for(A&&t.reverse();o--;){var s=t[o];if("function"!=typeof s)throw new NA(n);if(i&&!a&&"wrapper"==so(s))var a=new ze([],!0)}for(o=a?o:r;++o1&&w.reverse(),f&&ca))return!1;var c=i.get(A),l=i.get(t);if(c&&l)return c==t&&l==A;var f=-1,h=!0,B=2&n?new je:e;for(i.set(A,t),i.set(t,A);++f-1&&A%1==0&&A1?"& ":"")+t[n],t=t.join(e>2?", ":" "),A.replace(iA,"{\n/* [wrapped with "+t+"] */\n")}(n,function(A,t){return Ft(p,(function(e){var n="_."+e[0];t&e[1]&&!bt(A,n)&&A.push(n)})),A.sort()}(function(A){var t=A.match(sA);return t?t[1].split(aA):[]}(n),e)))}function So(A){var t=0,n=0;return function(){var r=ve(),o=16-(r-n);if(n=r,o>0){if(++t>=800)return arguments[0]}else t=0;return A.apply(e,arguments)}}function Ro(A,t){var n=-1,r=A.length,o=r-1;for(t=t===e?r:t;++n1?A[t-1]:e;return n="function"==typeof n?(A.pop(),n):e,ci(A,n)}));function di(A){var t=De(A);return t.__chain__=!0,t}function wi(A,t){return t(A)}var Qi=no((function(A){var t=A.length,n=t?A[0]:0,r=this.__wrapped__,o=function(t){return sn(t,A)};return!(t>1||this.__actions__.length)&&r instanceof Ve&&vo(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:wi,args:[o],thisArg:e}),new ze(r,this.__chain__).thru((function(A){return t&&!A.length&&A.push(e),A}))):this.thru(o)}));var vi=Ir((function(A,t,e){SA.call(A,e)?++A[e]:on(A,e,1)}));var Ui=Mr(jo),Ci=Mr(Wo);function Ei(A,t){return(Wi(A)?Ft:hn)(A,uo(t,3))}function yi(A,t){return(Wi(A)?mt:Bn)(A,uo(t,3))}var Fi=Ir((function(A,t,e){SA.call(A,e)?A[e].push(t):on(A,e,[t])}));var mi=qn((function(A,t,e){var n=-1,r="function"==typeof t,o=qi(A)?CA(A.length):[];return hn(A,(function(A){o[++n]=r?Et(t,A,e):Kn(A,t,e)})),o})),_i=Ir((function(A,t,e){on(A,e,t)}));function Hi(A,t){return(Wi(A)?Kt:Dn)(A,uo(t,3))}var bi=Ir((function(A,t,e){A[e?0:1].push(t)}),(function(){return[[],[]]}));var Ni=qn((function(A,t){if(null==A)return[];var e=t.length;return e>1&&Uo(A,t[0],t[1])?t=[]:e>2&&Uo(t[0],t[1],t[2])&&(t=[t[0]]),Xn(A,wn(t,1),[])})),Ki=ht||function(){return lt.Date.now()};function Ii(A,t,n){return t=n?e:t,t=A&&null==t?A.length:t,$r(A,u,e,e,e,e,t)}function Oi(A,t){var r;if("function"!=typeof t)throw new NA(n);return A=Qs(A),function(){return--A>0&&(r=t.apply(this,arguments)),A<=1&&(t=e),r}}var Ti=qn((function(A,t,e){var n=1;if(e.length){var r=se(e,ao(Ti));n|=s}return $r(A,n,t,e,r)})),xi=qn((function(A,t,e){var n=3;if(e.length){var r=se(e,ao(xi));n|=s}return $r(t,n,A,e,r)}));function Si(A,t,r){var o,i,s,a,u,c,l=0,f=!1,h=!1,B=!0;if("function"!=typeof A)throw new NA(n);function p(t){var n=o,r=i;return o=i=e,l=t,a=A.apply(r,n)}function g(A){return l=A,u=Oo(w,t),f?p(A):a}function d(A){var n=A-c;return c===e||n>=t||n<0||h&&A-l>=s}function w(){var A=Ki();if(d(A))return Q(A);u=Oo(w,function(A){var e=t-(A-c);return h?Qe(e,s-(A-l)):e}(A))}function Q(A){return u=e,B&&o?p(A):(o=i=e,a)}function v(){var A=Ki(),n=d(A);if(o=arguments,i=this,c=A,n){if(u===e)return g(c);if(h)return Er(u),u=Oo(w,t),p(c)}return u===e&&(u=Oo(w,t)),a}return t=Us(t)||0,os(r)&&(f=!!r.leading,s=(h="maxWait"in r)?we(Us(r.maxWait)||0,t):s,B="trailing"in r?!!r.trailing:B),v.cancel=function(){u!==e&&Er(u),l=0,o=c=i=u=e},v.flush=function(){return u===e?a:Q(Ki())},v}var Ri=qn((function(A,t){return ln(A,1,t)})),Li=qn((function(A,t,e){return ln(A,Us(t)||0,e)}));function Mi(A,t){if("function"!=typeof A||null!=t&&"function"!=typeof t)throw new NA(n);var e=function(){var n=arguments,r=t?t.apply(this,n):n[0],o=e.cache;if(o.has(r))return o.get(r);var i=A.apply(this,n);return e.cache=o.set(r,i)||o,i};return e.cache=new(Mi.Cache||Ge),e}function Di(A){if("function"!=typeof A)throw new NA(n);return function(){var t=arguments;switch(t.length){case 0:return!A.call(this);case 1:return!A.call(this,t[0]);case 2:return!A.call(this,t[0],t[1]);case 3:return!A.call(this,t[0],t[1],t[2])}return!A.apply(this,t)}}Mi.Cache=Ge;var ki=Ur((function(A,t){var e=(t=1==t.length&&Wi(t[0])?Kt(t[0],Wt(uo())):Kt(wn(t,1),Wt(uo()))).length;return qn((function(n){for(var r=-1,o=Qe(n.length,e);++r=t})),ji=In(function(){return arguments}())?In:function(A){return is(A)&&SA.call(A,"callee")&&!WA.call(A,"callee")},Wi=CA.isArray,Yi=dt?Wt(dt):function(A){return is(A)&&mn(A)==I};function qi(A){return null!=A&&rs(A.length)&&!es(A)}function $i(A){return is(A)&&qi(A)}var Zi=Be||Ua,As=wt?Wt(wt):function(A){return is(A)&&mn(A)==Q};function ts(A){if(!is(A))return!1;var t=mn(A);return t==v||"[object DOMException]"==t||"string"==typeof A.message&&"string"==typeof A.name&&!us(A)}function es(A){if(!os(A))return!1;var t=mn(A);return t==U||t==C||"[object AsyncFunction]"==t||"[object Proxy]"==t}function ns(A){return"number"==typeof A&&A==Qs(A)}function rs(A){return"number"==typeof A&&A>-1&&A%1==0&&A<=f}function os(A){var t=typeof A;return null!=A&&("object"==t||"function"==t)}function is(A){return null!=A&&"object"==typeof A}var ss=Qt?Wt(Qt):function(A){return is(A)&&po(A)==E};function as(A){return"number"==typeof A||is(A)&&mn(A)==y}function us(A){if(!is(A)||mn(A)!=F)return!1;var t=GA(A);if(null===t)return!0;var e=SA.call(t,"constructor")&&t.constructor;return"function"==typeof e&&e instanceof e&&xA.call(e)==DA}var cs=vt?Wt(vt):function(A){return is(A)&&mn(A)==_};var ls=Ut?Wt(Ut):function(A){return is(A)&&po(A)==H};function fs(A){return"string"==typeof A||!Wi(A)&&is(A)&&mn(A)==b}function hs(A){return"symbol"==typeof A||is(A)&&mn(A)==N}var Bs=Ct?Wt(Ct):function(A){return is(A)&&rs(A.length)&&!!rt[mn(A)]};var ps=Gr(Mn),gs=Gr((function(A,t){return A<=t}));function ds(A){if(!A)return[];if(qi(A))return fs(A)?ce(A):Nr(A);if(it&&A[it])return function(A){for(var t,e=[];!(t=A.next()).done;)e.push(t.value);return e}(A[it]());var t=po(A);return(t==E?oe:t==H?ae:Xs)(A)}function ws(A){return A?(A=Us(A))===l||A===-1/0?17976931348623157e292*(A<0?-1:1):A==A?A:0:0===A?A:0}function Qs(A){var t=ws(A),e=t%1;return t==t?e?t-e:t:0}function vs(A){return A?an(Qs(A),0,B):0}function Us(A){if("number"==typeof A)return A;if(hs(A))return h;if(os(A)){var t="function"==typeof A.valueOf?A.valueOf():A;A=os(t)?t+"":t}if("string"!=typeof A)return 0===A?A:+A;A=jt(A);var e=pA.test(A);return e||dA.test(A)?at(A.slice(2),e?2:8):BA.test(A)?h:+A}function Cs(A){return Kr(A,Rs(A))}function Es(A){return null==A?"":cr(A)}var ys=Or((function(A,t){if(Fo(t)||qi(t))Kr(t,Ss(t),A);else for(var e in t)SA.call(t,e)&&tn(A,e,t[e])})),Fs=Or((function(A,t){Kr(t,Rs(t),A)})),ms=Or((function(A,t,e,n){Kr(t,Rs(t),A,n)})),_s=Or((function(A,t,e,n){Kr(t,Ss(t),A,n)})),Hs=no(sn);var bs=qn((function(A,t){A=_A(A);var n=-1,r=t.length,o=r>2?t[2]:e;for(o&&Uo(t[0],t[1],o)&&(r=1);++n1),t})),Kr(A,oo(A),e),n&&(e=un(e,7,to));for(var r=t.length;r--;)fr(e,t[r]);return e}));var ks=no((function(A,t){return null==A?{}:function(A,t){return Jn(A,t,(function(t,e){return Is(A,e)}))}(A,t)}));function Ps(A,t){if(null==A)return{};var e=Kt(oo(A),(function(A){return[A]}));return t=uo(t),Jn(A,e,(function(A,e){return t(A,e[0])}))}var zs=qr(Ss),Vs=qr(Rs);function Xs(A){return null==A?[]:Yt(A,Ss(A))}var Js=Rr((function(A,t,e){return t=t.toLowerCase(),A+(e?Gs(t):t)}));function Gs(A){return ta(Es(A).toLowerCase())}function js(A){return(A=Es(A))&&A.replace(QA,te).replace(qA,"")}var Ws=Rr((function(A,t,e){return A+(e?"-":"")+t.toLowerCase()})),Ys=Rr((function(A,t,e){return A+(e?" ":"")+t.toLowerCase()})),qs=Sr("toLowerCase");var $s=Rr((function(A,t,e){return A+(e?"_":"")+t.toLowerCase()}));var Zs=Rr((function(A,t,e){return A+(e?" ":"")+ta(t)}));var Aa=Rr((function(A,t,e){return A+(e?" ":"")+t.toUpperCase()})),ta=Sr("toUpperCase");function ea(A,t,n){return A=Es(A),(t=n?e:t)===e?function(A){return tt.test(A)}(A)?function(A){return A.match(ZA)||[]}(A):function(A){return A.match(uA)||[]}(A):A.match(t)||[]}var na=qn((function(A,t){try{return Et(A,e,t)}catch(n){return ts(n)?n:new yA(n)}})),ra=no((function(A,t){return Ft(t,(function(t){t=Po(t),on(A,t,Ti(A[t],A))})),A}));function oa(A){return function(){return A}}var ia=Dr(),sa=Dr(!0);function aa(A){return A}function ua(A){return Sn("function"==typeof A?A:un(A,1))}var ca=qn((function(A,t){return function(e){return Kn(e,A,t)}})),la=qn((function(A,t){return function(e){return Kn(A,e,t)}}));function fa(A,t,e){var n=Ss(t),r=En(t,n);null!=e||os(t)&&(r.length||!n.length)||(e=t,t=A,A=this,r=En(t,Ss(t)));var o=!(os(e)&&"chain"in e&&!e.chain),i=es(A);return Ft(r,(function(e){var n=t[e];A[e]=n,i&&(A.prototype[e]=function(){var t=this.__chain__;if(o||t){var e=A(this.__wrapped__),r=e.__actions__=Nr(this.__actions__);return r.push({func:n,args:arguments,thisArg:A}),e.__chain__=t,e}return n.apply(A,It([this.value()],arguments))})})),A}function ha(){}var Ba=Vr(Kt),pa=Vr(_t),ga=Vr(xt);function da(A){return Co(A)?zt(Po(A)):function(A){return function(t){return yn(t,A)}}(A)}var wa=Jr(),Qa=Jr(!0);function va(){return[]}function Ua(){return!1}var Ca=zr((function(A,t){return A+t}),0),Ea=Wr("ceil"),ya=zr((function(A,t){return A/t}),1),Fa=Wr("floor");var ma,_a=zr((function(A,t){return A*t}),1),Ha=Wr("round"),ba=zr((function(A,t){return A-t}),0);return De.after=function(A,t){if("function"!=typeof t)throw new NA(n);return A=Qs(A),function(){if(--A<1)return t.apply(this,arguments)}},De.ary=Ii,De.assign=ys,De.assignIn=Fs,De.assignInWith=ms,De.assignWith=_s,De.at=Hs,De.before=Oi,De.bind=Ti,De.bindAll=ra,De.bindKey=xi,De.castArray=function(){if(!arguments.length)return[];var A=arguments[0];return Wi(A)?A:[A]},De.chain=di,De.chunk=function(A,t,n){t=(n?Uo(A,t,n):t===e)?1:we(Qs(t),0);var r=null==A?0:A.length;if(!r||t<1)return[];for(var o=0,i=0,s=CA(gt(r/t));oo?0:o+n),(r=r===e||r>o?o:Qs(r))<0&&(r+=o),r=n>r?0:vs(r);n>>0)?(A=Es(A))&&("string"==typeof t||null!=t&&!cs(t))&&!(t=cr(t))&&re(A)?Cr(ce(A),0,n):A.split(t,n):[]},De.spread=function(A,t){if("function"!=typeof A)throw new NA(n);return t=null==t?0:we(Qs(t),0),qn((function(e){var n=e[t],r=Cr(e,0,t);return n&&It(r,n),Et(A,this,r)}))},De.tail=function(A){var t=null==A?0:A.length;return t?rr(A,1,t):[]},De.take=function(A,t,n){return A&&A.length?rr(A,0,(t=n||t===e?1:Qs(t))<0?0:t):[]},De.takeRight=function(A,t,n){var r=null==A?0:A.length;return r?rr(A,(t=r-(t=n||t===e?1:Qs(t)))<0?0:t,r):[]},De.takeRightWhile=function(A,t){return A&&A.length?Br(A,uo(t,3),!1,!0):[]},De.takeWhile=function(A,t){return A&&A.length?Br(A,uo(t,3)):[]},De.tap=function(A,t){return t(A),A},De.throttle=function(A,t,e){var r=!0,o=!0;if("function"!=typeof A)throw new NA(n);return os(e)&&(r="leading"in e?!!e.leading:r,o="trailing"in e?!!e.trailing:o),Si(A,t,{leading:r,maxWait:t,trailing:o})},De.thru=wi,De.toArray=ds,De.toPairs=zs,De.toPairsIn=Vs,De.toPath=function(A){return Wi(A)?Kt(A,Po):hs(A)?[A]:Nr(ko(Es(A)))},De.toPlainObject=Cs,De.transform=function(A,t,e){var n=Wi(A),r=n||Zi(A)||Bs(A);if(t=uo(t,4),null==e){var o=A&&A.constructor;e=r?n?new o:[]:os(A)&&es(o)?ke(GA(A)):{}}return(r?Ft:Un)(A,(function(A,n,r){return t(e,A,n,r)})),e},De.unary=function(A){return Ii(A,1)},De.union=ii,De.unionBy=si,De.unionWith=ai,De.uniq=function(A){return A&&A.length?lr(A):[]},De.uniqBy=function(A,t){return A&&A.length?lr(A,uo(t,2)):[]},De.uniqWith=function(A,t){return t="function"==typeof t?t:e,A&&A.length?lr(A,e,t):[]},De.unset=function(A,t){return null==A||fr(A,t)},De.unzip=ui,De.unzipWith=ci,De.update=function(A,t,e){return null==A?A:hr(A,t,Qr(e))},De.updateWith=function(A,t,n,r){return r="function"==typeof r?r:e,null==A?A:hr(A,t,Qr(n),r)},De.values=Xs,De.valuesIn=function(A){return null==A?[]:Yt(A,Rs(A))},De.without=li,De.words=ea,De.wrap=function(A,t){return Pi(Qr(t),A)},De.xor=fi,De.xorBy=hi,De.xorWith=Bi,De.zip=pi,De.zipObject=function(A,t){return dr(A||[],t||[],tn)},De.zipObjectDeep=function(A,t){return dr(A||[],t||[],Ar)},De.zipWith=gi,De.entries=zs,De.entriesIn=Vs,De.extend=Fs,De.extendWith=ms,fa(De,De),De.add=Ca,De.attempt=na,De.camelCase=Js,De.capitalize=Gs,De.ceil=Ea,De.clamp=function(A,t,n){return n===e&&(n=t,t=e),n!==e&&(n=(n=Us(n))==n?n:0),t!==e&&(t=(t=Us(t))==t?t:0),an(Us(A),t,n)},De.clone=function(A){return un(A,4)},De.cloneDeep=function(A){return un(A,5)},De.cloneDeepWith=function(A,t){return un(A,5,t="function"==typeof t?t:e)},De.cloneWith=function(A,t){return un(A,4,t="function"==typeof t?t:e)},De.conformsTo=function(A,t){return null==t||cn(A,t,Ss(t))},De.deburr=js,De.defaultTo=function(A,t){return null==A||A!=A?t:A},De.divide=ya,De.endsWith=function(A,t,n){A=Es(A),t=cr(t);var r=A.length,o=n=n===e?r:an(Qs(n),0,r);return(n-=t.length)>=0&&A.slice(n,o)==t},De.eq=Xi,De.escape=function(A){return(A=Es(A))&&W.test(A)?A.replace(G,ee):A},De.escapeRegExp=function(A){return(A=Es(A))&&nA.test(A)?A.replace(eA,"\\$&"):A},De.every=function(A,t,n){var r=Wi(A)?_t:pn;return n&&Uo(A,t,n)&&(t=e),r(A,uo(t,3))},De.find=Ui,De.findIndex=jo,De.findKey=function(A,t){return Rt(A,uo(t,3),Un)},De.findLast=Ci,De.findLastIndex=Wo,De.findLastKey=function(A,t){return Rt(A,uo(t,3),Cn)},De.floor=Fa,De.forEach=Ei,De.forEachRight=yi,De.forIn=function(A,t){return null==A?A:Qn(A,uo(t,3),Rs)},De.forInRight=function(A,t){return null==A?A:vn(A,uo(t,3),Rs)},De.forOwn=function(A,t){return A&&Un(A,uo(t,3))},De.forOwnRight=function(A,t){return A&&Cn(A,uo(t,3))},De.get=Ks,De.gt=Ji,De.gte=Gi,De.has=function(A,t){return null!=A&&go(A,t,Hn)},De.hasIn=Is,De.head=qo,De.identity=aa,De.includes=function(A,t,e,n){A=qi(A)?A:Xs(A),e=e&&!n?Qs(e):0;var r=A.length;return e<0&&(e=we(r+e,0)),fs(A)?e<=r&&A.indexOf(t,e)>-1:!!r&&Mt(A,t,e)>-1},De.indexOf=function(A,t,e){var n=null==A?0:A.length;if(!n)return-1;var r=null==e?0:Qs(e);return r<0&&(r=we(n+r,0)),Mt(A,t,r)},De.inRange=function(A,t,n){return t=ws(t),n===e?(n=t,t=0):n=ws(n),function(A,t,e){return A>=Qe(t,e)&&A=-9007199254740991&&A<=f},De.isSet=ls,De.isString=fs,De.isSymbol=hs,De.isTypedArray=Bs,De.isUndefined=function(A){return A===e},De.isWeakMap=function(A){return is(A)&&po(A)==K},De.isWeakSet=function(A){return is(A)&&"[object WeakSet]"==mn(A)},De.join=function(A,t){return null==A?"":ge.call(A,t)},De.kebabCase=Ws,De.last=ti,De.lastIndexOf=function(A,t,n){var r=null==A?0:A.length;if(!r)return-1;var o=r;return n!==e&&(o=(o=Qs(n))<0?we(r+o,0):Qe(o,r-1)),t==t?function(A,t,e){for(var n=e+1;n--;)if(A[n]===t)return n;return n}(A,t,o):Lt(A,kt,o,!0)},De.lowerCase=Ys,De.lowerFirst=qs,De.lt=ps,De.lte=gs,De.max=function(A){return A&&A.length?gn(A,aa,_n):e},De.maxBy=function(A,t){return A&&A.length?gn(A,uo(t,2),_n):e},De.mean=function(A){return Pt(A,aa)},De.meanBy=function(A,t){return Pt(A,uo(t,2))},De.min=function(A){return A&&A.length?gn(A,aa,Mn):e},De.minBy=function(A,t){return A&&A.length?gn(A,uo(t,2),Mn):e},De.stubArray=va,De.stubFalse=Ua,De.stubObject=function(){return{}},De.stubString=function(){return""},De.stubTrue=function(){return!0},De.multiply=_a,De.nth=function(A,t){return A&&A.length?Vn(A,Qs(t)):e},De.noConflict=function(){return lt._===this&&(lt._=kA),this},De.noop=ha,De.now=Ki,De.pad=function(A,t,e){A=Es(A);var n=(t=Qs(t))?ue(A):0;if(!t||n>=t)return A;var r=(t-n)/2;return Xr(St(r),e)+A+Xr(gt(r),e)},De.padEnd=function(A,t,e){A=Es(A);var n=(t=Qs(t))?ue(A):0;return t&&nt){var r=A;A=t,t=r}if(n||A%1||t%1){var o=Ce();return Qe(A+o*(t-A+st("1e-"+((o+"").length-1))),t)}return Wn(A,t)},De.reduce=function(A,t,e){var n=Wi(A)?Ot:Xt,r=arguments.length<3;return n(A,uo(t,4),e,r,hn)},De.reduceRight=function(A,t,e){var n=Wi(A)?Tt:Xt,r=arguments.length<3;return n(A,uo(t,4),e,r,Bn)},De.repeat=function(A,t,n){return t=(n?Uo(A,t,n):t===e)?1:Qs(t),Yn(Es(A),t)},De.replace=function(){var A=arguments,t=Es(A[0]);return A.length<3?t:t.replace(A[1],A[2])},De.result=function(A,t,n){var r=-1,o=(t=vr(t,A)).length;for(o||(o=1,A=e);++rf)return[];var e=B,n=Qe(A,B);t=uo(t),A-=B;for(var r=Gt(n,t);++e=i)return A;var a=n-ue(r);if(a<1)return r;var u=s?Cr(s,0,a).join(""):A.slice(0,a);if(o===e)return u+r;if(s&&(a+=u.length-a),cs(o)){if(A.slice(a).search(o)){var c,l=u;for(o.global||(o=HA(o.source,Es(hA.exec(o))+"g")),o.lastIndex=0;c=o.exec(l);)var f=c.index;u=u.slice(0,f===e?a:f)}}else if(A.indexOf(cr(o),a)!=a){var h=u.lastIndexOf(o);h>-1&&(u=u.slice(0,h))}return u+r},De.unescape=function(A){return(A=Es(A))&&j.test(A)?A.replace(J,fe):A},De.uniqueId=function(A){var t=++RA;return Es(A)+t},De.upperCase=Aa,De.upperFirst=ta,De.each=Ei,De.eachRight=yi,De.first=qo,fa(De,(ma={},Un(De,(function(A,t){SA.call(De.prototype,t)||(ma[t]=A)})),ma),{chain:!1}),De.VERSION="4.17.21",Ft(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(A){De[A].placeholder=De})),Ft(["drop","take"],(function(A,t){Ve.prototype[A]=function(n){n=n===e?1:we(Qs(n),0);var r=this.__filtered__&&!t?new Ve(this):this.clone();return r.__filtered__?r.__takeCount__=Qe(n,r.__takeCount__):r.__views__.push({size:Qe(n,B),type:A+(r.__dir__<0?"Right":"")}),r},Ve.prototype[A+"Right"]=function(t){return this.reverse()[A](t).reverse()}})),Ft(["filter","map","takeWhile"],(function(A,t){var e=t+1,n=1==e||3==e;Ve.prototype[A]=function(A){var t=this.clone();return t.__iteratees__.push({iteratee:uo(A,3),type:e}),t.__filtered__=t.__filtered__||n,t}})),Ft(["head","last"],(function(A,t){var e="take"+(t?"Right":"");Ve.prototype[A]=function(){return this[e](1).value()[0]}})),Ft(["initial","tail"],(function(A,t){var e="drop"+(t?"":"Right");Ve.prototype[A]=function(){return this.__filtered__?new Ve(this):this[e](1)}})),Ve.prototype.compact=function(){return this.filter(aa)},Ve.prototype.find=function(A){return this.filter(A).head()},Ve.prototype.findLast=function(A){return this.reverse().find(A)},Ve.prototype.invokeMap=qn((function(A,t){return"function"==typeof A?new Ve(this):this.map((function(e){return Kn(e,A,t)}))})),Ve.prototype.reject=function(A){return this.filter(Di(uo(A)))},Ve.prototype.slice=function(A,t){A=Qs(A);var n=this;return n.__filtered__&&(A>0||t<0)?new Ve(n):(A<0?n=n.takeRight(-A):A&&(n=n.drop(A)),t!==e&&(n=(t=Qs(t))<0?n.dropRight(-t):n.take(t-A)),n)},Ve.prototype.takeRightWhile=function(A){return this.reverse().takeWhile(A).reverse()},Ve.prototype.toArray=function(){return this.take(B)},Un(Ve.prototype,(function(A,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),o=De[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);o&&(De.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,a=t instanceof Ve,u=s[0],c=a||Wi(t),l=function(A){var t=o.apply(De,It([A],s));return r&&f?t[0]:t};c&&n&&"function"==typeof u&&1!=u.length&&(a=c=!1);var f=this.__chain__,h=!!this.__actions__.length,B=i&&!f,p=a&&!h;if(!i&&c){t=p?t:new Ve(this);var g=A.apply(t,s);return g.__actions__.push({func:wi,args:[l],thisArg:e}),new ze(g,f)}return B&&p?A.apply(this,s):(g=this.thru(l),B?r?g.value()[0]:g.value():g)})})),Ft(["pop","push","shift","sort","splice","unshift"],(function(A){var t=KA[A],e=/^(?:push|sort|unshift)$/.test(A)?"tap":"thru",n=/^(?:pop|shift)$/.test(A);De.prototype[A]=function(){var A=arguments;if(n&&!this.__chain__){var r=this.value();return t.apply(Wi(r)?r:[],A)}return this[e]((function(e){return t.apply(Wi(e)?e:[],A)}))}})),Un(Ve.prototype,(function(A,t){var e=De[t];if(e){var n=e.name+"";SA.call(Ke,n)||(Ke[n]=[]),Ke[n].push({name:t,func:e})}})),Ke[kr(e,2).name]=[{name:"wrapper",func:e}],Ve.prototype.clone=function(){var A=new Ve(this.__wrapped__);return A.__actions__=Nr(this.__actions__),A.__dir__=this.__dir__,A.__filtered__=this.__filtered__,A.__iteratees__=Nr(this.__iteratees__),A.__takeCount__=this.__takeCount__,A.__views__=Nr(this.__views__),A},Ve.prototype.reverse=function(){if(this.__filtered__){var A=new Ve(this);A.__dir__=-1,A.__filtered__=!0}else(A=this.clone()).__dir__*=-1;return A},Ve.prototype.value=function(){var A=this.__wrapped__.value(),t=this.__dir__,e=Wi(A),n=t<0,r=e?A.length:0,o=function(A,t,e){var n=-1,r=e.length;for(;++n=this.__values__.length;return{done:A,value:A?e:this.__values__[this.__index__++]}},De.prototype.plant=function(A){for(var t,n=this;n instanceof Pe;){var r=Vo(n);r.__index__=0,r.__values__=e,t?o.__wrapped__=r:t=r;var o=r;n=n.__wrapped__}return o.__wrapped__=A,t},De.prototype.reverse=function(){var A=this.__wrapped__;if(A instanceof Ve){var t=A;return this.__actions__.length&&(t=new Ve(this)),(t=t.reverse()).__actions__.push({func:wi,args:[oi],thisArg:e}),new ze(t,this.__chain__)}return this.thru(oi)},De.prototype.toJSON=De.prototype.valueOf=De.prototype.value=function(){return pr(this.__wrapped__,this.__actions__)},De.prototype.first=De.prototype.head,it&&(De.prototype[it]=function(){return this}),De}();ht?((ht.exports=he)._=he,ft._=he):lt._=he}).call(ba)})); /** * @license * Lodash * Copyright OpenJS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */var Tp=function(A){for(var t=A.length/6|0,e=new Array(t),n=0;nA.length)&&(t=A.length);for(var e=0,n=new Array(t);e1&&void 0!==arguments[1]?arguments[1]:{};Mp(this,A),this.init(t,e)}return kp(A,[{key:"init",value:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=A||$p,this.options=t,this.debug=t.debug}},{key:"setDebug",value:function(A){this.debug=A}},{key:"log",value:function(){for(var A=arguments.length,t=new Array(A),e=0;e1?t-1:0),n=1;n-1?A.replace(/###/g,"."):A}function r(){return!A||"string"==typeof A}for(var o="string"!=typeof t?[].concat(t):t.split(".");o.length>1;){if(r())return{};var i=n(o.shift());!A[i]&&e&&(A[i]=new e),A=Object.prototype.hasOwnProperty.call(A,i)?A[i]:{}}return r()?{}:{obj:A,k:n(o.shift())}}function og(A,t,e){var n=rg(A,t,Object);n.obj[n.k]=e}function ig(A,t){var e=rg(A,t),n=e.obj,r=e.k;if(n)return n[r]}function sg(A,t,e){var n=ig(A,e);return void 0!==n?n:ig(t,e)}function ag(A,t,e){for(var n in t)"__proto__"!==n&&"constructor"!==n&&(n in A?"string"==typeof A[n]||A[n]instanceof String||"string"==typeof t[n]||t[n]instanceof String?e&&(A[n]=t[n]):ag(A[n],t[n],e):A[n]=t[n]);return A}function ug(A){return A.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var cg={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function lg(A){return"string"==typeof A?A.replace(/[&<>"'\/]/g,(function(A){return cg[A]})):A}var fg="undefined"!=typeof window&&window.navigator&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,hg=[" ",",","?","!",";"];function Bg(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,n)}return e}function pg(A){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:".";if(A){if(A[t])return A[t];for(var n=t.split(e),r=A,o=0;oo+i;)i++,a=r[s=n.slice(o,o+i).join(e)];if(void 0===a)return;if(t.endsWith(s)){if("string"==typeof a)return a;if(s&&"string"==typeof a[s])return a[s]}var u=n.slice(o+i).join(e);return u?dg(a,u,e):void 0}r=r[n[o]]}return r}}var wg=function(A){Vp(e,Ag);var t=gg(e);function e(A){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};return Mp(this,e),n=t.call(this),fg&&Ag.call(Pp(n)),n.data=A||{},n.options=r,void 0===n.options.keySeparator&&(n.options.keySeparator="."),void 0===n.options.ignoreJSONStructure&&(n.options.ignoreJSONStructure=!0),n}return kp(e,[{key:"addNamespaces",value:function(A){this.options.ns.indexOf(A)<0&&this.options.ns.push(A)}},{key:"removeNamespaces",value:function(A){var t=this.options.ns.indexOf(A);t>-1&&this.options.ns.splice(t,1)}},{key:"getResource",value:function(A,t,e){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator,o=void 0!==n.ignoreJSONStructure?n.ignoreJSONStructure:this.options.ignoreJSONStructure,i=[A,t];e&&"string"!=typeof e&&(i=i.concat(e)),e&&"string"==typeof e&&(i=i.concat(r?e.split(r):e)),A.indexOf(".")>-1&&(i=A.split("."));var s=ig(this.data,i);return s||!o||"string"!=typeof e?s:dg(this.data&&this.data[A]&&this.data[A][t],e,r)}},{key:"addResource",value:function(A,t,e,n){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},o=this.options.keySeparator;void 0===o&&(o=".");var i=[A,t];e&&(i=i.concat(o?e.split(o):e)),A.indexOf(".")>-1&&(n=t,t=(i=A.split("."))[1]),this.addNamespaces(t),og(this.data,i,n),r.silent||this.emit("added",A,t,e,n)}},{key:"addResources",value:function(A,t,e){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(var r in e)"string"!=typeof e[r]&&"[object Array]"!==Object.prototype.toString.apply(e[r])||this.addResource(A,t,r,e[r],{silent:!0});n.silent||this.emit("added",A,t,e)}},{key:"addResourceBundle",value:function(A,t,e,n,r){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1},i=[A,t];A.indexOf(".")>-1&&(n=e,e=t,t=(i=A.split("."))[1]),this.addNamespaces(t);var s=ig(this.data,i)||{};n?ag(s,e,r):s=pg(pg({},s),e),og(this.data,i,s),o.silent||this.emit("added",A,t,e)}},{key:"removeResourceBundle",value:function(A,t){this.hasResourceBundle(A,t)&&delete this.data[A][t],this.removeNamespaces(t),this.emit("removed",A,t)}},{key:"hasResourceBundle",value:function(A,t){return void 0!==this.getResource(A,t)}},{key:"getResourceBundle",value:function(A,t){return t||(t=this.options.defaultNS),"v1"===this.options.compatibilityAPI?pg(pg({},{}),this.getResource(A,t)):this.getResource(A,t)}},{key:"getDataByLanguage",value:function(A){return this.data[A]}},{key:"hasLanguageSomeTranslations",value:function(A){var t=this.getDataByLanguage(A);return!!(t&&Object.keys(t)||[]).find((function(A){return t[A]&&Object.keys(t[A]).length>0}))}},{key:"toJSON",value:function(){return this.data}}]),e}(),Qg={processors:{},addPostProcessor:function(A){this.processors[A.name]=A},handle:function(A,t,e,n,r){var o=this;return A.forEach((function(A){o.processors[A]&&(t=o.processors[A].process(t,e,n,r))})),t}};function vg(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,n)}return e}function Ug(A){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return Mp(this,e),n=t.call(this),fg&&Ag.call(Pp(n)),ng(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],A,Pp(n)),n.options=r,void 0===n.options.keySeparator&&(n.options.keySeparator="."),n.logger=Zp.create("translator"),n}return kp(e,[{key:"changeLanguage",value:function(A){A&&(this.language=A)}},{key:"exists",value:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};if(null==A)return!1;var e=this.resolve(A,t);return e&&void 0!==e.res}},{key:"extractFromKey",value:function(A,t){var e=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===e&&(e=":");var n=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,r=t.ns||this.options.defaultNS||[],o=e&&A.indexOf(e)>-1,i=!(this.options.userDefinedKeySeparator||t.keySeparator||this.options.userDefinedNsSeparator||t.nsSeparator||function(A,t,e){t=t||"",e=e||"";var n=hg.filter((function(A){return t.indexOf(A)<0&&e.indexOf(A)<0}));if(0===n.length)return!0;var r=new RegExp("(".concat(n.map((function(A){return"?"===A?"\\?":A})).join("|"),")")),o=!r.test(A);if(!o){var i=A.indexOf(e);i>0&&!r.test(A.substring(0,i))&&(o=!0)}return o}(A,e,n));if(o&&!i){var s=A.match(this.interpolator.nestingRegexp);if(s&&s.length>0)return{key:A,namespaces:r};var a=A.split(e);(e!==n||e===n&&this.options.ns.indexOf(a[0])>-1)&&(r=a.shift()),A=a.join(n)}return"string"==typeof r&&(r=[r]),{key:A,namespaces:r}}},{key:"translate",value:function(A,t,n){var r=this;if("object"!==Lp(t)&&this.options.overloadTranslationOptionHandler&&(t=this.options.overloadTranslationOptionHandler(arguments)),t||(t={}),null==A)return"";Array.isArray(A)||(A=[String(A)]);var o=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,i=this.extractFromKey(A[A.length-1],t),s=i.key,a=i.namespaces,u=a[a.length-1],c=t.lng||this.language,l=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(c&&"cimode"===c.toLowerCase()){if(l){var f=t.nsSeparator||this.options.nsSeparator;return u+f+s}return s}var h=this.resolve(A,t),B=h&&h.res,p=h&&h.usedKey||s,g=h&&h.exactUsedKey||s,d=Object.prototype.toString.apply(B),w=["[object Number]","[object Function]","[object RegExp]"],Q=void 0!==t.joinArrays?t.joinArrays:this.options.joinArrays,v=!this.i18nFormat||this.i18nFormat.handleAsObject,U="string"!=typeof B&&"boolean"!=typeof B&&"number"!=typeof B;if(v&&B&&U&&w.indexOf(d)<0&&("string"!=typeof Q||"[object Array]"!==d)){if(!t.returnObjects&&!this.options.returnObjects)return this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!"),this.options.returnedObjectHandler?this.options.returnedObjectHandler(p,B,Ug(Ug({},t),{},{ns:a})):"key '".concat(s," (").concat(this.language,")' returned an object instead of string.");if(o){var C="[object Array]"===d,E=C?[]:{},y=C?g:p;for(var F in B)if(Object.prototype.hasOwnProperty.call(B,F)){var m="".concat(y).concat(o).concat(F);E[F]=this.translate(m,Ug(Ug({},t),{joinArrays:!1,ns:a})),E[F]===m&&(E[F]=B[F])}B=E}}else if(v&&"string"==typeof Q&&"[object Array]"===d)(B=B.join(Q))&&(B=this.extendTranslation(B,A,t,n));else{var _=!1,H=!1,b=void 0!==t.count&&"string"!=typeof t.count,N=e.hasDefaultValue(t),K=b?this.pluralResolver.getSuffix(c,t.count,t):"",I=t["defaultValue".concat(K)]||t.defaultValue;!this.isValidLookup(B)&&N&&(_=!0,B=I),this.isValidLookup(B)||(H=!0,B=s);var O=t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey,T=O&&H?void 0:B,x=N&&I!==B&&this.options.updateMissing;if(H||_||x){if(this.logger.log(x?"updateKey":"missingKey",c,u,s,x?I:B),o){var S=this.resolve(s,Ug(Ug({},t),{},{keySeparator:!1}));S&&S.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var R=[],L=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if("fallback"===this.options.saveMissingTo&&L&&L[0])for(var M=0;M1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof A&&(A=[A]),A.forEach((function(A){if(!i.isValidLookup(t)){var a=i.extractFromKey(A,s),u=a.key;e=u;var c=a.namespaces;i.options.fallbackNS&&(c=c.concat(i.options.fallbackNS));var l=void 0!==s.count&&"string"!=typeof s.count,f=l&&!s.ordinal&&0===s.count&&i.pluralResolver.shouldUseIntlApi(),h=void 0!==s.context&&("string"==typeof s.context||"number"==typeof s.context)&&""!==s.context,B=s.lngs?s.lngs:i.languageUtils.toResolveHierarchy(s.lng||i.language,s.fallbackLng);c.forEach((function(A){i.isValidLookup(t)||(o=A,!Eg["".concat(B[0],"-").concat(A)]&&i.utils&&i.utils.hasLoadedNamespace&&!i.utils.hasLoadedNamespace(o)&&(Eg["".concat(B[0],"-").concat(A)]=!0,i.logger.warn('key "'.concat(e,'" for languages "').concat(B.join(", "),'" won\'t get resolved as namespace "').concat(o,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),B.forEach((function(e){if(!i.isValidLookup(t)){r=e;var o,a=[u];if(i.i18nFormat&&i.i18nFormat.addLookupKeys)i.i18nFormat.addLookupKeys(a,u,e,A,s);else{var c;l&&(c=i.pluralResolver.getSuffix(e,s.count,s));var B="_zero";if(l&&(a.push(u+c),f&&a.push(u+B)),h){var p="".concat(u).concat(i.options.contextSeparator).concat(s.context);a.push(p),l&&(a.push(p+c),f&&a.push(p+B))}}for(;o=a.pop();)i.isValidLookup(t)||(n=o,t=i.getResource(e,A,o,s))}})))}))}})),{res:t,usedKey:e,exactUsedKey:n,usedLng:r,usedNS:o}}},{key:"isValidLookup",value:function(A){return!(void 0===A||!this.options.returnNull&&null===A||!this.options.returnEmptyString&&""===A)}},{key:"getResource",value:function(A,t,e){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(A,t,e,n):this.resourceStore.getResource(A,t,e,n)}}],[{key:"hasDefaultValue",value:function(A){var t="defaultValue";for(var e in A)if(Object.prototype.hasOwnProperty.call(A,e)&&t===e.substring(0,t.length)&&void 0!==A[e])return!0;return!1}}]),e}();function Fg(A){return A.charAt(0).toUpperCase()+A.slice(1)}var mg=function(){function A(t){Mp(this,A),this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Zp.create("languageUtils")}return kp(A,[{key:"getScriptPartFromCode",value:function(A){if(!A||A.indexOf("-")<0)return null;var t=A.split("-");return 2===t.length?null:(t.pop(),"x"===t[t.length-1].toLowerCase()?null:this.formatLanguageCode(t.join("-")))}},{key:"getLanguagePartFromCode",value:function(A){if(!A||A.indexOf("-")<0)return A;var t=A.split("-");return this.formatLanguageCode(t[0])}},{key:"formatLanguageCode",value:function(A){if("string"==typeof A&&A.indexOf("-")>-1){var t=["hans","hant","latn","cyrl","cans","mong","arab"],e=A.split("-");return this.options.lowerCaseLng?e=e.map((function(A){return A.toLowerCase()})):2===e.length?(e[0]=e[0].toLowerCase(),e[1]=e[1].toUpperCase(),t.indexOf(e[1].toLowerCase())>-1&&(e[1]=Fg(e[1].toLowerCase()))):3===e.length&&(e[0]=e[0].toLowerCase(),2===e[1].length&&(e[1]=e[1].toUpperCase()),"sgn"!==e[0]&&2===e[2].length&&(e[2]=e[2].toUpperCase()),t.indexOf(e[1].toLowerCase())>-1&&(e[1]=Fg(e[1].toLowerCase())),t.indexOf(e[2].toLowerCase())>-1&&(e[2]=Fg(e[2].toLowerCase()))),e.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?A.toLowerCase():A}},{key:"isSupportedCode",value:function(A){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(A=this.getLanguagePartFromCode(A)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(A)>-1}},{key:"getBestMatchFromCodes",value:function(A){var t,e=this;return A?(A.forEach((function(A){if(!t){var n=e.formatLanguageCode(A);e.options.supportedLngs&&!e.isSupportedCode(n)||(t=n)}})),!t&&this.options.supportedLngs&&A.forEach((function(A){if(!t){var n=e.getLanguagePartFromCode(A);if(e.isSupportedCode(n))return t=n;t=e.options.supportedLngs.find((function(A){if(0===A.indexOf(n))return A}))}})),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t):null}},{key:"getFallbackCodes",value:function(A,t){if(!A)return[];if("function"==typeof A&&(A=A(t)),"string"==typeof A&&(A=[A]),"[object Array]"===Object.prototype.toString.apply(A))return A;if(!t)return A.default||[];var e=A[t];return e||(e=A[this.getScriptPartFromCode(t)]),e||(e=A[this.formatLanguageCode(t)]),e||(e=A[this.getLanguagePartFromCode(t)]),e||(e=A.default),e||[]}},{key:"toResolveHierarchy",value:function(A,t){var e=this,n=this.getFallbackCodes(t||this.options.fallbackLng||[],A),r=[],o=function(A){A&&(e.isSupportedCode(A)?r.push(A):e.logger.warn("rejecting language code not found in supportedLngs: ".concat(A)))};return"string"==typeof A&&A.indexOf("-")>-1?("languageOnly"!==this.options.load&&o(this.formatLanguageCode(A)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&o(this.getScriptPartFromCode(A)),"currentOnly"!==this.options.load&&o(this.getLanguagePartFromCode(A))):"string"==typeof A&&o(this.formatLanguageCode(A)),n.forEach((function(A){r.indexOf(A)<0&&o(e.formatLanguageCode(A))})),r}}]),A}(),_g=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],Hg={1:function(A){return Number(A>1)},2:function(A){return Number(1!=A)},3:function(A){return 0},4:function(A){return Number(A%10==1&&A%100!=11?0:A%10>=2&&A%10<=4&&(A%100<10||A%100>=20)?1:2)},5:function(A){return Number(0==A?0:1==A?1:2==A?2:A%100>=3&&A%100<=10?3:A%100>=11?4:5)},6:function(A){return Number(1==A?0:A>=2&&A<=4?1:2)},7:function(A){return Number(1==A?0:A%10>=2&&A%10<=4&&(A%100<10||A%100>=20)?1:2)},8:function(A){return Number(1==A?0:2==A?1:8!=A&&11!=A?2:3)},9:function(A){return Number(A>=2)},10:function(A){return Number(1==A?0:2==A?1:A<7?2:A<11?3:4)},11:function(A){return Number(1==A||11==A?0:2==A||12==A?1:A>2&&A<20?2:3)},12:function(A){return Number(A%10!=1||A%100==11)},13:function(A){return Number(0!==A)},14:function(A){return Number(1==A?0:2==A?1:3==A?2:3)},15:function(A){return Number(A%10==1&&A%100!=11?0:A%10>=2&&(A%100<10||A%100>=20)?1:2)},16:function(A){return Number(A%10==1&&A%100!=11?0:0!==A?1:2)},17:function(A){return Number(1==A||A%10==1&&A%100!=11?0:1)},18:function(A){return Number(0==A?0:1==A?1:2)},19:function(A){return Number(1==A?0:0==A||A%100>1&&A%100<11?1:A%100>10&&A%100<20?2:3)},20:function(A){return Number(1==A?0:0==A||A%100>0&&A%100<20?1:2)},21:function(A){return Number(A%100==1?1:A%100==2?2:A%100==3||A%100==4?3:0)},22:function(A){return Number(1==A?0:2==A?1:(A<0||A>10)&&A%10==0?2:3)}},bg=["v1","v2","v3"],Ng={zero:0,one:1,two:2,few:3,many:4,other:5};function Kg(){var A={};return _g.forEach((function(t){t.lngs.forEach((function(e){A[e]={numbers:t.nr,plurals:Hg[t.fc]}}))})),A}var Ig=function(){function A(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Mp(this,A),this.languageUtils=t,this.options=e,this.logger=Zp.create("pluralResolver"),this.options.compatibilityJSON&&"v4"!==this.options.compatibilityJSON||"undefined"!=typeof Intl&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=Kg()}return kp(A,[{key:"addRule",value:function(A,t){this.rules[A]=t}},{key:"getRule",value:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(A,{type:t.ordinal?"ordinal":"cardinal"})}catch(e){return}return this.rules[A]||this.rules[this.languageUtils.getLanguagePartFromCode(A)]}},{key:"needsPlural",value:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=this.getRule(A,t);return this.shouldUseIntlApi()?e&&e.resolvedOptions().pluralCategories.length>1:e&&e.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(A,t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.getSuffixes(A,e).map((function(A){return"".concat(t).concat(A)}))}},{key:"getSuffixes",value:function(A){var t=this,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.getRule(A,e);return n?this.shouldUseIntlApi()?n.resolvedOptions().pluralCategories.sort((function(A,t){return Ng[A]-Ng[t]})).map((function(A){return"".concat(t.options.prepend).concat(A)})):n.numbers.map((function(n){return t.getSuffix(A,n,e)})):[]}},{key:"getSuffix",value:function(A,t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=this.getRule(A,e);return n?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(n.select(t)):this.getSuffixRetroCompatible(n,t):(this.logger.warn("no plural rule found for: ".concat(A)),"")}},{key:"getSuffixRetroCompatible",value:function(A,t){var e=this,n=A.noAbs?A.plurals(t):A.plurals(Math.abs(t)),r=A.numbers[n];this.options.simplifyPluralSuffix&&2===A.numbers.length&&1===A.numbers[0]&&(2===r?r="plural":1===r&&(r=""));var o=function(){return e.options.prepend&&r.toString()?e.options.prepend+r.toString():r.toString()};return"v1"===this.options.compatibilityJSON?1===r?"":"number"==typeof r?"_plural_".concat(r.toString()):o():"v2"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===A.numbers.length&&1===A.numbers[0]?o():this.options.prepend&&n.toString()?this.options.prepend+n.toString():n.toString()}},{key:"shouldUseIntlApi",value:function(){return!bg.includes(this.options.compatibilityJSON)}}]),A}();function Og(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,n)}return e}function Tg(A){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};Mp(this,A),this.logger=Zp.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(A){return A},this.init(t)}return kp(A,[{key:"init",value:function(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};A.interpolation||(A.interpolation={escapeValue:!0});var t=A.interpolation;this.escape=void 0!==t.escape?t.escape:lg,this.escapeValue=void 0===t.escapeValue||t.escapeValue,this.useRawValueToEscape=void 0!==t.useRawValueToEscape&&t.useRawValueToEscape,this.prefix=t.prefix?ug(t.prefix):t.prefixEscaped||"{{",this.suffix=t.suffix?ug(t.suffix):t.suffixEscaped||"}}",this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||",",this.unescapePrefix=t.unescapeSuffix?"":t.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":t.unescapeSuffix||"",this.nestingPrefix=t.nestingPrefix?ug(t.nestingPrefix):t.nestingPrefixEscaped||ug("$t("),this.nestingSuffix=t.nestingSuffix?ug(t.nestingSuffix):t.nestingSuffixEscaped||ug(")"),this.nestingOptionsSeparator=t.nestingOptionsSeparator?t.nestingOptionsSeparator:t.nestingOptionsSeparator||",",this.maxReplaces=t.maxReplaces?t.maxReplaces:1e3,this.alwaysFormat=void 0!==t.alwaysFormat&&t.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var A="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(A,"g");var t="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(t,"g");var e="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(e,"g")}},{key:"interpolate",value:function(A,t,e,n){var r,o,i,s=this,a=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function u(A){return A.replace(/\$/g,"$$$$")}var c=function(A){if(A.indexOf(s.formatSeparator)<0){var r=sg(t,a,A);return s.alwaysFormat?s.format(r,void 0,e,Tg(Tg(Tg({},n),t),{},{interpolationkey:A})):r}var o=A.split(s.formatSeparator),i=o.shift().trim(),u=o.join(s.formatSeparator).trim();return s.format(sg(t,a,i),u,e,Tg(Tg(Tg({},n),t),{},{interpolationkey:i}))};this.resetRegExp();var l=n&&n.missingInterpolationHandler||this.options.missingInterpolationHandler,f=n&&n.interpolation&&n.interpolation.skipOnVariables||this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(A){return u(A)}},{regex:this.regexp,safeValue:function(A){return s.escapeValue?u(s.escape(A)):u(A)}}].forEach((function(t){for(i=0;r=t.regex.exec(A);){if(void 0===(o=c(r[1].trim())))if("function"==typeof l){var e=l(A,r,n);o="string"==typeof e?e:""}else{if(f){o=r[0];continue}s.logger.warn("missed to pass in variable ".concat(r[1]," for interpolating ").concat(A)),o=""}else"string"==typeof o||s.useRawValueToEscape||(o=eg(o));var a=t.safeValue(o);if(A=A.replace(r[0],a),f?(t.regex.lastIndex+=a.length,t.regex.lastIndex-=r[0].length):t.regex.lastIndex=0,++i>=s.maxReplaces)break}})),A}},{key:"nest",value:function(A,t){var e,n,r=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=Tg({},o);function s(A,t){var e=this.nestingOptionsSeparator;if(A.indexOf(e)<0)return A;var n=A.split(new RegExp("".concat(e,"[ ]*{"))),r="{".concat(n[1]);A=n[0],r=(r=this.interpolate(r,i)).replace(/'/g,'"');try{i=JSON.parse(r),t&&(i=Tg(Tg({},t),i))}catch(o){return this.logger.warn("failed parsing options string in nesting for key ".concat(A),o),"".concat(A).concat(e).concat(r)}return delete i.defaultValue,A}for(i.applyPostProcessor=!1,delete i.defaultValue;e=this.nestingRegexp.exec(A);){var a=[],u=!1;if(-1!==e[0].indexOf(this.formatSeparator)&&!/{.*}/.test(e[1])){var c=e[1].split(this.formatSeparator).map((function(A){return A.trim()}));e[1]=c.shift(),a=c,u=!0}if((n=t(s.call(this,e[1].trim(),i),i))&&e[0]===A&&"string"!=typeof n)return n;"string"!=typeof n&&(n=eg(n)),n||(this.logger.warn("missed to resolve ".concat(e[1]," for nesting ").concat(A)),n=""),u&&(n=a.reduce((function(A,t){return r.format(A,t,o.lng,Tg(Tg({},o),{},{interpolationkey:e[1].trim()}))}),n.trim())),A=A.replace(e[0],n),this.regexp.lastIndex=0}return A}}]),A}();function Sg(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,n)}return e}function Rg(A){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};Mp(this,A),this.logger=Zp.create("formatter"),this.options=t,this.formats={number:function(A,t,e){return new Intl.NumberFormat(t,e).format(A)},currency:function(A,t,e){return new Intl.NumberFormat(t,Rg(Rg({},e),{},{style:"currency"})).format(A)},datetime:function(A,t,e){return new Intl.DateTimeFormat(t,Rg({},e)).format(A)},relativetime:function(A,t,e){return new Intl.RelativeTimeFormat(t,Rg({},e)).format(A,e.range||"day")},list:function(A,t,e){return new Intl.ListFormat(t,Rg({},e)).format(A)}},this.init(t)}return kp(A,[{key:"init",value:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}},e=t.interpolation;this.formatSeparator=e.formatSeparator?e.formatSeparator:e.formatSeparator||","}},{key:"add",value:function(A,t){this.formats[A]=t}},{key:"format",value:function(A,t,e,n){var r=this;return t.split(this.formatSeparator).reduce((function(A,t){var o=function(A){var t=A.toLowerCase().trim(),e={};if(A.indexOf("(")>-1){var n=A.split("(");t=n[0].toLowerCase().trim();var r=n[1].substring(0,n[1].length-1);"currency"===t&&r.indexOf(":")<0?e.currency||(e.currency=r.trim()):"relativetime"===t&&r.indexOf(":")<0?e.range||(e.range=r.trim()):r.split(";").forEach((function(A){if(A){var t=Wp(A.split(":")),n=t[0],r=t.slice(1).join(":");"false"===r.trim()&&(e[n.trim()]=!1),"true"===r.trim()&&(e[n.trim()]=!0),isNaN(r.trim())||(e[n.trim()]=parseInt(r.trim(),10)),e[n.trim()]||(e[n.trim()]=r.trim())}}))}return{formatName:t,formatOptions:e}}(t),i=o.formatName,s=o.formatOptions;if(r.formats[i]){var a=A;try{var u=n&&n.formatParams&&n.formatParams[n.interpolationkey]||{},c=u.locale||u.lng||n.locale||n.lng||e;a=r.formats[i](A,c,Rg(Rg(Rg({},s),n),u))}catch(l){r.logger.warn(l)}return a}return r.logger.warn("there was no format function for ".concat(i)),A}),A)}}]),A}();function Mg(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,n)}return e}function Dg(A){for(var t=1;t3&&void 0!==arguments[3]?arguments[3]:{};return Mp(this,e),o=t.call(this),fg&&Ag.call(Pp(o)),o.backend=A,o.store=n,o.services=r,o.languageUtils=r.languageUtils,o.options=i,o.logger=Zp.create("backendConnector"),o.state={},o.queue=[],o.backend&&o.backend.init&&o.backend.init(r,i.backend,i),o}return kp(e,[{key:"queueLoad",value:function(A,t,e,n){var r=this,o=[],i=[],s=[],a=[];return A.forEach((function(A){var n=!0;t.forEach((function(t){var s="".concat(A,"|").concat(t);!e.reload&&r.store.hasResourceBundle(A,t)?r.state[s]=2:r.state[s]<0||(1===r.state[s]?i.indexOf(s)<0&&i.push(s):(r.state[s]=1,n=!1,i.indexOf(s)<0&&i.push(s),o.indexOf(s)<0&&o.push(s),a.indexOf(t)<0&&a.push(t)))})),n||s.push(A)})),(o.length||i.length)&&this.queue.push({pending:i,loaded:{},errors:[],callback:n}),{toLoad:o,pending:i,toLoadLanguages:s,toLoadNamespaces:a}}},{key:"loaded",value:function(A,t,e){var n=A.split("|"),r=n[0],o=n[1];t&&this.emit("failedLoading",r,o,t),e&&this.store.addResourceBundle(r,o,e),this.state[A]=t?-1:2;var i={};this.queue.forEach((function(e){var n,s,a,u,c,l;n=e.loaded,s=o,u=rg(n,[r],Object),c=u.obj,l=u.k,c[l]=c[l]||[],a&&(c[l]=c[l].concat(s)),a||c[l].push(s),function(A,t){for(var e=A.indexOf(t);-1!==e;)A.splice(e,1),e=A.indexOf(t)}(e.pending,A),t&&e.errors.push(t),0!==e.pending.length||e.done||(Object.keys(e.loaded).forEach((function(A){i[A]||(i[A]=[]),e.loaded[A].length&&e.loaded[A].forEach((function(t){i[A].indexOf(t)<0&&i[A].push(t)}))})),e.done=!0,e.errors.length?e.callback(e.errors):e.callback())})),this.emit("loaded",i),this.queue=this.queue.filter((function(A){return!A.done}))}},{key:"read",value:function(A,t,e){var n=this,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:350,i=arguments.length>5?arguments[5]:void 0;return A.length?this.backend[e](A,t,(function(s,a){s&&a&&r<5?setTimeout((function(){n.read.call(n,A,t,e,r+1,2*o,i)}),o):i(s,a)})):i(null,{})}},{key:"prepareLoading",value:function(A,t){var e=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),r&&r();"string"==typeof A&&(A=this.languageUtils.toResolveHierarchy(A)),"string"==typeof t&&(t=[t]);var o=this.queueLoad(A,t,n,r);if(!o.toLoad.length)return o.pending.length||r(),null;o.toLoad.forEach((function(A){e.loadOne(A)}))}},{key:"load",value:function(A,t,e){this.prepareLoading(A,t,{},e)}},{key:"reload",value:function(A,t,e){this.prepareLoading(A,t,{reload:!0},e)}},{key:"loadOne",value:function(A){var t=this,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=A.split("|"),r=n[0],o=n[1];this.read(r,o,"read",void 0,void 0,(function(n,i){n&&t.logger.warn("".concat(e,"loading namespace ").concat(o," for language ").concat(r," failed"),n),!n&&i&&t.logger.log("".concat(e,"loaded namespace ").concat(o," for language ").concat(r),i),t.loaded(A,n,i)}))}},{key:"saveMissing",value:function(A,t,e,n,r){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t)?this.logger.warn('did not save key "'.concat(e,'" as the namespace "').concat(t,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!"):null!=e&&""!==e&&(this.backend&&this.backend.create&&this.backend.create(A,t,e,n,null,Dg(Dg({},o),{},{isUpdate:r})),A&&A[0]&&this.store.addResource(A[0],t,e,n))}}]),e}();function zg(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(A){var t={};if("object"===Lp(A[1])&&(t=A[1]),"string"==typeof A[1]&&(t.defaultValue=A[1]),"string"==typeof A[2]&&(t.tDescription=A[2]),"object"===Lp(A[2])||"object"===Lp(A[3])){var e=A[3]||A[2];Object.keys(e).forEach((function(A){t[A]=e[A]}))}return t},interpolation:{escapeValue:!0,format:function(A,t,e,n){return A},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function Vg(A){return"string"==typeof A.ns&&(A.ns=[A.ns]),"string"==typeof A.fallbackLng&&(A.fallbackLng=[A.fallbackLng]),"string"==typeof A.fallbackNS&&(A.fallbackNS=[A.fallbackNS]),A.supportedLngs&&A.supportedLngs.indexOf("cimode")<0&&(A.supportedLngs=A.supportedLngs.concat(["cimode"])),A}function Xg(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,n)}return e}function Jg(A){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;if(Mp(this,e),A=t.call(this),fg&&Ag.call(Pp(A)),A.options=Vg(n),A.services={},A.logger=Zp,A.modules={external:[]},Wg(Pp(A)),r&&!A.isInitialized&&!n.isClone){if(!A.options.initImmediate)return A.init(n,r),Xp(A,Pp(A));setTimeout((function(){A.init(n,r)}),0)}return A}return kp(e,[{key:"init",value:function(){var A=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;"function"==typeof t&&(e=t,t={}),!t.defaultNS&&t.ns&&("string"==typeof t.ns?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));var n=zg();function r(A){return A?"function"==typeof A?new A:A:null}if(this.options=Jg(Jg(Jg({},n),this.options),Vg(t)),"v1"!==this.options.compatibilityAPI&&(this.options.interpolation=Jg(Jg({},n.interpolation),this.options.interpolation)),void 0!==t.keySeparator&&(this.options.userDefinedKeySeparator=t.keySeparator),void 0!==t.nsSeparator&&(this.options.userDefinedNsSeparator=t.nsSeparator),!this.options.isClone){var o;this.modules.logger?Zp.init(r(this.modules.logger),this.options):Zp.init(null,this.options),this.modules.formatter?o=this.modules.formatter:"undefined"!=typeof Intl&&(o=Lg);var i=new mg(this.options);this.store=new wg(this.options.resources,this.options);var s=this.services;s.logger=Zp,s.resourceStore=this.store,s.languageUtils=i,s.pluralResolver=new Ig(i,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!o||this.options.interpolation.format&&this.options.interpolation.format!==n.interpolation.format||(s.formatter=r(o),s.formatter.init(s,this.options),this.options.interpolation.format=s.formatter.format.bind(s.formatter)),s.interpolator=new xg(this.options),s.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},s.backendConnector=new Pg(r(this.modules.backend),s.resourceStore,s,this.options),s.backendConnector.on("*",(function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?e-1:0),r=1;r0&&"dev"!==a[0]&&(this.options.lng=a[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined");var u=["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"];u.forEach((function(t){A[t]=function(){var e;return(e=A.store)[t].apply(e,arguments)}}));var c=["addResource","addResources","addResourceBundle","removeResourceBundle"];c.forEach((function(t){A[t]=function(){var e;return(e=A.store)[t].apply(e,arguments),A}}));var l=tg(),f=function(){var t=function(t,n){A.isInitialized&&!A.initializedStoreOnce&&A.logger.warn("init: i18next is already initialized. You should call init just once!"),A.isInitialized=!0,A.options.isClone||A.logger.log("initialized",A.options),A.emit("initialized",A.options),l.resolve(n),e(t,n)};if(A.languages&&"v1"!==A.options.compatibilityAPI&&!A.isInitialized)return t(null,A.t.bind(A));A.changeLanguage(A.options.lng,t)};return this.options.resources||!this.options.initImmediate?f():setTimeout(f,0),l}},{key:"loadResources",value:function(A){var t=this,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:jg,n=e,r="string"==typeof A?A:this.language;if("function"==typeof A&&(n=A),!this.options.resources||this.options.partialBundledLanguages){if(r&&"cimode"===r.toLowerCase())return n();var o=[],i=function(A){A&&t.services.languageUtils.toResolveHierarchy(A).forEach((function(A){o.indexOf(A)<0&&o.push(A)}))};if(r)i(r);else{var s=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);s.forEach((function(A){return i(A)}))}this.options.preload&&this.options.preload.forEach((function(A){return i(A)})),this.services.backendConnector.load(o,this.options.ns,n)}else n(null)}},{key:"reloadResources",value:function(A,t,e){var n=tg();return A||(A=this.languages),t||(t=this.options.ns),e||(e=jg),this.services.backendConnector.reload(A,t,(function(A){n.resolve(),e(A)})),n}},{key:"use",value:function(A){if(!A)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!A.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===A.type&&(this.modules.backend=A),("logger"===A.type||A.log&&A.warn&&A.error)&&(this.modules.logger=A),"languageDetector"===A.type&&(this.modules.languageDetector=A),"i18nFormat"===A.type&&(this.modules.i18nFormat=A),"postProcessor"===A.type&&Qg.addPostProcessor(A),"formatter"===A.type&&(this.modules.formatter=A),"3rdParty"===A.type&&this.modules.external.push(A),this}},{key:"changeLanguage",value:function(A,t){var e=this;this.isLanguageChangingTo=A;var n=tg();this.emit("languageChanging",A);var r=function(A){if(e.language=A,e.languages=e.services.languageUtils.toResolveHierarchy(A),e.resolvedLanguage=void 0,!(["cimode","dev"].indexOf(A)>-1))for(var t=0;t-1)&&e.store.hasLanguageSomeTranslations(n)){e.resolvedLanguage=n;break}}},o=function(o){A||o||!e.services.languageDetector||(o=[]);var i="string"==typeof o?o:e.services.languageUtils.getBestMatchFromCodes(o);i&&(e.language||r(i),e.translator.language||e.translator.changeLanguage(i),e.services.languageDetector&&e.services.languageDetector.cacheUserLanguage(i)),e.loadResources(i,(function(A){!function(A,o){o?(r(o),e.translator.changeLanguage(o),e.isLanguageChangingTo=void 0,e.emit("languageChanged",o),e.logger.log("languageChanged",o)):e.isLanguageChangingTo=void 0,n.resolve((function(){return e.t.apply(e,arguments)})),t&&t(A,(function(){return e.t.apply(e,arguments)}))}(A,i)}))};return A||!this.services.languageDetector||this.services.languageDetector.async?!A&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(o):o(A):o(this.services.languageDetector.detect()),n}},{key:"getFixedT",value:function(A,t,e){var n=this,r=function A(t,r){var o;if("object"!==Lp(r)){for(var i=arguments.length,s=new Array(i>2?i-2:0),a=2;a1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var n=this.resolvedLanguage||this.languages[0],r=!!this.options&&this.options.fallbackLng,o=this.languages[this.languages.length-1];if("cimode"===n.toLowerCase())return!0;var i=function(A,e){var n=t.services.backendConnector.state["".concat(A,"|").concat(e)];return-1===n||2===n};if(e.precheck){var s=e.precheck(this,i);if(void 0!==s)return s}return!!this.hasResourceBundle(n,A)||(!this.services.backendConnector.backend||!(!i(n,A)||r&&!i(o,A)))}},{key:"loadNamespaces",value:function(A,t){var e=this,n=tg();return this.options.ns?("string"==typeof A&&(A=[A]),A.forEach((function(A){e.options.ns.indexOf(A)<0&&e.options.ns.push(A)})),this.loadResources((function(A){n.resolve(),t&&t(A)})),n):(t&&t(),Promise.resolve())}},{key:"loadLanguages",value:function(A,t){var e=tg();"string"==typeof A&&(A=[A]);var n=this.options.preload||[],r=A.filter((function(A){return n.indexOf(A)<0}));return r.length?(this.options.preload=n.concat(r),this.loadResources((function(A){e.resolve(),t&&t(A)})),e):(t&&t(),Promise.resolve())}},{key:"dir",value:function(A){if(A||(A=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!A)return"rtl";return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(this.services.languageUtils.getLanguagePartFromCode(A))>-1||A.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"cloneInstance",value:function(){var A=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:jg,r=Jg(Jg(Jg({},this.options),t),{isClone:!0}),o=new e(r),i=["store","services","language"];return i.forEach((function(t){o[t]=A[t]})),o.services=Jg({},this.services),o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},o.translator=new yg(o.services,o.options),o.translator.on("*",(function(A){for(var t=arguments.length,e=new Array(t>1?t-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new Yg(A,t)}));var qg=Yg.createInstance();qg.createInstance=Yg.createInstance,qg.createInstance,qg.init,qg.loadResources,qg.reloadResources,qg.use,qg.changeLanguage,qg.getFixedT,qg.t,qg.exists,qg.setDefaultNamespace,qg.hasLoadedNamespace,qg.loadNamespaces,qg.loadLanguages;export{An as A,In as B,Je as C,c as D,le as E,De as F,re as G,he as H,Re as I,nn as J,ir as K,rr as L,nr as M,Br as N,Tp as P,_r as a,Or as b,Kn as c,hi as d,Op as e,Tr as f,es as g,Kp as h,Qa as i,Ka as j,qg as k,Kr as l,pr as m,Ne as n,Rp as o,ei as p,jA as q,nt as r,ti as s,la as t,Zn as u,Ft as v,Fe as w,cr as x,je as y,Ha as z}; ================================================ FILE: docs/index.html ================================================ Vite App
================================================ FILE: index.html ================================================ Vite App
================================================ FILE: jest.config.ts ================================================ /* * For a detailed explanation regarding each configuration property and type check, visit: * https://jestjs.io/docs/en/configuration.html */ export default { // All imported modules in your tests should be mocked automatically // automock: false, // Stop running tests after `n` failures // bail: 0, // The directory where Jest should store its cached dependency information // cacheDirectory: "/private/var/folders/27/xb26xyrj48s9hs_m6p38fr9h0000gn/T/jest_dx", // Automatically clear mock calls and instances between every test // clearMocks: false, // Indicates whether the coverage information should be collected while executing the test // collectCoverage: false, // An array of glob patterns indicating a set of files for which coverage information should be collected collectCoverageFrom: [ '**/*.{ts,vue}', '!**/*.{d,config}.ts', '!**/interface.ts', '!**/node_modules/**', '!**/vendor/**' ], // The directory where Jest should output its coverage files coverageDirectory: 'coverage', // An array of regexp pattern strings used to skip coverage collection // coveragePathIgnorePatterns: [ // "/node_modules/" // ], // Indicates which provider should be used to instrument code for coverage coverageProvider: 'v8', // A list of reporter names that Jest uses when writing coverage reports // coverageReporters: [ // "json", // "text", // "lcov", // "clover" // ], // An object that configures minimum threshold enforcement for coverage results // coverageThreshold: undefined, // A path to a custom dependency extractor // dependencyExtractor: undefined, // Make calling deprecated APIs throw helpful error messages // errorOnDeprecated: false, // Force coverage collection from ignored files using an array of glob patterns // forceCoverageMatch: [], // A path to a module which exports an async function that is triggered once before all test suites // globalSetup: undefined, // A path to a module which exports an async function that is triggered once after all test suites // globalTeardown: undefined, // A set of global variables that need to be available in all test environments // globals: {}, // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. // maxWorkers: "50%", // An array of directory names to be searched recursively up from the requiring module's location // moduleDirectories: [ // "node_modules" // ], // An array of file extensions your modules use // moduleFileExtensions: [ // "js", // "json", // "jsx", // "ts", // "tsx", // "node" // ], // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module moduleNameMapper: { '^@/(.*)$': '/src/$1' }, // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader // modulePathIgnorePatterns: [], // Activates notifications for test results // notify: false, // An enum that specifies notification mode. Requires { notify: true } // notifyMode: "failure-change", // A preset that is used as a base for Jest's configuration preset: 'ts-jest', // Run tests from one or more projects // projects: undefined, // Use this configuration option to add custom reporters to Jest // reporters: undefined, // Automatically reset mock state between every test // resetMocks: false, // Reset the module registry before running each individual test // resetModules: false, // A path to a custom resolver // resolver: undefined, // Automatically restore mock state between every test // restoreMocks: false, // The root directory that Jest should scan for tests and modules within // rootDir: undefined, // A list of paths to directories that Jest should use to search for files in // roots: [ // "" // ], // Allows you to use a custom runner instead of Jest's default test runner // runner: "jest-runner", // The paths to modules that run some code to configure or set up the testing environment before each test // setupFiles: [], // A list of paths to modules that run some code to configure or set up the testing framework before each test // setupFilesAfterEnv: [], // The number of seconds after which a test is considered as slow and reported as such in the results. // slowTestThreshold: 5, // A list of paths to snapshot serializer modules Jest should use for snapshot testing // snapshotSerializers: [], // The test environment that will be used for testing testEnvironment: 'node', // Options that will be passed to the testEnvironment // testEnvironmentOptions: {}, // Adds a location field to test results // testLocationInResults: false, // The glob patterns Jest uses to detect test files testMatch: [ '**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[tj]s?(x)', '!**/__tests__/**/config.[jt]s?(x)' ], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped // testPathIgnorePatterns: [ // "/node_modules/" // ], // The regexp pattern or array of patterns that Jest uses to detect test files // testRegex: [], // This option allows the use of a custom results processor // testResultsProcessor: undefined, // This option allows use of a custom test runner // testRunner: "jasmine2", // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href // testURL: "http://localhost", // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" // timers: "real", // A map from regular expressions to paths to transformers // transform: undefined, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation // transformIgnorePatterns: [ // "/node_modules/", // "\\.pnp\\.[^\\/]+$" // ], // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, // Indicates whether each individual test should be reported during the run // verbose: undefined, // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode // watchPathIgnorePatterns: [], // Whether to use watchman for file crawling // watchman: true, }; ================================================ FILE: package.json ================================================ { "name": "vue3-mindmap", "description": "Mindmap component for Vue3", "author": "伍鑫", "license": "MIT", "files": [ "dist" ], "main": "./dist/vue3-mindmap.umd.js", "module": "./dist/vue3-mindmap.es.js", "exports": { ".": { "import": "./dist/vue3-mindmap.es.js", "require": "./dist/vue3-mindmap.umd.js" }, "./dist/style.css": "./dist/style.css" }, "version": "0.5.12", "scripts": { "dev": "vite", "build": "vite build", "lib": "vite build --config vite-lib.config.ts && tsc --project tsconfig.lib.json", "serve": "vite preview", "test": "jest --watch", "coverage": "jest --coverage", "release": "standard-version" }, "dependencies": { "d3-drag": "^2.0.0", "d3-interpolate": "^2.0.1", "d3-scale": "^3.3.0", "d3-scale-chromatic": "^2.0.0", "d3-selection": "^2.0.0", "d3-shape": "^2.1.0", "d3-transition": "^2.0.0", "d3-zoom": "^2.0.0", "html2canvas": "^1.0.0-rc.7", "i18next": "^21.6.6", "lodash.clonedeep": "^4.5.0", "mitt": "^2.1.0", "vue": "^3.0.0" }, "devDependencies": { "@types/d3-drag": "^2.0.0", "@types/d3-ease": "^2.0.0", "@types/d3-scale": "^3.2.2", "@types/d3-scale-chromatic": "^2.0.0", "@types/d3-selection": "^2.0.0", "@types/d3-shape": "^2.0.0", "@types/d3-transition": "^2.0.0", "@types/d3-zoom": "^2.0.0", "@types/jest": "^26.0.23", "@types/lodash.clonedeep": "^4.5.6", "@types/node": "^15.0.2", "@types/resize-observer-browser": "^0.1.5", "@types/string-hash": "^1.1.1", "@typescript-eslint/eslint-plugin": "^4.23.0", "@typescript-eslint/parser": "^4.23.0", "@vitejs/plugin-vue": "^1.2.2", "@vue/compiler-sfc": "^3.0.11", "eslint": "^7.26.0", "eslint-plugin-tsdoc": "^0.2.14", "jest": "^26.6.3", "sass": "^1.32.12", "standard-version": "^9.3.0", "string-hash": "^1.1.3", "ts-jest": "^26.5.6", "ts-node": "^9.1.1", "tslib": "^2.3.1", "typescript": "~4.2.4", "vite": "^2.3.0" }, "bugs": { "url": "https://github.com/hellowuxin/vue3-mindmap/issues" }, "homepage": "https://github.com/hellowuxin/vue3-mindmap#readme", "keywords": [ "mindmap", "vue", "d3" ], "repository": { "type": "git", "url": "git+https://github.com/hellowuxin/vue3-mindmap.git" } } ================================================ FILE: src/App.vue ================================================ ================================================ FILE: src/components/Contextmenu.vue ================================================ ================================================ FILE: src/components/Mindmap/Mindmap.vue ================================================ ================================================ FILE: src/components/Mindmap/assistant.ts ================================================ import emitter from '@/mitt' import html2canvas from 'html2canvas' import { getDataId, getGTransform, getPath } from './attribute' import * as d3 from './d3' import style from './css' import { Data, Mdata, TwoNumber } from './interface' import { observer, selection, zoom, zoomTransform } from './variable' import { afterOperation, mmdata } from './data' import { snapshot } from './state' import { foreignDivEle, gEle, svgEle, wrapperEle } from './variable/element' import { onEditBlur } from './listener' /** * 使页面重排 * @param ele - Element */ export const reflow = (ele: Element): number => ele.clientHeight /** * 获取一个加号图形的path路径,图形的中心坐标为(0,0) * @param stroke - 线条的粗细 * @param side - 图形的边长 */ export const getAddPath = (stroke: number, side: number): string => { const temp0 = -side / 2 const temp1 = -stroke / 2 const temp2 = stroke / 2 const temp3 = side / 2 return `M${temp3},${temp2}H${temp2}V${temp3}H${temp1}V${temp2}H${temp0}V${temp1}H${temp1}V${temp0}H${temp2}V${temp1}H${temp3}V${temp2}Z` } /** * 将一个字符串按换行符切分,返回字符串数组 * @param str - 字符串 */ export const getMultiline = (str: string): string[] => { const multiline = str.split('\n') if (multiline.length > 1 && multiline[multiline.length - 1] === '') { multiline.pop() } return multiline } export const convertToImg = (svgdiv: HTMLDivElement, name: string): void => { html2canvas(svgdiv).then((canvas) => { const dataUrl = canvas.toDataURL() const window = open() if (window) { window.document.write(``) window.document.title = name window.document.close() } }) } export const makeTransition = ( dura: number, easingFn: (normalizedTime: number) => number ): d3.Transition => { return d3.transition().duration(dura).ease(easingFn) as d3.Transition } export const getRelativePos = (wrapper: HTMLElement, e: MouseEvent): { left: number, top: number } => { const { pageX, pageY } = e const wrapperPos = wrapper.getBoundingClientRect() const wrapperLeft = wrapperPos.left + window.pageXOffset const wrapperTop = wrapperPos.top + window.pageYOffset return { left: pageX - wrapperLeft, top: pageY - wrapperTop } } /** * @param this - gText */ export function getDragContainer (this: SVGGElement): SVGGElement { return this.parentNode?.parentNode?.parentNode as SVGGElement } export function selectGNode (d: SVGGElement): void export function selectGNode (d: Mdata): void export function selectGNode (d: SVGGElement | Mdata): void { const ele = d instanceof SVGGElement ? d : document.querySelector(`g[data-id='${getDataId(d)}']`) const oldSele = document.getElementsByClassName(style.selected)[0] if (ele) { if (oldSele) { if (oldSele !== ele) { oldSele.classList.remove(style.selected) ele.classList.add(style.selected) } else { emitter.emit('edit-flag', true) } } else { ele.classList.add(style.selected) } } else { throw new Error('selectGNode failed') } } export function getSelectedGData (): Mdata { const sele = d3.select(`.${style.selected}`) return sele.data()[0] } /** * 获取文本在tspan中的宽度与高度 * @param text - * @returns - */ export const getSize = (text: string): { width: number, height: number } => { const { asstSvg } = selection if (!asstSvg) { throw new Error('asstSvg undefined') } const multiline = getMultiline(text) const t = asstSvg.append('text') t.selectAll('tspan').data(multiline).enter().append('tspan').text((d) => d).attr('x', 0) const tBox = (t.node() as SVGTextElement).getBBox() t.remove() return { width: Math.max(tBox.width, 22), height: Math.max(tBox.height, 22) * multiline.length } } export const moveNode = (node: SVGGElement, d: Mdata, p: TwoNumber, dura = 0): void => { const tran = makeTransition(dura, d3.easePolyOut) d.px = p[0] d.py = p[1] d3.select(node).transition(tran).attr('transform', getGTransform) d3.select(`g[data-id='${getDataId(d)}'] > path`) .transition(tran) .attr('d', (d) => getPath(d)) } export const centerView = (): void => { const { svg } = selection if (!svg) { return } const data = mmdata.data zoom.translateTo(svg, 0 + data.width / 2, 0 + data.height / 2) } /** * 缩放至合适大小并移动至全部可见 */ export const fitView = (): void => { const { svg } = selection if (!svg || !gEle.value || !svgEle.value) { return } const gBB = gEle.value.getBBox() const svgBCR = svgEle.value.getBoundingClientRect() const multiple = Math.min(svgBCR.width / gBB.width, svgBCR.height / gBB.height) const svgCenter = { x: svgBCR.width / 2, y: svgBCR.height / 2 } // after scale const gCenter = { x: gBB.width * multiple / 2, y: gBB.height * multiple / 2 } const center = d3.zoomIdentity.translate( -gBB.x * multiple + svgCenter.x - gCenter.x, -gBB.y * multiple + svgCenter.y - gCenter.y ).scale(multiple) zoom.transform(svg, center) } /** * 元素被遮挡时,移动视图使其处于可见区域 * @param ele - 元素 */ export const moveView = (ele: Element): void => { const { svg } = selection // 得到d相对于视图左上角的坐标 if (svg && svgEle.value) { const { k } = zoomTransform.value const gBCR = ele.getBoundingClientRect() const { x, y, width, height } = svgEle.value.getBoundingClientRect() const gLeft = gBCR.x - x const gRight = gLeft + gBCR.width const gTop = gBCR.y - y const gBottom = gTop + gBCR.height const space = 2 // 元素与视图的空隙,方便区分 let x1 = 0 let y1 = 0 if (gLeft < 0) { x1 = -gLeft / k + space } if (gBCR.width > width || gRight > width) { x1 = -(gRight - width) / k - space } if (gTop < 0) { y1 = -gTop / k + space } if (gBCR.height > height || gBottom > height) { y1 = -(gBottom - height) / k - space} zoom.translateBy(svg, x1, y1) } } /** * 按一定程度缩放 * @param flag - 为true时放大,false缩小 */ export const scaleView = (flag: boolean): void => { const { svg } = selection if (!svg) { return } zoom.scaleBy(svg, flag ? 1.1 : 0.9) } export const download = (): void => { if (!wrapperEle.value) { return } convertToImg(wrapperEle.value, mmdata.data.name) } export const next = (): void => { const nextData = snapshot.next() if (nextData) { mmdata.data = nextData afterOperation(false) } } export const prev = (): void => { const prevData = snapshot.prev() if (prevData) { mmdata.data = prevData afterOperation(false) } } /** * foreignDivEle事件监听与观察 */ export const bindForeignDiv = (): void => { if (foreignDivEle.value) { observer.observe(foreignDivEle.value) foreignDivEle.value.addEventListener('blur', onEditBlur) foreignDivEle.value.addEventListener('mousedown', (e: MouseEvent) => e.stopPropagation()) } } /** * 判断字符串是否符合Data的数据格式,如果是,则返回格式化的数据,如果不是,返回false */ export const isData = (str: string): Data | false => { let data try { data = JSON.parse(str) return 'name' in data ? data : false } catch (error) { return false } } ================================================ FILE: src/components/Mindmap/attribute/get.ts ================================================ import { Mdata, TspanData, TwoNumber } from '@/components/Mindmap/interface' import { getMultiline } from '../assistant' import style from '../css' import { addBtnSide, link, textRectPadding, sharpCorner, expandBtnRect, addBtnRect } from '../variable' const getYOffset = () => 3 // max-branch / 2 export const getSiblingGClass = (d?: Mdata): string[] => { const arr = ['node'] if (d) { arr.push(`depth-${d.depth}`) } return arr } export const getGClass = (d?: Mdata): string[] => { const arr = getSiblingGClass(d) if (d) { if (d.depth === 0) { arr.push(style.root) } if (d.collapse) { arr.push(style['collapse']) } else if (!d.children || d.children.length === 0) { arr.push('leaf') } } return arr } export const getAddBtnClass = (d: Mdata): string[] => { const arr = [style['add-btn']] if (d.collapse) { arr.push(style['hidden']) } return arr } export const getGTransform = (d: Mdata): string => { return `translate(${d.dx + d.px},${d.dy + d.py})` } export const getDataId = (d: Mdata): string => { return d.id } export const getTspanData = (d: Mdata): TspanData[] => { const multiline = getMultiline(d.name) const height = d.height / multiline.length return multiline.map((name) => ({ name, height })) } export const getPath = (d: Mdata): string => { let dpw = 0 let dph = 0 const trp = Math.max(textRectPadding - 3, 0) // -3为了不超过选中框 let w = d.width + trp const targetOffset = getYOffset() let sourceOffset = targetOffset const { parent } = d if (parent) { dpw = parent.width dph = parent.height if (parent.depth === 0) { if (!sharpCorner) { dpw /= 2 } dph /= 2 sourceOffset = 0 } } if (d.left) { if (parent) { if (parent.depth !== 0) { dpw = -dpw } else if (sharpCorner) { dpw = 0 } } w = -w } const source: TwoNumber = [-d.dx + dpw - d.px, -d.dy + dph + sourceOffset - d.py] const target: TwoNumber = [0, d.height + targetOffset] return `${link({ source, target })}L${w},${target[1]}` } export const getAddBtnTransform = (d: Mdata, trp: number): string => { const y = d.depth === 0 ? d.height / 2 : d.height + getYOffset() let x = d.width + trp + addBtnSide / 2 + addBtnRect.margin if (d.left) { x = -x } return `translate(${x},${y})` } export const getExpandBtnTransform = (d: Mdata, trp: number): string => { const gap = 4 const y = d.depth === 0 ? d.height / 2 : d.height + getYOffset() let x = d.width + trp + expandBtnRect.width / 2 + gap if (d.left) { x = -x } return `translate(${x},${y})` } ================================================ FILE: src/components/Mindmap/attribute/index.ts ================================================ export * from './get' export * from './set' ================================================ FILE: src/components/Mindmap/attribute/set.ts ================================================ import { IsMdata, Mdata, SelectionCircle, SelectionG, SelectionRect, Transition, TspanData } from '../interface' import * as d3 from '../d3' import { addBtnRect, addBtnSide, branch, changeSharpCorner, expandBtnRect, rootTextRectPadding, rootTextRectRadius, textRectPadding } from '../variable' import { getAddBtnClass, getAddBtnTransform, getDataId, getExpandBtnTransform, getGClass, getGTransform, getPath } from './get' import style from '../css' /** * 根据该节点是否是根节点,绘制不同的效果 */ export const attrA = ( isRoot: boolean, gTrigger: SelectionRect, gTextRect: SelectionRect, gExpandBtn: SelectionG, gAddBtn?: SelectionG ): void => { if (isRoot) { attrTrigger(gTrigger, rootTextRectPadding) attrTextRect(gTextRect, rootTextRectPadding, rootTextRectRadius) attrExpandBtn(gExpandBtn, rootTextRectPadding) if (gAddBtn) { attrAddBtn(gAddBtn, rootTextRectPadding) } } else { attrTrigger(gTrigger, textRectPadding) attrTextRect(gTextRect, textRectPadding) attrExpandBtn(gExpandBtn, textRectPadding) if (gAddBtn) { attrAddBtn(gAddBtn, textRectPadding) } } } export const attrG = (g: SelectionG, tran?: Transition): void => { const g1 = g.attr('class', (d) => getGClass(d).join(' ')).attr('data-id', getDataId) const g2 = tran ? g1.transition(tran) : g1 g2.attr('transform', getGTransform) } export const attrText = (text: d3.Selection, tran?: Transition): void => { const t1 = tran ? text.transition(tran) : text t1.attr('transform', (d) => `translate(${d.left ? -d.width : 0},0)`) } export const attrTspan = (tspan: d3.Selection): void => { tspan.attr('alignment-baseline', 'text-before-edge') .text((d) => d.name || ' ') .attr('x', 0) .attr('dy', (d, i) => i ? d.height : 0) } export const attrAddBtnRect = (rect: SelectionRect): void => { const { side, padding } = addBtnRect const radius = 4 const temp0 = -padding - side / 2 const temp1 = side + padding * 2 rect.attr('x', temp0).attr('y', temp0).attr('rx', radius).attr('ry', radius).attr('width', temp1).attr('height', temp1) } export const attrExpandBtnRect = (rect: SelectionRect): void => { rect.attr('x', -expandBtnRect.width/2).attr('y', -expandBtnRect.height/2) .attr('width', expandBtnRect.width).attr('height', expandBtnRect.height) .attr('rx', expandBtnRect.radius).attr('ry', expandBtnRect.radius) .attr('stroke', (d) => d.color || 'grey') .attr('fill', (d) => d.color || 'grey') } export const attrExpandBtnCircle = (circle: SelectionCircle, cx: number): void => { circle.attr('cx', cx).attr('cy', 0).attr('r', 1) } export const attrTextRect = (rect: SelectionRect, padding: number, radius = 4): void => { rect.attr('x', (d) => -padding - (d.left ? d.width : 0)) .attr('y', -padding) .attr('rx', radius).attr('ry', radius) .attr('width', (d) => d.width + padding * 2) .attr('height', (d) => d.height + padding * 2) } export const attrExpandBtn = (g: SelectionG, trp: number): void => { g.attr('class', style['expand-btn']) .attr('transform', (d) => getExpandBtnTransform(d, trp)) .style('color', d => d.color) } export const attrAddBtn = (g: SelectionG, trp: number): void => { g.attr('class', (d) => getAddBtnClass(d).join(' ')).attr('transform', (d) => getAddBtnTransform(d, trp)) } export const attrTrigger = (rect: SelectionRect, padding: number): void => { const w = addBtnSide + addBtnRect.margin const p = padding * 2 rect.attr('class', style.trigger) .attr('x', (d) => -padding - (d.left ? d.width + w : 0)) .attr('y', -padding) .attr('width', (d) => d.width + p + w) .attr('height', (d) => d.height + p) } export const attrPath = ( p: d3.Selection, tran?: Transition ): void => { const p1 = p.attr('stroke', (d) => d.color).attr('stroke-width', branch) if (tran) { const p2 = p1.transition(tran) if (changeSharpCorner.value) { // 只有在改变sharpCorner的时候才应该调用 p2.attrTween('d', pathTween) } else { p2.attr('d', getPath) } } else { p1.attr('d', getPath) } } function pathTween (data: Mdata, index: number, paths: ArrayLike) { const precision = 10 const d = getPath(data) const path0 = paths[index] const path1 = path0.cloneNode() as SVGPathElement const n0 = path0.getTotalLength() path1.setAttribute('d', d) const n1 = path1.getTotalLength() // Uniform sampling of distance based on specified precision. const distances = [0] const dt = precision / Math.max(n0, n1) let i = 0 while ((i += dt) < 1) distances.push(i) distances.push(1) // Compute point-interpolators at each distance. const points = distances.map((t) => { const p0 = path0.getPointAtLength(t * n0) const p1 = path1.getPointAtLength(t * n1) return d3.interpolate([p0.x, p0.y], [p1.x, p1.y]) }) return (t: number) => { return t < 1 ? 'M' + points.map(p => p(t)).join('L') : d } } ================================================ FILE: src/components/Mindmap/css/Mindmap.module.scss ================================================ $seleColor: rgba($color: blue, $alpha: 0.15); .container { position: relative; height: 100%; svg text { white-space: pre; } #svg-wrapper { width: 100%; height: 100%; } .asst-svg { position: absolute; width: 0; height: 0; } } .svg { display: block; width: 100%; height: 100%; background-color: #eeeef3; path { fill: none; stroke-linecap: round; } text { fill: #4B4B4B; cursor: default; } foreignObject { background-color: white; border: 1px solid #aaa; div { display: inline-block; outline: none; width: max-content; min-width: 22px; padding: 1px; white-space: pre; } } .trigger { fill: transparent; } &.dragging .add-btn { visibility: hidden; } .add-btn { opacity: 0; &.hidden { visibility: hidden; } rect { stroke-width: 1; stroke: grey; fill: white; } path { fill: #8685ff } } .expand-btn { visibility: hidden; &:hover { rect { fill: white } circle { fill: currentColor; } } } .text > rect { opacity: 0; fill: $seleColor; stroke-width: 1; stroke: white; } // 关于selected .selected > .content > .text > rect { opacity: 1; } .root.selected > .content > .text > rect { stroke-width: 3; stroke: $seleColor; } // 关于edited .edited > .content > .text { opacity: 0; } // outline .outline > .content > .text > rect { opacity: 1; fill: transparent; stroke-width: 3; stroke: $seleColor; } .root > .content > .text > rect { opacity: 1; fill: white; } .collapse > .content > .expand-btn { visibility: visible; } } .button-list { position: absolute; &.right-bottom { bottom: 0; right: 0; } &.right-top { top: 0; right: 0; display: flex; } } .button-list button { position: relative; cursor: pointer; width: 36px; height: 36px; border-radius: 50%; background-color: transparent; display: flex; align-items: center; justify-content: center; padding: 0; border: 0; color: #3f51b5; &::before { background-color: currentColor; border-radius: inherit; content: ""; opacity: 0; position: absolute; left: 0; right: 0; top: 0; bottom: 0; transition: opacity 0.2s cubic-bezier(0.4, 0, 0.6, 1); } &:hover::before { opacity: 0.1; } &.disabled { pointer-events: none; i { filter: invert(85%) sepia(20%) saturate(0%) hue-rotate(125deg) brightness(86%) contrast(93%); } } i { filter: invert(25%) sepia(40%) saturate(5050%) hue-rotate(227deg) brightness(78%) contrast(74%); width: 24px; height: 24px; &.gps { background-image: url(/icons/24px/crosshairs-gps.png) } &.fit { background-image: url(/icons/24px/fit-to-page-outline.png) } &.download { background-image: url(/icons/24px/download.png) } &.prev { background-image: url(/icons/24px/prev.png) } &.next { background-image: url(/icons/24px/next.png) } &.close { background-image: url(/icons/24px/close.png) } } } ================================================ FILE: src/components/Mindmap/css/Mindmap.module.scss.d.ts ================================================ declare const style: { readonly container: string readonly 'svg-wrapper': string readonly svg: string readonly 'asst-svg': string readonly dragging: string readonly 'button-list': string readonly 'right-bottom': string readonly 'right-top': string readonly disabled: string readonly gps: string readonly fit: string readonly root: string readonly selected: string readonly edited: string readonly text: string readonly outline: string readonly download: string readonly 'add-btn': string readonly 'hidden': string readonly 'expand-btn': string readonly 'collapse': string readonly content: string readonly trigger: string readonly menu: string readonly prev: string readonly next: string } export default style ================================================ FILE: src/components/Mindmap/css/index.ts ================================================ import style from './Mindmap.module.scss' export default style ================================================ FILE: src/components/Mindmap/d3.ts ================================================ export * from 'd3-shape' export * from 'd3-ease' export * from 'd3-zoom' export * from 'd3-selection' export * from 'd3-drag' export * from 'd3-transition' export * from 'd3-interpolate' ================================================ FILE: src/components/Mindmap/data/ImData.ts ================================================ import * as d3ScaleChromatic from 'd3-scale-chromatic' import * as d3Scale from 'd3-scale' import { Data, Mdata, IsMdata } from '@/components/Mindmap/interface' import { BoundingBox, Layout } from './flextree' type GetSize = (text: string) => { width: number, height: number } type Processer = (d: Mdata, id: string) => void const swapWidthAndHeight = (d: Mdata) => [d.width, d.height] = [d.height, d.width] const renewDelta = (d: Mdata) => { if (d.parent) { d.dx = d.x - d.parent.x d.dy = d.y - d.parent.y } else { d.dx = 0 d.dy = 0 } } const renewId = (d: Mdata, id: string) => d.id = id const renewDepth = (d: Mdata) => { if (d.parent) { d.depth = d.parent.depth + 1 } else { d.depth = 0 } } const renewColor = (d: Mdata): void => { if (d.parent && d.parent.color) { d.color = d.parent.color } } const renewLeft = (d: Mdata) => { if (d.depth > 1 && d.parent) { d.left = d.parent.left } } const separateLeftAndRight = (d: Mdata): { left: Mdata, right: Mdata } => { const ld = Object.assign({}, d) const rd = Object.assign({}, d) if (d.collapse) { // } else { const { children } = d ld.children = [] rd.children = [] children.forEach((child) => { if (child.left) { ld.children.push(child) } else { rd.children.push(child) } if (child.parent) { child.parent = rd } }) } return { left: ld, right: rd } } /** * 遍历数据d,在此过程中会对每个数据调用指定函数,同时删除id为del的数据,不处理被折叠的数据 * @param d - 数据 * @param processers - 函数 * @param id - 新id */ const traverse = (d: Mdata, processers: Processer[], id = '0') => { processers.forEach((p) => { p(d, id) }) const { children } = d if (children) { for (let index = 0; index < children.length; ) { const child = children[index] if (child.id === 'del') { children.splice(index, 1) d.rawData.children?.splice(index, 1) } else { traverse(child, processers, `${id}-${index}`) index += 1 } } } } const getLayout = (xGap: number, yGap: number) => { const bb = new BoundingBox(yGap, xGap) return new Layout(bb) } class ImData { data: Mdata private getSize: GetSize private layout: Layout private colorScale: d3Scale.ScaleOrdinal private colorNumber = 0 private gKey = 0 private rootWidth = 0 private diffY = 0 // 左树与右树的差值 constructor ( d: Data, xGap: number, yGap: number, getSize: GetSize, colorScale = d3Scale.scaleOrdinal(d3ScaleChromatic.schemePaired) ) { this.colorScale = colorScale this.getSize = getSize this.layout = getLayout(xGap, yGap) this.data = this.createMdataFromData(d, '0') this.renew() } private createMdataFromData (rawData: Data, id: string, parent: IsMdata = null): Mdata { const { name, collapse, children: rawChildren } = rawData const { width, height } = this.getSize(name) const depth = parent ? parent.depth + 1 : 0 let left = false let color = parent ? parent.color : '' if (depth === 1) { left = !!rawData.left color = this.colorScale(`${this.colorNumber += 1}`) } else if (depth !== 0 && parent) { left = parent.left } const data: Mdata = { id, name, rawData, parent, left, color, depth, x: 0, y: 0, dx: 0, dy: 0, px: 0, py: 0, width, height, children: [], _children: [], collapse: !!collapse, gKey: this.gKey += 1, } if (rawChildren) { if (!data.collapse) { rawChildren.forEach((c, j) => { data.children.push(this.createMdataFromData(c, `${id}-${j}`, data)) }) } else { rawChildren.forEach((c, j) => { data._children.push(this.createMdataFromData(c, `${id}-${j}`, data)) }) } } return data } /** * 默认更新x, y, dx, dy, left, depth * @param plugins - 需要更新其他属性时的函数 */ private renew (...plugins: Processer[]): void { traverse(this.data, [swapWidthAndHeight, renewDepth, renewLeft]) this.data = this.l(this.data) const temp: Processer[] = [swapWidthAndHeight, this.renewXY.bind(this), renewDelta] traverse(this.data, temp.concat(plugins)) } /** * 分别计算左右树,最后合并成一颗树,右树为主树 */ private l (data: Mdata): Mdata { const { left, right } = separateLeftAndRight(data) this.layout.layout(left) // 更新x,y this.layout.layout(right) this.diffY = right.x - left.x this.rootWidth = left.height right.children = data.children // children原顺序 return right } private renewXY (d: Mdata): void { [d.x, d.y] = [d.y, d.x] if (d.left) { d.x = -d.x + this.rootWidth d.y += this.diffY } } getRootWidth (): number { return this.rootWidth } setBoundingBox (xGap: number, yGap: number): void { this.layout = getLayout(xGap, yGap) this.renew() } find (id: string): IsMdata { // 根据id找到数据 const array = id.split('-').map(n => ~~n) let data = this.data for (let i = 1; i < array.length; i++) { const index = array[i] const { children } = data if (index < children.length) { data = children[index] } else { // No data matching id return null } } return data.id === id ? data : null } rename (id: string, name: string): IsMdata { // 修改名称 if (id.length > 0) { const d = this.find(id) if (d && d.name !== name) { d.name = name d.rawData.name = name // const size = this.getSize(d.name) d.width = size.width d.height = size.height this.renew() } return d } else { return null } } /** * 将b节点移动到a节点下 * @param parentId - 目标节点a * @param delId - 被移动节点b */ moveChild (parentId: string, delId: string): IsMdata { if (parentId === delId) { return null } const np = this.find(parentId) const del = this.find(delId) const delIndex = delId.split('-').pop() if (delIndex && np && del) { const delParent = del.parent delParent?.children?.splice(~~delIndex, 1) delParent?.rawData.children?.splice(~~delIndex, 1) del.parent = np del.gKey = this.gKey += 1 del.depth = del.parent.depth + 1 if (del.depth === 1) { del.color = this.colorScale(`${this.colorNumber += 1}`) } else { del.left = del.parent.left } if (np.collapse) { np._children.push(del) } else { np.children.push(del) } np.rawData.children ? np.rawData.children.push(del.rawData) : np.rawData.children = [del.rawData] this.renew(renewId, renewColor) } return del } moveSibling (id: string, referenceId: string, after = 0): IsMdata { // 同层调换顺序 const idArr = id.split('-') const refArr = referenceId.split('-') let index: number | string | undefined = idArr.pop() let refIndex: number | string | undefined = refArr.pop() if (id === referenceId || idArr.length !== refArr.length || !index || !refIndex) { return null } const d = this.find(id) const r = this.find(referenceId) if (r && d && d.parent) { index = parseInt(index, 10) refIndex = parseInt(refIndex, 10) if (index < refIndex) { refIndex -= 1 } // 删除时可能会改变插入的序号 const { children } = d.parent const { children: rawChildren } = d.parent.rawData if (children && rawChildren) { children.splice(index, 1) children.splice(refIndex + after, 0, d) rawChildren.splice(index, 1) rawChildren.splice(refIndex + after, 0, d.rawData) if (d.depth === 1) { d.left = r.left } this.renew(renewId) return d } } return null } add (id: string, variable: string | Data): IsMdata { const p = this.find(id) if (p) { if (p.collapse) { this.expand(id) } if (!p.rawData.children) { p.rawData.children = [] } if (typeof variable === 'string') { const name = variable const size = this.getSize(name) const rawData: Data = { name } const color = p.color ? p.color : this.colorScale(`${this.colorNumber += 1}`) const d: Mdata = { id: `${p.id}-${p.children.length}`, name, rawData, parent: p, left: p.left, collapse: false, color, gKey: this.gKey += 1, width: size.width, height: size.height, depth: p.depth + 1, x: 0, y: 0, dx: 0, dy: 0, px: 0, py: 0, children: [], _children: [] } p.children.push(d) p.rawData.children.push(rawData) this.renew() return d } else { const rawData = variable const m = this.createMdataFromData(rawData, `${p.id}-${p.children.length}`, p) p.children.push(m) p.rawData.children.push(rawData) this.renew() return m } } return null } expand (id: string): IsMdata { return this.eoc(id, false, [renewColor, renewId]) } collapse (id: string): IsMdata { return this.eoc(id, true) } /** * 展开或折叠(expand or collapse) */ eoc (id: string, collapse: boolean, plugins: Processer[] = []): IsMdata { const d = this.find(id) if (d) { d.collapse = collapse d.rawData.collapse = collapse ;[d._children, d.children] = [d.children, d._children] this.renew(...plugins) } return d } delete (id: string): void { const del = this.find(id) if (del && del.parent) { del.id = 'del' this.renew(renewId) } else { throw new Error(del ? '暂不支持删除根节点' : '未找到需要删除的节点') } } deleteOne (id: string): void { const del = this.find(id) if (del && del.parent) { const { parent, children, _children, collapse, rawData } = del const index = parseInt(id.split('-').pop() as string, 10) parent.children.splice(index, 1, ...(collapse ? _children : children)) parent.rawData.children?.splice(index, 1, ...(rawData.children || [])) children.forEach(c => { c.parent = parent if (c.depth === 1) { c.rawData.left = c.left } }) this.renew(renewId) } } addSibling (id: string, name: string, before = false): IsMdata { const d = this.find(id) if (d && d.parent) { const index = parseInt(id.split('-').pop() as string, 10) const { parent, left } = d const rawSibling: Data = { name, left } const size = this.getSize(name) const start = before ? index : index + 1 const color = parent.color ? parent.color : this.colorScale(`${this.colorNumber += 1}`) const sibling: Mdata = { name, parent, children: [], _children: [], color, collapse: false, rawData: rawSibling, id: `${parent.id}-${start}`, left, gKey: this.gKey += 1, depth: d.depth, width: size.width, height: size.height, x: 0, y: 0, dx: 0, dy: 0, px: 0, py: 0, } parent.children.splice(start, 0, sibling) parent.rawData.children?.splice(start, 0, rawSibling) this.renew(renewId) return sibling } return null } addParent (id: string, name: string): IsMdata { const d = this.find(id) if (d && d.parent) { const { parent: oldP, left, color } = d const size = this.getSize(name) const index = parseInt(d.id.split('-').pop() as string, 10) const rawP: Data = { name, children: [d.rawData], left } oldP.rawData.children?.splice(index, 1, rawP) const p: Mdata = { rawData: rawP, left, name, color, collapse: false, parent: oldP, id: d.id, depth: d.depth, width: size.width, height: size.height, gKey: this.gKey += 1, children: [d], _children: [], x: 0, y: 0, dx: 0, dy: 0, px: 0, py: 0 } d.parent = p oldP.children.splice(index, 1, p) this.renew(renewId) return p } return null } changeLeft (id: string): IsMdata { const d = this.find(id) if (d) { d.left = !d.left this.renew() } return d } } export default ImData ================================================ FILE: src/components/Mindmap/data/__tests__/ImData.integration.ts ================================================ import ImData from '../ImData' import learnData from '@/learn.json' import { xGap, yGap, getSize } from './config' import { cloneDeep } from 'lodash' import { Data } from '../../interface' describe('思维导图数据-集成测试', () => { let mmdata = new ImData(JSON.parse(JSON.stringify(learnData[0])), xGap, yGap, getSize) const clone = cloneDeep(mmdata) beforeEach(() => { mmdata = cloneDeep(clone) }) it('添加a节点到处于折叠状态的b节点下,然后展开b节点,a节点的color和id更新', () => { const aId = '0-0-0' const bId = '0-1' mmdata.moveChild(bId, aId) mmdata.expand(bId) const d = mmdata.find('0-1-1') expect(d).toBeTruthy() expect(d?.color).toBe(d?.parent?.color) }) it('成功添加新子节点后,找得到该子节点', () => { const a = mmdata.add('0', '子节点') expect(a).toBeTruthy() if (a) { const d = mmdata.find(a.id) expect(d).toBeTruthy() expect(d?.name).toBe('子节点') } }) it('添加新子树时,颜色保持一致', () => { const tree: Data = { name: '1', children: [ { name: '2' }, { name: '3' }, ] } const p = mmdata.find('0-0') const d = mmdata.add('0-0', tree) expect(d?.color).toBe(p?.color) }) it('删除单个目标节点', () => { mmdata.deleteOne('0-2') const d = mmdata.find('0-2') expect(d?.name).toBe('选择集') expect(d?.depth).toBe(1) expect(d?.left).toBe(true) }) }) ================================================ FILE: src/components/Mindmap/data/__tests__/ImData.unit.ts ================================================ import ImData from '../ImData' import learnData from '@/learn.json' import { xGap, yGap, getSize } from './config' import { cloneDeep } from 'lodash' import { Data } from '../../interface' describe('思维导图数据-单元测试', () => { let mmdata = new ImData(JSON.parse(JSON.stringify(learnData[0])), xGap, yGap, getSize) const clone = cloneDeep(mmdata) beforeEach(() => { mmdata = cloneDeep(clone) }) describe('根据Data生成思维导图数据', () => { it('生成成功', () => { expect(mmdata.data).toMatchSnapshot() }) }) describe('找到目标节点', () => { it('成功', () => { const id = '0-2-2' const d = mmdata.find(id) expect(d?.id).toBe(id) }) }) describe('给目标节点添加新子节点', () => { it('添加成功', () => { const d = mmdata.add('0-0', '子节点') expect(d?.id).toBe('0-0-5') expect(d?.name).toBe('子节点') expect(d).toMatchSnapshot() }) it('目标节点处于折叠状态下时,转换为展开状态并添加成功', () => { const d = mmdata.add('0-1', '子节点') expect(d?.parent?.collapse).toBeFalsy() expect(d?.id).toBe('0-1-1') expect(d?.name).toBe('子节点') }) it('添加新子树', () => { const tree: Data = { name: '1', children: [ { name: '2' }, { name: '3' }, ] } const d = mmdata.add('0-0', tree) expect(d?.id).toBe('0-0-5') expect(d?.name).toBe('1') expect(d?.children[0].id).toBe('0-0-5-0') expect(d?.children[0].name).toBe('2') expect(d).toMatchSnapshot() }) }) describe('删除目标节点', () => { it('删除成功', () => { mmdata.delete('0-1') expect(mmdata.data).toMatchSnapshot() }) }) describe('删除单个目标节点', () => { it('删除成功', () => { mmdata.deleteOne('0-1') expect(mmdata.data).toMatchSnapshot() }) }) describe('修改目标节点内容' , () => { it('修改成功', () => { const name = '新安装' const d = mmdata.rename('0-1', name) expect(d?.name).toBe(name) expect(d).toMatchSnapshot() }) }) describe('移动目标节点到指定的父亲节点下', () => { it('移动成功', () => { const d = mmdata.moveChild('0-3', '0-2') expect(d?.parent?.id).toBe('0-2') expect(d?.id).toBe('0-2-0') expect(d?.children[0].depth).toBe(3) expect(d).toMatchSnapshot() }) }) describe('移动目标节点到指定的兄弟节点之前', () => { it('移动成功', () => { const d = mmdata.moveSibling('0-2-0', '0-2-2') expect(d?.id).toBe('0-2-1') expect(d).toMatchSnapshot() }) it('兄弟节点不存在时,移动失败', () => { const d = mmdata.moveSibling('0-4-0', '0-4-3') expect(d).toBeNull() }) it('左边移到右边', () => { const d = mmdata.moveSibling('0-3', '0-1') expect(d?.left).toBeFalsy() expect(d?.id).toBe('0-1') expect(d).toMatchSnapshot() }) }) describe('展开目标节点', () => { it('展开成功', () => { const d = mmdata.expand('0-1') expect(d?.collapse).toBeFalsy() expect(d).toMatchSnapshot() }) }) describe('折叠目标节点', () => { it('折叠成功', () => { const d = mmdata.collapse('0-2-4') expect(d?.collapse).toBeTruthy() expect(d).toMatchSnapshot() }) }) describe('给目标节点添加新兄弟节点', () => { it('添加成功', () => { const d = mmdata.addSibling('0-2-0', '新兄弟节点') expect(d?.id).toBe('0-2-1') expect(d?.name).toBe('新兄弟节点') expect(d).toMatchSnapshot() }) }) describe('给目标节点添加新父节点', () => { it('添加成功', () => { const d = mmdata.addParent('0-0', '新父节点') expect(d?.id).toBe('0-0') expect(d?.name).toBe('新父节点') expect(d?.children[0].depth).toBe(2) expect(d?.color).toBe(d?.children[0].color) expect(d).toMatchSnapshot() }) }) describe('变更目标节点的左右布局', () => { it('变更成功', () => { const d = mmdata.changeLeft('0-0') expect(d?.left).toBe(true) }) }) }) ================================================ FILE: src/components/Mindmap/data/__tests__/__snapshots__/ImData.unit.ts.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`思维导图数据-单元测试 修改目标节点内容 修改成功 1`] = ` Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "新安装", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, [Circular], Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 93, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 149, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 205, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 135, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "新安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "新安装", }, "width": 10, "x": 94, "y": 121, } `; exports[`思维导图数据-单元测试 删除单个目标节点 删除成功 1`] = ` Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 94, "dy": 0, "gKey": 9, "height": 10, "id": "0-1", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 94, "y": 121, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 93, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 149, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 205, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 135, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "name": "折叠节点", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, } `; exports[`思维导图数据-单元测试 删除目标节点 删除成功 1`] = ` Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-1-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-1-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-1-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-1-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 93, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-1-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-1-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-1-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 149, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-1-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-1-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-1-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-1-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 205, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-1", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-2", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 135, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-3-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-3-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-3-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-3", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, } `; exports[`思维导图数据-单元测试 展开目标节点 展开成功 1`] = ` Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 94, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 188, "y": 149, }, ], "collapse": false, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 14, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -70, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, [Circular], Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 23, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 51, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 79, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 107, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 163, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 163, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 191, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 219, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 149, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 205, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 233, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 70, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 205, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": false, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 135, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": false, "name": "安装", }, "width": 10, "x": 94, "y": 149, } `; exports[`思维导图数据-单元测试 折叠目标节点 折叠成功 1`] = ` Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 149, }, ], "children": Array [], "collapse": true, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 93, }, [Circular], Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 205, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 121, }, [Circular], Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 135, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "collapse": true, "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "collapse": true, "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 107, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "collapse": true, "name": "简单图形", }, "width": 10, "x": -178, "y": 121, } `; exports[`思维导图数据-单元测试 根据Data生成思维导图数据 生成成功 1`] = ` Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 121, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 93, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 149, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 205, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 135, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, } `; exports[`思维导图数据-单元测试 移动目标节点到指定的兄弟节点之前 左边移到右边 1`] = ` Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": 94, "dy": -18.66666666666667, "gKey": 22, "height": 10, "id": "0-1", "left": false, "name": "进阶", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, [Circular], Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 18.666666666666657, "gKey": 8, "height": 10, "id": "0-2", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 139.66666666666666, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-3-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 23, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-3-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 51, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-3-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 79, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-3-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 107, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-3-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-3-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-3-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 163, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-3-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-3-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 163, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-3-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 191, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-3-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 219, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": 0, "gKey": 10, "height": 10, "id": "0-3", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 121, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, }, "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": 94, "y": 102.33333333333333, } `; exports[`思维导图数据-单元测试 移动目标节点到指定的兄弟节点之前 移动成功 1`] = ` Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 11, "height": 10, "id": "0-2-1", "left": true, "name": "选择集", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 12, "height": 10, "id": "0-2-0", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 9, }, [Circular], Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 93, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 149, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 205, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 121, }, [Circular], Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 135, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "test", }, Object { "name": "选择集", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "test", }, Object { "name": "选择集", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 107, }, "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 37, } `; exports[`思维导图数据-单元测试 移动目标节点到指定的父亲节点下 移动成功 1`] = ` Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -272, "y": 23, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-0-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -272, "y": 51, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-0-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -272, "y": 79, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-0-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -272, "y": 107, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 4, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-0-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -366, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 4, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-0-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -366, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 4, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-0-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -366, "y": 163, }, ], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-0-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -272, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-0-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -272, "y": 163, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-0-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -272, "y": 191, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 3, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-0-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -272, "y": 219, }, ], "collapse": false, "color": "#33a02c", "depth": 2, "dx": -94, "dy": 0, "gKey": 27, "height": 10, "id": "0-2-0", "left": true, "name": "入门", "parent": Object { "_children": Array [], "children": Array [ [Circular], ], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 0, "gKey": 22, "height": 10, "id": "0-2", "left": true, "name": "进阶", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 121, }, [Circular], Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-3-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-3-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-3-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-3", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, ], "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, ], "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 121, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -178, "y": 121, } `; exports[`思维导图数据-单元测试 给目标节点添加新兄弟节点 添加成功 1`] = ` Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -84, "gKey": 27, "height": 10, "id": "0-2-1", "left": true, "name": "新兄弟节点", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -112, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": -5, }, [Circular], Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -56, "gKey": 12, "height": 10, "id": "0-2-2", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 51, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -28, "gKey": 13, "height": 10, "id": "0-2-3", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 79, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 0, "gKey": 14, "height": 10, "id": "0-2-4", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 107, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-5-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 107, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-5-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-5-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 163, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 28, "gKey": 15, "height": 10, "id": "0-2-5", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 56, "gKey": 19, "height": 10, "id": "0-2-6", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 163, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 84, "gKey": 20, "height": 10, "id": "0-2-7", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 191, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 112, "gKey": 21, "height": 10, "id": "0-2-8", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 219, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -56, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 65, }, Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 121, }, [Circular], Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 135, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 205, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 56, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 177, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "left": true, "name": "新兄弟节点", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 121, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "left": true, "name": "新兄弟节点", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 107, }, "px": 0, "py": 0, "rawData": Object { "left": true, "name": "新兄弟节点", }, "width": 10, "x": -178, "y": 23, } `; exports[`思维导图数据-单元测试 给目标节点添加新子节点 添加成功 1`] = ` Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 70, "gKey": 27, "height": 10, "id": "0-0-5", "left": false, "name": "子节点", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -70, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -42, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -14, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 14, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 42, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, [Circular], ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -63, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": Object { "_children": Array [], "children": Array [ [Circular], Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 142, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 30, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 58, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 86, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 114, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 114, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 142, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 170, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 142, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 170, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 198, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 226, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 128, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 156, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 205, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 233, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 63, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 205, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, Object { "name": "子节点", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 142, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, Object { "name": "子节点", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 79, }, "px": 0, "py": 0, "rawData": Object { "name": "子节点", }, "width": 10, "x": 188, "y": 149, } `; exports[`思维导图数据-单元测试 给目标节点添加新子节点 添加新子树 1`] = ` Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 3, "dx": 94, "dy": -14, "gKey": 28, "height": 10, "id": "0-0-5-0", "left": false, "name": "2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "2", }, "width": 10, "x": 282, "y": 135, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 3, "dx": 94, "dy": 14, "gKey": 29, "height": 10, "id": "0-0-5-1", "left": false, "name": "3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "3", }, "width": 10, "x": 282, "y": 163, }, ], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 70, "gKey": 27, "height": 10, "id": "0-0-5", "left": false, "name": "1", "parent": Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -70, "gKey": 3, "height": 10, "id": "0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 188, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -42, "gKey": 4, "height": 10, "id": "0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 188, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": -14, "gKey": 5, "height": 10, "id": "0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 188, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 14, "gKey": 6, "height": 10, "id": "0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 42, "gKey": 7, "height": 10, "id": "0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 188, "y": 121, }, [Circular], ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -63, "gKey": 2, "height": 10, "id": "0-0", "left": false, "name": "预备知识", "parent": Object { "_children": Array [], "children": Array [ [Circular], Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 142, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": 30, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 58, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 86, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 114, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 114, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 142, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 170, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 142, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 170, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 198, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 226, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 128, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 156, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 177, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 205, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 233, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 63, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 205, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, Object { "children": Array [ Object { "name": "2", }, Object { "name": "3", }, ], "name": "1", }, ], "name": "预备知识", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 142, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, Object { "children": Array [ Object { "name": "2", }, Object { "name": "3", }, ], "name": "1", }, ], "name": "预备知识", }, "width": 10, "x": 94, "y": 79, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "2", }, Object { "name": "3", }, ], "name": "1", }, "width": 10, "x": 188, "y": 149, } `; exports[`思维导图数据-单元测试 给目标节点添加新父节点 添加成功 1`] = ` Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 3, "dx": 94, "dy": -56, "gKey": 3, "height": 10, "id": "0-0-0-0", "left": false, "name": "HTML & CSS", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "HTML & CSS", }, "width": 10, "x": 282, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 3, "dx": 94, "dy": -28, "gKey": 4, "height": 10, "id": "0-0-0-1", "left": false, "name": "JavaScript", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "JavaScript", }, "width": 10, "x": 282, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 3, "dx": 94, "dy": 0, "gKey": 5, "height": 10, "id": "0-0-0-2", "left": false, "name": "DOM", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "DOM", }, "width": 10, "x": 282, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 3, "dx": 94, "dy": 28, "gKey": 6, "height": 10, "id": "0-0-0-3", "left": false, "name": "SVG", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "SVG", }, "width": 10, "x": 282, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#a6cee3", "depth": 3, "dx": 94, "dy": 56, "gKey": 7, "height": 10, "id": "0-0-0-4", "left": false, "name": "test test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test test", }, "width": 10, "x": 282, "y": 121, }, ], "collapse": false, "color": "#a6cee3", "depth": 2, "dx": 94, "dy": 0, "gKey": 2, "height": 10, "id": "0-0-0", "left": false, "name": "预备知识", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, "width": 10, "x": 188, "y": 65, }, ], "collapse": false, "color": "#a6cee3", "depth": 1, "dx": 94, "dy": -28, "gKey": 27, "height": 10, "id": "0-0", "left": false, "name": "新父节点", "parent": Object { "_children": Array [], "children": Array [ [Circular], Object { "_children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#1f78b4", "depth": 2, "dx": 0, "dy": 0, "gKey": 9, "height": 10, "id": "0-1-0", "left": false, "name": "折叠节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折叠节点", }, "width": 10, "x": 0, "y": 0, }, ], "children": Array [], "collapse": true, "color": "#1f78b4", "depth": 1, "dx": 94, "dy": 0, "gKey": 8, "height": 10, "id": "0-1", "left": false, "name": "安装", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, "width": 10, "x": 94, "y": 93, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -98, "gKey": 11, "height": 10, "id": "0-2-0", "left": true, "name": "选择集", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "选择集", }, "width": 10, "x": -178, "y": -19, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -70, "gKey": 12, "height": 10, "id": "0-2-1", "left": true, "name": "test", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "test", }, "width": 10, "x": -178, "y": 9, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -42, "gKey": 13, "height": 10, "id": "0-2-2", "left": true, "name": "绑定数据", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "绑定数据", }, "width": 10, "x": -178, "y": 37, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": -14, "gKey": 14, "height": 10, "id": "0-2-3", "left": true, "name": "添加删除元素", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "添加删除元素", }, "width": 10, "x": -178, "y": 65, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": -28, "gKey": 16, "height": 10, "id": "0-2-4-0", "left": true, "name": "柱形图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "柱形图", }, "width": 10, "x": -272, "y": 65, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 0, "gKey": 17, "height": 10, "id": "0-2-4-1", "left": true, "name": "折线图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "折线图", }, "width": 10, "x": -272, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 3, "dx": -94, "dy": 28, "gKey": 18, "height": 10, "id": "0-2-4-2", "left": true, "name": "散点图", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "散点图", }, "width": 10, "x": -272, "y": 121, }, ], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 14, "gKey": 15, "height": 10, "id": "0-2-4", "left": true, "name": "简单图形", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, "width": 10, "x": -178, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 42, "gKey": 19, "height": 10, "id": "0-2-5", "left": true, "name": "比例尺", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "比例尺", }, "width": 10, "x": -178, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 70, "gKey": 20, "height": 10, "id": "0-2-6", "left": true, "name": "生成器", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "生成器", }, "width": 10, "x": -178, "y": 149, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#b2df8a", "depth": 2, "dx": -94, "dy": 98, "gKey": 21, "height": 10, "id": "0-2-7", "left": true, "name": "过渡", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "过渡", }, "width": 10, "x": -178, "y": 177, }, ], "collapse": false, "color": "#b2df8a", "depth": 1, "dx": -84, "dy": -14, "gKey": 10, "height": 10, "id": "0-2", "left": true, "name": "入门", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, "width": 10, "x": -84, "y": 79, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#33a02c", "depth": 1, "dx": -84, "dy": 14, "gKey": 22, "height": 10, "id": "0-3", "left": true, "name": "进阶", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "left": true, "name": "进阶", }, "width": 10, "x": -84, "y": 107, }, Object { "_children": Array [], "children": Array [ Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": -28, "gKey": 24, "height": 10, "id": "0-4-0", "left": false, "name": "子节点1", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点1", }, "width": 10, "x": 188, "y": 93, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 0, "gKey": 25, "height": 10, "id": "0-4-1", "left": false, "name": "子节点2", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点2", }, "width": 10, "x": 188, "y": 121, }, Object { "_children": Array [], "children": Array [], "collapse": false, "color": "#fb9a99", "depth": 2, "dx": 94, "dy": 28, "gKey": 26, "height": 10, "id": "0-4-2", "left": false, "name": "子节点3", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "name": "子节点3", }, "width": 10, "x": 188, "y": 149, }, ], "collapse": false, "color": "#fb9a99", "depth": 1, "dx": 94, "dy": 28, "gKey": 23, "height": 10, "id": "0-4", "left": false, "name": "一级节点", "parent": [Circular], "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, "width": 10, "x": 94, "y": 121, }, ], "collapse": false, "color": "", "depth": 0, "dx": 0, "dy": 0, "gKey": 1, "height": 10, "id": "0", "left": false, "name": "如何学习D3", "parent": null, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, ], "left": false, "name": "新父节点", }, Object { "children": Array [ Object { "name": "折叠节点", }, ], "collapse": true, "name": "安装", }, Object { "children": Array [ Object { "name": "选择集", }, Object { "name": "test", }, Object { "name": "绑定数据", }, Object { "name": "添加删除元素", }, Object { "children": Array [ Object { "name": "柱形图", }, Object { "name": "折线图", }, Object { "name": "散点图", }, ], "name": "简单图形", }, Object { "name": "比例尺", }, Object { "name": "生成器", }, Object { "name": "过渡", }, ], "left": true, "name": "入门", }, Object { "left": true, "name": "进阶", }, Object { "children": Array [ Object { "name": "子节点1", }, Object { "name": "子节点2", }, Object { "name": "子节点3", }, ], "name": "一级节点", }, ], "name": "如何学习D3", }, "width": 10, "x": 0, "y": 93, }, "px": 0, "py": 0, "rawData": Object { "children": Array [ Object { "children": Array [ Object { "name": "HTML & CSS", }, Object { "name": "JavaScript", }, Object { "name": "DOM", }, Object { "name": "SVG", }, Object { "name": "test test", }, ], "name": "预备知识", }, ], "left": false, "name": "新父节点", }, "width": 10, "x": 94, "y": 65, } `; ================================================ FILE: src/components/Mindmap/data/__tests__/config.ts ================================================ export const yGap = 18 export const xGap = 84 export const getSize = (): { width: number, height: number } => ({ width: 10, height: 10 }) ================================================ FILE: src/components/Mindmap/data/flextree/algorithm.ts ================================================ class Tree { w: number h: number y: number c: Tree[] cs: number x: number prelim: number mod: number shift: number change: number tl: Tree | null tr: Tree | null el: Tree | null er: Tree | null msel: number mser: number constructor (width: number, height: number, y: number, children: Tree[]) { this.w = width this.h = height this.y = y this.c = children this.cs = children.length this.x = 0 this.prelim = 0 this.mod = 0 this.shift = 0 this.change = 0 this.tl = null // Left thread this.tr = null // Right thread this.el = null // extreme left nodes this.er = null // extreme right nodes // sum of modifiers at the extreme nodes this.msel = 0 this.mser = 0 } } function setExtremes (tree: Tree) { if (tree.cs === 0) { tree.el = tree tree.er = tree tree.msel = tree.mser = 0 } else { tree.el = tree.c[0].el tree.msel = tree.c[0].msel tree.er = tree.c[tree.cs - 1].er tree.mser = tree.c[tree.cs - 1].mser } } function bottom (tree: Tree) { return tree.y + tree.h } /* A linked list of the indexes of left siblings and their lowest vertical coordinate. */ class IYL { lowY: number index: number next: IYL | null constructor (lowY: number, index: number, next: IYL | null) { this.lowY = lowY this.index = index this.next = next } } function updateIYL (minY: number, i: number, ih: IYL | null) { // Remove siblings that are hidden by the new subtree. while (ih !== null && minY >= ih.lowY) { // Prepend the new subtree ih = ih.next } return new IYL(minY, i, ih) } function distributeExtra (tree: Tree, i: number, si: number, distance: number) { // Are there intermediate children? if (si !== i - 1) { const nr = i - si tree.c[si + 1].shift += distance / nr tree.c[i].shift -= distance / nr tree.c[i].change -= distance - distance / nr } } function moveSubtree (tree: Tree, i: number, si: number, distance: number) { // Move subtree by changing mod. tree.c[i].mod += distance tree.c[i].msel += distance tree.c[i].mser += distance distributeExtra(tree, i, si, distance) } function nextLeftContour (tree: Tree) { return tree.cs === 0 ? tree.tl : tree.c[0] } function nextRightContour (tree: Tree) { return tree.cs === 0 ? tree.tr : tree.c[tree.cs - 1] } function setLeftThread (tree: Tree, i: number, cl: Tree, modsumcl: number) { const li = tree.c[0].el as Tree li.tl = cl // Change mod so that the sum of modifier after following thread is correct. const diff = (modsumcl - cl.mod) - tree.c[0].msel li.mod += diff // Change preliminary x coordinate so that the node does not move. li.prelim -= diff // Update extreme node and its sum of modifiers. tree.c[0].el = tree.c[i].el tree.c[0].msel = tree.c[i].msel } // Symmetrical to setLeftThread function setRightThread (tree: Tree, i: number, sr: Tree, modsumsr: number) { const ri = tree.c[i].er as Tree ri.tr = sr const diff = (modsumsr - sr.mod) - tree.c[i].mser ri.mod += diff ri.prelim -= diff tree.c[i].er = tree.c[i - 1].er tree.c[i].mser = tree.c[i - 1].mser } function seperate (tree: Tree, i: number, ih: IYL) { // Right contour node of left siblings and its sum of modifiers. let sr: Tree | null = tree.c[i - 1] let mssr = sr.mod // Left contour node of right siblings and its sum of modifiers. let cl: Tree | null = tree.c[i] let mscl = cl.mod while (sr !== null && cl !== null) { if (bottom(sr) > ih.lowY) { ih = ih.next as IYL } // How far to the left of the right side of sr is the left side of cl. const distance = mssr + sr.prelim + sr.w - (mscl + cl.prelim) if (distance > 0) { mscl += distance moveSubtree(tree, i, ih.index, distance) } const sy = bottom(sr) const cy = bottom(cl) if (sy <= cy) { sr = nextRightContour(sr) if (sr !== null) { mssr += sr.mod } } if (sy >= cy) { cl = nextLeftContour(cl) if (cl !== null) { mscl += cl.mod } } } // Set threads and update extreme nodes. // In the first case, the current subtree must be taller than the left siblings. if (sr === null && cl !== null) { setLeftThread(tree, i, cl, mscl) } else if (sr !== null && cl === null) { setRightThread(tree, i, sr, mssr) } } function positionRoot (tree: Tree) { // Position root between children, taking into account their mod. tree.prelim = (tree.c[0].prelim + tree.c[0].mod + tree.c[tree.cs - 1].mod + tree.c[tree.cs - 1].prelim + tree.c[tree.cs - 1].w) / 2 - tree.w / 2 } function firstWalk (tree: Tree) { if (tree.cs === 0) { setExtremes(tree) return } firstWalk(tree.c[0]) let ih = updateIYL(bottom(tree.c[0].el as Tree), 0, null) for (let i = 1; i < tree.cs; i++) { firstWalk(tree.c[i]) const minY = bottom(tree.c[i].er as Tree) seperate(tree, i, ih) ih = updateIYL(minY, i, ih) } positionRoot(tree) setExtremes(tree) } function addChildSpacing (tree: Tree) { let d = 0 let modsumdelta = 0 for (let i = 0; i < tree.cs; i++) { d += tree.c[i].shift modsumdelta += d + tree.c[i].change tree.c[i].mod += modsumdelta } } function secondWalk (tree: Tree, modsum: number) { modsum += tree.mod // Set absolute (no-relative) horizontal coordinates. tree.x = tree.prelim + modsum addChildSpacing(tree) for (let i = 0; i < tree.cs; i++) { secondWalk(tree.c[i], modsum) } } function layout (tree: Tree): void { firstWalk(tree) secondWalk(tree, 0) } export { Tree, layout } ================================================ FILE: src/components/Mindmap/data/flextree/helper.ts ================================================ import { layout, Tree } from './algorithm' interface TreeData { width: number height: number children?: TreeData[] x: number y: number } interface Box { left: number right: number top: number bottom: number } export class BoundingBox { gap: number bottomPadding: number /** * @param gap - the gap between sibling nodes * @param bottomPadding - the height reserved for connection drawing */ constructor (gap: number, bottomPadding: number) { this.gap = gap this.bottomPadding = bottomPadding } addBoundingBox (width: number, height: number): { width: number, height: number } { return { width: width + this.gap, height: height + this.bottomPadding } } /** * Return the coordinate without the bounding box for a node */ removeBoundingBox (x: number, y: number): { x: number, y: number } { return { x: x + this.gap / 2, y } } } export class Layout { bb: BoundingBox constructor (boundingBox: BoundingBox) { this.bb = boundingBox } /** * Layout treeData. * Return modified treeData and the bounding box encompassing all the nodes. * * See getSize() for more explanation. */ layout (treeData: T): { result: T, boundingBox: Box } { const tree = this.convert(treeData) layout(tree) const { boundingBox, result } = this.assignLayout(tree, treeData) return { result, boundingBox } } /** * Returns Tree to layout, with bounding boxes added to each node. */ convert (treeData: TreeData, y = 0): Tree { const { width, height } = this.bb.addBoundingBox( treeData.width, treeData.height ) const children = [] if (treeData.children && treeData.children.length) { for (let i = 0; i < treeData.children.length; i++) { children[i] = this.convert(treeData.children[i], y + height) } } return new Tree(width, height, y, children) } /** * Assign layout tree x, y coordinates back to treeData, * with bounding boxes removed. */ assignCoordinates (tree: Tree, treeData: TreeData): void { const { x, y } = this.bb.removeBoundingBox(tree.x, tree.y) treeData.x = x treeData.y = y for (let i = 0; i < tree.c.length; i++) { this.assignCoordinates(tree.c[i], (treeData.children as TreeData[])[i]) } } /** * Return the bounding box that encompasses all the nodes. * The result has a structure of * \{ left: number, right: number, top: number, bottom: nubmer \}. * This is not the same bounding box concept as the `BoundingBox` class * used to construct `Layout` class. */ getSize (treeData: TreeData, box?: Box): Box { const { x, y, width, height } = treeData if (!box) { box = { left: x, right: x + width, top: y, bottom: y + height } } box.left = Math.min(box.left, x) box.right = Math.max(box.right, x + width) box.top = Math.min(box.top, y) box.bottom = Math.max(box.bottom, y + height) if (treeData.children) { for (const child of treeData.children) { this.getSize(child, box) } } return box } /** * This function does assignCoordinates and getSize in one pass. */ assignLayout (tree: Tree, treeData: T, box?: Box): { result: T, boundingBox: Box } { const { x, y } = this.bb.removeBoundingBox(tree.x, tree.y) treeData.x = x treeData.y = y const { width, height } = treeData if (!box) { box = { left: x, right: x + width, top: y, bottom: y + height } } box.left = Math.min(box.left, x) box.right = Math.max(box.right, x + width) box.top = Math.min(box.top, y) box.bottom = Math.max(box.bottom, y + height) for (let i = 0; i < tree.c.length; i++) { this.assignLayout(tree.c[i], (treeData.children as T[])[i], box) } return { result: treeData, boundingBox: box } } } ================================================ FILE: src/components/Mindmap/data/flextree/index.ts ================================================ import { layout } from './algorithm' import { BoundingBox, Layout } from './helper' export { layout, BoundingBox, Layout } ================================================ FILE: src/components/Mindmap/data/index.ts ================================================ import emitter from '@/mitt' import cloneDeep from 'lodash.clonedeep' import { draw } from '../draw' import { Data, IsMdata } from '../interface' import { snapshot, updateTimeTravelState } from '../state' import { mmcontext } from '../variable' import ImData from './ImData' export { ImData } // 思维导图数据 export let mmdata: ImData emitter.on('mmdata', (val) => val ? mmdata = val : null) export const afterOperation = (snap = true): void => { if (snap) { snapshot.snap(mmdata.data) } mmcontext.emit('update:modelValue', cloneDeep([mmdata.data.rawData])) updateTimeTravelState() draw() } export const rename = (id: string, name: string): void => { mmdata.rename(id, name) afterOperation() } export const moveChild = (pid: string, id: string): void => { mmdata.moveChild(pid, id) afterOperation() } export const moveSibling = (id: string, referenceId: string, after = 0): void => { mmdata.moveSibling(id, referenceId, after) afterOperation() } export const add = (id: string, name: string | Data): IsMdata => { const d = mmdata.add(id, name) afterOperation() return d } export const del = (id: string): void => { mmdata.delete(id) afterOperation() } export const delOne = (id: string): void => { mmdata.deleteOne(id) afterOperation() } export const expand = (id: string): void => { mmdata.expand(id) afterOperation() } export const collapse = (id: string): void => { mmdata.collapse(id) afterOperation() } export const addSibling = (id: string, name: string, before = false): IsMdata => { const d = mmdata.addSibling(id, name, before) afterOperation() return d } export const addParent = (id: string, name: string): IsMdata => { const d = mmdata.addParent(id, name) afterOperation() return d } export const changeLeft = (id: string): void => { mmdata.changeLeft(id) afterOperation() } ================================================ FILE: src/components/Mindmap/draw/index.ts ================================================ import { TspanData, Mdata, SelectionG, IsMdata } from '@/components/Mindmap/interface' import * as d3 from '../d3' import { attrA, attrAddBtnRect, attrExpandBtnCircle, attrExpandBtnRect, attrG, attrPath, attrText, attrTspan, getSiblingGClass, getTspanData } from '../attribute' import { getAddPath, makeTransition } from '../assistant' import { addBtnRect, addNodeBtn, drag, mmprops, selection } from '../variable' import { mmdata } from '../data' import { addAndEdit, onClickExpandBtn, onEdit, onMouseEnter, onMouseLeave, onSelect } from '../listener' import style from '../css' export const appendTspan = ( enter: d3.Selection ): d3.Selection => { const tspan = enter.append('tspan') attrTspan(tspan) return tspan } export const updateTspan = ( update: d3.Selection ): d3.Selection => { attrTspan(update) return update } export const appendAddBtn = (g: SelectionG): d3.Selection => { const gAddBtn = g.append('g') attrAddBtnRect(gAddBtn.append('rect')) gAddBtn.append('path').attr('d', getAddPath(2, addBtnRect.side)) return gAddBtn } const appendAndBindAddBtn = (g: SelectionG) => { const gAddBtn = appendAddBtn(g) gAddBtn.on('click', addAndEdit) return gAddBtn } export const appendExpandBtn = (g: SelectionG): d3.Selection => { const expandBtn = g.append('g') attrExpandBtnRect(expandBtn.append('rect')) attrExpandBtnCircle(expandBtn.append('circle'), -4) attrExpandBtnCircle(expandBtn.append('circle'), 0) attrExpandBtnCircle(expandBtn.append('circle'), 4) return expandBtn } const bindEvent = (g: SelectionG, isRoot: boolean) => { const gExpandBtn = g.select(`:scope > g.${style.content} > g.${style['expand-btn']}`) gExpandBtn.on('click', onClickExpandBtn) if (mmprops.value.drag || mmprops.value.edit) { const gText = g.select(`:scope > g.${style.content} > g.${style.text}`) gText.on('mousedown', onSelect) if (mmprops.value.drag && !isRoot) { drag(gText) } if (mmprops.value.edit) { gText.on('click', onEdit) } } if (addNodeBtn.value) { g.select(`:scope > g.${style.content}`) .on('mouseenter', onMouseEnter) .on('mouseleave', onMouseLeave) } } const appendNode = (enter: d3.Selection) => { const isRoot = !enter.data()[0]?.depth const enterG = enter.append('g') attrG(enterG) // 绘制线 attrPath(enterG.append('path')) // 节点容器 const gContent = enterG.append('g').attr('class', style.content) const gTrigger = gContent.append('rect') // 绘制文本 const gText = gContent.append('g').attr('class', style.text) const gTextRect = gText.append('rect') const text = gText.append('text') attrText(text) const tspan = text.selectAll('tspan').data(getTspanData).enter().append('tspan') attrTspan(tspan) // 绘制添加按钮 let gAddBtn if (addNodeBtn.value) { gAddBtn = appendAndBindAddBtn(gContent) } // 绘制折叠按钮 const gExpandBtn = appendExpandBtn(gContent) attrA(isRoot, gTrigger, gTextRect, gExpandBtn, gAddBtn) bindEvent(enterG, isRoot) enterG.each((d, i) => { if (!d.children) { return } draw(d.children, enterG.filter((a, b) => i === b)) }) gContent.raise() return enterG } const updateNode = (update: SelectionG) => { const isRoot = !update.data()[0]?.depth const tran = makeTransition(500, d3.easePolyOut) attrG(update, tran) attrPath(update.select(':scope > path'), tran) const gContent = update.select(`:scope > g.${style.content}`) const gTrigger = gContent.select(':scope > rect') const gText = gContent.select(`g.${style.text}`) const gTextRect = gText.select('rect') const text = gText.select('text') attrText(text, tran) text.selectAll('tspan') .data(getTspanData) .join(appendTspan, updateTspan, exit => exit.remove()) let gAddBtn = gContent.select(`g.${style['add-btn']}`) const gExpandBtn = gContent.select(`g.${style['expand-btn']}`) if (addNodeBtn.value) { if (!gAddBtn.node()) { gAddBtn = appendAndBindAddBtn(gContent) } } else { gAddBtn.remove() } attrA(isRoot, gTrigger, gTextRect, gExpandBtn, gAddBtn) update.each((d, i) => { if (!d.children) { return } draw(d.children, update.filter((a, b) => i === b)) }) gContent.raise() return update } export const draw = (d = [mmdata.data], sele = selection.g as d3.Selection): void => { const temp = sele.selectAll(`g.${getSiblingGClass(d[0]).join('.')}`) temp.data(d, (d) => d.gKey).join(appendNode, updateNode) } ================================================ FILE: src/components/Mindmap/index.ts ================================================ import Mindmap from './Mindmap.vue' export default Mindmap ================================================ FILE: src/components/Mindmap/interface.ts ================================================ import * as d3 from './d3' export interface Data { name: string children?: Array left?: boolean collapse?: boolean } export interface TreeData { rawData: Data width: number height: number x: number y: number children: TreeData[] _children: TreeData[] left: boolean, collapse: boolean } export interface Mdata { rawData: Data name: string parent: IsMdata children: Array _children: Array // 当折叠时保存children数据 left: boolean collapse: boolean id: string // 代表着数据的顺序和嵌套层次 color: string gKey: number width: number height: number depth: number x: number y: number dx: number dy: number // 拖拽时的偏移量 px: number py: number } export interface TspanData { name: string, height: number } export type Transition = d3.Transition export type SelectionG = d3.Selection export type SelectionRect = d3.Selection export type SelectionCircle = d3.Selection export type TwoNumber = [number, number] export type IsMdata = Mdata | null export type Locale = 'zh' | 'en' | 'ptBR' ================================================ FILE: src/components/Mindmap/listener/index.ts ================================================ export * from './switcher' export * from './listener' ================================================ FILE: src/components/Mindmap/listener/listener.ts ================================================ import style from '../css' import { ctm, editFlag, selection, textRectPadding, zoomTransform } from '../variable' import * as d3 from '../d3' import { Mdata } from '../interface' import { fitView, getRelativePos, getSelectedGData, isData, moveNode, moveView, scaleView, selectGNode } from '../assistant' import { add, addParent, addSibling, changeLeft, collapse, del, delOne, expand, mmdata, moveChild, moveSibling, rename } from '../data' import { svgEle, gEle, foreignDivEle, wrapperEle, foreignEle } from '../variable/element' import emitter from '@/mitt' import { getDataId, getSiblingGClass } from '../attribute' import { MenuEvent } from '../variable/contextmenu' /** * @param this - gContent */ export function onMouseEnter (this: SVGGElement): void { const temp = this.querySelector(`g.${style['add-btn']}`) if (temp) { temp.style.opacity = '1' } } /** * @param this - gContent */ export function onMouseLeave (this: SVGGElement): void { const temp = this.querySelector(`g.${style['add-btn']}`) if (temp) { temp.style.opacity = '0' } } export const onZoomMove = (e: d3.D3ZoomEvent): void => { const { g } = selection if (!g) { return } zoomTransform.value = e.transform g.attr('transform', e.transform.toString()) } export const onSelect = (e: MouseEvent, d: Mdata): void => { e.stopPropagation() selectGNode(d) } /** * 进入编辑状态 * @param this - gText */ export function onEdit (this: SVGGElement, _e: MouseEvent, d: Mdata): void { const gNode = this.parentNode?.parentNode as SVGGElement const { foreign } = selection if (editFlag && foreign && foreignDivEle.value) { gNode.classList.add(style.edited) emitter.emit('edit-flag', false) foreign.attr('x', d.x - 2 - (d.left ? d.width : 0)) .attr('y', d.y - mmdata.data.y - 2) .attr('data-id', d.id) .attr('data-name', d.name) .style('display', '') const div = foreignDivEle.value div.textContent = d.name div.focus() getSelection()?.selectAllChildren(div) const gContent = gNode.querySelector(`:scope > .${style.content}`) if (gContent) { moveView(gContent) } } } export const onEditBlur = (): void => { document.getElementsByClassName(style.edited)[0]?.classList.remove(style.edited, style.selected) if (foreignEle.value && foreignDivEle.value) { foreignEle.value.style.display = 'none' const id = foreignEle.value.getAttribute('data-id') const oldname = foreignEle.value.getAttribute('data-name') const name = foreignDivEle.value.textContent if (id && name !== null && name !== oldname) { rename(id, name) } } } export const onContextmenu = (e: MouseEvent): void => { e.preventDefault() if (!wrapperEle.value) { return } const relativePos = getRelativePos(wrapperEle.value, e) ctm.pos.value = relativePos const eventTargets = e.composedPath() as SVGElement[] const gNode = eventTargets.find((et) => et.classList?.contains('node')) if (gNode) { const { classList } = gNode const isRoot = classList.contains(style.root) const collapseFlag = classList.contains(style['collapse']) if (!classList.contains(style.selected)) { selectGNode(gNode as SVGGElement) } ctm.deleteItem.value.disabled = isRoot ctm.cutItem.value.disabled = isRoot ctm.deleteOneItem.value.disabled = isRoot ctm.addSiblingItem.value.disabled = isRoot ctm.addSiblingBeforeItem.value.disabled = isRoot ctm.addParentItem.value.disabled = isRoot ctm.expandItem.value.disabled = !collapseFlag ctm.collapseItem.value.disabled = collapseFlag || classList.contains('leaf') ctm.showViewMenu.value = false } else { ctm.showViewMenu.value = true } emitter.emit('showContextmenu', true) } export const onClickMenu = (name: MenuEvent): void => { switch (name) { case 'zoomfit': fitView(); break case 'zoomin': scaleView(true); break case 'zoomout': scaleView(true); break case 'add': addAndEdit(new MouseEvent('click'), getSelectedGData()); break case 'delete': del(getSelectedGData().id); break case 'delete-one': delOne(getSelectedGData().id); break case 'collapse': collapse(getSelectedGData().id); break case 'expand': expand(getSelectedGData().id); break case 'add-sibling': { const seleData = getSelectedGData() const d = addSibling(seleData.id, '') if (d) { edit(d) } } break case 'add-sibling-before': { const seleData = getSelectedGData() const d = addSibling(seleData.id, '', true) if (d) { edit(d) } } break case 'add-parent': { const seleData = getSelectedGData() const d = addParent(seleData.id, '') if (d) { edit(d) } } break case 'cut': { const { id } = getSelectedGData() const rawdata = mmdata.find(id)?.rawData if (rawdata) { // navigator.clipboard.write navigator.clipboard.writeText(JSON.stringify(rawdata)) } del(id) } break case 'copy': { const seleData = getSelectedGData() const rawdata = mmdata.find(seleData.id)?.rawData if (rawdata) { // navigator.clipboard.write navigator.clipboard.writeText(JSON.stringify(rawdata)) } } break case 'paste': { const seleData = getSelectedGData() navigator.clipboard.readText().then(clipText => { const rawdata = isData(clipText) || { name: clipText } add(seleData.id, rawdata) }) } break default: break } } /** * 添加子节点并进入编辑模式 */ export const addAndEdit = (e: MouseEvent, d: Mdata): void => { const child = add(d.id, '') if (child) { edit(child, e) } } /** * 选中节点进入编辑模式 */ export function edit (d: Mdata, e = new MouseEvent('click')): void { const { g } = selection if (!g) { return } const gText = g.selectAll(`g[data-id='${getDataId(d)}'] > g.${style.content} > g.${style.text}`) const node = gText.node() if (node) { emitter.emit('edit-flag', true) onEdit.call(node, e, d) } } export const onClickExpandBtn = (e: MouseEvent, d: Mdata): void => { expand(d.id) } /** * @param this - gText */ export function onDragMove (this: SVGGElement, e: d3.D3DragEvent, d: Mdata): void { const gNode = this.parentNode?.parentNode as SVGGElement if (svgEle.value) { svgEle.value.classList.add(style.dragging) } const { g } = selection if (!g) { return } moveNode(gNode, d, [e.x - d.x, e.y - d.y]) // 鼠标相对gEle左上角的位置 const mousePos = d3.pointer(e, gEle.value) mousePos[1] += mmdata.data.y const temp = g.selectAll('g.node').filter((other) => { if (other !== d && other !== d.parent && !other.id.startsWith(d.id)) { let diffx0 = textRectPadding let diffx1 = other.width + textRectPadding if (other.left && other.depth !== 0) { [diffx0, diffx1] = [diffx1, diffx0] } const rect = { x0: other.x - diffx0, x1: other.x + diffx1, y0: other.y - textRectPadding, y1: other.y + other.height + textRectPadding } return mousePos[0] > rect.x0 && mousePos[1] > rect.y0 && mousePos[0] < rect.x1 && mousePos[1] < rect.y1 } return false }) const old = Array.from(document.getElementsByClassName(style.outline)) const n = temp.node() old.forEach((o) => { if (o !== n) { o.classList.remove(style.outline) } }) n?.classList.add(style.outline) } /** * @param this - gText */ export function onDragEnd (this: SVGGElement, e: d3.D3DragEvent, d: Mdata): void { const gNode = this.parentNode?.parentNode as SVGGElement if (svgEle.value) { svgEle.value.classList.remove(style.dragging) } // 判断是否找到了新的父节点 const np = document.getElementsByClassName(style.outline)[0] if (np) { np.classList.remove(style.outline) const pid = np.getAttribute('data-id') if (pid) { d.px = 0 d.py = 0 moveChild(pid, d.id) } else { throw new Error('outline data-id null') } return } // 判断是否变换left const xToCenter = d.x - mmdata.getRootWidth() / 2 const lr = d.depth === 1 && (xToCenter * (xToCenter + d.px) < 0) const getSameSide = lr ? (a: Mdata) => a.left !== d.left : (a: Mdata) => a.left === d.left // 判断是否需要调换节点顺序 const p = gNode.parentNode as SVGGElement let downD = lr ? { y: Infinity, id: d.id } : d let upD = lr ? { y: -Infinity, id: d.id } : d const brothers = d3.select(p) .selectAll(`g.${getSiblingGClass(d).join('.')}`) .filter((a) => a !== d && getSameSide(a)) const endY = d.y + d.py brothers.each((b) => { if ((lr || b.y > d.y) && b.y < endY && b.y > upD.y) { upD = b } // 找新哥哥节点 if ((lr || b.y < d.y) && b.y > endY && b.y < downD.y) { downD = b } // 找新弟弟节点 }) if (downD.id !== d.id) { d.px = 0 d.py = 0 moveSibling(d.id, downD.id) } else if (upD.id !== d.id) { d.px = 0 d.py = 0 moveSibling(d.id, upD.id, 1) } else if (lr) { d.px = 0 d.py = 0 changeLeft(d.id) } else { // 复原 moveNode(gNode, d, [0, 0], 500) } } ================================================ FILE: src/components/Mindmap/listener/switcher.ts ================================================ import style from '../css' import { Mdata } from '../interface' import { onContextmenu, onEdit, onSelect } from './listener' import { selection, zoom, drag } from '../variable' import { foreignDivEle, wrapperEle } from '../variable/element' export const switchZoom = (zoomable: boolean): void => { const { svg } = selection if (!svg) { return } if (zoomable) { zoom(svg) svg.on('dblclick.zoom', null) } else { svg.on('.zoom', null) } } export const switchEdit = (editable: boolean): void => { const { g } = selection if (!foreignDivEle.value || !g) { return } const gText = g.selectAll(`g.${style.text}`) if (editable) { gText.on('click', onEdit) } else { gText.on('click', null) } } export const switchSelect = (selectable: boolean): void => { const { g } = selection if (!g) { return } const gText = g.selectAll(`g.${style.text}`) if (selectable) { gText.on('mousedown', onSelect) } else { gText.on('mousedown', null) } } export const switchContextmenu = (val: boolean): void => { if (!wrapperEle.value) { return } if (val) { wrapperEle.value.addEventListener('contextmenu', onContextmenu) } else { wrapperEle.value.removeEventListener('contextmenu', onContextmenu) } } export const switchDrag = (draggable: boolean): void => { const { g } = selection if (!g) { return } const gText = g.selectAll(`g.node:not(.${style.root}) > g > g.${style.text}`) if (draggable) { drag(gText) } else { gText.on('.drag', null) } } ================================================ FILE: src/components/Mindmap/state/Snapshot.ts ================================================ import { cloneDeep } from 'lodash' export default class Snapshot { private length: number // 最大记录数 private snapshots: Array private cursor: number constructor (length = 20) { this.length = length this.snapshots = [] this.cursor = -1 } get hasPrev(): boolean { return this.cursor > 0 } get hasNext(): boolean { return this.snapshots.length > this.cursor + 1 } snap (data: T): void { // 记录数据快照 const snapshot = cloneDeep(data) // 去除旧分支 while (this.cursor < this.snapshots.length - 1) { this.snapshots.pop() } this.snapshots.push(snapshot) // 确保历史记录条数限制 if (this.snapshots.length > this.length) { this.snapshots.shift() } this.cursor = this.snapshots.length - 1 } prev (): T | null { if (this.hasPrev) { this.cursor -= 1 return cloneDeep(this.snapshots[this.cursor]) } return null } next (): T | null { if (this.hasNext) { this.cursor += 1 return cloneDeep(this.snapshots[this.cursor]) } return null } } ================================================ FILE: src/components/Mindmap/state/__tests__/Snapshot.test.ts ================================================ import Snapshot from '../Snapshot' describe('时间旅行测试', () => { const snapshot = new Snapshot() it('记录1,此时不能撤销,不能重做,撤销返回null,重做返回null', () => { snapshot.snap(1) expect(snapshot.hasPrev).toBe(false) expect(snapshot.hasNext).toBe(false) expect(snapshot.prev()).toBeNull() expect(snapshot.next()).toBeNull() }) it('记录2,此时能撤销', () => { snapshot.snap(2) expect(snapshot.hasPrev).toBe(true) }) it('撤销,返回1,此时能重做', () => { const prev = snapshot.prev() expect(prev).toBe(1) expect(snapshot.hasNext).toBe(true) }) it('重做,返回2', () => { const next = snapshot.next() expect(next).toBe(2) }) }) ================================================ FILE: src/components/Mindmap/state/index.ts ================================================ import { ref } from 'vue' import { Mdata } from '../interface' import Snapshot from './Snapshot' export const snapshot = new Snapshot() // 时间旅行状态 export const hasPrev = ref(false) export const hasNext = ref(false) export const updateTimeTravelState = (): void => { hasPrev.value = snapshot.hasPrev hasNext.value = snapshot.hasNext } ================================================ FILE: src/components/Mindmap/variable/contextmenu.ts ================================================ import { computed, ref, Ref } from 'vue' import { mmprops, scaleExtent, zoomTransform } from '.' export type MenuEvent = 'zoomin' | 'zoomout' | 'zoomfit' | 'add' | 'delete' | 'selectall' | 'collapse' | 'expand' | 'add-sibling' | 'add-sibling-before' | 'add-parent' | 'copy' | 'paste' | 'cut' | 'delete-one' export interface MenuItem { name: string disabled: boolean } export const showViewMenu = ref(true) export const pos = ref({ left: 0, top: 0 }) export const collapseItem: Ref = ref({ name: 'collapse', disabled: true }) export const expandItem: Ref = ref({ name: 'expand', disabled: true }) export const deleteItem: Ref = ref({ name: 'delete', disabled: false }) export const addItem: Ref = ref({ name: 'add', disabled: false }) export const addParentItem: Ref = ref({ name: 'add-parent', disabled: false }) export const addSiblingItem: Ref = ref({ name: 'add-sibling', disabled: false }) export const addSiblingBeforeItem: Ref = ref({ name: 'add-sibling-before', disabled: true }) export const cutItem: Ref = ref({ name: 'cut', disabled: false }) export const copyItem: Ref = ref({ name: 'copy', disabled: false }) export const pasteItem: Ref = ref({ name: 'paste', disabled: false }) export const deleteOneItem: Ref = ref({ name: 'delete-one', disabled: false }) const nodeMenu = computed(() => [ [ addItem.value, addParentItem.value, addSiblingItem.value, addSiblingBeforeItem.value ], [ cutItem.value, copyItem.value, pasteItem.value, deleteItem.value, deleteOneItem.value ], [ { name: 'selectall', disabled: true } ], [ collapseItem.value, expandItem.value ] ].filter((item, index) => { if (index === 0 || index === 1) { return mmprops.value.edit } else { return true } })) const viewMenu = computed(() => [ [ { name: 'zoomin', disabled: zoomTransform.value.k >= scaleExtent[1] }, { name: 'zoomout', disabled: zoomTransform.value.k <= scaleExtent[0] }, { name: 'zoomfit', disabled: false } ], [ { name: 'selectall', disabled: true } ] ]) export const menu = computed(() => showViewMenu.value ? viewMenu.value : nodeMenu.value) ================================================ FILE: src/components/Mindmap/variable/element.ts ================================================ import { Ref, ref } from 'vue' export const wrapperEle: Ref = ref() export const svgEle: Ref = ref() export const gEle: Ref = ref() export const asstSvgEle: Ref = ref() export const foreignEle: Ref = ref() export const foreignDivEle: Ref = ref() ================================================ FILE: src/components/Mindmap/variable/index.ts ================================================ import * as d3 from '../d3' import { Mdata, TwoNumber } from '../interface' import emitter from '@/mitt' import { Ref, ref, SetupContext } from 'vue' import { onDragEnd, onDragMove, onZoomMove } from '../listener' import * as selection from './selection' import * as element from './element' import { getDragContainer, moveView } from '../assistant' export * as ctm from './contextmenu' export { selection, element } // 连线样式 type CurveStepLink = ({ source, target }: { source: TwoNumber, target: TwoNumber }) => string | null type Link = d3.Link | CurveStepLink const linkHorizontal = d3.linkHorizontal().source((d) => d.source).target((d) => d.target) const curveStepLine = d3.line().curve(d3.curveStep) export const curveStepLink: CurveStepLink = ({ source, target }) => curveStepLine([source, target]) export let sharpCorner = false export let link: Link = linkHorizontal export const changeSharpCorner = ref(false) // 指示是否需要使用attrTween('d', pathTween) emitter.on('sharp-corner', (value) => { if (sharpCorner !== value) { changeSharpCorner.value = true } sharpCorner = !!value link = value ? curveStepLink : linkHorizontal }) // 连线宽度 export let branch = 4 emitter.on('branch', (value) => branch = value || branch) // 缩放程度 export let scaleExtent: TwoNumber = [0.1, 8] emitter.on('scale-extent', (value) => scaleExtent = value || scaleExtent) // 可编辑指示 export let editFlag = false emitter.on('edit-flag', (val) => editFlag = !!val) // 节点边距与间隔 export const rootTextRectRadius = 6 export const rootTextRectPadding = 10 export let yGap = 18 export let xGap = 84 export let textRectPadding = Math.min(yGap / 2 - 1, rootTextRectPadding) emitter.on<{ xGap: number, yGap: number}>('gap', (gap) => { if (!gap) { return } xGap = gap.xGap yGap = gap.yGap textRectPadding = Math.min(yGap / 2 - 1, rootTextRectPadding) textRectPadding = Math.min(xGap / 2 - 1, textRectPadding) }) /** * 观察foreignDiv,改变foreignObject的宽度和高度,并使其保持可见 */ export const observer = new ResizeObserver((arr: ResizeObserverEntry[]) => { const { foreign } = selection if (!foreign) { return } const temp = arr[0] const foreignDiv = temp.target const { width, height } = temp.contentRect const pl = parseInt(getComputedStyle(foreignDiv).paddingLeft || '0', 10) const b = parseInt(getComputedStyle(foreignDiv.parentNode as Element).borderTopWidth || '0', 10) const gap = (pl + b) * 2 foreign.attr('width', width + gap).attr('height', height + gap) if (foreign.style('display') !== 'none') { moveView(foreignDiv) } }) // 其他 export const addBtnRect = { side: 12, padding: 2, margin: 8 } export const addBtnSide = addBtnRect.side + addBtnRect.padding * 2 export const expandBtnRect = { width: 16, height: 4, radius: 2 } export const zoomTransform: Ref = ref(d3.zoomIdentity) export const zoom = d3.zoom().on('zoom', onZoomMove).scaleExtent(scaleExtent) export const drag = d3.drag().container(getDragContainer).on('drag', onDragMove).on('end', onDragEnd) export const addNodeBtn = ref(false) export let mmcontext: SetupContext emitter.on('mindmap-context', (val) => val ? mmcontext = val : null) export const mmprops = ref({ drag: false, edit: false }) ================================================ FILE: src/components/Mindmap/variable/selection.ts ================================================ import emitter from '@/mitt' import * as d3 from '../d3' export let svg: d3.Selection | undefined export let g: d3.Selection | undefined export let asstSvg: d3.Selection | undefined export let foreign: d3.Selection | undefined emitter.on('selection-svg', (val) => svg = val) emitter.on('selection-g', (val) => g = val) emitter.on('selection-asstSvg', (val) => asstSvg = val) emitter.on('selection-foreign', (val) => foreign = val) ================================================ FILE: src/i18n/en.ts ================================================ export default { translation: { contextmenu: { collapse: 'collapse', expand: 'expand', delete: 'delete', 'delete-one': 'delete a single node', add: 'add child node', 'add-parent': 'add parent node', 'add-sibling': 'add sibling node', 'add-sibling-before': 'add sibling node before', cut: 'cut', copy: 'copy', paste: 'paste', selectall: 'select all', zoomin: 'zoom in', zoomout: 'zoom out', zoomfit: 'zoom fit' } } } ================================================ FILE: src/i18n/index.ts ================================================ import i18next from 'i18next' import zh from './zh' import en from './en' import ptBR from './ptBR' i18next.init({ fallbackLng: 'zh', lng: 'zh', // if you're using a language detector, do not define the lng option // debug: true, resources: { zh, en, ptBR } }) export default i18next ================================================ FILE: src/i18n/ptBR.ts ================================================ export default { translation: { contextmenu: { collapse: 'Fechar', expand: 'Abrir', delete: 'Excluir', 'delete-one': 'Excluir único nó', add: 'Adicionar nó filho', 'add-parent': 'Adicionar nó antes', 'add-sibling': 'Adicionar nó abaixo', 'add-sibling-before': 'Adicionar nó acima', cut: 'Recortar', copy: 'Copiar', paste: 'Colar', selectall: 'Selecionar tudo', zoomin: 'Aproximar', zoomout: 'Retrair', zoomfit: 'Centralizar' } } } ================================================ FILE: src/i18n/zh.ts ================================================ export default { translation: { contextmenu: { collapse: '折叠节点', expand: '展开节点', delete: '删除节点', 'delete-one': '删除单个节点', add: '新建子节点', 'add-parent': '新建父节点', 'add-sibling': '新建兄弟节点', 'add-sibling-before': '在此之前新建兄弟节点', cut: '剪切', copy: '拷贝', paste: '粘贴', selectall: '全选', zoomin: '放大', zoomout: '缩小', zoomfit: '缩放至合适大小' } } } ================================================ FILE: src/learn.json ================================================ [ { "name":"如何学习D3", "children": [ { "name":"预备知识", "children": [ { "name":"HTML & CSS" }, { "name":"JavaScript" }, { "name":"DOM" }, { "name":"SVG" }, { "name":"test\ntest" } ] }, { "name":"安装", "collapse": true, "children": [ { "name": "折叠节点" } ] }, { "name":"入门", "children":[ { "name":"选择集" }, { "name":"test" }, { "name":"绑定数据" }, { "name":"添加删除元素" }, { "name":"简单图形", "children": [ { "name":"柱形图" }, { "name":"折线图" }, { "name":"散点图" }] }, { "name":"比例尺" }, { "name":"生成器" }, { "name":"过渡" } ], "left": true }, { "name":"进阶", "left": true }, { "name":"一级节点", "children": [ { "name":"子节点1" }, { "name":"子节点2" }, { "name":"子节点3" } ] } ] } ] ================================================ FILE: src/main.ts ================================================ import { createApp } from 'vue' import App from './App.vue' createApp(App).mount('#app') ================================================ FILE: src/mitt.ts ================================================ import mitt from 'mitt' const emitter = mitt() export default emitter ================================================ FILE: src/shims-vue.d.ts ================================================ declare module '*.vue' { import type { DefineComponent } from 'vue' const component: DefineComponent export default component } ================================================ FILE: tsconfig.json ================================================ { "compilerOptions": { "resolveJsonModule": true, "target": "es5", "module": "esnext", "strict": true, "jsx": "preserve", "importHelpers": true, "moduleResolution": "node", "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "sourceMap": true, "baseUrl": ".", "types": [ "resize-observer-browser", "jest" ], "paths": { "@/*": [ "src/*" ] }, "lib": [ "esnext", "dom", "dom.iterable", "scripthost" ] }, "include": [ "src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "tests/**/*.ts", "tests/**/*.tsx" ], "exclude": [ "node_modules" ] } ================================================ FILE: tsconfig.lib.json ================================================ { "compilerOptions": { "moduleResolution": "node", "target": "es2020", "declaration": true, "allowJs": true, "emitDeclarationOnly": true }, "include": [ "./dist/*.js" ] } ================================================ FILE: vite-lib.config.ts ================================================ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' import stringHash from 'string-hash' // https://vitejs.dev/config/ export default defineConfig({ resolve: { alias: [ { find: '@', replacement: path.resolve(__dirname, './src') } ] }, plugins: [vue()], build: { lib: { entry: path.resolve(__dirname, './src/components/Mindmap'), name: 'mindmap' }, rollupOptions: { // 请确保外部化那些你的库中不需要的依赖 external: ['vue'], output: { // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量 globals: { vue: 'Vue' } } } }, css: { modules: { generateScopedName: (name, filename, css) => { const f = filename.split('?')[0].split('.')[0] const file = path.basename(f) const hash = stringHash(css).toString(36).substr(0, 5); return `${file}_${name}_${hash}` } } } }) ================================================ FILE: vite.config.ts ================================================ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' import stringHash from 'string-hash' // https://vitejs.dev/config/ export default defineConfig({ resolve: { alias: [ { find: '@', replacement: path.resolve(__dirname, './src') } ] }, plugins: [vue()], base: '/vue3-mindmap/', build: { outDir: 'docs' }, css: { modules: { generateScopedName: (name, filename, css) => { const f = filename.split('?')[0].split('.')[0] const file = path.basename(f) const hash = stringHash(css).toString(36).substr(0, 5); return `${file}_${name}_${hash}` } } } })