From 18314b0b7bf63a90a90a412cd1a642bd8f3e3556 Mon Sep 17 00:00:00 2001 From: liihuu Date: Thu, 3 Aug 2023 14:52:19 +0000 Subject: [PATCH] deploy: 7fdfda432240fa09e25751b10cee58999c7ae823 --- 404.html | 16 +- assets/app.8108c345.js | 1 + assets/app.f8b1f225.js | 1 - assets/chunks/StyleExplain.b92d884c.js | 1 + assets/chunks/StyleExplain.c9b1fabe.js | 1 - ...8839a9.js => VPLocalSearchBox.cab19296.js} | 6 +- assets/chunks/framework.3ac7bdc3.js | 2 + assets/chunks/framework.410404a1.js | 2 - assets/chunks/theme.62df67d0.js | 7 - assets/chunks/theme.681e65c7.js | 7 + assets/en-US_guide_changelog.md.1af60161.js | 1 - .../en-US_guide_changelog.md.1af60161.lean.js | 1 - assets/en-US_guide_changelog.md.65fd4e5f.js | 1 + .../en-US_guide_changelog.md.65fd4e5f.lean.js | 1 + .../en-US_guide_chart-api.md.c55032c6.lean.js | 1 - ...s => en-US_guide_chart-api.md.d36887c7.js} | 2 +- .../en-US_guide_chart-api.md.d36887c7.lean.js | 777 +++++++++++++ ...en-US_guide_datasource.md.782a2025.lean.js | 1 - ... => en-US_guide_datasource.md.9c9be884.js} | 4 +- ...en-US_guide_datasource.md.9c9be884.lean.js | 31 + ...n-US_guide_environment.md.8463c7a7.lean.js | 1 - ...=> en-US_guide_environment.md.bece0f9a.js} | 2 +- ...n-US_guide_environment.md.bece0f9a.lean.js | 7 + assets/en-US_guide_faq.md.99902967.lean.js | 1 - ...2967.js => en-US_guide_faq.md.d858da72.js} | 2 +- assets/en-US_guide_faq.md.d858da72.lean.js | 9 + assets/en-US_guide_feedback.md.00404ad3.js | 1 - .../en-US_guide_feedback.md.00404ad3.lean.js | 1 - assets/en-US_guide_feedback.md.9beda3e8.js | 1 + .../en-US_guide_feedback.md.9beda3e8.lean.js | 1 + assets/en-US_guide_figure.md.3b2cddea.lean.js | 1 - ...a.js => en-US_guide_figure.md.66cf160e.js} | 2 +- assets/en-US_guide_figure.md.66cf160e.lean.js | 525 +++++++++ ...n-US_guide_getting-started.md.196ef520.js} | 2 +- ..._guide_getting-started.md.196ef520.lean.js | 101 ++ ..._guide_getting-started.md.a32abfcf.lean.js | 1 - assets/en-US_guide_hot-key.md.2f8b79f1.js | 1 - .../en-US_guide_hot-key.md.2f8b79f1.lean.js | 1 - assets/en-US_guide_hot-key.md.906ee3ad.js | 1 + .../en-US_guide_hot-key.md.906ee3ad.lean.js | 1 + ...7ba.js => en-US_guide_i18n.md.c577d9a9.js} | 2 +- assets/en-US_guide_i18n.md.c577d9a9.lean.js | 15 + assets/en-US_guide_i18n.md.d37cc7ba.lean.js | 1 - .../en-US_guide_indicator.md.561b6caf.lean.js | 1 - ...s => en-US_guide_indicator.md.f8019259.js} | 2 +- .../en-US_guide_indicator.md.f8019259.lean.js | 479 ++++++++ ...> en-US_guide_instance-api.md.13db160d.js} | 2 +- ...-US_guide_instance-api.md.13db160d.lean.js | 997 ++++++++++++++++ ...-US_guide_instance-api.md.f3e75242.lean.js | 1 - .../en-US_guide_overlay.md.3c11662b.lean.js | 1 - ....js => en-US_guide_overlay.md.c6625146.js} | 2 +- .../en-US_guide_overlay.md.c6625146.lean.js | 437 +++++++ ...c.js => en-US_guide_styles.md.30beaf82.js} | 4 +- assets/en-US_guide_styles.md.30beaf82.lean.js | 973 ++++++++++++++++ assets/en-US_guide_styles.md.d6179c4c.lean.js | 1 - assets/en-US_guide_v8-to-v9.md.50c2a7cf.js | 1 + .../en-US_guide_v8-to-v9.md.50c2a7cf.lean.js | 1 + assets/en-US_guide_v8-to-v9.md.80debf94.js | 1 - .../en-US_guide_v8-to-v9.md.80debf94.lean.js | 1 - ...S_guide_what-is-klinechart.md.7600558c.js} | 2 +- ...ide_what-is-klinechart.md.7600558c.lean.js | 1 + ...ide_what-is-klinechart.md.c6f744de.lean.js | 1 - ...94b82877.js => en-US_index.md.a6d642a5.js} | 2 +- ...ean.js => en-US_index.md.a6d642a5.lean.js} | 2 +- assets/en-US_sponsor.md.03eedb1c.lean.js | 1 - ...eedb1c.js => en-US_sponsor.md.4f8585ac.js} | 2 +- assets/en-US_sponsor.md.4f8585ac.lean.js | 1 + assets/guide_changelog.md.11eaeab5.js | 1 - assets/guide_changelog.md.11eaeab5.lean.js | 1 - assets/guide_changelog.md.96c85efb.js | 1 + assets/guide_changelog.md.96c85efb.lean.js | 1 + ...3378.js => guide_chart-api.md.b57a9e6d.js} | 2 +- assets/guide_chart-api.md.b57a9e6d.lean.js | 777 +++++++++++++ assets/guide_chart-api.md.e1df3378.lean.js | 1 - assets/guide_datasource.md.830e9fd0.lean.js | 1 - ...fd0.js => guide_datasource.md.831ea0ee.js} | 2 +- assets/guide_datasource.md.831ea0ee.lean.js | 33 + ...61.js => guide_environment.md.1b5acfcb.js} | 4 +- assets/guide_environment.md.1b5acfcb.lean.js | 7 + assets/guide_environment.md.23fd3561.lean.js | 1 - ...d.e7d81dbd.js => guide_faq.md.797c3011.js} | 2 +- assets/guide_faq.md.797c3011.lean.js | 9 + assets/guide_faq.md.e7d81dbd.lean.js | 1 - assets/guide_feedback.md.40ddc497.js | 1 - assets/guide_feedback.md.40ddc497.lean.js | 1 - assets/guide_feedback.md.59c54408.js | 1 + assets/guide_feedback.md.59c54408.lean.js | 1 + assets/guide_figure.md.3e683623.lean.js | 1 - ...e683623.js => guide_figure.md.ee6e8201.js} | 2 +- assets/guide_figure.md.ee6e8201.lean.js | 523 +++++++++ ...s => guide_getting-started.md.0acdaf38.js} | 2 +- .../guide_getting-started.md.0acdaf38.lean.js | 101 ++ .../guide_getting-started.md.f8bcbca3.lean.js | 1 - assets/guide_hot-key.md.54dce03b.js | 1 + assets/guide_hot-key.md.54dce03b.lean.js | 1 + assets/guide_hot-key.md.9c7a4d73.js | 1 - assets/guide_hot-key.md.9c7a4d73.lean.js | 1 - assets/guide_i18n.md.53fe5521.lean.js | 1 - ....53fe5521.js => guide_i18n.md.75372bb4.js} | 4 +- assets/guide_i18n.md.75372bb4.lean.js | 15 + assets/guide_indicator.md.23b6042f.lean.js | 1 - ...042f.js => guide_indicator.md.ef292373.js} | 2 +- assets/guide_indicator.md.ef292373.lean.js | 487 ++++++++ ...6.js => guide_instance-api.md.3f6b0b24.js} | 2 +- assets/guide_instance-api.md.3f6b0b24.lean.js | 1009 ++++++++++++++++ assets/guide_instance-api.md.d27a29d6.lean.js | 1 - ...0e5b98.js => guide_overlay.md.59e828be.js} | 2 +- assets/guide_overlay.md.59e828be.lean.js | 437 +++++++ assets/guide_overlay.md.b20e5b98.lean.js | 1 - ...135c3aa.js => guide_styles.md.3ffd89df.js} | 4 +- assets/guide_styles.md.3ffd89df.lean.js | 1021 +++++++++++++++++ assets/guide_styles.md.b135c3aa.lean.js | 1 - assets/guide_v8-to-v9.md.7dee35c1.js | 1 - assets/guide_v8-to-v9.md.7dee35c1.lean.js | 1 - assets/guide_v8-to-v9.md.f835732b.js | 1 + assets/guide_v8-to-v9.md.f835732b.lean.js | 1 + ...ide_what-is-klinechart.md.7a27d312.lean.js | 1 - ...> guide_what-is-klinechart.md.7d0ac241.js} | 2 +- ...ide_what-is-klinechart.md.7d0ac241.lean.js | 1 + ...ex.md.d272dfbc.js => index.md.60c8a73f.js} | 2 +- ...dfbc.lean.js => index.md.60c8a73f.lean.js} | 2 +- ....md.60732f4f.js => sponsor.md.4de7c862.js} | 2 +- assets/sponsor.md.4de7c862.lean.js | 1 + assets/sponsor.md.60732f4f.lean.js | 1 - assets/style.5a035358.css | 1 + assets/style.5e5414dc.css | 1 - en-US/guide/changelog.html | 22 +- en-US/guide/chart-api.html | 24 +- en-US/guide/datasource.html | 24 +- en-US/guide/environment.html | 24 +- en-US/guide/faq.html | 24 +- en-US/guide/feedback.html | 24 +- en-US/guide/figure.html | 24 +- en-US/guide/getting-started.html | 24 +- en-US/guide/hot-key.html | 22 +- en-US/guide/i18n.html | 24 +- en-US/guide/indicator.html | 24 +- en-US/guide/instance-api.html | 24 +- en-US/guide/overlay.html | 24 +- en-US/guide/styles.html | 26 +- en-US/guide/v8-to-v9.html | 22 +- en-US/guide/what-is-klinechart.html | 22 +- en-US/index.html | 22 +- en-US/sponsor.html | 24 +- guide/changelog.html | 22 +- guide/chart-api.html | 24 +- guide/datasource.html | 24 +- guide/environment.html | 24 +- guide/faq.html | 24 +- guide/feedback.html | 24 +- guide/figure.html | 24 +- guide/getting-started.html | 24 +- guide/hot-key.html | 22 +- guide/i18n.html | 24 +- guide/indicator.html | 24 +- guide/instance-api.html | 24 +- guide/overlay.html | 24 +- guide/styles.html | 26 +- guide/v8-to-v9.html | 22 +- guide/what-is-klinechart.html | 22 +- hashmap.json | 2 +- images/404.png | Bin 223121 -> 0 bytes index.html | 22 +- sponsor.html | 24 +- 164 files changed, 9273 insertions(+), 525 deletions(-) create mode 100644 assets/app.8108c345.js delete mode 100644 assets/app.f8b1f225.js create mode 100644 assets/chunks/StyleExplain.b92d884c.js delete mode 100644 assets/chunks/StyleExplain.c9b1fabe.js rename assets/chunks/{VPLocalSearchBox.0f8839a9.js => VPLocalSearchBox.cab19296.js} (73%) create mode 100644 assets/chunks/framework.3ac7bdc3.js delete mode 100644 assets/chunks/framework.410404a1.js delete mode 100644 assets/chunks/theme.62df67d0.js create mode 100644 assets/chunks/theme.681e65c7.js delete mode 100644 assets/en-US_guide_changelog.md.1af60161.js delete mode 100644 assets/en-US_guide_changelog.md.1af60161.lean.js create mode 100644 assets/en-US_guide_changelog.md.65fd4e5f.js create mode 100644 assets/en-US_guide_changelog.md.65fd4e5f.lean.js delete mode 100644 assets/en-US_guide_chart-api.md.c55032c6.lean.js rename assets/{en-US_guide_chart-api.md.c55032c6.js => en-US_guide_chart-api.md.d36887c7.js} (99%) create mode 100644 assets/en-US_guide_chart-api.md.d36887c7.lean.js delete mode 100644 assets/en-US_guide_datasource.md.782a2025.lean.js rename assets/{en-US_guide_datasource.md.782a2025.js => en-US_guide_datasource.md.9c9be884.js} (96%) create mode 100644 assets/en-US_guide_datasource.md.9c9be884.lean.js delete mode 100644 assets/en-US_guide_environment.md.8463c7a7.lean.js rename assets/{en-US_guide_environment.md.8463c7a7.js => en-US_guide_environment.md.bece0f9a.js} (96%) create mode 100644 assets/en-US_guide_environment.md.bece0f9a.lean.js delete mode 100644 assets/en-US_guide_faq.md.99902967.lean.js rename assets/{en-US_guide_faq.md.99902967.js => en-US_guide_faq.md.d858da72.js} (96%) create mode 100644 assets/en-US_guide_faq.md.d858da72.lean.js delete mode 100644 assets/en-US_guide_feedback.md.00404ad3.js delete mode 100644 assets/en-US_guide_feedback.md.00404ad3.lean.js create mode 100644 assets/en-US_guide_feedback.md.9beda3e8.js create mode 100644 assets/en-US_guide_feedback.md.9beda3e8.lean.js delete mode 100644 assets/en-US_guide_figure.md.3b2cddea.lean.js rename assets/{en-US_guide_figure.md.3b2cddea.js => en-US_guide_figure.md.66cf160e.js} (99%) create mode 100644 assets/en-US_guide_figure.md.66cf160e.lean.js rename assets/{en-US_guide_getting-started.md.a32abfcf.js => en-US_guide_getting-started.md.196ef520.js} (99%) create mode 100644 assets/en-US_guide_getting-started.md.196ef520.lean.js delete mode 100644 assets/en-US_guide_getting-started.md.a32abfcf.lean.js delete mode 100644 assets/en-US_guide_hot-key.md.2f8b79f1.js delete mode 100644 assets/en-US_guide_hot-key.md.2f8b79f1.lean.js create mode 100644 assets/en-US_guide_hot-key.md.906ee3ad.js create mode 100644 assets/en-US_guide_hot-key.md.906ee3ad.lean.js rename assets/{en-US_guide_i18n.md.d37cc7ba.js => en-US_guide_i18n.md.c577d9a9.js} (96%) create mode 100644 assets/en-US_guide_i18n.md.c577d9a9.lean.js delete mode 100644 assets/en-US_guide_i18n.md.d37cc7ba.lean.js delete mode 100644 assets/en-US_guide_indicator.md.561b6caf.lean.js rename assets/{en-US_guide_indicator.md.561b6caf.js => en-US_guide_indicator.md.f8019259.js} (99%) create mode 100644 assets/en-US_guide_indicator.md.f8019259.lean.js rename assets/{en-US_guide_instance-api.md.f3e75242.js => en-US_guide_instance-api.md.13db160d.js} (99%) create mode 100644 assets/en-US_guide_instance-api.md.13db160d.lean.js delete mode 100644 assets/en-US_guide_instance-api.md.f3e75242.lean.js delete mode 100644 assets/en-US_guide_overlay.md.3c11662b.lean.js rename assets/{en-US_guide_overlay.md.3c11662b.js => en-US_guide_overlay.md.c6625146.js} (99%) create mode 100644 assets/en-US_guide_overlay.md.c6625146.lean.js rename assets/{en-US_guide_styles.md.d6179c4c.js => en-US_guide_styles.md.30beaf82.js} (99%) create mode 100644 assets/en-US_guide_styles.md.30beaf82.lean.js delete mode 100644 assets/en-US_guide_styles.md.d6179c4c.lean.js create mode 100644 assets/en-US_guide_v8-to-v9.md.50c2a7cf.js create mode 100644 assets/en-US_guide_v8-to-v9.md.50c2a7cf.lean.js delete mode 100644 assets/en-US_guide_v8-to-v9.md.80debf94.js delete mode 100644 assets/en-US_guide_v8-to-v9.md.80debf94.lean.js rename assets/{en-US_guide_what-is-klinechart.md.c6f744de.js => en-US_guide_what-is-klinechart.md.7600558c.js} (81%) create mode 100644 assets/en-US_guide_what-is-klinechart.md.7600558c.lean.js delete mode 100644 assets/en-US_guide_what-is-klinechart.md.c6f744de.lean.js rename assets/{en-US_index.md.94b82877.js => en-US_index.md.a6d642a5.js} (88%) rename assets/{en-US_index.md.94b82877.lean.js => en-US_index.md.a6d642a5.lean.js} (88%) delete mode 100644 assets/en-US_sponsor.md.03eedb1c.lean.js rename assets/{en-US_sponsor.md.03eedb1c.js => en-US_sponsor.md.4f8585ac.js} (75%) create mode 100644 assets/en-US_sponsor.md.4f8585ac.lean.js delete mode 100644 assets/guide_changelog.md.11eaeab5.js delete mode 100644 assets/guide_changelog.md.11eaeab5.lean.js create mode 100644 assets/guide_changelog.md.96c85efb.js create mode 100644 assets/guide_changelog.md.96c85efb.lean.js rename assets/{guide_chart-api.md.e1df3378.js => guide_chart-api.md.b57a9e6d.js} (99%) create mode 100644 assets/guide_chart-api.md.b57a9e6d.lean.js delete mode 100644 assets/guide_chart-api.md.e1df3378.lean.js delete mode 100644 assets/guide_datasource.md.830e9fd0.lean.js rename assets/{guide_datasource.md.830e9fd0.js => guide_datasource.md.831ea0ee.js} (96%) create mode 100644 assets/guide_datasource.md.831ea0ee.lean.js rename assets/{guide_environment.md.23fd3561.js => guide_environment.md.1b5acfcb.js} (93%) create mode 100644 assets/guide_environment.md.1b5acfcb.lean.js delete mode 100644 assets/guide_environment.md.23fd3561.lean.js rename assets/{guide_faq.md.e7d81dbd.js => guide_faq.md.797c3011.js} (96%) create mode 100644 assets/guide_faq.md.797c3011.lean.js delete mode 100644 assets/guide_faq.md.e7d81dbd.lean.js delete mode 100644 assets/guide_feedback.md.40ddc497.js delete mode 100644 assets/guide_feedback.md.40ddc497.lean.js create mode 100644 assets/guide_feedback.md.59c54408.js create mode 100644 assets/guide_feedback.md.59c54408.lean.js delete mode 100644 assets/guide_figure.md.3e683623.lean.js rename assets/{guide_figure.md.3e683623.js => guide_figure.md.ee6e8201.js} (99%) create mode 100644 assets/guide_figure.md.ee6e8201.lean.js rename assets/{guide_getting-started.md.f8bcbca3.js => guide_getting-started.md.0acdaf38.js} (99%) create mode 100644 assets/guide_getting-started.md.0acdaf38.lean.js delete mode 100644 assets/guide_getting-started.md.f8bcbca3.lean.js create mode 100644 assets/guide_hot-key.md.54dce03b.js create mode 100644 assets/guide_hot-key.md.54dce03b.lean.js delete mode 100644 assets/guide_hot-key.md.9c7a4d73.js delete mode 100644 assets/guide_hot-key.md.9c7a4d73.lean.js delete mode 100644 assets/guide_i18n.md.53fe5521.lean.js rename assets/{guide_i18n.md.53fe5521.js => guide_i18n.md.75372bb4.js} (92%) create mode 100644 assets/guide_i18n.md.75372bb4.lean.js delete mode 100644 assets/guide_indicator.md.23b6042f.lean.js rename assets/{guide_indicator.md.23b6042f.js => guide_indicator.md.ef292373.js} (99%) create mode 100644 assets/guide_indicator.md.ef292373.lean.js rename assets/{guide_instance-api.md.d27a29d6.js => guide_instance-api.md.3f6b0b24.js} (99%) create mode 100644 assets/guide_instance-api.md.3f6b0b24.lean.js delete mode 100644 assets/guide_instance-api.md.d27a29d6.lean.js rename assets/{guide_overlay.md.b20e5b98.js => guide_overlay.md.59e828be.js} (99%) create mode 100644 assets/guide_overlay.md.59e828be.lean.js delete mode 100644 assets/guide_overlay.md.b20e5b98.lean.js rename assets/{guide_styles.md.b135c3aa.js => guide_styles.md.3ffd89df.js} (99%) create mode 100644 assets/guide_styles.md.3ffd89df.lean.js delete mode 100644 assets/guide_styles.md.b135c3aa.lean.js delete mode 100644 assets/guide_v8-to-v9.md.7dee35c1.js delete mode 100644 assets/guide_v8-to-v9.md.7dee35c1.lean.js create mode 100644 assets/guide_v8-to-v9.md.f835732b.js create mode 100644 assets/guide_v8-to-v9.md.f835732b.lean.js delete mode 100644 assets/guide_what-is-klinechart.md.7a27d312.lean.js rename assets/{guide_what-is-klinechart.md.7a27d312.js => guide_what-is-klinechart.md.7d0ac241.js} (78%) create mode 100644 assets/guide_what-is-klinechart.md.7d0ac241.lean.js rename assets/{index.md.d272dfbc.js => index.md.60c8a73f.js} (83%) rename assets/{index.md.d272dfbc.lean.js => index.md.60c8a73f.lean.js} (83%) rename assets/{sponsor.md.60732f4f.js => sponsor.md.4de7c862.js} (70%) create mode 100644 assets/sponsor.md.4de7c862.lean.js delete mode 100644 assets/sponsor.md.60732f4f.lean.js create mode 100644 assets/style.5a035358.css delete mode 100644 assets/style.5e5414dc.css delete mode 100644 images/404.png diff --git a/404.html b/404.html index 6b514df9f..80bf31577 100644 --- a/404.html +++ b/404.html @@ -5,17 +5,17 @@ 404 | KLineChart - - + + + - - - + + + -
Skip to content

Released under the Apache License V2.

- +
Skip to content

Page Not Found

Make sure the address is correct and the page hasn't moved.

Please contact your KLineChart administrator if you think this is a mistake.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/assets/app.8108c345.js b/assets/app.8108c345.js new file mode 100644 index 000000000..a5e7f6696 --- /dev/null +++ b/assets/app.8108c345.js @@ -0,0 +1 @@ +import{_ as s,c as z,v as g,b as d,F as i,X as v,N as c,R as j,u as D,d as T,A as I,w as l,a5 as L,Q as A,a6 as o,H as f,a7 as u,a8 as y,a9 as w,aa as p,ab as O,ac as h,ad as n,ae as k,af as U,ag as x,ah as m,ai as b,Y as E}from"./chunks/framework.3ac7bdc3.js";import{t as C}from"./chunks/theme.681e65c7.js";const H={class:"home-section who-are-use-section"},Q={class:"home-section-content who-are-use"},B=j('
',1),V={__name:"HomeWhoAreUse",setup(a){const{lang:M}=z();return(t,N)=>(g(),d("section",H,[i("div",Q,[i("h2",null,v(c(M)==="zh-CN"?"谁在使用":"Who are using"),1),B])]))}},Y=s(V,[["__scopeId","data-v-37acb926"]]),X="/images/logo.svg",F={class:"NotFound"},S=j('

Page Not Found

Make sure the address is correct and the page hasn't moved.

Please contact your KLineChart administrator if you think this is a mistake.

',4),K={class:"action"},G=["href"],P=D({__name:"NotFound",setup(a){const{lang:M}=z(),t=T("/");return I(()=>{t.value=M.value==="zh-CN"?"/":`/${M.value}/`}),(N,$)=>(g(),d("div",F,[S,i("div",K,[i("a",{class:"link",href:c(l)(t.value),"aria-label":"go to home"}," Take me home ",8,G)])]))}});const J=s(P,[["__scopeId","data-v-18af756e"]]);const W={...C,Layout:()=>L(C.Layout,null,{"home-features-after":()=>L(Y),"not-found":()=>L(J)}),enhanceApp({app:a,router:M,siteData:t}){}};function r(a){if(a.extends){const M=r(a.extends);return{...M,...a,async enhanceApp(t){M.enhanceApp&&await M.enhanceApp(t),a.enhanceApp&&await a.enhanceApp(t)}}}return a}const e=r(W),R=D({name:"VitePressApp",setup(){const{site:a}=z();return I(()=>{f(()=>{document.documentElement.lang=a.value.lang,document.documentElement.dir=a.value.dir})}),u(),y(),w(),e.setup&&e.setup(),()=>L(e.Layout)}});async function Z(){const a=_(),M=q();M.provide(p,a);const t=O(a.route);return M.provide(h,t),M.component("Content",n),M.component("ClientOnly",k),Object.defineProperties(M.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),e.enhanceApp&&await e.enhanceApp({app:M,router:a,siteData:U}),{app:M,router:a,data:t}}function q(){return x(R)}function _(){let a=A,M;return m(t=>{let N=b(t);return N?(a&&(M=N),(a||M===N)&&(N=N.replace(/\.js$/,".lean.js")),A&&(a=!1),E(()=>import(N),[])):null},e.NotFound)}A&&Z().then(({app:a,router:M,data:t})=>{M.go().then(()=>{o(M.route,t.site),a.mount("#app")})});export{Z as createApp}; diff --git a/assets/app.f8b1f225.js b/assets/app.f8b1f225.js deleted file mode 100644 index ebf66fd1f..000000000 --- a/assets/app.f8b1f225.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as d,u as C,o as c,c as s,k as L,t as j,l as A,V as T,d as D,h as v,j as I,f as o,p as l,m as f,a5 as i,W as z,a6 as u,a7 as y,a8 as w,a9 as p,aa as O,ab as h,ac as n,ad as k,ae as U,af as x,Z as m,A as E,ag as b,ah as H,ai as Q}from"./chunks/framework.410404a1.js";import{t as g}from"./chunks/theme.62df67d0.js";const B={class:"home-section who-are-use-section"},V={class:"home-section-content who-are-use"},Y=T('
',1),S={__name:"HomeWhoAreUse",setup(M){const{lang:a}=C();return(t,N)=>(c(),s("section",B,[L("div",V,[L("h2",null,j(A(a)==="zh-CN"?"谁在使用":"Who are using"),1),Y])]))}},X=d(S,[["__scopeId","data-v-37acb926"]]),F="/images/404.png",K=M=>(l("data-v-507dca79"),M=M(),f(),M),G={class:"NotFound"},J=K(()=>L("img",{style:{margin:"0 auto",width:"320px"},src:F},null,-1)),P={class:"action"},W=["href"],R=D({__name:"NotFound",setup(M){const{lang:a}=C(),t=v("/");return I(()=>{t.value=a.value==="zh-CN"?"/":`/${a.value}/`}),(N,t1)=>(c(),s("div",G,[J,L("div",P,[L("a",{class:"link",href:A(o)(t.value),"aria-label":"go to home"},j(A(a)==="zh-CN"?"返回主页":"Take me home"),9,W)])]))}});const Z=d(R,[["__scopeId","data-v-507dca79"]]);const q={...g,Layout:()=>i(g.Layout,null,{"home-features-after":()=>i(X),"not-found":()=>i(Z)}),enhanceApp({app:M,router:a,siteData:t}){}};function r(M){if(M.extends){const a=r(M.extends);return{...a,...M,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),M.enhanceApp&&await M.enhanceApp(t)}}}return M}const e=r(q),_=D({name:"VitePressApp",setup(){const{site:M}=C();return I(()=>{E(()=>{document.documentElement.lang=M.value.lang,document.documentElement.dir=M.value.dir})}),b(),H(),Q(),e.setup&&e.setup(),()=>i(e.Layout)}});async function $(){const M=a1(),a=M1();a.provide(y,M);const t=w(M.route);return a.provide(p,t),a.component("Content",O),a.component("ClientOnly",h),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),e.enhanceApp&&await e.enhanceApp({app:a,router:M,siteData:n}),{app:a,router:M,data:t}}function M1(){return k(_)}function a1(){let M=z,a;return U(t=>{let N=x(t);return N?(M&&(a=N),(M||a===N)&&(N=N.replace(/\.js$/,".lean.js")),z&&(M=!1),m(()=>import(N),[])):null},e.NotFound)}z&&$().then(({app:M,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),M.mount("#app")})});export{$ as createApp}; diff --git a/assets/chunks/StyleExplain.b92d884c.js b/assets/chunks/StyleExplain.b92d884c.js new file mode 100644 index 000000000..110579c49 --- /dev/null +++ b/assets/chunks/StyleExplain.b92d884c.js @@ -0,0 +1 @@ +import{_ as o,d as _,v as s,b as e,F as t,x as i,y as d,X as c,L as x,e as p,f as h}from"./framework.3ac7bdc3.js";const u="/images/style.jpg";const y=a=>(p("data-v-214cdbcb"),a=a(),h(),a),v=y(()=>t("img",{src:u},null,-1)),b={class:"style-explain"},k={class:"style-explain-item"},m={__name:"StyleExplain",setup(a){const l=_(["grid.horizontal","grid.vertical","candle.bar","candle.candle.priceMark.last.line","candle.candle.priceMark.last.text","candle.candle.priceMark.high","candle.candle.priceMark.low","candle.candle.tooltip","indicator.ohlc","indicator.lastValueMark","indicator.tooltip","xAxis.axisLine","xAxis.tickLine","xAxis.tickText","yAxis.axisLine","yAxis.tickLine","yAxis.tickText","separator","crosshair.horizontal.line","crosshair.horizontal.text","crosshair.vertical.line","crosshair.vertical.text","overlay"]);return(g,A)=>(s(),e(i,null,[v,t("div",b,[(s(!0),e(i,null,d(l.value,(n,r)=>(s(),e("span",k,[t("strong",null,c(r+1),1),x(" "+c(n),1)]))),256))])],64))}},M=o(m,[["__scopeId","data-v-214cdbcb"]]);export{M as S}; diff --git a/assets/chunks/StyleExplain.c9b1fabe.js b/assets/chunks/StyleExplain.c9b1fabe.js deleted file mode 100644 index 71ab10df1..000000000 --- a/assets/chunks/StyleExplain.c9b1fabe.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,h as d,o as a,c as t,k as s,I as i,J as p,t as c,a as _,p as x,m as h}from"./framework.410404a1.js";const u="/images/style.jpg";const y=e=>(x("data-v-214cdbcb"),e=e(),h(),e),k=y(()=>s("img",{src:u},null,-1)),m={class:"style-explain"},g={class:"style-explain-item"},v={__name:"StyleExplain",setup(e){const l=d(["grid.horizontal","grid.vertical","candle.bar","candle.candle.priceMark.last.line","candle.candle.priceMark.last.text","candle.candle.priceMark.high","candle.candle.priceMark.low","candle.candle.tooltip","indicator.ohlc","indicator.lastValueMark","indicator.tooltip","xAxis.axisLine","xAxis.tickLine","xAxis.tickText","yAxis.axisLine","yAxis.tickLine","yAxis.tickText","separator","crosshair.horizontal.line","crosshair.horizontal.text","crosshair.vertical.line","crosshair.vertical.text","overlay"]);return(S,b)=>(a(),t(i,null,[k,s("div",m,[(a(!0),t(i,null,p(l.value,(r,n)=>(a(),t("span",g,[s("strong",null,c(n+1),1),_(" "+c(r),1)]))),256))])],64))}},I=o(v,[["__scopeId","data-v-214cdbcb"]]);export{I as S}; diff --git a/assets/chunks/VPLocalSearchBox.0f8839a9.js b/assets/chunks/VPLocalSearchBox.cab19296.js similarity index 73% rename from assets/chunks/VPLocalSearchBox.0f8839a9.js rename to assets/chunks/VPLocalSearchBox.cab19296.js index a3f4cf9c5..0dcb47052 100644 --- a/assets/chunks/VPLocalSearchBox.0f8839a9.js +++ b/assets/chunks/VPLocalSearchBox.cab19296.js @@ -1,7 +1,7 @@ -import{Z as ze,h as ne,z as Be,d as It,D as fe,g as ke,A as _t,j as Ie,E as de,aj as Dt,ak as Ot,o as Y,b as Rt,k as C,a3 as Mt,l as $,al as Pt,am as Lt,C as zt,c as X,n as et,e as be,J as tt,I as rt,a as he,t as ve,an as Bt,p as Vt,m as $t,ao as at,ap as jt,a9 as Wt,af as Kt,_ as Jt}from"./framework.410404a1.js";import{u as Ut,a as Ht,b as Gt,c as nt,d as qt,e as Qt,w as Yt,o as we,f as Zt,g as Xt,h as er}from"./theme.62df67d0.js";const tr={"en-US":()=>ze(()=>import("./@localSearchIndexen-US.af94ca09.js"),[]),root:()=>ze(()=>import("./@localSearchIndexroot.2a3579e9.js"),[])};/*! +import{Y as ze,d as ne,q as Be,u as It,k as fe,r as ke,H as _t,A as Ie,n as de,aj as Ot,ak as Dt,v as Y,C as Rt,F as C,a3 as Mt,N as j,al as Pt,am as Lt,j as zt,b as X,a as et,B as be,y as tt,x as rt,L as he,X as ve,an as Bt,e as Vt,f as $t,ao as at,ap as jt,ac as Wt,ai as Kt,_ as Jt}from"./framework.3ac7bdc3.js";import{u as Ut,a as Ht,b as qt,c as nt,d as Gt,e as Qt,w as Yt,o as we,f as Zt,g as Xt,h as er}from"./theme.681e65c7.js";const tr={"en-US":()=>ze(()=>import("./@localSearchIndexen-US.af94ca09.js"),[]),root:()=>ze(()=>import("./@localSearchIndexroot.2a3579e9.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE -*/var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ee=yt.join(","),mt=typeof Element>"u",oe=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Se=!mt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ae=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},rr=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},gt=function(e,t,r){if(Ae(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ee));return t&&oe.call(e,Ee)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ae(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var d=oe.call(i,Ee);d&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var h=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ae(h,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(h&&v){var p=o(h===!0?i.children:h.children,!0,r);r.flatten?n.push.apply(n,p):n.push({scopeParent:i,candidates:p})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||rr(e))&&!wt(e)?0:e.tabIndex},ar=function(e,t){var r=ie(e);return r<0&&t&&!wt(e)?0:r},nr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ir=function(e){return xt(e)&&e.type==="hidden"},or=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},sr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(oe.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Se(e);if(u&&!u.shadowRoot&&n(u)===!0)return it(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(fr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return it(e);return!1},hr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},pr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=ar(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(nr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},yr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:Ve.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:vr}):r=gt(e,t.includeContainer,Ve.bind(null,t)),pr(r)},mr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:Ce.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=gt(e,t.includeContainer,Ce.bind(null,t)),r},se=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return oe.call(e,Ee)===!1?!1:Ve(t,e)},gr=yt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return oe.call(e,gr)===!1?!1:Ce(t,e)};/*! +*/var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ee=yt.join(","),gt=typeof Element>"u",oe=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Se=!gt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ae=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},rr=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},mt=function(e,t,r){if(Ae(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ee));return t&&oe.call(e,Ee)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ae(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var d=oe.call(i,Ee);d&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var h=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ae(h,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(h&&v){var p=o(h===!0?i.children:h.children,!0,r);r.flatten?n.push.apply(n,p):n.push({scopeParent:i,candidates:p})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||rr(e))&&!wt(e)?0:e.tabIndex},ar=function(e,t){var r=ie(e);return r<0&&t&&!wt(e)?0:r},nr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ir=function(e){return xt(e)&&e.type==="hidden"},or=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},sr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(oe.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Se(e);if(u&&!u.shadowRoot&&n(u)===!0)return it(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(fr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return it(e);return!1},hr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},pr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=ar(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(nr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},yr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:Ve.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:vr}):r=mt(e,t.includeContainer,Ve.bind(null,t)),pr(r)},gr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:Ce.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=mt(e,t.includeContainer,Ce.bind(null,t)),r},se=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return oe.call(e,Ee)===!1?!1:Ve(t,e)},mr=yt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return oe.call(e,mr)===!1?!1:Ce(t,e)};/*! * focus-trap 7.5.2 * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE -*/function ot(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function st(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Fr=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Er=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},me=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Sr=function(e){return me(e)&&!e.shiftKey},Ar=function(e){return me(e)&&e.shiftKey},lt=function(e){return setTimeout(e,0)},ct=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},pe=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?y-1:0),_=1;_=0)f=r.activeElement;else{var c=i.tabbableGroups[0],y=c&&c.firstTabbableNode;f=y||d("fallbackFocus")}if(!f)throw new Error("Your focus-trap needs to have at least one focusable element");return f},v=function(){if(i.containerGroups=i.containers.map(function(f){var c=yr(f,a.tabbableOptions),y=mr(f,a.tabbableOptions),F=c.length>0?c[0]:void 0,_=c.length>0?c[c.length-1]:void 0,R=y.find(function(I){return se(I)}),m=y.slice().reverse().find(function(I){return se(I)}),b=!!c.find(function(I){return ie(I)>0});return{container:f,tabbableNodes:c,focusableNodes:y,posTabIndexesFound:b,firstTabbableNode:F,lastTabbableNode:_,firstDomTabbableNode:R,lastDomTabbableNode:m,nextTabbableNode:function(J){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,W=c.indexOf(J);return W<0?q?y.slice(y.indexOf(J)+1).find(function(z){return se(z)}):y.slice(0,y.indexOf(J)).reverse().find(function(z){return se(z)}):c[W+(q?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(f){return f.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!d("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(f){return f.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},p=function E(f){if(f!==!1&&f!==r.activeElement){if(!f||!f.focus){E(h());return}f.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=f,Fr(f)&&f.select()}},w=function(f){var c=d("setReturnFocus",f);return c||(c===!1?!1:f)},g=function(f){var c=f.target,y=f.event,F=f.isBackward,_=F===void 0?!1:F;c=c||xe(y),v();var R=null;if(i.tabbableGroups.length>0){var m=l(c,y),b=m>=0?i.containerGroups[m]:void 0;if(m<0)_?R=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:R=i.tabbableGroups[0].firstTabbableNode;else if(_){var I=ct(i.tabbableGroups,function(H){var ee=H.firstTabbableNode;return c===ee});if(I<0&&(b.container===c||_e(c,a.tabbableOptions)&&!se(c,a.tabbableOptions)&&!b.nextTabbableNode(c,!1))&&(I=m),I>=0){var J=I===0?i.tabbableGroups.length-1:I-1,q=i.tabbableGroups[J];R=ie(c)>=0?q.lastTabbableNode:q.lastDomTabbableNode}else me(y)||(R=b.nextTabbableNode(c,!1))}else{var W=ct(i.tabbableGroups,function(H){var ee=H.lastTabbableNode;return c===ee});if(W<0&&(b.container===c||_e(c,a.tabbableOptions)&&!se(c,a.tabbableOptions)&&!b.nextTabbableNode(c))&&(W=m),W>=0){var z=W===i.tabbableGroups.length-1?0:W+1,U=i.tabbableGroups[z];R=ie(c)>=0?U.firstTabbableNode:U.firstDomTabbableNode}else me(y)||(R=b.nextTabbableNode(c))}}else R=d("fallbackFocus");return R},x=function(f){var c=xe(f);if(!(l(c,f)>=0)){if(pe(a.clickOutsideDeactivates,f)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}pe(a.allowOutsideClick,f)||f.preventDefault()}},N=function(f){var c=xe(f),y=l(c,f)>=0;if(y||c instanceof Document)y&&(i.mostRecentlyFocusedNode=c);else{f.stopImmediatePropagation();var F,_=!0;if(i.mostRecentlyFocusedNode)if(ie(i.mostRecentlyFocusedNode)>0){var R=l(i.mostRecentlyFocusedNode),m=i.containerGroups[R].tabbableNodes;if(m.length>0){var b=m.findIndex(function(I){return I===i.mostRecentlyFocusedNode});b>=0&&(a.isKeyForward(i.recentNavEvent)?b+1=0&&(F=m[b-1],_=!1))}}else i.containerGroups.some(function(I){return I.tabbableNodes.some(function(J){return ie(J)>0})})||(_=!1);else _=!1;_&&(F=g({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),p(F||i.mostRecentlyFocusedNode||h())}i.recentNavEvent=void 0},T=function(f){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=f;var y=g({event:f,isBackward:c});y&&(me(f)&&f.preventDefault(),p(y))},S=function(f){if(Er(f)&&pe(a.escapeDeactivates,f)!==!1){f.preventDefault(),s.deactivate();return}(a.isKeyForward(f)||a.isKeyBackward(f))&&T(f,a.isKeyBackward(f))},P=function(f){var c=xe(f);l(c,f)>=0||pe(a.clickOutsideDeactivates,f)||pe(a.allowOutsideClick,f)||(f.preventDefault(),f.stopImmediatePropagation())},M=function(){if(i.active)return ut.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?lt(function(){p(h())}):p(h()),r.addEventListener("focusin",N,!0),r.addEventListener("mousedown",x,{capture:!0,passive:!1}),r.addEventListener("touchstart",x,{capture:!0,passive:!1}),r.addEventListener("click",P,{capture:!0,passive:!1}),r.addEventListener("keydown",S,{capture:!0,passive:!1}),s},L=function(){if(i.active)return r.removeEventListener("focusin",N,!0),r.removeEventListener("mousedown",x,!0),r.removeEventListener("touchstart",x,!0),r.removeEventListener("click",P,!0),r.removeEventListener("keydown",S,!0),s},A=function(f){var c=f.some(function(y){var F=Array.from(y.removedNodes);return F.some(function(_){return _===i.mostRecentlyFocusedNode})});c&&p(h())},k=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(A):void 0,O=function(){k&&(k.disconnect(),i.active&&!i.paused&&i.containers.map(function(f){k.observe(f,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(f){if(i.active)return this;var c=u(f,"onActivate"),y=u(f,"onPostActivate"),F=u(f,"checkCanFocusTrap");F||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,c==null||c();var _=function(){F&&v(),M(),O(),y==null||y()};return F?(F(i.containers.concat()).then(_,_),this):(_(),this)},deactivate:function(f){if(!i.active)return this;var c=st({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},f);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,L(),i.active=!1,i.paused=!1,O(),ut.deactivateTrap(n,s);var y=u(c,"onDeactivate"),F=u(c,"onPostDeactivate"),_=u(c,"checkCanReturnFocus"),R=u(c,"returnFocus","returnFocusOnDeactivate");y==null||y();var m=function(){lt(function(){R&&p(w(i.nodeFocusedBeforeActivation)),F==null||F()})};return R&&_?(_(w(i.nodeFocusedBeforeActivation)).then(m,m),this):(m(),this)},pause:function(f){if(i.paused||!i.active)return this;var c=u(f,"onPause"),y=u(f,"onPostPause");return i.paused=!0,c==null||c(),L(),O(),y==null||y(),this},unpause:function(f){if(!i.paused||!i.active)return this;var c=u(f,"onUnpause"),y=u(f,"onPostUnpause");return i.paused=!1,c==null||c(),v(),M(),O(),y==null||y(),this},updateContainerElements:function(f){var c=[].concat(f).filter(Boolean);return i.containers=c.map(function(y){return typeof y=="string"?r.querySelector(y):y}),i.active&&v(),O(),this}},s.updateContainerElements(e),s},Tr=Object.defineProperty,kr=Object.defineProperties,Ir=Object.getOwnPropertyDescriptors,Ne=Object.getOwnPropertySymbols,Ft=Object.prototype.hasOwnProperty,Et=Object.prototype.propertyIsEnumerable,ft=(o,e,t)=>e in o?Tr(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,_r=(o,e)=>{for(var t in e||(e={}))Ft.call(e,t)&&ft(o,t,e[t]);if(Ne)for(var t of Ne(e))Et.call(e,t)&&ft(o,t,e[t]);return o},Dr=(o,e)=>kr(o,Ir(e)),Or=(o,e)=>{var t={};for(var r in o)Ft.call(o,r)&&e.indexOf(r)<0&&(t[r]=o[r]);if(o!=null&&Ne)for(var r of Ne(o))e.indexOf(r)<0&&Et.call(o,r)&&(t[r]=o[r]);return t};function Rr(o,e={}){let t;const r=e,{immediate:n}=r,a=Or(r,["immediate"]),i=ne(!1),s=ne(!1),u=v=>t&&t.activate(v),l=v=>t&&t.deactivate(v),d=()=>{t&&(t.pause(),s.value=!0)},h=()=>{t&&(t.unpause(),s.value=!1)};return Be(()=>Ut(o),v=>{v&&(t=Nr(v,Dr(_r({},a),{onActivate(){i.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){i.value=!1,e.onDeactivate&&e.onDeactivate()}})),n&&u())},{flush:"post"}),Ht(()=>l()),{hasFocus:i,isPaused:s,activate:u,deactivate:l,pause:d,unpause:h}}class le{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{le.matches(l,this.exclude)?u():this.onIframeReady(l,d=>{t(l)&&(s++,r(d)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new le(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,d,h=()=>({prevNode:d,node:l}=this.getIteratorNode(i),l);for(;h();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,d,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,p=>u.push(p),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Mr=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new le(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return le.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,d=(r>i.end?i.end:r)-i.start,h=e.value.substr(0,i.start),v=e.value.substr(d+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,d),e.value=h+v,e.nodes.forEach((p,w)=>{w>=s&&(e.nodes[w].start>0&&w!==s&&(e.nodes[w].start-=d),e.nodes[w].end-=d)}),r-=d,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let d=l.index;if(i!==0)for(let h=1;h{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let h=1;hr(u[i],h),(h,v)=>{e.lastIndex=v,n(h)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:d,valid:h}=this.checkWhitespaceRanges(s,i,a.value);h&&this.wrapRangeInMappedTextNode(a,l,d,v=>t(v,s,a.value.substring(l,d),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let d=new RegExp(this.createRegExp(l),`gm${s}`),h=0;this.log(`Searching with expression "${d}"`),this[n](d,1,(v,p)=>this.opt.filter(p,l,r,h),v=>{h++,r++,this.opt.each(v)},()=>{h===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=le.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Pr(o){const e=new Mr(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var B=function(){return B=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function V(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Br="ENTRIES",St="KEYS",At="VALUES",j="",De=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ue(this._path),t=e.node,r=e.keys;if(ue(r)===j)return{done:!1,value:this.result()};var n=t.get(ue(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ue(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ue(t)}).filter(function(e){return e!==j}).join("")},o.prototype.value=function(){return ue(this._path).node.get(j)},o.prototype.result=function(){switch(this._type){case At:return this.value();case St:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ue=function(o){return o[o.length-1]},Vr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}Ct(o.get(p),e,t,r,n,g,i,s+p)}}}catch(y){u={error:y}}finally{try{v&&!v.done&&(l=h.return)&&l.call(h)}finally{if(u)throw u.error}}},Oe=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=V(Te(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=V(Ke(i),2),u=s[0],l=s[1];try{for(var d=D(u.keys()),h=d.next();!h.done;h=d.next()){var v=h.value;if(v!==j&&v.startsWith(l)){var p=new Map;return p.set(v.slice(l.length),u.get(v)),new o(p,e)}}}catch(w){t={error:w}}finally{try{h&&!h.done&&(r=d.return)&&r.call(d)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,$r(this._tree,e)},o.prototype.entries=function(){return new De(this,Br)},o.prototype.forEach=function(e){var t,r;try{for(var n=D(this),a=n.next();!a.done;a=n.next()){var i=V(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return Vr(this._tree,e,t)},o.prototype.get=function(e){var t=$e(this._tree,e);return t!==void 0?t.get(j):void 0},o.prototype.has=function(e){var t=$e(this._tree,e);return t!==void 0&&t.has(j)},o.prototype.keys=function(){return new De(this,St)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Re(this._tree,e);return r.set(j,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Re(this._tree,e);return r.set(j,t(r.get(j))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Re(this._tree,e),n=r.get(j);return n===void 0&&r.set(j,n=t()),n},o.prototype.values=function(){return new De(this,At)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=V(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(d){t={error:d}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),Te=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=D(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==j&&e.startsWith(s))return t.push([o,s]),Te(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),Te(void 0,"",t)},$e=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=D(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==j&&e.startsWith(i))return $e(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},Re=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Oe,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=We,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return Lr(this,void 0,void 0,function(){var r,n,a,i,s,u,l,d,h,v,p,w,g,x,N,T,S,P,M,L,A,k,O,E,f;return zr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||je.batchSize,a=e.batchWait||je.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=D(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=V(u.value,2),d=l[0],h=l[1];try{for(v=(k=void 0,D(h)),p=v.next();!p.done;p=v.next()){w=V(p.value,2),g=w[0],x=w[1];try{for(N=(E=void 0,D(x)),T=N.next();!T.done;T=N.next())S=V(T.value,1),P=S[0],!this._documentIds.has(P)&&(x.size<=1?h.delete(g):x.delete(P))}catch(y){E={error:y}}finally{try{T&&!T.done&&(f=N.return)&&f.call(N)}finally{if(E)throw E.error}}}}catch(y){k={error:y}}finally{try{p&&!p.done&&(O=v.return)&&O.call(v)}finally{if(k)throw k.error}}return this._index.get(d).size===0&&this._index.delete(d),i%n!==0?[3,4]:[4,new Promise(function(y){return setTimeout(y,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return M=c.sent(),L={error:M},[3,9];case 8:try{u&&!u.done&&(A=s.return)&&A.call(s)}finally{if(L)throw L.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Le.minDirtCount,r=r||Le.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=D(a),u=s.next();!u.done;u=s.next()){var l=V(u.value,2),d=l[0],h=l[1],v=h.score,p=h.terms,w=h.match,g=p.length,x={id:this._documentIds.get(d),score:v*g,terms:Object.keys(w),match:w};Object.assign(x,this._storedFields.get(d)),(t.filter==null||t.filter(x))&&i.push(x)}}catch(N){r={error:N}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=B(B({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=D(this.search(e,t)),l=u.next();!l.done;l=u.next()){var d=l.value,h=d.score,v=d.terms,p=v.join(" "),w=s.get(p);w!=null?(w.score+=h,w.count+=1):s.set(p,{score:h,terms:v,count:1})}}catch(M){r={error:M}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var g=[];try{for(var x=D(s),N=x.next();!N.done;N=x.next()){var T=V(N.value,2),w=T[0],S=T[1],h=S.score,v=S.terms,P=S.count;g.push({suggestion:w,terms:v,score:h/P})}}catch(M){a={error:M}}finally{try{N&&!N.done&&(i=x.return)&&i.call(x)}finally{if(a)throw a.error}}return g.sort(vt),g},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Pe.hasOwnProperty(e))return Me(Pe,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,d=e.documentCount,h=e.nextId,v=e.documentIds,p=e.fieldIds,w=e.fieldLength,g=e.averageFieldLength,x=e.storedFields,N=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var S=new o(t);S._documentCount=d,S._nextId=h,S._documentIds=Fe(v),S._idToShortId=new Map,S._fieldIds=p,S._fieldLength=Fe(w),S._avgFieldLength=g,S._storedFields=Fe(x),S._dirtCount=N||0,S._index=new Oe;try{for(var P=D(S._documentIds),M=P.next();!M.done;M=P.next()){var L=V(M.value,2),A=L[0],k=L[1];S._idToShortId.set(k,A)}}catch(I){r={error:I}}finally{try{M&&!M.done&&(n=P.return)&&n.call(P)}finally{if(r)throw r.error}}try{for(var O=D(l),E=O.next();!E.done;E=O.next()){var f=V(E.value,2),c=f[0],y=f[1],F=new Map;try{for(var _=(s=void 0,D(Object.keys(y))),R=_.next();!R.done;R=_.next()){var m=R.value,b=y[m];T===1&&(b=b.ds),F.set(parseInt(m,10),Fe(b))}}catch(I){s={error:I}}finally{try{R&&!R.done&&(u=_.return)&&u.call(_)}finally{if(s)throw s.error}}S._index.set(c,F)}}catch(I){a={error:I}}finally{try{E&&!E.done&&(i=O.return)&&i.call(O)}finally{if(a)throw a.error}}return S},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),typeof e!="string"){var n=B(B(B({},t),e),{queries:void 0}),a=e.queries.map(function(x){return r.executeQuery(x,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,d=B(B({tokenize:s,processTerm:u},l),t),h=d.tokenize,v=d.processTerm,p=h(e).flatMap(function(x){return v(x)}).filter(function(x){return!!x}),w=p.map(Hr(d)),g=w.map(function(x){return r.executeQuerySpec(x,d)});return this.combineResults(g,d.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=B(B({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(m,b){var I;return B(B({},m),(I={},I[b]=Me(s.boost,b)||1,I))},{}),l=s.boostDocument,d=s.weights,h=s.maxFuzzy,v=s.bm25,p=B(B({},dt.weights),d),w=p.fuzzy,g=p.prefix,x=this._index.get(e.term),N=this.termResults(e.term,e.term,1,x,u,l,v),T,S;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var P=e.fuzzy===!0?.2:e.fuzzy,M=P<1?Math.min(h,Math.round(e.term.length*P)):P;M&&(S=this._index.fuzzyGet(e.term,M))}if(T)try{for(var L=D(T),A=L.next();!A.done;A=L.next()){var k=V(A.value,2),O=k[0],E=k[1],f=O.length-e.term.length;if(f){S==null||S.delete(O);var c=g*O.length/(O.length+.3*f);this.termResults(e.term,O,c,E,u,l,v,N)}}}catch(m){r={error:m}}finally{try{A&&!A.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}if(S)try{for(var y=D(S.keys()),F=y.next();!F.done;F=y.next()){var O=F.value,_=V(S.get(O),2),R=_[0],f=_[1];if(f){var c=w*O.length/(O.length+f);this.termResults(e.term,O,c,R,u,l,v,N)}}}catch(m){a={error:m}}finally{try{F&&!F.done&&(i=y.return)&&i.call(y)}finally{if(a)throw a.error}}return N},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=Je),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce(Kr[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=D(this._index),s=i.next();!s.done;s=i.next()){var u=V(s.value,2),l=u[0],d=u[1],h={};try{for(var v=(r=void 0,D(d)),p=v.next();!p.done;p=v.next()){var w=V(p.value,2),g=w[0],x=w[1];h[g]=Object.fromEntries(x)}}catch(N){r={error:N}}finally{try{p&&!p.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,h])}}catch(N){e={error:N}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,d,h,v,p;if(u===void 0&&(u=new Map),n==null)return u;try{for(var w=D(Object.keys(a)),g=w.next();!g.done;g=w.next()){var x=g.value,N=a[x],T=this._fieldIds[x],S=n.get(T);if(S!=null){var P=S.size,M=this._avgFieldLength[T];try{for(var L=(h=void 0,D(S.keys())),A=L.next();!A.done;A=L.next()){var k=A.value;if(!this._documentIds.has(k)){this.removeTerm(T,k,t),P-=1;continue}var O=i?i(this._documentIds.get(k),t,this._storedFields.get(k)):1;if(O){var E=S.get(k),f=this._fieldLength.get(k)[T],c=Ur(E,P,this._documentCount,f,M,s),y=r*N*O*c,F=u.get(k);if(F){F.score+=y,qr(F.terms,e);var _=Me(F.match,t);_?_.push(x):F.match[t]=[x]}else u.set(k,{score:y,terms:[e],match:(p={},p[t]=[x],p)})}}}catch(R){h={error:R}}finally{try{A&&!A.done&&(v=L.return)&&v.call(L)}finally{if(h)throw h.error}}}}}catch(R){l={error:R}}finally{try{g&&!g.done&&(d=w.return)&&d.call(w)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=D(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(Vt("data-v-d4300ab9"),o=o(),$t(),o),Yr=["aria-owns"],Zr={class:"shell"},Xr=["title"],ea=G(()=>C("svg",{class:"search-icon",width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[C("circle",{cx:"11",cy:"11",r:"8"}),C("path",{d:"m21 21l-4.35-4.35"})])],-1)),ta=[ea],ra={class:"search-actions before"},aa=["title"],na=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 12H5m7 7l-7-7l7-7"})],-1)),ia=[na],oa=["placeholder"],sa={class:"search-actions"},ua=["title"],la=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 14h7v7H3zM3 3h7v7H3zm11 1h7m-7 5h7m-7 6h7m-7 5h7"})],-1)),ca=[la],fa=["disabled","title"],da=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20 5H9l-7 7l7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Zm-2 4l-6 6m0-6l6 6"})],-1)),ha=[da],va=["id","role","aria-labelledby"],pa=["aria-selected"],ya=["href","aria-label","onMouseenter","onFocusin"],ma={class:"titles"},ga=G(()=>C("span",{class:"title-icon"},"#",-1)),ba=["innerHTML"],wa=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m9 18l6-6l-6-6"})],-1)),xa={class:"title main"},Fa=["innerHTML"],Ea={key:0,class:"excerpt-wrapper"},Sa={key:0,class:"excerpt",inert:""},Aa=["innerHTML"],Ca=G(()=>C("div",{class:"excerpt-gradient-bottom"},null,-1)),Na=G(()=>C("div",{class:"excerpt-gradient-top"},null,-1)),Ta={key:0,class:"no-results"},ka={class:"search-keyboard-shortcuts"},Ia=["aria-label"],_a=G(()=>C("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 19V5m-7 7l7-7l7 7"})],-1)),Da=[_a],Oa=["aria-label"],Ra=G(()=>C("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5v14m7-7l-7 7l-7-7"})],-1)),Ma=[Ra],Pa=["aria-label"],La=G(()=>C("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[C("g",{fill:"none",stroke:"currentcolor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[C("path",{d:"m9 10l-5 5l5 5"}),C("path",{d:"M20 4v7a4 4 0 0 1-4 4H4"})])],-1)),za=[La],Ba=["aria-label"],Va=It({__name:"VPLocalSearchBox",props:{placeholder:{}},emits:["close"],setup(o,{emit:e}){var R;const t=fe(),r=fe(),n=fe(),a=fe(tr),i=Gt(),{activate:s}=Rr(t,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,d=nt(async()=>{var m,b,I;return at(Wr.loadJSON((I=await((b=(m=a.value)[u.value])==null?void 0:b.call(m)))==null?void 0:I.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1}}}))}),v=ke(()=>{var m,b;return((m=l.value.search)==null?void 0:m.provider)==="local"&&((b=l.value.search.options)==null?void 0:b.disableQueryPersistence)===!0}).value?ne(""):qt("vitepress:local-search-filter",""),p=Qt("vitepress:local-search-detailed-list",!1),w=ke(()=>{var m,b;return((m=l.value.search)==null?void 0:m.provider)==="local"&&((b=l.value.search.options)==null?void 0:b.disableDetailedView)===!0});_t(()=>{w.value&&(p.value=!1)});const g=fe([]),x=ne(!1);Be(v,()=>{x.value=!1});const N=nt(async()=>{if(r.value)return at(new Pr(r.value))},null);Yt(()=>[d.value,v.value,p.value],async([m,b,I],J,q)=>{var Ue,He,Ge,qe;let W=!1;if(q(()=>{W=!0}),!m)return;g.value=m.search(b).slice(0,16),x.value=!0;const z=I?await Promise.all(g.value.map(K=>T(K.id))):[];if(W)return;const U=new Map;for(const{id:K,mod:te}of z){const re=K.slice(0,K.indexOf("#"));let Z=U.get(re);if(Z)continue;Z=new Map,U.set(re,Z);const Q=te.default??te;if(Q!=null&&Q.render||Q!=null&&Q.setup){const ae=jt(Q);ae.config.warnHandler=()=>{},ae.provide(Wt,i),Object.defineProperties(ae.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Qe=document.createElement("div");ae.mount(Qe),Qe.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(ce=>{var Xe;const ge=(Xe=ce.querySelector("a"))==null?void 0:Xe.getAttribute("href"),Ye=(ge==null?void 0:ge.startsWith("#"))&&ge.slice(1);if(!Ye)return;let Ze="";for(;(ce=ce.nextElementSibling)&&!/^h[1-6]$/i.test(ce.tagName);)Ze+=ce.outerHTML;Z.set(Ye,Ze)}),ae.unmount()}if(W)return}const H=new Set;if(g.value=g.value.map(K=>{const[te,re]=K.id.split("#"),Z=U.get(te),Q=(Z==null?void 0:Z.get(re))??"";for(const ae in K.match)H.add(ae);return{...K,text:Q}}),await de(),W)return;await new Promise(K=>{var te;(te=N.value)==null||te.unmark({done:()=>{var re;(re=N.value)==null||re.markRegExp(_(H),{done:K})}})});const ee=((Ue=t.value)==null?void 0:Ue.querySelectorAll(".result .excerpt"))??[];for(const K of ee)(He=K.querySelector('mark[data-markjs="true"]'))==null||He.scrollIntoView({block:"center"});(qe=(Ge=r.value)==null?void 0:Ge.firstElementChild)==null||qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function T(m){const b=Kt(m.slice(0,m.indexOf("#")));try{if(!b)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await ze(()=>import(b),[])}}catch(I){return console.error(I),{id:m,mod:{}}}}const S=ne(),P=ke(()=>{var m;return((m=v.value)==null?void 0:m.length)<=0});function M(m=!0){var b,I;(b=S.value)==null||b.focus(),m&&((I=S.value)==null||I.select())}Ie(()=>{M()});function L(m){m.pointerType==="mouse"&&M()}const A=ne(-1),k=ne(!1);Be(g,m=>{A.value=m.length?0:-1,O()});function O(){de(()=>{const m=document.querySelector(".result.selected");m&&m.scrollIntoView({block:"nearest"})})}we("ArrowUp",m=>{m.preventDefault(),A.value--,A.value<0&&(A.value=g.value.length-1),k.value=!0,O()}),we("ArrowDown",m=>{m.preventDefault(),A.value++,A.value>=g.value.length&&(A.value=0),k.value=!0,O()});const E=Dt();we("Enter",()=>{const m=g.value[A.value];m&&(E.go(m.id),e("close"))}),we("Escape",()=>{e("close")});const f={modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}},c=Zt((R=l.value.search)==null?void 0:R.options,f);Ie(()=>{window.history.pushState(null,"",null)}),Xt("popstate",m=>{m.preventDefault(),e("close")});const y=er(n);Ie(()=>{n.value=document.body,de(()=>{y.value=!0,de().then(()=>s())})}),Ot(()=>{y.value=!1});function F(){v.value="",de().then(()=>M(!1))}function _(m){return new RegExp([...m].sort((b,I)=>I.length-b.length).map(b=>`(${b.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")})`).join("|"),"gi")}return(m,b)=>{var I,J,q,W;return Y(),Rt(Bt,{to:"body"},[C("div",{ref_key:"el",ref:t,role:"button","aria-owns":(I=g.value)!=null&&I.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[C("div",{class:"backdrop",onClick:b[0]||(b[0]=z=>m.$emit("close"))}),C("div",Zr,[C("form",{class:"search-bar",onPointerup:b[4]||(b[4]=z=>L(z)),onSubmit:b[5]||(b[5]=Mt(()=>{},["prevent"]))},[C("label",{title:m.placeholder,id:"localsearch-label",for:"localsearch-input"},ta,8,Xr),C("div",ra,[C("button",{class:"back-button",title:$(c)("modal.backButtonTitle"),onClick:b[1]||(b[1]=z=>m.$emit("close"))},ia,8,aa)]),Pt(C("input",{ref_key:"searchInput",ref:S,"onUpdate:modelValue":b[2]||(b[2]=z=>zt(v)?v.value=z:null),placeholder:m.placeholder,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,oa),[[Lt,$(v)]]),C("div",sa,[w.value?be("",!0):(Y(),X("button",{key:0,class:et(["toggle-layout-button",{"detailed-list":$(p)}]),title:$(c)("modal.displayDetails"),onClick:b[3]||(b[3]=z=>A.value>-1&&(p.value=!$(p)))},ca,10,ua)),C("button",{class:"clear-button",type:"reset",disabled:P.value,title:$(c)("modal.resetButtonTitle"),onClick:F},ha,8,fa)])],32),C("ul",{ref_key:"resultsEl",ref:r,id:(J=g.value)!=null&&J.length?"localsearch-list":void 0,role:(q=g.value)!=null&&q.length?"listbox":void 0,"aria-labelledby":(W=g.value)!=null&&W.length?"localsearch-label":void 0,class:"results",onMousemove:b[7]||(b[7]=z=>k.value=!1)},[(Y(!0),X(rt,null,tt(g.value,(z,U)=>(Y(),X("li",{key:z.id,role:"option","aria-selected":A.value===U?"true":"false"},[C("a",{href:z.id,class:et(["result",{selected:A.value===U}]),"aria-label":[...z.titles,z.title].join(" > "),onMouseenter:H=>!k.value&&(A.value=U),onFocusin:H=>A.value=U,onClick:b[6]||(b[6]=H=>m.$emit("close"))},[C("div",null,[C("div",ma,[ga,(Y(!0),X(rt,null,tt(z.titles,(H,ee)=>(Y(),X("span",{key:ee,class:"title"},[C("span",{class:"text",innerHTML:H},null,8,ba),wa]))),128)),C("span",xa,[C("span",{class:"text",innerHTML:z.title},null,8,Fa)])]),$(p)?(Y(),X("div",Ea,[z.text?(Y(),X("div",Sa,[C("div",{class:"vp-doc",innerHTML:z.text},null,8,Aa)])):be("",!0),Ca,Na])):be("",!0)])],42,ya)],8,pa))),128)),$(v)&&!g.value.length&&x.value?(Y(),X("li",Ta,[he(ve($(c)("modal.noResultsText"))+' "',1),C("strong",null,ve($(v)),1),he('" ')])):be("",!0)],40,va),C("div",ka,[C("span",null,[C("kbd",{"aria-label":$(c)("modal.footer.navigateUpKeyAriaLabel")},Da,8,Ia),C("kbd",{"aria-label":$(c)("modal.footer.navigateDownKeyAriaLabel")},Ma,8,Oa),he(" "+ve($(c)("modal.footer.navigateText")),1)]),C("span",null,[C("kbd",{"aria-label":$(c)("modal.footer.selectKeyAriaLabel")},za,8,Pa),he(" "+ve($(c)("modal.footer.selectText")),1)]),C("span",null,[C("kbd",{"aria-label":$(c)("modal.footer.closeKeyAriaLabel")},"esc",8,Ba),he(" "+ve($(c)("modal.footer.closeText")),1)])])])],8,Yr)])}}});const Ja=Jt(Va,[["__scopeId","data-v-d4300ab9"]]);export{Ja as default}; +*/function ot(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function st(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Fr=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Er=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Sr=function(e){return ge(e)&&!e.shiftKey},Ar=function(e){return ge(e)&&e.shiftKey},lt=function(e){return setTimeout(e,0)},ct=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},pe=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?y-1:0),_=1;_=0)f=r.activeElement;else{var c=i.tabbableGroups[0],y=c&&c.firstTabbableNode;f=y||d("fallbackFocus")}if(!f)throw new Error("Your focus-trap needs to have at least one focusable element");return f},v=function(){if(i.containerGroups=i.containers.map(function(f){var c=yr(f,a.tabbableOptions),y=gr(f,a.tabbableOptions),F=c.length>0?c[0]:void 0,_=c.length>0?c[c.length-1]:void 0,R=y.find(function(I){return se(I)}),g=y.slice().reverse().find(function(I){return se(I)}),b=!!c.find(function(I){return ie(I)>0});return{container:f,tabbableNodes:c,focusableNodes:y,posTabIndexesFound:b,firstTabbableNode:F,lastTabbableNode:_,firstDomTabbableNode:R,lastDomTabbableNode:g,nextTabbableNode:function(K){var H=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,$=c.indexOf(K);return $<0?H?y.slice(y.indexOf(K)+1).find(function(z){return se(z)}):y.slice(0,y.indexOf(K)).reverse().find(function(z){return se(z)}):c[$+(H?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(f){return f.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!d("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(f){return f.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},p=function E(f){if(f!==!1&&f!==r.activeElement){if(!f||!f.focus){E(h());return}f.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=f,Fr(f)&&f.select()}},w=function(f){var c=d("setReturnFocus",f);return c||(c===!1?!1:f)},m=function(f){var c=f.target,y=f.event,F=f.isBackward,_=F===void 0?!1:F;c=c||xe(y),v();var R=null;if(i.tabbableGroups.length>0){var g=l(c,y),b=g>=0?i.containerGroups[g]:void 0;if(g<0)_?R=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:R=i.tabbableGroups[0].firstTabbableNode;else if(_){var I=ct(i.tabbableGroups,function(U){var ee=U.firstTabbableNode;return c===ee});if(I<0&&(b.container===c||_e(c,a.tabbableOptions)&&!se(c,a.tabbableOptions)&&!b.nextTabbableNode(c,!1))&&(I=g),I>=0){var K=I===0?i.tabbableGroups.length-1:I-1,H=i.tabbableGroups[K];R=ie(c)>=0?H.lastTabbableNode:H.lastDomTabbableNode}else ge(y)||(R=b.nextTabbableNode(c,!1))}else{var $=ct(i.tabbableGroups,function(U){var ee=U.lastTabbableNode;return c===ee});if($<0&&(b.container===c||_e(c,a.tabbableOptions)&&!se(c,a.tabbableOptions)&&!b.nextTabbableNode(c))&&($=g),$>=0){var z=$===i.tabbableGroups.length-1?0:$+1,J=i.tabbableGroups[z];R=ie(c)>=0?J.firstTabbableNode:J.firstDomTabbableNode}else ge(y)||(R=b.nextTabbableNode(c))}}else R=d("fallbackFocus");return R},x=function(f){var c=xe(f);if(!(l(c,f)>=0)){if(pe(a.clickOutsideDeactivates,f)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}pe(a.allowOutsideClick,f)||f.preventDefault()}},N=function(f){var c=xe(f),y=l(c,f)>=0;if(y||c instanceof Document)y&&(i.mostRecentlyFocusedNode=c);else{f.stopImmediatePropagation();var F,_=!0;if(i.mostRecentlyFocusedNode)if(ie(i.mostRecentlyFocusedNode)>0){var R=l(i.mostRecentlyFocusedNode),g=i.containerGroups[R].tabbableNodes;if(g.length>0){var b=g.findIndex(function(I){return I===i.mostRecentlyFocusedNode});b>=0&&(a.isKeyForward(i.recentNavEvent)?b+1=0&&(F=g[b-1],_=!1))}}else i.containerGroups.some(function(I){return I.tabbableNodes.some(function(K){return ie(K)>0})})||(_=!1);else _=!1;_&&(F=m({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),p(F||i.mostRecentlyFocusedNode||h())}i.recentNavEvent=void 0},T=function(f){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=f;var y=m({event:f,isBackward:c});y&&(ge(f)&&f.preventDefault(),p(y))},S=function(f){if(Er(f)&&pe(a.escapeDeactivates,f)!==!1){f.preventDefault(),s.deactivate();return}(a.isKeyForward(f)||a.isKeyBackward(f))&&T(f,a.isKeyBackward(f))},P=function(f){var c=xe(f);l(c,f)>=0||pe(a.clickOutsideDeactivates,f)||pe(a.allowOutsideClick,f)||(f.preventDefault(),f.stopImmediatePropagation())},M=function(){if(i.active)return ut.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?lt(function(){p(h())}):p(h()),r.addEventListener("focusin",N,!0),r.addEventListener("mousedown",x,{capture:!0,passive:!1}),r.addEventListener("touchstart",x,{capture:!0,passive:!1}),r.addEventListener("click",P,{capture:!0,passive:!1}),r.addEventListener("keydown",S,{capture:!0,passive:!1}),s},L=function(){if(i.active)return r.removeEventListener("focusin",N,!0),r.removeEventListener("mousedown",x,!0),r.removeEventListener("touchstart",x,!0),r.removeEventListener("click",P,!0),r.removeEventListener("keydown",S,!0),s},A=function(f){var c=f.some(function(y){var F=Array.from(y.removedNodes);return F.some(function(_){return _===i.mostRecentlyFocusedNode})});c&&p(h())},k=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(A):void 0,D=function(){k&&(k.disconnect(),i.active&&!i.paused&&i.containers.map(function(f){k.observe(f,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(f){if(i.active)return this;var c=u(f,"onActivate"),y=u(f,"onPostActivate"),F=u(f,"checkCanFocusTrap");F||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,c==null||c();var _=function(){F&&v(),M(),D(),y==null||y()};return F?(F(i.containers.concat()).then(_,_),this):(_(),this)},deactivate:function(f){if(!i.active)return this;var c=st({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},f);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,L(),i.active=!1,i.paused=!1,D(),ut.deactivateTrap(n,s);var y=u(c,"onDeactivate"),F=u(c,"onPostDeactivate"),_=u(c,"checkCanReturnFocus"),R=u(c,"returnFocus","returnFocusOnDeactivate");y==null||y();var g=function(){lt(function(){R&&p(w(i.nodeFocusedBeforeActivation)),F==null||F()})};return R&&_?(_(w(i.nodeFocusedBeforeActivation)).then(g,g),this):(g(),this)},pause:function(f){if(i.paused||!i.active)return this;var c=u(f,"onPause"),y=u(f,"onPostPause");return i.paused=!0,c==null||c(),L(),D(),y==null||y(),this},unpause:function(f){if(!i.paused||!i.active)return this;var c=u(f,"onUnpause"),y=u(f,"onPostUnpause");return i.paused=!1,c==null||c(),v(),M(),D(),y==null||y(),this},updateContainerElements:function(f){var c=[].concat(f).filter(Boolean);return i.containers=c.map(function(y){return typeof y=="string"?r.querySelector(y):y}),i.active&&v(),D(),this}},s.updateContainerElements(e),s},Tr=Object.defineProperty,kr=Object.defineProperties,Ir=Object.getOwnPropertyDescriptors,Ne=Object.getOwnPropertySymbols,Ft=Object.prototype.hasOwnProperty,Et=Object.prototype.propertyIsEnumerable,ft=(o,e,t)=>e in o?Tr(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,_r=(o,e)=>{for(var t in e||(e={}))Ft.call(e,t)&&ft(o,t,e[t]);if(Ne)for(var t of Ne(e))Et.call(e,t)&&ft(o,t,e[t]);return o},Or=(o,e)=>kr(o,Ir(e)),Dr=(o,e)=>{var t={};for(var r in o)Ft.call(o,r)&&e.indexOf(r)<0&&(t[r]=o[r]);if(o!=null&&Ne)for(var r of Ne(o))e.indexOf(r)<0&&Et.call(o,r)&&(t[r]=o[r]);return t};function Rr(o,e={}){let t;const r=e,{immediate:n}=r,a=Dr(r,["immediate"]),i=ne(!1),s=ne(!1),u=v=>t&&t.activate(v),l=v=>t&&t.deactivate(v),d=()=>{t&&(t.pause(),s.value=!0)},h=()=>{t&&(t.unpause(),s.value=!1)};return Be(()=>Ut(o),v=>{v&&(t=Nr(v,Or(_r({},a),{onActivate(){i.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){i.value=!1,e.onDeactivate&&e.onDeactivate()}})),n&&u())},{flush:"post"}),Ht(()=>l()),{hasFocus:i,isPaused:s,activate:u,deactivate:l,pause:d,unpause:h}}class le{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{le.matches(l,this.exclude)?u():this.onIframeReady(l,d=>{t(l)&&(s++,r(d)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new le(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,d,h=()=>({prevNode:d,node:l}=this.getIteratorNode(i),l);for(;h();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,d,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,p=>u.push(p),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Mr=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new le(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return le.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,d=(r>i.end?i.end:r)-i.start,h=e.value.substr(0,i.start),v=e.value.substr(d+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,d),e.value=h+v,e.nodes.forEach((p,w)=>{w>=s&&(e.nodes[w].start>0&&w!==s&&(e.nodes[w].start-=d),e.nodes[w].end-=d)}),r-=d,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let d=l.index;if(i!==0)for(let h=1;h{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let h=1;hr(u[i],h),(h,v)=>{e.lastIndex=v,n(h)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:d,valid:h}=this.checkWhitespaceRanges(s,i,a.value);h&&this.wrapRangeInMappedTextNode(a,l,d,v=>t(v,s,a.value.substring(l,d),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let d=new RegExp(this.createRegExp(l),`gm${s}`),h=0;this.log(`Searching with expression "${d}"`),this[n](d,1,(v,p)=>this.opt.filter(p,l,r,h),v=>{h++,r++,this.opt.each(v)},()=>{h===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=le.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Pr(o){const e=new Mr(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var B=function(){return B=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function V(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Br="ENTRIES",St="KEYS",At="VALUES",W="",Oe=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ue(this._path),t=e.node,r=e.keys;if(ue(r)===W)return{done:!1,value:this.result()};var n=t.get(ue(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ue(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ue(t)}).filter(function(e){return e!==W}).join("")},o.prototype.value=function(){return ue(this._path).node.get(W)},o.prototype.result=function(){switch(this._type){case At:return this.value();case St:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ue=function(o){return o[o.length-1]},Vr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}Ct(o.get(p),e,t,r,n,m,i,s+p)}}}catch(y){u={error:y}}finally{try{v&&!v.done&&(l=h.return)&&l.call(h)}finally{if(u)throw u.error}}},De=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=V(Te(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=V(Ke(i),2),u=s[0],l=s[1];try{for(var d=O(u.keys()),h=d.next();!h.done;h=d.next()){var v=h.value;if(v!==W&&v.startsWith(l)){var p=new Map;return p.set(v.slice(l.length),u.get(v)),new o(p,e)}}}catch(w){t={error:w}}finally{try{h&&!h.done&&(r=d.return)&&r.call(d)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,$r(this._tree,e)},o.prototype.entries=function(){return new Oe(this,Br)},o.prototype.forEach=function(e){var t,r;try{for(var n=O(this),a=n.next();!a.done;a=n.next()){var i=V(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return Vr(this._tree,e,t)},o.prototype.get=function(e){var t=$e(this._tree,e);return t!==void 0?t.get(W):void 0},o.prototype.has=function(e){var t=$e(this._tree,e);return t!==void 0&&t.has(W)},o.prototype.keys=function(){return new Oe(this,St)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Re(this._tree,e);return r.set(W,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Re(this._tree,e);return r.set(W,t(r.get(W))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Re(this._tree,e),n=r.get(W);return n===void 0&&r.set(W,n=t()),n},o.prototype.values=function(){return new Oe(this,At)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=O(e),i=a.next();!i.done;i=a.next()){var s=V(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(d){t={error:d}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),Te=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=O(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==W&&e.startsWith(s))return t.push([o,s]),Te(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),Te(void 0,"",t)},$e=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=O(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==W&&e.startsWith(i))return $e(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},Re=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new De,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=O(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=We,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return Lr(this,void 0,void 0,function(){var r,n,a,i,s,u,l,d,h,v,p,w,m,x,N,T,S,P,M,L,A,k,D,E,f;return zr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||je.batchSize,a=e.batchWait||je.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=O(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=V(u.value,2),d=l[0],h=l[1];try{for(v=(k=void 0,O(h)),p=v.next();!p.done;p=v.next()){w=V(p.value,2),m=w[0],x=w[1];try{for(N=(E=void 0,O(x)),T=N.next();!T.done;T=N.next())S=V(T.value,1),P=S[0],!this._documentIds.has(P)&&(x.size<=1?h.delete(m):x.delete(P))}catch(y){E={error:y}}finally{try{T&&!T.done&&(f=N.return)&&f.call(N)}finally{if(E)throw E.error}}}}catch(y){k={error:y}}finally{try{p&&!p.done&&(D=v.return)&&D.call(v)}finally{if(k)throw k.error}}return this._index.get(d).size===0&&this._index.delete(d),i%n!==0?[3,4]:[4,new Promise(function(y){return setTimeout(y,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return M=c.sent(),L={error:M},[3,9];case 8:try{u&&!u.done&&(A=s.return)&&A.call(s)}finally{if(L)throw L.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Le.minDirtCount,r=r||Le.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=O(a),u=s.next();!u.done;u=s.next()){var l=V(u.value,2),d=l[0],h=l[1],v=h.score,p=h.terms,w=h.match,m=p.length,x={id:this._documentIds.get(d),score:v*m,terms:Object.keys(w),match:w};Object.assign(x,this._storedFields.get(d)),(t.filter==null||t.filter(x))&&i.push(x)}}catch(N){r={error:N}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=B(B({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=O(this.search(e,t)),l=u.next();!l.done;l=u.next()){var d=l.value,h=d.score,v=d.terms,p=v.join(" "),w=s.get(p);w!=null?(w.score+=h,w.count+=1):s.set(p,{score:h,terms:v,count:1})}}catch(M){r={error:M}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var m=[];try{for(var x=O(s),N=x.next();!N.done;N=x.next()){var T=V(N.value,2),w=T[0],S=T[1],h=S.score,v=S.terms,P=S.count;m.push({suggestion:w,terms:v,score:h/P})}}catch(M){a={error:M}}finally{try{N&&!N.done&&(i=x.return)&&i.call(x)}finally{if(a)throw a.error}}return m.sort(vt),m},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Pe.hasOwnProperty(e))return Me(Pe,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,d=e.documentCount,h=e.nextId,v=e.documentIds,p=e.fieldIds,w=e.fieldLength,m=e.averageFieldLength,x=e.storedFields,N=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var S=new o(t);S._documentCount=d,S._nextId=h,S._documentIds=Fe(v),S._idToShortId=new Map,S._fieldIds=p,S._fieldLength=Fe(w),S._avgFieldLength=m,S._storedFields=Fe(x),S._dirtCount=N||0,S._index=new De;try{for(var P=O(S._documentIds),M=P.next();!M.done;M=P.next()){var L=V(M.value,2),A=L[0],k=L[1];S._idToShortId.set(k,A)}}catch(I){r={error:I}}finally{try{M&&!M.done&&(n=P.return)&&n.call(P)}finally{if(r)throw r.error}}try{for(var D=O(l),E=D.next();!E.done;E=D.next()){var f=V(E.value,2),c=f[0],y=f[1],F=new Map;try{for(var _=(s=void 0,O(Object.keys(y))),R=_.next();!R.done;R=_.next()){var g=R.value,b=y[g];T===1&&(b=b.ds),F.set(parseInt(g,10),Fe(b))}}catch(I){s={error:I}}finally{try{R&&!R.done&&(u=_.return)&&u.call(_)}finally{if(s)throw s.error}}S._index.set(c,F)}}catch(I){a={error:I}}finally{try{E&&!E.done&&(i=D.return)&&i.call(D)}finally{if(a)throw a.error}}return S},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),typeof e!="string"){var n=B(B(B({},t),e),{queries:void 0}),a=e.queries.map(function(x){return r.executeQuery(x,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,d=B(B({tokenize:s,processTerm:u},l),t),h=d.tokenize,v=d.processTerm,p=h(e).flatMap(function(x){return v(x)}).filter(function(x){return!!x}),w=p.map(Hr(d)),m=w.map(function(x){return r.executeQuerySpec(x,d)});return this.combineResults(m,d.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=B(B({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(g,b){var I;return B(B({},g),(I={},I[b]=Me(s.boost,b)||1,I))},{}),l=s.boostDocument,d=s.weights,h=s.maxFuzzy,v=s.bm25,p=B(B({},dt.weights),d),w=p.fuzzy,m=p.prefix,x=this._index.get(e.term),N=this.termResults(e.term,e.term,1,x,u,l,v),T,S;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var P=e.fuzzy===!0?.2:e.fuzzy,M=P<1?Math.min(h,Math.round(e.term.length*P)):P;M&&(S=this._index.fuzzyGet(e.term,M))}if(T)try{for(var L=O(T),A=L.next();!A.done;A=L.next()){var k=V(A.value,2),D=k[0],E=k[1],f=D.length-e.term.length;if(f){S==null||S.delete(D);var c=m*D.length/(D.length+.3*f);this.termResults(e.term,D,c,E,u,l,v,N)}}}catch(g){r={error:g}}finally{try{A&&!A.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}if(S)try{for(var y=O(S.keys()),F=y.next();!F.done;F=y.next()){var D=F.value,_=V(S.get(D),2),R=_[0],f=_[1];if(f){var c=w*D.length/(D.length+f);this.termResults(e.term,D,c,R,u,l,v,N)}}}catch(g){a={error:g}}finally{try{F&&!F.done&&(i=y.return)&&i.call(y)}finally{if(a)throw a.error}}return N},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=Je),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce(Kr[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=O(this._index),s=i.next();!s.done;s=i.next()){var u=V(s.value,2),l=u[0],d=u[1],h={};try{for(var v=(r=void 0,O(d)),p=v.next();!p.done;p=v.next()){var w=V(p.value,2),m=w[0],x=w[1];h[m]=Object.fromEntries(x)}}catch(N){r={error:N}}finally{try{p&&!p.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,h])}}catch(N){e={error:N}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,d,h,v,p;if(u===void 0&&(u=new Map),n==null)return u;try{for(var w=O(Object.keys(a)),m=w.next();!m.done;m=w.next()){var x=m.value,N=a[x],T=this._fieldIds[x],S=n.get(T);if(S!=null){var P=S.size,M=this._avgFieldLength[T];try{for(var L=(h=void 0,O(S.keys())),A=L.next();!A.done;A=L.next()){var k=A.value;if(!this._documentIds.has(k)){this.removeTerm(T,k,t),P-=1;continue}var D=i?i(this._documentIds.get(k),t,this._storedFields.get(k)):1;if(D){var E=S.get(k),f=this._fieldLength.get(k)[T],c=Ur(E,P,this._documentCount,f,M,s),y=r*N*D*c,F=u.get(k);if(F){F.score+=y,Gr(F.terms,e);var _=Me(F.match,t);_?_.push(x):F.match[t]=[x]}else u.set(k,{score:y,terms:[e],match:(p={},p[t]=[x],p)})}}}catch(R){h={error:R}}finally{try{A&&!A.done&&(v=L.return)&&v.call(L)}finally{if(h)throw h.error}}}}}catch(R){l={error:R}}finally{try{m&&!m.done&&(d=w.return)&&d.call(w)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=O(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(Vt("data-v-3e2bae22"),o=o(),$t(),o),Yr=["aria-owns"],Zr={class:"shell"},Xr=["title"],ea=G(()=>C("svg",{class:"search-icon",width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[C("circle",{cx:"11",cy:"11",r:"8"}),C("path",{d:"m21 21l-4.35-4.35"})])],-1)),ta=[ea],ra={class:"search-actions before"},aa=["title"],na=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 12H5m7 7l-7-7l7-7"})],-1)),ia=[na],oa=["placeholder"],sa={class:"search-actions"},ua=["title"],la=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 14h7v7H3zM3 3h7v7H3zm11 1h7m-7 5h7m-7 6h7m-7 5h7"})],-1)),ca=[la],fa=["disabled","title"],da=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20 5H9l-7 7l7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Zm-2 4l-6 6m0-6l6 6"})],-1)),ha=[da],va=["id","role","aria-labelledby"],pa=["aria-selected"],ya=["href","aria-label","onMouseenter","onFocusin"],ga={class:"titles"},ma=G(()=>C("span",{class:"title-icon"},"#",-1)),ba=["innerHTML"],wa=G(()=>C("svg",{width:"18",height:"18",viewBox:"0 0 24 24"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m9 18l6-6l-6-6"})],-1)),xa={class:"title main"},Fa=["innerHTML"],Ea={key:0,class:"excerpt-wrapper"},Sa={key:0,class:"excerpt",inert:""},Aa=["innerHTML"],Ca=G(()=>C("div",{class:"excerpt-gradient-bottom"},null,-1)),Na=G(()=>C("div",{class:"excerpt-gradient-top"},null,-1)),Ta={key:0,class:"no-results"},ka={class:"search-keyboard-shortcuts"},Ia=["aria-label"],_a=G(()=>C("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 19V5m-7 7l7-7l7 7"})],-1)),Oa=[_a],Da=["aria-label"],Ra=G(()=>C("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[C("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5v14m7-7l-7 7l-7-7"})],-1)),Ma=[Ra],Pa=["aria-label"],La=G(()=>C("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[C("g",{fill:"none",stroke:"currentcolor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[C("path",{d:"m9 10l-5 5l5 5"}),C("path",{d:"M20 4v7a4 4 0 0 1-4 4H4"})])],-1)),za=[La],Ba=["aria-label"],Va=It({__name:"VPLocalSearchBox",props:{placeholder:{}},emits:["close"],setup(o,{emit:e}){var R;const t=fe(),r=fe(),n=fe(),a=fe(tr),i=qt(),{activate:s}=Rr(t,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,d=nt(async()=>{var g,b,I,K,H,$,z,J,U;return at(Wr.loadJSON((I=await((b=(g=a.value)[u.value])==null?void 0:b.call(g)))==null?void 0:I.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((K=l.value.search)==null?void 0:K.provider)==="local"&&(($=(H=l.value.search.options)==null?void 0:H.miniSearch)==null?void 0:$.searchOptions)},...((z=l.value.search)==null?void 0:z.provider)==="local"&&((U=(J=l.value.search.options)==null?void 0:J.miniSearch)==null?void 0:U.options)}))}),v=ke(()=>{var g,b;return((g=l.value.search)==null?void 0:g.provider)==="local"&&((b=l.value.search.options)==null?void 0:b.disableQueryPersistence)===!0}).value?ne(""):Gt("vitepress:local-search-filter",""),p=Qt("vitepress:local-search-detailed-list",!1),w=ke(()=>{var g,b;return((g=l.value.search)==null?void 0:g.provider)==="local"&&((b=l.value.search.options)==null?void 0:b.disableDetailedView)===!0});_t(()=>{w.value&&(p.value=!1)});const m=fe([]),x=ne(!1);Be(v,()=>{x.value=!1});const N=nt(async()=>{if(r.value)return at(new Pr(r.value))},null);Yt(()=>[d.value,v.value,p.value],async([g,b,I],K,H)=>{var Ue,He,qe,Ge;let $=!1;if(H(()=>{$=!0}),!g)return;m.value=g.search(b).slice(0,16),x.value=!0;const z=I?await Promise.all(m.value.map(q=>T(q.id))):[];if($)return;const J=new Map;for(const{id:q,mod:te}of z){const re=q.slice(0,q.indexOf("#"));let Z=J.get(re);if(Z)continue;Z=new Map,J.set(re,Z);const Q=te.default??te;if(Q!=null&&Q.render||Q!=null&&Q.setup){const ae=jt(Q);ae.config.warnHandler=()=>{},ae.provide(Wt,i),Object.defineProperties(ae.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Qe=document.createElement("div");ae.mount(Qe),Qe.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(ce=>{var Xe;const me=(Xe=ce.querySelector("a"))==null?void 0:Xe.getAttribute("href"),Ye=(me==null?void 0:me.startsWith("#"))&&me.slice(1);if(!Ye)return;let Ze="";for(;(ce=ce.nextElementSibling)&&!/^h[1-6]$/i.test(ce.tagName);)Ze+=ce.outerHTML;Z.set(Ye,Ze)}),ae.unmount()}if($)return}const U=new Set;if(m.value=m.value.map(q=>{const[te,re]=q.id.split("#"),Z=J.get(te),Q=(Z==null?void 0:Z.get(re))??"";for(const ae in q.match)U.add(ae);return{...q,text:Q}}),await de(),$)return;await new Promise(q=>{var te;(te=N.value)==null||te.unmark({done:()=>{var re;(re=N.value)==null||re.markRegExp(_(U),{done:q})}})});const ee=((Ue=t.value)==null?void 0:Ue.querySelectorAll(".result .excerpt"))??[];for(const q of ee)(He=q.querySelector('mark[data-markjs="true"]'))==null||He.scrollIntoView({block:"center"});(Ge=(qe=r.value)==null?void 0:qe.firstElementChild)==null||Ge.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function T(g){const b=Kt(g.slice(0,g.indexOf("#")));try{if(!b)throw new Error(`Cannot find file for id: ${g}`);return{id:g,mod:await ze(()=>import(b),[])}}catch(I){return console.error(I),{id:g,mod:{}}}}const S=ne(),P=ke(()=>{var g;return((g=v.value)==null?void 0:g.length)<=0});function M(g=!0){var b,I;(b=S.value)==null||b.focus(),g&&((I=S.value)==null||I.select())}Ie(()=>{M()});function L(g){g.pointerType==="mouse"&&M()}const A=ne(-1),k=ne(!1);Be(m,g=>{A.value=g.length?0:-1,D()});function D(){de(()=>{const g=document.querySelector(".result.selected");g&&g.scrollIntoView({block:"nearest"})})}we("ArrowUp",g=>{g.preventDefault(),A.value--,A.value<0&&(A.value=m.value.length-1),k.value=!0,D()}),we("ArrowDown",g=>{g.preventDefault(),A.value++,A.value>=m.value.length&&(A.value=0),k.value=!0,D()});const E=Ot();we("Enter",()=>{const g=m.value[A.value];g&&(E.go(g.id),e("close"))}),we("Escape",()=>{e("close")});const f={modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}},c=Zt((R=l.value.search)==null?void 0:R.options,f);Ie(()=>{window.history.pushState(null,"",null)}),Xt("popstate",g=>{g.preventDefault(),e("close")});const y=er(n);Ie(()=>{n.value=document.body,de(()=>{y.value=!0,de().then(()=>s())})}),Dt(()=>{y.value=!1});function F(){v.value="",de().then(()=>M(!1))}function _(g){return new RegExp([...g].sort((b,I)=>I.length-b.length).map(b=>`(${b.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")})`).join("|"),"gi")}return(g,b)=>{var I,K,H,$;return Y(),Rt(Bt,{to:"body"},[C("div",{ref_key:"el",ref:t,role:"button","aria-owns":(I=m.value)!=null&&I.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[C("div",{class:"backdrop",onClick:b[0]||(b[0]=z=>g.$emit("close"))}),C("div",Zr,[C("form",{class:"search-bar",onPointerup:b[4]||(b[4]=z=>L(z)),onSubmit:b[5]||(b[5]=Mt(()=>{},["prevent"]))},[C("label",{title:g.placeholder,id:"localsearch-label",for:"localsearch-input"},ta,8,Xr),C("div",ra,[C("button",{class:"back-button",title:j(c)("modal.backButtonTitle"),onClick:b[1]||(b[1]=z=>g.$emit("close"))},ia,8,aa)]),Pt(C("input",{ref_key:"searchInput",ref:S,"onUpdate:modelValue":b[2]||(b[2]=z=>zt(v)?v.value=z:null),placeholder:g.placeholder,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,oa),[[Lt,j(v)]]),C("div",sa,[w.value?be("",!0):(Y(),X("button",{key:0,class:et(["toggle-layout-button",{"detailed-list":j(p)}]),title:j(c)("modal.displayDetails"),onClick:b[3]||(b[3]=z=>A.value>-1&&(p.value=!j(p)))},ca,10,ua)),C("button",{class:"clear-button",type:"reset",disabled:P.value,title:j(c)("modal.resetButtonTitle"),onClick:F},ha,8,fa)])],32),C("ul",{ref_key:"resultsEl",ref:r,id:(K=m.value)!=null&&K.length?"localsearch-list":void 0,role:(H=m.value)!=null&&H.length?"listbox":void 0,"aria-labelledby":($=m.value)!=null&&$.length?"localsearch-label":void 0,class:"results",onMousemove:b[7]||(b[7]=z=>k.value=!1)},[(Y(!0),X(rt,null,tt(m.value,(z,J)=>(Y(),X("li",{key:z.id,role:"option","aria-selected":A.value===J?"true":"false"},[C("a",{href:z.id,class:et(["result",{selected:A.value===J}]),"aria-label":[...z.titles,z.title].join(" > "),onMouseenter:U=>!k.value&&(A.value=J),onFocusin:U=>A.value=J,onClick:b[6]||(b[6]=U=>g.$emit("close"))},[C("div",null,[C("div",ga,[ma,(Y(!0),X(rt,null,tt(z.titles,(U,ee)=>(Y(),X("span",{key:ee,class:"title"},[C("span",{class:"text",innerHTML:U},null,8,ba),wa]))),128)),C("span",xa,[C("span",{class:"text",innerHTML:z.title},null,8,Fa)])]),j(p)?(Y(),X("div",Ea,[z.text?(Y(),X("div",Sa,[C("div",{class:"vp-doc",innerHTML:z.text},null,8,Aa)])):be("",!0),Ca,Na])):be("",!0)])],42,ya)],8,pa))),128)),j(v)&&!m.value.length&&x.value?(Y(),X("li",Ta,[he(ve(j(c)("modal.noResultsText"))+' "',1),C("strong",null,ve(j(v)),1),he('" ')])):be("",!0)],40,va),C("div",ka,[C("span",null,[C("kbd",{"aria-label":j(c)("modal.footer.navigateUpKeyAriaLabel")},Oa,8,Ia),C("kbd",{"aria-label":j(c)("modal.footer.navigateDownKeyAriaLabel")},Ma,8,Da),he(" "+ve(j(c)("modal.footer.navigateText")),1)]),C("span",null,[C("kbd",{"aria-label":j(c)("modal.footer.selectKeyAriaLabel")},za,8,Pa),he(" "+ve(j(c)("modal.footer.selectText")),1)]),C("span",null,[C("kbd",{"aria-label":j(c)("modal.footer.closeKeyAriaLabel")},"esc",8,Ba),he(" "+ve(j(c)("modal.footer.closeText")),1)])])])],8,Yr)])}}});const Ja=Jt(Va,[["__scopeId","data-v-3e2bae22"]]);export{Ja as default}; diff --git a/assets/chunks/framework.3ac7bdc3.js b/assets/chunks/framework.3ac7bdc3.js new file mode 100644 index 000000000..3bc8831a8 --- /dev/null +++ b/assets/chunks/framework.3ac7bdc3.js @@ -0,0 +1,2 @@ +function Cn(t,e){const n=Object.create(null),o=t.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}const Q={},ue=[],Xt=()=>{},qs=()=>!1,Ks=/^on[^a-z]/,Be=t=>Ks.test(t),ro=t=>t.startsWith("onUpdate:"),et=Object.assign,so=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},Gs=Object.prototype.hasOwnProperty,J=(t,e)=>Gs.call(t,e),j=Array.isArray,fe=t=>wn(t)==="[object Map]",Lr=t=>wn(t)==="[object Set]",q=t=>typeof t=="function",rt=t=>typeof t=="string",lo=t=>typeof t=="symbol",Z=t=>t!==null&&typeof t=="object",Or=t=>Z(t)&&q(t.then)&&q(t.catch),Pr=Object.prototype.toString,wn=t=>Pr.call(t),$r=t=>wn(t)==="[object Object]",io=t=>rt(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,ke=Cn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),xn=t=>{const e=Object.create(null);return n=>e[n]||(e[n]=t(n))},Xs=/-(\w)/g,Mt=xn(t=>t.replace(Xs,(e,n)=>n?n.toUpperCase():"")),Js=/\B([A-Z])/g,ce=xn(t=>t.replace(Js,"-$1").toLowerCase()),Sn=xn(t=>t.charAt(0).toUpperCase()+t.slice(1)),on=xn(t=>t?`on${Sn(t)}`:""),$e=(t,e)=>!Object.is(t,e),rn=(t,e)=>{for(let n=0;n{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})},Kn=t=>{const e=parseFloat(t);return isNaN(e)?t:e},Ys=t=>{const e=rt(t)?Number(t):NaN;return isNaN(e)?t:e};let Po;const Zs=Cn("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console");function co(t){if(j(t)){const e={};for(let n=0;n{if(n){const o=n.split(tl);o.length>1&&(e[o[0].trim()]=o[1].trim())}}),e}function ao(t){let e="";if(rt(t))e=t;else if(j(t))for(let n=0;nrt(t)?t:t==null?"":j(t)||Z(t)&&(t.toString===Pr||!q(t.toString))?JSON.stringify(t,Mr,2):String(t),Mr=(t,e)=>e&&e.__v_isRef?Mr(t,e.value):fe(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((n,[o,r])=>(n[`${o} =>`]=r,n),{})}:Lr(e)?{[`Set(${e.size})`]:[...e.values()]}:!Z(e)||j(e)||$r(e)?e:String(e);let yt;class rl{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=yt,!e&&yt&&(this.index=(yt.scopes||(yt.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const n=yt;try{return yt=this,e()}finally{yt=n}}}on(){yt=this}off(){yt=this.parent}stop(e){if(this._active){let n,o;for(n=0,o=this.effects.length;n{const e=new Set(t);return e.w=0,e.n=0,e},Ir=t=>(t.w&Gt)>0,Nr=t=>(t.n&Gt)>0,un=new WeakMap;let Ee=0,Gt=1,Rt;const le=Symbol(""),Gn=Symbol("");class fo{constructor(e,n=null,o){this.fn=e,this.scheduler=n,this.active=!0,this.deps=[],this.parent=void 0,sl(this,o)}run(){if(!this.active)return this.fn();let e=Rt,n=Jt;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=Rt,Rt=this,Jt=!0,Gt=1<<++Ee,Ee<=30?(({deps:o})=>{if(o.length)for(let r=0;r{const{deps:r}=o;if(r.length){let s=0;for(let l=0;l{(f==="length"||f>=c)&&i.push(a)})}else switch(n!==void 0&&i.push(l.get(n)),e){case"add":j(t)?io(n)&&i.push(l.get("length")):(i.push(l.get(le)),fe(t)&&i.push(l.get(Gn)));break;case"delete":j(t)||(i.push(l.get(le)),fe(t)&&i.push(l.get(Gn)));break;case"set":fe(t)&&i.push(l.get(le))}if(i.length===1)i[0]&&Xn(i[0]);else{const c=[];for(const a of i)a&&c.push(...a);Xn(uo(c))}}function Xn(t,e){const n=j(t)?t:[...t];for(const o of n)o.computed&&Io(o);for(const o of n)o.computed||Io(o)}function Io(t,e){(t!==Rt||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}const il=Cn("__proto__,__v_isRef,__isVue"),Vr=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(lo)),cl=En(),al=En(!1,!0),ul=En(!0),fl=En(!0,!0),No=pl();function pl(){const t={};return["includes","indexOf","lastIndexOf"].forEach(e=>{t[e]=function(...n){const o=X(this);for(let s=0,l=this.length;s{t[e]=function(...n){ge();const o=X(this)[e].apply(this,n);return ve(),o}}),t}function dl(t){const e=X(this);return gt(e,0,t),e.hasOwnProperty(t)}function En(t=!1,e=!1){return function(n,o,r){if(o==="__v_isReactive")return!t;if(o==="__v_isReadonly")return t;if(o==="__v_isShallow")return e;if(o==="__v_raw"&&r===(t?e?xl:qr:e?zr:Dr).get(n))return n;const s=j(n);if(!t){if(s&&J(No,o))return Reflect.get(No,o,r);if(o==="hasOwnProperty")return dl}const l=Reflect.get(n,o,r);return(lo(o)?Vr.has(o):il(o))?l:(t||gt(n,0,o),e?l:ct(l)?s&&io(o)?l:l.value:Z(l)?t?Kr(l):kn(l):l)}}function Br(t=!1){return function(e,n,o,r){let s=e[n];if(ye(s)&&ct(s)&&!ct(o))return!1;if(!t&&(fn(o)||ye(o)||(s=X(s),o=X(o)),!j(e)&&ct(s)&&!ct(o)))return s.value=o,!0;const l=j(e)&&io(n)?Number(n)!0,deleteProperty:(t,e)=>!0},hl=et({},Hr,{get:al,set:Br(!0)});et({},Wr,{get:fl});const po=t=>t,An=t=>Reflect.getPrototypeOf(t);function Ke(t,e,n=!1,o=!1){const r=X(t=t.__v_raw),s=X(e);n||(e!==s&>(r,0,e),gt(r,0,s));const{has:l}=An(r),i=o?po:n?go:Me;return l.call(r,e)?i(t.get(e)):l.call(r,s)?i(t.get(s)):void(t!==r&&t.get(e))}function Ge(t,e=!1){const n=this.__v_raw,o=X(n),r=X(t);return e||(t!==r&>(o,0,t),gt(o,0,r)),t===r?n.has(t):n.has(t)||n.has(r)}function Xe(t,e=!1){return t=t.__v_raw,!e&>(X(t),0,le),Reflect.get(t,"size",t)}function Uo(t){t=X(t);const e=X(this);return An(e).has.call(e,t)||(e.add(t),jt(e,"add",t,t)),this}function jo(t,e){e=X(e);const n=X(this),{has:o,get:r}=An(n);let s=o.call(n,t);s||(t=X(t),s=o.call(n,t));const l=r.call(n,t);return n.set(t,e),s?$e(e,l)&&jt(n,"set",t,e):jt(n,"add",t,e),this}function Vo(t){const e=X(this),{has:n,get:o}=An(e);let r=n.call(e,t);r||(t=X(t),r=n.call(e,t)),o&&o.call(e,t);const s=e.delete(t);return r&&jt(e,"delete",t,void 0),s}function Bo(){const t=X(this),e=t.size!==0,n=t.clear();return e&&jt(t,"clear",void 0,void 0),n}function Je(t,e){return function(n,o){const r=this,s=r.__v_raw,l=X(s),i=e?po:t?go:Me;return!t&>(l,0,le),s.forEach((c,a)=>n.call(o,i(c),i(a),r))}}function Ye(t,e,n){return function(...o){const r=this.__v_raw,s=X(r),l=fe(s),i=t==="entries"||t===Symbol.iterator&&l,c=t==="keys"&&l,a=r[t](...o),f=n?po:e?go:Me;return!e&>(s,0,c?Gn:le),{next(){const{value:d,done:h}=a.next();return h?{value:d,done:h}:{value:i?[f(d[0]),f(d[1])]:f(d),done:h}},[Symbol.iterator](){return this}}}}function Wt(t){return function(...e){return t!=="delete"&&this}}function ml(){const t={get(r){return Ke(this,r)},get size(){return Xe(this)},has:Ge,add:Uo,set:jo,delete:Vo,clear:Bo,forEach:Je(!1,!1)},e={get(r){return Ke(this,r,!1,!0)},get size(){return Xe(this)},has:Ge,add:Uo,set:jo,delete:Vo,clear:Bo,forEach:Je(!1,!0)},n={get(r){return Ke(this,r,!0)},get size(){return Xe(this,!0)},has(r){return Ge.call(this,r,!0)},add:Wt("add"),set:Wt("set"),delete:Wt("delete"),clear:Wt("clear"),forEach:Je(!0,!1)},o={get(r){return Ke(this,r,!0,!0)},get size(){return Xe(this,!0)},has(r){return Ge.call(this,r,!0)},add:Wt("add"),set:Wt("set"),delete:Wt("delete"),clear:Wt("clear"),forEach:Je(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{t[r]=Ye(r,!1,!1),n[r]=Ye(r,!0,!1),e[r]=Ye(r,!1,!0),o[r]=Ye(r,!0,!0)}),[t,n,e,o]}const[gl,vl,yl,_l]=ml();function ho(t,e){const n=e?t?_l:yl:t?vl:gl;return(o,r,s)=>r==="__v_isReactive"?!t:r==="__v_isReadonly"?t:r==="__v_raw"?o:Reflect.get(J(n,r)&&r in o?n:o,r,s)}const bl={get:ho(!1,!1)},Cl={get:ho(!1,!0)},wl={get:ho(!0,!1)},Dr=new WeakMap,zr=new WeakMap,qr=new WeakMap,xl=new WeakMap;function Sl(t){return t.__v_skip||!Object.isExtensible(t)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>wn(e).slice(8,-1))(t))}function kn(t){return ye(t)?t:mo(t,!1,Hr,bl,Dr)}function El(t){return mo(t,!1,hl,Cl,zr)}function Kr(t){return mo(t,!0,Wr,wl,qr)}function mo(t,e,n,o,r){if(!Z(t)||t.__v_raw&&(!e||!t.__v_isReactive))return t;const s=r.get(t);if(s)return s;const l=Sl(t);if(l===0)return t;const i=new Proxy(t,l===2?o:n);return r.set(t,i),i}function pe(t){return ye(t)?pe(t.__v_raw):!(!t||!t.__v_isReactive)}function ye(t){return!(!t||!t.__v_isReadonly)}function fn(t){return!(!t||!t.__v_isShallow)}function Gr(t){return pe(t)||ye(t)}function X(t){const e=t&&t.__v_raw;return e?X(e):t}function Te(t){return sn(t,"__v_skip",!0),t}const Me=t=>Z(t)?kn(t):t,go=t=>Z(t)?Kr(t):t;function vo(t){Jt&&Rt&&jr((t=X(t)).dep||(t.dep=uo()))}function yo(t,e){const n=(t=X(t)).dep;n&&Xn(n)}function ct(t){return!(!t||t.__v_isRef!==!0)}function de(t){return Xr(t,!1)}function Al(t){return Xr(t,!0)}function Xr(t,e){return ct(t)?t:new kl(t,e)}class kl{constructor(e,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?e:X(e),this._value=n?e:Me(e)}get value(){return vo(this),this._value}set value(e){const n=this.__v_isShallow||fn(e)||ye(e);e=n?e:X(e),$e(e,this._rawValue)&&(this._rawValue=e,this._value=n?e:Me(e),yo(this))}}function Tl(t){return ct(t)?t.value:t}const Rl={get:(t,e,n)=>Tl(Reflect.get(t,e,n)),set:(t,e,n,o)=>{const r=t[e];return ct(r)&&!ct(n)?(r.value=n,!0):Reflect.set(t,e,n,o)}};function Jr(t){return pe(t)?t:new Proxy(t,Rl)}class Fl{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:o}=e(()=>vo(this),()=>yo(this));this._get=n,this._set=o}get value(){return this._get()}set value(e){this._set(e)}}function oc(t){return new Fl(t)}class Ll{constructor(e,n,o){this._object=e,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const e=this._object[this._key];return e===void 0?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return e=X(this._object),n=this._key,(o=un.get(e))==null?void 0:o.get(n);var e,n,o}}class Ol{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function rc(t,e,n){return ct(t)?t:q(t)?new Ol(t):Z(t)&&arguments.length>1?Pl(t,e,n):de(t)}function Pl(t,e,n){const o=t[e];return ct(o)?o:new Ll(t,e,n)}class $l{constructor(e,n,o,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new fo(e,()=>{this._dirty||(this._dirty=!0,yo(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=o}get value(){const e=X(this);return vo(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function Yt(t,e,n,o){let r;try{r=o?t(...o):t()}catch(s){He(s,e,n)}return r}function Lt(t,e,n,o){if(q(t)){const s=Yt(t,e,n,o);return s&&Or(s)&&s.catch(l=>{He(l,e,n)}),s}const r=[];for(let s=0;s>>1;Ne(ut[r])Ne(n)-Ne(o)),ee=0;eet.id==null?1/0:t.id,Il=(t,e)=>{const n=Ne(t)-Ne(e);if(n===0){if(t.pre&&!e.pre)return-1;if(e.pre&&!t.pre)return 1}return n};function ts(t){Jn=!1,Ie=!0,ut.sort(Il);try{for($t=0;$trt(w)?w.trim():w)),d&&(r=n.map(Kn))}let i,c=o[i=on(e)]||o[i=on(Mt(e))];!c&&s&&(c=o[i=on(ce(e))]),c&&Lt(c,t,6,r);const a=o[i+"Once"];if(a){if(t.emitted){if(t.emitted[i])return}else t.emitted={};t.emitted[i]=!0,Lt(a,t,6,r)}}function es(t,e,n=!1){const o=e.emitsCache,r=o.get(t);if(r!==void 0)return r;const s=t.emits;let l={},i=!1;if(!q(t)){const c=a=>{const f=es(a,e,!0);f&&(i=!0,et(l,f))};!n&&e.mixins.length&&e.mixins.forEach(c),t.extends&&c(t.extends),t.mixins&&t.mixins.forEach(c)}return s||i?(j(s)?s.forEach(c=>l[c]=null):et(l,s),Z(t)&&o.set(t,l),l):(Z(t)&&o.set(t,null),null)}function dn(t,e){return!(!t||!Be(e))&&(e=e.slice(2).replace(/Once$/,""),J(t,e[0].toLowerCase()+e.slice(1))||J(t,ce(e))||J(t,e))}let at=null,Rn=null;function hn(t){const e=at;return at=t,Rn=t&&t.type.__scopeId||null,e}function sc(t){Rn=t}function lc(){Rn=null}function Ul(t,e=at,n){if(!e||t._n)return t;const o=(...r)=>{o._d&&sr(-1);const s=hn(e);let l;try{l=t(...r)}finally{hn(s),o._d&&sr(1)}return l};return o._n=!0,o._c=!0,o._d=!0,o}function Un(t){const{type:e,vnode:n,proxy:o,withProxy:r,props:s,propsOptions:[l],slots:i,attrs:c,emit:a,render:f,renderCache:d,data:h,setupState:w,ctx:A,inheritAttrs:P}=t;let g,_;const I=hn(t);try{if(4&n.shapeFlag){const V=r||o;g=Tt(f.call(V,V,d,s,w,h,A)),_=c}else{const V=e;g=Tt(V(s,V.length>1?{attrs:c,slots:i,emit:a}:null)),_=e.props?c:jl(c)}}catch(V){Oe.length=0,He(V,t,1),g=ot(_t)}let K=g;if(_&&P!==!1){const V=Object.keys(_),{shapeFlag:W}=K;V.length&&7&W&&(l&&V.some(ro)&&(_=Vl(_,l)),K=Zt(K,_))}return n.dirs&&(K=Zt(K),K.dirs=K.dirs?K.dirs.concat(n.dirs):n.dirs),n.transition&&(K.transition=n.transition),g=K,hn(I),g}const jl=t=>{let e;for(const n in t)(n==="class"||n==="style"||Be(n))&&((e||(e={}))[n]=t[n]);return e},Vl=(t,e)=>{const n={};for(const o in t)ro(o)&&o.slice(9)in e||(n[o]=t[o]);return n};function Wo(t,e,n){const o=Object.keys(e);if(o.length!==Object.keys(t).length)return!0;for(let r=0;rt.__isSuspense;function ns(t,e){e&&e.pendingBranch?j(t)?e.effects.push(...t):e.effects.push(t):Ml(t)}function Wl(t,e){return Fn(t,null,e)}function ic(t,e){return Fn(t,null,{flush:"post"})}const Ze={};function ln(t,e,n){return Fn(t,e,n)}function Fn(t,e,{immediate:n,deep:o,flush:r}=Q){var s;const l=ll()===((s=it)==null?void 0:s.scope)?it:null;let i,c,a=!1,f=!1;if(ct(t)?(i=()=>t.value,a=fn(t)):pe(t)?(i=()=>t,o=!0):j(t)?(f=!0,a=t.some(g=>pe(g)||fn(g)),i=()=>t.map(g=>ct(g)?g.value:pe(g)?re(g):q(g)?Yt(g,l,2):void 0)):i=q(t)?e?()=>Yt(t,l,2):()=>{if(!l||!l.isUnmounted)return c&&c(),Lt(t,l,3,[d])}:Xt,e&&o){const g=i;i=()=>re(g())}let d=g=>{c=P.onStop=()=>{Yt(g,l,4)}},h=f?new Array(t.length).fill(Ze):Ze;const w=()=>{if(P.active)if(e){const g=P.run();(o||a||(f?g.some((_,I)=>$e(_,h[I])):$e(g,h)))&&(c&&c(),Lt(e,l,3,[g,h===Ze?void 0:f&&h[0]===Ze?[]:h,d]),h=g)}else P.run()};let A;w.allowRecurse=!!e,r==="sync"?A=w:r==="post"?A=()=>mt(w,l&&l.suspense):(w.pre=!0,l&&(w.id=l.uid),A=()=>Tn(w));const P=new fo(i,A);return e?n?w():h=P.run():r==="post"?mt(P.run.bind(P),l&&l.suspense):P.run(),()=>{P.stop(),l&&l.scope&&so(l.scope.effects,P)}}function Dl(t,e,n){const o=this.proxy,r=rt(t)?t.includes(".")?os(o,t):()=>o[t]:t.bind(o,o);let s;q(e)?s=e:(s=e.handler,n=e);const l=it;be(this);const i=Fn(r,s.bind(o),n);return l?be(l):ie(),i}function os(t,e){const n=e.split(".");return()=>{let o=t;for(let r=0;r{re(n,e)});else if($r(t))for(const n in t)re(t[n],e);return t}function cc(t,e){const n=at;if(n===null)return t;const o=$n(n)||n.proxy,r=t.dirs||(t.dirs=[]);for(let s=0;s{t.isMounted=!0}),as(()=>{t.isUnmounting=!0}),t}const St=[Function,Array],ss={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:St,onEnter:St,onAfterEnter:St,onEnterCancelled:St,onBeforeLeave:St,onLeave:St,onAfterLeave:St,onLeaveCancelled:St,onBeforeAppear:St,onAppear:St,onAfterAppear:St,onAppearCancelled:St},zl={name:"BaseTransition",props:ss,setup(t,{slots:e}){const n=ko(),o=rs();let r;return()=>{const s=e.default&&bo(e.default(),!0);if(!s||!s.length)return;let l=s[0];if(s.length>1){for(const P of s)if(P.type!==_t){l=P;break}}const i=X(t),{mode:c}=i;if(o.isLeaving)return jn(l);const a=Do(l);if(!a)return jn(l);const f=Ue(a,i,o,n);je(a,f);const d=n.subTree,h=d&&Do(d);let w=!1;const{getTransitionKey:A}=a.type;if(A){const P=A();r===void 0?r=P:P!==r&&(r=P,w=!0)}if(h&&h.type!==_t&&(!ne(a,h)||w)){const P=Ue(h,i,o,n);if(je(h,P),c==="out-in")return o.isLeaving=!0,P.afterLeave=()=>{o.isLeaving=!1,n.update.active!==!1&&n.update()},jn(l);c==="in-out"&&a.type!==_t&&(P.delayLeave=(g,_,I)=>{ls(o,h)[String(h.key)]=h,g._leaveCb=()=>{_(),g._leaveCb=void 0,delete f.delayedLeave},f.delayedLeave=I})}return l}}};function ls(t,e){const{leavingVNodes:n}=t;let o=n.get(e.type);return o||(o=Object.create(null),n.set(e.type,o)),o}function Ue(t,e,n,o){const{appear:r,mode:s,persisted:l=!1,onBeforeEnter:i,onEnter:c,onAfterEnter:a,onEnterCancelled:f,onBeforeLeave:d,onLeave:h,onAfterLeave:w,onLeaveCancelled:A,onBeforeAppear:P,onAppear:g,onAfterAppear:_,onAppearCancelled:I}=e,K=String(t.key),V=ls(n,t),W=(M,D)=>{M&&Lt(M,o,9,D)},G=(M,D)=>{const z=D[1];W(M,D),j(M)?M.every(nt=>nt.length<=1)&&z():M.length<=1&&z()},U={mode:s,persisted:l,beforeEnter(M){let D=i;if(!n.isMounted){if(!r)return;D=P||i}M._leaveCb&&M._leaveCb(!0);const z=V[K];z&&ne(t,z)&&z.el._leaveCb&&z.el._leaveCb(),W(D,[M])},enter(M){let D=c,z=a,nt=f;if(!n.isMounted){if(!r)return;D=g||c,z=_||a,nt=I||f}let R=!1;const k=M._enterCb=H=>{R||(R=!0,W(H?nt:z,[M]),U.delayedLeave&&U.delayedLeave(),M._enterCb=void 0)};D?G(D,[M,k]):k()},leave(M,D){const z=String(t.key);if(M._enterCb&&M._enterCb(!0),n.isUnmounting)return D();W(d,[M]);let nt=!1;const R=M._leaveCb=k=>{nt||(nt=!0,D(),W(k?A:w,[M]),M._leaveCb=void 0,V[z]===t&&delete V[z])};V[z]=t,h?G(h,[M,R]):R()},clone:M=>Ue(M,e,n,o)};return U}function jn(t){if(We(t))return(t=Zt(t)).children=null,t}function Do(t){return We(t)?t.children?t.children[0]:void 0:t}function je(t,e){6&t.shapeFlag&&t.component?je(t.component.subTree,e):128&t.shapeFlag?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function bo(t,e=!1,n){let o=[],r=0;for(let s=0;s1)for(let s=0;set({name:t.name},e,{setup:t}))():t}const me=t=>!!t.type.__asyncLoader;function ac(t){q(t)&&(t={loader:t});const{loader:e,loadingComponent:n,errorComponent:o,delay:r=200,timeout:s,suspensible:l=!0,onError:i}=t;let c,a=null,f=0;const d=()=>{let h;return a||(h=a=e().catch(w=>{if(w=w instanceof Error?w:new Error(String(w)),i)return new Promise((A,P)=>{i(w,()=>A((f++,a=null,d())),()=>P(w),f+1)});throw w}).then(w=>h!==a&&a?a:(w&&(w.__esModule||w[Symbol.toStringTag]==="Module")&&(w=w.default),c=w,w)))};return Co({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return c},setup(){const h=it;if(c)return()=>Vn(c,h);const w=_=>{a=null,He(_,h,13,!o)};if(l&&h.suspense)return d().then(_=>()=>Vn(_,h)).catch(_=>(w(_),()=>o?ot(o,{error:_}):null));const A=de(!1),P=de(),g=de(!!r);return r&&setTimeout(()=>{g.value=!1},r),s!=null&&setTimeout(()=>{if(!A.value&&!P.value){const _=new Error(`Async component timed out after ${s}ms.`);w(_),P.value=_}},s),d().then(()=>{A.value=!0,h.parent&&We(h.parent.vnode)&&Tn(h.parent.update)}).catch(_=>{w(_),P.value=_}),()=>A.value&&c?Vn(c,h):P.value&&o?ot(o,{error:P.value}):n&&!g.value?ot(n):void 0}})}function Vn(t,e){const{ref:n,props:o,children:r,ce:s}=e.vnode,l=ot(t,o,r);return l.ref=n,l.ce=s,delete e.vnode.ce,l}const We=t=>t.type.__isKeepAlive;function ql(t,e){is(t,"a",e)}function Kl(t,e){is(t,"da",e)}function is(t,e,n=it){const o=t.__wdc||(t.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return t()});if(Ln(e,o,n),n){let r=n.parent;for(;r&&r.parent;)We(r.parent.vnode)&&Gl(o,e,n,r),r=r.parent}}function Gl(t,e,n,o){const r=Ln(e,t,o,!0);Pn(()=>{so(o[e],r)},n)}function Ln(t,e,n=it,o=!1){if(n){const r=n[t]||(n[t]=[]),s=e.__weh||(e.__weh=(...l)=>{if(n.isUnmounted)return;ge(),be(n);const i=Lt(e,n,t,l);return ie(),ve(),i});return o?r.unshift(s):r.push(s),s}}const Vt=t=>(e,n=it)=>(!bn||t==="sp")&&Ln(t,(...o)=>e(...o),n),Xl=Vt("bm"),On=Vt("m"),Jl=Vt("bu"),cs=Vt("u"),as=Vt("bum"),Pn=Vt("um"),Yl=Vt("sp"),Zl=Vt("rtg"),Ql=Vt("rtc");function ti(t,e=it){Ln("ec",t,e)}const wo="components";function uc(t,e){return fs(wo,t,!0,e)||t}const us=Symbol.for("v-ndc");function fc(t){return rt(t)?fs(wo,t,!1)||t:t||us}function fs(t,e,n=!0,o=!1){const r=at||it;if(r){const s=r.type;if(t===wo){const i=gi(s,!1);if(i&&(i===e||i===Mt(e)||i===Sn(Mt(e))))return s}const l=zo(r[t]||s[t],e)||zo(r.appContext[t],e);return!l&&o?s:l}}function zo(t,e){return t&&(t[e]||t[Mt(e)]||t[Sn(Mt(e))])}function pc(t,e,n,o){let r;const s=n&&n[o];if(j(t)||rt(t)){r=new Array(t.length);for(let l=0,i=t.length;le(l,i,void 0,s&&s[i]));else{const l=Object.keys(t);r=new Array(l.length);for(let i=0,c=l.length;i!yn(e)||e.type!==_t&&!(e.type===dt&&!ps(e.children)))?t:null}function hc(t,e){const n={};for(const o in t)n[e&&/[A-Z]/.test(o)?`on:${o}`:on(o)]=t[o];return n}const Yn=t=>t?Ss(t)?$n(t)||t.proxy:Yn(t.parent):null,Re=et(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>Yn(t.parent),$root:t=>Yn(t.root),$emit:t=>t.emit,$options:t=>xo(t),$forceUpdate:t=>t.f||(t.f=()=>Tn(t.update)),$nextTick:t=>t.n||(t.n=Zr.bind(t.proxy)),$watch:t=>Dl.bind(t)}),Bn=(t,e)=>t!==Q&&!t.__isScriptSetup&&J(t,e),Zn={get({_:t},e){const{ctx:n,setupState:o,data:r,props:s,accessCache:l,type:i,appContext:c}=t;let a;if(e[0]!=="$"){const w=l[e];if(w!==void 0)switch(w){case 1:return o[e];case 2:return r[e];case 4:return n[e];case 3:return s[e]}else{if(Bn(o,e))return l[e]=1,o[e];if(r!==Q&&J(r,e))return l[e]=2,r[e];if((a=t.propsOptions[0])&&J(a,e))return l[e]=3,s[e];if(n!==Q&&J(n,e))return l[e]=4,n[e];Qn&&(l[e]=0)}}const f=Re[e];let d,h;return f?(e==="$attrs"&>(t,0,e),f(t)):(d=i.__cssModules)&&(d=d[e])?d:n!==Q&&J(n,e)?(l[e]=4,n[e]):(h=c.config.globalProperties,J(h,e)?h[e]:void 0)},set({_:t},e,n){const{data:o,setupState:r,ctx:s}=t;return Bn(r,e)?(r[e]=n,!0):o!==Q&&J(o,e)?(o[e]=n,!0):!J(t.props,e)&&(e[0]!=="$"||!(e.slice(1)in t))&&(s[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:o,appContext:r,propsOptions:s}},l){let i;return!!n[l]||t!==Q&&J(t,l)||Bn(e,l)||(i=s[0])&&J(i,l)||J(o,l)||J(Re,l)||J(r.config.globalProperties,l)},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:J(n,"value")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}};et({},Zn,{get(t,e){if(e!==Symbol.unscopables)return Zn.get(t,e,t)},has:(t,e)=>e[0]!=="_"&&!Zs(e)});function mc(){return ei().slots}function ei(){const t=ko();return t.setupContext||(t.setupContext=As(t))}function qo(t){return j(t)?t.reduce((e,n)=>(e[n]=null,e),{}):t}let Qn=!0;function ni(t){const e=xo(t),n=t.proxy,o=t.ctx;Qn=!1,e.beforeCreate&&Ko(e.beforeCreate,t,"bc");const{data:r,computed:s,methods:l,watch:i,provide:c,inject:a,created:f,beforeMount:d,mounted:h,beforeUpdate:w,updated:A,activated:P,deactivated:g,beforeUnmount:_,unmounted:I,render:K,renderTracked:V,renderTriggered:W,errorCaptured:G,serverPrefetch:U,expose:M,inheritAttrs:D,components:z,directives:nt}=e;if(a&&function(k,H,tt=Xt){j(k)&&(k=to(k));for(const bt in k){const Ct=k[bt];let wt;wt=Z(Ct)?"default"in Ct?Fe(Ct.from||bt,Ct.default,!0):Fe(Ct.from||bt):Fe(Ct),ct(wt)?Object.defineProperty(H,bt,{enumerable:!0,configurable:!0,get:()=>wt.value,set:Ot=>wt.value=Ot}):H[bt]=wt}}(a,o,null),l)for(const k in l){const H=l[k];q(H)&&(o[k]=H.bind(n))}if(r){const k=r.call(n,n);Z(k)&&(t.data=kn(k))}if(Qn=!0,s)for(const k in s){const H=s[k],tt=q(H)?H.bind(n,n):q(H.get)?H.get.bind(n,n):Xt,bt=!q(H)&&q(H.set)?H.set.bind(n):Xt,Ct=kt({get:tt,set:bt});Object.defineProperty(o,k,{enumerable:!0,configurable:!0,get:()=>Ct.value,set:wt=>Ct.value=wt})}if(i)for(const k in i)ds(i[k],o,n,k);if(c){const k=q(c)?c.call(n):c;Reflect.ownKeys(k).forEach(H=>{li(H,k[H])})}function R(k,H){j(H)?H.forEach(tt=>k(tt.bind(n))):H&&k(H.bind(n))}if(f&&Ko(f,t,"c"),R(Xl,d),R(On,h),R(Jl,w),R(cs,A),R(ql,P),R(Kl,g),R(ti,G),R(Ql,V),R(Zl,W),R(as,_),R(Pn,I),R(Yl,U),j(M))if(M.length){const k=t.exposed||(t.exposed={});M.forEach(H=>{Object.defineProperty(k,H,{get:()=>n[H],set:tt=>n[H]=tt})})}else t.exposed||(t.exposed={});K&&t.render===Xt&&(t.render=K),D!=null&&(t.inheritAttrs=D),z&&(t.components=z),nt&&(t.directives=nt)}function Ko(t,e,n){Lt(j(t)?t.map(o=>o.bind(e.proxy)):t.bind(e.proxy),e,n)}function ds(t,e,n,o){const r=o.includes(".")?os(n,o):()=>n[o];if(rt(t)){const s=e[t];q(s)&&ln(r,s)}else if(q(t))ln(r,t.bind(n));else if(Z(t))if(j(t))t.forEach(s=>ds(s,e,n,o));else{const s=q(t.handler)?t.handler.bind(n):e[t.handler];q(s)&&ln(r,s,t)}}function xo(t){const e=t.type,{mixins:n,extends:o}=e,{mixins:r,optionsCache:s,config:{optionMergeStrategies:l}}=t.appContext,i=s.get(e);let c;return i?c=i:r.length||n||o?(c={},r.length&&r.forEach(a=>mn(c,a,l,!0)),mn(c,e,l)):c=e,Z(e)&&s.set(e,c),c}function mn(t,e,n,o=!1){const{mixins:r,extends:s}=e;s&&mn(t,s,n,!0),r&&r.forEach(l=>mn(t,l,n,!0));for(const l in e)if(!(o&&l==="expose")){const i=oi[l]||n&&n[l];t[l]=i?i(t[l],e[l]):e[l]}return t}const oi={data:Go,props:Xo,emits:Xo,methods:xe,computed:xe,beforeCreate:pt,created:pt,beforeMount:pt,mounted:pt,beforeUpdate:pt,updated:pt,beforeDestroy:pt,beforeUnmount:pt,destroyed:pt,unmounted:pt,activated:pt,deactivated:pt,errorCaptured:pt,serverPrefetch:pt,components:xe,directives:xe,watch:function(t,e){if(!t)return e;if(!e)return t;const n=et(Object.create(null),t);for(const o in e)n[o]=pt(t[o],e[o]);return n},provide:Go,inject:function(t,e){return xe(to(t),to(e))}};function Go(t,e){return e?t?function(){return et(q(t)?t.call(this,this):t,q(e)?e.call(this,this):e)}:e:t}function to(t){if(j(t)){const e={};for(let n=0;n(s.has(c)||(c&&q(c.install)?(s.add(c),c.install(i,...a)):q(c)&&(s.add(c),c(i,...a))),i),mixin:c=>(r.mixins.includes(c)||r.mixins.push(c),i),component:(c,a)=>a?(r.components[c]=a,i):r.components[c],directive:(c,a)=>a?(r.directives[c]=a,i):r.directives[c],mount(c,a,f){if(!l){const d=ot(n,o);return d.appContext=r,a&&e?e(d,c):t(d,c,f),l=!0,i._container=c,c.__vue_app__=i,$n(d.component)||d.component.proxy}},unmount(){l&&(t(null,i._container),delete i._container.__vue_app__)},provide:(c,a)=>(r.provides[c]=a,i),runWithContext(c){gn=i;try{return c()}finally{gn=null}}};return i}}let gn=null;function li(t,e){if(it){let n=it.provides;const o=it.parent&&it.parent.provides;o===n&&(n=it.provides=Object.create(o)),n[t]=e}}function Fe(t,e,n=!1){const o=it||at;if(o||gn){const r=o?o.parent==null?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:gn._context.provides;if(r&&t in r)return r[t];if(arguments.length>1)return n&&q(e)?e.call(o&&o.proxy):e}}function Jo(t,e,n,o){const[r,s]=t.propsOptions;let l,i=!1;if(e)for(let c in e){if(ke(c))continue;const a=e[c];let f;r&&J(r,f=Mt(c))?s&&s.includes(f)?(l||(l={}))[f]=a:n[f]=a:dn(t.emitsOptions,c)||c in o&&a===o[c]||(o[c]=a,i=!0)}if(s){const c=X(n),a=l||Q;for(let f=0;f{c=!0;const[h,w]=ms(d,e,!0);et(l,h),w&&i.push(...w)};!n&&e.mixins.length&&e.mixins.forEach(f),t.extends&&f(t.extends),t.mixins&&t.mixins.forEach(f)}if(!s&&!c)return Z(t)&&o.set(t,ue),ue;if(j(s))for(let f=0;f-1,w[1]=P<0||A-1||J(w,"default"))&&i.push(d)}}}const a=[l,i];return Z(t)&&o.set(t,a),a}function Yo(t){return t[0]!=="$"}function Zo(t){const e=t&&t.toString().match(/^\s*(function|class) (\w+)/);return e?e[2]:t===null?"null":""}function Qo(t,e){return Zo(t)===Zo(e)}function tr(t,e){return j(e)?e.findIndex(n=>Qo(n,t)):q(e)&&Qo(e,t)?0:-1}const gs=t=>t[0]==="_"||t==="$stable",So=t=>j(t)?t.map(Tt):[Tt(t)],ii=(t,e,n)=>{if(e._n)return e;const o=Ul((...r)=>So(e(...r)),n);return o._c=!1,o},er=(t,e,n)=>{const o=t._ctx;for(const r in t){if(gs(r))continue;const s=t[r];if(q(s))e[r]=ii(0,s,o);else if(s!=null){const l=So(s);e[r]=()=>l}}},nr=(t,e)=>{const n=So(e);t.slots.default=()=>n};function vn(t,e,n,o,r=!1){if(j(t))return void t.forEach((h,w)=>vn(h,e&&(j(e)?e[w]:e),n,o,r));if(me(o)&&!r)return;const s=4&o.shapeFlag?$n(o.component)||o.component.proxy:o.el,l=r?null:s,{i,r:c}=t,a=e&&e.r,f=i.refs===Q?i.refs={}:i.refs,d=i.setupState;if(a!=null&&a!==c&&(rt(a)?(f[a]=null,J(d,a)&&(d[a]=null)):ct(a)&&(a.value=null)),q(c))Yt(c,i,12,[l,f]);else{const h=rt(c),w=ct(c);if(h||w){const A=()=>{if(t.f){const P=h?J(d,c)?d[c]:f[c]:c.value;r?j(P)&&so(P,s):j(P)?P.includes(s)||P.push(s):h?(f[c]=[s],J(d,c)&&(d[c]=f[c])):(c.value=[s],t.k&&(f[t.k]=c.value))}else h?(f[c]=l,J(d,c)&&(d[c]=l)):w&&(c.value=l,t.k&&(f[t.k]=l))};l?(A.id=-1,mt(A,n)):A()}}}let Dt=!1;const Qe=t=>/svg/.test(t.namespaceURI)&&t.tagName!=="foreignObject",tn=t=>t.nodeType===8;function ci(t){const{mt:e,p:n,o:{patchProp:o,createText:r,nextSibling:s,parentNode:l,remove:i,insert:c,createComment:a}}=t,f=(g,_,I,K,V,W=!1)=>{const G=tn(g)&&g.data==="[",U=()=>A(g,_,I,K,V,G),{type:M,ref:D,shapeFlag:z,patchFlag:nt}=_;let R=g.nodeType;_.el=g,nt===-2&&(W=!1,_.dynamicChildren=null);let k=null;switch(M){case _e:R!==3?_.children===""?(c(_.el=r(""),l(g),g),k=g):k=U():(g.data!==_.children&&(Dt=!0,g.data=_.children),k=s(g));break;case _t:k=R!==8||G?U():s(g);break;case Le:if(G&&(R=(g=s(g)).nodeType),R===1||R===3){k=g;const H=!_.children.length;for(let tt=0;tt<_.staticCount;tt++)H&&(_.children+=k.nodeType===1?k.outerHTML:k.data),tt===_.staticCount-1&&(_.anchor=k),k=s(k);return G?s(k):k}U();break;case dt:k=G?w(g,_,I,K,V,W):U();break;default:if(1&z)k=R!==1||_.type.toLowerCase()!==g.tagName.toLowerCase()?U():d(g,_,I,K,V,W);else if(6&z){_.slotScopeIds=V;const H=l(g);if(e(_,H,null,I,K,Qe(H),W),k=G?P(g):s(g),k&&tn(k)&&k.data==="teleport end"&&(k=s(k)),me(_)){let tt;G?(tt=ot(dt),tt.anchor=k?k.previousSibling:H.lastChild):tt=g.nodeType===3?xs(""):ot("div"),tt.el=g,_.component.subTree=tt}}else 64&z?k=R!==8?U():_.type.hydrate(g,_,I,K,V,W,t,h):128&z&&(k=_.type.hydrate(g,_,I,K,Qe(l(g)),V,W,t,f))}return D!=null&&vn(D,null,K,_),k},d=(g,_,I,K,V,W)=>{W=W||!!_.dynamicChildren;const{type:G,props:U,patchFlag:M,shapeFlag:D,dirs:z}=_,nt=G==="input"&&z||G==="option";if(nt||M!==-1){if(z&&Pt(_,null,I,"created"),U)if(nt||!W||48&M)for(const k in U)(nt&&k.endsWith("value")||Be(k)&&!ke(k))&&o(g,k,null,U[k],!1,void 0,I);else U.onClick&&o(g,"onClick",null,U.onClick,!1,void 0,I);let R;if((R=U&&U.onVnodeBeforeMount)&&Et(R,I,_),z&&Pt(_,null,I,"beforeMount"),((R=U&&U.onVnodeMounted)||z)&&ns(()=>{R&&Et(R,I,_),z&&Pt(_,null,I,"mounted")},K),16&D&&(!U||!U.innerHTML&&!U.textContent)){let k=h(g.firstChild,_,g,I,K,V,W);for(;k;){Dt=!0;const H=k;k=k.nextSibling,i(H)}}else 8&D&&g.textContent!==_.children&&(Dt=!0,g.textContent=_.children)}return g.nextSibling},h=(g,_,I,K,V,W,G)=>{G=G||!!_.dynamicChildren;const U=_.children,M=U.length;for(let D=0;D{const{slotScopeIds:G}=_;G&&(V=V?V.concat(G):G);const U=l(g),M=h(s(g),_,U,I,K,V,W);return M&&tn(M)&&M.data==="]"?s(_.anchor=M):(Dt=!0,c(_.anchor=a("]"),U,M),M)},A=(g,_,I,K,V,W)=>{if(Dt=!0,_.el=null,W){const M=P(g);for(;;){const D=s(g);if(!D||D===M)break;i(D)}}const G=s(g),U=l(g);return i(g),n(null,_,U,G,I,K,Qe(U),V),G},P=g=>{let _=0;for(;g;)if((g=s(g))&&tn(g)&&(g.data==="["&&_++,g.data==="]")){if(_===0)return s(g);_--}return g};return[(g,_)=>{if(!_.hasChildNodes())return n(null,g,_),pn(),void(_._vnode=g);Dt=!1,f(_.firstChild,g,null,null,null),pn(),_._vnode=g,Dt&&console.error("Hydration completed but contains mismatches.")},f]}const mt=ns;function ai(t){return vs(t)}function ui(t){return vs(t,ci)}function vs(t,e){(Po||(Po=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{})).__VUE__=!0;const{insert:n,remove:o,patchProp:r,createElement:s,createText:l,createComment:i,setText:c,setElementText:a,parentNode:f,nextSibling:d,setScopeId:h=Xt,insertStaticContent:w}=t,A=(u,p,v,S=null,y=null,b=null,L=!1,x=null,C=!!p.dynamicChildren)=>{if(u===p)return;u&&!ne(u,p)&&(S=De(u),Ot(u,y,b,!0),u=null),p.patchFlag===-2&&(C=!1,p.dynamicChildren=null);const{type:m,ref:F,shapeFlag:T}=p;switch(m){case _e:P(u,p,v,S);break;case _t:g(u,p,v,S);break;case Le:u==null&&_(p,v,S,L);break;case dt:D(u,p,v,S,y,b,L,x,C);break;default:1&T?I(u,p,v,S,y,b,L,x,C):6&T?z(u,p,v,S,y,b,L,x,C):(64&T||128&T)&&m.process(u,p,v,S,y,b,L,x,C,Ce)}F!=null&&y&&vn(F,u&&u.ref,b,p||u,!p)},P=(u,p,v,S)=>{if(u==null)n(p.el=l(p.children),v,S);else{const y=p.el=u.el;p.children!==u.children&&c(y,p.children)}},g=(u,p,v,S)=>{u==null?n(p.el=i(p.children||""),v,S):p.el=u.el},_=(u,p,v,S)=>{[u.el,u.anchor]=w(u.children,p,v,S,u.el,u.anchor)},I=(u,p,v,S,y,b,L,x,C)=>{L=L||p.type==="svg",u==null?K(p,v,S,y,b,L,x,C):G(u,p,y,b,L,x,C)},K=(u,p,v,S,y,b,L,x)=>{let C,m;const{type:F,props:T,shapeFlag:O,transition:E,dirs:$}=u;if(C=u.el=s(u.type,b,T&&T.is,T),8&O?a(C,u.children):16&O&&W(u.children,C,null,S,y,b&&F!=="foreignObject",L,x),$&&Pt(u,null,S,"created"),V(C,u,u.scopeId,L,S),T){for(const N in T)N==="value"||ke(N)||r(C,N,null,T[N],b,u.children,S,y,It);"value"in T&&r(C,"value",null,T.value),(m=T.onVnodeBeforeMount)&&Et(m,S,u)}$&&Pt(u,null,S,"beforeMount");const B=(!y||y&&!y.pendingBranch)&&E&&!E.persisted;B&&E.beforeEnter(C),n(C,p,v),((m=T&&T.onVnodeMounted)||B||$)&&mt(()=>{m&&Et(m,S,u),B&&E.enter(C),$&&Pt(u,null,S,"mounted")},y)},V=(u,p,v,S,y)=>{if(v&&h(u,v),S)for(let b=0;b{for(let m=C;m{const x=p.el=u.el;let{patchFlag:C,dynamicChildren:m,dirs:F}=p;C|=16&u.patchFlag;const T=u.props||Q,O=p.props||Q;let E;v&&Qt(v,!1),(E=O.onVnodeBeforeUpdate)&&Et(E,v,p,u),F&&Pt(p,u,v,"beforeUpdate"),v&&Qt(v,!0);const $=y&&p.type!=="foreignObject";if(m?U(u.dynamicChildren,m,x,v,S,$,b):L||tt(u,p,x,null,v,S,$,b,!1),C>0){if(16&C)M(x,p,T,O,v,S,y);else if(2&C&&T.class!==O.class&&r(x,"class",null,O.class,y),4&C&&r(x,"style",T.style,O.style,y),8&C){const B=p.dynamicProps;for(let N=0;N{E&&Et(E,v,p,u),F&&Pt(p,u,v,"updated")},S)},U=(u,p,v,S,y,b,L)=>{for(let x=0;x{if(v!==S){if(v!==Q)for(const x in v)ke(x)||x in S||r(u,x,v[x],null,L,p.children,y,b,It);for(const x in S){if(ke(x))continue;const C=S[x],m=v[x];C!==m&&x!=="value"&&r(u,x,m,C,L,p.children,y,b,It)}"value"in S&&r(u,"value",v.value,S.value)}},D=(u,p,v,S,y,b,L,x,C)=>{const m=p.el=u?u.el:l(""),F=p.anchor=u?u.anchor:l("");let{patchFlag:T,dynamicChildren:O,slotScopeIds:E}=p;E&&(x=x?x.concat(E):E),u==null?(n(m,v,S),n(F,v,S),W(p.children,v,F,y,b,L,x,C)):T>0&&64&T&&O&&u.dynamicChildren?(U(u.dynamicChildren,O,v,y,b,L,x),(p.key!=null||y&&p===y.subTree)&&Eo(u,p,!0)):tt(u,p,v,F,y,b,L,x,C)},z=(u,p,v,S,y,b,L,x,C)=>{p.slotScopeIds=x,u==null?512&p.shapeFlag?y.ctx.activate(p,v,S,L,C):nt(p,v,S,y,b,L,C):R(u,p,C)},nt=(u,p,v,S,y,b,L)=>{const x=u.component=function(C,m,F){const T=C.type,O=(m?m.appContext:C.appContext)||hi,E={uid:mi++,vnode:C,type:T,parent:m,appContext:O,root:null,next:null,subTree:null,effect:null,update:null,scope:new rl(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:m?m.provides:Object.create(O.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ms(T,O),emitsOptions:es(T,O),emit:null,emitted:null,propsDefaults:Q,inheritAttrs:T.inheritAttrs,ctx:Q,data:Q,props:Q,attrs:Q,slots:Q,refs:Q,setupState:Q,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:F,suspenseId:F?F.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return E.ctx={_:E},E.root=m?m.root:E,E.emit=Nl.bind(null,E),C.ce&&C.ce(E),E}(u,S,y);if(We(u)&&(x.ctx.renderer=Ce),function(C,m=!1){bn=m;const{props:F,children:T}=C.vnode,O=Ss(C);(function(E,$,B,N=!1){const Y={},st={};sn(st,_n,1),E.propsDefaults=Object.create(null),Jo(E,$,Y,st);for(const vt in E.propsOptions[0])vt in Y||(Y[vt]=void 0);E.props=B?N?Y:El(Y):E.type.props?Y:st,E.attrs=st})(C,F,O,m),((E,$)=>{if(32&E.vnode.shapeFlag){const B=$._;B?(E.slots=X($),sn($,"_",B)):er($,E.slots={})}else E.slots={},$&&nr(E,$);sn(E.slots,_n,1)})(C,T),O&&function(E,$){const B=E.type;E.accessCache=Object.create(null),E.proxy=Te(new Proxy(E.ctx,Zn));const{setup:N}=B;if(N){const Y=E.setupContext=N.length>1?As(E):null;be(E),ge();const st=Yt(N,E,0,[E.props,Y]);if(ve(),ie(),Or(st)){if(st.then(ie,ie),$)return st.then(vt=>{ir(E,vt,$)}).catch(vt=>{He(vt,E,0)});E.asyncDep=st}else ir(E,st,$)}else Es(E,$)}(C,m),bn=!1}(x),x.asyncDep){if(y&&y.registerDep(x,k),!u.el){const C=x.subTree=ot(_t);g(null,C,p,v)}}else k(x,u,p,v,y,b,L)},R=(u,p,v)=>{const S=p.component=u.component;if(function(y,b,L){const{props:x,children:C,component:m}=y,{props:F,children:T,patchFlag:O}=b,E=m.emitsOptions;if(b.dirs||b.transition)return!0;if(!(L&&O>=0))return!(!C&&!T||T&&T.$stable)||x!==F&&(x?!F||Wo(x,F,E):!!F);if(1024&O)return!0;if(16&O)return x?Wo(x,F,E):!!F;if(8&O){const $=b.dynamicProps;for(let B=0;B<$.length;B++){const N=$[B];if(F[N]!==x[N]&&!dn(E,N))return!0}}return!1}(u,p,v)){if(S.asyncDep&&!S.asyncResolved)return void H(S,p,v);S.next=p,function(y){const b=ut.indexOf(y);b>$t&&ut.splice(b,1)}(S.update),S.update()}else p.el=u.el,S.vnode=p},k=(u,p,v,S,y,b,L)=>{const x=u.effect=new fo(()=>{if(u.isMounted){let m,{next:F,bu:T,u:O,parent:E,vnode:$}=u,B=F;Qt(u,!1),F?(F.el=$.el,H(u,F,L)):F=$,T&&rn(T),(m=F.props&&F.props.onVnodeBeforeUpdate)&&Et(m,E,F,$),Qt(u,!0);const N=Un(u),Y=u.subTree;u.subTree=N,A(Y,N,f(Y.el),De(Y),u,y,b),F.el=N.el,B===null&&Bl(u,N.el),O&&mt(O,y),(m=F.props&&F.props.onVnodeUpdated)&&mt(()=>Et(m,E,F,$),y)}else{let m;const{el:F,props:T}=p,{bm:O,m:E,parent:$}=u,B=me(p);if(Qt(u,!1),O&&rn(O),!B&&(m=T&&T.onVnodeBeforeMount)&&Et(m,$,p),Qt(u,!0),F&&In){const N=()=>{u.subTree=Un(u),In(F,u.subTree,u,y,null)};B?p.type.__asyncLoader().then(()=>!u.isUnmounted&&N()):N()}else{const N=u.subTree=Un(u);A(null,N,v,S,u,y,b),p.el=N.el}if(E&&mt(E,y),!B&&(m=T&&T.onVnodeMounted)){const N=p;mt(()=>Et(m,$,N),y)}(256&p.shapeFlag||$&&me($.vnode)&&256&$.vnode.shapeFlag)&&u.a&&mt(u.a,y),u.isMounted=!0,p=v=S=null}},()=>Tn(C),u.scope),C=u.update=()=>x.run();C.id=u.uid,Qt(u,!0),C()},H=(u,p,v)=>{p.component=u;const S=u.vnode.props;u.vnode=p,u.next=null,function(y,b,L,x){const{props:C,attrs:m,vnode:{patchFlag:F}}=y,T=X(C),[O]=y.propsOptions;let E=!1;if(!(x||F>0)||16&F){let $;Jo(y,b,C,m)&&(E=!0);for(const B in T)b&&(J(b,B)||($=ce(B))!==B&&J(b,$))||(O?!L||L[B]===void 0&&L[$]===void 0||(C[B]=eo(O,T,B,void 0,y,!0)):delete C[B]);if(m!==T)for(const B in m)b&&J(b,B)||(delete m[B],E=!0)}else if(8&F){const $=y.vnode.dynamicProps;for(let B=0;B<$.length;B++){let N=$[B];if(dn(y.emitsOptions,N))continue;const Y=b[N];if(O)if(J(m,N))Y!==m[N]&&(m[N]=Y,E=!0);else{const st=Mt(N);C[st]=eo(O,T,st,Y,y,!1)}else Y!==m[N]&&(m[N]=Y,E=!0)}}E&&jt(y,"set","$attrs")}(u,p.props,S,v),((y,b,L)=>{const{vnode:x,slots:C}=y;let m=!0,F=Q;if(32&x.shapeFlag){const T=b._;T?L&&T===1?m=!1:(et(C,b),L||T!==1||delete C._):(m=!b.$stable,er(b,C)),F=b}else b&&(nr(y,b),F={default:1});if(m)for(const T in C)gs(T)||T in F||delete C[T]})(u,p.children,v),ge(),Ho(),ve()},tt=(u,p,v,S,y,b,L,x,C=!1)=>{const m=u&&u.children,F=u?u.shapeFlag:0,T=p.children,{patchFlag:O,shapeFlag:E}=p;if(O>0){if(128&O)return void Ct(m,T,v,S,y,b,L,x,C);if(256&O)return void bt(m,T,v,S,y,b,L,x,C)}8&E?(16&F&&It(m,y,b),T!==m&&a(v,T)):16&F?16&E?Ct(m,T,v,S,y,b,L,x,C):It(m,y,b,!0):(8&F&&a(v,""),16&E&&W(T,v,S,y,b,L,x,C))},bt=(u,p,v,S,y,b,L,x,C)=>{const m=(u=u||ue).length,F=(p=p||ue).length,T=Math.min(m,F);let O;for(O=0;OF?It(u,y,b,!0,!1,T):W(p,v,S,y,b,L,x,C,T)},Ct=(u,p,v,S,y,b,L,x,C)=>{let m=0;const F=p.length;let T=u.length-1,O=F-1;for(;m<=T&&m<=O;){const E=u[m],$=p[m]=C?Kt(p[m]):Tt(p[m]);if(!ne(E,$))break;A(E,$,v,null,y,b,L,x,C),m++}for(;m<=T&&m<=O;){const E=u[T],$=p[O]=C?Kt(p[O]):Tt(p[O]);if(!ne(E,$))break;A(E,$,v,null,y,b,L,x,C),T--,O--}if(m>T){if(m<=O){const E=O+1,$=EO)for(;m<=T;)Ot(u[m],y,b,!0),m++;else{const E=m,$=m,B=new Map;for(m=$;m<=O;m++){const lt=p[m]=C?Kt(p[m]):Tt(p[m]);lt.key!=null&&B.set(lt.key,m)}let N,Y=0;const st=O-$+1;let vt=!1,Lo=0;const we=new Array(st);for(m=0;m=st){Ot(lt,y,b,!0);continue}let ht;if(lt.key!=null)ht=B.get(lt.key);else for(N=$;N<=O;N++)if(we[N-$]===0&&ne(lt,p[N])){ht=N;break}ht===void 0?Ot(lt,y,b,!0):(we[ht-$]=m+1,ht>=Lo?Lo=ht:vt=!0,A(lt,p[ht],v,null,y,b,L,x,C),Y++)}const Oo=vt?function(lt){const ht=lt.slice(),ft=[0];let Bt,Nn,xt,Ht,ze;const zs=lt.length;for(Bt=0;Bt>1,lt[ft[ze]]0&&(ht[Bt]=ft[xt-1]),ft[xt]=Bt)}}for(xt=ft.length,Ht=ft[xt-1];xt-- >0;)ft[xt]=Ht,Ht=ht[Ht];return ft}(we):ue;for(N=Oo.length-1,m=st-1;m>=0;m--){const lt=$+m,ht=p[lt],ft=lt+1{const{el:b,type:L,transition:x,children:C,shapeFlag:m}=u;if(6&m)return void wt(u.component.subTree,p,v,S);if(128&m)return void u.suspense.move(p,v,S);if(64&m)return void L.move(u,p,v,Ce);if(L===dt){n(b,p,v);for(let F=0;F{let $;for(;F&&F!==T;)$=d(F),n(F,O,E),F=$;n(T,O,E)})(u,p,v);if(S!==2&&1&m&&x)if(S===0)x.beforeEnter(b),n(b,p,v),mt(()=>x.enter(b),y);else{const{leave:F,delayLeave:T,afterLeave:O}=x,E=()=>n(b,p,v),$=()=>{F(b,()=>{E(),O&&O()})};T?T(b,E,$):$()}else n(b,p,v)},Ot=(u,p,v,S=!1,y=!1)=>{const{type:b,props:L,ref:x,children:C,dynamicChildren:m,shapeFlag:F,patchFlag:T,dirs:O}=u;if(x!=null&&vn(x,null,v,u,!0),256&F)return void p.ctx.deactivate(u);const E=1&F&&O,$=!me(u);let B;if($&&(B=L&&L.onVnodeBeforeUnmount)&&Et(B,p,u),6&F)Ds(u.component,v,S);else{if(128&F)return void u.suspense.unmount(v,S);E&&Pt(u,null,p,"beforeUnmount"),64&F?u.type.remove(u,p,v,y,Ce,S):m&&(b!==dt||T>0&&64&T)?It(m,p,v,!1,!0):(b===dt&&384&T||!y&&16&F)&&It(C,p,v),S&&Ro(u)}($&&(B=L&&L.onVnodeUnmounted)||E)&&mt(()=>{B&&Et(B,p,u),E&&Pt(u,null,p,"unmounted")},v)},Ro=u=>{const{type:p,el:v,anchor:S,transition:y}=u;if(p===dt)return void Ws(v,S);if(p===Le)return void(({el:L,anchor:x})=>{let C;for(;L&&L!==x;)C=d(L),o(L),L=C;o(x)})(u);const b=()=>{o(v),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(1&u.shapeFlag&&y&&!y.persisted){const{leave:L,delayLeave:x}=y,C=()=>L(v,b);x?x(u.el,b,C):C()}else b()},Ws=(u,p)=>{let v;for(;u!==p;)v=d(u),o(u),u=v;o(p)},Ds=(u,p,v)=>{const{bum:S,scope:y,update:b,subTree:L,um:x}=u;S&&rn(S),y.stop(),b&&(b.active=!1,Ot(L,u,p,v)),x&&mt(x,p),mt(()=>{u.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},It=(u,p,v,S=!1,y=!1,b=0)=>{for(let L=b;L6&u.shapeFlag?De(u.component.subTree):128&u.shapeFlag?u.suspense.next():d(u.anchor||u.el),Fo=(u,p,v)=>{u==null?p._vnode&&Ot(p._vnode,null,null,!0):A(p._vnode||null,u,p,null,null,null,v),Ho(),pn(),p._vnode=u},Ce={p:A,um:Ot,m:wt,r:Ro,mt:nt,mc:W,pc:tt,pbc:U,n:De,o:t};let Mn,In;return e&&([Mn,In]=e(Ce)),{render:Fo,hydrate:Mn,createApp:si(Fo,Mn)}}function Qt({effect:t,update:e},n){t.allowRecurse=e.allowRecurse=n}function Eo(t,e,n=!1){const o=t.children,r=e.children;if(j(o)&&j(r))for(let s=0;st&&(t.disabled||t.disabled===""),or=t=>typeof SVGElement<"u"&&t instanceof SVGElement,Hn=(t,e)=>{const n=t&&t.to;return rt(n)?e?e(n):null:n};function en(t,e,n,{o:{insert:o},m:r},s=2){s===0&&o(t.targetAnchor,e,n);const{el:l,anchor:i,shapeFlag:c,children:a,props:f}=t,d=s===2;if(d&&o(l,e,n),(!d||Ae(f))&&16&c)for(let h=0;h{16&_&&f(I,D,z,r,s,l,i,c)};g?M(n,W):G&&M(G,U)}else{e.el=t.el;const V=e.anchor=t.anchor,W=e.target=t.target,G=e.targetAnchor=t.targetAnchor,U=Ae(t.props),M=U?n:W,D=U?V:G;if(l=l||or(W),K?(h(t.dynamicChildren,K,M,r,s,l,i),Eo(t,e,!0)):c||d(t,e,M,D,r,s,l,i,!1),g)U||en(e,n,V,a,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const z=e.target=Hn(e.props,A);z&&en(e,z,null,a,0)}else U&&en(e,W,G,a,1)}rr(e)},remove(t,e,n,o,{um:r,o:{remove:s}},l){const{shapeFlag:i,children:c,anchor:a,targetAnchor:f,target:d,props:h}=t;if(d&&s(f),(l||!Ae(h))&&(s(a),16&i))for(let w=0;w0?Ft||ue:null,fi(),Ve>0&&Ft&&Ft.push(t),t}function vc(t,e,n,o,r,s){return _s(ws(t,e,n,o,r,s,!0))}function bs(t,e,n,o,r){return _s(ot(t,e,n,o,r,!0))}function yn(t){return!!t&&t.__v_isVNode===!0}function ne(t,e){return t.type===e.type&&t.key===e.key}const _n="__vInternal",Cs=({key:t})=>t??null,cn=({ref:t,ref_key:e,ref_for:n})=>(typeof t=="number"&&(t=""+t),t!=null?rt(t)||ct(t)||q(t)?{i:at,r:t,k:e,f:!!n}:t:null);function ws(t,e=null,n=null,o=0,r=null,s=t===dt?0:1,l=!1,i=!1){const c={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&Cs(e),ref:e&&cn(e),scopeId:Rn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:at};return i?(Ao(c,n),128&s&&t.normalize(c)):n&&(c.shapeFlag|=rt(n)?8:16),Ve>0&&!l&&Ft&&(c.patchFlag>0||6&s)&&c.patchFlag!==32&&Ft.push(c),c}const ot=function(t,e=null,n=null,o=0,r=null,s=!1){if(t&&t!==us||(t=_t),yn(t)){const c=Zt(t,e,!0);return n&&Ao(c,n),Ve>0&&!s&&Ft&&(6&c.shapeFlag?Ft[Ft.indexOf(t)]=c:Ft.push(c)),c.patchFlag|=-2,c}l=t,q(l)&&"__vccOpts"in l&&(t=t.__vccOpts);var l;if(e){e=pi(e);let{class:c,style:a}=e;c&&!rt(c)&&(e.class=ao(c)),Z(a)&&(Gr(a)&&!j(a)&&(a=et({},a)),e.style=co(a))}const i=rt(t)?1:Hl(t)?128:(c=>c.__isTeleport)(t)?64:Z(t)?4:q(t)?2:0;return ws(t,e,n,o,r,i,s,!0)};function pi(t){return t?Gr(t)||_n in t?et({},t):t:null}function Zt(t,e,n=!1){const{props:o,ref:r,patchFlag:s,children:l}=t,i=e?di(o||{},e):o;return{__v_isVNode:!0,__v_skip:!0,type:t.type,props:i,key:i&&Cs(i),ref:e&&e.ref?n&&r?j(r)?r.concat(cn(e)):[r,cn(e)]:cn(e):r,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:l,target:t.target,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==dt?s===-1?16:16|s:s,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:t.transition,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Zt(t.ssContent),ssFallback:t.ssFallback&&Zt(t.ssFallback),el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce}}function xs(t=" ",e=0){return ot(_e,null,t,e)}function yc(t,e){const n=ot(Le,null,t);return n.staticCount=e,n}function _c(t="",e=!1){return e?(ys(),bs(_t,null,t)):ot(_t,null,t)}function Tt(t){return t==null||typeof t=="boolean"?ot(_t):j(t)?ot(dt,null,t.slice()):typeof t=="object"?Kt(t):ot(_e,null,String(t))}function Kt(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:Zt(t)}function Ao(t,e){let n=0;const{shapeFlag:o}=t;if(e==null)e=null;else if(j(e))n=16;else if(typeof e=="object"){if(65&o){const r=e.default;return void(r&&(r._c&&(r._d=!1),Ao(t,r()),r._c&&(r._d=!0)))}{n=32;const r=e._;r||_n in e?r===3&&at&&(at.slots._===1?e._=1:(e._=2,t.patchFlag|=1024)):e._ctx=at}}else q(e)?(e={default:e,_ctx:at},n=32):(e=String(e),64&o?(n=16,e=[xs(e)]):n=8);t.children=e,t.shapeFlag|=n}function di(...t){const e={};for(let n=0;nit||at;let To;To=t=>{it=t};const be=t=>{To(t),t.scope.on()},ie=()=>{it&&it.scope.off(),To(null)};function Ss(t){return 4&t.vnode.shapeFlag}let lr,bn=!1;function ir(t,e,n){q(e)?t.render=e:Z(e)&&(t.setupState=Jr(e)),Es(t,n)}function Es(t,e,n){const o=t.type;if(!t.render){if(!e&&lr&&!o.render){const r=o.template||xo(t).template;if(r){const{isCustomElement:s,compilerOptions:l}=t.appContext.config,{delimiters:i,compilerOptions:c}=o,a=et(et({isCustomElement:s,delimiters:i},l),c);o.render=lr(r,a)}}t.render=o.render||Xt}be(t),ge(),ni(t),ve(),ie()}function As(t){const e=n=>{t.exposed=n||{}};return{get attrs(){return function(n){return n.attrsProxy||(n.attrsProxy=new Proxy(n.attrs,{get:(o,r)=>(gt(n,0,"$attrs"),o[r])}))}(t)},slots:t.slots,emit:t.emit,expose:e}}function $n(t){if(t.exposed)return t.exposeProxy||(t.exposeProxy=new Proxy(Jr(Te(t.exposed)),{get:(e,n)=>n in e?e[n]:n in Re?Re[n](t):void 0,has:(e,n)=>n in e||n in Re}))}function gi(t,e=!0){return q(t)?t.displayName||t.name:t.name||e&&t.__name}const kt=(t,e)=>function(n,o,r=!1){let s,l;const i=q(n);return i?(s=n,l=Xt):(s=n.get,l=n.set),new $l(s,l,i||!l,r)}(t,0,bn);function no(t,e,n){const o=arguments.length;return o===2?Z(e)&&!j(e)?yn(e)?ot(t,null,[e]):ot(t,e):ot(t,null,e):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&yn(n)&&(n=[n]),ot(t,e,n))}const vi="3.3.4",oe=typeof document<"u"?document:null,cr=oe&&oe.createElement("template"),yi={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,o)=>{const r=e?oe.createElementNS("http://www.w3.org/2000/svg",t):oe.createElement(t,n?{is:n}:void 0);return t==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:t=>oe.createTextNode(t),createComment:t=>oe.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>oe.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,o,r,s){const l=n?n.previousSibling:e.lastChild;if(r&&(r===s||r.nextSibling))for(;e.insertBefore(r.cloneNode(!0),n),r!==s&&(r=r.nextSibling););else{cr.innerHTML=o?`${t}`:t;const i=cr.content;if(o){const c=i.firstChild;for(;c.firstChild;)i.appendChild(c.firstChild);i.removeChild(c)}e.insertBefore(i,n)}return[l?l.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},ar=/\s*!important$/;function oo(t,e,n){if(j(n))n.forEach(o=>oo(t,e,o));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const o=function(r,s){const l=Wn[s];if(l)return l;let i=Mt(s);if(i!=="filter"&&i in r)return Wn[s]=i;i=Sn(i);for(let c=0;c{if(w._vts){if(w._vts<=h.attached)return}else w._vts=Date.now();Lt(function(A,P){if(j(P)){const g=A.stopImmediatePropagation;return A.stopImmediatePropagation=()=>{g.call(A),A._stopped=!0},P.map(_=>I=>!I._stopped&&_&&_(I))}return P}(w,h.value),d,5,[w])};return h.value=f,h.attached=(()=>Dn||(bi.then(()=>Dn=0),Dn=Date.now()))(),h}(o,r);ae(t,i,a,c)}else l&&(function(a,f,d,h){a.removeEventListener(f,d,h)}(t,i,l,c),s[e]=void 0)}}const pr=/(?:Once|Passive|Capture)$/;let Dn=0;const bi=Promise.resolve(),dr=/^on[a-z]/,zt="transition",Se="animation",ks=(t,{slots:e})=>no(zl,Rs(t),e);ks.displayName="Transition";const Ts={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Ci=ks.props=et({},ss,Ts),te=(t,e=[])=>{j(t)?t.forEach(n=>n(...e)):t&&t(...e)},hr=t=>!!t&&(j(t)?t.some(e=>e.length>1):t.length>1);function Rs(t){const e={};for(const R in t)R in Ts||(e[R]=t[R]);if(t.css===!1)return e;const{name:n="v",type:o,duration:r,enterFromClass:s=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:i=`${n}-enter-to`,appearFromClass:c=s,appearActiveClass:a=l,appearToClass:f=i,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=t,A=function(R){if(R==null)return null;if(Z(R))return[zn(R.enter),zn(R.leave)];{const k=zn(R);return[k,k]}}(r),P=A&&A[0],g=A&&A[1],{onBeforeEnter:_,onEnter:I,onEnterCancelled:K,onLeave:V,onLeaveCancelled:W,onBeforeAppear:G=_,onAppear:U=I,onAppearCancelled:M=K}=e,D=(R,k,H)=>{qt(R,k?f:i),qt(R,k?a:l),H&&H()},z=(R,k)=>{R._isLeaving=!1,qt(R,d),qt(R,w),qt(R,h),k&&k()},nt=R=>(k,H)=>{const tt=R?U:I,bt=()=>D(k,R,H);te(tt,[k,bt]),mr(()=>{qt(k,R?c:s),Nt(k,R?f:i),hr(tt)||gr(k,o,P,bt)})};return et(e,{onBeforeEnter(R){te(_,[R]),Nt(R,s),Nt(R,l)},onBeforeAppear(R){te(G,[R]),Nt(R,c),Nt(R,a)},onEnter:nt(!1),onAppear:nt(!0),onLeave(R,k){R._isLeaving=!0;const H=()=>z(R,k);Nt(R,d),Ls(),Nt(R,h),mr(()=>{R._isLeaving&&(qt(R,d),Nt(R,w),hr(V)||gr(R,o,g,H))}),te(V,[R,H])},onEnterCancelled(R){D(R,!1),te(K,[R])},onAppearCancelled(R){D(R,!0),te(M,[R])},onLeaveCancelled(R){z(R),te(W,[R])}})}function zn(t){return Ys(t)}function Nt(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t._vtc||(t._vtc=new Set)).add(e)}function qt(t,e){e.split(/\s+/).forEach(o=>o&&t.classList.remove(o));const{_vtc:n}=t;n&&(n.delete(e),n.size||(t._vtc=void 0))}function mr(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let wi=0;function gr(t,e,n,o){const r=t._endId=++wi,s=()=>{r===t._endId&&o()};if(n)return setTimeout(s,n);const{type:l,timeout:i,propCount:c}=Fs(t,e);if(!l)return o();const a=l+"end";let f=0;const d=()=>{t.removeEventListener(a,h),s()},h=w=>{w.target===t&&++f>=c&&d()};setTimeout(()=>{f(n[w]||"").split(", "),r=o(`${zt}Delay`),s=o(`${zt}Duration`),l=vr(r,s),i=o(`${Se}Delay`),c=o(`${Se}Duration`),a=vr(i,c);let f=null,d=0,h=0;return e===zt?l>0&&(f=zt,d=l,h=s.length):e===Se?a>0&&(f=Se,d=a,h=c.length):(d=Math.max(l,a),f=d>0?l>a?zt:Se:null,h=f?f===zt?s.length:c.length:0),{type:f,timeout:d,propCount:h,hasTransform:f===zt&&/\b(transform|all)(,|$)/.test(o(`${zt}Property`).toString())}}function vr(t,e){for(;t.lengthyr(n)+yr(t[o])))}function yr(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function Ls(){return document.body.offsetHeight}const Os=new WeakMap,Ps=new WeakMap;et({},Ci,{tag:String,moveClass:String});function xi(t){const e=t.el;e._moveCb&&e._moveCb(),e._enterCb&&e._enterCb()}function Si(t){Ps.set(t,t.el.getBoundingClientRect())}function Ei(t){const e=Os.get(t),n=Ps.get(t),o=e.left-n.left,r=e.top-n.top;if(o||r){const s=t.el.style;return s.transform=s.webkitTransform=`translate(${o}px,${r}px)`,s.transitionDuration="0s",t}}const _r=t=>{const e=t.props["onUpdate:modelValue"]||!1;return j(e)?n=>rn(e,n):e};function Ai(t){t.target.composing=!0}function br(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const bc={created(t,{modifiers:{lazy:e,trim:n,number:o}},r){t._assign=_r(r);const s=o||r.props&&r.props.type==="number";ae(t,e?"change":"input",l=>{if(l.target.composing)return;let i=t.value;n&&(i=i.trim()),s&&(i=Kn(i)),t._assign(i)}),n&&ae(t,"change",()=>{t.value=t.value.trim()}),e||(ae(t,"compositionstart",Ai),ae(t,"compositionend",br),ae(t,"change",br))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,modifiers:{lazy:n,trim:o,number:r}},s){if(t._assign=_r(s),t.composing||document.activeElement===t&&t.type!=="range"&&(n||o&&t.value.trim()===e||(r||t.type==="number")&&Kn(t.value)===e))return;const l=e??"";t.value!==l&&(t.value=l)}},ki=["ctrl","shift","alt","meta"],Ti={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>ki.some(n=>t[`${n}Key`]&&!e.includes(n))},Cc=(t,e)=>(n,...o)=>{for(let r=0;rn=>{if(!("key"in n))return;const o=ce(n.key);return e.some(r=>r===o||Ri[r]===o)?t(n):void 0},$s=et({patchProp:(t,e,n,o,r=!1,s,l,i,c)=>{e==="class"?function(a,f,d){const h=a._vtc;h&&(f=(f?[f,...h]:[...h]).join(" ")),f==null?a.removeAttribute("class"):d?a.setAttribute("class",f):a.className=f}(t,o,r):e==="style"?function(a,f,d){const h=a.style,w=rt(d);if(d&&!w){if(f&&!rt(f))for(const A in f)d[A]==null&&oo(h,A,"");for(const A in d)oo(h,A,d[A])}else{const A=h.display;w?f!==d&&(h.cssText=d):f&&a.removeAttribute("style"),"_vod"in a&&(h.display=A)}}(t,n,o):Be(e)?ro(e)||_i(t,e,0,o,l):(e[0]==="."?(e=e.slice(1),1):e[0]==="^"?(e=e.slice(1),0):function(a,f,d,h){return h?f==="innerHTML"||f==="textContent"||!!(f in a&&dr.test(f)&&q(d)):f==="spellcheck"||f==="draggable"||f==="translate"||f==="form"||f==="list"&&a.tagName==="INPUT"||f==="type"&&a.tagName==="TEXTAREA"||dr.test(f)&&rt(d)?!1:f in a}(t,e,o,r))?function(a,f,d,h,w,A,P){if(f==="innerHTML"||f==="textContent")return h&&P(h,w,A),void(a[f]=d??"");const g=a.tagName;if(f==="value"&&g!=="PROGRESS"&&!g.includes("-")){a._value=d;const I=d??"";return(g==="OPTION"?a.getAttribute("value"):a.value)!==I&&(a.value=I),void(d==null&&a.removeAttribute(f))}let _=!1;if(d===""||d==null){const I=typeof a[f];I==="boolean"?d=$o(d):d==null&&I==="string"?(d="",_=!0):I==="number"&&(d=0,_=!0)}try{a[f]=d}catch{}_&&a.removeAttribute(f)}(t,e,o,s,l,i,c):(e==="true-value"?t._trueValue=o:e==="false-value"&&(t._falseValue=o),function(a,f,d,h,w){if(h&&f.startsWith("xlink:"))d==null?a.removeAttributeNS(fr,f.slice(6,f.length)):a.setAttributeNS(fr,f,d);else{const A=ol(f);d==null||A&&!$o(d)?a.removeAttribute(f):a.setAttribute(f,A?"":d)}}(t,e,o,r))}},yi);let Pe,Cr=!1;function Fi(){return Pe||(Pe=ai($s))}function Li(){return Pe=Cr?Pe:ui($s),Cr=!0,Pe}const xc=(...t)=>{const e=Fi().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=Ms(o);if(!r)return;const s=e._component;q(s)||s.render||s.template||(s.template=r.innerHTML),r.innerHTML="";const l=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),l},e},Sc=(...t)=>{const e=Li().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=Ms(o);if(r)return n(r,!0,r instanceof SVGElement)},e};function Ms(t){return rt(t)?document.querySelector(t):t}const Ec=(t,e)=>{const n=t.__vccOpts||t;for(const[o,r]of e)n[o]=r;return n},Oi="modulepreload",Pi=function(t){return"/"+t},wr={},Ac=function(e,n,o){if(!n||n.length===0)return e();const r=document.getElementsByTagName("link");return Promise.all(n.map(s=>{if(s=Pi(s),s in wr)return;wr[s]=!0;const l=s.endsWith(".css"),i=l?'[rel="stylesheet"]':"";if(!!o)for(let f=r.length-1;f>=0;f--){const d=r[f];if(d.href===s&&(!l||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${i}`))return;const a=document.createElement("link");if(a.rel=l?"stylesheet":Oi,l||(a.as="script",a.crossOrigin=""),a.href=s,document.head.appendChild(a),l)return new Promise((f,d)=>{a.addEventListener("load",f),a.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>e()).catch(s=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=s,window.dispatchEvent(l),!l.defaultPrevented)throw s})},$i=window.__VP_SITE_DATA__,Is=/^[a-z]+:/i,kc=/^pathname:\/\//,Tc="vitepress-theme-appearance",Ns=/#.*$/,Mi=/(index)?\.(md|html)$/,At=typeof document<"u",Us={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Ii(t,e,n=!1){if(e===void 0)return!1;if(t=xr(`/${t}`),n)return new RegExp(e).test(t);if(xr(e)!==t)return!1;const o=e.match(Ns);return o?(At?location.hash:"")===o[0]:!0}function xr(t){return decodeURI(t).replace(Ns,"").replace(Mi,"")}function Ni(t){return Is.test(t)}function Ui(t,e){var o,r,s,l,i,c,a;const n=Object.keys(t.locales).find(f=>f!=="root"&&!Ni(f)&&Ii(e,`/${f}/`,!0))||"root";return Object.assign({},t,{localeIndex:n,lang:((o=t.locales[n])==null?void 0:o.lang)??t.lang,dir:((r=t.locales[n])==null?void 0:r.dir)??t.dir,title:((s=t.locales[n])==null?void 0:s.title)??t.title,titleTemplate:((l=t.locales[n])==null?void 0:l.titleTemplate)??t.titleTemplate,description:((i=t.locales[n])==null?void 0:i.description)??t.description,head:Vs(t.head,((c=t.locales[n])==null?void 0:c.head)??[]),themeConfig:{...t.themeConfig,...(a=t.locales[n])==null?void 0:a.themeConfig}})}function js(t,e){const n=e.title||t.title,o=e.titleTemplate??t.titleTemplate;if(typeof o=="string"&&o.includes(":title"))return o.replace(/:title/g,n);const r=ji(t.title,o);return`${n}${r}`}function ji(t,e){return e===!1?"":e===!0||e===void 0?` | ${t}`:t===e?"":` | ${e}`}function Vi(t,e){const[n,o]=e;if(n!=="meta")return!1;const r=Object.entries(o)[0];return r==null?!1:t.some(([s,l])=>s===n&&l[r[0]]===r[1])}function Vs(t,e){return[...t.filter(n=>!Vi(e,n)),...e]}const Bi=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Hi=/^[a-z]:/i;function Sr(t){const e=Hi.exec(t),n=e?e[0]:"";return n+t.slice(n.length).replace(Bi,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Wi=Symbol(),se=Al($i);function Rc(t){const e=kt(()=>Ui(se.value,t.data.relativePath));return{site:e,theme:kt(()=>e.value.themeConfig),page:kt(()=>t.data),frontmatter:kt(()=>t.data.frontmatter),params:kt(()=>t.data.params),lang:kt(()=>e.value.lang),dir:kt(()=>e.value.dir),localeIndex:kt(()=>e.value.localeIndex||"root"),title:kt(()=>js(e.value,t.data)),description:kt(()=>t.data.description||e.value.description),isDark:de(!1)}}function Fc(){const t=Fe(Wi);if(!t)throw new Error("vitepress data not properly injected in app");return t}function Di(t,e){return`${t}${e}`.replace(/\/+/g,"/")}function Er(t){return Is.test(t)||t.startsWith(".")?t:Di(se.value.base,t)}function zi(t){let e=t.replace(/\.html$/,"");if(e=decodeURIComponent(e),e=e.replace(/\/$/,"/index"),At){const n="/";e=Sr(e.slice(n.length).replace(/\//g,"_")||"index")+".md";let o=__VP_HASH_MAP__[e.toLowerCase()];if(o||(e=e.endsWith("_index.md")?e.slice(0,-9)+".md":e.slice(0,-3)+"_index.md",o=__VP_HASH_MAP__[e.toLowerCase()]),!o)return null;e=`${n}assets/${e}.${o}.js`}else e=`./${Sr(e.slice(1).replace(/\//g,"_"))}.md.js`;return e}let an=[];function Lc(t){an.push(t),Pn(()=>{an=an.filter(e=>e!==t)})}const qi=Symbol(),Ar="http://a.com",Ki=()=>({path:"/",component:null,data:Us});function Oc(t,e){const n=kn(Ki()),o={route:n,go:r};async function r(i=At?location.href:"/"){var a,f;if(await((a=o.onBeforeRouteChange)==null?void 0:a.call(o,i))===!1)return;const c=new URL(i,Ar);se.value.cleanUrls||!c.pathname.endsWith("/")&&!c.pathname.endsWith(".html")&&(c.pathname+=".html",i=c.pathname+c.search+c.hash),At&&i!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",i)),await l(i),await((f=o.onAfterRouteChanged)==null?void 0:f.call(o,i))}let s=null;async function l(i,c=0,a=!1){var h;if(await((h=o.onBeforePageLoad)==null?void 0:h.call(o,i))===!1)return;const f=new URL(i,Ar),d=s=f.pathname;try{let w=await t(d);if(!w)throw new Error(`Page not found: ${d}`);if(s===d){s=null;const{default:A,__pageData:P}=w;if(!A)throw new Error(`Invalid route component: ${A}`);n.path=At?d:Er(d),n.component=Te(A),n.data=Te(P),At&&Zr(()=>{let g=se.value.base+P.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!se.value.cleanUrls&&!g.endsWith("/")&&(g+=".html"),g!==f.pathname&&(f.pathname=g,i=g+f.search+f.hash,history.replaceState(null,"",i)),f.hash&&!c){let _=null;try{_=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(I){console.warn(I)}if(_){kr(_,f.hash);return}}window.scrollTo(0,c)})}}catch(w){if(!/fetch|Page not found/.test(w.message)&&!/^\/404(\.html|\/)?$/.test(i)&&console.error(w),!a)try{const A=await fetch(se.value.base+"hashmap.json");window.__VP_HASH_MAP__=await A.json(),await l(i,c,!0);return}catch{}s===d&&(s=null,n.path=At?d:Er(d),n.component=e?Te(e):null,n.data=Us)}}return At&&(window.addEventListener("click",i=>{if(i.target.closest("button"))return;const a=i.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:f}=a,{href:d,origin:h,pathname:w,hash:A,search:P}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),g=window.location,_=w.match(/\.\w+$/);!i.ctrlKey&&!i.shiftKey&&!i.altKey&&!i.metaKey&&!f&&h===g.origin&&!(_&&_[0]!==".html")&&(i.preventDefault(),w===g.pathname&&P===g.search?A&&(A!==g.hash&&(history.pushState(null,"",A),window.dispatchEvent(new Event("hashchange"))),kr(a,A,a.classList.contains("header-anchor"))):r(d))}},{capture:!0}),window.addEventListener("popstate",i=>{l(location.href,i.state&&i.state.scrollPosition||0)}),window.addEventListener("hashchange",i=>{i.preventDefault()})),o}function Gi(){const t=Fe(qi);if(!t)throw new Error("useRouter() is called without provider.");return t}function Bs(){return Gi().route}function kr(t,e,n=!1){let o=null;try{o=t.classList.contains("header-anchor")?t:document.getElementById(decodeURIComponent(e).slice(1))}catch(r){console.warn(r)}if(o){let c=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const r=se.value.scrollOffset;let s=0;if(typeof r=="number")s=r;else if(typeof r=="string")s=Tr(r);else if(Array.isArray(r))for(const a of r){const f=Tr(a);if(f){s=f;break}}const l=parseInt(window.getComputedStyle(o).paddingTop,10),i=window.scrollY+o.getBoundingClientRect().top-s+l;requestAnimationFrame(c)}}function Tr(t){const e=document.querySelector(t);if(!e)return 0;const n=e.getBoundingClientRect().bottom;return n<0?0:n+24}const Rr=()=>an.forEach(t=>t()),Pc=Co({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(t){const e=Bs();return()=>no(t.as,{style:{position:"relative"}},[e.component?no(e.component,{onVnodeMounted:Rr,onVnodeUpdated:Rr}):"404 Page Not Found"])}}),$c=Co({setup(t,{slots:e}){const n=de(!1);return On(()=>{n.value=!0}),()=>n.value&&e.default?e.default():null}});function Mc(){At&&window.addEventListener("click",t=>{var n,o;const e=t.target;if(e.matches(".vp-code-group input")){const r=(n=e.parentElement)==null?void 0:n.parentElement,s=Array.from((r==null?void 0:r.querySelectorAll("input"))||[]).indexOf(e),l=r==null?void 0:r.querySelector('div[class*="language-"].active'),i=(o=r==null?void 0:r.querySelectorAll('div[class*="language-"]:not(.language-id)'))==null?void 0:o[s];l&&i&&l!==i&&(l.classList.remove("active"),i.classList.add("active"))}})}function Ic(){if(At){const t=new WeakMap;window.addEventListener("click",e=>{var o;const n=e.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,s=(o=n.nextElementSibling)==null?void 0:o.nextElementSibling;if(!r||!s)return;const l=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className);let i="";s.querySelectorAll("span.line:not(.diff.remove)").forEach(c=>i+=(c.textContent||"")+` +`),i=i.slice(0,-1),l&&(i=i.replace(/^ *(\$|>) /gm,"").trim()),Xi(i).then(()=>{n.classList.add("copied"),clearTimeout(t.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),t.delete(n)},2e3);t.set(n,c)})}})}}async function Xi(t){try{return navigator.clipboard.writeText(t)}catch{const e=document.createElement("textarea"),n=document.activeElement;e.value=t,e.setAttribute("readonly",""),e.style.contain="strict",e.style.position="absolute",e.style.left="-9999px",e.style.fontSize="12pt";const o=document.getSelection(),r=o?o.rangeCount>0&&o.getRangeAt(0):null;document.body.appendChild(e),e.select(),e.selectionStart=0,e.selectionEnd=t.length,document.execCommand("copy"),document.body.removeChild(e),r&&(o.removeAllRanges(),o.addRange(r)),n&&n.focus()}}function Nc(t,e){let n=[],o=!0;const r=s=>{if(o){o=!1;return}n.forEach(l=>document.head.removeChild(l)),n=[],s.forEach(l=>{const i=Fr(l);document.head.appendChild(i),n.push(i)})};Wl(()=>{const s=t.data,l=e.value,i=s&&s.description,c=s&&s.frontmatter.head||[];document.title=js(l,s);const a=i||l.description;let f=document.querySelector("meta[name=description]");f?f.setAttribute("content",a):Fr(["meta",{name:"description",content:a}]),r(Vs(l.head,Yi(c)))})}function Fr([t,e,n]){const o=document.createElement(t);for(const r in e)o.setAttribute(r,e[r]);return n&&(o.innerHTML=n),o}function Ji(t){return t[0]==="meta"&&t[1]&&t[1].name==="description"}function Yi(t){return t.filter(e=>!Ji(e))}const qn=new Set,Hs=()=>document.createElement("link"),Zi=t=>{const e=Hs();e.rel="prefetch",e.href=t,document.head.appendChild(e)},Qi=t=>{const e=new XMLHttpRequest;e.open("GET",t,e.withCredentials=!0),e.send()};let nn;const tc=At&&(nn=Hs())&&nn.relList&&nn.relList.supports&&nn.relList.supports("prefetch")?Zi:Qi;function Uc(){if(!At||!window.IntersectionObserver)return;let t;if((t=navigator.connection)&&(t.saveData||/2g/.test(t.effectiveType)))return;const e=window.requestIdleCallback||setTimeout;let n=null;const o=()=>{n&&n.disconnect(),n=new IntersectionObserver(s=>{s.forEach(l=>{if(l.isIntersecting){const i=l.target;n.unobserve(i);const{pathname:c}=i;if(!qn.has(c)){qn.add(c);const a=zi(c);a&&tc(a)}}})}),e(()=>{document.querySelectorAll("#app a").forEach(s=>{const{hostname:l,pathname:i}=new URL(s.href instanceof SVGAnimatedString?s.href.animVal:s.href,s.baseURI),c=i.match(/\.\w+$/);c&&c[0]!==".html"||s.target!=="_blank"&&l===location.hostname&&(i!==location.pathname?n.observe(s):qn.add(i))})})};On(o);const r=Bs();ln(()=>r.path,o),Pn(()=>{n&&n.disconnect()})}export{ks as $,On as A,_c as B,bs as C,Lc as D,ot as E,ws as F,fc as G,Wl as H,Is as I,Fe as J,co as K,xs as L,uc as M,Tl as N,Ul as O,kc as P,At as Q,yc as R,Tc as S,cs as T,oc as U,di as V,ac as W,ec as X,Ac as Y,li as Z,Ec as _,ao as a,wc as a0,hc as a1,ic as a2,Cc as a3,mc as a4,no as a5,Nc as a6,Uc as a7,Ic as a8,Mc as a9,qi as aa,Rc as ab,Wi as ac,Pc as ad,$c as ae,se as af,Sc as ag,Oc as ah,zi as ai,Gi as aj,as as ak,cc as al,bc as am,gc as an,Te as ao,xc as ap,vc as b,Fc as c,de as d,sc as e,lc as f,rc as g,nc as h,Ni as i,ct as j,Al as k,ko as l,Kr as m,Zr as n,ll as o,Ii as p,ln as q,kt as r,Bs as s,Pn as t,Co as u,ys as v,Er as w,dt as x,pc as y,dc as z}; diff --git a/assets/chunks/framework.410404a1.js b/assets/chunks/framework.410404a1.js deleted file mode 100644 index 1e1cb7312..000000000 --- a/assets/chunks/framework.410404a1.js +++ /dev/null @@ -1,2 +0,0 @@ -function es(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}const te={},ft=[],Pe=()=>{},Ni=()=>!1,Hi=/^on[^a-z]/,Ut=e=>Hi.test(e),ts=e=>e.startsWith("onUpdate:"),oe=Object.assign,ns=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},$i=Object.prototype.hasOwnProperty,Y=(e,t)=>$i.call(e,t),N=Array.isArray,ut=e=>gn(e)==="[object Map]",Cr=e=>gn(e)==="[object Set]",D=e=>typeof e=="function",se=e=>typeof e=="string",ss=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",Er=e=>ee(e)&&D(e.then)&&D(e.catch),xr=Object.prototype.toString,gn=e=>xr.call(e),Bi=e=>gn(e).slice(8,-1),Tr=e=>gn(e)==="[object Object]",rs=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Rt=es(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),mn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ui=/-(\w)/g,Le=mn(e=>e.replace(Ui,(t,n)=>n?n.toUpperCase():"")),ji=/\B([A-Z])/g,it=mn(e=>e.replace(ji,"-$1").toLowerCase()),_n=mn(e=>e.charAt(0).toUpperCase()+e.slice(1)),en=mn(e=>e?`on${_n(e)}`:""),St=(e,t)=>!Object.is(e,t),tn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Un=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Di=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let Is;const jn=()=>Is||(Is=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function is(e){if(N(e)){const t={};for(let n=0;n{if(n){const s=n.split(ki);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function os(e){let t="";if(se(e))t=e;else if(N(e))for(let n=0;nse(e)?e:e==null?"":N(e)||ee(e)&&(e.toString===xr||!D(e.toString))?JSON.stringify(e,Rr,2):String(e),Rr=(e,t)=>t&&t.__v_isRef?Rr(e,t.value):ut(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:Cr(t)?{[`Set(${t.size})`]:[...t.values()]}:ee(t)&&!N(t)&&!Tr(t)?String(t):t;let _e;class Yi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=_e;try{return _e=this,t()}finally{_e=n}}}on(){_e=this}off(){_e=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Pr=e=>(e.w&Ve)>0,Ir=e=>(e.n&Ve)>0,Zi=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(d==="length"||d>=c)&&l.push(f)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":N(e)?rs(n)&&l.push(o.get("length")):(l.push(o.get(st)),ut(e)&&l.push(o.get(Kn)));break;case"delete":N(e)||(l.push(o.get(st)),ut(e)&&l.push(o.get(Kn)));break;case"set":ut(e)&&l.push(o.get(st));break}if(l.length===1)l[0]&&kn(l[0]);else{const c=[];for(const f of l)f&&c.push(...f);kn(ls(c))}}function kn(e,t){const n=N(e)?e:[...e];for(const s of n)s.computed&&Os(s);for(const s of n)s.computed||Os(s)}function Os(e,t){(e!==Ae||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function Gi(e,t){var n;return(n=ln.get(e))==null?void 0:n.get(t)}const eo=es("__proto__,__v_isRef,__isVue"),Mr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ss)),to=as(),no=as(!1,!0),so=as(!0),Ms=ro();function ro(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=J(this);for(let i=0,o=this.length;i{e[t]=function(...n){wt();const s=J(this)[t].apply(this,n);return Ct(),s}}),e}function io(e){const t=J(this);return pe(t,"has",e),t.hasOwnProperty(e)}function as(e=!1,t=!1){return function(s,r,i){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&i===(e?t?Co:$r:t?Hr:Nr).get(s))return s;const o=N(s);if(!e){if(o&&Y(Ms,r))return Reflect.get(Ms,r,i);if(r==="hasOwnProperty")return io}const l=Reflect.get(s,r,i);return(ss(r)?Mr.has(r):eo(r))||(e||pe(s,"get",r),t)?l:ce(l)?o&&rs(r)?l:l.value:ee(l)?e?Br(l):yn(l):l}}const oo=Lr(),lo=Lr(!0);function Lr(e=!1){return function(n,s,r,i){let o=n[s];if(_t(o)&&ce(o)&&!ce(r))return!1;if(!e&&(!cn(r)&&!_t(r)&&(o=J(o),r=J(r)),!N(n)&&ce(o)&&!ce(r)))return o.value=r,!0;const l=N(n)&&rs(s)?Number(s)e,bn=e=>Reflect.getPrototypeOf(e);function Wt(e,t,n=!1,s=!1){e=e.__v_raw;const r=J(e),i=J(t);n||(t!==i&&pe(r,"get",t),pe(r,"get",i));const{has:o}=bn(r),l=s?fs:n?hs:Nt;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function Vt(e,t=!1){const n=this.__v_raw,s=J(n),r=J(e);return t||(e!==r&&pe(s,"has",e),pe(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function qt(e,t=!1){return e=e.__v_raw,!t&&pe(J(e),"iterate",st),Reflect.get(e,"size",e)}function Ls(e){e=J(e);const t=J(this);return bn(t).has.call(t,e)||(t.add(e),He(t,"add",e,e)),this}function Ss(e,t){t=J(t);const n=J(this),{has:s,get:r}=bn(n);let i=s.call(n,e);i||(e=J(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?St(t,o)&&He(n,"set",e,t):He(n,"add",e,t),this}function Ns(e){const t=J(this),{has:n,get:s}=bn(t);let r=n.call(t,e);r||(e=J(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&He(t,"delete",e,void 0),i}function Hs(){const e=J(this),t=e.size!==0,n=e.clear();return t&&He(e,"clear",void 0,void 0),n}function zt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=J(o),c=t?fs:e?hs:Nt;return!e&&pe(l,"iterate",st),o.forEach((f,d)=>s.call(r,c(f),c(d),i))}}function Yt(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=ut(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),d=n?fs:t?hs:Nt;return!t&&pe(i,"iterate",c?Kn:st),{next(){const{value:p,done:g}=f.next();return g?{value:p,done:g}:{value:l?[d(p[0]),d(p[1])]:d(p),done:g}},[Symbol.iterator](){return this}}}}function Be(e){return function(...t){return e==="delete"?!1:this}}function po(){const e={get(i){return Wt(this,i)},get size(){return qt(this)},has:Vt,add:Ls,set:Ss,delete:Ns,clear:Hs,forEach:zt(!1,!1)},t={get(i){return Wt(this,i,!1,!0)},get size(){return qt(this)},has:Vt,add:Ls,set:Ss,delete:Ns,clear:Hs,forEach:zt(!1,!0)},n={get(i){return Wt(this,i,!0)},get size(){return qt(this,!0)},has(i){return Vt.call(this,i,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:zt(!0,!1)},s={get(i){return Wt(this,i,!0,!0)},get size(){return qt(this,!0)},has(i){return Vt.call(this,i,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Yt(i,!1,!1),n[i]=Yt(i,!0,!1),t[i]=Yt(i,!1,!0),s[i]=Yt(i,!0,!0)}),[e,n,t,s]}const[go,mo,_o,bo]=po();function us(e,t){const n=t?e?bo:_o:e?mo:go;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Y(n,r)&&r in s?n:s,r,i)}const yo={get:us(!1,!1)},vo={get:us(!1,!0)},wo={get:us(!0,!1)},Nr=new WeakMap,Hr=new WeakMap,$r=new WeakMap,Co=new WeakMap;function Eo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function xo(e){return e.__v_skip||!Object.isExtensible(e)?0:Eo(Bi(e))}function yn(e){return _t(e)?e:ds(e,!1,Sr,yo,Nr)}function To(e){return ds(e,!1,ho,vo,Hr)}function Br(e){return ds(e,!0,uo,wo,$r)}function ds(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=xo(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function dt(e){return _t(e)?dt(e.__v_raw):!!(e&&e.__v_isReactive)}function _t(e){return!!(e&&e.__v_isReadonly)}function cn(e){return!!(e&&e.__v_isShallow)}function Ur(e){return dt(e)||_t(e)}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function Pt(e){return on(e,"__v_skip",!0),e}const Nt=e=>ee(e)?yn(e):e,hs=e=>ee(e)?Br(e):e;function ps(e){ke&&Ae&&(e=J(e),Or(e.dep||(e.dep=ls())))}function gs(e,t){e=J(e);const n=e.dep;n&&kn(n)}function ce(e){return!!(e&&e.__v_isRef===!0)}function ht(e){return jr(e,!1)}function Ao(e){return jr(e,!0)}function jr(e,t){return ce(e)?e:new Ro(e,t)}class Ro{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Nt(t)}get value(){return ps(this),this._value}set value(t){const n=this.__v_isShallow||cn(t)||_t(t);t=n?t:J(t),St(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Nt(t),gs(this))}}function Po(e){return ce(e)?e.value:e}const Io={get:(e,t,n)=>Po(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ce(r)&&!ce(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Dr(e){return dt(e)?e:new Proxy(e,Io)}class Fo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>ps(this),()=>gs(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Vc(e){return new Fo(e)}class Oo{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Gi(J(this._object),this._key)}}class Mo{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function qc(e,t,n){return ce(e)?e:D(e)?new Mo(e):ee(e)&&arguments.length>1?Lo(e,t,n):ht(e)}function Lo(e,t,n){const s=e[t];return ce(s)?s:new Oo(e,t,n)}class So{constructor(t,n,s,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new cs(t,()=>{this._dirty||(this._dirty=!0,gs(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=J(this);return ps(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function No(e,t,n=!1){let s,r;const i=D(e);return i?(s=e,r=Pe):(s=e.get,r=e.set),new So(s,r,i||!r,n)}function We(e,t,n,s){let r;try{r=s?e(...s):e()}catch(i){jt(i,t,n)}return r}function Ce(e,t,n,s){if(D(e)){const i=We(e,t,n,s);return i&&Er(i)&&i.catch(o=>{jt(o,t,n)}),i}const r=[];for(let i=0;i>>1;$t(fe[s])Me&&fe.splice(t,1)}function Uo(e){N(e)?pt.push(...e):(!Ne||!Ne.includes(e,e.allowRecurse?Qe+1:Qe))&&pt.push(e),Wr()}function $s(e,t=Ht?Me+1:0){for(;t$t(n)-$t(s)),Qe=0;Qee.id==null?1/0:e.id,jo=(e,t)=>{const n=$t(e)-$t(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Vr(e){Wn=!1,Ht=!0,fe.sort(jo);const t=Pe;try{for(Me=0;Mese(w)?w.trim():w)),p&&(r=n.map(Un))}let l,c=s[l=en(t)]||s[l=en(Le(t))];!c&&i&&(c=s[l=en(it(t))]),c&&Ce(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ce(f,e,6,r)}}function qr(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!D(e)){const c=f=>{const d=qr(f,t,!0);d&&(l=!0,oe(o,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ee(e)&&s.set(e,null),null):(N(i)?i.forEach(c=>o[c]=null):oe(o,i),ee(e)&&s.set(e,o),o)}function wn(e,t){return!e||!Ut(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,it(t))||Y(e,t))}let ae=null,Cn=null;function fn(e){const t=ae;return ae=e,Cn=e&&e.type.__scopeId||null,t}function zc(e){Cn=e}function Yc(){Cn=null}function Ko(e,t=ae,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&Xs(-1);const i=fn(t);let o;try{o=e(...r)}finally{fn(i),s._d&&Xs(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function On(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:i,propsOptions:[o],slots:l,attrs:c,emit:f,render:d,renderCache:p,data:g,setupState:w,ctx:A,inheritAttrs:I}=e;let H,m;const y=fn(e);try{if(n.shapeFlag&4){const P=r||s;H=Te(d.call(P,P,p,i,w,g,A)),m=c}else{const P=t;H=Te(P.length>1?P(i,{attrs:c,slots:l,emit:f}):P(i,null)),m=t.props?c:ko(c)}}catch(P){Mt.length=0,jt(P,e,1),H=re(be)}let $=H;if(m&&I!==!1){const P=Object.keys(m),{shapeFlag:K}=$;P.length&&K&7&&(o&&P.some(ts)&&(m=Wo(m,o)),$=qe($,m))}return n.dirs&&($=qe($),$.dirs=$.dirs?$.dirs.concat(n.dirs):n.dirs),n.transition&&($.transition=n.transition),H=$,fn(y),H}const ko=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ut(n))&&((t||(t={}))[n]=e[n]);return t},Wo=(e,t)=>{const n={};for(const s in e)(!ts(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Vo(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Bs(s,o,f):!!o;if(c&8){const d=t.dynamicProps;for(let p=0;pe.__isSuspense;function zr(e,t){t&&t.pendingBranch?N(e)?t.effects.push(...e):t.effects.push(e):Uo(e)}function Yo(e,t){return En(e,null,t)}function Jc(e,t){return En(e,null,{flush:"post"})}const Jt={};function nn(e,t,n){return En(e,t,n)}function En(e,t,{immediate:n,deep:s,flush:r,onTrack:i,onTrigger:o}=te){var l;const c=Xi()===((l=le)==null?void 0:l.scope)?le:null;let f,d=!1,p=!1;if(ce(e)?(f=()=>e.value,d=cn(e)):dt(e)?(f=()=>e,s=!0):N(e)?(p=!0,d=e.some(P=>dt(P)||cn(P)),f=()=>e.map(P=>{if(ce(P))return P.value;if(dt(P))return tt(P);if(D(P))return We(P,c,2)})):D(e)?t?f=()=>We(e,c,2):f=()=>{if(!(c&&c.isUnmounted))return g&&g(),Ce(e,c,3,[w])}:f=Pe,t&&s){const P=f;f=()=>tt(P())}let g,w=P=>{g=y.onStop=()=>{We(P,c,4)}},A;if(vt)if(w=Pe,t?n&&Ce(t,c,3,[f(),p?[]:void 0,w]):f(),r==="sync"){const P=Wl();A=P.__watcherHandles||(P.__watcherHandles=[])}else return Pe;let I=p?new Array(e.length).fill(Jt):Jt;const H=()=>{if(y.active)if(t){const P=y.run();(s||d||(p?P.some((K,q)=>St(K,I[q])):St(P,I)))&&(g&&g(),Ce(t,c,3,[P,I===Jt?void 0:p&&I[0]===Jt?[]:I,w]),I=P)}else y.run()};H.allowRecurse=!!t;let m;r==="sync"?m=H:r==="post"?m=()=>de(H,c&&c.suspense):(H.pre=!0,c&&(H.id=c.uid),m=()=>vn(H));const y=new cs(f,m);t?n?H():I=y.run():r==="post"?de(y.run.bind(y),c&&c.suspense):y.run();const $=()=>{y.stop(),c&&c.scope&&ns(c.scope.effects,y)};return A&&A.push($),$}function Jo(e,t,n){const s=this.proxy,r=se(e)?e.includes(".")?Yr(s,e):()=>s[e]:e.bind(s,s);let i;D(t)?i=t:(i=t.handler,n=t);const o=le;yt(this);const l=En(r,i.bind(s),n);return o?yt(o):rt(),l}function Yr(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{tt(n,t)});else if(Tr(e))for(const n in e)tt(e[n],t);return e}function Xc(e,t){const n=ae;if(n===null)return e;const s=Pn(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let i=0;i{e.isMounted=!0}),Gr(()=>{e.isUnmounting=!0}),e}const ye=[Function,Array],Jr={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ye,onEnter:ye,onAfterEnter:ye,onEnterCancelled:ye,onBeforeLeave:ye,onLeave:ye,onAfterLeave:ye,onLeaveCancelled:ye,onBeforeAppear:ye,onAppear:ye,onAfterAppear:ye,onAppearCancelled:ye},Zo={name:"BaseTransition",props:Jr,setup(e,{slots:t}){const n=bi(),s=Xo();let r;return()=>{const i=t.default&&Zr(t.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const I of i)if(I.type!==be){o=I;break}}const l=J(e),{mode:c}=l;if(s.isLeaving)return Mn(o);const f=Us(o);if(!f)return Mn(o);const d=Vn(f,l,s,n);qn(f,d);const p=n.subTree,g=p&&Us(p);let w=!1;const{getTransitionKey:A}=f.type;if(A){const I=A();r===void 0?r=I:I!==r&&(r=I,w=!0)}if(g&&g.type!==be&&(!Ge(f,g)||w)){const I=Vn(g,l,s,n);if(qn(g,I),c==="out-in")return s.isLeaving=!0,I.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},Mn(o);c==="in-out"&&f.type!==be&&(I.delayLeave=(H,m,y)=>{const $=Xr(s,g);$[String(g.key)]=g,H._leaveCb=()=>{m(),H._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=y})}return o}}},Qo=Zo;function Xr(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Vn(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:f,onEnterCancelled:d,onBeforeLeave:p,onLeave:g,onAfterLeave:w,onLeaveCancelled:A,onBeforeAppear:I,onAppear:H,onAfterAppear:m,onAppearCancelled:y}=t,$=String(e.key),P=Xr(n,e),K=(x,U)=>{x&&Ce(x,s,9,U)},q=(x,U)=>{const B=U[1];K(x,U),N(x)?x.every(W=>W.length<=1)&&B():x.length<=1&&B()},k={mode:i,persisted:o,beforeEnter(x){let U=l;if(!n.isMounted)if(r)U=I||l;else return;x._leaveCb&&x._leaveCb(!0);const B=P[$];B&&Ge(e,B)&&B.el._leaveCb&&B.el._leaveCb(),K(U,[x])},enter(x){let U=c,B=f,W=d;if(!n.isMounted)if(r)U=H||c,B=m||f,W=y||d;else return;let F=!1;const V=x._enterCb=M=>{F||(F=!0,M?K(W,[x]):K(B,[x]),k.delayedLeave&&k.delayedLeave(),x._enterCb=void 0)};U?q(U,[x,V]):V()},leave(x,U){const B=String(e.key);if(x._enterCb&&x._enterCb(!0),n.isUnmounting)return U();K(p,[x]);let W=!1;const F=x._leaveCb=V=>{W||(W=!0,U(),V?K(A,[x]):K(w,[x]),x._leaveCb=void 0,P[B]===e&&delete P[B])};P[B]=e,g?q(g,[x,F]):F()},clone(x){return Vn(x,t,n,s)}};return k}function Mn(e){if(Dt(e))return e=qe(e),e.children=null,e}function Us(e){return Dt(e)?e.children?e.children[0]:void 0:e}function qn(e,t){e.shapeFlag&6&&e.component?qn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Zr(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;ioe({name:e.name},t,{setup:e}))():e}const gt=e=>!!e.type.__asyncLoader;function Zc(e){D(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,timeout:i,suspensible:o=!0,onError:l}=e;let c=null,f,d=0;const p=()=>(d++,c=null,g()),g=()=>{let w;return c||(w=c=t().catch(A=>{if(A=A instanceof Error?A:new Error(String(A)),l)return new Promise((I,H)=>{l(A,()=>I(p()),()=>H(A),d+1)});throw A}).then(A=>w!==c&&c?c:(A&&(A.__esModule||A[Symbol.toStringTag]==="Module")&&(A=A.default),f=A,A)))};return _s({name:"AsyncComponentWrapper",__asyncLoader:g,get __asyncResolved(){return f},setup(){const w=le;if(f)return()=>Ln(f,w);const A=y=>{c=null,jt(y,w,13,!s)};if(o&&w.suspense||vt)return g().then(y=>()=>Ln(y,w)).catch(y=>(A(y),()=>s?re(s,{error:y}):null));const I=ht(!1),H=ht(),m=ht(!!r);return r&&setTimeout(()=>{m.value=!1},r),i!=null&&setTimeout(()=>{if(!I.value&&!H.value){const y=new Error(`Async component timed out after ${i}ms.`);A(y),H.value=y}},i),g().then(()=>{I.value=!0,w.parent&&Dt(w.parent.vnode)&&vn(w.parent.update)}).catch(y=>{A(y),H.value=y}),()=>{if(I.value&&f)return Ln(f,w);if(H.value&&s)return re(s,{error:H.value});if(n&&!m.value)return re(n)}}})}function Ln(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=re(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const Dt=e=>e.type.__isKeepAlive;function Go(e,t){Qr(e,"a",t)}function el(e,t){Qr(e,"da",t)}function Qr(e,t,n=le){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(xn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Dt(r.parent.vnode)&&tl(s,t,n,r),r=r.parent}}function tl(e,t,n,s){const r=xn(t,e,s,!0);An(()=>{ns(s[t],r)},n)}function xn(e,t,n=le,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;wt(),yt(n);const l=Ce(t,n,e,o);return rt(),Ct(),l});return s?r.unshift(i):r.push(i),i}}const $e=e=>(t,n=le)=>(!vt||e==="sp")&&xn(e,(...s)=>t(...s),n),nl=$e("bm"),Tn=$e("m"),sl=$e("bu"),rl=$e("u"),Gr=$e("bum"),An=$e("um"),il=$e("sp"),ol=$e("rtg"),ll=$e("rtc");function cl(e,t=le){xn("ec",e,t)}const bs="components";function Qc(e,t){return ti(bs,e,!0,t)||e}const ei=Symbol.for("v-ndc");function Gc(e){return se(e)?ti(bs,e,!1)||e:e||ei}function ti(e,t,n=!0,s=!1){const r=ae||le;if(r){const i=r.type;if(e===bs){const l=Dl(i,!1);if(l&&(l===t||l===Le(t)||l===_n(Le(t))))return i}const o=js(r[e]||i[e],t)||js(r.appContext[e],t);return!o&&s?i:o}}function js(e,t){return e&&(e[t]||e[Le(t)]||e[_n(Le(t))])}function ea(e,t,n,s){let r;const i=n&&n[s];if(N(e)||se(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i&&i[l]));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lpn(t)?!(t.type===be||t.type===he&&!ni(t.children)):!0)?e:null}function na(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:en(s)]=e[s];return n}const zn=e=>e?yi(e)?Pn(e)||e.proxy:zn(e.parent):null,It=oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zn(e.parent),$root:e=>zn(e.root),$emit:e=>e.emit,$options:e=>ys(e),$forceUpdate:e=>e.f||(e.f=()=>vn(e.update)),$nextTick:e=>e.n||(e.n=kr.bind(e.proxy)),$watch:e=>Jo.bind(e)}),Sn=(e,t)=>e!==te&&!e.__isScriptSetup&&Y(e,t),al={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const w=o[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Sn(s,t))return o[t]=1,s[t];if(r!==te&&Y(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&Y(f,t))return o[t]=3,i[t];if(n!==te&&Y(n,t))return o[t]=4,n[t];Yn&&(o[t]=0)}}const d=It[t];let p,g;if(d)return t==="$attrs"&&pe(e,"get",t),d(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(n!==te&&Y(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,Y(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Sn(r,t)?(r[t]=n,!0):s!==te&&Y(s,t)?(s[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==te&&Y(e,o)||Sn(t,o)||(l=i[0])&&Y(l,o)||Y(s,o)||Y(It,o)||Y(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function sa(){return fl().slots}function fl(){const e=bi();return e.setupContext||(e.setupContext=wi(e))}function Ds(e){return N(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Yn=!0;function ul(e){const t=ys(e),n=e.proxy,s=e.ctx;Yn=!1,t.beforeCreate&&Ks(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:d,beforeMount:p,mounted:g,beforeUpdate:w,updated:A,activated:I,deactivated:H,beforeDestroy:m,beforeUnmount:y,destroyed:$,unmounted:P,render:K,renderTracked:q,renderTriggered:k,errorCaptured:x,serverPrefetch:U,expose:B,inheritAttrs:W,components:F,directives:V,filters:M}=t;if(f&&dl(f,s,null),o)for(const ne in o){const Q=o[ne];D(Q)&&(s[ne]=Q.bind(n))}if(r){const ne=r.call(n,n);ee(ne)&&(e.data=yn(ne))}if(Yn=!0,i)for(const ne in i){const Q=i[ne],ze=D(Q)?Q.bind(n,n):D(Q.get)?Q.get.bind(n,n):Pe,Kt=!D(Q)&&D(Q.set)?Q.set.bind(n):Pe,Ye=xe({get:ze,set:Kt});Object.defineProperty(s,ne,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ie=>Ye.value=Ie})}if(l)for(const ne in l)si(l[ne],s,n,ne);if(c){const ne=D(c)?c.call(n):c;Reflect.ownKeys(ne).forEach(Q=>{bl(Q,ne[Q])})}d&&Ks(d,e,"c");function X(ne,Q){N(Q)?Q.forEach(ze=>ne(ze.bind(n))):Q&&ne(Q.bind(n))}if(X(nl,p),X(Tn,g),X(sl,w),X(rl,A),X(Go,I),X(el,H),X(cl,x),X(ll,q),X(ol,k),X(Gr,y),X(An,P),X(il,U),N(B))if(B.length){const ne=e.exposed||(e.exposed={});B.forEach(Q=>{Object.defineProperty(ne,Q,{get:()=>n[Q],set:ze=>n[Q]=ze})})}else e.exposed||(e.exposed={});K&&e.render===Pe&&(e.render=K),W!=null&&(e.inheritAttrs=W),F&&(e.components=F),V&&(e.directives=V)}function dl(e,t,n=Pe){N(e)&&(e=Jn(e));for(const s in e){const r=e[s];let i;ee(r)?"default"in r?i=mt(r.from||s,r.default,!0):i=mt(r.from||s):i=mt(r),ce(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ks(e,t,n){Ce(N(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function si(e,t,n,s){const r=s.includes(".")?Yr(n,s):()=>n[s];if(se(e)){const i=t[e];D(i)&&nn(r,i)}else if(D(e))nn(r,e.bind(n));else if(ee(e))if(N(e))e.forEach(i=>si(i,t,n,s));else{const i=D(e.handler)?e.handler.bind(n):t[e.handler];D(i)&&nn(r,i,e)}}function ys(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>un(c,f,o,!0)),un(c,t,o)),ee(t)&&i.set(t,c),c}function un(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&un(e,i,n,!0),r&&r.forEach(o=>un(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=hl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const hl={data:ks,props:Ws,emits:Ws,methods:At,computed:At,beforeCreate:ue,created:ue,beforeMount:ue,mounted:ue,beforeUpdate:ue,updated:ue,beforeDestroy:ue,beforeUnmount:ue,destroyed:ue,unmounted:ue,activated:ue,deactivated:ue,errorCaptured:ue,serverPrefetch:ue,components:At,directives:At,watch:gl,provide:ks,inject:pl};function ks(e,t){return t?e?function(){return oe(D(e)?e.call(this,this):e,D(t)?t.call(this,this):t)}:t:e}function pl(e,t){return At(Jn(e),Jn(t))}function Jn(e){if(N(e)){const t={};for(let n=0;n1)return n&&D(t)?t.call(s&&s.proxy):t}}function yl(e,t,n,s=!1){const r={},i={};on(i,Rn,1),e.propsDefaults=Object.create(null),ii(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:To(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function vl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[g,w]=oi(p,t,!0);oe(o,g),w&&l.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!c)return ee(e)&&s.set(e,ft),ft;if(N(i))for(let d=0;d-1,w[1]=I<0||A-1||Y(w,"default"))&&l.push(p)}}}const f=[o,l];return ee(e)&&s.set(e,f),f}function Vs(e){return e[0]!=="$"}function qs(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function zs(e,t){return qs(e)===qs(t)}function Ys(e,t){return N(t)?t.findIndex(n=>zs(n,e)):D(t)&&zs(t,e)?0:-1}const li=e=>e[0]==="_"||e==="$stable",vs=e=>N(e)?e.map(Te):[Te(e)],wl=(e,t,n)=>{if(t._n)return t;const s=Ko((...r)=>vs(t(...r)),n);return s._c=!1,s},ci=(e,t,n)=>{const s=e._ctx;for(const r in e){if(li(r))continue;const i=e[r];if(D(i))t[r]=wl(r,i,s);else if(i!=null){const o=vs(i);t[r]=()=>o}}},ai=(e,t)=>{const n=vs(t);e.slots.default=()=>n},Cl=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=J(t),on(t,"_",n)):ci(t,e.slots={})}else e.slots={},t&&ai(e,t);on(e.slots,Rn,1)},El=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(oe(r,t),!n&&l===1&&delete r._):(i=!t.$stable,ci(t,r)),o=t}else t&&(ai(e,t),o={default:1});if(i)for(const l in r)!li(l)&&!(l in o)&&delete r[l]};function hn(e,t,n,s,r=!1){if(N(e)){e.forEach((g,w)=>hn(g,t&&(N(t)?t[w]:t),n,s,r));return}if(gt(s)&&!r)return;const i=s.shapeFlag&4?Pn(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,d=l.refs===te?l.refs={}:l.refs,p=l.setupState;if(f!=null&&f!==c&&(se(f)?(d[f]=null,Y(p,f)&&(p[f]=null)):ce(f)&&(f.value=null)),D(c))We(c,l,12,[o,d]);else{const g=se(c),w=ce(c);if(g||w){const A=()=>{if(e.f){const I=g?Y(p,c)?p[c]:d[c]:c.value;r?N(I)&&ns(I,i):N(I)?I.includes(i)||I.push(i):g?(d[c]=[i],Y(p,c)&&(p[c]=d[c])):(c.value=[i],e.k&&(d[e.k]=c.value))}else g?(d[c]=o,Y(p,c)&&(p[c]=o)):w&&(c.value=o,e.k&&(d[e.k]=o))};o?(A.id=-1,de(A,n)):A()}}}let Ue=!1;const Xt=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Zt=e=>e.nodeType===8;function xl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,d=(m,y)=>{if(!y.hasChildNodes()){n(null,m,y),an(),y._vnode=m;return}Ue=!1,p(y.firstChild,m,null,null,null),an(),y._vnode=m,Ue&&console.error("Hydration completed but contains mismatches.")},p=(m,y,$,P,K,q=!1)=>{const k=Zt(m)&&m.data==="[",x=()=>I(m,y,$,P,K,k),{type:U,ref:B,shapeFlag:W,patchFlag:F}=y;let V=m.nodeType;y.el=m,F===-2&&(q=!1,y.dynamicChildren=null);let M=null;switch(U){case bt:V!==3?y.children===""?(c(y.el=r(""),o(m),m),M=m):M=x():(m.data!==y.children&&(Ue=!0,m.data=y.children),M=i(m));break;case be:V!==8||k?M=x():M=i(m);break;case Ot:if(k&&(m=i(m),V=m.nodeType),V===1||V===3){M=m;const ge=!y.children.length;for(let X=0;X{q=q||!!y.dynamicChildren;const{type:k,props:x,patchFlag:U,shapeFlag:B,dirs:W}=y,F=k==="input"&&W||k==="option";if(F||U!==-1){if(W&&Oe(y,null,$,"created"),x)if(F||!q||U&48)for(const M in x)(F&&M.endsWith("value")||Ut(M)&&!Rt(M))&&s(m,M,null,x[M],!1,void 0,$);else x.onClick&&s(m,"onClick",null,x.onClick,!1,void 0,$);let V;if((V=x&&x.onVnodeBeforeMount)&&ve(V,$,y),W&&Oe(y,null,$,"beforeMount"),((V=x&&x.onVnodeMounted)||W)&&zr(()=>{V&&ve(V,$,y),W&&Oe(y,null,$,"mounted")},P),B&16&&!(x&&(x.innerHTML||x.textContent))){let M=w(m.firstChild,y,m,$,P,K,q);for(;M;){Ue=!0;const ge=M;M=M.nextSibling,l(ge)}}else B&8&&m.textContent!==y.children&&(Ue=!0,m.textContent=y.children)}return m.nextSibling},w=(m,y,$,P,K,q,k)=>{k=k||!!y.dynamicChildren;const x=y.children,U=x.length;for(let B=0;B{const{slotScopeIds:k}=y;k&&(K=K?K.concat(k):k);const x=o(m),U=w(i(m),y,x,$,P,K,q);return U&&Zt(U)&&U.data==="]"?i(y.anchor=U):(Ue=!0,c(y.anchor=f("]"),x,U),U)},I=(m,y,$,P,K,q)=>{if(Ue=!0,y.el=null,q){const U=H(m);for(;;){const B=i(m);if(B&&B!==U)l(B);else break}}const k=i(m),x=o(m);return l(m),n(null,y,x,k,$,P,Xt(x),K),k},H=m=>{let y=0;for(;m;)if(m=i(m),m&&Zt(m)&&(m.data==="["&&y++,m.data==="]")){if(y===0)return i(m);y--}return m};return[d,p]}const de=zr;function Tl(e){return fi(e)}function Al(e){return fi(e,xl)}function fi(e,t){const n=jn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:d,parentNode:p,nextSibling:g,setScopeId:w=Pe,insertStaticContent:A}=e,I=(a,u,h,b=null,_=null,E=null,R=!1,C=null,T=!!u.dynamicChildren)=>{if(a===u)return;a&&!Ge(a,u)&&(b=kt(a),Ie(a,_,E,!0),a=null),u.patchFlag===-2&&(T=!1,u.dynamicChildren=null);const{type:v,ref:L,shapeFlag:O}=u;switch(v){case bt:H(a,u,h,b);break;case be:m(a,u,h,b);break;case Ot:a==null&&y(u,h,b,R);break;case he:F(a,u,h,b,_,E,R,C,T);break;default:O&1?K(a,u,h,b,_,E,R,C,T):O&6?V(a,u,h,b,_,E,R,C,T):(O&64||O&128)&&v.process(a,u,h,b,_,E,R,C,T,ot)}L!=null&&_&&hn(L,a&&a.ref,E,u||a,!u)},H=(a,u,h,b)=>{if(a==null)s(u.el=l(u.children),h,b);else{const _=u.el=a.el;u.children!==a.children&&f(_,u.children)}},m=(a,u,h,b)=>{a==null?s(u.el=c(u.children||""),h,b):u.el=a.el},y=(a,u,h,b)=>{[a.el,a.anchor]=A(a.children,u,h,b,a.el,a.anchor)},$=({el:a,anchor:u},h,b)=>{let _;for(;a&&a!==u;)_=g(a),s(a,h,b),a=_;s(u,h,b)},P=({el:a,anchor:u})=>{let h;for(;a&&a!==u;)h=g(a),r(a),a=h;r(u)},K=(a,u,h,b,_,E,R,C,T)=>{R=R||u.type==="svg",a==null?q(u,h,b,_,E,R,C,T):U(a,u,_,E,R,C,T)},q=(a,u,h,b,_,E,R,C)=>{let T,v;const{type:L,props:O,shapeFlag:S,transition:j,dirs:z}=a;if(T=a.el=o(a.type,E,O&&O.is,O),S&8?d(T,a.children):S&16&&x(a.children,T,null,b,_,E&&L!=="foreignObject",R,C),z&&Oe(a,null,b,"created"),k(T,a,a.scopeId,R,b),O){for(const Z in O)Z!=="value"&&!Rt(Z)&&i(T,Z,null,O[Z],E,a.children,b,_,Se);"value"in O&&i(T,"value",null,O.value),(v=O.onVnodeBeforeMount)&&ve(v,b,a)}z&&Oe(a,null,b,"beforeMount");const G=(!_||_&&!_.pendingBranch)&&j&&!j.persisted;G&&j.beforeEnter(T),s(T,u,h),((v=O&&O.onVnodeMounted)||G||z)&&de(()=>{v&&ve(v,b,a),G&&j.enter(T),z&&Oe(a,null,b,"mounted")},_)},k=(a,u,h,b,_)=>{if(h&&w(a,h),b)for(let E=0;E{for(let v=T;v{const C=u.el=a.el;let{patchFlag:T,dynamicChildren:v,dirs:L}=u;T|=a.patchFlag&16;const O=a.props||te,S=u.props||te;let j;h&&Je(h,!1),(j=S.onVnodeBeforeUpdate)&&ve(j,h,u,a),L&&Oe(u,a,h,"beforeUpdate"),h&&Je(h,!0);const z=_&&u.type!=="foreignObject";if(v?B(a.dynamicChildren,v,C,h,b,z,E):R||Q(a,u,C,null,h,b,z,E,!1),T>0){if(T&16)W(C,u,O,S,h,b,_);else if(T&2&&O.class!==S.class&&i(C,"class",null,S.class,_),T&4&&i(C,"style",O.style,S.style,_),T&8){const G=u.dynamicProps;for(let Z=0;Z{j&&ve(j,h,u,a),L&&Oe(u,a,h,"updated")},b)},B=(a,u,h,b,_,E,R)=>{for(let C=0;C{if(h!==b){if(h!==te)for(const C in h)!Rt(C)&&!(C in b)&&i(a,C,h[C],null,R,u.children,_,E,Se);for(const C in b){if(Rt(C))continue;const T=b[C],v=h[C];T!==v&&C!=="value"&&i(a,C,v,T,R,u.children,_,E,Se)}"value"in b&&i(a,"value",h.value,b.value)}},F=(a,u,h,b,_,E,R,C,T)=>{const v=u.el=a?a.el:l(""),L=u.anchor=a?a.anchor:l("");let{patchFlag:O,dynamicChildren:S,slotScopeIds:j}=u;j&&(C=C?C.concat(j):j),a==null?(s(v,h,b),s(L,h,b),x(u.children,h,L,_,E,R,C,T)):O>0&&O&64&&S&&a.dynamicChildren?(B(a.dynamicChildren,S,h,_,E,R,C),(u.key!=null||_&&u===_.subTree)&&ws(a,u,!0)):Q(a,u,h,L,_,E,R,C,T)},V=(a,u,h,b,_,E,R,C,T)=>{u.slotScopeIds=C,a==null?u.shapeFlag&512?_.ctx.activate(u,h,b,R,T):M(u,h,b,_,E,R,T):ge(a,u,T)},M=(a,u,h,b,_,E,R)=>{const C=a.component=$l(a,b,_);if(Dt(a)&&(C.ctx.renderer=ot),Bl(C),C.asyncDep){if(_&&_.registerDep(C,X),!a.el){const T=C.subTree=re(be);m(null,T,u,h)}return}X(C,a,u,h,_,E,R)},ge=(a,u,h)=>{const b=u.component=a.component;if(Vo(a,u,h))if(b.asyncDep&&!b.asyncResolved){ne(b,u,h);return}else b.next=u,Bo(b.update),b.update();else u.el=a.el,b.vnode=u},X=(a,u,h,b,_,E,R)=>{const C=()=>{if(a.isMounted){let{next:L,bu:O,u:S,parent:j,vnode:z}=a,G=L,Z;Je(a,!1),L?(L.el=z.el,ne(a,L,R)):L=z,O&&tn(O),(Z=L.props&&L.props.onVnodeBeforeUpdate)&&ve(Z,j,L,z),Je(a,!0);const ie=On(a),Ee=a.subTree;a.subTree=ie,I(Ee,ie,p(Ee.el),kt(Ee),a,_,E),L.el=ie.el,G===null&&qo(a,ie.el),S&&de(S,_),(Z=L.props&&L.props.onVnodeUpdated)&&de(()=>ve(Z,j,L,z),_)}else{let L;const{el:O,props:S}=u,{bm:j,m:z,parent:G}=a,Z=gt(u);if(Je(a,!1),j&&tn(j),!Z&&(L=S&&S.onVnodeBeforeMount)&&ve(L,G,u),Je(a,!0),O&&Fn){const ie=()=>{a.subTree=On(a),Fn(O,a.subTree,a,_,null)};Z?u.type.__asyncLoader().then(()=>!a.isUnmounted&&ie()):ie()}else{const ie=a.subTree=On(a);I(null,ie,h,b,a,_,E),u.el=ie.el}if(z&&de(z,_),!Z&&(L=S&&S.onVnodeMounted)){const ie=u;de(()=>ve(L,G,ie),_)}(u.shapeFlag&256||G&>(G.vnode)&&G.vnode.shapeFlag&256)&&a.a&&de(a.a,_),a.isMounted=!0,u=h=b=null}},T=a.effect=new cs(C,()=>vn(v),a.scope),v=a.update=()=>T.run();v.id=a.uid,Je(a,!0),v()},ne=(a,u,h)=>{u.component=a;const b=a.vnode.props;a.vnode=u,a.next=null,vl(a,u.props,b,h),El(a,u.children,h),wt(),$s(),Ct()},Q=(a,u,h,b,_,E,R,C,T=!1)=>{const v=a&&a.children,L=a?a.shapeFlag:0,O=u.children,{patchFlag:S,shapeFlag:j}=u;if(S>0){if(S&128){Kt(v,O,h,b,_,E,R,C,T);return}else if(S&256){ze(v,O,h,b,_,E,R,C,T);return}}j&8?(L&16&&Se(v,_,E),O!==v&&d(h,O)):L&16?j&16?Kt(v,O,h,b,_,E,R,C,T):Se(v,_,E,!0):(L&8&&d(h,""),j&16&&x(O,h,b,_,E,R,C,T))},ze=(a,u,h,b,_,E,R,C,T)=>{a=a||ft,u=u||ft;const v=a.length,L=u.length,O=Math.min(v,L);let S;for(S=0;SL?Se(a,_,E,!0,!1,O):x(u,h,b,_,E,R,C,T,O)},Kt=(a,u,h,b,_,E,R,C,T)=>{let v=0;const L=u.length;let O=a.length-1,S=L-1;for(;v<=O&&v<=S;){const j=a[v],z=u[v]=T?Ke(u[v]):Te(u[v]);if(Ge(j,z))I(j,z,h,null,_,E,R,C,T);else break;v++}for(;v<=O&&v<=S;){const j=a[O],z=u[S]=T?Ke(u[S]):Te(u[S]);if(Ge(j,z))I(j,z,h,null,_,E,R,C,T);else break;O--,S--}if(v>O){if(v<=S){const j=S+1,z=jS)for(;v<=O;)Ie(a[v],_,E,!0),v++;else{const j=v,z=v,G=new Map;for(v=z;v<=S;v++){const me=u[v]=T?Ke(u[v]):Te(u[v]);me.key!=null&&G.set(me.key,v)}let Z,ie=0;const Ee=S-z+1;let lt=!1,As=0;const Et=new Array(Ee);for(v=0;v=Ee){Ie(me,_,E,!0);continue}let Fe;if(me.key!=null)Fe=G.get(me.key);else for(Z=z;Z<=S;Z++)if(Et[Z-z]===0&&Ge(me,u[Z])){Fe=Z;break}Fe===void 0?Ie(me,_,E,!0):(Et[Fe-z]=v+1,Fe>=As?As=Fe:lt=!0,I(me,u[Fe],h,null,_,E,R,C,T),ie++)}const Rs=lt?Rl(Et):ft;for(Z=Rs.length-1,v=Ee-1;v>=0;v--){const me=z+v,Fe=u[me],Ps=me+1{const{el:E,type:R,transition:C,children:T,shapeFlag:v}=a;if(v&6){Ye(a.component.subTree,u,h,b);return}if(v&128){a.suspense.move(u,h,b);return}if(v&64){R.move(a,u,h,ot);return}if(R===he){s(E,u,h);for(let O=0;OC.enter(E),_);else{const{leave:O,delayLeave:S,afterLeave:j}=C,z=()=>s(E,u,h),G=()=>{O(E,()=>{z(),j&&j()})};S?S(E,z,G):G()}else s(E,u,h)},Ie=(a,u,h,b=!1,_=!1)=>{const{type:E,props:R,ref:C,children:T,dynamicChildren:v,shapeFlag:L,patchFlag:O,dirs:S}=a;if(C!=null&&hn(C,null,h,a,!0),L&256){u.ctx.deactivate(a);return}const j=L&1&&S,z=!gt(a);let G;if(z&&(G=R&&R.onVnodeBeforeUnmount)&&ve(G,u,a),L&6)Si(a.component,h,b);else{if(L&128){a.suspense.unmount(h,b);return}j&&Oe(a,null,u,"beforeUnmount"),L&64?a.type.remove(a,u,h,_,ot,b):v&&(E!==he||O>0&&O&64)?Se(v,u,h,!1,!0):(E===he&&O&384||!_&&L&16)&&Se(T,u,h),b&&xs(a)}(z&&(G=R&&R.onVnodeUnmounted)||j)&&de(()=>{G&&ve(G,u,a),j&&Oe(a,null,u,"unmounted")},h)},xs=a=>{const{type:u,el:h,anchor:b,transition:_}=a;if(u===he){Li(h,b);return}if(u===Ot){P(a);return}const E=()=>{r(h),_&&!_.persisted&&_.afterLeave&&_.afterLeave()};if(a.shapeFlag&1&&_&&!_.persisted){const{leave:R,delayLeave:C}=_,T=()=>R(h,E);C?C(a.el,E,T):T()}else E()},Li=(a,u)=>{let h;for(;a!==u;)h=g(a),r(a),a=h;r(u)},Si=(a,u,h)=>{const{bum:b,scope:_,update:E,subTree:R,um:C}=a;b&&tn(b),_.stop(),E&&(E.active=!1,Ie(R,a,u,h)),C&&de(C,u),de(()=>{a.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},Se=(a,u,h,b=!1,_=!1,E=0)=>{for(let R=E;Ra.shapeFlag&6?kt(a.component.subTree):a.shapeFlag&128?a.suspense.next():g(a.anchor||a.el),Ts=(a,u,h)=>{a==null?u._vnode&&Ie(u._vnode,null,null,!0):I(u._vnode||null,a,u,null,null,null,h),$s(),an(),u._vnode=a},ot={p:I,um:Ie,m:Ye,r:xs,mt:M,mc:x,pc:Q,pbc:B,n:kt,o:e};let In,Fn;return t&&([In,Fn]=t(ot)),{render:Ts,hydrate:In,createApp:_l(Ts,In)}}function Je({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ws(e,t,n=!1){const s=e.children,r=t.children;if(N(s)&&N(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}const Pl=e=>e.__isTeleport,Ft=e=>e&&(e.disabled||e.disabled===""),Js=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Zn=(e,t)=>{const n=e&&e.to;return se(n)?t?t(n):null:n},Il={__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:d,pc:p,pbc:g,o:{insert:w,querySelector:A,createText:I,createComment:H}}=f,m=Ft(t.props);let{shapeFlag:y,children:$,dynamicChildren:P}=t;if(e==null){const K=t.el=I(""),q=t.anchor=I("");w(K,n,s),w(q,n,s);const k=t.target=Zn(t.props,A),x=t.targetAnchor=I("");k&&(w(x,k),o=o||Js(k));const U=(B,W)=>{y&16&&d($,B,W,r,i,o,l,c)};m?U(n,q):k&&U(k,x)}else{t.el=e.el;const K=t.anchor=e.anchor,q=t.target=e.target,k=t.targetAnchor=e.targetAnchor,x=Ft(e.props),U=x?n:q,B=x?K:k;if(o=o||Js(q),P?(g(e.dynamicChildren,P,U,r,i,o,l),ws(e,t,!0)):c||p(e,t,U,B,r,i,o,l,!1),m)x||Qt(t,n,K,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const W=t.target=Zn(t.props,A);W&&Qt(t,W,null,f,0)}else x&&Qt(t,q,k,f,1)}ui(t)},remove(e,t,n,s,{um:r,o:{remove:i}},o){const{shapeFlag:l,children:c,anchor:f,targetAnchor:d,target:p,props:g}=e;if(p&&i(d),(o||!Ft(g))&&(i(f),l&16))for(let w=0;w0?Re||ft:null,Ol(),Bt>0&&Re&&Re.push(e),e}function ia(e,t,n,s,r,i){return hi(mi(e,t,n,s,r,i,!0))}function pi(e,t,n,s,r){return hi(re(e,t,n,s,r,!0))}function pn(e){return e?e.__v_isVNode===!0:!1}function Ge(e,t){return e.type===t.type&&e.key===t.key}const Rn="__vInternal",gi=({key:e})=>e??null,sn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ce(e)||D(e)?{i:ae,r:e,k:t,f:!!n}:e:null);function mi(e,t=null,n=null,s=0,r=null,i=e===he?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&gi(t),ref:t&&sn(t),scopeId:Cn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ae};return l?(Cs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),Bt>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const re=Ml;function Ml(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===ei)&&(e=be),pn(e)){const l=qe(e,t,!0);return n&&Cs(l,n),Bt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(Kl(e)&&(e=e.__vccOpts),t){t=Ll(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=os(l)),ee(c)&&(Ur(c)&&!N(c)&&(c=oe({},c)),t.style=is(c))}const o=se(e)?1:zo(e)?128:Pl(e)?64:ee(e)?4:D(e)?2:0;return mi(e,t,n,s,r,o,i,!0)}function Ll(e){return e?Ur(e)||Rn in e?oe({},e):e:null}function qe(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?Sl(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&gi(l),ref:t&&t.ref?n&&r?N(r)?r.concat(sn(t)):[r,sn(t)]:sn(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==he?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&qe(e.ssContent),ssFallback:e.ssFallback&&qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function _i(e=" ",t=0){return re(bt,null,e,t)}function oa(e,t){const n=re(Ot,null,e);return n.staticCount=t,n}function la(e="",t=!1){return t?(di(),pi(be,null,e)):re(be,null,e)}function Te(e){return e==null||typeof e=="boolean"?re(be):N(e)?re(he,null,e.slice()):typeof e=="object"?Ke(e):re(bt,null,String(e))}function Ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:qe(e)}function Cs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(N(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Cs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Rn in t)?t._ctx=ae:r===3&&ae&&(ae.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else D(t)?(t={default:t,_ctx:ae},n=32):(t=String(t),s&64?(n=16,t=[_i(t)]):n=8);e.children=t,e.shapeFlag|=n}function Sl(...e){const t={};for(let n=0;nle||ae;let Es,ct,Zs="__VUE_INSTANCE_SETTERS__";(ct=jn()[Zs])||(ct=jn()[Zs]=[]),ct.push(e=>le=e),Es=e=>{ct.length>1?ct.forEach(t=>t(e)):ct[0](e)};const yt=e=>{Es(e),e.scope.on()},rt=()=>{le&&le.scope.off(),Es(null)};function yi(e){return e.vnode.shapeFlag&4}let vt=!1;function Bl(e,t=!1){vt=t;const{props:n,children:s}=e.vnode,r=yi(e);yl(e,n,r,t),Cl(e,s);const i=r?Ul(e,t):void 0;return vt=!1,i}function Ul(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Pt(new Proxy(e.ctx,al));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?wi(e):null;yt(e),wt();const i=We(s,e,0,[e.props,r]);if(Ct(),rt(),Er(i)){if(i.then(rt,rt),t)return i.then(o=>{Qs(e,o,t)}).catch(o=>{jt(o,e,0)});e.asyncDep=i}else Qs(e,i,t)}else vi(e,t)}function Qs(e,t,n){D(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Dr(t)),vi(e,n)}let Gs;function vi(e,t,n){const s=e.type;if(!e.render){if(!t&&Gs&&!s.render){const r=s.template||ys(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=oe(oe({isCustomElement:i,delimiters:l},o),c);s.render=Gs(r,f)}}e.render=s.render||Pe}yt(e),wt(),ul(e),Ct(),rt()}function jl(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return pe(e,"get","$attrs"),t[n]}}))}function wi(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return jl(e)},slots:e.slots,emit:e.emit,expose:t}}function Pn(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Dr(Pt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in It)return It[n](e)},has(t,n){return n in t||n in It}}))}function Dl(e,t=!0){return D(e)?e.displayName||e.name:e.name||t&&e.__name}function Kl(e){return D(e)&&"__vccOpts"in e}const xe=(e,t)=>No(e,t,vt);function Qn(e,t,n){const s=arguments.length;return s===2?ee(t)&&!N(t)?pn(t)?re(e,null,[t]):re(e,t):re(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pn(n)&&(n=[n]),re(e,t,n))}const kl=Symbol.for("v-scx"),Wl=()=>mt(kl),Vl="3.3.4",ql="http://www.w3.org/2000/svg",et=typeof document<"u"?document:null,er=et&&et.createElement("template"),zl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t?et.createElementNS(ql,e):et.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>et.createTextNode(e),createComment:e=>et.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>et.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{er.innerHTML=s?`${e}`:e;const l=er.content;if(s){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Yl(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Jl(e,t,n){const s=e.style,r=se(n);if(n&&!r){if(t&&!se(t))for(const i in t)n[i]==null&&Gn(s,i,"");for(const i in n)Gn(s,i,n[i])}else{const i=s.display;r?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const tr=/\s*!important$/;function Gn(e,t,n){if(N(n))n.forEach(s=>Gn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Xl(e,t);tr.test(n)?e.setProperty(it(s),n.replace(tr,""),"important"):e[s]=n}}const nr=["Webkit","Moz","ms"],Nn={};function Xl(e,t){const n=Nn[t];if(n)return n;let s=Le(t);if(s!=="filter"&&s in e)return Nn[t]=s;s=_n(s);for(let r=0;rHn||(nc.then(()=>Hn=0),Hn=Date.now());function rc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Ce(ic(s,n.value),t,5,[s])};return n.value=e,n.attached=sc(),n}function ic(e,t){if(N(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ir=/^on[a-z]/,oc=(e,t,n,s,r=!1,i,o,l,c)=>{t==="class"?Yl(e,s,r):t==="style"?Jl(e,n,s):Ut(t)?ts(t)||ec(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):lc(e,t,s,r))?Ql(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Zl(e,t,s,r))};function lc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&ir.test(t)&&D(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ir.test(t)&&se(n)?!1:t in e}const je="transition",xt="animation",Ci=(e,{slots:t})=>Qn(Qo,cc(e),t);Ci.displayName="Transition";const Ei={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ci.props=oe({},Jr,Ei);const Xe=(e,t=[])=>{N(e)?e.forEach(n=>n(...t)):e&&e(...t)},or=e=>e?N(e)?e.some(t=>t.length>1):e.length>1:!1;function cc(e){const t={};for(const F in e)F in Ei||(t[F]=e[F]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:d=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,A=ac(r),I=A&&A[0],H=A&&A[1],{onBeforeEnter:m,onEnter:y,onEnterCancelled:$,onLeave:P,onLeaveCancelled:K,onBeforeAppear:q=m,onAppear:k=y,onAppearCancelled:x=$}=t,U=(F,V,M)=>{Ze(F,V?d:l),Ze(F,V?f:o),M&&M()},B=(F,V)=>{F._isLeaving=!1,Ze(F,p),Ze(F,w),Ze(F,g),V&&V()},W=F=>(V,M)=>{const ge=F?k:y,X=()=>U(V,F,M);Xe(ge,[V,X]),lr(()=>{Ze(V,F?c:i),De(V,F?d:l),or(ge)||cr(V,s,I,X)})};return oe(t,{onBeforeEnter(F){Xe(m,[F]),De(F,i),De(F,o)},onBeforeAppear(F){Xe(q,[F]),De(F,c),De(F,f)},onEnter:W(!1),onAppear:W(!0),onLeave(F,V){F._isLeaving=!0;const M=()=>B(F,V);De(F,p),dc(),De(F,g),lr(()=>{F._isLeaving&&(Ze(F,p),De(F,w),or(P)||cr(F,s,H,M))}),Xe(P,[F,M])},onEnterCancelled(F){U(F,!1),Xe($,[F])},onAppearCancelled(F){U(F,!0),Xe(x,[F])},onLeaveCancelled(F){B(F),Xe(K,[F])}})}function ac(e){if(e==null)return null;if(ee(e))return[$n(e.enter),$n(e.leave)];{const t=$n(e);return[t,t]}}function $n(e){return Di(e)}function De(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Ze(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function lr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let fc=0;function cr(e,t,n,s){const r=e._endId=++fc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=uc(e,t);if(!o)return s();const f=o+"end";let d=0;const p=()=>{e.removeEventListener(f,g),i()},g=w=>{w.target===e&&++d>=c&&p()};setTimeout(()=>{d(n[A]||"").split(", "),r=s(`${je}Delay`),i=s(`${je}Duration`),o=ar(r,i),l=s(`${xt}Delay`),c=s(`${xt}Duration`),f=ar(l,c);let d=null,p=0,g=0;t===je?o>0&&(d=je,p=o,g=i.length):t===xt?f>0&&(d=xt,p=f,g=c.length):(p=Math.max(o,f),d=p>0?o>f?je:xt:null,g=d?d===je?i.length:c.length:0);const w=d===je&&/\b(transform|all)(,|$)/.test(s(`${je}Property`).toString());return{type:d,timeout:p,propCount:g,hasTransform:w}}function ar(e,t){for(;e.lengthfr(n)+fr(e[s])))}function fr(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function dc(){return document.body.offsetHeight}const ur=e=>{const t=e.props["onUpdate:modelValue"]||!1;return N(t)?n=>tn(t,n):t};function hc(e){e.target.composing=!0}function dr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ca={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e._assign=ur(r);const i=s||r.props&&r.props.type==="number";at(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Un(l)),e._assign(l)}),n&&at(e,"change",()=>{e.value=e.value.trim()}),t||(at(e,"compositionstart",hc),at(e,"compositionend",dr),at(e,"change",dr))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:s,number:r}},i){if(e._assign=ur(i),e.composing||document.activeElement===e&&e.type!=="range"&&(n||s&&e.value.trim()===t||(r||e.type==="number")&&Un(e.value)===t))return;const o=t??"";e.value!==o&&(e.value=o)}},pc=["ctrl","shift","alt","meta"],gc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>pc.some(n=>e[`${n}Key`]&&!t.includes(n))},aa=(e,t)=>(n,...s)=>{for(let r=0;rn=>{if(!("key"in n))return;const s=it(n.key);if(t.some(r=>r===s||mc[r]===s))return e(n)},xi=oe({patchProp:oc},zl);let Lt,hr=!1;function _c(){return Lt||(Lt=Tl(xi))}function bc(){return Lt=hr?Lt:Al(xi),hr=!0,Lt}const ua=(...e)=>{const t=_c().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ti(s);if(!r)return;const i=t._component;!D(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.innerHTML="";const o=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},da=(...e)=>{const t=bc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ti(s);if(r)return n(r,!0,r instanceof SVGElement)},t};function Ti(e){return se(e)?document.querySelector(e):e}const ha=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},yc="modulepreload",vc=function(e){return"/"+e},pr={},pa=function(t,n,s){if(!n||n.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=vc(i),i in pr)return;pr[i]=!0;const o=i.endsWith(".css"),l=o?'[rel="stylesheet"]':"";if(!!s)for(let d=r.length-1;d>=0;d--){const p=r[d];if(p.href===i&&(!o||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const f=document.createElement("link");if(f.rel=o?"stylesheet":yc,o||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),o)return new Promise((d,p)=>{f.addEventListener("load",d),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},wc=window.__VP_SITE_DATA__,Ai=/^[a-z]+:/i,ga=/^pathname:\/\//,ma="vitepress-theme-appearance",Ri=/#.*$/,Cc=/(index)?\.(md|html)$/,we=typeof document<"u",Pi={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Ec(e,t,n=!1){if(t===void 0)return!1;if(e=gr(`/${e}`),n)return new RegExp(t).test(e);if(gr(t)!==e)return!1;const s=t.match(Ri);return s?(we?location.hash:"")===s[0]:!0}function gr(e){return decodeURI(e).replace(Ri,"").replace(Cc,"")}function xc(e){return Ai.test(e)}function Tc(e,t){var s,r,i,o,l,c,f;const n=Object.keys(e.locales).find(d=>d!=="root"&&!xc(d)&&Ec(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Fi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Ii(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=Ac(e.title,s);return`${n}${r}`}function Ac(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Rc(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Fi(e,t){return[...e.filter(n=>!Rc(t,n)),...t]}const Pc=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ic=/^[a-z]:/i;function mr(e){const t=Ic.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Pc,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Fc=Symbol(),nt=Ao(wc);function _a(e){const t=xe(()=>Tc(nt.value,e.data.relativePath));return{site:t,theme:xe(()=>t.value.themeConfig),page:xe(()=>e.data),frontmatter:xe(()=>e.data.frontmatter),params:xe(()=>e.data.params),lang:xe(()=>t.value.lang),dir:xe(()=>t.value.dir),localeIndex:xe(()=>t.value.localeIndex||"root"),title:xe(()=>Ii(t.value,e.data)),description:xe(()=>e.data.description||t.value.description),isDark:ht(!1)}}function ba(){const e=mt(Fc);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Oc(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function _r(e){return Ai.test(e)||e.startsWith(".")?e:Oc(nt.value.base,e)}function Mc(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),we){const n="/";t=mr(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${mr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let rn=[];function ya(e){rn.push(e),An(()=>{rn=rn.filter(t=>t!==e)})}const Lc=Symbol(),br="http://a.com",Sc=()=>({path:"/",component:null,data:Pi});function va(e,t){const n=yn(Sc()),s={route:n,go:r};async function r(l=we?location.href:"/"){var f,d;if(await((f=s.onBeforeRouteChange)==null?void 0:f.call(s,l))===!1)return;const c=new URL(l,br);nt.value.cleanUrls||!c.pathname.endsWith("/")&&!c.pathname.endsWith(".html")&&(c.pathname+=".html",l=c.pathname+c.search+c.hash),we&&l!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l)),await o(l),await((d=s.onAfterRouteChanged)==null?void 0:d.call(s,l))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const d=new URL(l,br),p=i=d.pathname;try{let w=await e(p);if(!w)throw new Error(`Page not found: ${p}`);if(i===p){i=null;const{default:A,__pageData:I}=w;if(!A)throw new Error(`Invalid route component: ${A}`);n.path=we?p:_r(p),n.component=Pt(A),n.data=Pt(I),we&&kr(()=>{let H=nt.value.base+I.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!nt.value.cleanUrls&&!H.endsWith("/")&&(H+=".html"),H!==d.pathname&&(d.pathname=H,l=H+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let m=null;try{m=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(y){console.warn(y)}if(m){yr(m,d.hash);return}}window.scrollTo(0,c)})}}catch(w){if(!/fetch|Page not found/.test(w.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(w),!f)try{const A=await fetch(nt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await A.json(),await o(l,c,!0);return}catch{}i===p&&(i=null,n.path=we?p:_r(p),n.component=t?Pt(t):null,n.data=Pi)}}return we&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const f=l.target.closest("a");if(f&&!f.closest(".vp-raw")&&(f instanceof SVGElement||!f.download)){const{target:d}=f,{href:p,origin:g,pathname:w,hash:A,search:I}=new URL(f.href instanceof SVGAnimatedString?f.href.animVal:f.href,f.baseURI),H=window.location,m=w.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&g===H.origin&&!(m&&m[0]!==".html")&&(l.preventDefault(),w===H.pathname&&I===H.search?A&&(A!==H.hash&&(history.pushState(null,"",A),window.dispatchEvent(new Event("hashchange"))),yr(f,A,f.classList.contains("header-anchor"))):r(p))}},{capture:!0}),window.addEventListener("popstate",l=>{o(location.href,l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Nc(){const e=mt(Lc);if(!e)throw new Error("useRouter() is called without provider.");return e}function Oi(){return Nc().route}function yr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let c=function(){!n||Math.abs(l-window.scrollY)>window.innerHeight?window.scrollTo(0,l):window.scrollTo({left:0,top:l,behavior:"smooth"})};const r=nt.value.scrollOffset;let i=0;if(typeof r=="number")i=r;else if(typeof r=="string")i=vr(r);else if(Array.isArray(r))for(const f of r){const d=vr(f);if(d){i=d;break}}const o=parseInt(window.getComputedStyle(s).paddingTop,10),l=window.scrollY+s.getBoundingClientRect().top-i+o;requestAnimationFrame(c)}}function vr(e){const t=document.querySelector(e);if(!t)return 0;const n=t.getBoundingClientRect().bottom;return n<0?0:n+24}const wr=()=>rn.forEach(e=>e()),wa=_s({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Oi();return()=>Qn(e.as,{style:{position:"relative"}},[t.component?Qn(t.component,{onVnodeMounted:wr,onVnodeUpdated:wr}):"404 Page Not Found"])}}),Ca=_s({setup(e,{slots:t}){const n=ht(!1);return Tn(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Ea(){we&&window.addEventListener("click",e=>{var n,s;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement,i=Array.from((r==null?void 0:r.querySelectorAll("input"))||[]).indexOf(t),o=r==null?void 0:r.querySelector('div[class*="language-"].active'),l=(s=r==null?void 0:r.querySelectorAll('div[class*="language-"]:not(.language-id)'))==null?void 0:s[i];o&&l&&o!==l&&(o.classList.remove("active"),l.classList.add("active"))}})}function xa(){if(we){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className);let l="";i.querySelectorAll("span.line:not(.diff.remove)").forEach(c=>l+=(c.textContent||"")+` -`),l=l.slice(0,-1),o&&(l=l.replace(/^ *(\$|>) /gm,"").trim()),Hc(l).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,c)})}})}}async function Hc(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Ta(e,t){let n=[],s=!0;const r=i=>{if(s){s=!1;return}n.forEach(o=>document.head.removeChild(o)),n=[],i.forEach(o=>{const l=$c(o);document.head.appendChild(l),n.push(l)})};Yo(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[];document.title=Ii(o,i),document.querySelector("meta[name=description]").setAttribute("content",l||o.description),r(Fi(o.head,Uc(c)))})}function $c([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),s}function Bc(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Uc(e){return e.filter(t=>!Bc(t))}const Bn=new Set,Mi=()=>document.createElement("link"),jc=e=>{const t=Mi();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Dc=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let Gt;const Kc=we&&(Gt=Mi())&&Gt.relList&&Gt.relList.supports&&Gt.relList.supports("prefetch")?jc:Dc;function Aa(){if(!we||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Bn.has(c)){Bn.add(c);const f=Mc(c);f&&Kc(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Bn.add(l))})})};Tn(s);const r=Oi();nn(()=>r.path,s),An(()=>{n&&n.disconnect()})}export{bl as $,Yo as A,bi as B,ce as C,Ao as D,kr as E,rl as F,An as G,Qc as H,he as I,ea as J,ya as K,re as L,Ec as M,Gc as N,Ai as O,ga as P,Oi as Q,Sl as R,mt as S,Ci as T,is as U,oa as V,we as W,ma as X,Zc as Y,pa as Z,ha as _,_i as a,fa as a0,na as a1,Jc as a2,aa as a3,sa as a4,Qn as a5,Ta as a6,Lc as a7,_a as a8,Fc as a9,wa as aa,Ca as ab,nt as ac,da as ad,va as ae,Mc as af,Aa as ag,xa as ah,Ea as ai,Nc as aj,Gr as ak,Xc as al,ca as am,ra as an,Pt as ao,ua as ap,pi as b,ia as c,_s as d,la as e,_r as f,xe as g,ht as h,xc as i,Tn as j,mi as k,Po as l,Yc as m,os as n,di as o,zc as p,qc as q,ta as r,Br as s,kc as t,ba as u,Vc as v,Ko as w,Xi as x,Wc as y,nn as z}; diff --git a/assets/chunks/theme.62df67d0.js b/assets/chunks/theme.62df67d0.js deleted file mode 100644 index a8c049e36..000000000 --- a/assets/chunks/theme.62df67d0.js +++ /dev/null @@ -1,7 +0,0 @@ -import{d as y,o as a,c as l,r as _,n as T,a as O,t as C,_ as g,b as P,w as p,T as Ie,e as m,u as Ct,i as At,P as Tt,f as Ne,g as w,h as L,j as R,k as v,l as i,p as F,m as j,q as Bt,s as Ce,v as xt,x as Ot,y as Et,z as K,A as ee,B as Dt,C as Ht,D as le,E as at,F as zt,G as Ae,H as X,I as A,J as E,K as se,L as h,M as te,N as Q,O as rt,Q as ce,R as fe,S as Te,U as it,V as Ft,W as lt,X as We,Y as jt,Z as Gt,$ as he,a0 as Rt,a1 as Ut,a2 as Wt,a3 as Kt,a4 as Yt}from"./framework.410404a1.js";const qt=y({__name:"VPBadge",props:{text:{},type:{}},setup(t){return(e,n)=>(a(),l("span",{class:T(["VPBadge",e.type??"tip"])},[_(e.$slots,"default",{},()=>[O(C(e.text),1)],!0)],2))}});const Jt=g(qt,[["__scopeId","data-v-350d3852"]]),Xt={key:0,class:"VPBackdrop"},Qt=y({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(t){return(e,n)=>(a(),P(Ie,{name:"fade"},{default:p(()=>[e.show?(a(),l("div",Xt)):m("",!0)]),_:1}))}});const Zt=g(Qt,[["__scopeId","data-v-c79a1216"]]),I=Ct;function en(t,e){let n,o=!1;return()=>{n&&clearTimeout(n),o?n=setTimeout(t,e):(t(),o=!0,setTimeout(()=>{o=!1},e))}}function Se(t){return/^\//.test(t)?t:`/${t}`}function ae(t){if(At(t))return t.replace(Tt,"");const{site:e}=I(),{pathname:n,search:o,hash:s}=new URL(t,"http://a.com"),r=n.endsWith("/")||n.endsWith(".html")?t:t.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,e.value.cleanUrls?"":".html")}${o}${s}`);return Ne(r)}function ue({removeCurrent:t=!0,correspondingLink:e=!1}={}){const{site:n,localeIndex:o,page:s,theme:r}=I(),d=w(()=>{var c,f;return{label:(c=n.value.locales[o.value])==null?void 0:c.label,link:((f=n.value.locales[o.value])==null?void 0:f.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:w(()=>Object.entries(n.value.locales).flatMap(([c,f])=>t&&d.value.label===f.label?[]:{text:f.label,link:tn(f.link||(c==="root"?"/":`/${c}/`),r.value.i18nRouting!==!1&&e,s.value.relativePath.slice(d.value.link.length-1),!n.value.cleanUrls)})),currentLang:d}}function tn(t,e,n,o){return e?t.replace(/\/$/,"")+Se(n.replace(/(^|\/)?index.md$/,"$1").replace(/\.md$/,o?".html":"")):t}const ke=t=>(F("data-v-c70503b8"),t=t(),j(),t),nn={class:"NotFound"},on=ke(()=>v("p",{class:"code"},"404",-1)),sn=ke(()=>v("h1",{class:"title"},"PAGE NOT FOUND",-1)),an=ke(()=>v("div",{class:"divider"},null,-1)),rn=ke(()=>v("blockquote",{class:"quote"}," But if you don't change your direction, and if you keep looking, you may end up where you are heading. ",-1)),ln={class:"action"},cn=["href"],un=y({__name:"NotFound",setup(t){const{site:e}=I(),{localeLinks:n}=ue({removeCurrent:!1}),o=L("/");return R(()=>{var r;const s=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(o.value=((r=n.value.find(({link:d})=>d.startsWith(s)))==null?void 0:r.link)||n.value[0].link)}),(s,r)=>(a(),l("div",nn,[on,sn,an,rn,v("div",ln,[v("a",{class:"link",href:i(Ne)(o.value),"aria-label":"go to home"}," Take me home ",8,cn)])]))}});const dn=g(un,[["__scopeId","data-v-c70503b8"]]);function Be(t){return Ot()?(Et(t),!0):!1}function U(t){return typeof t=="function"?t():i(t)}const ct=typeof window<"u",re=()=>{},Ke=_n();function _n(){var t;return ct&&((t=window==null?void 0:window.navigator)==null?void 0:t.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent)}function vn(t,e){function n(...o){return new Promise((s,r)=>{Promise.resolve(t(()=>e.apply(this,o),{fn:e,thisArg:this,args:o})).then(s).catch(r)})}return n}const ut=t=>t();function pn(t,e={}){let n,o,s=re;const r=u=>{clearTimeout(u),s(),s=re};return u=>{const c=U(t),f=U(e.maxWait);return n&&r(n),c<=0||f!==void 0&&f<=0?(o&&(r(o),o=null),Promise.resolve(u())):new Promise((b,k)=>{s=e.rejectOnCancel?k:b,f&&!o&&(o=setTimeout(()=>{n&&r(n),o=null,b(u())},f)),n=setTimeout(()=>{o&&r(o),o=null,b(u())},c)})}}function fn(t=ut){const e=L(!0);function n(){e.value=!1}function o(){e.value=!0}const s=(...r)=>{e.value&&t(...r)};return{isActive:Ce(e),pause:n,resume:o,eventFilter:s}}function dt(...t){if(t.length!==1)return Bt(...t);const e=t[0];return typeof e=="function"?Ce(xt(()=>({get:e,set:re}))):L(e)}var Ye=Object.getOwnPropertySymbols,hn=Object.prototype.hasOwnProperty,mn=Object.prototype.propertyIsEnumerable,gn=(t,e)=>{var n={};for(var o in t)hn.call(t,o)&&e.indexOf(o)<0&&(n[o]=t[o]);if(t!=null&&Ye)for(var o of Ye(t))e.indexOf(o)<0&&mn.call(t,o)&&(n[o]=t[o]);return n};function _t(t,e,n={}){const o=n,{eventFilter:s=ut}=o,r=gn(o,["eventFilter"]);return K(t,vn(s,e),r)}var yn=Object.defineProperty,bn=Object.defineProperties,$n=Object.getOwnPropertyDescriptors,me=Object.getOwnPropertySymbols,vt=Object.prototype.hasOwnProperty,pt=Object.prototype.propertyIsEnumerable,qe=(t,e,n)=>e in t?yn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,kn=(t,e)=>{for(var n in e||(e={}))vt.call(e,n)&&qe(t,n,e[n]);if(me)for(var n of me(e))pt.call(e,n)&&qe(t,n,e[n]);return t},Pn=(t,e)=>bn(t,$n(e)),wn=(t,e)=>{var n={};for(var o in t)vt.call(t,o)&&e.indexOf(o)<0&&(n[o]=t[o]);if(t!=null&&me)for(var o of me(t))e.indexOf(o)<0&&pt.call(t,o)&&(n[o]=t[o]);return n};function Ol(t,e,n={}){const o=n,{debounce:s=0,maxWait:r=void 0}=o,d=wn(o,["debounce","maxWait"]);return _t(t,e,Pn(kn({},d),{eventFilter:pn(s,{maxWait:r})}))}var Vn=Object.defineProperty,Sn=Object.defineProperties,Ln=Object.getOwnPropertyDescriptors,ge=Object.getOwnPropertySymbols,ft=Object.prototype.hasOwnProperty,ht=Object.prototype.propertyIsEnumerable,Je=(t,e,n)=>e in t?Vn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Mn=(t,e)=>{for(var n in e||(e={}))ft.call(e,n)&&Je(t,n,e[n]);if(ge)for(var n of ge(e))ht.call(e,n)&&Je(t,n,e[n]);return t},In=(t,e)=>Sn(t,Ln(e)),Nn=(t,e)=>{var n={};for(var o in t)ft.call(t,o)&&e.indexOf(o)<0&&(n[o]=t[o]);if(t!=null&&ge)for(var o of ge(t))e.indexOf(o)<0&&ht.call(t,o)&&(n[o]=t[o]);return n};function Cn(t,e,n={}){const o=n,{eventFilter:s}=o,r=Nn(o,["eventFilter"]),{eventFilter:d,pause:u,resume:c,isActive:f}=fn(s);return{stop:_t(t,e,In(Mn({},r),{eventFilter:d})),pause:u,resume:c,isActive:f}}function El(t,e,n){let o;Ht(n)?o={evaluating:n}:o=n||{};const{lazy:s=!1,evaluating:r=void 0,shallow:d=!0,onError:u=re}=o,c=L(!s),f=d?le(e):L(e);let b=0;return ee(async k=>{if(!c.value)return;b++;const N=b;let V=!1;r&&Promise.resolve().then(()=>{r.value=!0});try{const $=await t(M=>{k(()=>{r&&(r.value=!1),V||M()})});N===b&&(f.value=$)}catch($){u($)}finally{r&&N===b&&(r.value=!1),V=!0}}),s?w(()=>(c.value=!0,f.value)):f}function An(t){var e;const n=U(t);return(e=n==null?void 0:n.$el)!=null?e:n}const W=ct?window:void 0;function ie(...t){let e,n,o,s;if(typeof t[0]=="string"||Array.isArray(t[0])?([n,o,s]=t,e=W):[e,n,o,s]=t,!e)return re;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const r=[],d=()=>{r.forEach(b=>b()),r.length=0},u=(b,k,N,V)=>(b.addEventListener(k,N,V),()=>b.removeEventListener(k,N,V)),c=K(()=>[An(e),U(s)],([b,k])=>{d(),b&&r.push(...n.flatMap(N=>o.map(V=>u(b,N,V,k))))},{immediate:!0,flush:"post"}),f=()=>{c(),d()};return Be(f),f}function Tn(t){return typeof t=="function"?t:typeof t=="string"?e=>e.key===t:Array.isArray(t)?e=>t.includes(e.key):()=>!0}function Xe(...t){let e,n,o={};t.length===3?(e=t[0],n=t[1],o=t[2]):t.length===2?typeof t[1]=="object"?(e=!0,n=t[0],o=t[1]):(e=t[0],n=t[1]):(e=!0,n=t[0]);const{target:s=W,eventName:r="keydown",passive:d=!1,dedupe:u=!1}=o,c=Tn(e);return ie(s,r,b=>{b.repeat&&U(u)||c(b)&&n(b)},d)}function Bn(){const t=L(!1);return Dt()&&R(()=>{t.value=!0}),t}function xn(t){const e=Bn();return w(()=>(e.value,!!t()))}function Le(t,e={}){const{window:n=W}=e,o=xn(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const r=L(!1),d=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",u):s.removeListener(u))},u=()=>{o.value&&(d(),s=n.matchMedia(dt(t).value),r.value=!!(s!=null&&s.matches),s&&("addEventListener"in s?s.addEventListener("change",u):s.addListener(u)))};return ee(u),Be(()=>d()),r}const ve=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},pe="__vueuse_ssr_handlers__",On=En();function En(){return pe in ve||(ve[pe]=ve[pe]||{}),ve[pe]}function Dn(t,e){return On[t]||e}function Hn(t){return t==null?"any":t instanceof Set?"set":t instanceof Map?"map":t instanceof Date?"date":typeof t=="boolean"?"boolean":typeof t=="string"?"string":typeof t=="object"?"object":Number.isNaN(t)?"any":"number"}var zn=Object.defineProperty,Qe=Object.getOwnPropertySymbols,Fn=Object.prototype.hasOwnProperty,jn=Object.prototype.propertyIsEnumerable,Ze=(t,e,n)=>e in t?zn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,et=(t,e)=>{for(var n in e||(e={}))Fn.call(e,n)&&Ze(t,n,e[n]);if(Qe)for(var n of Qe(e))jn.call(e,n)&&Ze(t,n,e[n]);return t};const Gn={boolean:{read:t=>t==="true",write:t=>String(t)},object:{read:t=>JSON.parse(t),write:t=>JSON.stringify(t)},number:{read:t=>Number.parseFloat(t),write:t=>String(t)},any:{read:t=>t,write:t=>String(t)},string:{read:t=>t,write:t=>String(t)},map:{read:t=>new Map(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t.entries()))},set:{read:t=>new Set(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t))},date:{read:t=>new Date(t),write:t=>t.toISOString()}},tt="vueuse-storage";function mt(t,e,n,o={}){var s;const{flush:r="pre",deep:d=!0,listenToStorageChanges:u=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:b,window:k=W,eventFilter:N,onError:V=B=>{console.error(B)}}=o,$=(b?le:L)(e);if(!n)try{n=Dn("getDefaultStorage",()=>{var B;return(B=W)==null?void 0:B.localStorage})()}catch(B){V(B)}if(!n)return $;const M=U(e),S=Hn(M),x=(s=o.serializer)!=null?s:Gn[S],{pause:z,resume:H}=Cn($,()=>de($.value),{flush:r,deep:d,eventFilter:N});return k&&u&&(ie(k,"storage",we),ie(k,tt,Nt)),we(),$;function de(B){try{if(B==null)n.removeItem(t);else{const D=x.write(B),q=n.getItem(t);q!==D&&(n.setItem(t,D),k&&k.dispatchEvent(new CustomEvent(tt,{detail:{key:t,oldValue:q,newValue:D,storageArea:n}})))}}catch(D){V(D)}}function _e(B){const D=B?B.newValue:n.getItem(t);if(D==null)return c&&M!==null&&n.setItem(t,x.write(M)),M;if(!B&&f){const q=x.read(D);return typeof f=="function"?f(q,M):S==="object"&&!Array.isArray(q)?et(et({},M),q):q}else return typeof D!="string"?D:x.read(D)}function Nt(B){we(B.detail)}function we(B){if(!(B&&B.storageArea!==n)){if(B&&B.key==null){$.value=M;return}if(!(B&&B.key!==t)){z();try{$.value=_e(B)}catch(D){V(D)}finally{B?at(H):H()}}}}}function Dl(t,e,n={}){const{window:o=W}=n;return mt(t,e,o==null?void 0:o.localStorage,n)}function gt(t){const e=window.getComputedStyle(t);if(e.overflowX==="scroll"||e.overflowY==="scroll"||e.overflowX==="auto"&&t.clientWidth1?!0:(e.preventDefault&&e.preventDefault(),!1)}function Hl(t,e=!1){const n=L(e);let o=null,s;K(dt(t),u=>{if(u){const c=u;s=c.style.overflow,n.value&&(c.style.overflow="hidden")}},{immediate:!0});const r=()=>{const u=U(t);!u||n.value||(Ke&&(o=ie(u,"touchmove",c=>{Rn(c)},{passive:!1})),u.style.overflow="hidden",n.value=!0)},d=()=>{const u=U(t);!u||!n.value||(Ke&&(o==null||o()),u.style.overflow=s,n.value=!1)};return Be(d),w({get(){return n.value},set(u){u?r():d()}})}function zl(t,e,n={}){const{window:o=W}=n;return mt(t,e,o==null?void 0:o.sessionStorage,n)}function yt({window:t=W}={}){if(!t)return{x:L(0),y:L(0)};const e=L(t.scrollX),n=L(t.scrollY);return ie(t,"scroll",()=>{e.value=t.scrollX,n.value=t.scrollY},{capture:!1,passive:!0}),{x:e,y:n}}function Un(){const{hasSidebar:t}=G(),e=Le("(min-width: 960px)"),n=Le("(min-width: 1280px)");return{isAsideEnabled:w(()=>!n.value&&!e.value?!1:t.value?n.value:e.value)}}const Wn=71;function xe(t){return typeof t.outline=="object"&&!Array.isArray(t.outline)&&t.outline.label||t.outlineTitle||"On this page"}function Oe(t){const e=[...document.querySelectorAll(".VPDoc h2,h3,h4,h5,h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const o=Number(n.tagName[1]);return{title:Kn(n),link:"#"+n.id,level:o}});return Yn(e,t)}function Kn(t){let e="";for(const n of t.childNodes)if(n.nodeType===1){if(n.classList.contains("VPBadge")||n.classList.contains("header-anchor"))continue;e+=n.textContent}else n.nodeType===3&&(e+=n.textContent);return e.trim()}function Yn(t,e){if(e===!1)return[];const n=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,s]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;t=t.filter(d=>d.level>=o&&d.level<=s);const r=[];e:for(let d=0;d=0;c--){const f=t[c];if(f.level{requestAnimationFrame(r),window.addEventListener("scroll",o)}),zt(()=>{d(location.hash)}),Ae(()=>{window.removeEventListener("scroll",o)});function r(){if(!n.value)return;const u=[].slice.call(t.value.querySelectorAll(".outline-link")),c=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(V=>u.some($=>$.hash===V.hash&&V.offsetParent!==null)),f=window.scrollY,b=window.innerHeight,k=document.body.offsetHeight,N=Math.abs(f+b-k)<1;if(c.length&&N){d(c[c.length-1].hash);return}for(let V=0;V{const s=X("VPDocOutlineItem",!0);return a(),l("ul",{class:T(n.root?"root":"nested")},[(a(!0),l(A,null,E(n.headers,({children:r,link:d,title:u})=>(a(),l("li",null,[v("a",{class:"outline-link",href:d,onClick:e,title:u},C(u),9,Xn),r!=null&&r.length?(a(),P(s,{key:0,headers:r},null,8,["headers"])):m("",!0)]))),256))],2)}}});const Ee=g(Qn,[["__scopeId","data-v-b0ff2abe"]]),Zn=t=>(F("data-v-ff0f39c8"),t=t(),j(),t),eo={class:"content"},to={class:"outline-title"},no={"aria-labelledby":"doc-outline-aria-label"},oo=Zn(()=>v("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),so=y({__name:"VPDocAsideOutline",setup(t){const{frontmatter:e,theme:n}=I(),o=le([]);se(()=>{o.value=Oe(e.value.outline??n.value.outline)});const s=L(),r=L();return qn(s,r),(d,u)=>(a(),l("div",{class:T(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:s},[v("div",eo,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",to,C(i(xe)(i(n))),1),v("nav",no,[oo,h(Ee,{headers:o.value,root:!0},null,8,["headers"])])])],2))}});const ao=g(so,[["__scopeId","data-v-ff0f39c8"]]),ro={class:"VPDocAsideCarbonAds"},io=y({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(t){const e=()=>null;return(n,o)=>(a(),l("div",ro,[h(i(e),{"carbon-ads":n.carbonAds},null,8,["carbon-ads"])]))}}),lo=t=>(F("data-v-3f215769"),t=t(),j(),t),co={class:"VPDocAside"},uo=lo(()=>v("div",{class:"spacer"},null,-1)),_o=y({__name:"VPDocAside",setup(t){const{theme:e}=I();return(n,o)=>(a(),l("div",co,[_(n.$slots,"aside-top",{},void 0,!0),_(n.$slots,"aside-outline-before",{},void 0,!0),h(ao),_(n.$slots,"aside-outline-after",{},void 0,!0),uo,_(n.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),P(io,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):m("",!0),_(n.$slots,"aside-ads-after",{},void 0,!0),_(n.$slots,"aside-bottom",{},void 0,!0)]))}});const vo=g(_o,[["__scopeId","data-v-3f215769"]]);function po(){const{theme:t,page:e}=I();return w(()=>{const{text:n="Edit this page",pattern:o=""}=t.value.editLink||{};let s;return typeof o=="function"?s=o(e.value):s=o.replace(/:path/g,e.value.filePath),{url:s,text:n}})}function bt(t,e){if(Array.isArray(t))return t;if(t==null)return[];e=Se(e);const n=Object.keys(t).sort((o,s)=>s.split("/").length-o.split("/").length).find(o=>e.startsWith(Se(o)));return n?t[n]:[]}function fo(t){const e=[];let n=0;for(const o in t){const s=t[o];if(s.items){n=e.push(s);continue}e[n]||e.push({items:[]}),e[n].items.push(s)}return e}function ho(t){const e=[];function n(o){for(const s of o)s.text&&s.link&&e.push({text:s.text,link:s.link}),s.items&&n(s.items)}return n(t),e}function Me(t,e){return Array.isArray(e)?e.some(n=>Me(t,n)):te(t,e.link)?!0:e.items?Me(t,e.items):!1}function mo(){const{page:t,theme:e,frontmatter:n}=I();return w(()=>{var c,f,b,k,N,V;const o=bt(e.value.sidebar,t.value.relativePath),s=ho(o),r=s.findIndex($=>te(t.value.relativePath,$.link)),d=((c=e.value.docFooter)==null?void 0:c.prev)===!1&&!n.value.prev||n.value.prev===!1,u=((f=e.value.docFooter)==null?void 0:f.next)===!1&&!n.value.next||n.value.next===!1;return{prev:d?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((b=s[r-1])==null?void 0:b.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((k=s[r-1])==null?void 0:k.link)},next:u?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((N=s[r+1])==null?void 0:N.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((V=s[r+1])==null?void 0:V.link)}}})}const go={},yo={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},bo=v("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),$o=v("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),ko=[bo,$o];function Po(t,e){return a(),l("svg",yo,ko)}const wo=g(go,[["render",Po]]),Y=y({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(t){const e=t,n=w(()=>e.tag??e.href?"a":"span"),o=w(()=>e.href&&rt.test(e.href));return(s,r)=>(a(),P(Q(n.value),{class:T(["VPLink",{link:s.href,"vp-external-link-icon":o.value&&!s.noIcon}]),href:s.href?i(ae)(s.href):void 0,target:s.target||(o.value?"_blank":void 0),rel:s.rel||(o.value?"noreferrer":void 0)},{default:p(()=>[_(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Vo={class:"VPLastUpdated"},So=["datetime"],Lo=y({__name:"VPDocFooterLastUpdated",setup(t){const{theme:e,page:n}=I(),o=w(()=>new Date(n.value.lastUpdated)),s=w(()=>o.value.toISOString()),r=L("");return R(()=>{ee(()=>{var d;r.value=new Intl.DateTimeFormat(void 0,((d=e.value.lastUpdated)==null?void 0:d.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(d,u)=>{var c;return a(),l("p",Vo,[O(C(((c=i(e).lastUpdated)==null?void 0:c.text)||i(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:s.value},C(r.value),9,So)])}}});const Mo=g(Lo,[["__scopeId","data-v-149a99df"]]),Io={key:0,class:"VPDocFooter"},No={key:0,class:"edit-info"},Co={key:0,class:"edit-link"},Ao={key:1,class:"last-updated"},To={key:1,class:"prev-next"},Bo={class:"pager"},xo=["href"],Oo=["innerHTML"],Eo=["innerHTML"],Do=["href"],Ho=["innerHTML"],zo=["innerHTML"],Fo=y({__name:"VPDocFooter",setup(t){const{theme:e,page:n,frontmatter:o}=I(),s=po(),r=mo(),d=w(()=>e.value.editLink&&o.value.editLink!==!1),u=w(()=>n.value.lastUpdated&&o.value.lastUpdated!==!1),c=w(()=>d.value||u.value||r.value.prev||r.value.next);return(f,b)=>{var k,N,V,$,M,S,x;return c.value?(a(),l("footer",Io,[_(f.$slots,"doc-footer-before",{},void 0,!0),d.value||u.value?(a(),l("div",No,[d.value?(a(),l("div",Co,[h(Y,{class:"edit-link-button",href:i(s).url,"no-icon":!0},{default:p(()=>[h(wo,{class:"edit-link-icon","aria-label":"edit icon"}),O(" "+C(i(s).text),1)]),_:1},8,["href"])])):m("",!0),u.value?(a(),l("div",Ao,[h(Mo)])):m("",!0)])):m("",!0),(k=i(r).prev)!=null&&k.link||(N=i(r).next)!=null&&N.link?(a(),l("div",To,[v("div",Bo,[(V=i(r).prev)!=null&&V.link?(a(),l("a",{key:0,class:"pager-link prev",href:i(ae)(i(r).prev.link)},[v("span",{class:"desc",innerHTML:(($=i(e).docFooter)==null?void 0:$.prev)||"Previous page"},null,8,Oo),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,Eo)],8,xo)):m("",!0)]),v("div",{class:T(["pager",{"has-prev":(M=i(r).prev)==null?void 0:M.link}])},[(S=i(r).next)!=null&&S.link?(a(),l("a",{key:0,class:"pager-link next",href:i(ae)(i(r).next.link)},[v("span",{class:"desc",innerHTML:((x=i(e).docFooter)==null?void 0:x.next)||"Next page"},null,8,Ho),v("span",{class:"title",innerHTML:i(r).next.text},null,8,zo)],8,Do)):m("",!0)],2)])):m("",!0)])):m("",!0)}}});const jo=g(Fo,[["__scopeId","data-v-face870a"]]),Go={},Ro={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Uo=v("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),Wo=[Uo];function Ko(t,e){return a(),l("svg",Ro,Wo)}const De=g(Go,[["render",Ko]]),Yo={key:0,class:"VPDocOutlineDropdown"},qo={key:0,class:"items"},Jo=y({__name:"VPDocOutlineDropdown",setup(t){const{frontmatter:e,theme:n}=I(),o=L(!1);se(()=>{o.value=!1});const s=le([]);return se(()=>{s.value=Oe(e.value.outline??n.value.outline)}),(r,d)=>s.value.length>0?(a(),l("div",Yo,[v("button",{onClick:d[0]||(d[0]=u=>o.value=!o.value),class:T({open:o.value})},[O(C(i(xe)(i(n)))+" ",1),h(De,{class:"icon"})],2),o.value?(a(),l("div",qo,[h(Ee,{headers:s.value},null,8,["headers"])])):m("",!0)])):m("",!0)}});const Xo=g(Jo,[["__scopeId","data-v-2edece88"]]),Qo=t=>(F("data-v-e9631fd0"),t=t(),j(),t),Zo={class:"container"},es=Qo(()=>v("div",{class:"aside-curtain"},null,-1)),ts={class:"aside-container"},ns={class:"aside-content"},os={class:"content"},ss={class:"content-container"},as={class:"main"},rs=y({__name:"VPDoc",setup(t){const{theme:e}=I(),n=ce(),{hasSidebar:o,hasAside:s,leftAside:r}=G(),d=w(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(u,c)=>{const f=X("Content");return a(),l("div",{class:T(["VPDoc",{"has-sidebar":i(o),"has-aside":i(s)}])},[_(u.$slots,"doc-top",{},void 0,!0),v("div",Zo,[i(s)?(a(),l("div",{key:0,class:T(["aside",{"left-aside":i(r)}])},[es,v("div",ts,[v("div",ns,[h(vo,null,{"aside-top":p(()=>[_(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[_(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[_(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[_(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[_(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[_(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),v("div",os,[v("div",ss,[_(u.$slots,"doc-before",{},void 0,!0),h(Xo),v("main",as,[h(f,{class:T(["vp-doc",[d.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),h(jo,null,{"doc-footer-before":p(()=>[_(u.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),_(u.$slots,"doc-after",{},void 0,!0)])])]),_(u.$slots,"doc-bottom",{},void 0,!0)],2)}}});const is=g(rs,[["__scopeId","data-v-e9631fd0"]]),ls=y({__name:"VPButton",props:{tag:{},size:{},theme:{},text:{},href:{}},setup(t){const e=t,n=w(()=>[e.size??"medium",e.theme??"brand"]),o=w(()=>e.href&&rt.test(e.href)),s=w(()=>e.tag?e.tag:e.href?"a":"button");return(r,d)=>(a(),P(Q(s.value),{class:T(["VPButton",n.value]),href:r.href?i(ae)(r.href):void 0,target:o.value?"_blank":void 0,rel:o.value?"noreferrer":void 0},{default:p(()=>[O(C(r.text),1)]),_:1},8,["class","href","target","rel"]))}});const cs=g(ls,[["__scopeId","data-v-567ba664"]]),us=["src","alt"],ds={inheritAttrs:!1},_s=y({...ds,__name:"VPImage",props:{image:{},alt:{}},setup(t){return(e,n)=>{const o=X("VPImage",!0);return e.image?(a(),l(A,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),l("img",fe({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(Ne)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,us)):(a(),l(A,{key:1},[h(o,fe({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),h(o,fe({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}});const He=g(_s,[["__scopeId","data-v-6db2186b"]]),vs=t=>(F("data-v-fd2650d5"),t=t(),j(),t),ps={class:"container"},fs={class:"main"},hs={key:0,class:"name"},ms={class:"clip"},gs={key:1,class:"text"},ys={key:2,class:"tagline"},bs={key:0,class:"actions"},$s={key:0,class:"image"},ks={class:"image-container"},Ps=vs(()=>v("div",{class:"image-bg"},null,-1)),ws=y({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(t){const e=Te("hero-image-slot-exists");return(n,o)=>(a(),l("div",{class:T(["VPHero",{"has-image":n.image||i(e)}])},[v("div",ps,[v("div",fs,[_(n.$slots,"home-hero-info",{},()=>[n.name?(a(),l("h1",hs,[v("span",ms,C(n.name),1)])):m("",!0),n.text?(a(),l("p",gs,C(n.text),1)):m("",!0),n.tagline?(a(),l("p",ys,C(n.tagline),1)):m("",!0)],!0),n.actions?(a(),l("div",bs,[(a(!0),l(A,null,E(n.actions,s=>(a(),l("div",{key:s.link,class:"action"},[h(cs,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link},null,8,["theme","text","href"])]))),128))])):m("",!0)]),n.image||i(e)?(a(),l("div",$s,[v("div",ks,[Ps,_(n.$slots,"home-hero-image",{},()=>[n.image?(a(),P(He,{key:0,class:"image-src",image:n.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}});const Vs=g(ws,[["__scopeId","data-v-fd2650d5"]]),Ss=y({__name:"VPHomeHero",setup(t){const{frontmatter:e}=I();return(n,o)=>i(e).hero?(a(),P(Vs,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info":p(()=>[_(n.$slots,"home-hero-info")]),"home-hero-image":p(()=>[_(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),Ls={},Ms={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Is=v("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Ns=[Is];function Cs(t,e){return a(),l("svg",Ms,Ns)}const As=g(Ls,[["render",Cs]]),Ts={class:"box"},Bs=["innerHTML"],xs=["innerHTML"],Os=["innerHTML"],Es={key:3,class:"link-text"},Ds={class:"link-text-value"},Hs=y({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{}},setup(t){return(e,n)=>(a(),P(Y,{class:"VPFeature",href:e.link,"no-icon":!0},{default:p(()=>[v("article",Ts,[typeof e.icon=="object"?(a(),P(He,{key:0,image:e.icon,alt:e.icon.alt,height:e.icon.height,width:e.icon.width},null,8,["image","alt","height","width"])):e.icon?(a(),l("div",{key:1,class:"icon",innerHTML:e.icon},null,8,Bs)):m("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,xs),e.details?(a(),l("p",{key:2,class:"details",innerHTML:e.details},null,8,Os)):m("",!0),e.linkText?(a(),l("div",Es,[v("p",Ds,[O(C(e.linkText)+" ",1),h(As,{class:"link-text-icon"})])])):m("",!0)])]),_:1},8,["href"]))}});const zs=g(Hs,[["__scopeId","data-v-837f6cca"]]),Fs={key:0,class:"VPFeatures"},js={class:"container"},Gs={class:"items"},Rs=y({__name:"VPFeatures",props:{features:{}},setup(t){const e=t,n=w(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,s)=>o.features?(a(),l("div",Fs,[v("div",js,[v("div",Gs,[(a(!0),l(A,null,E(o.features,r=>(a(),l("div",{key:r.title,class:T(["item",[n.value]])},[h(zs,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText},null,8,["icon","title","details","link","link-text"])],2))),128))])])])):m("",!0)}});const Us=g(Rs,[["__scopeId","data-v-ba861f23"]]),Ws=y({__name:"VPHomeFeatures",setup(t){const{frontmatter:e}=I();return(n,o)=>i(e).features?(a(),P(Us,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):m("",!0)}}),Ks={class:"VPHome"},Ys=y({__name:"VPHome",setup(t){return(e,n)=>{const o=X("Content");return a(),l("div",Ks,[_(e.$slots,"home-hero-before",{},void 0,!0),h(Ss,null,{"home-hero-info":p(()=>[_(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[_(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),_(e.$slots,"home-hero-after",{},void 0,!0),_(e.$slots,"home-features-before",{},void 0,!0),h(Ws),_(e.$slots,"home-features-after",{},void 0,!0),h(o)])}}});const qs=g(Ys,[["__scopeId","data-v-d82743a8"]]),Js={},Xs={class:"VPPage"};function Qs(t,e){const n=X("Content");return a(),l("div",Xs,[_(t.$slots,"page-top"),h(n),_(t.$slots,"page-bottom")])}const Zs=g(Js,[["render",Qs]]),ea=y({__name:"VPContent",setup(t){const{page:e,frontmatter:n}=I(),{hasSidebar:o}=G();return(s,r)=>(a(),l("div",{class:T(["VPContent",{"has-sidebar":i(o),"is-home":i(n).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?_(s.$slots,"not-found",{key:0},()=>[h(dn)],!0):i(n).layout==="page"?(a(),P(Zs,{key:1},{"page-top":p(()=>[_(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[_(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(a(),P(qs,{key:2},{"home-hero-before":p(()=>[_(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[_(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[_(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[_(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[_(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[_(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):(a(),P(is,{key:3},{"doc-top":p(()=>[_(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[_(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[_(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[_(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[_(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[_(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[_(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[_(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[_(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[_(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[_(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const ta=g(ea,[["__scopeId","data-v-97b5189c"]]),na={class:"container"},oa=["innerHTML"],sa=["innerHTML"],aa=y({__name:"VPFooter",setup(t){const{theme:e}=I(),{hasSidebar:n}=G();return(o,s)=>i(e).footer?(a(),l("footer",{key:0,class:T(["VPFooter",{"has-sidebar":i(n)}])},[v("div",na,[i(e).footer.message?(a(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,oa)):m("",!0),i(e).footer.copyright?(a(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,sa)):m("",!0)])],2)):m("",!0)}});const ra=g(aa,[["__scopeId","data-v-f4388a15"]]),ia=y({__name:"VPLocalNavOutlineDropdown",props:{headers:{}},setup(t){const{theme:e}=I(),n=L(!1),o=L(0),s=L();se(()=>{n.value=!1});function r(){n.value=!n.value,o.value=window.innerHeight+Math.min(window.scrollY-64,0)}function d(c){c.target.classList.contains("outline-link")&&(s.value&&(s.value.style.transition="none"),at(()=>{n.value=!1}))}function u(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(c,f)=>(a(),l("div",{class:"VPLocalNavOutlineDropdown",style:it({"--vp-vh":o.value+"px"})},[c.headers.length>0?(a(),l("button",{key:0,onClick:r,class:T({open:n.value})},[O(C(i(xe)(i(e)))+" ",1),h(De,{class:"icon"})],2)):(a(),l("button",{key:1,onClick:u},C(i(e).returnToTopLabel||"Return to top"),1)),h(Ie,{name:"flyout"},{default:p(()=>[n.value?(a(),l("div",{key:0,ref_key:"items",ref:s,class:"items",onClick:d},[v("a",{class:"top-link",href:"#",onClick:u},C(i(e).returnToTopLabel||"Return to top"),1),h(Ee,{headers:c.headers},null,8,["headers"])],512)):m("",!0)]),_:1})],4))}});const la=g(ia,[["__scopeId","data-v-687955bc"]]),ca={},ua={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},da=v("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),_a=v("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),va=v("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),pa=v("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),fa=[da,_a,va,pa];function ha(t,e){return a(),l("svg",ua,fa)}const ma=g(ca,[["render",ha]]),ga=["aria-expanded"],ya={class:"menu-text"},ba=y({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(t){const{theme:e,frontmatter:n}=I(),{hasSidebar:o}=G(),{y:s}=yt(),r=le([]);se(()=>{r.value=Oe(n.value.outline??e.value.outline)});const d=w(()=>r.value.length===0&&!o.value),u=w(()=>({VPLocalNav:!0,fixed:d.value,"reached-top":s.value>=64}));return(c,f)=>i(n).layout!=="home"&&(!d.value||i(s)>=64)?(a(),l("div",{key:0,class:T(u.value)},[i(o)?(a(),l("button",{key:0,class:"menu","aria-expanded":c.open,"aria-controls":"VPSidebarNav",onClick:f[0]||(f[0]=b=>c.$emit("open-menu"))},[h(ma,{class:"menu-icon"}),v("span",ya,C(i(e).sidebarMenuLabel||"Menu"),1)],8,ga)):m("",!0),h(la,{headers:r.value},null,8,["headers"])],2)):m("",!0)}});const $a=g(ba,[["__scopeId","data-v-a97031cc"]]);function ka(){const t=L(!1);function e(){t.value=!0,window.addEventListener("resize",s)}function n(){t.value=!1,window.removeEventListener("resize",s)}function o(){t.value?n():e()}function s(){window.outerWidth>=768&&n()}const r=ce();return K(()=>r.path,n),{isScreenOpen:t,openScreen:e,closeScreen:n,toggleScreen:o}}const Pa={},wa={class:"VPSwitch",type:"button",role:"switch"},Va={class:"check"},Sa={key:0,class:"icon"};function La(t,e){return a(),l("button",wa,[v("span",Va,[t.$slots.default?(a(),l("span",Sa,[_(t.$slots,"default",{},void 0,!0)])):m("",!0)])])}const Ma=g(Pa,[["render",La],["__scopeId","data-v-f3c41672"]]),Ia={},Na={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ca=Ft('',9),Aa=[Ca];function Ta(t,e){return a(),l("svg",Na,Aa)}const Ba=g(Ia,[["render",Ta]]),xa={},Oa={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ea=v("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Da=[Ea];function Ha(t,e){return a(),l("svg",Oa,Da)}const za=g(xa,[["render",Ha]]),Fa=y({__name:"VPSwitchAppearance",setup(t){const{site:e,isDark:n}=I(),o=L(!1),s=lt?r():()=>{};R(()=>{o.value=document.documentElement.classList.contains("dark")});function r(){const d=window.matchMedia("(prefers-color-scheme: dark)"),u=document.documentElement.classList;let c=localStorage.getItem(We),f=e.value.appearance==="dark"&&c==null||(c==="auto"||c==null?d.matches:c==="dark");d.onchange=N=>{c==="auto"&&k(f=N.matches)};function b(){k(f=!f),c=f?d.matches?"auto":"dark":d.matches?"light":"auto",localStorage.setItem(We,c)}function k(N){const V=document.createElement("style");V.type="text/css",V.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) { - -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; - -ms-transition: none !important; - transition: none !important; -}`)),document.head.appendChild(V),o.value=N,u[N?"add":"remove"]("dark"),window.getComputedStyle(V).opacity,document.head.removeChild(V)}return b}return K(o,d=>{n.value=d}),(d,u)=>(a(),P(Ma,{title:"toggle dark mode",class:"VPSwitchAppearance","aria-checked":o.value,onClick:i(s)},{default:p(()=>[h(Ba,{class:"sun"}),h(za,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const ze=g(Fa,[["__scopeId","data-v-82b282f1"]]),ja={key:0,class:"VPNavBarAppearance"},Ga=y({__name:"VPNavBarAppearance",setup(t){const{site:e}=I();return(n,o)=>i(e).appearance?(a(),l("div",ja,[h(ze)])):m("",!0)}});const Ra=g(Ga,[["__scopeId","data-v-f6a63727"]]),Fe=L();let $t=!1,Ve=0;function Ua(t){const e=L(!1);if(lt){!$t&&Wa(),Ve++;const n=K(Fe,o=>{var s,r,d;o===t.el.value||(s=t.el.value)!=null&&s.contains(o)?(e.value=!0,(r=t.onFocus)==null||r.call(t)):(e.value=!1,(d=t.onBlur)==null||d.call(t))});Ae(()=>{n(),Ve--,Ve||Ka()})}return Ce(e)}function Wa(){document.addEventListener("focusin",kt),$t=!0,Fe.value=document.activeElement}function Ka(){document.removeEventListener("focusin",kt)}function kt(){Fe.value=document.activeElement}const Ya={},qa={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ja=v("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),Xa=[Ja];function Qa(t,e){return a(),l("svg",qa,Xa)}const Pt=g(Ya,[["render",Qa]]),Za={},er={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},tr=v("circle",{cx:"12",cy:"12",r:"2"},null,-1),nr=v("circle",{cx:"19",cy:"12",r:"2"},null,-1),or=v("circle",{cx:"5",cy:"12",r:"2"},null,-1),sr=[tr,nr,or];function ar(t,e){return a(),l("svg",er,sr)}const rr=g(Za,[["render",ar]]),ir={class:"VPMenuLink"},lr=y({__name:"VPMenuLink",props:{item:{}},setup(t){const{page:e}=I();return(n,o)=>(a(),l("div",ir,[h(Y,{class:T({active:i(te)(i(e).relativePath,n.item.activeMatch||n.item.link,!!n.item.activeMatch)}),href:n.item.link,target:n.item.target,rel:n.item.rel},{default:p(()=>[O(C(n.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const Pe=g(lr,[["__scopeId","data-v-2f2cfafc"]]),cr={class:"VPMenuGroup"},ur={key:0,class:"title"},dr=y({__name:"VPMenuGroup",props:{text:{},items:{}},setup(t){return(e,n)=>(a(),l("div",cr,[e.text?(a(),l("p",ur,C(e.text),1)):m("",!0),(a(!0),l(A,null,E(e.items,o=>(a(),l(A,null,["link"in o?(a(),P(Pe,{key:0,item:o},null,8,["item"])):m("",!0)],64))),256))]))}});const _r=g(dr,[["__scopeId","data-v-69e747b5"]]),vr={class:"VPMenu"},pr={key:0,class:"items"},fr=y({__name:"VPMenu",props:{items:{}},setup(t){return(e,n)=>(a(),l("div",vr,[e.items?(a(),l("div",pr,[(a(!0),l(A,null,E(e.items,o=>(a(),l(A,{key:o.text},["link"in o?(a(),P(Pe,{key:0,item:o},null,8,["item"])):(a(),P(_r,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0),_(e.$slots,"default",{},void 0,!0)]))}});const hr=g(fr,[["__scopeId","data-v-e7ea1737"]]),mr=["aria-expanded","aria-label"],gr={key:0,class:"text"},yr={class:"menu"},br=y({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(t){const e=L(!1),n=L();Ua({el:n,onBlur:o});function o(){e.value=!1}return(s,r)=>(a(),l("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=d=>e.value=!0),onMouseleave:r[2]||(r[2]=d=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:r[0]||(r[0]=d=>e.value=!e.value)},[s.button||s.icon?(a(),l("span",gr,[s.icon?(a(),P(Q(s.icon),{key:0,class:"option-icon"})):m("",!0),O(" "+C(s.button)+" ",1),h(Pt,{class:"text-icon"})])):(a(),P(rr,{key:1,class:"icon"}))],8,mr),v("div",yr,[h(hr,{items:s.items},{default:p(()=>[_(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const je=g(br,[["__scopeId","data-v-764effdf"]]),$r={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',youtube:'YouTube'},kr=["href","aria-label","innerHTML"],Pr=y({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(t){const e=t,n=w(()=>typeof e.icon=="object"?e.icon.svg:$r[e.icon]);return(o,s)=>(a(),l("a",{class:"VPSocialLink",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:n.value},null,8,kr))}});const wr=g(Pr,[["__scopeId","data-v-36371990"]]),Vr={class:"VPSocialLinks"},Sr=y({__name:"VPSocialLinks",props:{links:{}},setup(t){return(e,n)=>(a(),l("div",Vr,[(a(!0),l(A,null,E(e.links,({link:o,icon:s,ariaLabel:r})=>(a(),P(wr,{key:o,icon:s,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}});const Ge=g(Sr,[["__scopeId","data-v-7bc22406"]]),Lr={key:0,class:"group translations"},Mr={class:"trans-title"},Ir={key:1,class:"group"},Nr={class:"item appearance"},Cr={class:"label"},Ar={class:"appearance-action"},Tr={key:2,class:"group"},Br={class:"item social-links"},xr=y({__name:"VPNavBarExtra",setup(t){const{site:e,theme:n}=I(),{localeLinks:o,currentLang:s}=ue({correspondingLink:!0}),r=w(()=>o.value.length&&s.value.label||e.value.appearance||n.value.socialLinks);return(d,u)=>r.value?(a(),P(je,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(o).length&&i(s).label?(a(),l("div",Lr,[v("p",Mr,C(i(s).label),1),(a(!0),l(A,null,E(i(o),c=>(a(),P(Pe,{key:c.link,item:c},null,8,["item"]))),128))])):m("",!0),i(e).appearance?(a(),l("div",Ir,[v("div",Nr,[v("p",Cr,C(i(n).darkModeSwitchLabel||"Appearance"),1),v("div",Ar,[h(ze)])])])):m("",!0),i(n).socialLinks?(a(),l("div",Tr,[v("div",Br,[h(Ge,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}});const Or=g(xr,[["__scopeId","data-v-40855f84"]]),Er=t=>(F("data-v-e5dd9c1c"),t=t(),j(),t),Dr=["aria-expanded"],Hr=Er(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),zr=[Hr],Fr=y({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(t){return(e,n)=>(a(),l("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=o=>e.$emit("click"))},zr,10,Dr))}});const jr=g(Fr,[["__scopeId","data-v-e5dd9c1c"]]),Gr=y({__name:"VPNavBarMenuLink",props:{item:{}},setup(t){const{page:e}=I();return(n,o)=>(a(),P(Y,{class:T({VPNavBarMenuLink:!0,active:i(te)(i(e).relativePath,n.item.activeMatch||n.item.link,!!n.item.activeMatch)}),href:n.item.link,target:n.item.target,rel:n.item.rel,tabindex:"0"},{default:p(()=>[O(C(n.item.text),1)]),_:1},8,["class","href","target","rel"]))}});const Rr=g(Gr,[["__scopeId","data-v-5e623618"]]),Ur=y({__name:"VPNavBarMenuGroup",props:{item:{}},setup(t){const{page:e}=I();return(n,o)=>(a(),P(je,{class:T({VPNavBarMenuGroup:!0,active:i(te)(i(e).relativePath,n.item.activeMatch,!!n.item.activeMatch)}),button:n.item.text,items:n.item.items},null,8,["class","button","items"]))}}),Wr=t=>(F("data-v-7f418b0f"),t=t(),j(),t),Kr={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Yr=Wr(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),qr=y({__name:"VPNavBarMenu",setup(t){const{theme:e}=I();return(n,o)=>i(e).nav?(a(),l("nav",Kr,[Yr,(a(!0),l(A,null,E(i(e).nav,s=>(a(),l(A,{key:s.text},["link"in s?(a(),P(Rr,{key:0,item:s},null,8,["item"])):(a(),P(Ur,{key:1,item:s},null,8,["item"]))],64))),128))])):m("",!0)}});const Jr=g(qr,[["__scopeId","data-v-7f418b0f"]]);const Xr={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},Qr={class:"DocSearch-Button-Container"},Zr=v("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[v("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),ei={class:"DocSearch-Button-Placeholder"},ti=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ot=y({__name:"VPNavBarSearchButton",props:{placeholder:{}},setup(t){return(e,n)=>(a(),l("button",Xr,[v("span",Qr,[Zr,v("span",ei,C(e.placeholder),1)]),ti]))}});const ni={id:"local-search"},oi={key:1,id:"docsearch"},si=y({__name:"VPNavBarSearch",setup(t){const e=jt(()=>Gt(()=>import("./VPLocalSearchBox.0f8839a9.js"),["assets/chunks/VPLocalSearchBox.0f8839a9.js","assets/chunks/framework.410404a1.js"])),n=()=>null,{theme:o,localeIndex:s}=I(),r=L(!1),d=L(!1),u=w(()=>{var M,S,x,z,H,de,_e;const $=((M=o.value.search)==null?void 0:M.options)??o.value.algolia;return((H=(z=(x=(S=$==null?void 0:$.locales)==null?void 0:S[s.value])==null?void 0:x.translations)==null?void 0:z.button)==null?void 0:H.buttonText)||((_e=(de=$==null?void 0:$.translations)==null?void 0:de.button)==null?void 0:_e.buttonText)||"Search"});R(()=>{});function c(){r.value||(r.value=!0,setTimeout(f,16))}function f(){const $=new Event("keydown");$.key="k",$.metaKey=!0,window.dispatchEvent($),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function b($){const M=$.target,S=M.tagName;return M.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const k=L(!1);Xe("k",$=>{($.ctrlKey||$.metaKey)&&($.preventDefault(),k.value=!0)}),Xe("/",$=>{b($)||($.preventDefault(),k.value=!0)});const N=L("'Meta'");R(()=>{N.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'"});const V="local";return($,M)=>{var S;return a(),l("div",{class:"VPNavBarSearch",style:it({"--vp-meta-key":N.value})},[i(V)==="local"?(a(),l(A,{key:0},[k.value?(a(),P(i(e),{key:0,placeholder:u.value,onClose:M[0]||(M[0]=x=>k.value=!1)},null,8,["placeholder"])):m("",!0),v("div",ni,[h(ot,{placeholder:u.value,onClick:M[1]||(M[1]=x=>k.value=!0)},null,8,["placeholder"])])],64)):i(V)==="algolia"?(a(),l(A,{key:1},[r.value?(a(),P(i(n),{key:0,algolia:((S=i(o).search)==null?void 0:S.options)??i(o).algolia,onVnodeBeforeMount:M[2]||(M[2]=x=>d.value=!0)},null,8,["algolia"])):m("",!0),d.value?m("",!0):(a(),l("div",oi,[h(ot,{placeholder:u.value,onClick:c},null,8,["placeholder"])]))],64)):m("",!0)],4)}}});const ai=y({__name:"VPNavBarSocialLinks",setup(t){const{theme:e}=I();return(n,o)=>i(e).socialLinks?(a(),P(Ge,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):m("",!0)}});const ri=g(ai,[["__scopeId","data-v-0394ad82"]]),ii=["href"],li=y({__name:"VPNavBarTitle",setup(t){const{site:e,theme:n}=I(),{hasSidebar:o}=G(),{currentLang:s}=ue();return(r,d)=>(a(),l("div",{class:T(["VPNavBarTitle",{"has-sidebar":i(o)}])},[v("a",{class:"title",href:i(ae)(i(s).link)},[_(r.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(a(),P(He,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):m("",!0),i(n).siteTitle?(a(),l(A,{key:1},[O(C(i(n).siteTitle),1)],64)):i(n).siteTitle===void 0?(a(),l(A,{key:2},[O(C(i(e).title),1)],64)):m("",!0),_(r.$slots,"nav-bar-title-after",{},void 0,!0)],8,ii)],2))}});const ci=g(li,[["__scopeId","data-v-305adf00"]]),ui={},di={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},_i=v("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),vi=v("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),pi=[_i,vi];function fi(t,e){return a(),l("svg",di,pi)}const wt=g(ui,[["render",fi]]),hi={class:"items"},mi={class:"title"},gi=y({__name:"VPNavBarTranslations",setup(t){const{theme:e}=I(),{localeLinks:n,currentLang:o}=ue({correspondingLink:!0});return(s,r)=>i(n).length&&i(o).label?(a(),P(je,{key:0,class:"VPNavBarTranslations",icon:wt,label:i(e).langMenuLabel||"Change language"},{default:p(()=>[v("div",hi,[v("p",mi,C(i(o).label),1),(a(!0),l(A,null,E(i(n),d=>(a(),P(Pe,{key:d.link,item:d},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}});const yi=g(gi,[["__scopeId","data-v-74abcbb9"]]),bi=t=>(F("data-v-381568bf"),t=t(),j(),t),$i={class:"container"},ki={class:"title"},Pi={class:"content"},wi=bi(()=>v("div",{class:"curtain"},null,-1)),Vi={class:"content-body"},Si=y({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(t){const{y:e}=yt(),{hasSidebar:n}=G(),o=w(()=>({"has-sidebar":n.value,fill:e.value>0}));return(s,r)=>(a(),l("div",{class:T(["VPNavBar",o.value])},[v("div",$i,[v("div",ki,[h(ci,null,{"nav-bar-title-before":p(()=>[_(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[_(s.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",Pi,[wi,v("div",Vi,[_(s.$slots,"nav-bar-content-before",{},void 0,!0),h(si,{class:"search"}),h(Jr,{class:"menu"}),h(yi,{class:"translations"}),h(Ra,{class:"appearance"}),h(ri,{class:"social-links"}),h(Or,{class:"extra"}),_(s.$slots,"nav-bar-content-after",{},void 0,!0),h(jr,{class:"hamburger",active:s.isScreenOpen,onClick:r[0]||(r[0]=d=>s.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const Li=g(Si,[["__scopeId","data-v-381568bf"]]);function Mi(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1),Z=[],be=!1,Ue=-1,ne=void 0,J=void 0,oe=void 0,Vt=function(e){return Z.some(function(n){return!!(n.options.allowTouchMove&&n.options.allowTouchMove(e))})},$e=function(e){var n=e||window.event;return Vt(n.target)||n.touches.length>1?!0:(n.preventDefault&&n.preventDefault(),!1)},Ii=function(e){if(oe===void 0){var n=!!e&&e.reserveScrollBarGap===!0,o=window.innerWidth-document.documentElement.clientWidth;if(n&&o>0){var s=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);oe=document.body.style.paddingRight,document.body.style.paddingRight=s+o+"px"}}ne===void 0&&(ne=document.body.style.overflow,document.body.style.overflow="hidden")},Ni=function(){oe!==void 0&&(document.body.style.paddingRight=oe,oe=void 0),ne!==void 0&&(document.body.style.overflow=ne,ne=void 0)},Ci=function(){return window.requestAnimationFrame(function(){if(J===void 0){J={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left};var e=window,n=e.scrollY,o=e.scrollX,s=e.innerHeight;document.body.style.position="fixed",document.body.style.top=-n,document.body.style.left=-o,setTimeout(function(){return window.requestAnimationFrame(function(){var r=s-window.innerHeight;r&&n>=s&&(document.body.style.top=-(n+r))})},300)}})},Ai=function(){if(J!==void 0){var e=-parseInt(document.body.style.top,10),n=-parseInt(document.body.style.left,10);document.body.style.position=J.position,document.body.style.top=J.top,document.body.style.left=J.left,window.scrollTo(n,e),J=void 0}},Ti=function(e){return e?e.scrollHeight-e.scrollTop<=e.clientHeight:!1},Bi=function(e,n){var o=e.targetTouches[0].clientY-Ue;return Vt(e.target)?!1:n&&n.scrollTop===0&&o>0||Ti(n)&&o<0?$e(e):(e.stopPropagation(),!0)},St=function(e,n){if(!e){console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");return}if(!Z.some(function(s){return s.targetElement===e})){var o={targetElement:e,options:n||{}};Z=[].concat(Mi(Z),[o]),ye?Ci():Ii(n),ye&&(e.ontouchstart=function(s){s.targetTouches.length===1&&(Ue=s.targetTouches[0].clientY)},e.ontouchmove=function(s){s.targetTouches.length===1&&Bi(s,e)},be||(document.addEventListener("touchmove",$e,Re?{passive:!1}:void 0),be=!0))}},Lt=function(){ye&&(Z.forEach(function(e){e.targetElement.ontouchstart=null,e.targetElement.ontouchmove=null}),be&&(document.removeEventListener("touchmove",$e,Re?{passive:!1}:void 0),be=!1),Ue=-1),ye?Ai():Ni(),Z=[]};const xi=y({__name:"VPNavScreenMenuLink",props:{item:{}},setup(t){const e=Te("close-screen");return(n,o)=>(a(),P(Y,{class:"VPNavScreenMenuLink",href:n.item.link,target:n.item.target,rel:n.item.rel,onClick:i(e)},{default:p(()=>[O(C(n.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const Oi=g(xi,[["__scopeId","data-v-30be0acb"]]),Ei={},Di={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Hi=v("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),zi=[Hi];function Fi(t,e){return a(),l("svg",Di,zi)}const ji=g(Ei,[["render",Fi]]),Gi=y({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(t){const e=Te("close-screen");return(n,o)=>(a(),P(Y,{class:"VPNavScreenMenuGroupLink",href:n.item.link,target:n.item.target,rel:n.item.rel,onClick:i(e)},{default:p(()=>[O(C(n.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const Mt=g(Gi,[["__scopeId","data-v-6656c42a"]]),Ri={class:"VPNavScreenMenuGroupSection"},Ui={key:0,class:"title"},Wi=y({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(t){return(e,n)=>(a(),l("div",Ri,[e.text?(a(),l("p",Ui,C(e.text),1)):m("",!0),(a(!0),l(A,null,E(e.items,o=>(a(),P(Mt,{key:o.text,item:o},null,8,["item"]))),128))]))}});const Ki=g(Wi,[["__scopeId","data-v-8133b170"]]),Yi=["aria-controls","aria-expanded"],qi={class:"button-text"},Ji=["id"],Xi={key:1,class:"group"},Qi=y({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(t){const e=t,n=L(!1),o=w(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){n.value=!n.value}return(r,d)=>(a(),l("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[v("button",{class:"button","aria-controls":o.value,"aria-expanded":n.value,onClick:s},[v("span",qi,C(r.text),1),h(ji,{class:"button-icon"})],8,Yi),v("div",{id:o.value,class:"items"},[(a(!0),l(A,null,E(r.items,u=>(a(),l(A,{key:u.text},["link"in u?(a(),l("div",{key:u.text,class:"item"},[h(Mt,{item:u},null,8,["item"])])):(a(),l("div",Xi,[h(Ki,{text:u.text,items:u.items},null,8,["text","items"])]))],64))),128))],8,Ji)],2))}});const Zi=g(Qi,[["__scopeId","data-v-338a1689"]]),el={key:0,class:"VPNavScreenMenu"},tl=y({__name:"VPNavScreenMenu",setup(t){const{theme:e}=I();return(n,o)=>i(e).nav?(a(),l("nav",el,[(a(!0),l(A,null,E(i(e).nav,s=>(a(),l(A,{key:s.text},["link"in s?(a(),P(Oi,{key:0,item:s},null,8,["item"])):(a(),P(Zi,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),nl={key:0,class:"VPNavScreenAppearance"},ol={class:"text"},sl=y({__name:"VPNavScreenAppearance",setup(t){const{site:e,theme:n}=I();return(o,s)=>i(e).appearance?(a(),l("div",nl,[v("p",ol,C(i(n).darkModeSwitchLabel||"Appearance"),1),h(ze)])):m("",!0)}});const al=g(sl,[["__scopeId","data-v-add8f686"]]),rl={class:"list"},il=y({__name:"VPNavScreenTranslations",setup(t){const{localeLinks:e,currentLang:n}=ue({correspondingLink:!0}),o=L(!1);function s(){o.value=!o.value}return(r,d)=>i(e).length&&i(n).label?(a(),l("div",{key:0,class:T(["VPNavScreenTranslations",{open:o.value}])},[v("button",{class:"title",onClick:s},[h(wt,{class:"icon lang"}),O(" "+C(i(n).label)+" ",1),h(Pt,{class:"icon chevron"})]),v("ul",rl,[(a(!0),l(A,null,E(i(e),u=>(a(),l("li",{key:u.link,class:"item"},[h(Y,{class:"link",href:u.link},{default:p(()=>[O(C(u.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}});const ll=g(il,[["__scopeId","data-v-d72aa483"]]),cl=y({__name:"VPNavScreenSocialLinks",setup(t){const{theme:e}=I();return(n,o)=>i(e).socialLinks?(a(),P(Ge,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):m("",!0)}}),ul={class:"container"},dl=y({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(t){const e=L(null);function n(){St(e.value,{reserveScrollBarGap:!0})}function o(){Lt()}return(s,r)=>(a(),P(Ie,{name:"fade",onEnter:n,onAfterLeave:o},{default:p(()=>[s.open?(a(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e},[v("div",ul,[_(s.$slots,"nav-screen-content-before",{},void 0,!0),h(tl,{class:"menu"}),h(ll,{class:"translations"}),h(al,{class:"appearance"}),h(cl,{class:"social-links"}),_(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}});const _l=g(dl,[["__scopeId","data-v-724636ae"]]),vl={class:"VPNav"},pl=y({__name:"VPNav",setup(t){const{isScreenOpen:e,closeScreen:n,toggleScreen:o}=ka();return he("close-screen",n),(s,r)=>(a(),l("header",vl,[h(Li,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":p(()=>[_(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[_(s.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[_(s.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[_(s.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(_l,{open:i(e)},{"nav-screen-content-before":p(()=>[_(s.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[_(s.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])]))}});const fl=g(pl,[["__scopeId","data-v-7e5bc4a5"]]);function G(){const t=ce(),{theme:e,frontmatter:n}=I(),o=Le("(min-width: 960px)"),s=L(!1),r=w(()=>{const $=e.value.sidebar,M=t.data.relativePath;return $?bt($,M):[]}),d=w(()=>n.value.sidebar!==!1&&r.value.length>0&&n.value.layout!=="home"),u=w(()=>c?n.value.aside==null?e.value.aside==="left":n.value.aside==="left":!1),c=w(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:e.value.aside!==!1),f=w(()=>d.value&&o.value),b=w(()=>d.value?fo(r.value):[]);function k(){s.value=!0}function N(){s.value=!1}function V(){s.value?N():k()}return{isOpen:s,sidebar:r,sidebarGroups:b,hasSidebar:d,hasAside:c,leftAside:u,isSidebarEnabled:f,open:k,close:N,toggle:V}}function hl(t,e){let n;ee(()=>{n=t.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",o)}),Ae(()=>{window.removeEventListener("keyup",o)});function o(s){s.key==="Escape"&&t.value&&(e(),n==null||n.focus())}}function ml(t){const{page:e}=I(),n=L(!1),o=w(()=>t.value.collapsed!=null),s=w(()=>!!t.value.link),r=w(()=>te(e.value.relativePath,t.value.link)),d=w(()=>r.value?!0:t.value.items?Me(e.value.relativePath,t.value.items):!1),u=w(()=>!!(t.value.items&&t.value.items.length));ee(()=>{n.value=!!(o.value&&t.value.collapsed)}),ee(()=>{(r.value||d.value)&&(n.value=!1)});function c(){o.value&&(n.value=!n.value)}return{collapsed:n,collapsible:o,isLink:s,isActiveLink:r,hasActiveLink:d,hasChildren:u,toggle:c}}const gl=t=>(F("data-v-c4656e6d"),t=t(),j(),t),yl=["role","tabindex"],bl=gl(()=>v("div",{class:"indicator"},null,-1)),$l=["onKeydown"],kl={key:1,class:"items"},Pl=y({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(t){const e=t,{collapsed:n,collapsible:o,isLink:s,isActiveLink:r,hasActiveLink:d,hasChildren:u,toggle:c}=ml(w(()=>e.item)),f=w(()=>u.value?"section":"div"),b=w(()=>s.value?"a":"div"),k=w(()=>u.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),N=w(()=>s.value?void 0:"button"),V=w(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:n.value},{"is-link":s.value},{"is-active":r.value},{"has-active":d.value}]);function $(S){"key"in S&&S.key!=="Enter"||!e.item.link&&c()}function M(){e.item.link&&c()}return(S,x)=>{const z=X("VPSidebarItem",!0);return a(),P(Q(f.value),{class:T(["VPSidebarItem",V.value])},{default:p(()=>[S.item.text?(a(),l("div",fe({key:0,class:"item",role:N.value},Ut(S.item.items?{click:$,keydown:$}:{},!0),{tabindex:S.item.items&&0}),[bl,S.item.link?(a(),P(Y,{key:0,tag:b.value,class:"link",href:S.item.link},{default:p(()=>[(a(),P(Q(k.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href"])):(a(),P(Q(k.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null?(a(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:M,onKeydown:Rt(M,["enter"]),tabindex:"0"},[h(De,{class:"caret-icon"})],40,$l)):m("",!0)],16,yl)):m("",!0),S.item.items&&S.item.items.length?(a(),l("div",kl,[S.depth<5?(a(!0),l(A,{key:0},E(S.item.items,H=>(a(),P(z,{key:H.text,item:H,depth:S.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}});const wl=g(Pl,[["__scopeId","data-v-c4656e6d"]]),It=t=>(F("data-v-54885d6c"),t=t(),j(),t),Vl=It(()=>v("div",{class:"curtain"},null,-1)),Sl={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Ll=It(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Ml=y({__name:"VPSidebar",props:{open:{type:Boolean}},setup(t){const e=t,{sidebarGroups:n,hasSidebar:o}=G();let s=L(null);function r(){St(s.value,{reserveScrollBarGap:!0})}function d(){Lt()}return Wt(async()=>{var u;e.open?(r(),(u=s.value)==null||u.focus()):d()}),(u,c)=>i(o)?(a(),l("aside",{key:0,class:T(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:c[0]||(c[0]=Kt(()=>{},["stop"]))},[Vl,v("nav",Sl,[Ll,_(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),l(A,null,E(i(n),f=>(a(),l("div",{key:f.text,class:"group"},[h(wl,{item:f,depth:0},null,8,["item"])]))),128)),_(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}});const Il=g(Ml,[["__scopeId","data-v-54885d6c"]]),Nl=y({__name:"VPSkipLink",setup(t){const e=ce(),n=L();K(()=>e.path,()=>n.value.focus());function o({target:s}){const r=document.getElementById(decodeURIComponent(s.hash).slice(1));if(r){const d=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",d)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",d),r.focus(),window.scrollTo(0,0)}}return(s,r)=>(a(),l(A,null,[v("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}});const Cl=g(Nl,[["__scopeId","data-v-ae3e3f51"]]),Al={key:0,class:"Layout"},Tl=y({__name:"Layout",setup(t){const{isOpen:e,open:n,close:o}=G(),s=ce();K(()=>s.path,o),hl(e,o),he("close-sidebar",o),he("is-sidebar-open",e);const{frontmatter:r}=I(),d=Yt(),u=w(()=>!!d["home-hero-image"]);return he("hero-image-slot-exists",u),(c,f)=>{const b=X("Content");return i(r).layout!==!1?(a(),l("div",Al,[_(c.$slots,"layout-top",{},void 0,!0),h(Cl),h(Zt,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),i(r).navbar!==!1?(a(),P(fl,{key:0},{"nav-bar-title-before":p(()=>[_(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[_(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[_(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[_(c.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[_(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[_(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3})):m("",!0),h($a,{open:i(e),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),h(Il,{open:i(e)},{"sidebar-nav-before":p(()=>[_(c.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[_(c.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),h(ta,null,{"page-top":p(()=>[_(c.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[_(c.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[_(c.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[_(c.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[_(c.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[_(c.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[_(c.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[_(c.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[_(c.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[_(c.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[_(c.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[_(c.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[_(c.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[_(c.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[_(c.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[_(c.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[_(c.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[_(c.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[_(c.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[_(c.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(ra),_(c.$slots,"layout-bottom",{},void 0,!0)])):(a(),P(b,{key:1}))}}});const Bl=g(Tl,[["__scopeId","data-v-99cf8a88"]]);const Fl={Layout:Bl,enhanceApp:({app:t})=>{t.component("Badge",Jt)}};function jl(t,e){const{localeIndex:n}=I();function o(s){var V,$;const r=s.split("."),d=t&&typeof t=="object",u=d&&(($=(V=t.locales)==null?void 0:V[n.value])==null?void 0:$.translations)||null,c=d&&t.translations||null;let f=u,b=c,k=e;const N=r.pop();for(const M of r){let S=null;const x=k==null?void 0:k[M];x&&(S=k=x);const z=b==null?void 0:b[M];z&&(S=b=z);const H=f==null?void 0:f[M];H&&(S=f=H),x||(k=S),z||(b=S),H||(f=S)}return(f==null?void 0:f[N])??(b==null?void 0:b[N])??(k==null?void 0:k[N])??""}return o}export{Be as a,I as b,El as c,zl as d,Dl as e,jl as f,ie as g,Hl as h,Xe as o,Fl as t,An as u,Ol as w}; diff --git a/assets/chunks/theme.681e65c7.js b/assets/chunks/theme.681e65c7.js new file mode 100644 index 000000000..e23e0cb7f --- /dev/null +++ b/assets/chunks/theme.681e65c7.js @@ -0,0 +1,7 @@ +import{u as y,v as r,b as i,z as _,a as C,L as O,X as A,_ as g,C as P,O as p,$ as Ie,B as m,c as Tt,i as At,P as Nt,w as Te,r as w,d as L,A as G,F as v,N as l,e as F,f as j,g as Ct,m as Ae,U as Bt,q as K,o as xt,h as Ot,H as ee,j as Ht,k as ie,l as Et,n as at,p as te,s as ce,t as Ne,T as Dt,M as X,x as N,y as H,D as se,E as h,G as Q,I as rt,V as fe,J as Ce,K as lt,R as zt,Q as it,S as Re,W as Ft,Y as jt,Z as he,a0 as Gt,a1 as Ut,a2 as Wt,a3 as Rt,a4 as Kt}from"./framework.3ac7bdc3.js";const qt=y({__name:"VPBadge",props:{text:{},type:{}},setup(t){return(e,n)=>(r(),i("span",{class:C(["VPBadge",e.type??"tip"])},[_(e.$slots,"default",{},()=>[O(A(e.text),1)],!0)],2))}});const Yt=g(qt,[["__scopeId","data-v-f026a7e7"]]),Jt={key:0,class:"VPBackdrop"},Xt=y({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(t){return(e,n)=>(r(),P(Ie,{name:"fade"},{default:p(()=>[e.show?(r(),i("div",Jt)):m("",!0)]),_:1}))}});const Qt=g(Xt,[["__scopeId","data-v-c79a1216"]]),I=Tt;function Zt(t,e){let n,o=!1;return()=>{n&&clearTimeout(n),o?n=setTimeout(t,e):(t(),o=!0,setTimeout(()=>{o=!1},e))}}function Se(t){return/^\//.test(t)?t:`/${t}`}function ae(t){if(At(t))return t.replace(Nt,"");const{site:e}=I(),{pathname:n,search:o,hash:s}=new URL(t,"http://a.com"),a=n.endsWith("/")||n.endsWith(".html")?t:t.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,e.value.cleanUrls?"":".html")}${o}${s}`);return Te(a)}function ue({removeCurrent:t=!0,correspondingLink:e=!1}={}){const{site:n,localeIndex:o,page:s,theme:a}=I(),u=w(()=>{var c,f;return{label:(c=n.value.locales[o.value])==null?void 0:c.label,link:((f=n.value.locales[o.value])==null?void 0:f.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:w(()=>Object.entries(n.value.locales).flatMap(([c,f])=>t&&u.value.label===f.label?[]:{text:f.label,link:en(f.link||(c==="root"?"/":`/${c}/`),a.value.i18nRouting!==!1&&e,s.value.relativePath.slice(u.value.link.length-1),!n.value.cleanUrls)})),currentLang:u}}function en(t,e,n,o){return e?t.replace(/\/$/,"")+Se(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):t}const ke=t=>(F("data-v-c70503b8"),t=t(),j(),t),tn={class:"NotFound"},nn=ke(()=>v("p",{class:"code"},"404",-1)),on=ke(()=>v("h1",{class:"title"},"PAGE NOT FOUND",-1)),sn=ke(()=>v("div",{class:"divider"},null,-1)),an=ke(()=>v("blockquote",{class:"quote"}," But if you don't change your direction, and if you keep looking, you may end up where you are heading. ",-1)),rn={class:"action"},ln=["href"],cn=y({__name:"NotFound",setup(t){const{site:e}=I(),{localeLinks:n}=ue({removeCurrent:!1}),o=L("/");return G(()=>{var a;const s=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(o.value=((a=n.value.find(({link:u})=>u.startsWith(s)))==null?void 0:a.link)||n.value[0].link)}),(s,a)=>(r(),i("div",tn,[nn,on,sn,an,v("div",rn,[v("a",{class:"link",href:l(Te)(o.value),"aria-label":"go to home"}," Take me home ",8,ln)])]))}});const un=g(cn,[["__scopeId","data-v-c70503b8"]]);function Be(t){return xt()?(Ot(t),!0):!1}function U(t){return typeof t=="function"?t():l(t)}const ct=typeof window<"u",re=()=>{},Ke=dn();function dn(){var t;return ct&&((t=window==null?void 0:window.navigator)==null?void 0:t.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent)}function _n(t,e){function n(...o){return new Promise((s,a)=>{Promise.resolve(t(()=>e.apply(this,o),{fn:e,thisArg:this,args:o})).then(s).catch(a)})}return n}const ut=t=>t();function vn(t,e={}){let n,o,s=re;const a=d=>{clearTimeout(d),s(),s=re};return d=>{const c=U(t),f=U(e.maxWait);return n&&a(n),c<=0||f!==void 0&&f<=0?(o&&(a(o),o=null),Promise.resolve(d())):new Promise((b,k)=>{s=e.rejectOnCancel?k:b,f&&!o&&(o=setTimeout(()=>{n&&a(n),o=null,b(d())},f)),n=setTimeout(()=>{o&&a(o),o=null,b(d())},c)})}}function pn(t=ut){const e=L(!0);function n(){e.value=!1}function o(){e.value=!0}const s=(...a)=>{e.value&&t(...a)};return{isActive:Ae(e),pause:n,resume:o,eventFilter:s}}function fn(...t){if(t.length!==1)return Ct(...t);const e=t[0];return typeof e=="function"?Ae(Bt(()=>({get:e,set:re}))):L(e)}var qe=Object.getOwnPropertySymbols,hn=Object.prototype.hasOwnProperty,mn=Object.prototype.propertyIsEnumerable,gn=(t,e)=>{var n={};for(var o in t)hn.call(t,o)&&e.indexOf(o)<0&&(n[o]=t[o]);if(t!=null&&qe)for(var o of qe(t))e.indexOf(o)<0&&mn.call(t,o)&&(n[o]=t[o]);return n};function dt(t,e,n={}){const o=n,{eventFilter:s=ut}=o,a=gn(o,["eventFilter"]);return K(t,_n(s,e),a)}var yn=Object.defineProperty,bn=Object.defineProperties,$n=Object.getOwnPropertyDescriptors,me=Object.getOwnPropertySymbols,_t=Object.prototype.hasOwnProperty,vt=Object.prototype.propertyIsEnumerable,Ye=(t,e,n)=>e in t?yn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,kn=(t,e)=>{for(var n in e||(e={}))_t.call(e,n)&&Ye(t,n,e[n]);if(me)for(var n of me(e))vt.call(e,n)&&Ye(t,n,e[n]);return t},Pn=(t,e)=>bn(t,$n(e)),wn=(t,e)=>{var n={};for(var o in t)_t.call(t,o)&&e.indexOf(o)<0&&(n[o]=t[o]);if(t!=null&&me)for(var o of me(t))e.indexOf(o)<0&&vt.call(t,o)&&(n[o]=t[o]);return n};function Oi(t,e,n={}){const o=n,{debounce:s=0,maxWait:a=void 0}=o,u=wn(o,["debounce","maxWait"]);return dt(t,e,Pn(kn({},u),{eventFilter:vn(s,{maxWait:a})}))}var Vn=Object.defineProperty,Sn=Object.defineProperties,Ln=Object.getOwnPropertyDescriptors,ge=Object.getOwnPropertySymbols,pt=Object.prototype.hasOwnProperty,ft=Object.prototype.propertyIsEnumerable,Je=(t,e,n)=>e in t?Vn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Mn=(t,e)=>{for(var n in e||(e={}))pt.call(e,n)&&Je(t,n,e[n]);if(ge)for(var n of ge(e))ft.call(e,n)&&Je(t,n,e[n]);return t},In=(t,e)=>Sn(t,Ln(e)),Tn=(t,e)=>{var n={};for(var o in t)pt.call(t,o)&&e.indexOf(o)<0&&(n[o]=t[o]);if(t!=null&&ge)for(var o of ge(t))e.indexOf(o)<0&&ft.call(t,o)&&(n[o]=t[o]);return n};function An(t,e,n={}){const o=n,{eventFilter:s}=o,a=Tn(o,["eventFilter"]),{eventFilter:u,pause:d,resume:c,isActive:f}=pn(s);return{stop:dt(t,e,In(Mn({},a),{eventFilter:u})),pause:d,resume:c,isActive:f}}function Hi(t,e,n){let o;Ht(n)?o={evaluating:n}:o=n||{};const{lazy:s=!1,evaluating:a=void 0,shallow:u=!0,onError:d=re}=o,c=L(!s),f=u?ie(e):L(e);let b=0;return ee(async k=>{if(!c.value)return;b++;const T=b;let V=!1;a&&Promise.resolve().then(()=>{a.value=!0});try{const $=await t(M=>{k(()=>{a&&(a.value=!1),V||M()})});T===b&&(f.value=$)}catch($){d($)}finally{a&&T===b&&(a.value=!1),V=!0}}),s?w(()=>(c.value=!0,f.value)):f}function Nn(t){var e;const n=U(t);return(e=n==null?void 0:n.$el)!=null?e:n}const R=ct?window:void 0;function le(...t){let e,n,o,s;if(typeof t[0]=="string"||Array.isArray(t[0])?([n,o,s]=t,e=R):[e,n,o,s]=t,!e)return re;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const a=[],u=()=>{a.forEach(b=>b()),a.length=0},d=(b,k,T,V)=>(b.addEventListener(k,T,V),()=>b.removeEventListener(k,T,V)),c=K(()=>[Nn(e),U(s)],([b,k])=>{u(),b&&a.push(...n.flatMap(T=>o.map(V=>d(b,T,V,k))))},{immediate:!0,flush:"post"}),f=()=>{c(),u()};return Be(f),f}function Cn(t){return typeof t=="function"?t:typeof t=="string"?e=>e.key===t:Array.isArray(t)?e=>t.includes(e.key):()=>!0}function Xe(...t){let e,n,o={};t.length===3?(e=t[0],n=t[1],o=t[2]):t.length===2?typeof t[1]=="object"?(e=!0,n=t[0],o=t[1]):(e=t[0],n=t[1]):(e=!0,n=t[0]);const{target:s=R,eventName:a="keydown",passive:u=!1,dedupe:d=!1}=o,c=Cn(e);return le(s,a,b=>{b.repeat&&U(d)||c(b)&&n(b)},u)}function Bn(){const t=L(!1);return Et()&&G(()=>{t.value=!0}),t}function xn(t){const e=Bn();return w(()=>(e.value,!!t()))}function Le(t,e={}){const{window:n=R}=e,o=xn(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const a=L(!1),u=f=>{a.value=f.matches},d=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",u):s.removeListener(u))},c=ee(()=>{o.value&&(d(),s=n.matchMedia(U(t)),"addEventListener"in s?s.addEventListener("change",u):s.addListener(u),a.value=s.matches)});return Be(()=>{c(),d(),s=void 0}),a}const ve=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},pe="__vueuse_ssr_handlers__",On=Hn();function Hn(){return pe in ve||(ve[pe]=ve[pe]||{}),ve[pe]}function En(t,e){return On[t]||e}function Dn(t){return t==null?"any":t instanceof Set?"set":t instanceof Map?"map":t instanceof Date?"date":typeof t=="boolean"?"boolean":typeof t=="string"?"string":typeof t=="object"?"object":Number.isNaN(t)?"any":"number"}var zn=Object.defineProperty,Qe=Object.getOwnPropertySymbols,Fn=Object.prototype.hasOwnProperty,jn=Object.prototype.propertyIsEnumerable,Ze=(t,e,n)=>e in t?zn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,et=(t,e)=>{for(var n in e||(e={}))Fn.call(e,n)&&Ze(t,n,e[n]);if(Qe)for(var n of Qe(e))jn.call(e,n)&&Ze(t,n,e[n]);return t};const Gn={boolean:{read:t=>t==="true",write:t=>String(t)},object:{read:t=>JSON.parse(t),write:t=>JSON.stringify(t)},number:{read:t=>Number.parseFloat(t),write:t=>String(t)},any:{read:t=>t,write:t=>String(t)},string:{read:t=>t,write:t=>String(t)},map:{read:t=>new Map(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t.entries()))},set:{read:t=>new Set(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t))},date:{read:t=>new Date(t),write:t=>t.toISOString()}},tt="vueuse-storage";function ht(t,e,n,o={}){var s;const{flush:a="pre",deep:u=!0,listenToStorageChanges:d=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:b,window:k=R,eventFilter:T,onError:V=B=>{console.error(B)}}=o,$=(b?ie:L)(e);if(!n)try{n=En("getDefaultStorage",()=>{var B;return(B=R)==null?void 0:B.localStorage})()}catch(B){V(B)}if(!n)return $;const M=U(e),S=Dn(M),x=(s=o.serializer)!=null?s:Gn[S],{pause:z,resume:D}=An($,()=>de($.value),{flush:a,deep:u,eventFilter:T});return k&&d&&(le(k,"storage",we),le(k,tt,It)),we(),$;function de(B){try{if(B==null)n.removeItem(t);else{const E=x.write(B),Y=n.getItem(t);Y!==E&&(n.setItem(t,E),k&&k.dispatchEvent(new CustomEvent(tt,{detail:{key:t,oldValue:Y,newValue:E,storageArea:n}})))}}catch(E){V(E)}}function _e(B){const E=B?B.newValue:n.getItem(t);if(E==null)return c&&M!==null&&n.setItem(t,x.write(M)),M;if(!B&&f){const Y=x.read(E);return typeof f=="function"?f(Y,M):S==="object"&&!Array.isArray(Y)?et(et({},M),Y):Y}else return typeof E!="string"?E:x.read(E)}function It(B){we(B.detail)}function we(B){if(!(B&&B.storageArea!==n)){if(B&&B.key==null){$.value=M;return}if(!(B&&B.key!==t)){z();try{$.value=_e(B)}catch(E){V(E)}finally{B?at(D):D()}}}}}function Ei(t,e,n={}){const{window:o=R}=n;return ht(t,e,o==null?void 0:o.localStorage,n)}function mt(t){const e=window.getComputedStyle(t);if(e.overflowX==="scroll"||e.overflowY==="scroll"||e.overflowX==="auto"&&t.clientWidth1?!0:(e.preventDefault&&e.preventDefault(),!1)}function Di(t,e=!1){const n=L(e);let o=null,s;K(fn(t),d=>{if(d){const c=d;s=c.style.overflow,n.value&&(c.style.overflow="hidden")}},{immediate:!0});const a=()=>{const d=U(t);!d||n.value||(Ke&&(o=le(d,"touchmove",c=>{Un(c)},{passive:!1})),d.style.overflow="hidden",n.value=!0)},u=()=>{const d=U(t);!d||!n.value||(Ke&&(o==null||o()),d.style.overflow=s,n.value=!1)};return Be(u),w({get(){return n.value},set(d){d?a():u()}})}function zi(t,e,n={}){const{window:o=R}=n;return ht(t,e,o==null?void 0:o.sessionStorage,n)}function gt({window:t=R}={}){if(!t)return{x:L(0),y:L(0)};const e=L(t.scrollX),n=L(t.scrollY);return le(t,"scroll",()=>{e.value=t.scrollX,n.value=t.scrollY},{capture:!1,passive:!0}),{x:e,y:n}}function yt(t,e){if(Array.isArray(t))return t;if(t==null)return[];e=Se(e);const n=Object.keys(t).sort((o,s)=>s.split("/").length-o.split("/").length).find(o=>e.startsWith(Se(o)));return n?t[n]:[]}function Wn(t){const e=[];let n=0;for(const o in t){const s=t[o];if(s.items){n=e.push(s);continue}e[n]||e.push({items:[]}),e[n].items.push(s)}return e}function Rn(t){const e=[];function n(o){for(const s of o)s.text&&s.link&&e.push({text:s.text,link:s.link}),s.items&&n(s.items)}return n(t),e}function Me(t,e){return Array.isArray(e)?e.some(n=>Me(t,n)):te(t,e.link)?!0:e.items?Me(t,e.items):!1}function W(){const t=ce(),{theme:e,frontmatter:n}=I(),o=Le("(min-width: 960px)"),s=L(!1),a=w(()=>{const $=e.value.sidebar,M=t.data.relativePath;return $?yt($,M):[]}),u=w(()=>n.value.sidebar!==!1&&a.value.length>0&&n.value.layout!=="home"),d=w(()=>c?n.value.aside==null?e.value.aside==="left":n.value.aside==="left":!1),c=w(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:e.value.aside!==!1),f=w(()=>u.value&&o.value),b=w(()=>u.value?Wn(a.value):[]);function k(){s.value=!0}function T(){s.value=!1}function V(){s.value?T():k()}return{isOpen:s,sidebar:a,sidebarGroups:b,hasSidebar:u,hasAside:c,leftAside:d,isSidebarEnabled:f,open:k,close:T,toggle:V}}function Kn(t,e){let n;ee(()=>{n=t.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",o)}),Ne(()=>{window.removeEventListener("keyup",o)});function o(s){s.key==="Escape"&&t.value&&(e(),n==null||n.focus())}}function qn(t){const{page:e}=I(),n=L(!1),o=w(()=>t.value.collapsed!=null),s=w(()=>!!t.value.link),a=w(()=>te(e.value.relativePath,t.value.link)),u=w(()=>a.value?!0:t.value.items?Me(e.value.relativePath,t.value.items):!1),d=w(()=>!!(t.value.items&&t.value.items.length));ee(()=>{n.value=!!(o.value&&t.value.collapsed)}),ee(()=>{(a.value||u.value)&&(n.value=!1)});function c(){o.value&&(n.value=!n.value)}return{collapsed:n,collapsible:o,isLink:s,isActiveLink:a,hasActiveLink:u,hasChildren:d,toggle:c}}function Yn(){const{hasSidebar:t}=W(),e=Le("(min-width: 960px)"),n=Le("(min-width: 1280px)");return{isAsideEnabled:w(()=>!n.value&&!e.value?!1:t.value?n.value:e.value)}}const Jn=71;function xe(t){return typeof t.outline=="object"&&!Array.isArray(t.outline)&&t.outline.label||t.outlineTitle||"On this page"}function Oe(t){const e=[...document.querySelectorAll(".VPDoc h2,h3,h4,h5,h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const o=Number(n.tagName[1]);return{title:Xn(n),link:"#"+n.id,level:o}});return Qn(e,t)}function Xn(t){let e="";for(const n of t.childNodes)if(n.nodeType===1){if(n.classList.contains("VPBadge")||n.classList.contains("header-anchor"))continue;e+=n.textContent}else n.nodeType===3&&(e+=n.textContent);return e.trim()}function Qn(t,e){if(e===!1)return[];const n=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,s]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;t=t.filter(u=>u.level>=o&&u.level<=s);const a=[];e:for(let u=0;u=0;c--){const f=t[c];if(f.level{requestAnimationFrame(a),window.addEventListener("scroll",o)}),Dt(()=>{u(location.hash)}),Ne(()=>{window.removeEventListener("scroll",o)});function a(){if(!n.value)return;const d=[].slice.call(t.value.querySelectorAll(".outline-link")),c=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(V=>d.some($=>$.hash===V.hash&&V.offsetParent!==null)),f=window.scrollY,b=window.innerHeight,k=document.body.offsetHeight,T=Math.abs(f+b-k)<1;if(c.length&&T){u(c[c.length-1].hash);return}for(let V=0;V{const s=X("VPDocOutlineItem",!0);return r(),i("ul",{class:C(n.root?"root":"nested")},[(r(!0),i(N,null,H(n.headers,({children:a,link:u,title:d})=>(r(),i("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:d},A(d),9,to),a!=null&&a.length?(r(),P(s,{key:0,headers:a},null,8,["headers"])):m("",!0)]))),256))],2)}}});const He=g(no,[["__scopeId","data-v-b0ff2abe"]]),oo=t=>(F("data-v-ff0f39c8"),t=t(),j(),t),so={class:"content"},ao={class:"outline-title"},ro={"aria-labelledby":"doc-outline-aria-label"},lo=oo(()=>v("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),io=y({__name:"VPDocAsideOutline",setup(t){const{frontmatter:e,theme:n}=I(),o=ie([]);se(()=>{o.value=Oe(e.value.outline??n.value.outline)});const s=L(),a=L();return Zn(s,a),(u,d)=>(r(),i("div",{class:C(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:s},[v("div",so,[v("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),v("div",ao,A(l(xe)(l(n))),1),v("nav",ro,[lo,h(He,{headers:o.value,root:!0},null,8,["headers"])])])],2))}});const co=g(io,[["__scopeId","data-v-ff0f39c8"]]),uo={class:"VPDocAsideCarbonAds"},_o=y({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(t){const e=()=>null;return(n,o)=>(r(),i("div",uo,[h(l(e),{"carbon-ads":n.carbonAds},null,8,["carbon-ads"])]))}}),vo=t=>(F("data-v-3f215769"),t=t(),j(),t),po={class:"VPDocAside"},fo=vo(()=>v("div",{class:"spacer"},null,-1)),ho=y({__name:"VPDocAside",setup(t){const{theme:e}=I();return(n,o)=>(r(),i("div",po,[_(n.$slots,"aside-top",{},void 0,!0),_(n.$slots,"aside-outline-before",{},void 0,!0),h(co),_(n.$slots,"aside-outline-after",{},void 0,!0),fo,_(n.$slots,"aside-ads-before",{},void 0,!0),l(e).carbonAds?(r(),P(_o,{key:0,"carbon-ads":l(e).carbonAds},null,8,["carbon-ads"])):m("",!0),_(n.$slots,"aside-ads-after",{},void 0,!0),_(n.$slots,"aside-bottom",{},void 0,!0)]))}});const mo=g(ho,[["__scopeId","data-v-3f215769"]]);function go(){const{theme:t,page:e}=I();return w(()=>{const{text:n="Edit this page",pattern:o=""}=t.value.editLink||{};let s;return typeof o=="function"?s=o(e.value):s=o.replace(/:path/g,e.value.filePath),{url:s,text:n}})}function yo(){const{page:t,theme:e,frontmatter:n}=I();return w(()=>{var c,f,b,k,T,V;const o=yt(e.value.sidebar,t.value.relativePath),s=Rn(o),a=s.findIndex($=>te(t.value.relativePath,$.link)),u=((c=e.value.docFooter)==null?void 0:c.prev)===!1&&!n.value.prev||n.value.prev===!1,d=((f=e.value.docFooter)==null?void 0:f.next)===!1&&!n.value.next||n.value.next===!1;return{prev:u?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((b=s[a-1])==null?void 0:b.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((k=s[a-1])==null?void 0:k.link)},next:d?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((T=s[a+1])==null?void 0:T.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((V=s[a+1])==null?void 0:V.link)}}})}const bo={},$o={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},ko=v("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),Po=v("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),wo=[ko,Po];function Vo(t,e){return r(),i("svg",$o,wo)}const So=g(bo,[["render",Vo]]),q=y({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(t){const e=t,n=w(()=>e.tag??(e.href?"a":"span")),o=w(()=>e.href&&rt.test(e.href));return(s,a)=>(r(),P(Q(n.value),{class:C(["VPLink",{link:s.href,"vp-external-link-icon":o.value,"no-icon":s.noIcon}]),href:s.href?l(ae)(s.href):void 0,target:s.target??(o.value?"_blank":void 0),rel:s.rel??(o.value?"noreferrer":void 0)},{default:p(()=>[_(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Lo={class:"VPLastUpdated"},Mo=["datetime"],Io=y({__name:"VPDocFooterLastUpdated",setup(t){const{theme:e,page:n}=I(),o=w(()=>new Date(n.value.lastUpdated)),s=w(()=>o.value.toISOString()),a=L("");return G(()=>{ee(()=>{var u;a.value=new Intl.DateTimeFormat(void 0,((u=e.value.lastUpdated)==null?void 0:u.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(u,d)=>{var c;return r(),i("p",Lo,[O(A(((c=l(e).lastUpdated)==null?void 0:c.text)||l(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:s.value},A(a.value),9,Mo)])}}});const To=g(Io,[["__scopeId","data-v-149a99df"]]),Ao={key:0,class:"VPDocFooter"},No={key:0,class:"edit-info"},Co={key:0,class:"edit-link"},Bo={key:1,class:"last-updated"},xo={key:1,class:"prev-next"},Oo={class:"pager"},Ho=["href"],Eo=["innerHTML"],Do=["innerHTML"],zo={class:"pager"},Fo=["href"],jo=["innerHTML"],Go=["innerHTML"],Uo=y({__name:"VPDocFooter",setup(t){const{theme:e,page:n,frontmatter:o}=I(),s=go(),a=yo(),u=w(()=>e.value.editLink&&o.value.editLink!==!1),d=w(()=>n.value.lastUpdated&&o.value.lastUpdated!==!1),c=w(()=>u.value||d.value||a.value.prev||a.value.next);return(f,b)=>{var k,T,V,$,M,S;return c.value?(r(),i("footer",Ao,[_(f.$slots,"doc-footer-before",{},void 0,!0),u.value||d.value?(r(),i("div",No,[u.value?(r(),i("div",Co,[h(q,{class:"edit-link-button",href:l(s).url,"no-icon":!0},{default:p(()=>[h(So,{class:"edit-link-icon","aria-label":"edit icon"}),O(" "+A(l(s).text),1)]),_:1},8,["href"])])):m("",!0),d.value?(r(),i("div",Bo,[h(To)])):m("",!0)])):m("",!0),(k=l(a).prev)!=null&&k.link||(T=l(a).next)!=null&&T.link?(r(),i("nav",xo,[v("div",Oo,[(V=l(a).prev)!=null&&V.link?(r(),i("a",{key:0,class:"pager-link prev",href:l(ae)(l(a).prev.link)},[v("span",{class:"desc",innerHTML:(($=l(e).docFooter)==null?void 0:$.prev)||"Previous page"},null,8,Eo),v("span",{class:"title",innerHTML:l(a).prev.text},null,8,Do)],8,Ho)):m("",!0)]),v("div",zo,[(M=l(a).next)!=null&&M.link?(r(),i("a",{key:0,class:"pager-link next",href:l(ae)(l(a).next.link)},[v("span",{class:"desc",innerHTML:((S=l(e).docFooter)==null?void 0:S.next)||"Next page"},null,8,jo),v("span",{class:"title",innerHTML:l(a).next.text},null,8,Go)],8,Fo)):m("",!0)])])):m("",!0)])):m("",!0)}}});const Wo=g(Uo,[["__scopeId","data-v-37656e44"]]),Ro={},Ko={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},qo=v("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),Yo=[qo];function Jo(t,e){return r(),i("svg",Ko,Yo)}const Ee=g(Ro,[["render",Jo]]),Xo={key:0,class:"VPDocOutlineDropdown"},Qo={key:0,class:"items"},Zo=y({__name:"VPDocOutlineDropdown",setup(t){const{frontmatter:e,theme:n}=I(),o=L(!1);se(()=>{o.value=!1});const s=ie([]);return se(()=>{s.value=Oe(e.value.outline??n.value.outline)}),(a,u)=>s.value.length>0?(r(),i("div",Xo,[v("button",{onClick:u[0]||(u[0]=d=>o.value=!o.value),class:C({open:o.value})},[O(A(l(xe)(l(n)))+" ",1),h(Ee,{class:"icon"})],2),o.value?(r(),i("div",Qo,[h(He,{headers:s.value},null,8,["headers"])])):m("",!0)])):m("",!0)}});const es=g(Zo,[["__scopeId","data-v-2edece88"]]),ts=t=>(F("data-v-6b87e69f"),t=t(),j(),t),ns={class:"container"},os=ts(()=>v("div",{class:"aside-curtain"},null,-1)),ss={class:"aside-container"},as={class:"aside-content"},rs={class:"content"},ls={class:"content-container"},is={class:"main"},cs=y({__name:"VPDoc",setup(t){const{theme:e}=I(),n=ce(),{hasSidebar:o,hasAside:s,leftAside:a}=W(),u=w(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,c)=>{const f=X("Content");return r(),i("div",{class:C(["VPDoc",{"has-sidebar":l(o),"has-aside":l(s)}])},[_(d.$slots,"doc-top",{},void 0,!0),v("div",ns,[l(s)?(r(),i("div",{key:0,class:C(["aside",{"left-aside":l(a)}])},[os,v("div",ss,[v("div",as,[h(mo,null,{"aside-top":p(()=>[_(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[_(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[_(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[_(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[_(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[_(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),v("div",rs,[v("div",ls,[_(d.$slots,"doc-before",{},void 0,!0),h(es),v("main",is,[h(f,{class:C(["vp-doc",[u.value,l(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),h(Wo,null,{"doc-footer-before":p(()=>[_(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),_(d.$slots,"doc-after",{},void 0,!0)])])]),_(d.$slots,"doc-bottom",{},void 0,!0)],2)}}});const us=g(cs,[["__scopeId","data-v-6b87e69f"]]),ds=y({__name:"VPButton",props:{tag:{},size:{},theme:{},text:{},href:{}},setup(t){const e=t,n=w(()=>[e.size??"medium",e.theme??"brand"]),o=w(()=>e.href&&rt.test(e.href)),s=w(()=>e.tag?e.tag:e.href?"a":"button");return(a,u)=>(r(),P(Q(s.value),{class:C(["VPButton",n.value]),href:a.href?l(ae)(a.href):void 0,target:o.value?"_blank":void 0,rel:o.value?"noreferrer":void 0},{default:p(()=>[O(A(a.text),1)]),_:1},8,["class","href","target","rel"]))}});const _s=g(ds,[["__scopeId","data-v-567ba664"]]),vs=["src","alt"],ps={inheritAttrs:!1},fs=y({...ps,__name:"VPImage",props:{image:{},alt:{}},setup(t){return(e,n)=>{const o=X("VPImage",!0);return e.image?(r(),i(N,{key:0},[typeof e.image=="string"||"src"in e.image?(r(),i("img",fe({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:l(Te)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,vs)):(r(),i(N,{key:1},[h(o,fe({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),h(o,fe({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}});const De=g(fs,[["__scopeId","data-v-6db2186b"]]),hs=t=>(F("data-v-da5d1713"),t=t(),j(),t),ms={class:"container"},gs={class:"main"},ys={key:0,class:"name"},bs=["innerHTML"],$s=["innerHTML"],ks=["innerHTML"],Ps={key:0,class:"actions"},ws={key:0,class:"image"},Vs={class:"image-container"},Ss=hs(()=>v("div",{class:"image-bg"},null,-1)),Ls=y({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(t){const e=Ce("hero-image-slot-exists");return(n,o)=>(r(),i("div",{class:C(["VPHero",{"has-image":n.image||l(e)}])},[v("div",ms,[v("div",gs,[_(n.$slots,"home-hero-info",{},()=>[n.name?(r(),i("h1",ys,[v("span",{innerHTML:n.name,class:"clip"},null,8,bs)])):m("",!0),n.text?(r(),i("p",{key:1,innerHTML:n.text,class:"text"},null,8,$s)):m("",!0),n.tagline?(r(),i("p",{key:2,innerHTML:n.tagline,class:"tagline"},null,8,ks)):m("",!0)],!0),n.actions?(r(),i("div",Ps,[(r(!0),i(N,null,H(n.actions,s=>(r(),i("div",{key:s.link,class:"action"},[h(_s,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link},null,8,["theme","text","href"])]))),128))])):m("",!0)]),n.image||l(e)?(r(),i("div",ws,[v("div",Vs,[Ss,_(n.$slots,"home-hero-image",{},()=>[n.image?(r(),P(De,{key:0,class:"image-src",image:n.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}});const Ms=g(Ls,[["__scopeId","data-v-da5d1713"]]),Is=y({__name:"VPHomeHero",setup(t){const{frontmatter:e}=I();return(n,o)=>l(e).hero?(r(),P(Ms,{key:0,class:"VPHomeHero",name:l(e).hero.name,text:l(e).hero.text,tagline:l(e).hero.tagline,image:l(e).hero.image,actions:l(e).hero.actions},{"home-hero-info":p(()=>[_(n.$slots,"home-hero-info")]),"home-hero-image":p(()=>[_(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),Ts={},As={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Ns=v("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Cs=[Ns];function Bs(t,e){return r(),i("svg",As,Cs)}const xs=g(Ts,[["render",Bs]]),Os={class:"box"},Hs=["innerHTML"],Es=["innerHTML"],Ds=["innerHTML"],zs={key:3,class:"link-text"},Fs={class:"link-text-value"},js=y({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{}},setup(t){return(e,n)=>(r(),P(q,{class:"VPFeature",href:e.link,rel:e.rel,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[v("article",Os,[typeof e.icon=="object"?(r(),P(De,{key:0,image:e.icon,alt:e.icon.alt,height:e.icon.height,width:e.icon.width},null,8,["image","alt","height","width"])):e.icon?(r(),i("div",{key:1,class:"icon",innerHTML:e.icon},null,8,Hs)):m("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Es),e.details?(r(),i("p",{key:2,class:"details",innerHTML:e.details},null,8,Ds)):m("",!0),e.linkText?(r(),i("div",zs,[v("p",Fs,[O(A(e.linkText)+" ",1),h(xs,{class:"link-text-icon"})])])):m("",!0)])]),_:1},8,["href","rel","tag"]))}});const Gs=g(js,[["__scopeId","data-v-f7bdba60"]]),Us={key:0,class:"VPFeatures"},Ws={class:"container"},Rs={class:"items"},Ks=y({__name:"VPFeatures",props:{features:{}},setup(t){const e=t,n=w(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,s)=>o.features?(r(),i("div",Us,[v("div",Ws,[v("div",Rs,[(r(!0),i(N,null,H(o.features,a=>(r(),i("div",{key:a.title,class:C(["item",[n.value]])},[h(Gs,{icon:a.icon,title:a.title,details:a.details,link:a.link,"link-text":a.linkText,rel:a.rel},null,8,["icon","title","details","link","link-text","rel"])],2))),128))])])])):m("",!0)}});const qs=g(Ks,[["__scopeId","data-v-39646fad"]]),Ys=y({__name:"VPHomeFeatures",setup(t){const{frontmatter:e}=I();return(n,o)=>l(e).features?(r(),P(qs,{key:0,class:"VPHomeFeatures",features:l(e).features},null,8,["features"])):m("",!0)}}),Js={class:"VPHome"},Xs=y({__name:"VPHome",setup(t){return(e,n)=>{const o=X("Content");return r(),i("div",Js,[_(e.$slots,"home-hero-before",{},void 0,!0),h(Is,null,{"home-hero-info":p(()=>[_(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[_(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),_(e.$slots,"home-hero-after",{},void 0,!0),_(e.$slots,"home-features-before",{},void 0,!0),h(Ys),_(e.$slots,"home-features-after",{},void 0,!0),h(o)])}}});const Qs=g(Xs,[["__scopeId","data-v-d82743a8"]]),Zs={},ea={class:"VPPage"};function ta(t,e){const n=X("Content");return r(),i("div",ea,[_(t.$slots,"page-top"),h(n),_(t.$slots,"page-bottom")])}const na=g(Zs,[["render",ta]]),oa=y({__name:"VPContent",setup(t){const{page:e,frontmatter:n}=I(),{hasSidebar:o}=W();return(s,a)=>(r(),i("div",{class:C(["VPContent",{"has-sidebar":l(o),"is-home":l(n).layout==="home"}]),id:"VPContent"},[l(e).isNotFound?_(s.$slots,"not-found",{key:0},()=>[h(un)],!0):l(n).layout==="page"?(r(),P(na,{key:1},{"page-top":p(()=>[_(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[_(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(n).layout==="home"?(r(),P(Qs,{key:2},{"home-hero-before":p(()=>[_(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[_(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[_(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[_(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[_(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[_(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):(r(),P(us,{key:3},{"doc-top":p(()=>[_(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[_(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[_(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[_(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[_(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[_(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[_(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[_(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[_(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[_(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[_(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const sa=g(oa,[["__scopeId","data-v-3107c4ee"]]),aa={class:"container"},ra=["innerHTML"],la=["innerHTML"],ia=y({__name:"VPFooter",setup(t){const{theme:e,frontmatter:n}=I(),{hasSidebar:o}=W();return(s,a)=>l(e).footer&&l(n).footer!==!1?(r(),i("footer",{key:0,class:C(["VPFooter",{"has-sidebar":l(o)}])},[v("div",aa,[l(e).footer.message?(r(),i("p",{key:0,class:"message",innerHTML:l(e).footer.message},null,8,ra)):m("",!0),l(e).footer.copyright?(r(),i("p",{key:1,class:"copyright",innerHTML:l(e).footer.copyright},null,8,la)):m("",!0)])],2)):m("",!0)}});const ca=g(ia,[["__scopeId","data-v-e03eb2e1"]]),ua=y({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(t){const e=t,{theme:n}=I(),o=L(!1),s=L(0),a=L();se(()=>{o.value=!1});function u(){o.value=!o.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function d(f){f.target.classList.contains("outline-link")&&(a.value&&(a.value.style.transition="none"),at(()=>{o.value=!1}))}function c(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(f,b)=>(r(),i("div",{class:"VPLocalNavOutlineDropdown",style:lt({"--vp-vh":s.value+"px"})},[f.headers.length>0?(r(),i("button",{key:0,onClick:u,class:C({open:o.value})},[O(A(l(xe)(l(n)))+" ",1),h(Ee,{class:"icon"})],2)):(r(),i("button",{key:1,onClick:c},A(l(n).returnToTopLabel||"Return to top"),1)),h(Ie,{name:"flyout"},{default:p(()=>[o.value?(r(),i("div",{key:0,ref_key:"items",ref:a,class:"items",onClick:d},[v("a",{class:"top-link",href:"#",onClick:c},A(l(n).returnToTopLabel||"Return to top"),1),h(He,{headers:f.headers},null,8,["headers"])],512)):m("",!0)]),_:1})],4))}});const da=g(ua,[["__scopeId","data-v-d5bb9d56"]]),_a={},va={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},pa=v("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),fa=v("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),ha=v("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),ma=v("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),ga=[pa,fa,ha,ma];function ya(t,e){return r(),i("svg",va,ga)}const ba=g(_a,[["render",ya]]),$a=["aria-expanded"],ka={class:"menu-text"},Pa=y({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(t){const{theme:e,frontmatter:n}=I(),{hasSidebar:o}=W(),{y:s}=gt(),a=ie([]),u=L(0);G(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),se(()=>{a.value=Oe(n.value.outline??e.value.outline)});const d=w(()=>a.value.length===0&&!o.value),c=w(()=>({VPLocalNav:!0,fixed:d.value,"reached-top":s.value>=u.value}));return(f,b)=>l(n).layout!=="home"&&(!d.value||l(s)>=u.value)?(r(),i("div",{key:0,class:C(c.value)},[l(o)?(r(),i("button",{key:0,class:"menu","aria-expanded":f.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=k=>f.$emit("open-menu"))},[h(ba,{class:"menu-icon"}),v("span",ka,A(l(e).sidebarMenuLabel||"Menu"),1)],8,$a)):m("",!0),h(da,{headers:a.value,navHeight:u.value},null,8,["headers","navHeight"])],2)):m("",!0)}});const wa=g(Pa,[["__scopeId","data-v-5cfd5582"]]);function Va(){const t=L(!1);function e(){t.value=!0,window.addEventListener("resize",s)}function n(){t.value=!1,window.removeEventListener("resize",s)}function o(){t.value?n():e()}function s(){window.outerWidth>=768&&n()}const a=ce();return K(()=>a.path,n),{isScreenOpen:t,openScreen:e,closeScreen:n,toggleScreen:o}}const Sa={},La={class:"VPSwitch",type:"button",role:"switch"},Ma={class:"check"},Ia={key:0,class:"icon"};function Ta(t,e){return r(),i("button",La,[v("span",Ma,[t.$slots.default?(r(),i("span",Ia,[_(t.$slots,"default",{},void 0,!0)])):m("",!0)])])}const Aa=g(Sa,[["render",Ta],["__scopeId","data-v-f3c41672"]]),Na={},Ca={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ba=zt('',9),xa=[Ba];function Oa(t,e){return r(),i("svg",Ca,xa)}const Ha=g(Na,[["render",Oa]]),Ea={},Da={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},za=v("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Fa=[za];function ja(t,e){return r(),i("svg",Da,Fa)}const Ga=g(Ea,[["render",ja]]),Ua=y({__name:"VPSwitchAppearance",setup(t){const{site:e,isDark:n}=I(),o=L(!1),s=it?a():()=>{};G(()=>{o.value=document.documentElement.classList.contains("dark")});function a(){const u=window.matchMedia("(prefers-color-scheme: dark)"),d=document.documentElement.classList;let c=localStorage.getItem(Re),f=e.value.appearance==="dark"&&c==null||(c==="auto"||c==null?u.matches:c==="dark");u.onchange=T=>{c==="auto"&&k(f=T.matches)};function b(){k(f=!f),c=f?u.matches?"auto":"dark":u.matches?"light":"auto",localStorage.setItem(Re,c)}function k(T){const V=document.createElement("style");V.type="text/css",V.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) { + -webkit-transition: none !important; + -moz-transition: none !important; + -o-transition: none !important; + -ms-transition: none !important; + transition: none !important; +}`)),document.head.appendChild(V),o.value=T,d[T?"add":"remove"]("dark"),window.getComputedStyle(V).opacity,document.head.removeChild(V)}return b}return K(o,u=>{n.value=u}),(u,d)=>(r(),P(Aa,{title:"toggle dark mode",class:"VPSwitchAppearance","aria-checked":o.value,onClick:l(s)},{default:p(()=>[h(Ha,{class:"sun"}),h(Ga,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const ze=g(Ua,[["__scopeId","data-v-82b282f1"]]),Wa={key:0,class:"VPNavBarAppearance"},Ra=y({__name:"VPNavBarAppearance",setup(t){const{site:e}=I();return(n,o)=>l(e).appearance?(r(),i("div",Wa,[h(ze)])):m("",!0)}});const Ka=g(Ra,[["__scopeId","data-v-f6a63727"]]),Fe=L();let bt=!1,Ve=0;function qa(t){const e=L(!1);if(it){!bt&&Ya(),Ve++;const n=K(Fe,o=>{var s,a,u;o===t.el.value||(s=t.el.value)!=null&&s.contains(o)?(e.value=!0,(a=t.onFocus)==null||a.call(t)):(e.value=!1,(u=t.onBlur)==null||u.call(t))});Ne(()=>{n(),Ve--,Ve||Ja()})}return Ae(e)}function Ya(){document.addEventListener("focusin",$t),bt=!0,Fe.value=document.activeElement}function Ja(){document.removeEventListener("focusin",$t)}function $t(){Fe.value=document.activeElement}const Xa={},Qa={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Za=v("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),er=[Za];function tr(t,e){return r(),i("svg",Qa,er)}const kt=g(Xa,[["render",tr]]),nr={},or={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},sr=v("circle",{cx:"12",cy:"12",r:"2"},null,-1),ar=v("circle",{cx:"19",cy:"12",r:"2"},null,-1),rr=v("circle",{cx:"5",cy:"12",r:"2"},null,-1),lr=[sr,ar,rr];function ir(t,e){return r(),i("svg",or,lr)}const cr=g(nr,[["render",ir]]),ur={class:"VPMenuLink"},dr=y({__name:"VPMenuLink",props:{item:{}},setup(t){const{page:e}=I();return(n,o)=>(r(),i("div",ur,[h(q,{class:C({active:l(te)(l(e).relativePath,n.item.activeMatch||n.item.link,!!n.item.activeMatch)}),href:n.item.link,target:n.item.target,rel:n.item.rel},{default:p(()=>[O(A(n.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const Pe=g(dr,[["__scopeId","data-v-2f2cfafc"]]),_r={class:"VPMenuGroup"},vr={key:0,class:"title"},pr=y({__name:"VPMenuGroup",props:{text:{},items:{}},setup(t){return(e,n)=>(r(),i("div",_r,[e.text?(r(),i("p",vr,A(e.text),1)):m("",!0),(r(!0),i(N,null,H(e.items,o=>(r(),i(N,null,["link"in o?(r(),P(Pe,{key:0,item:o},null,8,["item"])):m("",!0)],64))),256))]))}});const fr=g(pr,[["__scopeId","data-v-69e747b5"]]),hr={class:"VPMenu"},mr={key:0,class:"items"},gr=y({__name:"VPMenu",props:{items:{}},setup(t){return(e,n)=>(r(),i("div",hr,[e.items?(r(),i("div",mr,[(r(!0),i(N,null,H(e.items,o=>(r(),i(N,{key:o.text},["link"in o?(r(),P(Pe,{key:0,item:o},null,8,["item"])):(r(),P(fr,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0),_(e.$slots,"default",{},void 0,!0)]))}});const yr=g(gr,[["__scopeId","data-v-e7ea1737"]]),br=["aria-expanded","aria-label"],$r={key:0,class:"text"},kr={class:"menu"},Pr=y({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(t){const e=L(!1),n=L();qa({el:n,onBlur:o});function o(){e.value=!1}return(s,a)=>(r(),i("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:a[1]||(a[1]=u=>e.value=!0),onMouseleave:a[2]||(a[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:a[0]||(a[0]=u=>e.value=!e.value)},[s.button||s.icon?(r(),i("span",$r,[s.icon?(r(),P(Q(s.icon),{key:0,class:"option-icon"})):m("",!0),O(" "+A(s.button)+" ",1),h(kt,{class:"text-icon"})])):(r(),P(cr,{key:1,class:"icon"}))],8,br),v("div",kr,[h(yr,{items:s.items},{default:p(()=>[_(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const je=g(Pr,[["__scopeId","data-v-764effdf"]]),wr={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',youtube:'YouTube'},Vr=["href","aria-label","innerHTML"],Sr=y({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(t){const e=t,n=w(()=>typeof e.icon=="object"?e.icon.svg:wr[e.icon]);return(o,s)=>(r(),i("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:n.value},null,8,Vr))}});const Lr=g(Sr,[["__scopeId","data-v-f80f8133"]]),Mr={class:"VPSocialLinks"},Ir=y({__name:"VPSocialLinks",props:{links:{}},setup(t){return(e,n)=>(r(),i("div",Mr,[(r(!0),i(N,null,H(e.links,({link:o,icon:s,ariaLabel:a})=>(r(),P(Lr,{key:o,icon:s,link:o,ariaLabel:a},null,8,["icon","link","ariaLabel"]))),128))]))}});const Ge=g(Ir,[["__scopeId","data-v-7bc22406"]]),Tr={key:0,class:"group translations"},Ar={class:"trans-title"},Nr={key:1,class:"group"},Cr={class:"item appearance"},Br={class:"label"},xr={class:"appearance-action"},Or={key:2,class:"group"},Hr={class:"item social-links"},Er=y({__name:"VPNavBarExtra",setup(t){const{site:e,theme:n}=I(),{localeLinks:o,currentLang:s}=ue({correspondingLink:!0}),a=w(()=>o.value.length&&s.value.label||e.value.appearance||n.value.socialLinks);return(u,d)=>a.value?(r(),P(je,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[l(o).length&&l(s).label?(r(),i("div",Tr,[v("p",Ar,A(l(s).label),1),(r(!0),i(N,null,H(l(o),c=>(r(),P(Pe,{key:c.link,item:c},null,8,["item"]))),128))])):m("",!0),l(e).appearance?(r(),i("div",Nr,[v("div",Cr,[v("p",Br,A(l(n).darkModeSwitchLabel||"Appearance"),1),v("div",xr,[h(ze)])])])):m("",!0),l(n).socialLinks?(r(),i("div",Or,[v("div",Hr,[h(Ge,{class:"social-links-list",links:l(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}});const Dr=g(Er,[["__scopeId","data-v-40855f84"]]),zr=t=>(F("data-v-e5dd9c1c"),t=t(),j(),t),Fr=["aria-expanded"],jr=zr(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Gr=[jr],Ur=y({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(t){return(e,n)=>(r(),i("button",{type:"button",class:C(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=o=>e.$emit("click"))},Gr,10,Fr))}});const Wr=g(Ur,[["__scopeId","data-v-e5dd9c1c"]]),Rr=y({__name:"VPNavBarMenuLink",props:{item:{}},setup(t){const{page:e}=I();return(n,o)=>(r(),P(q,{class:C({VPNavBarMenuLink:!0,active:l(te)(l(e).relativePath,n.item.activeMatch||n.item.link,!!n.item.activeMatch)}),href:n.item.link,target:n.item.target,rel:n.item.rel,tabindex:"0"},{default:p(()=>[O(A(n.item.text),1)]),_:1},8,["class","href","target","rel"]))}});const Kr=g(Rr,[["__scopeId","data-v-5e623618"]]),qr=y({__name:"VPNavBarMenuGroup",props:{item:{}},setup(t){const{page:e}=I();return(n,o)=>(r(),P(je,{class:C({VPNavBarMenuGroup:!0,active:l(te)(l(e).relativePath,n.item.activeMatch,!!n.item.activeMatch)}),button:n.item.text,items:n.item.items},null,8,["class","button","items"]))}}),Yr=t=>(F("data-v-7f418b0f"),t=t(),j(),t),Jr={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Xr=Yr(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Qr=y({__name:"VPNavBarMenu",setup(t){const{theme:e}=I();return(n,o)=>l(e).nav?(r(),i("nav",Jr,[Xr,(r(!0),i(N,null,H(l(e).nav,s=>(r(),i(N,{key:s.text},["link"in s?(r(),P(Kr,{key:0,item:s},null,8,["item"])):(r(),P(qr,{key:1,item:s},null,8,["item"]))],64))),128))])):m("",!0)}});const Zr=g(Qr,[["__scopeId","data-v-7f418b0f"]]);const el={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},tl={class:"DocSearch-Button-Container"},nl=v("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[v("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),ol={class:"DocSearch-Button-Placeholder"},sl=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ot=y({__name:"VPNavBarSearchButton",props:{placeholder:{}},setup(t){return(e,n)=>(r(),i("button",el,[v("span",tl,[nl,v("span",ol,A(e.placeholder),1)]),sl]))}});const al={id:"local-search"},rl={key:1,id:"docsearch"},ll=y({__name:"VPNavBarSearch",setup(t){const e=Ft(()=>jt(()=>import("./VPLocalSearchBox.cab19296.js"),["assets/chunks/VPLocalSearchBox.cab19296.js","assets/chunks/framework.3ac7bdc3.js"])),n=()=>null,{theme:o,localeIndex:s}=I(),a=L(!1),u=L(!1),d=w(()=>{var M,S,x,z,D,de,_e;const $=((M=o.value.search)==null?void 0:M.options)??o.value.algolia;return((D=(z=(x=(S=$==null?void 0:$.locales)==null?void 0:S[s.value])==null?void 0:x.translations)==null?void 0:z.button)==null?void 0:D.buttonText)||((_e=(de=$==null?void 0:$.translations)==null?void 0:de.button)==null?void 0:_e.buttonText)||"Search"});G(()=>{});function c(){a.value||(a.value=!0,setTimeout(f,16))}function f(){const $=new Event("keydown");$.key="k",$.metaKey=!0,window.dispatchEvent($),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function b($){const M=$.target,S=M.tagName;return M.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const k=L(!1);Xe("k",$=>{($.ctrlKey||$.metaKey)&&($.preventDefault(),k.value=!0)}),Xe("/",$=>{b($)||($.preventDefault(),k.value=!0)});const T=L("'Meta'");G(()=>{T.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'"});const V="local";return($,M)=>{var S;return r(),i("div",{class:"VPNavBarSearch",style:lt({"--vp-meta-key":T.value})},[l(V)==="local"?(r(),i(N,{key:0},[k.value?(r(),P(l(e),{key:0,placeholder:d.value,onClose:M[0]||(M[0]=x=>k.value=!1)},null,8,["placeholder"])):m("",!0),v("div",al,[h(ot,{placeholder:d.value,onClick:M[1]||(M[1]=x=>k.value=!0)},null,8,["placeholder"])])],64)):l(V)==="algolia"?(r(),i(N,{key:1},[a.value?(r(),P(l(n),{key:0,algolia:((S=l(o).search)==null?void 0:S.options)??l(o).algolia,onVnodeBeforeMount:M[2]||(M[2]=x=>u.value=!0)},null,8,["algolia"])):m("",!0),u.value?m("",!0):(r(),i("div",rl,[h(ot,{placeholder:d.value,onClick:c},null,8,["placeholder"])]))],64)):m("",!0)],4)}}});const il=y({__name:"VPNavBarSocialLinks",setup(t){const{theme:e}=I();return(n,o)=>l(e).socialLinks?(r(),P(Ge,{key:0,class:"VPNavBarSocialLinks",links:l(e).socialLinks},null,8,["links"])):m("",!0)}});const cl=g(il,[["__scopeId","data-v-0394ad82"]]),ul=["href"],dl=y({__name:"VPNavBarTitle",setup(t){const{site:e,theme:n}=I(),{hasSidebar:o}=W(),{currentLang:s}=ue();return(a,u)=>(r(),i("div",{class:C(["VPNavBarTitle",{"has-sidebar":l(o)}])},[v("a",{class:"title",href:l(ae)(l(s).link)},[_(a.$slots,"nav-bar-title-before",{},void 0,!0),l(n).logo?(r(),P(De,{key:0,class:"logo",image:l(n).logo},null,8,["image"])):m("",!0),l(n).siteTitle?(r(),i(N,{key:1},[O(A(l(n).siteTitle),1)],64)):l(n).siteTitle===void 0?(r(),i(N,{key:2},[O(A(l(e).title),1)],64)):m("",!0),_(a.$slots,"nav-bar-title-after",{},void 0,!0)],8,ul)],2))}});const _l=g(dl,[["__scopeId","data-v-8bbac535"]]),vl={},pl={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},fl=v("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),hl=v("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),ml=[fl,hl];function gl(t,e){return r(),i("svg",pl,ml)}const Pt=g(vl,[["render",gl]]),yl={class:"items"},bl={class:"title"},$l=y({__name:"VPNavBarTranslations",setup(t){const{theme:e}=I(),{localeLinks:n,currentLang:o}=ue({correspondingLink:!0});return(s,a)=>l(n).length&&l(o).label?(r(),P(je,{key:0,class:"VPNavBarTranslations",icon:Pt,label:l(e).langMenuLabel||"Change language"},{default:p(()=>[v("div",yl,[v("p",bl,A(l(o).label),1),(r(!0),i(N,null,H(l(n),u=>(r(),P(Pe,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}});const kl=g($l,[["__scopeId","data-v-74abcbb9"]]),Pl=t=>(F("data-v-faa4ef78"),t=t(),j(),t),wl={class:"container"},Vl={class:"title"},Sl={class:"content"},Ll=Pl(()=>v("div",{class:"curtain"},null,-1)),Ml={class:"content-body"},Il=y({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(t){const{y:e}=gt(),{hasSidebar:n}=W(),o=w(()=>({"has-sidebar":n.value,fill:e.value>0}));return(s,a)=>(r(),i("div",{class:C(["VPNavBar",o.value])},[v("div",wl,[v("div",Vl,[h(_l,null,{"nav-bar-title-before":p(()=>[_(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[_(s.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",Sl,[Ll,v("div",Ml,[_(s.$slots,"nav-bar-content-before",{},void 0,!0),h(ll,{class:"search"}),h(Zr,{class:"menu"}),h(kl,{class:"translations"}),h(Ka,{class:"appearance"}),h(cl,{class:"social-links"}),h(Dr,{class:"extra"}),_(s.$slots,"nav-bar-content-after",{},void 0,!0),h(Wr,{class:"hamburger",active:s.isScreenOpen,onClick:a[0]||(a[0]=u=>s.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const Tl=g(Il,[["__scopeId","data-v-faa4ef78"]]);function Al(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1),Z=[],be=!1,We=-1,ne=void 0,J=void 0,oe=void 0,wt=function(e){return Z.some(function(n){return!!(n.options.allowTouchMove&&n.options.allowTouchMove(e))})},$e=function(e){var n=e||window.event;return wt(n.target)||n.touches.length>1?!0:(n.preventDefault&&n.preventDefault(),!1)},Nl=function(e){if(oe===void 0){var n=!!e&&e.reserveScrollBarGap===!0,o=window.innerWidth-document.documentElement.clientWidth;if(n&&o>0){var s=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);oe=document.body.style.paddingRight,document.body.style.paddingRight=s+o+"px"}}ne===void 0&&(ne=document.body.style.overflow,document.body.style.overflow="hidden")},Cl=function(){oe!==void 0&&(document.body.style.paddingRight=oe,oe=void 0),ne!==void 0&&(document.body.style.overflow=ne,ne=void 0)},Bl=function(){return window.requestAnimationFrame(function(){if(J===void 0){J={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left};var e=window,n=e.scrollY,o=e.scrollX,s=e.innerHeight;document.body.style.position="fixed",document.body.style.top=-n,document.body.style.left=-o,setTimeout(function(){return window.requestAnimationFrame(function(){var a=s-window.innerHeight;a&&n>=s&&(document.body.style.top=-(n+a))})},300)}})},xl=function(){if(J!==void 0){var e=-parseInt(document.body.style.top,10),n=-parseInt(document.body.style.left,10);document.body.style.position=J.position,document.body.style.top=J.top,document.body.style.left=J.left,window.scrollTo(n,e),J=void 0}},Ol=function(e){return e?e.scrollHeight-e.scrollTop<=e.clientHeight:!1},Hl=function(e,n){var o=e.targetTouches[0].clientY-We;return wt(e.target)?!1:n&&n.scrollTop===0&&o>0||Ol(n)&&o<0?$e(e):(e.stopPropagation(),!0)},Vt=function(e,n){if(!e){console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");return}if(!Z.some(function(s){return s.targetElement===e})){var o={targetElement:e,options:n||{}};Z=[].concat(Al(Z),[o]),ye?Bl():Nl(n),ye&&(e.ontouchstart=function(s){s.targetTouches.length===1&&(We=s.targetTouches[0].clientY)},e.ontouchmove=function(s){s.targetTouches.length===1&&Hl(s,e)},be||(document.addEventListener("touchmove",$e,Ue?{passive:!1}:void 0),be=!0))}},St=function(){ye&&(Z.forEach(function(e){e.targetElement.ontouchstart=null,e.targetElement.ontouchmove=null}),be&&(document.removeEventListener("touchmove",$e,Ue?{passive:!1}:void 0),be=!1),We=-1),ye?xl():Cl(),Z=[]};const El=y({__name:"VPNavScreenMenuLink",props:{item:{}},setup(t){const e=Ce("close-screen");return(n,o)=>(r(),P(q,{class:"VPNavScreenMenuLink",href:n.item.link,target:n.item.target,rel:n.item.rel,onClick:l(e)},{default:p(()=>[O(A(n.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const Dl=g(El,[["__scopeId","data-v-30be0acb"]]),zl={},Fl={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},jl=v("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),Gl=[jl];function Ul(t,e){return r(),i("svg",Fl,Gl)}const Wl=g(zl,[["render",Ul]]),Rl=y({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(t){const e=Ce("close-screen");return(n,o)=>(r(),P(q,{class:"VPNavScreenMenuGroupLink",href:n.item.link,target:n.item.target,rel:n.item.rel,onClick:l(e)},{default:p(()=>[O(A(n.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const Lt=g(Rl,[["__scopeId","data-v-6656c42a"]]),Kl={class:"VPNavScreenMenuGroupSection"},ql={key:0,class:"title"},Yl=y({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(t){return(e,n)=>(r(),i("div",Kl,[e.text?(r(),i("p",ql,A(e.text),1)):m("",!0),(r(!0),i(N,null,H(e.items,o=>(r(),P(Lt,{key:o.text,item:o},null,8,["item"]))),128))]))}});const Jl=g(Yl,[["__scopeId","data-v-8133b170"]]),Xl=["aria-controls","aria-expanded"],Ql={class:"button-text"},Zl=["id"],ei={key:1,class:"group"},ti=y({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(t){const e=t,n=L(!1),o=w(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){n.value=!n.value}return(a,u)=>(r(),i("div",{class:C(["VPNavScreenMenuGroup",{open:n.value}])},[v("button",{class:"button","aria-controls":o.value,"aria-expanded":n.value,onClick:s},[v("span",Ql,A(a.text),1),h(Wl,{class:"button-icon"})],8,Xl),v("div",{id:o.value,class:"items"},[(r(!0),i(N,null,H(a.items,d=>(r(),i(N,{key:d.text},["link"in d?(r(),i("div",{key:d.text,class:"item"},[h(Lt,{item:d},null,8,["item"])])):(r(),i("div",ei,[h(Jl,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Zl)],2))}});const ni=g(ti,[["__scopeId","data-v-338a1689"]]),oi={key:0,class:"VPNavScreenMenu"},si=y({__name:"VPNavScreenMenu",setup(t){const{theme:e}=I();return(n,o)=>l(e).nav?(r(),i("nav",oi,[(r(!0),i(N,null,H(l(e).nav,s=>(r(),i(N,{key:s.text},["link"in s?(r(),P(Dl,{key:0,item:s},null,8,["item"])):(r(),P(ni,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),ai={key:0,class:"VPNavScreenAppearance"},ri={class:"text"},li=y({__name:"VPNavScreenAppearance",setup(t){const{site:e,theme:n}=I();return(o,s)=>l(e).appearance?(r(),i("div",ai,[v("p",ri,A(l(n).darkModeSwitchLabel||"Appearance"),1),h(ze)])):m("",!0)}});const ii=g(li,[["__scopeId","data-v-add8f686"]]),ci={class:"list"},ui=y({__name:"VPNavScreenTranslations",setup(t){const{localeLinks:e,currentLang:n}=ue({correspondingLink:!0}),o=L(!1);function s(){o.value=!o.value}return(a,u)=>l(e).length&&l(n).label?(r(),i("div",{key:0,class:C(["VPNavScreenTranslations",{open:o.value}])},[v("button",{class:"title",onClick:s},[h(Pt,{class:"icon lang"}),O(" "+A(l(n).label)+" ",1),h(kt,{class:"icon chevron"})]),v("ul",ci,[(r(!0),i(N,null,H(l(e),d=>(r(),i("li",{key:d.link,class:"item"},[h(q,{class:"link",href:d.link},{default:p(()=>[O(A(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}});const di=g(ui,[["__scopeId","data-v-d72aa483"]]),_i=y({__name:"VPNavScreenSocialLinks",setup(t){const{theme:e}=I();return(n,o)=>l(e).socialLinks?(r(),P(Ge,{key:0,class:"VPNavScreenSocialLinks",links:l(e).socialLinks},null,8,["links"])):m("",!0)}}),vi={class:"container"},pi=y({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(t){const e=L(null);function n(){Vt(e.value,{reserveScrollBarGap:!0})}function o(){St()}return(s,a)=>(r(),P(Ie,{name:"fade",onEnter:n,onAfterLeave:o},{default:p(()=>[s.open?(r(),i("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",vi,[_(s.$slots,"nav-screen-content-before",{},void 0,!0),h(si,{class:"menu"}),h(di,{class:"translations"}),h(ii,{class:"appearance"}),h(_i,{class:"social-links"}),_(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}});const fi=g(pi,[["__scopeId","data-v-69fcc70f"]]),hi={class:"VPNav"},mi=y({__name:"VPNav",setup(t){const{isScreenOpen:e,closeScreen:n,toggleScreen:o}=Va();return he("close-screen",n),(s,a)=>(r(),i("header",hi,[h(Tl,{"is-screen-open":l(e),onToggleScreen:l(o)},{"nav-bar-title-before":p(()=>[_(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[_(s.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[_(s.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[_(s.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(fi,{open:l(e)},{"nav-screen-content-before":p(()=>[_(s.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[_(s.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])]))}});const gi=g(mi,[["__scopeId","data-v-7e5bc4a5"]]),yi=t=>(F("data-v-4fbabd82"),t=t(),j(),t),bi=["role","tabindex"],$i=yi(()=>v("div",{class:"indicator"},null,-1)),ki=["onKeydown"],Pi={key:1,class:"items"},wi=y({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(t){const e=t,{collapsed:n,collapsible:o,isLink:s,isActiveLink:a,hasActiveLink:u,hasChildren:d,toggle:c}=qn(w(()=>e.item)),f=w(()=>d.value?"section":"div"),b=w(()=>s.value?"a":"div"),k=w(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),T=w(()=>s.value?void 0:"button"),V=w(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:n.value},{"is-link":s.value},{"is-active":a.value},{"has-active":u.value}]);function $(S){"key"in S&&S.key!=="Enter"||!e.item.link&&c()}function M(){e.item.link&&c()}return(S,x)=>{const z=X("VPSidebarItem",!0);return r(),P(Q(f.value),{class:C(["VPSidebarItem",V.value])},{default:p(()=>[S.item.text?(r(),i("div",fe({key:0,class:"item",role:T.value},Ut(S.item.items?{click:$,keydown:$}:{},!0),{tabindex:S.item.items&&0}),[$i,S.item.link?(r(),P(q,{key:0,tag:b.value,class:"link",href:S.item.link},{default:p(()=>[(r(),P(Q(k.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href"])):(r(),P(Q(k.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null?(r(),i("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:M,onKeydown:Gt(M,["enter"]),tabindex:"0"},[h(Ee,{class:"caret-icon"})],40,ki)):m("",!0)],16,bi)):m("",!0),S.item.items&&S.item.items.length?(r(),i("div",Pi,[S.depth<5?(r(!0),i(N,{key:0},H(S.item.items,D=>(r(),P(z,{key:D.text,item:D,depth:S.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}});const Vi=g(wi,[["__scopeId","data-v-4fbabd82"]]),Mt=t=>(F("data-v-845b8fc6"),t=t(),j(),t),Si=Mt(()=>v("div",{class:"curtain"},null,-1)),Li={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Mi=Mt(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Ii=y({__name:"VPSidebar",props:{open:{type:Boolean}},setup(t){const e=t,{sidebarGroups:n,hasSidebar:o}=W();let s=L(null);function a(){Vt(s.value,{reserveScrollBarGap:!0})}function u(){St()}return Wt(async()=>{var d;e.open?(a(),(d=s.value)==null||d.focus()):u()}),(d,c)=>l(o)?(r(),i("aside",{key:0,class:C(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:s,onClick:c[0]||(c[0]=Rt(()=>{},["stop"]))},[Si,v("nav",Li,[Mi,_(d.$slots,"sidebar-nav-before",{},void 0,!0),(r(!0),i(N,null,H(l(n),f=>(r(),i("div",{key:f.text,class:"group"},[h(Vi,{item:f,depth:0},null,8,["item"])]))),128)),_(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}});const Ti=g(Ii,[["__scopeId","data-v-845b8fc6"]]),Ai=y({__name:"VPSkipLink",setup(t){const e=ce(),n=L();K(()=>e.path,()=>n.value.focus());function o({target:s}){const a=document.getElementById(decodeURIComponent(s.hash).slice(1));if(a){const u=()=>{a.removeAttribute("tabindex"),a.removeEventListener("blur",u)};a.setAttribute("tabindex","-1"),a.addEventListener("blur",u),a.focus(),window.scrollTo(0,0)}}return(s,a)=>(r(),i(N,null,[v("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}});const Ni=g(Ai,[["__scopeId","data-v-ae3e3f51"]]),Ci=y({__name:"Layout",setup(t){const{isOpen:e,open:n,close:o}=W(),s=ce();K(()=>s.path,o),Kn(e,o),he("close-sidebar",o),he("is-sidebar-open",e);const{frontmatter:a}=I(),u=Kt(),d=w(()=>!!u["home-hero-image"]);return he("hero-image-slot-exists",d),(c,f)=>{const b=X("Content");return l(a).layout!==!1?(r(),i("div",{key:0,class:C(["Layout",l(a).pageClass])},[_(c.$slots,"layout-top",{},void 0,!0),h(Ni),h(Qt,{class:"backdrop",show:l(e),onClick:l(o)},null,8,["show","onClick"]),l(a).navbar!==!1?(r(),P(gi,{key:0},{"nav-bar-title-before":p(()=>[_(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[_(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[_(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[_(c.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[_(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[_(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3})):m("",!0),h(wa,{open:l(e),onOpenMenu:l(n)},null,8,["open","onOpenMenu"]),h(Ti,{open:l(e)},{"sidebar-nav-before":p(()=>[_(c.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[_(c.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),h(sa,null,{"page-top":p(()=>[_(c.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[_(c.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[_(c.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[_(c.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[_(c.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[_(c.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[_(c.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[_(c.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[_(c.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[_(c.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[_(c.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[_(c.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[_(c.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[_(c.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[_(c.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[_(c.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[_(c.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[_(c.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[_(c.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[_(c.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(ca),_(c.$slots,"layout-bottom",{},void 0,!0)],2)):(r(),P(b,{key:1}))}}});const Bi=g(Ci,[["__scopeId","data-v-255ec12d"]]);const Fi={Layout:Bi,enhanceApp:({app:t})=>{t.component("Badge",Yt)}};function ji(t,e){const{localeIndex:n}=I();function o(s){var V,$;const a=s.split("."),u=t&&typeof t=="object",d=u&&(($=(V=t.locales)==null?void 0:V[n.value])==null?void 0:$.translations)||null,c=u&&t.translations||null;let f=d,b=c,k=e;const T=a.pop();for(const M of a){let S=null;const x=k==null?void 0:k[M];x&&(S=k=x);const z=b==null?void 0:b[M];z&&(S=b=z);const D=f==null?void 0:f[M];D&&(S=f=D),x||(k=S),z||(b=S),D||(f=S)}return(f==null?void 0:f[T])??(b==null?void 0:b[T])??(k==null?void 0:k[T])??""}return o}export{Be as a,I as b,Hi as c,zi as d,Ei as e,ji as f,le as g,Di as h,Xe as o,Fi as t,Nn as u,Oi as w}; diff --git a/assets/en-US_guide_changelog.md.1af60161.js b/assets/en-US_guide_changelog.md.1af60161.js deleted file mode 100644 index dd2057a9f..000000000 --- a/assets/en-US_guide_changelog.md.1af60161.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as i,V as t}from"./chunks/framework.410404a1.js";const m=JSON.parse('{"title":"📠 Change Log","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/changelog.md","filePath":"en-US/guide/changelog.md","lastUpdated":1689272235000}'),d={name:"en-US/guide/changelog.md"},c=t('

📠 Change Log

9.5.0

2023-06-15

  • 🆕 Overlay add event onDoubleClick, add property modeSensitivity.
  • 🆕 Style configuration candle.tooltip.custom supports string templates.
  • 🐞 Optimize the scrolling frame drop issue on the mobile side.
  • 🐞 Fix pane id naming typo.
  • 💄 Optimize the response sensitivity of dividing line events.
  • 💄 Optimize the attrs type declaration in OverlayFigure under typescript.

9.4.0

2023-05-25

  • 🆕 Instance API 'createOverlay' supports arrays.
  • 🆕 overlay add attributes paneId, defaultZLevel and zLevel.
  • 🆕 xAxis add methods convertTimestampFromPixel and convertTimestampToPixel.
  • 💄 Optimize the display of candle.

9.3.0

2023-05-13

  • 🆕 Add chart API utils.calcTextWidth.
  • 🆕 The instance APIs createIndicator(value, isStack, options) and setPaneOptions(options) have added options. axisOptions.
  • 🆕 The indicator graphic configuration supports customization.
  • 💄 Optimize the bar width ratio.
  • 💄 Optimize internal acquisition of screen pixel ratio.
  • 💄 Optimize internal ID generation.

9.2.2

2023-05-04

  • 🐞 Fix figure line check event error.
  • 💄 Optimize type check.

9.2.1

2023-04-27

  • 💄 Optimize the default style by changing #EF5350 to #F92855 and #26A69A to #2DC08E.
  • 💄 Optimize typescript declarations.

9.2.0

2023-04-24

  • 🆕 Add instance API getOffsetRightDistance and executeAction.
  • 🆕 Add success callback for instance API applyNewData, applyMoreData and updateData.
  • 🆕 Support the display of thousands.
  • 🆕 Add style configuration candle.bar.upBorderColor, candle.bar.downBorderColor, candle.bar.noChangeBorderColor, candle.bar.upWickColor, candle.bar.downWickColor, candle.bar.noChangeWickColor, candle.tooltip.rect.position and candle.tooltip.rect.offsetBottom.
  • 🆕 Add realFrom and realTo to all visibleRange.
  • 💄 Optimize API, klinecharts.utils.isValid and klinecharts.utils.formatBigNumber.
  • 💄 Optimize the log output in the development environment.

9.1.3

2023-04-15

  • 🐞 Fix the issue of not refreshing when the input parameter of the chart API applyNewData is an empty array.
  • 🐞 Fix the issue of cross cursor text not displaying on the y-axis when there is no data.
  • 💄 Optimize the display of area chart.
  • 💄 Optimize coverage event callback parameters and add figureKey and figureIndex.
  • 💄 Optimize typescript overlay style types, as well as base types DeepPartial and DeepRequired.

9.1.2

2023-04-10

  • 🐞 Fix the issue of inaccurate triggering events for the built-in figure line.
  • 🐞 Fix the issue of triggering events for the first time after the simpleAnnotation and simpleTag built-in overlays are drawn.
  • 💄 Optimize overlay figure to ignore events and support event selection.

9.1.1

2023-03-14

  • 🐞 Fix the invalidity of the built-in figure arc.
  • 💄 Optimize rendering updates.

9.1.0

2023-02-23

  • 🆕 The chart instance method subscribeAction and unsubscribeAction types add onCandleBarClick.
  • 🆕 The overlay supports double-clicking to force the end of drawing.
  • 💄 Optimize event handling.

9.0.1

2023-02-17 🐞 Fix the introduction of typescript.

9.0.0

2023-02-16

  • 🛠 Typescript refactoring.
  • 🆕 New features
    • Add Y axis direction zoom and scroll.
    • API
      • New chart methods registerFigure, getSupportFigures, getFigureClass, rigiderOverlay, getSupportOverlays, registerLocale, getSupportLocales, registerStyles are added.
      • New instance methods, getSize, setLocale, getLocal, setCustomApi, getVisibleRange, createOverlay, getOverlayById, overrideOverlay, removeOverlay.
    • Style Configuration
      • Add candle.priceMark.last.text.borderStyle, candle.tooltip.icons, indicator.lastValueMark.text.borderStyle, indicator.tooltip.icons, crosshair.horizontal. text.borderStyle, crosshair.vertical.text.borderStyle.
  • 👉 Change
    • API
      • Chart method extension.addTechnicalIndicatorTemplate is changed to registerIndicator.
      • Chart method extension.addShapeTemplate is changed to registerOverlay.
      • Instance method setStyleOptions is changed to setStyles.
      • Instance method getStyleOptions is changed to getStyles.
      • Instance method setPaneOptions(options), options add new attribute gap.
      • Instance method setOffsetRightSpace is changed to setOffsetRightDistance.
      • Instance method createTechnicalIndicator is changed to createIndicator
      • Instance method overlayTechnicalIndicator is changed to overrideIndicator.
      • Instance method getTechnicalIndicatorByPaneId is changed to getIndicatorByPaneId.
      • Instance method removeTechnicalIndicator is changed to removeIndicator.
    • Style Configuration
      • All line.style options are changed to solid and dashed.
      • All dashValue is changed to dashedValue.
      • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marinEnd.
      • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marinEnd.
      • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles
    • Custom Extension
      • The technical indicator attribute calcParams has been changed to support any type.
      • The technical indicator attribute plots is changed to figures.
      • The technical indicator attribute regeneratePlots is changed to' regeneratefigures'.
      • The technical indicator attribute calcTechnicalIndicator is changed to calc.
      • The technical indicator attribute render is changed to 'draw'.
  • 🗑 Abandonment
    • API
      • Delete instance methods getWidth, getHeight, and use getSize instead.
      • Delete instance methods createShape, createAnnotation, createTag, and use createOverlay instead.
      • Delete instance methods removeShape, removeAnnotation, removeTag. Use removeOverlay instead.
      • Delete the instance method setShapeOptions and use overrideOverlay instead.
      • Delete instance methods createHtml, removeHtml, addTechnicalIndicatorTemplate, getTechnicalIndicatorTemplate, addShapeTemplate.
    • Style Configuration
      • Delete shape, annotation, tag and use overlay instead.
      • Delete candle.margintechnicalIndicator.margin
    • Custom Extension
      • The related attributes are no longer saved in the technical indicator template.
      • Delete Shape and use Overlay instead.

8.x

Go to Github to check the change log for 8.x.

7.x

Go to Github to check the change log for 7.x.

6.x

Go to Github to check the change log for 6.x.

5.x

Go to Github to view the 5.x release notes.

4.x

Go to Github to view the 4.x release notes.

',46),a=[c];function l(n,r,s,h,u,p){return o(),i("div",null,a)}const x=e(d,[["render",l]]);export{m as __pageData,x as default}; diff --git a/assets/en-US_guide_changelog.md.1af60161.lean.js b/assets/en-US_guide_changelog.md.1af60161.lean.js deleted file mode 100644 index 5f1e26cfb..000000000 --- a/assets/en-US_guide_changelog.md.1af60161.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as i,V as t}from"./chunks/framework.410404a1.js";const m=JSON.parse('{"title":"📠 Change Log","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/changelog.md","filePath":"en-US/guide/changelog.md","lastUpdated":1689272235000}'),d={name:"en-US/guide/changelog.md"},c=t("",46),a=[c];function l(n,r,s,h,u,p){return o(),i("div",null,a)}const x=e(d,[["render",l]]);export{m as __pageData,x as default}; diff --git a/assets/en-US_guide_changelog.md.65fd4e5f.js b/assets/en-US_guide_changelog.md.65fd4e5f.js new file mode 100644 index 000000000..fe54b1dc1 --- /dev/null +++ b/assets/en-US_guide_changelog.md.65fd4e5f.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as i,R as t}from"./chunks/framework.3ac7bdc3.js";const m=JSON.parse('{"title":"📠 Change Log","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/changelog.md","filePath":"en-US/guide/changelog.md","lastUpdated":1691074246000}'),d={name:"en-US/guide/changelog.md"},a=t('

📠 Change Log

9.5.0

2023-06-15

  • 🆕 Overlay add event onDoubleClick, add property modeSensitivity.
  • 🆕 Style configuration candle.tooltip.custom supports string templates.
  • 🐞 Optimize the scrolling frame drop issue on the mobile side.
  • 🐞 Fix pane id naming typo.
  • 💄 Optimize the response sensitivity of dividing line events.
  • 💄 Optimize the attrs type declaration in OverlayFigure under typescript.

9.4.0

2023-05-25

  • 🆕 Instance API 'createOverlay' supports arrays.
  • 🆕 overlay add attributes paneId, defaultZLevel and zLevel.
  • 🆕 xAxis add methods convertTimestampFromPixel and convertTimestampToPixel.
  • 💄 Optimize the display of candle.

9.3.0

2023-05-13

  • 🆕 Add chart API utils.calcTextWidth.
  • 🆕 The instance APIs createIndicator(value, isStack, options) and setPaneOptions(options) have added options. axisOptions.
  • 🆕 The indicator graphic configuration supports customization.
  • 💄 Optimize the bar width ratio.
  • 💄 Optimize internal acquisition of screen pixel ratio.
  • 💄 Optimize internal ID generation.

9.2.2

2023-05-04

  • 🐞 Fix figure line check event error.
  • 💄 Optimize type check.

9.2.1

2023-04-27

  • 💄 Optimize the default style by changing #EF5350 to #F92855 and #26A69A to #2DC08E.
  • 💄 Optimize typescript declarations.

9.2.0

2023-04-24

  • 🆕 Add instance API getOffsetRightDistance and executeAction.
  • 🆕 Add success callback for instance API applyNewData, applyMoreData and updateData.
  • 🆕 Support the display of thousands.
  • 🆕 Add style configuration candle.bar.upBorderColor, candle.bar.downBorderColor, candle.bar.noChangeBorderColor, candle.bar.upWickColor, candle.bar.downWickColor, candle.bar.noChangeWickColor, candle.tooltip.rect.position and candle.tooltip.rect.offsetBottom.
  • 🆕 Add realFrom and realTo to all visibleRange.
  • 💄 Optimize API, klinecharts.utils.isValid and klinecharts.utils.formatBigNumber.
  • 💄 Optimize the log output in the development environment.

9.1.3

2023-04-15

  • 🐞 Fix the issue of not refreshing when the input parameter of the chart API applyNewData is an empty array.
  • 🐞 Fix the issue of cross cursor text not displaying on the y-axis when there is no data.
  • 💄 Optimize the display of area chart.
  • 💄 Optimize coverage event callback parameters and add figureKey and figureIndex.
  • 💄 Optimize typescript overlay style types, as well as base types DeepPartial and DeepRequired.

9.1.2

2023-04-10

  • 🐞 Fix the issue of inaccurate triggering events for the built-in figure line.
  • 🐞 Fix the issue of triggering events for the first time after the simpleAnnotation and simpleTag built-in overlays are drawn.
  • 💄 Optimize overlay figure to ignore events and support event selection.

9.1.1

2023-03-14

  • 🐞 Fix the invalidity of the built-in figure arc.
  • 💄 Optimize rendering updates.

9.1.0

2023-02-23

  • 🆕 The chart instance method subscribeAction and unsubscribeAction types add onCandleBarClick.
  • 🆕 The overlay supports double-clicking to force the end of drawing.
  • 💄 Optimize event handling.

9.0.1

2023-02-17 🐞 Fix the introduction of typescript.

9.0.0

2023-02-16

  • 🛠 Typescript refactoring.
  • 🆕 New features
    • Add Y axis direction zoom and scroll.
    • API
      • New chart methods registerFigure, getSupportFigures, getFigureClass, rigiderOverlay, getSupportOverlays, registerLocale, getSupportLocales, registerStyles are added.
      • New instance methods, getSize, setLocale, getLocal, setCustomApi, getVisibleRange, createOverlay, getOverlayById, overrideOverlay, removeOverlay.
    • Style Configuration
      • Add candle.priceMark.last.text.borderStyle, candle.tooltip.icons, indicator.lastValueMark.text.borderStyle, indicator.tooltip.icons, crosshair.horizontal. text.borderStyle, crosshair.vertical.text.borderStyle.
  • 👉 Change
    • API
      • Chart method extension.addTechnicalIndicatorTemplate is changed to registerIndicator.
      • Chart method extension.addShapeTemplate is changed to registerOverlay.
      • Instance method setStyleOptions is changed to setStyles.
      • Instance method getStyleOptions is changed to getStyles.
      • Instance method setPaneOptions(options), options add new attribute gap.
      • Instance method setOffsetRightSpace is changed to setOffsetRightDistance.
      • Instance method createTechnicalIndicator is changed to createIndicator
      • Instance method overlayTechnicalIndicator is changed to overrideIndicator.
      • Instance method getTechnicalIndicatorByPaneId is changed to getIndicatorByPaneId.
      • Instance method removeTechnicalIndicator is changed to removeIndicator.
    • Style Configuration
      • All line.style options are changed to solid and dashed.
      • All dashValue is changed to dashedValue.
      • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marinEnd.
      • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marinEnd.
      • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles
    • Custom Extension
      • The technical indicator attribute calcParams has been changed to support any type.
      • The technical indicator attribute plots is changed to figures.
      • The technical indicator attribute regeneratePlots is changed to' regeneratefigures'.
      • The technical indicator attribute calcTechnicalIndicator is changed to calc.
      • The technical indicator attribute render is changed to 'draw'.
  • 🗑 Abandonment
    • API
      • Delete instance methods getWidth, getHeight, and use getSize instead.
      • Delete instance methods createShape, createAnnotation, createTag, and use createOverlay instead.
      • Delete instance methods removeShape, removeAnnotation, removeTag. Use removeOverlay instead.
      • Delete the instance method setShapeOptions and use overrideOverlay instead.
      • Delete instance methods createHtml, removeHtml, addTechnicalIndicatorTemplate, getTechnicalIndicatorTemplate, addShapeTemplate.
    • Style Configuration
      • Delete shape, annotation, tag and use overlay instead.
      • Delete candle.margintechnicalIndicator.margin
    • Custom Extension
      • The related attributes are no longer saved in the technical indicator template.
      • Delete Shape and use Overlay instead.

8.x

Go to Github to check the change log for 8.x.

7.x

Go to Github to check the change log for 7.x.

6.x

Go to Github to check the change log for 6.x.

5.x

Go to Github to view the 5.x release notes.

4.x

Go to Github to view the 4.x release notes.

',46),c=[a];function l(n,r,s,h,u,p){return o(),i("div",null,c)}const x=e(d,[["render",l]]);export{m as __pageData,x as default}; diff --git a/assets/en-US_guide_changelog.md.65fd4e5f.lean.js b/assets/en-US_guide_changelog.md.65fd4e5f.lean.js new file mode 100644 index 000000000..fe54b1dc1 --- /dev/null +++ b/assets/en-US_guide_changelog.md.65fd4e5f.lean.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as i,R as t}from"./chunks/framework.3ac7bdc3.js";const m=JSON.parse('{"title":"📠 Change Log","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/changelog.md","filePath":"en-US/guide/changelog.md","lastUpdated":1691074246000}'),d={name:"en-US/guide/changelog.md"},a=t('

📠 Change Log

9.5.0

2023-06-15

  • 🆕 Overlay add event onDoubleClick, add property modeSensitivity.
  • 🆕 Style configuration candle.tooltip.custom supports string templates.
  • 🐞 Optimize the scrolling frame drop issue on the mobile side.
  • 🐞 Fix pane id naming typo.
  • 💄 Optimize the response sensitivity of dividing line events.
  • 💄 Optimize the attrs type declaration in OverlayFigure under typescript.

9.4.0

2023-05-25

  • 🆕 Instance API 'createOverlay' supports arrays.
  • 🆕 overlay add attributes paneId, defaultZLevel and zLevel.
  • 🆕 xAxis add methods convertTimestampFromPixel and convertTimestampToPixel.
  • 💄 Optimize the display of candle.

9.3.0

2023-05-13

  • 🆕 Add chart API utils.calcTextWidth.
  • 🆕 The instance APIs createIndicator(value, isStack, options) and setPaneOptions(options) have added options. axisOptions.
  • 🆕 The indicator graphic configuration supports customization.
  • 💄 Optimize the bar width ratio.
  • 💄 Optimize internal acquisition of screen pixel ratio.
  • 💄 Optimize internal ID generation.

9.2.2

2023-05-04

  • 🐞 Fix figure line check event error.
  • 💄 Optimize type check.

9.2.1

2023-04-27

  • 💄 Optimize the default style by changing #EF5350 to #F92855 and #26A69A to #2DC08E.
  • 💄 Optimize typescript declarations.

9.2.0

2023-04-24

  • 🆕 Add instance API getOffsetRightDistance and executeAction.
  • 🆕 Add success callback for instance API applyNewData, applyMoreData and updateData.
  • 🆕 Support the display of thousands.
  • 🆕 Add style configuration candle.bar.upBorderColor, candle.bar.downBorderColor, candle.bar.noChangeBorderColor, candle.bar.upWickColor, candle.bar.downWickColor, candle.bar.noChangeWickColor, candle.tooltip.rect.position and candle.tooltip.rect.offsetBottom.
  • 🆕 Add realFrom and realTo to all visibleRange.
  • 💄 Optimize API, klinecharts.utils.isValid and klinecharts.utils.formatBigNumber.
  • 💄 Optimize the log output in the development environment.

9.1.3

2023-04-15

  • 🐞 Fix the issue of not refreshing when the input parameter of the chart API applyNewData is an empty array.
  • 🐞 Fix the issue of cross cursor text not displaying on the y-axis when there is no data.
  • 💄 Optimize the display of area chart.
  • 💄 Optimize coverage event callback parameters and add figureKey and figureIndex.
  • 💄 Optimize typescript overlay style types, as well as base types DeepPartial and DeepRequired.

9.1.2

2023-04-10

  • 🐞 Fix the issue of inaccurate triggering events for the built-in figure line.
  • 🐞 Fix the issue of triggering events for the first time after the simpleAnnotation and simpleTag built-in overlays are drawn.
  • 💄 Optimize overlay figure to ignore events and support event selection.

9.1.1

2023-03-14

  • 🐞 Fix the invalidity of the built-in figure arc.
  • 💄 Optimize rendering updates.

9.1.0

2023-02-23

  • 🆕 The chart instance method subscribeAction and unsubscribeAction types add onCandleBarClick.
  • 🆕 The overlay supports double-clicking to force the end of drawing.
  • 💄 Optimize event handling.

9.0.1

2023-02-17 🐞 Fix the introduction of typescript.

9.0.0

2023-02-16

  • 🛠 Typescript refactoring.
  • 🆕 New features
    • Add Y axis direction zoom and scroll.
    • API
      • New chart methods registerFigure, getSupportFigures, getFigureClass, rigiderOverlay, getSupportOverlays, registerLocale, getSupportLocales, registerStyles are added.
      • New instance methods, getSize, setLocale, getLocal, setCustomApi, getVisibleRange, createOverlay, getOverlayById, overrideOverlay, removeOverlay.
    • Style Configuration
      • Add candle.priceMark.last.text.borderStyle, candle.tooltip.icons, indicator.lastValueMark.text.borderStyle, indicator.tooltip.icons, crosshair.horizontal. text.borderStyle, crosshair.vertical.text.borderStyle.
  • 👉 Change
    • API
      • Chart method extension.addTechnicalIndicatorTemplate is changed to registerIndicator.
      • Chart method extension.addShapeTemplate is changed to registerOverlay.
      • Instance method setStyleOptions is changed to setStyles.
      • Instance method getStyleOptions is changed to getStyles.
      • Instance method setPaneOptions(options), options add new attribute gap.
      • Instance method setOffsetRightSpace is changed to setOffsetRightDistance.
      • Instance method createTechnicalIndicator is changed to createIndicator
      • Instance method overlayTechnicalIndicator is changed to overrideIndicator.
      • Instance method getTechnicalIndicatorByPaneId is changed to getIndicatorByPaneId.
      • Instance method removeTechnicalIndicator is changed to removeIndicator.
    • Style Configuration
      • All line.style options are changed to solid and dashed.
      • All dashValue is changed to dashedValue.
      • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marinEnd.
      • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marinEnd.
      • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles
    • Custom Extension
      • The technical indicator attribute calcParams has been changed to support any type.
      • The technical indicator attribute plots is changed to figures.
      • The technical indicator attribute regeneratePlots is changed to' regeneratefigures'.
      • The technical indicator attribute calcTechnicalIndicator is changed to calc.
      • The technical indicator attribute render is changed to 'draw'.
  • 🗑 Abandonment
    • API
      • Delete instance methods getWidth, getHeight, and use getSize instead.
      • Delete instance methods createShape, createAnnotation, createTag, and use createOverlay instead.
      • Delete instance methods removeShape, removeAnnotation, removeTag. Use removeOverlay instead.
      • Delete the instance method setShapeOptions and use overrideOverlay instead.
      • Delete instance methods createHtml, removeHtml, addTechnicalIndicatorTemplate, getTechnicalIndicatorTemplate, addShapeTemplate.
    • Style Configuration
      • Delete shape, annotation, tag and use overlay instead.
      • Delete candle.margintechnicalIndicator.margin
    • Custom Extension
      • The related attributes are no longer saved in the technical indicator template.
      • Delete Shape and use Overlay instead.

8.x

Go to Github to check the change log for 8.x.

7.x

Go to Github to check the change log for 7.x.

6.x

Go to Github to check the change log for 6.x.

5.x

Go to Github to view the 5.x release notes.

4.x

Go to Github to view the 4.x release notes.

',46),c=[a];function l(n,r,s,h,u,p){return o(),i("div",null,c)}const x=e(d,[["render",l]]);export{m as __pageData,x as default}; diff --git a/assets/en-US_guide_chart-api.md.c55032c6.lean.js b/assets/en-US_guide_chart-api.md.c55032c6.lean.js deleted file mode 100644 index 7e9416d57..000000000 --- a/assets/en-US_guide_chart-api.md.c55032c6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"Chart API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/chart-api.md","filePath":"en-US/guide/chart-api.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/chart-api.md"},o=l("",154),e=[o];function t(c,r,y,i,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default}; diff --git a/assets/en-US_guide_chart-api.md.c55032c6.js b/assets/en-US_guide_chart-api.md.d36887c7.js similarity index 99% rename from assets/en-US_guide_chart-api.md.c55032c6.js rename to assets/en-US_guide_chart-api.md.d36887c7.js index 961edb382..3b9b12798 100644 --- a/assets/en-US_guide_chart-api.md.c55032c6.js +++ b/assets/en-US_guide_chart-api.md.d36887c7.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"Chart API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/chart-api.md","filePath":"en-US/guide/chart-api.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/chart-api.md"},o=l(`

Chart API

init(ds, options)

typescript
(
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"Chart API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/chart-api.md","filePath":"en-US/guide/chart-api.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/chart-api.md"},o=l(`

Chart API

init(ds, options)

typescript
(
    ds: string | HTMLElement,
    options?: {
       locale?: string
diff --git a/assets/en-US_guide_chart-api.md.d36887c7.lean.js b/assets/en-US_guide_chart-api.md.d36887c7.lean.js
new file mode 100644
index 000000000..3b9b12798
--- /dev/null
+++ b/assets/en-US_guide_chart-api.md.d36887c7.lean.js
@@ -0,0 +1,777 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"Chart API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/chart-api.md","filePath":"en-US/guide/chart-api.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/chart-api.md"},o=l(`

Chart API

init(ds, options)

typescript
(
+   ds: string | HTMLElement,
+   options?: {
+      locale?: string
+      timezone?: string
+      styles?: string | object
+      customApi?: {
+         formatDate?: (dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string, type: number) => string
+         formatBigNumber?: (value: string | number) => string
+      },
+      thousandsSeparator?: string
+   }
+) => Chart
(
+   ds: string | HTMLElement,
+   options?: {
+      locale?: string
+      timezone?: string
+      styles?: string | object
+      customApi?: {
+         formatDate?: (dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string, type: number) => string
+         formatBigNumber?: (value: string | number) => string
+      },
+      thousandsSeparator?: string
+   }
+) => Chart

Initialize a chart and return the chart instance.

  • ds container, can be dom element or element id.
  • options optional configuration items.
    • locale language, built-in support for zh-CN and en-US.
    • timezone time zone name, such as 'Asia/Shanghai', if not set, it will automatically get the local time zone, please refer to timezone list.
    • styles It can be the style name registered through klinecharts.registerStyles, or it can be an object, a list of styles, see styles for details, and supports increments.
    • customApi customize some APIs.
      • formatDate formats a date.
      • formatBigNumber format big numbers, such as 1000 into 1k, 1000000 into 1M, etc.\\
    • thousandsSeparator thousands separator

dispose(dcs)

typescript
(dcs: HTMLElement | Chart | string) => void
(dcs: HTMLElement | Chart | string) => void

Destroys a chart, once destroyed the chart will no longer be available.

  • dcs can be a dom element, element id or chart instance.

registerLocale(locale, locales)

typescript
(
+   locale: string,
+   locales: {
+     time: string
+     open: string
+     high: string
+     low: string
+     close: string
+     volume: string
+   }
+) => void
(
+   locale: string,
+   locales: {
+     time: string
+     open: string
+     high: string
+     low: string
+     close: string
+     volume: string
+   }
+) => void

Add a localization language. Charts have built-in zh-CN and en-US.

  • locale language name
  • locales language configuration

getOverlayClass()

typescript
(name: string) => Nullable<OverlayConstructor>
(name: string) => Nullable<OverlayConstructor>

Get chart's overlay attributes by overlay name.

getSupportedLocales()

typescript
() => string[]
() => string[]

Get the localized language types supported by the chart.

registerStyles(name, styles)

typescript
(
+   name: string,
+   styles: object
+) => void
(
+   name: string,
+   styles: object
+) => void

Add a style configuration.

  • name style name
  • styles style configuration, refer to style for the type, support increment.

registerFigure(figure)

typescript
(
+   figure: {
+      name: string
+      draw: (ctx: CanvasRenderingContext2D, attrs: any, styles: object) => void
+      checkEventOn: (coordinate: Coordinate, attrs: any, styles: object) => boolean
+   }
+) => void
(
+   figure: {
+      name: string
+      draw: (ctx: CanvasRenderingContext2D, attrs: any, styles: object) => void
+      checkEventOn: (coordinate: Coordinate, attrs: any, styles: object) => boolean
+   }
+) => void

Add a figure.

  • figure Basic figure information, see figure for details
    • name name, unique identifier
    • draw drawing method
    • checkEventOn checks if the event is on the graph

getSupportedFigures()

typescript
() => string[]
() => string[]

Get the basic graph type supported by the graph.

getFigureClass(name)

typescript
(name: string) => Figure
(name: string) => Figure

Get graph class.

  • name name

registerIndicator(indicator)

typescript
(
+   indicator: {
+      name: string
+      shortName?: string
+      precision?: number
+      calcParams?: any[]
+      shouldOhlc?: boolean
+      shouldFormatBigNumber?: boolean
+      visible?: boolean
+      extendData?: any
+      series?: 'normal' | 'price' | 'volume'
+      figures?: Array<{
+         key: string
+         title?: string
+         type?: string
+         baseValue?: number
+         styles?: (
+            data: object,
+            indicator: object,
+            defaultStyles: object
+         ) => object
+         attrs: (
+            coordinate: object
+            bounding: Bounding
+            barSpace: BarSpace
+            xAxis: XAxis
+            yAxis: YAxis
+         ) => object
+      }>
+      minValue?: number
+      maxValue?: number
+      styles?: object
+      calc: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+      regenerateFigures?: (calcParms: any[]) => Array<{
+         key: string
+         title?: string
+         type?: string
+         baseValue?: number
+         styles?: (
+            data: object
+            indicator: object
+            defaultStyles: object
+         ) => object
+         attrs: (
+            coordinate: object
+            bounding: Bounding
+            barSpace: BarSpace
+            xAxis: XAxis
+            yAxis: YAxis
+         ) => object
+      }>
+      createTooltipDataSource?: (params: object) => {
+         name?: string
+         calcParamsText?: string
+         values?: Array<{
+            title: string | {
+               text: string
+               color: string
+            }
+            value: string | {
+               text: string
+               color: string
+            }
+         }>
+      }
+      draw?: (params: object) => boolean
+   }
+) => void
(
+   indicator: {
+      name: string
+      shortName?: string
+      precision?: number
+      calcParams?: any[]
+      shouldOhlc?: boolean
+      shouldFormatBigNumber?: boolean
+      visible?: boolean
+      extendData?: any
+      series?: 'normal' | 'price' | 'volume'
+      figures?: Array<{
+         key: string
+         title?: string
+         type?: string
+         baseValue?: number
+         styles?: (
+            data: object,
+            indicator: object,
+            defaultStyles: object
+         ) => object
+         attrs: (
+            coordinate: object
+            bounding: Bounding
+            barSpace: BarSpace
+            xAxis: XAxis
+            yAxis: YAxis
+         ) => object
+      }>
+      minValue?: number
+      maxValue?: number
+      styles?: object
+      calc: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+      regenerateFigures?: (calcParms: any[]) => Array<{
+         key: string
+         title?: string
+         type?: string
+         baseValue?: number
+         styles?: (
+            data: object
+            indicator: object
+            defaultStyles: object
+         ) => object
+         attrs: (
+            coordinate: object
+            bounding: Bounding
+            barSpace: BarSpace
+            xAxis: XAxis
+            yAxis: YAxis
+         ) => object
+      }>
+      createTooltipDataSource?: (params: object) => {
+         name?: string
+         calcParamsText?: string
+         values?: Array<{
+            title: string | {
+               text: string
+               color: string
+            }
+            value: string | {
+               text: string
+               color: string
+            }
+         }>
+      }
+      draw?: (params: object) => boolean
+   }
+) => void

Add a technical indicator.

  • indicator technical indicator information
    • name indicator name, unique identifier for creation and operation
    • shortName short name for display
    • precision precision
    • calcParams calculation parameters
    • shouldOhlc needs ohlc auxiliary graphics
    • shouldFormatBigNumber should format large numbers. For example, 1000 is converted to 1k, 1000000 is converted to 1M, etc.
    • visible visible or not
    • extendData extended data
    • series indicator series, options are 'normal', 'price' and 'volume'
    • figures graphics configuration
    • minValue specifies the minimum value
    • maxValue specifies the maximum value
    • styles styles
    • calc calculation method
    • regenerateFigures method to regenerate figure information
    • createTooltipDataSource method to create custom tip information
    • draw custom drawing method

getSupportedIndicators()

typescript
() => string[]
() => string[]

Get technical indicators for chart support.

registerOverlay(overlay)

typescript
(
+   overlay: {
+      name: string
+      totalStep?: number
+      lock?: boolean
+      visible?: boolean
+      zLevel?: number
+      needDefaultPointFigure?: boolean
+      needDefaultXAxisFigure?: boolean
+      needDefaultYAxisFigure?: boolean
+      mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+      modeSensitivity?: number
+      points?: Array<{ timestamp: number, dataIndex?: number, value?: number }>
+      extendData?: any
+      styles?: object
+      createPointFigures?: (params: object) => {
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      } | Array<{
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      }>
+      createXAxisFigures?: (params: object) => {
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      } | Array<{
+         key?: string,
+         type: string,
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      }>
+      createYAxisFigures?: (params: object) => {
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      } | Array<{
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      }>
+      performEventPressedMove?: (params: object) => void
+      performEventMoveForDrawing?: (params: object) => void
+      onDrawStart?: (event: object) => boolean
+      onDrawing?: (event: object) => boolean
+      onDrawEnd?: (event: object) => boolean
+      onClick?: (event: object) => boolean
+      onDoubleClick?: (event: object) => boolean
+      onRightClick?: (event: object) => boolean
+      onPressedMoveStart?: (event: object) => boolean
+      onPressedMoving?: (event: object) => boolean
+      onPressedMoveEnd?: (event: object) => boolean,
+      onMouseEnter?: (event: object) => boolean
+      onMouseLeave?: (event: object) => boolean
+      onRemoved?: (event: object) => boolean
+      onSelected?: (event: object) => boolean
+      onDeselected?: (event: object) => boolean
+   }
+) => void
(
+   overlay: {
+      name: string
+      totalStep?: number
+      lock?: boolean
+      visible?: boolean
+      zLevel?: number
+      needDefaultPointFigure?: boolean
+      needDefaultXAxisFigure?: boolean
+      needDefaultYAxisFigure?: boolean
+      mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+      modeSensitivity?: number
+      points?: Array<{ timestamp: number, dataIndex?: number, value?: number }>
+      extendData?: any
+      styles?: object
+      createPointFigures?: (params: object) => {
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      } | Array<{
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      }>
+      createXAxisFigures?: (params: object) => {
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      } | Array<{
+         key?: string,
+         type: string,
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      }>
+      createYAxisFigures?: (params: object) => {
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      } | Array<{
+         key?: string
+         type: string
+         attrs: any | any[]
+         styles?: any
+         ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+      }>
+      performEventPressedMove?: (params: object) => void
+      performEventMoveForDrawing?: (params: object) => void
+      onDrawStart?: (event: object) => boolean
+      onDrawing?: (event: object) => boolean
+      onDrawEnd?: (event: object) => boolean
+      onClick?: (event: object) => boolean
+      onDoubleClick?: (event: object) => boolean
+      onRightClick?: (event: object) => boolean
+      onPressedMoveStart?: (event: object) => boolean
+      onPressedMoving?: (event: object) => boolean
+      onPressedMoveEnd?: (event: object) => boolean,
+      onMouseEnter?: (event: object) => boolean
+      onMouseLeave?: (event: object) => boolean
+      onRemoved?: (event: object) => boolean
+      onSelected?: (event: object) => boolean
+      onDeselected?: (event: object) => boolean
+   }
+) => void

Add a overlay.

  • overlay overlay information, see overlay for details
    • name overlay name, unique identifier for creation
    • totalStep total implementation steps
    • lock is locked to prevent dragging
    • visible visible or not
    • zLevel draw level
    • needDefaultPointFigure needs the default point figure
    • needDefaultXAxisFigure needs the default x-axis figure
    • needDefaultYAxisFigure needs the default y-axis figure
    • mode mode, options are 'normal', 'weak_magnet' and 'strong_magnet'
    • modeSensitivity mode sensitivity, only valid when mode is weak_magnet
    • points point information
    • extendData extended data
    • styles styles
    • createPointFigures creates figures corresponding to points
    • createXAxisFigures creates figures on the x-axis
    • createYAxisFigures creates figures on the y-axis
    • performEventPressedMove special handling method for press and move event
    • performEventMoveForDrawing special processing method during moving event
    • onDrawStart start drawing event
    • onDrawing drawing event
    • onDrawEnd draw end event
    • onClick click event
    • onDoubleClick double click event
    • onRightClick right click event
    • onPressedMoveStart press start move event
    • onPressedMoving Press and move event
    • onPressedMoveEnd Press and move end event
    • onMouseEnter mouse enter event
    • onMouseLeave mouse out event
    • onRemoved delete event
    • onSelected selected event
    • onDeselected deselected event

getSupportedOverlays()

typescript
() => string[]
() => string[]

Get overlays for chart support.

version()

typescript
() => string
() => string

Get the current version number of the chart.

utils

A collection of helper methods.

utils.clone(target)

typescript
(target: any) => any
(target: any) => any

deep copy.

utils.merge(target, source)

typescript
(target: object, source: object) => void
(target: object, source: object) => void

Merge one object into another.

utils.isString(value)

typescript
(value: any) => boolean
(value: any) => boolean

Checks if a value is a string.

utils.isNumber(value)

typescript
(value: any) => boolean
(value: any) => boolean

Checks if a value is a number.

utils.isValid(value)

typescript
(value: any) => boolean
(value: any) => boolean

Checks if a value is valid.

utils.isObject(value)

typescript
(value: any) => boolean
(value: any) => boolean

Checks if a value is an object.

utils.isFunction(value)

typescript
(value: any) => boolean
(value: any) => boolean

Checks if a value is a method.

utils.isBoolean(value)

typescript
(value: any) => boolean
(value: any) => boolean

Checks if a value is a bool value.

utils.formatValue(value, key, defaultValue)

typescript
(data: any, key: string, defaultValue?: any) => any
(data: any, key: string, defaultValue?: any) => any

Get the corresponding value from a certain value, support nesting, such as const o = { a: { b: { c: 1 } } }, formatValue(o, 'a.b.c') takes the value of c .

utils.formatPrecision(value)

typescript
(value: string | number, precision?: number) => string
(value: string | number, precision?: number) => string

Formatting precision.

utils.formatBigNumber(value)

typescript
(value: string | number) => string
(value: string | number) => string

Format large numbers, such as 1000 into 1k, 1000000 into 1M, etc.

utils.formatDate(dateTimeFormat, timestamp, format)

typescript
(dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string) => string
(dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string) => string

Format date. format, such as 'YYYY-MM-DD HH:mm:ss'.

utils.formatThousands(value, sign)

typescript
(value: string | number, sign: string) => string
(value: string | number, sign: string) => string

Format thousands separator.

utils.calcTextWidth(text, size, weight, family)

typescript
(text: string, size?: number, weight?: string | number, family?: string) => number
(text: string, size?: number, weight?: string | number, family?: string) => number

Calculate text width.

utils.getLinearSlopeIntercept(coordinate1, coordinate2)

typescript
(
+   coordinate1: {
+      x: number
+      y: number
+   },
+   coordinate2: {
+      x: number
+      y: number
+   }
+) => []
(
+   coordinate1: {
+      x: number
+      y: number
+   },
+   coordinate2: {
+      x: number
+      y: number
+   }
+) => []

According to two coordinate points, get the slope and constant term of the line composed of points, namely k and b in y = kx + b.

utils.getLinearYFromCoordinates(coordinate1, coordinate2, targetCoordinate)

typescript
(
+  coordinate1: {
+      x: number
+      y: number
+   },
+   coordinate2: {
+      x: number
+      y: number
+   },
+   targetCoordinate: {
+      x: number
+      y: number
+   }
+) => number
(
+  coordinate1: {
+      x: number
+      y: number
+   },
+   coordinate2: {
+      x: number
+      y: number
+   },
+   targetCoordinate: {
+      x: number
+      y: number
+   }
+) => number

Get the y-axis coordinate value of a point on the line formed by two other coordinate points.

utils.getLinearYFromSlopeIntercept(kb, targetCoordinate)

typescript
(
+   kb: Array<number>,
+   targetCoordinate: {
+      x: number
+      y: number
+   }
+) => number
(
+   kb: Array<number>,
+   targetCoordinate: {
+      x: number
+      y: number
+   }
+) => number

Get the y-coordinate value of a point on the line formed by the slope and the constant term.

utils.checkCoordinateOnArc(coordinate, arc)

typescript
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   arc: {
+      x: number
+      y: number
+      r: number
+      startAngle: number
+      endAngle: number
+   }
+) => boolean
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   arc: {
+      x: number
+      y: number
+      r: number
+      startAngle: number
+      endAngle: number
+   }
+) => boolean

Check whether a certain coordinate point is on the arc.

  • coordinate coordinate point information
  • arc arc parameter
    • x the x-axis value of the center of the circle
    • y the y-axis value of the center of the circle
    • r radius
    • startAngle start angle
    • endAngle end angle

utils.checkCoordinateOnCircle(coordinate, circle)

typescript
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   circle: {
+      x: number
+      y: number
+      r: number
+   }
+) => boolean
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   circle: {
+      x: number
+      y: number
+      r: number
+   }
+) => boolean

Checks whether a certain coordinate point is on a circle.

  • coordinate coordinate point information
  • circle circle parameter
    • x the x-axis value of the center of the circle
    • y the y-axis value of the center of the circle
    • r radius

utils.checkCoordinateOnLine(coordinate, line)

typescript
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   line: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   }
+) => boolean
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   line: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   }
+) => boolean

Check if a certain coordinate point is on the line.

utils.checkCoordinateOnPolygon(coordinate, polygon)

typescript
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   polygon: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   }
+) => boolean
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   polygon: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   }
+) => boolean

Checks whether a certain coordinate point is on a polygon.

utils.checkCoordinateOnRect(coordinate, rect)

typescript
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   rect: {
+      x: number
+      y: number
+      width: number
+      height: number
+   }
+) => boolean
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   rect: {
+      x: number
+      y: number
+      width: number
+      height: number
+   }
+) => boolean

Checks whether a certain coordinate point is on a rectangle.

  • coordinate coordinate point information
  • rect rectangle parameter
    • x starting point x-axis value
    • y starting point y-axis value
    • width width
    • height height

utils.checkCoordinateOnText(coordinate, text, styles)

typescript
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   text: {
+      x: number
+      y: number
+      text: any
+      align?: 'center' | 'end' | 'left' | 'right' | 'start'
+      baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+   },
+   styles: {
+      color?: string
+      size?: number
+      family?: string
+      weight?: number | string
+   }
+) => boolean
(
+   coordinate: {
+      x: number
+      y: number
+   },
+   text: {
+      x: number
+      y: number
+      text: any
+      align?: 'center' | 'end' | 'left' | 'right' | 'start'
+      baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+   },
+   styles: {
+      color?: string
+      size?: number
+      family?: string
+      weight?: number | string
+   }
+) => boolean

Check if a certain coordinate point is on the text.

  • coordinate coordinate point information
  • text text parameter
    • x starting point x-axis value
    • y starting point y-axis value
    • text text content
    • align horizontal alignment
    • baseline vertical alignment
  • styles styles
    • color color
    • size size
    • family font
    • weight weight

utils.drawArc(ctx, arc, styles)

typescript
(
+   ctx: CanvasRenderingContext2D,
+   arc: {
+      x: number
+      y: number
+      r: number
+      startAngle: number
+      endAngle: number
+   },
+   styles: {
+      style?: 'solid' | 'dashed'
+      size?: number
+      color?: string
+      dashedValue?: number[]
+   }
+) => void
(
+   ctx: CanvasRenderingContext2D,
+   arc: {
+      x: number
+      y: number
+      r: number
+      startAngle: number
+      endAngle: number
+   },
+   styles: {
+      style?: 'solid' | 'dashed'
+      size?: number
+      color?: string
+      dashedValue?: number[]
+   }
+) => void

Draw an arc.

  • ctx canvas context
  • arc arc parameter
    • x the x-axis value of the center of the circle
    • y the y-axis value of the center of the circle
    • r radius
    • startAngle starting angle
    • endAngle end angle
  • styles styles
    • style arc style
    • size thickness
    • color color
    • dashedValue Dashed parameter value

utils.drawCircle(ctx, circle, styles)

typescript
(
+   ctx: CanvasRenderingContext2D,
+   circle: {
+      x: number
+      y: number
+      r: number
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string | CanvasGradient
+      borderColor?: string
+      borderSize?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: Array<number>
+   }
+) => void
(
+   ctx: CanvasRenderingContext2D,
+   circle: {
+      x: number
+      y: number
+      r: number
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string | CanvasGradient
+      borderColor?: string
+      borderSize?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: Array<number>
+   }
+) => void

Draw the circle.

  • ctx canvas context
  • circle circle parameter
    • x the x-axis value of the center of the circle
    • y the y-axis value of the center of the circle
    • r radius
  • styles styles
    • style style
    • color color
    • borderColor border color
    • borderSize border thickness
    • borderStyle border style
    • borderDashedValue border dashed line parameter value

utils.drawLine(ctx, line, styles)

typescript
(
+   ctx: CanvasRenderingContext2D,
+   line: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   },
+   styles: {
+      style?: 'solid' | 'dashed'
+      size?: number
+      color?: string
+      dashedValue?: number[]
+   }
+) => void
(
+   ctx: CanvasRenderingContext2D,
+   line: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   },
+   styles: {
+      style?: 'solid' | 'dashed'
+      size?: number
+      color?: string
+      dashedValue?: number[]
+   }
+) => void

Draw the line.

  • ctx canvas context
  • line line parameter
  • styles styles
    • style line style
    • size thickness
    • color color
    • dashedValue Dashed parameter value

utils.drawPolygon(ctx, polygon, styles)

typescript
(
+   ctx: CanvasRenderingContext2D,
+   polygon: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string | CanvasGradient
+      borderColor?: string
+      borderSize?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: Array<number>
+   }
+) => void
(
+   ctx: CanvasRenderingContext2D,
+   polygon: {
+      coordinates: Array<{
+         x: number
+         y: number
+      }>
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string | CanvasGradient
+      borderColor?: string
+      borderSize?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: Array<number>
+   }
+) => void

Draw the polygon.

  • ctx canvas context
  • polygon polygon parameter
  • styles styles
    • style style
    • color color
    • borderColor border color
    • borderSize border thickness
    • borderStyle border style
    • borderDashedValue border dashed line parameter value

utils.drawRect(ctx, rect, styles)

typescript
(
+   ctx: CanvasRenderingContext2D,
+   rect: {
+      x: number
+      y: number
+      width: number
+      height: number
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string | CanvasGradient
+      borderColor?: string
+      borderSize?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: Array<number>
+      borderRadius?: number
+   }
+) => void
(
+   ctx: CanvasRenderingContext2D,
+   rect: {
+      x: number
+      y: number
+      width: number
+      height: number
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string | CanvasGradient
+      borderColor?: string
+      borderSize?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: Array<number>
+      borderRadius?: number
+   }
+) => void

Draw a rectangle.

  • ctx canvas context
  • rect rectangle parameter
    • x starting point x-axis value
    • y starting point y-axis value
    • width width
    • height height
  • styles styles
    • style style
    • color color
    • borderColor border color
    • borderSize border thickness
    • borderStyle border style
    • borderDashedValue border dashed line parameter value
    • borderRadius border radius

utils.drawText(ctx, text, styles)

typescript
(
+   ctx: CanvasRenderingContext2D,
+   text: {
+      x: number
+      y: number
+      text: any
+      align?: 'center' | 'end' | 'left' | 'right' | 'start'
+      baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+   },
+   styles: {
+      color?: string
+      size?: number
+      family?: string
+      weight?: number | string
+   }
+) => void
(
+   ctx: CanvasRenderingContext2D,
+   text: {
+      x: number
+      y: number
+      text: any
+      align?: 'center' | 'end' | 'left' | 'right' | 'start'
+      baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+   },
+   styles: {
+      color?: string
+      size?: number
+      family?: string
+      weight?: number | string
+   }
+) => void

Draw text.

  • ctx canvas context
  • text text parameter
    • x starting point x-axis value
    • y starting point y-axis value
    • text text content
    • align horizontal alignment
    • baseline vertical alignment
  • styles styles
    • color color
    • size size
    • family font
    • weight weight

utils.drawRectText(ctx, rectText, styles)

typescript
(
+   ctx: CanvasRenderingContext2D,
+   rectText: {
+      x: number
+      y: number
+      text: any
+      align?: 'center' | 'end' | 'left' | 'right' | 'start'
+      baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string
+      size?: number
+      family?: string
+      weight?: number | string
+      paddingLeft?: number
+      paddingTop?: number
+      paddingRight?: number
+      paddingBottom?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: number[]
+      borderSize?: number
+      borderColor?: string
+      borderRadius?: number
+      backgroundColor?: string
+   }
+) => void
(
+   ctx: CanvasRenderingContext2D,
+   rectText: {
+      x: number
+      y: number
+      text: any
+      align?: 'center' | 'end' | 'left' | 'right' | 'start'
+      baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+   },
+   styles: {
+      style?: 'stroke' | 'fill' | 'stroke_fill'
+      color?: string
+      size?: number
+      family?: string
+      weight?: number | string
+      paddingLeft?: number
+      paddingTop?: number
+      paddingRight?: number
+      paddingBottom?: number
+      borderStyle?: 'solid' | 'dashed'
+      borderDashedValue?: number[]
+      borderSize?: number
+      borderColor?: string
+      borderRadius?: number
+      backgroundColor?: string
+   }
+) => void

Draw text with background.

  • ctx canvas context
  • rectText text parameter
    • x starting point x-axis value
    • y starting point y-axis value
    • text text content
    • align horizontal alignment
    • baseline vertical alignment
  • styles styles
    • style style
    • color color
    • size size
    • family font
    • weight weight
    • paddingLeft left padding,
    • paddingTop top padding,
    • paddingRight right padding,
    • paddingBottom bottom padding,
    • borderColor border color
    • borderSize border thickness
    • borderStyle border style
    • borderRadius border radius size
    • borderDashedValue border dashed line parameter value
    • backgroundColor background color
`,154),e=[o];function t(c,r,y,i,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default}; diff --git a/assets/en-US_guide_datasource.md.782a2025.lean.js b/assets/en-US_guide_datasource.md.782a2025.lean.js deleted file mode 100644 index 52c5313c9..000000000 --- a/assets/en-US_guide_datasource.md.782a2025.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const h=JSON.parse('{"title":"📚 Data","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/datasource.md","filePath":"en-US/guide/datasource.md","lastUpdated":1689272235000}'),e={name:"en-US/guide/datasource.md"},p=l("",4),o=[p];function t(c,r,i,y,d,F){return a(),n("div",null,o)}const D=s(e,[["render",t]]);export{h as __pageData,D as default}; diff --git a/assets/en-US_guide_datasource.md.782a2025.js b/assets/en-US_guide_datasource.md.9c9be884.js similarity index 96% rename from assets/en-US_guide_datasource.md.782a2025.js rename to assets/en-US_guide_datasource.md.9c9be884.js index c2c8d4d5a..4a82a37bf 100644 --- a/assets/en-US_guide_datasource.md.782a2025.js +++ b/assets/en-US_guide_datasource.md.9c9be884.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const h=JSON.parse('{"title":"📚 Data","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/datasource.md","filePath":"en-US/guide/datasource.md","lastUpdated":1689272235000}'),e={name:"en-US/guide/datasource.md"},p=l(`

📚 Data

The data required for the chart must be in a fixed format. Through the chart API applyNewData(dataList, more), applyMoreData(dataList, more) and updateData(data) to interact data with the chart.

typescript
{
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const h=JSON.parse('{"title":"📚 Data","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/datasource.md","filePath":"en-US/guide/datasource.md","lastUpdated":1691074246000}'),e={name:"en-US/guide/datasource.md"},p=l(`

📚 Data

The data required for the chart must be in a fixed format. Through the chart API applyNewData(dataList, more), applyMoreData(dataList, more) and updateData(data) to interact data with the chart.

typescript
{
   // Timestamp, millisecond, required fields
   timestamp: number
   // Open price, required fields
@@ -28,4 +28,4 @@ import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const h=
   volume: number
   // Turnover, a non-required field, if you need to display the technical indicators 'EMV' and 'AVP', you need to fill this field with data.
   turnover: number
-}
`,4),o=[p];function t(c,r,i,y,d,F){return a(),n("div",null,o)}const D=s(e,[["render",t]]);export{h as __pageData,D as default}; +}
`,4),o=[p];function t(r,c,i,y,d,F){return a(),n("div",null,o)}const D=s(e,[["render",t]]);export{h as __pageData,D as default}; diff --git a/assets/en-US_guide_datasource.md.9c9be884.lean.js b/assets/en-US_guide_datasource.md.9c9be884.lean.js new file mode 100644 index 000000000..4a82a37bf --- /dev/null +++ b/assets/en-US_guide_datasource.md.9c9be884.lean.js @@ -0,0 +1,31 @@ +import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const h=JSON.parse('{"title":"📚 Data","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/datasource.md","filePath":"en-US/guide/datasource.md","lastUpdated":1691074246000}'),e={name:"en-US/guide/datasource.md"},p=l(`

📚 Data

The data required for the chart must be in a fixed format. Through the chart API applyNewData(dataList, more), applyMoreData(dataList, more) and updateData(data) to interact data with the chart.

typescript
{
+  // Timestamp, millisecond, required fields
+  timestamp: number
+  // Open price, required fields
+  open: number
+  // Close price, required field
+  close: number
+  // Highest price, required field
+  high: number
+  // Lowest price, required field
+  low: number
+  // volume, optional field
+  volume: number
+  // Turnover, a non-required field, if you need to display the technical indicators 'EMV' and 'AVP', you need to fill this field with data.
+  turnover: number
+}
{
+  // Timestamp, millisecond, required fields
+  timestamp: number
+  // Open price, required fields
+  open: number
+  // Close price, required field
+  close: number
+  // Highest price, required field
+  high: number
+  // Lowest price, required field
+  low: number
+  // volume, optional field
+  volume: number
+  // Turnover, a non-required field, if you need to display the technical indicators 'EMV' and 'AVP', you need to fill this field with data.
+  turnover: number
+}
`,4),o=[p];function t(r,c,i,y,d,F){return a(),n("div",null,o)}const D=s(e,[["render",t]]);export{h as __pageData,D as default}; diff --git a/assets/en-US_guide_environment.md.8463c7a7.lean.js b/assets/en-US_guide_environment.md.8463c7a7.lean.js deleted file mode 100644 index 08096b3ea..000000000 --- a/assets/en-US_guide_environment.md.8463c7a7.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as o}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"🏝️ Environment","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/environment.md","filePath":"en-US/guide/environment.md","lastUpdated":1689272235000}'),l={name:"en-US/guide/environment.md"},e=o("",10),t=[e];function p(r,c,i,y,D,h){return a(),n("div",null,t)}const m=s(l,[["render",p]]);export{F as __pageData,m as default}; diff --git a/assets/en-US_guide_environment.md.8463c7a7.js b/assets/en-US_guide_environment.md.bece0f9a.js similarity index 96% rename from assets/en-US_guide_environment.md.8463c7a7.js rename to assets/en-US_guide_environment.md.bece0f9a.js index b65f528c7..3de5c8788 100644 --- a/assets/en-US_guide_environment.md.8463c7a7.js +++ b/assets/en-US_guide_environment.md.bece0f9a.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,V as o}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"🏝️ Environment","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/environment.md","filePath":"en-US/guide/environment.md","lastUpdated":1689272235000}'),l={name:"en-US/guide/environment.md"},e=o(`

🏝️ Environment

Browser support

The chart is built based on html5 canvas and needs to run on a browser that supports canvas. If it needs to run on the mobile terminal, please use webview to load it.

Polyfill

core.js

The internal collection of the chart uses Map for compatibility with unsupported older browsers.

javascript
import 'core.js';
+import{_ as s,v as a,b as n,R as o}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"🏝️ Environment","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/environment.md","filePath":"en-US/guide/environment.md","lastUpdated":1691074246000}'),l={name:"en-US/guide/environment.md"},e=o(`

🏝️ Environment

Browser support

The chart is built based on html5 canvas and needs to run on a browser that supports canvas. If it needs to run on the mobile terminal, please use webview to load it.

Polyfill

core.js

The internal collection of the chart uses Map for compatibility with unsupported older browsers.

javascript
import 'core.js';
 import { init } from 'klincharts';
import 'core.js';
 import { init } from 'klincharts';

Intl.js

Charts rely on Intl, some browsers do not have this API.

javascript
import 'intl';
 import 'intl/local-data/jsonp/en';
diff --git a/assets/en-US_guide_environment.md.bece0f9a.lean.js b/assets/en-US_guide_environment.md.bece0f9a.lean.js
new file mode 100644
index 000000000..3de5c8788
--- /dev/null
+++ b/assets/en-US_guide_environment.md.bece0f9a.lean.js
@@ -0,0 +1,7 @@
+import{_ as s,v as a,b as n,R as o}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"🏝️ Environment","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/environment.md","filePath":"en-US/guide/environment.md","lastUpdated":1691074246000}'),l={name:"en-US/guide/environment.md"},e=o(`

🏝️ Environment

Browser support

The chart is built based on html5 canvas and needs to run on a browser that supports canvas. If it needs to run on the mobile terminal, please use webview to load it.

Polyfill

core.js

The internal collection of the chart uses Map for compatibility with unsupported older browsers.

javascript
import 'core.js';
+import { init } from 'klincharts';
import 'core.js';
+import { init } from 'klincharts';

Intl.js

Charts rely on Intl, some browsers do not have this API.

javascript
import 'intl';
+import 'intl/local-data/jsonp/en';
+import { init } from 'klincharts';
import 'intl';
+import 'intl/local-data/jsonp/en';
+import { init } from 'klincharts';
`,10),t=[e];function p(r,c,i,y,D,h){return a(),n("div",null,t)}const m=s(l,[["render",p]]);export{F as __pageData,m as default}; diff --git a/assets/en-US_guide_faq.md.99902967.lean.js b/assets/en-US_guide_faq.md.99902967.lean.js deleted file mode 100644 index 32be4c2c2..000000000 --- a/assets/en-US_guide_faq.md.99902967.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as t,V as n}from"./chunks/framework.410404a1.js";const f=JSON.parse('{"title":"🙋 FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/faq.md","filePath":"en-US/guide/faq.md","lastUpdated":1689272235000}'),o={name:"en-US/guide/faq.md"},s=n("",14),l=[s];function i(c,r,h,p,d,u){return e(),t("div",null,l)}const w=a(o,[["render",i]]);export{f as __pageData,w as default}; diff --git a/assets/en-US_guide_faq.md.99902967.js b/assets/en-US_guide_faq.md.d858da72.js similarity index 96% rename from assets/en-US_guide_faq.md.99902967.js rename to assets/en-US_guide_faq.md.d858da72.js index dccfcada2..4fcd0d59e 100644 --- a/assets/en-US_guide_faq.md.99902967.js +++ b/assets/en-US_guide_faq.md.d858da72.js @@ -1,4 +1,4 @@ -import{_ as a,o as e,c as t,V as n}from"./chunks/framework.410404a1.js";const f=JSON.parse('{"title":"🙋 FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/faq.md","filePath":"en-US/guide/faq.md","lastUpdated":1689272235000}'),o={name:"en-US/guide/faq.md"},s=n(`

🙋 FAQ

After the chart is initialized, only one line can be seen?

The chart always fills the container, checking to see if the container has height.

The candle shows a line, no fluctuation, what to do?

Chart default price precision is two decimal, call setPriceVolumePrecision(pricePrecision, volumePrecision) to set the precision.

How to create a real-time chart?

Through style settings.

javascript
chart.setStyles({
+import{_ as a,v as e,b as t,R as n}from"./chunks/framework.3ac7bdc3.js";const f=JSON.parse('{"title":"🙋 FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/faq.md","filePath":"en-US/guide/faq.md","lastUpdated":1691074246000}'),o={name:"en-US/guide/faq.md"},s=n(`

🙋 FAQ

After the chart is initialized, only one line can be seen?

The chart always fills the container, checking to see if the container has height.

The candle shows a line, no fluctuation, what to do?

Chart default price precision is two decimal, call setPriceVolumePrecision(pricePrecision, volumePrecision) to set the precision.

How to create a real-time chart?

Through style settings.

javascript
chart.setStyles({
   candle: {
     type: 'area',
   },
diff --git a/assets/en-US_guide_faq.md.d858da72.lean.js b/assets/en-US_guide_faq.md.d858da72.lean.js
new file mode 100644
index 000000000..4fcd0d59e
--- /dev/null
+++ b/assets/en-US_guide_faq.md.d858da72.lean.js
@@ -0,0 +1,9 @@
+import{_ as a,v as e,b as t,R as n}from"./chunks/framework.3ac7bdc3.js";const f=JSON.parse('{"title":"🙋 FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/faq.md","filePath":"en-US/guide/faq.md","lastUpdated":1691074246000}'),o={name:"en-US/guide/faq.md"},s=n(`

🙋 FAQ

After the chart is initialized, only one line can be seen?

The chart always fills the container, checking to see if the container has height.

The candle shows a line, no fluctuation, what to do?

Chart default price precision is two decimal, call setPriceVolumePrecision(pricePrecision, volumePrecision) to set the precision.

How to create a real-time chart?

Through style settings.

javascript
chart.setStyles({
+  candle: {
+    type: 'area',
+  },
+});
chart.setStyles({
+  candle: {
+    type: 'area',
+  },
+});

Built-in technical indicators, calculated data is not what you want, how to do?

You can override calc by the chart method createIndicator or overrideIndicator.

What if I want to create an indicator other than the built-in technical indicator?

Charts support custom technical indicators, see indicators for details.

Want to mark the point of sale, how should do?

Overlays can be used. The built-in overlay has a simpleAnnotation, which can be created with the chart api createOverlay({ name: 'simpleAnnotation', ... }, paneId).

`,14),l=[s];function i(c,r,h,p,d,u){return e(),t("div",null,l)}const w=a(o,[["render",i]]);export{f as __pageData,w as default}; diff --git a/assets/en-US_guide_feedback.md.00404ad3.js b/assets/en-US_guide_feedback.md.00404ad3.js deleted file mode 100644 index 2de53584c..000000000 --- a/assets/en-US_guide_feedback.md.00404ad3.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,a}from"./chunks/qq_group_qr_code.5c7ad67d.js";import{_ as t,o as r,c as i,V as s}from"./chunks/framework.410404a1.js";const f=JSON.parse('{"title":"💬 Feedback","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/feedback.md","filePath":"en-US/guide/feedback.md","lastUpdated":1689272235000}'),o={name:"en-US/guide/feedback.md"},h=s('

💬 Feedback

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

Wechat discussion group

Scan to add developers, note KLineChart, and join the group chat.

QQ discussion group

',11),d=[h];function c(n,l,u,p,g,_){return r(),i("div",null,d)}const k=t(o,[["render",c]]);export{f as __pageData,k as default}; diff --git a/assets/en-US_guide_feedback.md.00404ad3.lean.js b/assets/en-US_guide_feedback.md.00404ad3.lean.js deleted file mode 100644 index 568d4ed9b..000000000 --- a/assets/en-US_guide_feedback.md.00404ad3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,a}from"./chunks/qq_group_qr_code.5c7ad67d.js";import{_ as t,o as r,c as i,V as s}from"./chunks/framework.410404a1.js";const f=JSON.parse('{"title":"💬 Feedback","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/feedback.md","filePath":"en-US/guide/feedback.md","lastUpdated":1689272235000}'),o={name:"en-US/guide/feedback.md"},h=s("",11),d=[h];function c(n,l,u,p,g,_){return r(),i("div",null,d)}const k=t(o,[["render",c]]);export{f as __pageData,k as default}; diff --git a/assets/en-US_guide_feedback.md.9beda3e8.js b/assets/en-US_guide_feedback.md.9beda3e8.js new file mode 100644 index 000000000..8f01810c8 --- /dev/null +++ b/assets/en-US_guide_feedback.md.9beda3e8.js @@ -0,0 +1 @@ +import{_ as e,v as a,b as t,R as r}from"./chunks/framework.3ac7bdc3.js";import{_ as s,a as i}from"./chunks/qq_group_qr_code.5c7ad67d.js";const _=JSON.parse('{"title":"💬 Feedback","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/feedback.md","filePath":"en-US/guide/feedback.md","lastUpdated":1691074246000}'),o={name:"en-US/guide/feedback.md"},h=r('

💬 Feedback

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

Wechat discussion group

Scan to add developers, note KLineChart, and join the group chat.

QQ discussion group

',11),d=[h];function n(c,u,l,p,g,b){return a(),t("div",null,d)}const k=e(o,[["render",n]]);export{_ as __pageData,k as default}; diff --git a/assets/en-US_guide_feedback.md.9beda3e8.lean.js b/assets/en-US_guide_feedback.md.9beda3e8.lean.js new file mode 100644 index 000000000..8f01810c8 --- /dev/null +++ b/assets/en-US_guide_feedback.md.9beda3e8.lean.js @@ -0,0 +1 @@ +import{_ as e,v as a,b as t,R as r}from"./chunks/framework.3ac7bdc3.js";import{_ as s,a as i}from"./chunks/qq_group_qr_code.5c7ad67d.js";const _=JSON.parse('{"title":"💬 Feedback","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/feedback.md","filePath":"en-US/guide/feedback.md","lastUpdated":1691074246000}'),o={name:"en-US/guide/feedback.md"},h=r('

💬 Feedback

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

Wechat discussion group

Scan to add developers, note KLineChart, and join the group chat.

QQ discussion group

',11),d=[h];function n(c,u,l,p,g,b){return a(),t("div",null,d)}const k=e(o,[["render",n]]);export{_ as __pageData,k as default}; diff --git a/assets/en-US_guide_figure.md.3b2cddea.lean.js b/assets/en-US_guide_figure.md.3b2cddea.lean.js deleted file mode 100644 index b252b9ec6..000000000 --- a/assets/en-US_guide_figure.md.3b2cddea.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const C=JSON.parse('{"title":"Figure","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/figure.md","filePath":"en-US/guide/figure.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/figure.md"},o=l("",33),e=[o];function t(c,r,y,i,D,F){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{C as __pageData,d as default}; diff --git a/assets/en-US_guide_figure.md.3b2cddea.js b/assets/en-US_guide_figure.md.66cf160e.js similarity index 99% rename from assets/en-US_guide_figure.md.3b2cddea.js rename to assets/en-US_guide_figure.md.66cf160e.js index a9f698607..9b5b12264 100644 --- a/assets/en-US_guide_figure.md.3b2cddea.js +++ b/assets/en-US_guide_figure.md.66cf160e.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const C=JSON.parse('{"title":"Figure","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/figure.md","filePath":"en-US/guide/figure.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/figure.md"},o=l(`

Figure

Figure are an important part of the chart. All elements on the chart are composed of figures. If you need to make complex custom technical indicators and overlays, it is recommended to read carefully. This document describes the built-in figures and how to customize a figure. The basic figure can be obtained through the chart method klinecharts.getFigureClass(name).

Example of use

Note

It needs to be used when there is a canvas context.

javascript
// Get the figure class
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const C=JSON.parse('{"title":"Figure","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/figure.md","filePath":"en-US/guide/figure.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/figure.md"},o=l(`

Figure

Figure are an important part of the chart. All elements on the chart are composed of figures. If you need to make complex custom technical indicators and overlays, it is recommended to read carefully. This document describes the built-in figures and how to customize a figure. The basic figure can be obtained through the chart method klinecharts.getFigureClass(name).

Example of use

Note

It needs to be used when there is a canvas context.

javascript
// Get the figure class
 // name is the name of the figure, such as 'arc', 'circle', etc.
 const Figure = klinecharts.getFigureClass(name)
 // instantiate and draw
diff --git a/assets/en-US_guide_figure.md.66cf160e.lean.js b/assets/en-US_guide_figure.md.66cf160e.lean.js
new file mode 100644
index 000000000..9b5b12264
--- /dev/null
+++ b/assets/en-US_guide_figure.md.66cf160e.lean.js
@@ -0,0 +1,525 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const C=JSON.parse('{"title":"Figure","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/figure.md","filePath":"en-US/guide/figure.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/figure.md"},o=l(`

Figure

Figure are an important part of the chart. All elements on the chart are composed of figures. If you need to make complex custom technical indicators and overlays, it is recommended to read carefully. This document describes the built-in figures and how to customize a figure. The basic figure can be obtained through the chart method klinecharts.getFigureClass(name).

Example of use

Note

It needs to be used when there is a canvas context.

javascript
// Get the figure class
+// name is the name of the figure, such as 'arc', 'circle', etc.
+const Figure = klinecharts.getFigureClass(name)
+// instantiate and draw
+// attrs attribute
+// styles styles
+// ctx canvas context
+new Figure(attrs, styles).draw(ctx)
// Get the figure class
+// name is the name of the figure, such as 'arc', 'circle', etc.
+const Figure = klinecharts.getFigureClass(name)
+// instantiate and draw
+// attrs attribute
+// styles styles
+// ctx canvas context
+new Figure(attrs, styles).draw(ctx)

Built-in figures

These figures are built into the chart, arc, circle, line, polygon, rect, text, rectText.

arc

typescript
new ({
+   attrs: {
+     // The x-axis coordinate value of the center of the circle
+     x: number
+     // The y-axis coordinate value of the center of the circle
+     y: number
+     // radius
+     r: number
+     // start angle
+     startAngle: number
+     // end angle
+     endAngle: number
+   },
+   styles: {
+     // style, optional \`solid\`, \`dashed\`
+     style?: 'solid' | 'dashed'
+     // size
+     size?: number
+     // color
+     color?: string
+     // dotted line parameter
+     dashedValue?: number[]
+   }
+}) => Figure
new ({
+   attrs: {
+     // The x-axis coordinate value of the center of the circle
+     x: number
+     // The y-axis coordinate value of the center of the circle
+     y: number
+     // radius
+     r: number
+     // start angle
+     startAngle: number
+     // end angle
+     endAngle: number
+   },
+   styles: {
+     // style, optional \`solid\`, \`dashed\`
+     style?: 'solid' | 'dashed'
+     // size
+     size?: number
+     // color
+     color?: string
+     // dotted line parameter
+     dashedValue?: number[]
+   }
+}) => Figure

circle

typescript
new ({
+   attrs: {
+     // The x-axis coordinate value of the center of the circle
+     x: number
+     // The y-axis coordinate value of the center of the circle
+     y: number
+     // radius
+     r: number
+   },
+   styles: {
+     // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+     style?: 'fill' | 'stroke' | 'stroke_fill'
+     // color
+     color?: string
+     // border style
+     borderStyle?: 'solid' | 'dashed'
+     // border color
+     borderColor?: string
+     // frame size
+     borderSize?: number
+     // border dotted line parameters
+     borderDashedValue?: number[]
+   }
+}) => Figure
new ({
+   attrs: {
+     // The x-axis coordinate value of the center of the circle
+     x: number
+     // The y-axis coordinate value of the center of the circle
+     y: number
+     // radius
+     r: number
+   },
+   styles: {
+     // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+     style?: 'fill' | 'stroke' | 'stroke_fill'
+     // color
+     color?: string
+     // border style
+     borderStyle?: 'solid' | 'dashed'
+     // border color
+     borderColor?: string
+     // frame size
+     borderSize?: number
+     // border dotted line parameters
+     borderDashedValue?: number[]
+   }
+}) => Figure

line

typescript
new ({
+  attrs: {
+    // set of coordinates
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // style, optional \`solid\`, \`dashed\`
+    style?: 'solid' | 'dashed'
+    // size
+    size?: number
+    // color
+    color?: string
+    // dotted line parameter
+    dashedValue?: number[]
+  }
+}) => Figure
new ({
+  attrs: {
+    // set of coordinates
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // style, optional \`solid\`, \`dashed\`
+    style?: 'solid' | 'dashed'
+    // size
+    size?: number
+    // color
+    color?: string
+    // dotted line parameter
+    dashedValue?: number[]
+  }
+}) => Figure

###polygon

typescript
new ({
+  attrs: {
+    // set of coordinates
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // color
+    color?: string
+    // border style
+    borderStyle?: 'solid' | 'dashed'
+    // border color
+    borderColor?: string
+    // frame size
+    borderSize?: number
+    // border dotted line parameter
+    borderDashedValue?: number[]
+  }
+}) => Figure
new ({
+  attrs: {
+    // set of coordinates
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // color
+    color?: string
+    // border style
+    borderStyle?: 'solid' | 'dashed'
+    // border color
+    borderColor?: string
+    // frame size
+    borderSize?: number
+    // border dotted line parameter
+    borderDashedValue?: number[]
+  }
+}) => Figure

rect

typescript
new ({
+  attrs: {
+    // The x-axis coordinate value of the starting point
+    x: number
+    // The y-axis coordinate value of the starting point
+    y: number
+    // width
+    width: number
+    // high
+    height: number
+  },
+  styles: {
+    // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // color
+    color?: string
+    // border style
+    borderStyle?: 'solid' | 'dashed'
+    // border color
+    borderColor?: string
+    // frame size
+    borderSize?: number
+    // border dotted line parameters
+    borderDashedValue?: number[]
+    // Border fillet value
+    borderRadius?: number
+  }
+}) => Figure
new ({
+  attrs: {
+    // The x-axis coordinate value of the starting point
+    x: number
+    // The y-axis coordinate value of the starting point
+    y: number
+    // width
+    width: number
+    // high
+    height: number
+  },
+  styles: {
+    // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // color
+    color?: string
+    // border style
+    borderStyle?: 'solid' | 'dashed'
+    // border color
+    borderColor?: string
+    // frame size
+    borderSize?: number
+    // border dotted line parameters
+    borderDashedValue?: number[]
+    // Border fillet value
+    borderRadius?: number
+  }
+}) => Figure

text

typescript
new ({
+  attrs: {
+    // The x-axis coordinate value of the starting point
+    x: number
+    // The y-axis coordinate value of the starting point
+    y: number
+    // text content
+    text: any
+    // alignment
+    align: CanvasTextAlign
+    // benchmark
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // color
+    color?: string
+    // size
+    size?: number
+    // font
+    family?: string
+    // thickness
+    weight?: string | number
+  }
+}) => Figure
new ({
+  attrs: {
+    // The x-axis coordinate value of the starting point
+    x: number
+    // The y-axis coordinate value of the starting point
+    y: number
+    // text content
+    text: any
+    // alignment
+    align: CanvasTextAlign
+    // benchmark
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // color
+    color?: string
+    // size
+    size?: number
+    // font
+    family?: string
+    // thickness
+    weight?: string | number
+  }
+}) => Figure

rectText

typescript
new ({
+  attrs: {
+    // The x-axis coordinate value of the starting point
+    x: number
+    // The y-axis coordinate value of the starting point
+    y: number
+    // text content
+    text: any
+    // alignment
+    align: CanvasTextAlign
+     // benchmark
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // color
+    color?: string
+    // size
+    size?: number
+    // font
+    family?: string
+    // thickness
+    weight?: string | number
+    // left padding
+    paddingLeft?: number
+    // right padding
+    paddingRight?: number
+    // top padding
+    paddingTop?: number
+    // Bottom padding
+    paddingBootom?: number
+    // border style
+    borderStyle?: 'solid' | 'dashed'
+    // border color
+    borderColor?: string
+    // frame size
+    borderSize?: number
+    // border dotted line parameter
+    borderDashedValue?: number[]
+    // Border fillet value
+    borderRadius?: number
+    // background color
+    backgroundColor?: string | CanvasGradient
+  }
+}) => Figure
new ({
+  attrs: {
+    // The x-axis coordinate value of the starting point
+    x: number
+    // The y-axis coordinate value of the starting point
+    y: number
+    // text content
+    text: any
+    // alignment
+    align: CanvasTextAlign
+     // benchmark
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // style, optional \`fill\`, \`stroke\`, \`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // color
+    color?: string
+    // size
+    size?: number
+    // font
+    family?: string
+    // thickness
+    weight?: string | number
+    // left padding
+    paddingLeft?: number
+    // right padding
+    paddingRight?: number
+    // top padding
+    paddingTop?: number
+    // Bottom padding
+    paddingBootom?: number
+    // border style
+    borderStyle?: 'solid' | 'dashed'
+    // border color
+    borderColor?: string
+    // frame size
+    borderSize?: number
+    // border dotted line parameter
+    borderDashedValue?: number[]
+    // Border fillet value
+    borderRadius?: number
+    // background color
+    backgroundColor?: string | CanvasGradient
+  }
+}) => Figure

Customize figure

To create a custom figure, you only need to generate the figure information, and then add it globally through klinecharts.registerFigure, and add it to the chart to use it like the built-in figures.

Attribute description

typescript
{
+  // Figure name, a required field, is the unique identifier for creation
+  name: string
+
+  // Check whether the event is on the graph, return a boolean value
+  checkEventOn: (
+    // coordinates of the event
+    coordinate: {
+      x: number
+      y: number
+    },
+    // graphics properties
+    attrs: any,
+     // style of the graph
+    styles: any
+  ) => boolean
+
+  // draw
+  draw: (
+    // canvas context
+    ctx: CanvasRenderingContext2D,
+    // figure properties
+    attrs: any,
+    // style of the figure
+    styles: any
+  ) => void
+}
{
+  // Figure name, a required field, is the unique identifier for creation
+  name: string
+
+  // Check whether the event is on the graph, return a boolean value
+  checkEventOn: (
+    // coordinates of the event
+    coordinate: {
+      x: number
+      y: number
+    },
+    // graphics properties
+    attrs: any,
+     // style of the graph
+    styles: any
+  ) => boolean
+
+  // draw
+  draw: (
+    // canvas context
+    ctx: CanvasRenderingContext2D,
+    // figure properties
+    attrs: any,
+    // style of the figure
+    styles: any
+  ) => void
+}

Example

The customization is specified with a diamond that can have a border and a background.

Step.1

First determine the attributes and styles. Attribute { x, y, width, height }, x is the x-axis coordinate value of the center point, y is the y-axis coordinate value of the center point, width is the width, and height is the height. Style { style, color, borderStyle, borderSize, borderColor, dashedValue }, style is the style type, we can define three options stroke, fill, stroke_fill, stroke has only a border, fill Only the background, stroke_fill has a border and a background, color is the color, borderStyle is the border style, you can define two options solid and dashed, solid is a solid line, dashed is a dashed line, borderSize is the border size, borderColor is the border color, and dashedValue is the dashed line value.

Step.2

Implement checkEventOn and draw two methods.

javascript
{
+   name: 'diamond',
+   checkEventOn: (coordinate, attrs) => {
+     const { x, y, width, height } = attrs
+     const xDis = Math.abs(coordinate.x - x)
+     const yDis = Math.abs(coordinate.y - y)
+     return xDis * height + yDis * width < width * height / 2
+   },
+   draw: (ctx, attrs, styles) => {
+     const { x, y, width, height } = attrs
+     const {
+       style = 'fill',
+       color = 'currentColor',
+       borderSize = 1,
+       borderColor = 'currentColor',
+       borderStyle = 'solid,
+       borderDashedValue = [2, 2]
+     } = styles
+     // Draw a filled diamond
+     if (style === 'fill' || styles.style === 'stroke_fill') {
+       ctx.fillStyle = color
+       ctx.beginPath()
+       ctx.moveTo(x - width / 2, y)
+       ctx.lineTo(x, y - height / 2)
+       ctx.lineTo(x + width / 2, y)
+       ctx.lineTo(x, y + height / 2)
+       ctx. closePath()
+       ctx.fill()
+     }
+     // Draw a border diamond
+     if (style === 'stroke' || styles.style === 'stroke_fill') {
+       ctx.strokeStyle = borderColor
+       ctx.lineWidth = borderSize
+       if (borderStyle === 'dashed') {
+         ctx.setLineDash(borderDashedValue)
+       } else {
+         ctx. setLineDash([])
+       }
+       ctx.beginPath()
+       ctx.beginPath()
+       ctx.moveTo(x - width / 2, y)
+       ctx.lineTo(x, y - height / 2)
+       ctx.lineTo(x + width / 2, y)
+       ctx.lineTo(x, y + height / 2)
+       ctx. closePath()
+       ctx.stroke()
+     }
+   }
+}
{
+   name: 'diamond',
+   checkEventOn: (coordinate, attrs) => {
+     const { x, y, width, height } = attrs
+     const xDis = Math.abs(coordinate.x - x)
+     const yDis = Math.abs(coordinate.y - y)
+     return xDis * height + yDis * width < width * height / 2
+   },
+   draw: (ctx, attrs, styles) => {
+     const { x, y, width, height } = attrs
+     const {
+       style = 'fill',
+       color = 'currentColor',
+       borderSize = 1,
+       borderColor = 'currentColor',
+       borderStyle = 'solid,
+       borderDashedValue = [2, 2]
+     } = styles
+     // Draw a filled diamond
+     if (style === 'fill' || styles.style === 'stroke_fill') {
+       ctx.fillStyle = color
+       ctx.beginPath()
+       ctx.moveTo(x - width / 2, y)
+       ctx.lineTo(x, y - height / 2)
+       ctx.lineTo(x + width / 2, y)
+       ctx.lineTo(x, y + height / 2)
+       ctx. closePath()
+       ctx.fill()
+     }
+     // Draw a border diamond
+     if (style === 'stroke' || styles.style === 'stroke_fill') {
+       ctx.strokeStyle = borderColor
+       ctx.lineWidth = borderSize
+       if (borderStyle === 'dashed') {
+         ctx.setLineDash(borderDashedValue)
+       } else {
+         ctx. setLineDash([])
+       }
+       ctx.beginPath()
+       ctx.beginPath()
+       ctx.moveTo(x - width / 2, y)
+       ctx.lineTo(x, y - height / 2)
+       ctx.lineTo(x + width / 2, y)
+       ctx.lineTo(x, y + height / 2)
+       ctx. closePath()
+       ctx.stroke()
+     }
+   }
+}

So a custom figure is completed.

`,33),e=[o];function t(c,r,y,i,D,F){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{C as __pageData,d as default}; diff --git a/assets/en-US_guide_getting-started.md.a32abfcf.js b/assets/en-US_guide_getting-started.md.196ef520.js similarity index 99% rename from assets/en-US_guide_getting-started.md.a32abfcf.js rename to assets/en-US_guide_getting-started.md.196ef520.js index 14b3d4e57..2537bd6a2 100644 --- a/assets/en-US_guide_getting-started.md.a32abfcf.js +++ b/assets/en-US_guide_getting-started.md.196ef520.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const A=JSON.parse('{"title":"🚀 Getting started","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/getting-started.md","filePath":"en-US/guide/getting-started.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/getting-started.md"},o=l(`

🚀 Getting started

Get KLineChart

KLineChart supports multiple download methods, you can get it through package management tools such as npm or yarn, or through CDN.

Using npm

bash
npm install klinecharts --save
npm install klinecharts --save

use yarn

bash
yarn add klinecharts
yarn add klinecharts

Using a CDN

You can use jsDelivr, unpkg or others, it is recommended to quote from jsDelivr.

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

Create the first chart

Created in the project of package management tools such as npm or yarn

javascript
import { init } from 'klinecharts'
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const A=JSON.parse('{"title":"🚀 Getting started","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/getting-started.md","filePath":"en-US/guide/getting-started.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/getting-started.md"},o=l(`

🚀 Getting started

Get KLineChart

KLineChart supports multiple download methods, you can get it through package management tools such as npm or yarn, or through CDN.

Using npm

bash
npm install klinecharts --save
npm install klinecharts --save

use yarn

bash
yarn add klinecharts
yarn add klinecharts

Using a CDN

You can use jsDelivr, unpkg or others, it is recommended to quote from jsDelivr.

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

Create the first chart

Created in the project of package management tools such as npm or yarn

javascript
import { init } from 'klinecharts'
 
 // initialize the chart
 const chart = init(\`\${domId}\`)
diff --git a/assets/en-US_guide_getting-started.md.196ef520.lean.js b/assets/en-US_guide_getting-started.md.196ef520.lean.js
new file mode 100644
index 000000000..2537bd6a2
--- /dev/null
+++ b/assets/en-US_guide_getting-started.md.196ef520.lean.js
@@ -0,0 +1,101 @@
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const A=JSON.parse('{"title":"🚀 Getting started","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/getting-started.md","filePath":"en-US/guide/getting-started.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/getting-started.md"},o=l(`

🚀 Getting started

Get KLineChart

KLineChart supports multiple download methods, you can get it through package management tools such as npm or yarn, or through CDN.

Using npm

bash
npm install klinecharts --save
npm install klinecharts --save

use yarn

bash
yarn add klinecharts
yarn add klinecharts

Using a CDN

You can use jsDelivr, unpkg or others, it is recommended to quote from jsDelivr.

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

Create the first chart

Created in the project of package management tools such as npm or yarn

javascript
import { init } from 'klinecharts'
+
+// initialize the chart
+const chart = init(\`\${domId}\`)
+
+// add data to the chart
+chart.applyNewData([
+   { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+   { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+   { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+   { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+   { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+   { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+   { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+   { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+   { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+   { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+])
import { init } from 'klinecharts'
+
+// initialize the chart
+const chart = init(\`\${domId}\`)
+
+// add data to the chart
+chart.applyNewData([
+   { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+   { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+   { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+   { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+   { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+   { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+   { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+   { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+   { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+   { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+])

Create in a project that is imported directly through a script tag

html
<!DOCTYPE html>
+<html lang="en">
+   <head>
+     <meta charset="utf-8" />
+     <meta name="viewport" content="width=device-width, initial-scale=1" />
+     <meta name="theme-color" content="#000000" />
+     <meta name="keywords" content="Quick Start"/>
+     <meta name="description" content="Quick Start"/>
+     <title>Quick Start</title>
+   </head>
+   <body>
+     <div id="chart" style="width:600px;height:600px"></div>
+     <script>
+       window.onload = function () {
+         // initialize the chart
+         var chart = klinecharts.init('chart')
+
+         // add data to the chart
+         chart.applyNewData([
+           { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+           { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+           { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+           { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+           { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+           { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+           { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+           { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+           { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+           { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+         ])
+       }
+     </script>
+   </body>
+</html>
<!DOCTYPE html>
+<html lang="en">
+   <head>
+     <meta charset="utf-8" />
+     <meta name="viewport" content="width=device-width, initial-scale=1" />
+     <meta name="theme-color" content="#000000" />
+     <meta name="keywords" content="Quick Start"/>
+     <meta name="description" content="Quick Start"/>
+     <title>Quick Start</title>
+   </head>
+   <body>
+     <div id="chart" style="width:600px;height:600px"></div>
+     <script>
+       window.onload = function () {
+         // initialize the chart
+         var chart = klinecharts.init('chart')
+
+         // add data to the chart
+         chart.applyNewData([
+           { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+           { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+           { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+           { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+           { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+           { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+           { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+           { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+           { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+           { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+         ])
+       }
+     </script>
+   </body>
+</html>

This completes your first chart creation.

`,16),e=[o];function t(c,r,y,F,D,C){return a(),n("div",null,e)}const h=s(p,[["render",t]]);export{A as __pageData,h as default}; diff --git a/assets/en-US_guide_getting-started.md.a32abfcf.lean.js b/assets/en-US_guide_getting-started.md.a32abfcf.lean.js deleted file mode 100644 index 04102e1de..000000000 --- a/assets/en-US_guide_getting-started.md.a32abfcf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const A=JSON.parse('{"title":"🚀 Getting started","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/getting-started.md","filePath":"en-US/guide/getting-started.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/getting-started.md"},o=l("",16),e=[o];function t(c,r,y,F,D,C){return a(),n("div",null,e)}const h=s(p,[["render",t]]);export{A as __pageData,h as default}; diff --git a/assets/en-US_guide_hot-key.md.2f8b79f1.js b/assets/en-US_guide_hot-key.md.2f8b79f1.js deleted file mode 100644 index 22e00caa7..000000000 --- a/assets/en-US_guide_hot-key.md.2f8b79f1.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as t,V as d}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"⌨️ Hot Key","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/hot-key.md","filePath":"en-US/guide/hot-key.md","lastUpdated":1689272235000}'),c={name:"en-US/guide/hot-key.md"},a=d('

⌨️ Hot Key

Currently only supports moving and zooming.

  • shift + move right
  • shift + move left
  • shift + + zoom in
  • shift + - zoom out
',3),i=[a];function n(s,r,l,_,h,m){return o(),t("div",null,i)}const f=e(c,[["render",n]]);export{u as __pageData,f as default}; diff --git a/assets/en-US_guide_hot-key.md.2f8b79f1.lean.js b/assets/en-US_guide_hot-key.md.2f8b79f1.lean.js deleted file mode 100644 index 51cdff589..000000000 --- a/assets/en-US_guide_hot-key.md.2f8b79f1.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as t,V as d}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"⌨️ Hot Key","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/hot-key.md","filePath":"en-US/guide/hot-key.md","lastUpdated":1689272235000}'),c={name:"en-US/guide/hot-key.md"},a=d("",3),i=[a];function n(s,r,l,_,h,m){return o(),t("div",null,i)}const f=e(c,[["render",n]]);export{u as __pageData,f as default}; diff --git a/assets/en-US_guide_hot-key.md.906ee3ad.js b/assets/en-US_guide_hot-key.md.906ee3ad.js new file mode 100644 index 000000000..b2db8a120 --- /dev/null +++ b/assets/en-US_guide_hot-key.md.906ee3ad.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as t,R as d}from"./chunks/framework.3ac7bdc3.js";const _=JSON.parse('{"title":"⌨️ Hot Key","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/hot-key.md","filePath":"en-US/guide/hot-key.md","lastUpdated":1691074246000}'),i={name:"en-US/guide/hot-key.md"},a=d('

⌨️ Hot Key

Currently only supports moving and zooming.

  • shift + move right
  • shift + move left
  • shift + + zoom in
  • shift + - zoom out
',3),s=[a];function c(n,r,l,h,m,p){return o(),t("div",null,s)}const f=e(i,[["render",c]]);export{_ as __pageData,f as default}; diff --git a/assets/en-US_guide_hot-key.md.906ee3ad.lean.js b/assets/en-US_guide_hot-key.md.906ee3ad.lean.js new file mode 100644 index 000000000..b2db8a120 --- /dev/null +++ b/assets/en-US_guide_hot-key.md.906ee3ad.lean.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as t,R as d}from"./chunks/framework.3ac7bdc3.js";const _=JSON.parse('{"title":"⌨️ Hot Key","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/hot-key.md","filePath":"en-US/guide/hot-key.md","lastUpdated":1691074246000}'),i={name:"en-US/guide/hot-key.md"},a=d('

⌨️ Hot Key

Currently only supports moving and zooming.

  • shift + move right
  • shift + move left
  • shift + + zoom in
  • shift + - zoom out
',3),s=[a];function c(n,r,l,h,m,p){return o(),t("div",null,s)}const f=e(i,[["render",c]]);export{_ as __pageData,f as default}; diff --git a/assets/en-US_guide_i18n.md.d37cc7ba.js b/assets/en-US_guide_i18n.md.c577d9a9.js similarity index 96% rename from assets/en-US_guide_i18n.md.d37cc7ba.js rename to assets/en-US_guide_i18n.md.c577d9a9.js index 696b33972..a46bfbf3f 100644 --- a/assets/en-US_guide_i18n.md.d37cc7ba.js +++ b/assets/en-US_guide_i18n.md.c577d9a9.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const h=JSON.parse('{"title":"🌏 Internationalization","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/i18n.md","filePath":"en-US/guide/i18n.md","lastUpdated":1689272235000}'),e={name:"en-US/guide/i18n.md"},o=l(`

🌏 Internationalization

Currently, the chart has two built-in en-US and zh-CN. The default language is en-US. If you need to use other languages, you can refer to the following scheme.

Adding new language

Adding new language is accomplished through klinecharts.registerLocale(key, locales).

For example, to add traditional Chinese language, you can do this,

typescript
klinecharts.registerLocale('zh-HK', {
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const h=JSON.parse('{"title":"🌏 Internationalization","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/i18n.md","filePath":"en-US/guide/i18n.md","lastUpdated":1691074246000}'),e={name:"en-US/guide/i18n.md"},o=l(`

🌏 Internationalization

Currently, the chart has two built-in en-US and zh-CN. The default language is en-US. If you need to use other languages, you can refer to the following scheme.

Adding new language

Adding new language is accomplished through klinecharts.registerLocale(key, locales).

For example, to add traditional Chinese language, you can do this,

typescript
klinecharts.registerLocale('zh-HK', {
   time: '時間:',
   open: '開:',
   high: '高:',
diff --git a/assets/en-US_guide_i18n.md.c577d9a9.lean.js b/assets/en-US_guide_i18n.md.c577d9a9.lean.js
new file mode 100644
index 000000000..a46bfbf3f
--- /dev/null
+++ b/assets/en-US_guide_i18n.md.c577d9a9.lean.js
@@ -0,0 +1,15 @@
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const h=JSON.parse('{"title":"🌏 Internationalization","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/i18n.md","filePath":"en-US/guide/i18n.md","lastUpdated":1691074246000}'),e={name:"en-US/guide/i18n.md"},o=l(`

🌏 Internationalization

Currently, the chart has two built-in en-US and zh-CN. The default language is en-US. If you need to use other languages, you can refer to the following scheme.

Adding new language

Adding new language is accomplished through klinecharts.registerLocale(key, locales).

For example, to add traditional Chinese language, you can do this,

typescript
klinecharts.registerLocale('zh-HK', {
+  time: '時間:',
+  open: '開:',
+  high: '高:',
+  low: '低:',
+  close: '收:',
+  volume: '成交量:'
+})
klinecharts.registerLocale('zh-HK', {
+  time: '時間:',
+  open: '開:',
+  high: '高:',
+  low: '低:',
+  close: '收:',
+  volume: '成交量:'
+})

Use new language

After adding new language, you can complete language switching through the chart API init(options) or setLocale(key).

`,8),p=[o];function t(c,r,i,y,D,F){return a(),n("div",null,p)}const g=s(e,[["render",t]]);export{h as __pageData,g as default}; diff --git a/assets/en-US_guide_i18n.md.d37cc7ba.lean.js b/assets/en-US_guide_i18n.md.d37cc7ba.lean.js deleted file mode 100644 index dae031094..000000000 --- a/assets/en-US_guide_i18n.md.d37cc7ba.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const h=JSON.parse('{"title":"🌏 Internationalization","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/i18n.md","filePath":"en-US/guide/i18n.md","lastUpdated":1689272235000}'),e={name:"en-US/guide/i18n.md"},o=l("",8),p=[o];function t(c,r,i,y,D,F){return a(),n("div",null,p)}const g=s(e,[["render",t]]);export{h as __pageData,g as default}; diff --git a/assets/en-US_guide_indicator.md.561b6caf.lean.js b/assets/en-US_guide_indicator.md.561b6caf.lean.js deleted file mode 100644 index 8ed46e6aa..000000000 --- a/assets/en-US_guide_indicator.md.561b6caf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const d=JSON.parse('{"title":"Technical indicator","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/indicator.md","filePath":"en-US/guide/indicator.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/indicator.md"},o=l("",15),e=[o];function t(c,r,y,i,F,D){return n(),a("div",null,e)}const A=s(p,[["render",t]]);export{d as __pageData,A as default}; diff --git a/assets/en-US_guide_indicator.md.561b6caf.js b/assets/en-US_guide_indicator.md.f8019259.js similarity index 99% rename from assets/en-US_guide_indicator.md.561b6caf.js rename to assets/en-US_guide_indicator.md.f8019259.js index a6c07af7c..d0dd20ddc 100644 --- a/assets/en-US_guide_indicator.md.561b6caf.js +++ b/assets/en-US_guide_indicator.md.f8019259.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const d=JSON.parse('{"title":"Technical indicator","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/indicator.md","filePath":"en-US/guide/indicator.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/indicator.md"},o=l(`

Technical indicator

This document introduces the built-in technical indicators in the chart and how to customize a technical indicator.

Built-in technical indicators

NameDefault calc paramsNameDefault calc paramsNameDefault calc params
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2, 20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVTNone
RSI[6, 12, 24]OBV[30]AVPNone

Custom Technical Indicators

To create a custom technical indicator, you only need to generate a technical indicator information, and then add it globally through klinecharts.registerIndicator, add it to the chart and use it like the built-in technical indicator.

Attribute description

typescript
{
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const d=JSON.parse('{"title":"Technical indicator","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/indicator.md","filePath":"en-US/guide/indicator.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/indicator.md"},o=l(`

Technical indicator

This document introduces the built-in technical indicators in the chart and how to customize a technical indicator.

Built-in technical indicators

NameDefault calc paramsNameDefault calc paramsNameDefault calc params
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2, 20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVTNone
RSI[6, 12, 24]OBV[30]AVPNone

Custom Technical Indicators

To create a custom technical indicator, you only need to generate a technical indicator information, and then add it globally through klinecharts.registerIndicator, add it to the chart and use it like the built-in technical indicator.

Attribute description

typescript
{
   // indicator name
   name: string
   // The short name of the indicator, used for display, the name will be displayed by default
diff --git a/assets/en-US_guide_indicator.md.f8019259.lean.js b/assets/en-US_guide_indicator.md.f8019259.lean.js
new file mode 100644
index 000000000..d0dd20ddc
--- /dev/null
+++ b/assets/en-US_guide_indicator.md.f8019259.lean.js
@@ -0,0 +1,479 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const d=JSON.parse('{"title":"Technical indicator","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/indicator.md","filePath":"en-US/guide/indicator.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/indicator.md"},o=l(`

Technical indicator

This document introduces the built-in technical indicators in the chart and how to customize a technical indicator.

Built-in technical indicators

NameDefault calc paramsNameDefault calc paramsNameDefault calc params
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2, 20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVTNone
RSI[6, 12, 24]OBV[30]AVPNone

Custom Technical Indicators

To create a custom technical indicator, you only need to generate a technical indicator information, and then add it globally through klinecharts.registerIndicator, add it to the chart and use it like the built-in technical indicator.

Attribute description

typescript
{
+  // indicator name
+  name: string
+  // The short name of the indicator, used for display, the name will be displayed by default
+  shortName?: string
+  // precision, default is 4
+  precision?: number
+  // calculation parameter
+  calcParams?: any[]
+  // Do you need ohlc
+  shouldOhlc?: boolean
+  // Do you need to format large data values, starting from 1000, for example, do you need to format 100K for 100000
+  shouldFormatBigNumber?: boolean
+  // Do you need visible
+  visible?: boolean
+  // extended data
+  extendData?: any
+  // series, default is 'normal'
+  series?: 'normal' | 'price' | 'volume'
+  // Data information
+  figures?: Array<{
+    // Used to get the median value of the calculation result
+    key: string
+    // for tooltip display
+    title?: string
+    // graphic type
+    type?: string
+    // Base value, if given, it will be drawn up and down with this value, generally used when the type is 'rect'
+    baseValue?: number
+    // is a method
+    attrs?: ({
+      coordinate: IndicatorFigureAttrsCallbackCoordinate
+      bounding: Bounding
+      barSpace: BarSpace
+      xAxis: XAxis
+      yAxis: YAxis
+    }) => IndicatorFigureAttrs
+    // is a method
+    styles?: (
+      data: {
+        // The data of the previous graph
+        prev: {
+          // k-line data, type refer to [data source]
+          kLineData?: KLineData,
+          // technical indicator data
+          indicatorData?: any
+        },
+        // data of the current graph
+        current: {
+          kLineData?: KLineData
+          indicatorData?: any
+        },
+        // Data for the next graph
+        next: {
+          kLineData?: KLineData,
+          indicatorData?: any
+        }
+      },
+      // technical chart example
+      indicator: Indicator
+      // The default technical indicator style, that is, the technical indicator style set globally, refer to the indicator in [Style]
+      defaultStyles: IndicatorStyle
+    ) => IndicatorFigureStyle
+  }>,
+  // The specified minimum value, default null
+  minValue?: number
+  // The specified maximum value, default null
+  maxValue?: number
+  // style, support increment, default is null, type refer to indicator in [style]
+  styles?: IndicatorStyle
+  // calculation method, can be a promise
+  calc: (
+    // data source, see [data source] for type
+    dataList: KLineData[],
+    // technical indicator example
+    indicator: indicator
+  ) => Promise<Array<any>> | Array<any>
+  // Regenerate figure graphic configuration method, which will be triggered after the calculation parameters change, refer to figures for the return type, the default is null
+  regenerateFigures?: (
+    // calculation parameter
+    calcParms: any[]
+  ) => Array<IndicatorFigure<D>>
+  // Create a custom hint text
+  createTooltipDataSource?: (params: {
+    // data source, see [data source] for type
+    kLineDataList: KLineData[]
+    // technical indicator example
+    indicator: Indicator
+    // Visible area information
+    visibleRange: {
+      // start data index
+      from: number
+      // end data index
+      to: number
+      // real start data index
+      realFrom: number
+      // real end data index
+      realTo: number
+    },
+    // window size information
+    bounding: {
+      // width
+      width: number
+      // high
+      height: number
+      // distance to the left
+      left: number
+      // distance to the right
+      right: number
+      // distance from top
+      top: number
+      // distance from bottom
+      bottom: number
+    },
+    // Information about the cross cursor
+    crosshair: {
+      // The window id where the cross point of the cross cursor is located
+      paneId?: string
+      // real x coordinate
+      realX?: number
+      // k-line data, type refer to [data source]
+      kLineData?: KLineData
+      // data index
+      dataIndex?: number
+      // real data index
+      realDataIndex?: number
+    },
+    // The default technical indicator style, that is, the technical indicator style set globally, refer to the indicator in [Style]
+    defaultStyles: IndicatorStyle
+    // x-axis component, some built-in conversion methods
+    xAxis: XAxis
+    // y-axis component, with some built-in conversion methods
+    yAxis: YAxis
+  }) => ({
+    // name
+    name?: string
+    // Calculate the parameter text, if name has no value, it will not be displayed
+    calcParamsText?: string
+    // value information
+    values?: Array<{
+      title: string | {
+        text: string
+        color: string
+      }
+      value: string | {
+        text: string
+        color: string
+      }
+    }>
+  }),
+  // Custom drawing, if true is returned, the graphics configured by figures will not be drawn
+  draw?: (params: {
+    // canvas context
+    ctx: CanvasRenderingContext2D
+    // data source, see [data source] for type
+    kLineDataList: KLineData[]
+    // technical indicator example
+    indicator: Indicator
+    // Visible area information
+    visibleRange: {
+      // start data index
+      from: number
+      // endpoint data index
+      to: number
+    },
+    // window size information
+    bounding: {
+      // width
+      width: number
+      // high
+      height: number
+      // distance to the left
+      left: number
+      // distance to the right
+      right: number
+      // distance from top
+      top: number
+      // distance from bottom
+      bottom: number
+    },
+    // information about the size of the candlestick
+    barSpace: {
+      // candlestick size
+      bar: number
+      halfBar: number
+      // candlesticks do not include dimensions of gaps between candlesticks
+      gapBar: number
+      halfGapBar: number
+    },
+    // The default technical indicator style, that is, the technical indicator style set globally, refer to the indicator in [Style]
+    defaultStyles: IndicatorStyle
+    // x-axis component, some built-in conversion methods
+    xAxis: XAxis
+    // y-axis component, with some built-in conversion methods
+    yAxis: YAxis
+  }) => boolean
+}
{
+  // indicator name
+  name: string
+  // The short name of the indicator, used for display, the name will be displayed by default
+  shortName?: string
+  // precision, default is 4
+  precision?: number
+  // calculation parameter
+  calcParams?: any[]
+  // Do you need ohlc
+  shouldOhlc?: boolean
+  // Do you need to format large data values, starting from 1000, for example, do you need to format 100K for 100000
+  shouldFormatBigNumber?: boolean
+  // Do you need visible
+  visible?: boolean
+  // extended data
+  extendData?: any
+  // series, default is 'normal'
+  series?: 'normal' | 'price' | 'volume'
+  // Data information
+  figures?: Array<{
+    // Used to get the median value of the calculation result
+    key: string
+    // for tooltip display
+    title?: string
+    // graphic type
+    type?: string
+    // Base value, if given, it will be drawn up and down with this value, generally used when the type is 'rect'
+    baseValue?: number
+    // is a method
+    attrs?: ({
+      coordinate: IndicatorFigureAttrsCallbackCoordinate
+      bounding: Bounding
+      barSpace: BarSpace
+      xAxis: XAxis
+      yAxis: YAxis
+    }) => IndicatorFigureAttrs
+    // is a method
+    styles?: (
+      data: {
+        // The data of the previous graph
+        prev: {
+          // k-line data, type refer to [data source]
+          kLineData?: KLineData,
+          // technical indicator data
+          indicatorData?: any
+        },
+        // data of the current graph
+        current: {
+          kLineData?: KLineData
+          indicatorData?: any
+        },
+        // Data for the next graph
+        next: {
+          kLineData?: KLineData,
+          indicatorData?: any
+        }
+      },
+      // technical chart example
+      indicator: Indicator
+      // The default technical indicator style, that is, the technical indicator style set globally, refer to the indicator in [Style]
+      defaultStyles: IndicatorStyle
+    ) => IndicatorFigureStyle
+  }>,
+  // The specified minimum value, default null
+  minValue?: number
+  // The specified maximum value, default null
+  maxValue?: number
+  // style, support increment, default is null, type refer to indicator in [style]
+  styles?: IndicatorStyle
+  // calculation method, can be a promise
+  calc: (
+    // data source, see [data source] for type
+    dataList: KLineData[],
+    // technical indicator example
+    indicator: indicator
+  ) => Promise<Array<any>> | Array<any>
+  // Regenerate figure graphic configuration method, which will be triggered after the calculation parameters change, refer to figures for the return type, the default is null
+  regenerateFigures?: (
+    // calculation parameter
+    calcParms: any[]
+  ) => Array<IndicatorFigure<D>>
+  // Create a custom hint text
+  createTooltipDataSource?: (params: {
+    // data source, see [data source] for type
+    kLineDataList: KLineData[]
+    // technical indicator example
+    indicator: Indicator
+    // Visible area information
+    visibleRange: {
+      // start data index
+      from: number
+      // end data index
+      to: number
+      // real start data index
+      realFrom: number
+      // real end data index
+      realTo: number
+    },
+    // window size information
+    bounding: {
+      // width
+      width: number
+      // high
+      height: number
+      // distance to the left
+      left: number
+      // distance to the right
+      right: number
+      // distance from top
+      top: number
+      // distance from bottom
+      bottom: number
+    },
+    // Information about the cross cursor
+    crosshair: {
+      // The window id where the cross point of the cross cursor is located
+      paneId?: string
+      // real x coordinate
+      realX?: number
+      // k-line data, type refer to [data source]
+      kLineData?: KLineData
+      // data index
+      dataIndex?: number
+      // real data index
+      realDataIndex?: number
+    },
+    // The default technical indicator style, that is, the technical indicator style set globally, refer to the indicator in [Style]
+    defaultStyles: IndicatorStyle
+    // x-axis component, some built-in conversion methods
+    xAxis: XAxis
+    // y-axis component, with some built-in conversion methods
+    yAxis: YAxis
+  }) => ({
+    // name
+    name?: string
+    // Calculate the parameter text, if name has no value, it will not be displayed
+    calcParamsText?: string
+    // value information
+    values?: Array<{
+      title: string | {
+        text: string
+        color: string
+      }
+      value: string | {
+        text: string
+        color: string
+      }
+    }>
+  }),
+  // Custom drawing, if true is returned, the graphics configured by figures will not be drawn
+  draw?: (params: {
+    // canvas context
+    ctx: CanvasRenderingContext2D
+    // data source, see [data source] for type
+    kLineDataList: KLineData[]
+    // technical indicator example
+    indicator: Indicator
+    // Visible area information
+    visibleRange: {
+      // start data index
+      from: number
+      // endpoint data index
+      to: number
+    },
+    // window size information
+    bounding: {
+      // width
+      width: number
+      // high
+      height: number
+      // distance to the left
+      left: number
+      // distance to the right
+      right: number
+      // distance from top
+      top: number
+      // distance from bottom
+      bottom: number
+    },
+    // information about the size of the candlestick
+    barSpace: {
+      // candlestick size
+      bar: number
+      halfBar: number
+      // candlesticks do not include dimensions of gaps between candlesticks
+      gapBar: number
+      halfGapBar: number
+    },
+    // The default technical indicator style, that is, the technical indicator style set globally, refer to the indicator in [Style]
+    defaultStyles: IndicatorStyle
+    // x-axis component, some built-in conversion methods
+    xAxis: XAxis
+    // y-axis component, with some built-in conversion methods
+    yAxis: YAxis
+  }) => boolean
+}

Step.1

First determine the calculation parameters (calcParams) and configuration items (figures). The 'MA' technical indicator needs to display the line connecting the average closing price of the two periods, one is 'ma1' and the other is 'ma2'. So figures are configured as:

javascript
{
+   // The calculation parameters are 2, one calculates the mean value of 5 cycle times, namely 'ma1', and the other calculates the mean value of 10 cycle times, namely 'ma10'
+   calcParams: [5, 10],
+   figures: [
+     // first line 'ma5'
+     { key: 'ma1', title: 'MA5: ', type: 'line' },
+     // second line 'ma10'
+     { key: 'ma2', title: 'MA10: ', type: 'line' }
+   ]
+}
{
+   // The calculation parameters are 2, one calculates the mean value of 5 cycle times, namely 'ma1', and the other calculates the mean value of 10 cycle times, namely 'ma10'
+   calcParams: [5, 10],
+   figures: [
+     // first line 'ma5'
+     { key: 'ma1', title: 'MA5: ', type: 'line' },
+     // second line 'ma10'
+     { key: 'ma2', title: 'MA10: ', type: 'line' }
+   ]
+}

Step.2

Determine other attributes

javascript
{
+   name: 'MA',
+   shortName: 'MA',
+   calcParams: [5, 10],
+   figures: [
+     { key: 'ma1', title: 'MA5: ', type: 'line' },
+     { key: 'ma2', title: 'MA10: ', type: 'line' }
+   ],
+   // When the calculation parameters are changed, it is hoped that the prompt is the same as the parameters, that is, the value of title needs to be changed
+   regenerateFigures: (params) => {
+     return params. map((p, i) => {
+       return { key: \`ma\${i + 1}\`, title: \`MA\${p}: \`, type: 'line' }
+     })
+   },
+   // Calculation results
+   calc: (kLineDataList, { calcParams, figures }) => {
+     // Note: The number of returned data needs to be consistent with the number of data in kLineDataList. If there is no value, replace it with {}.
+     // It is best to take the callback parameter calcParams as the calculation parameter. If not, when the subsequent calculation parameters change, the calculation here cannot respond in time
+     const closeSums = []
+     return kLineDataList. map((kLineData, i) => {
+       const ma = {}
+       const close = kLineData. close
+       calcParams.forEach((param, j) => {
+         closeSums[j] = (closeSums[j] || 0) + close
+         if (i >= param - 1) {
+           ma[figures[j].key] = closeSums[j] / param
+           closeSums[j] -= kLineDataList[i - (param - 1)].close
+         }
+       })
+       // If there is a value, the data format of each item here should be { ma1: xxx, ma2: xxx }
+       // Each key needs to be consistent with the value corresponding to the subkey in figures
+       return ma
+     })
+   }
+}
{
+   name: 'MA',
+   shortName: 'MA',
+   calcParams: [5, 10],
+   figures: [
+     { key: 'ma1', title: 'MA5: ', type: 'line' },
+     { key: 'ma2', title: 'MA10: ', type: 'line' }
+   ],
+   // When the calculation parameters are changed, it is hoped that the prompt is the same as the parameters, that is, the value of title needs to be changed
+   regenerateFigures: (params) => {
+     return params. map((p, i) => {
+       return { key: \`ma\${i + 1}\`, title: \`MA\${p}: \`, type: 'line' }
+     })
+   },
+   // Calculation results
+   calc: (kLineDataList, { calcParams, figures }) => {
+     // Note: The number of returned data needs to be consistent with the number of data in kLineDataList. If there is no value, replace it with {}.
+     // It is best to take the callback parameter calcParams as the calculation parameter. If not, when the subsequent calculation parameters change, the calculation here cannot respond in time
+     const closeSums = []
+     return kLineDataList. map((kLineData, i) => {
+       const ma = {}
+       const close = kLineData. close
+       calcParams.forEach((param, j) => {
+         closeSums[j] = (closeSums[j] || 0) + close
+         if (i >= param - 1) {
+           ma[figures[j].key] = closeSums[j] / param
+           closeSums[j] -= kLineDataList[i - (param - 1)].close
+         }
+       })
+       // If there is a value, the data format of each item here should be { ma1: xxx, ma2: xxx }
+       // Each key needs to be consistent with the value corresponding to the subkey in figures
+       return ma
+     })
+   }
+}

So a custom indicator is completed.

`,15),e=[o];function t(c,r,y,i,F,D){return n(),a("div",null,e)}const A=s(p,[["render",t]]);export{d as __pageData,A as default}; diff --git a/assets/en-US_guide_instance-api.md.f3e75242.js b/assets/en-US_guide_instance-api.md.13db160d.js similarity index 99% rename from assets/en-US_guide_instance-api.md.f3e75242.js rename to assets/en-US_guide_instance-api.md.13db160d.js index e93aeb8f4..f647e6142 100644 --- a/assets/en-US_guide_instance-api.md.f3e75242.js +++ b/assets/en-US_guide_instance-api.md.13db160d.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"Instance API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/instance-api.md","filePath":"en-US/guide/instance-api.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/instance-api.md"},o=l(`

Instance API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

Get the dom container.

  • paneId window id, the default is the entire chart container
  • position options are 'root', 'main' and 'yAxis', default is 'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"Instance API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/instance-api.md","filePath":"en-US/guide/instance-api.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/instance-api.md"},o=l(`

Instance API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

Get the dom container.

  • paneId window id, the default is the entire chart container
  • position options are 'root', 'main' and 'yAxis', default is 'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
    width: number
    height: number
    left: number
diff --git a/assets/en-US_guide_instance-api.md.13db160d.lean.js b/assets/en-US_guide_instance-api.md.13db160d.lean.js
new file mode 100644
index 000000000..f647e6142
--- /dev/null
+++ b/assets/en-US_guide_instance-api.md.13db160d.lean.js
@@ -0,0 +1,997 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"Instance API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/instance-api.md","filePath":"en-US/guide/instance-api.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/instance-api.md"},o=l(`

Instance API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

Get the dom container.

  • paneId window id, the default is the entire chart container
  • position options are 'root', 'main' and 'yAxis', default is 'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+   width: number
+   height: number
+   left: number
+   top: number
+   right: number
+   bottom: number
+}
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+   width: number
+   height: number
+   left: number
+   top: number
+   right: number
+   bottom: number
+}

Get the dimensions.

  • paneId window id, the default is the entire chart container
  • position position, supports root, main, yAxis, the default is root

setStyles(styles)

typescript
(styles: string | object) => HTMLElement
(styles: string | object) => HTMLElement

Set style configuration.

  • styles style configuration, which can be the style name registered through registerStyles. When it is an object, please refer to styles for details, and it supports merging.

getStyles()

typescript
() => object
() => object

Get the style configuration, return the complete type refer to styles.

setPriceVolumePrecision(pricePrecision, volumePrecision)

typescript
(pricePrecision: number, volumePrecision: number) => void
(pricePrecision: number, volumePrecision: number) => void

Setting the price and volume precision, while the technical indicator series is 'price' or 'volume' will also be affected.

  • pricePrecision price precision
  • volumePrecision volume precision

setTimezone(timezone)

typescript
(timezone: string) => void
(timezone: string) => void

Set the time zone.

  • timezone time zone name, such as 'Asia/Shanghai', if not set, it will automatically get the local time zone, please refer to Time Zone List.

getTimezone()

typescript
() => string
() => string

Get the chart time zone name.

setZoomEnabled(enabled)

typescript
(enabled: boolean) => void
(enabled: boolean) => void

Set whether to scale.

isZoomEnabled()

typescript
() => boolean
() => boolean

Whether it can be scaled.

setScrollEnabled(enabled)

typescript
(enabled: boolean) => void
(enabled: boolean) => void

Set whether dragging and scrolling is possible.

isScrollEnabled()

typescript
() => boolean
() => boolean

Whether dragging and scrolling is possible.

setOffsetRightDistance(distance)

typescript
(distance: number) => void
(distance: number) => void

Sets the gap that can be left to the right of the chart.

getOffsetRightDistance()

typescript
() => number
() => number

Get the gap that can be left to the right of the chart.

setLeftMinVisibleBarCount(barCount)

typescript
(barCount: number) => void
(barCount: number) => void

Sets the minimum number of visible candles to the left.

setRightMinVisibleBarCount(barCount)

typescript
(barCount: number) => void
(barCount: number) => void

Sets the minimum number of visible candles to the right.

setBarSpace(space)

typescript
(space: number) => void
(space: number) => void

Sets the width of a single candlestick of the chart.

getBarSpace()

typescript
() => number
() => number

Gets the width of a single candlestick on the chart.

getVisibleRange()

typescript
() => {
+  from: number
+  to: number
+  realFrom: number
+  realTo: number
+}
() => {
+  from: number
+  to: number
+  realFrom: number
+  realTo: number
+}

Get visible range.

applyNewData(dataList, more, callback)

typescript
(
+  dataList: Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void
(
+  dataList: Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void

Add new data, this method will clear the chart data, no need to call the clearData method additionally.

  • dataList is an array of K-line data. For details of the data type, please refer to data
  • more tells the chart whether there is more historical data, can be defaulted, the default is true
  • callback success callback

applyMoreData(dataList, more, callback)

typescript
(
+  dataList: Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void
(
+  dataList: Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void

Add more historical data.

  • dataList is an array of K-line data. For details of the data type, please refer to data
  • more tells the chart whether there is more historical data, can be defaulted, the default is true
  • callback success callback

updateData(data, callback)

typescript
(
+  data: {
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  },
+  callback?: () => void
+) => void
(
+  data: {
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  },
+  callback?: () => void
+) => void

Update data. Currently, only the timestamp of the last piece of data will be matched. If it is the same, it will be overwritten, and if it is different, it will be appended.

  • data single k-line data, please refer to data for details of data type
  • callback success callback

getDataList()

typescript
() => Array<{
+  timestamp: number
+  open: number
+  close: number
+  high: number
+  low: number
+  volume?: number
+  turnover?: number
+}>
() => Array<{
+  timestamp: number
+  open: number
+  close: number
+  high: number
+  low: number
+  volume?: number
+  turnover?: number
+}>

Get the current data source of the chart. For the returned data type, please refer to data.

clearData()

typescript
() => void
() => void

Clear the data of the chart. Generally, it is not necessary to call it manually. In order to avoid repeated drawing, the data is only cleared here, and the chart will not be redrawn.

loadMore(cb)

typescript
(cb: (timestamp: number | null) => void) => void
(cb: (timestamp: number | null) => void) => void

Set load more callback function.

  • cb is a callback method, timestamp is the timestamp of the first piece of data.

createIndicator(value, isStack, paneOptions, callback)

typescript
(
+  value: string | {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+       key: string
+       title?: string
+       type?: string
+       baseValue?: number
+       styles?: (
+         data: object,
+         indicator: object,
+         defaultStyles: object
+       ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    createTooltipDataSource?: (params: object) => ({
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    })
+    draw?: (params: object) => boolean
+  },
+  isStack?: boolean,
+  paneOptions?: {
+    id?: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  } | null,
+  callback?: () => void
+) => string | null
(
+  value: string | {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+       key: string
+       title?: string
+       type?: string
+       baseValue?: number
+       styles?: (
+         data: object,
+         indicator: object,
+         defaultStyles: object
+       ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    createTooltipDataSource?: (params: object) => ({
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    })
+    draw?: (params: object) => boolean
+  },
+  isStack?: boolean,
+  paneOptions?: {
+    id?: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  } | null,
+  callback?: () => void
+) => string | null

Create a technical indicator, the return value is a string that identifies the window, which is very important, and this identification is required for some subsequent operations on the window.

  • value technical indicator name or technical indicator object, when it is an object, the type is consistent with the input parameter of the chart method overrideIndicator
  • isStack is overrides
  • paneOptions window configuration information, can be default
    • id window id, can be default
    • height window height, can be default
    • minHeight minimum height of the window, can be defaulted
    • dragEnbaled Whether the window can be dragged to adjust the height, it can be defaulted
    • gap margins
      • top top margin, value less than 1 is a percentage
      • bottom bottom margin, value less than 1 is a percentage
    • axisOptions
      • scrollZoomEnabled Scroll zoom flag
  • callback success callback

Special id

'candle_pane', the window id of the main picture.

Example:

javascript
chart.createIndicator('MA', false, {
+  id: 'pane_1',
+  height: 100,
+  minHeight: 30,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+}, () => {})
chart.createIndicator('MA', false, {
+  id: 'pane_1',
+  height: 100,
+  minHeight: 30,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+}, () => {})

overrideIndicator(override, paneId, callback)

typescript
(
+  override: {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | { text: string, color: string }
+        value: string | { text: string, color: string }
+      }>
+    }
+    draw?: (params: object) => boolean
+  },
+  paneId?: string | null,
+  callback?: () => void
+) => void
(
+  override: {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => ({
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      })
+    }>
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | { text: string, color: string }
+        value: string | { text: string, color: string }
+      }>
+    }
+    draw?: (params: object) => boolean
+  },
+  paneId?: string | null,
+  callback?: () => void
+) => void

Overlay technical indicator information.

  • override some parameters that need to be overridden
    • name metric name, unique identifier for creation and operation
    • shortName short name for display
    • precision precision
    • calcParams calculation parameters
    • shouldOhlc needs ohlc auxiliary graphics
    • shouldFormatBigNumber should format large numbers. For example, 1000 is converted to 1k, 1000000 is converted to 1M, etc.
    • visible visible or not
    • extendData extended data
    • series indicator series, optional options are 'normal', 'price' and 'volume'
    • figures graphics configuration
    • minValue specifies the minimum value
    • maxValue specifies the maximum value
    • styles styles
    • calc calculation method
    • regenerateFigures method to regenerate figure information
    • createTooltipDataSource method to create custom tip information
    • draw custom drawing method
  • paneId window id, default is set to all
  • callback success callback

Special id

'candle_pane', the window id of the main picture.

Example:

javascript
chart.overrideIndicator({
+   name: 'BOLL',
+   showName: 'BOLL'
+   calcParams: [20, 5.5],
+   precision: 4,
+   shouldOhlc: true,
+   shouldFormatBigNumber: false,
+   visible: true,
+   extendData: 2432435,
+   series: 'price',
+   figures: [],
+   minValue: null,
+   maxValue: null,
+   calc: () => [],
+   regenerateFigures: () => [],
+   draw: () => {},
+   styles: {
+   bars: [{
+       style: 'fill,
+       borderStyle: 'solid,
+       borderSize: 1,
+       borderDashedValue: [2, 2],
+       upColor: '#26A69A',
+       downColor: '#EF5350',
+       noChangeColor: '#888888'
+     }],
+     lines: [{
+       size: 1,
+       style: 'solid',
+       dashedValue: [2, 2],
+       color: '#FF9600'
+     }],
+     circles: [{
+       style: 'fill,
+       borderStyle: 'solid,
+       borderSize: 1,
+       borderDashedValue: [2, 2],
+       upColor: '#26A69A',
+       downColor: '#EF5350',
+       noChangeColor: '#888888'
+     }]
+   }
+}, 'candle_pane', () => {})
chart.overrideIndicator({
+   name: 'BOLL',
+   showName: 'BOLL'
+   calcParams: [20, 5.5],
+   precision: 4,
+   shouldOhlc: true,
+   shouldFormatBigNumber: false,
+   visible: true,
+   extendData: 2432435,
+   series: 'price',
+   figures: [],
+   minValue: null,
+   maxValue: null,
+   calc: () => [],
+   regenerateFigures: () => [],
+   draw: () => {},
+   styles: {
+   bars: [{
+       style: 'fill,
+       borderStyle: 'solid,
+       borderSize: 1,
+       borderDashedValue: [2, 2],
+       upColor: '#26A69A',
+       downColor: '#EF5350',
+       noChangeColor: '#888888'
+     }],
+     lines: [{
+       size: 1,
+       style: 'solid',
+       dashedValue: [2, 2],
+       color: '#FF9600'
+     }],
+     circles: [{
+       style: 'fill,
+       borderStyle: 'solid,
+       borderSize: 1,
+       borderDashedValue: [2, 2],
+       upColor: '#26A69A',
+       downColor: '#EF5350',
+       noChangeColor: '#888888'
+     }]
+   }
+}, 'candle_pane', () => {})

getIndicatorByPaneId(paneId, name)

typescript
(paneId?: string, name?: string) => object
(paneId?: string, name?: string) => object

Obtain technical indicator information according to the window id.

  • paneId window id, that is, the window ID returned when calling the createIndicator method, can be defaulted, and all will be returned by default.
  • name technical indicator name

Special id

'candle_pane', the window id of the main picture.

removeIndicator(paneId, name)

typescript
(paneId: string, name?: string) => object
(paneId: string, name?: string) => object

Remove technical indicators.

  • paneId window id, that is, the window ID returned when calling the createIndicator method
  • name technical indicator name, if default, will remove all

Special id

'candle_pane', the window id of the main picture.

createOverlay(value, paneId)

typescript
(
+  value: string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  } | Array<string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }>,
+  paneId?: string
+) => string | null
(
+  value: string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  } | Array<string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }>,
+  paneId?: string
+) => string | null

Creates an overlay, returning an identifier of type String.

  • value Overlay name or object, when it is an object, the parameters are consistent with overrideOverlay
  • paneId window id, can be default

Special id

'candle_pane', the window id of the main picture.

Example:

javascript
chart.createOverlay({
+   name: 'segment',
+   id: 'segment_1',
+   groupId: 'segment',
+   points: [
+     { timestamp: 1614171282000, value: 18987 },
+     { timestamp: 1614171202000, value: 16098 },
+   ],
+   styles: {
+     line: {
+       style: 'solid',
+       dashedValue: [2, 2]
+       color: '#f00',
+       size: 2
+     }
+   },
+   lock: false,
+   visible: true,
+   zLevel: 0,
+   mode: 'weak_magnet',
+   modeSensitivity: 8,
+   extendData: 'xxxxxxxx',
+   needDefaultPointFigure: false,
+   needDefaultXAxisFigure: false,
+   needDefaultYAxisFigure: false,
+   onDrawStart: function (event) { console. log(event) },
+   onDrawing: function (event) { console. log(event) },
+   onDrawEnd: function (event) { console. log(event) },
+   onClick: function (event) { console. log(event) },
+   onDoubleClick: function (event) { console. log(event) },
+   onRightClick: function (event) {
+     console. log(event)
+     return false
+   },
+   onMouseEnter: function (event) { console. log(event) },
+   onMouseLeave: function (event) { console. log(event) },
+   onPressedMoveStart: function (event) { console. log(event) },
+   onPressedMoving: function (event) { console. log(event) },
+   onPressedMoveEnd: function (event) { console. log(event) },
+   onRemoved: function (event) { console. log(event) },
+   onSelected: function (event) { console. log(event) },
+   onDeselected: function (event) { console. log(event) }
+})
chart.createOverlay({
+   name: 'segment',
+   id: 'segment_1',
+   groupId: 'segment',
+   points: [
+     { timestamp: 1614171282000, value: 18987 },
+     { timestamp: 1614171202000, value: 16098 },
+   ],
+   styles: {
+     line: {
+       style: 'solid',
+       dashedValue: [2, 2]
+       color: '#f00',
+       size: 2
+     }
+   },
+   lock: false,
+   visible: true,
+   zLevel: 0,
+   mode: 'weak_magnet',
+   modeSensitivity: 8,
+   extendData: 'xxxxxxxx',
+   needDefaultPointFigure: false,
+   needDefaultXAxisFigure: false,
+   needDefaultYAxisFigure: false,
+   onDrawStart: function (event) { console. log(event) },
+   onDrawing: function (event) { console. log(event) },
+   onDrawEnd: function (event) { console. log(event) },
+   onClick: function (event) { console. log(event) },
+   onDoubleClick: function (event) { console. log(event) },
+   onRightClick: function (event) {
+     console. log(event)
+     return false
+   },
+   onMouseEnter: function (event) { console. log(event) },
+   onMouseLeave: function (event) { console. log(event) },
+   onPressedMoveStart: function (event) { console. log(event) },
+   onPressedMoving: function (event) { console. log(event) },
+   onPressedMoveEnd: function (event) { console. log(event) },
+   onRemoved: function (event) { console. log(event) },
+   onSelected: function (event) { console. log(event) },
+   onDeselected: function (event) { console. log(event) }
+})

getOverlayById(id)

typescript
(id: string) => object
(id: string) => object

Get overlay information by id.

  • id calls the createOverlay method to return the ID

overrideOverlay(override)

typescript
(
+  override: {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }
+) => string | null
(
+  override: {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }
+) => string | null

Overlays that have been drawn.

  • override parameters that need to be overridden
    • name overlay name, unique identifier for creation
    • id Overlay identification, if the id exists, it will be based on the id to overwrite
    • groupId Group id
    • lock is locked to prevent dragging
    • visible visible or not
    • zLevel Draw level
    • needDefaultPointFigure needs a default point figure
    • needDefaultXAxisFigure needs the default x-axis figure
    • needDefaultYAxisFigure needs the default y-axis figure
    • mode mode, options are 'normal', 'weak_magnet' and 'strong_magnet'
    • modeSensitivity mode sensitivity, only valid when mode is weak_magnet
    • points point information
    • extendData extended data
    • styles styles
    • onDrawStart start drawing event
    • onDrawing drawing event
    • onDrawEnd draw end event
    • onClick click event
    • onDoubleClick double click event
    • onRightClick right click event
    • onPressedMoveStart press start move event
    • onPressedMoving Press and move event
    • onPressedMoveEnd Press and move end event
    • onMouseEnter mouse enter event
    • onMouseLeave mouse out event
    • onRemoved delete event
    • onSelected selected event
    • onDeselected deselected event

Example:

javascript
chart.overrideOverlay({
+   name: 'segment',
+   id: 'segment_1',
+   groupId: 'segment',
+   points: [
+     { timestamp: 1614171282000, value: 18987 },
+     { timestamp: 1614171202000, value: 16098 },
+   ],
+   styles: {
+     line: {
+       style: 'solid',
+       dashedValue: [2, 2]
+       color: '#f00',
+       size: 2
+     }
+   },
+   lock: false,
+   visible: true,
+   zLevel: 0,
+   mode: 'weak_magnet',
+   modeSensitivity: 8
+   extendData: 'xxxxxxxx',
+   needDefaultPointFigure: false,
+   needDefaultXAxisFigure: false,
+   needDefaultYAxisFigure: false,
+   onDrawStart: function (event) { console. log(event) },
+   onDrawing: function (event) { console. log(event) },
+   onDrawEnd: function (event) { console. log(event) },
+   onClick: function (event) { console. log(event) },
+   onDoubleClick: function (event) { console. log(event) },
+   onRightClick: function (event) {
+     console. log(event)
+     return false
+   },
+   onMouseEnter: function (event) { console. log(event) },
+   onMouseLeave: function (event) { console. log(event) },
+   onPressedMoveStart: function (event) { console. log(event) },
+   onPressedMoving: function (event) { console. log(event) },
+   onPressedMoveEnd: function (event) { console. log(event) },
+   onRemoved: function (event) { console. log(event) },
+   onSelected: function (event) { console. log(event) },
+   onDeselected: function (event) { console. log(event) }
+})
chart.overrideOverlay({
+   name: 'segment',
+   id: 'segment_1',
+   groupId: 'segment',
+   points: [
+     { timestamp: 1614171282000, value: 18987 },
+     { timestamp: 1614171202000, value: 16098 },
+   ],
+   styles: {
+     line: {
+       style: 'solid',
+       dashedValue: [2, 2]
+       color: '#f00',
+       size: 2
+     }
+   },
+   lock: false,
+   visible: true,
+   zLevel: 0,
+   mode: 'weak_magnet',
+   modeSensitivity: 8
+   extendData: 'xxxxxxxx',
+   needDefaultPointFigure: false,
+   needDefaultXAxisFigure: false,
+   needDefaultYAxisFigure: false,
+   onDrawStart: function (event) { console. log(event) },
+   onDrawing: function (event) { console. log(event) },
+   onDrawEnd: function (event) { console. log(event) },
+   onClick: function (event) { console. log(event) },
+   onDoubleClick: function (event) { console. log(event) },
+   onRightClick: function (event) {
+     console. log(event)
+     return false
+   },
+   onMouseEnter: function (event) { console. log(event) },
+   onMouseLeave: function (event) { console. log(event) },
+   onPressedMoveStart: function (event) { console. log(event) },
+   onPressedMoving: function (event) { console. log(event) },
+   onPressedMoveEnd: function (event) { console. log(event) },
+   onRemoved: function (event) { console. log(event) },
+   onSelected: function (event) { console. log(event) },
+   onDeselected: function (event) { console. log(event) }
+})

removeOverlay(remove)

typescript
(
+  remove: string | {
+    id?: string
+    groupId?: string
+    name?: string
+  }
+) => void
(
+  remove: string | {
+    id?: string
+    groupId?: string
+    name?: string
+  }
+) => void

Remove graphics.

  • id The ID returned by calling the createOverlay method.
  • groupId Group id
  • name Overlay name

scrollByDistance(distance, animationDuration)

typescript
(distance: number, animationDuration?: number) => void
(distance: number, animationDuration?: number) => void

Scroll a certain distance.

  • distance distance
  • animationDuration animation time, can be default, default is no animation

scrollToRealTime(animationDuration)

typescript
(distance: number, animationDuration?: number) => void
(distance: number, animationDuration?: number) => void

Scroll to original position.

  • animationDuration animation time, can be default, default is no animation

scrollToDataIndex(dataIndex, animationDuration)

typescript
(dataIndex: number, animationDuration?: number) => void
(dataIndex: number, animationDuration?: number) => void

Scroll to the specified location.

  • dataIndex the index of the data
  • animationDuration animation time, can be default, default is no animation

scrollToTimestamp(timestamp, animationDuration)

typescript
(timestamp: number, animationDuration?: number) => void
(timestamp: number, animationDuration?: number) => void

Scroll to the specified timestamp.

  • timestamp timestamp
  • animationDuration animation time, can be default, default is no animation

zoomAtCoordinate(scale, coordinate, animationDuration)

typescript
(
+  scale: number,
+  coordinate?: {
+    x: number
+    y: number
+  },
+  animationDuration?: number
+) => void
(
+  scale: number,
+  coordinate?: {
+    x: number
+    y: number
+  },
+  animationDuration?: number
+) => void

Scale at a certain coordinate point.

  • scale scaling factor
  • coordinate coordinate point, can be defaulted, the default is to zoom in the middle of the chart
  • animationDuration animation time, can be default, default is no animation

zoomAtDataIndex(scale, dataIndex, animationDuration)

typescript
(scale: number, dataIndex: number, animationDuration?: number) => void
(scale: number, dataIndex: number, animationDuration?: number) => void

Scale at a certain position.

  • scale scaling factor
  • dataIndex the index of the data
  • animationDuration animation time, can be default, default is no animation

zoomAtTimestamp(scale, timestamp, animationDuration)

typescript
(scale: number, timestamp: number, animationDuration?: number) => void
(scale: number, timestamp: number, animationDuration?: number) => void

Scale on the specified timestamp.

  • scale scaling factor
  • timestamp timestamp
  • animationDuration animation time, can be default, default is no animation

setPaneOptions(options)

typescript
(
+  options: {
+    id: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  }
+) => void
(
+  options: {
+    id: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  }
+) => void

Set window configuration.

  • paneOptions window configuration information, can be default
    • id window id
    • height window height, can be default
    • minHeight minimum height of the window, can be defaulted
    • dragEnbaled Whether the window can be dragged to adjust the height, it can be defaulted
    • gap margins
      • top top margin, value less than 1 is a percentage
      • bottom bottom margin, value less than 1 is a percentage
    • axisOptions
      • scrollZoomEnabled Scroll zoom flag

Special id

'candle_pane', the window id of the main picture.

Example:

javascript
chart.setPaneOptions({
+  id: 'pane_1',
+  height: 100,
+  minHeight: 3,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+})
chart.setPaneOptions({
+  id: 'pane_1',
+  height: 100,
+  minHeight: 3,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+})

executeAction(type, data)

typescript
(
+   type: 'onCrosshairChange',
+   data: any => void
+) => void
(
+   type: 'onCrosshairChange',
+   data: any => void
+) => void

Execute chart action.

  • type only supported 'onCrosshairChange'
  • data data required for execution

subscribeAction(type, callback)

typescript
(
+   type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+   callback: (data?: any) => void
+) => void
(
+   type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+   callback: (data?: any) => void
+) => void

Subscribe to chart actions.

  • type options are 'onZoom', 'onScroll', 'onVisibleRangeChange', 'onCandleBarClick', 'onTooltipIconClick', 'onCrosshairChange' and 'onPaneDrag'
  • callback is a callback method

unsubscribeAction(type, callback)

typescript
(
+   type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+   callback?: (data?: any) => void
+) => void
(
+   type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+   callback?: (data?: any) => void
+) => void

Unsubscribe from chart actions.

  • type options are 'onZoom', 'onScroll', 'onVisibleRangeChange', 'onCandleBarClick', 'onTooltipIconClick', 'onCrosshairChange' and 'onPaneDrag'
  • callback is the callback method when subscribing, the default is to cancel all the current types

convertToPixel(value, finder)

typescript
(
+   value: {
+     dataIndex?: number
+     timestamp?: number
+     value?: number
+   } | Array<{
+     dataIndex?: number
+     timestamp?: number
+     value?: number
+   }>,
+   finder: {
+     paneId?: string,
+     absolute?: boolean
+   }
+) => { x: number?, y?: number } | Array<{ x?: number, y?: number }>
(
+   value: {
+     dataIndex?: number
+     timestamp?: number
+     value?: number
+   } | Array<{
+     dataIndex?: number
+     timestamp?: number
+     value?: number
+   }>,
+   finder: {
+     paneId?: string,
+     absolute?: boolean
+   }
+) => { x: number?, y?: number } | Array<{ x?: number, y?: number }>

Convert values to coordinates.

  • value The value to be converted, it can be an object or an array
    • dataIndex data index, if dataIndex and timestamp exist at the same time, it will be converted according to the index
    • timestamp timestamp
    • value corresponds to the value of the y-axis
  • finder filter
    • paneId window id
    • absolute is an absolute coordinate, only works on the y axis

convertFromPixel(coordinate, finder)

typescript
(
+  coordinate: {
+    x?: number
+    y?: number
+  } | Array<{
+    x?: number
+    y?: number
+  },
+  finder: {
+    paneId?: string
+    absolute?: boolean
+  }
+) => {
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  } | Array<{
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  }>
(
+  coordinate: {
+    x?: number
+    y?: number
+  } | Array<{
+    x?: number
+    y?: number
+  },
+  finder: {
+    paneId?: string
+    absolute?: boolean
+  }
+) => {
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  } | Array<{
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  }>

Convert coordinates to values.

  • coordinate needs to be converted, it can be an object or an array
  • finder filter
    • paneId window id
    • absolute is an absolute coordinate, only works on the y axis

getConvertPictureUrl(includeOverlay, type, backgroundColor)

typescript
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string

Get the image url after the chart is converted into an image.

  • includeOverlay needs to include the overlay layer, it can be defaulted
  • type The converted image type, one of the three types of 'png', 'jpeg', 'bmp', can be defaulted, the default is 'jpeg'
  • backgroundColor background color, can be defaulted, the default is '#FFFFFF'

resize()

typescript
() => void
() => void

Resizing the chart will always fill the container size.

Note

This method will recalculate the size of each module in the entire chart, frequent calls may affect performance, please call with caution.

`,190),e=[o];function t(c,r,y,D,C,i){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default}; diff --git a/assets/en-US_guide_instance-api.md.f3e75242.lean.js b/assets/en-US_guide_instance-api.md.f3e75242.lean.js deleted file mode 100644 index 4a6a782ca..000000000 --- a/assets/en-US_guide_instance-api.md.f3e75242.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"Instance API","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/instance-api.md","filePath":"en-US/guide/instance-api.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/instance-api.md"},o=l("",190),e=[o];function t(c,r,y,D,C,i){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default}; diff --git a/assets/en-US_guide_overlay.md.3c11662b.lean.js b/assets/en-US_guide_overlay.md.3c11662b.lean.js deleted file mode 100644 index bd3af662b..000000000 --- a/assets/en-US_guide_overlay.md.3c11662b.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const A=JSON.parse('{"title":"Overlay","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/overlay.md","filePath":"en-US/guide/overlay.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/overlay.md"},o=l("",12),e=[o];function t(c,r,y,i,F,D){return n(),a("div",null,e)}const C=s(p,[["render",t]]);export{A as __pageData,C as default}; diff --git a/assets/en-US_guide_overlay.md.3c11662b.js b/assets/en-US_guide_overlay.md.c6625146.js similarity index 99% rename from assets/en-US_guide_overlay.md.3c11662b.js rename to assets/en-US_guide_overlay.md.c6625146.js index a3d42f122..cdbc0d5a5 100644 --- a/assets/en-US_guide_overlay.md.3c11662b.js +++ b/assets/en-US_guide_overlay.md.c6625146.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const A=JSON.parse('{"title":"Overlay","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/overlay.md","filePath":"en-US/guide/overlay.md","lastUpdated":1689272235000}'),p={name:"en-US/guide/overlay.md"},o=l(`

Overlay

This document introduces the built-in overlays in the chart and how to customize a overlay.

Built-in overlay types

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelLfilineLine, ci , simpleAnnotation, simpleTag

Custom overlays

Customize an overlay, then add it globally through klinecharts.registerOverlay, add it to the chart and use it like the built-in overlay.

Attribute description

typescript
{
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const A=JSON.parse('{"title":"Overlay","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/overlay.md","filePath":"en-US/guide/overlay.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/overlay.md"},o=l(`

Overlay

This document introduces the built-in overlays in the chart and how to customize a overlay.

Built-in overlay types

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelLfilineLine, ci , simpleAnnotation, simpleTag

Custom overlays

Customize an overlay, then add it globally through klinecharts.registerOverlay, add it to the chart and use it like the built-in overlay.

Attribute description

typescript
{
   // Name, a required field, used as the unique identifier for overlay creation
   name: string
 
diff --git a/assets/en-US_guide_overlay.md.c6625146.lean.js b/assets/en-US_guide_overlay.md.c6625146.lean.js
new file mode 100644
index 000000000..cdbc0d5a5
--- /dev/null
+++ b/assets/en-US_guide_overlay.md.c6625146.lean.js
@@ -0,0 +1,437 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const A=JSON.parse('{"title":"Overlay","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/overlay.md","filePath":"en-US/guide/overlay.md","lastUpdated":1691074246000}'),p={name:"en-US/guide/overlay.md"},o=l(`

Overlay

This document introduces the built-in overlays in the chart and how to customize a overlay.

Built-in overlay types

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelLfilineLine, ci , simpleAnnotation, simpleTag

Custom overlays

Customize an overlay, then add it globally through klinecharts.registerOverlay, add it to the chart and use it like the built-in overlay.

Attribute description

typescript
{
+  // Name, a required field, used as the unique identifier for overlay creation
+  name: string
+
+  // How many steps are needed in total to complete the drawing, not necessary
+  totalStep?: number
+
+  // Whether to lock, do not trigger events, not necessary
+  lock?: boolean
+
+  // Do you need visible
+  visible?: boolean
+
+  // Draw level
+  zLevel?: number
+
+  // Do you need the graphics corresponding to the default points, not necessary
+  needDefaultPointFigure?: boolean
+
+  // Do you need the graphics on the default X-axis, not necessary
+  needDefaultXAxisFigure?: boolean
+
+  // Do you need the graphics on the default Y axis, not necessary
+  needDefaultYAxisFigure?: boolean
+
+  // mode, options are \`normal\`, \`weak_magnet\`, \`strong_magnet\`, not required
+  mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+
+  // mode sensitivity, only valid when mode is weak_magnet
+  modeSensitivity?: number
+
+  // point information, not required
+  points?: Array<{
+    // timestamp
+    timestamp: number
+    // data index
+    dataIndex?: number
+    // corresponding to the value of the y-axis
+    value?: number
+  }>,
+
+  // Extended data, not required
+  extendData?: any
+
+  // style, not required, the type participates in the overlay in [style]
+  styles?: OverlayStyle
+
+  // Create graphics corresponding to points, not required
+  createPointFigures: ({
+    // overlay instance
+    overlay: Overlay
+    // coordinate information corresponding to points
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+    // window size information
+    bounding: {
+      // width
+      width: number
+      // high
+      height: number
+      // distance to the left
+      left: number
+      // distance to the right
+      right: number
+      // distance from top
+      top: number
+      // distance from bottom
+      bottom: number
+    },
+    // information about the size of the candlestick
+    barSpace: {
+      // candlestick size
+      bar: number
+      halfBar: number
+      // candlesticks do not include dimensions of gaps between candlesticks
+      gapBar: number
+      halfGapBar: number
+    },
+    // precision
+    precision: {
+      // price precision
+      price: number
+      // Quantity precision
+      volume: number
+    },
+    // thousands separator
+    thousandsSeparator: string,
+    // Constructor for objects that format date and time, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat for details
+    dateTimeFormat: Intl. DateTimeFormat
+    // The default style, that is, the overlay in the global style configuration, the type participates in the overlay in [style]
+    defaultStyles: OverlayStyle
+    // x-axis component, some built-in conversion methods
+    xAxis: XAxis,
+    // y-axis component, with some built-in conversion methods
+    yAxis: YAxis
+  }) => ({
+    // No special meaning, can be used for extension fields
+    key?: string
+    // Graphic type, one of the return values of klinecharts.getSupportFigures
+    type: string
+    // The properties of the graphic corresponding to the type
+    attrs: any | any[]
+    // The style of the graphic corresponding to type
+    styles?: any
+    // Whether to ignore the event
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }) | Array<{
+    key?: string
+    type: string
+    attrs: any | any[]
+    styles?: any
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }>
+
+  // Create graphics on the X axis, not required, parameters and return values are consistent with \`createPointFigures\`
+  createXAxisFigures?: OverlayCreateFiguresCallback
+
+  // Create graphics on the Y axis, not required, parameters and return values are consistent with \`createPointFigures\`
+  createYAxisFigures?: OverlayCreateFiguresCallback
+
+  // Handle the movement operation during the drawing process, which can be defaulted and triggered during the movement drawing process
+  performEventMoveForDrawing?: ({
+    // current step
+    currentStep: number
+    // model
+    mode: 'normal' | 'weak_magnet' | 'strong_magnet'
+    // point information
+    points: Array<{
+      // timestamp
+      timestamp: number
+      // data index
+      dataIndex?: number
+      // corresponding to the value of the y-axis
+      value?: number
+    }>,
+    // index of the event point
+    performPointIndex
+    // Information about the point where the event is located
+    performPoint
+  }) => void,
+
+  // Handle the press and move operation, which can be defaulted, and is triggered during the movement of a certain operation point
+  // The callback parameters are consistent with \`performEventMoveForDrawing\`
+  performEventPressedMove?: (params: OverlayPerformEventParams) => void
+
+  // draw start callback event, can be default
+  onDrawStart?: (event: OverlayEvent) => boolean
+
+  // callback event during drawing, can be defaulted
+  onDrawing?: (event: OverlayEvent) => boolean
+
+  // Draw end callback event, can be default
+  onDrawEnd?: (event: OverlayEvent) => boolean
+
+  // click callback event, default
+  onClick?: (event: OverlayEvent) => boolean
+
+  // double click callback event, default
+  onDoubleClick?: (event: OverlayEvent) => boolean
+
+  // The right-click callback event, which can be defaulted, needs to return a value of type boolean. If it returns true, the built-in right-click delete will be invalid
+  onRightClick?: (event: OverlayEvent) => boolean
+
+  // Hold down and drag to start the callback event, which can be defaulted
+  onPressedMoveStart?: (event: OverlayEvent) => boolean
+
+  // Press and hold the drag callback event, which can be defaulted
+  onPressedMoving?: (event: OverlayEvent) => boolean
+
+  // Hold down and drag to end the callback event, which can be defaulted
+  onPressedMoveEnd: (event: OverlayEvent) => boolean
+
+  // Mouse move event, can be default
+  onMouseEnter?: (event: OverlayEvent) => boolean
+
+  // Mouse out event, default
+  onMouseLeave?: (event: OverlayEvent) => boolean
+
+  // delete callback event, default
+  onRemoved?: (event: OverlayEvent) => boolean
+
+  // Select the callback event, which can be defaulted
+  onSelected?: (event: OverlayEvent) => boolean
+
+  // cancel callback event, default
+  onDeselected?: (event: OverlayEvent) => boolean
+}
{
+  // Name, a required field, used as the unique identifier for overlay creation
+  name: string
+
+  // How many steps are needed in total to complete the drawing, not necessary
+  totalStep?: number
+
+  // Whether to lock, do not trigger events, not necessary
+  lock?: boolean
+
+  // Do you need visible
+  visible?: boolean
+
+  // Draw level
+  zLevel?: number
+
+  // Do you need the graphics corresponding to the default points, not necessary
+  needDefaultPointFigure?: boolean
+
+  // Do you need the graphics on the default X-axis, not necessary
+  needDefaultXAxisFigure?: boolean
+
+  // Do you need the graphics on the default Y axis, not necessary
+  needDefaultYAxisFigure?: boolean
+
+  // mode, options are \`normal\`, \`weak_magnet\`, \`strong_magnet\`, not required
+  mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+
+  // mode sensitivity, only valid when mode is weak_magnet
+  modeSensitivity?: number
+
+  // point information, not required
+  points?: Array<{
+    // timestamp
+    timestamp: number
+    // data index
+    dataIndex?: number
+    // corresponding to the value of the y-axis
+    value?: number
+  }>,
+
+  // Extended data, not required
+  extendData?: any
+
+  // style, not required, the type participates in the overlay in [style]
+  styles?: OverlayStyle
+
+  // Create graphics corresponding to points, not required
+  createPointFigures: ({
+    // overlay instance
+    overlay: Overlay
+    // coordinate information corresponding to points
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+    // window size information
+    bounding: {
+      // width
+      width: number
+      // high
+      height: number
+      // distance to the left
+      left: number
+      // distance to the right
+      right: number
+      // distance from top
+      top: number
+      // distance from bottom
+      bottom: number
+    },
+    // information about the size of the candlestick
+    barSpace: {
+      // candlestick size
+      bar: number
+      halfBar: number
+      // candlesticks do not include dimensions of gaps between candlesticks
+      gapBar: number
+      halfGapBar: number
+    },
+    // precision
+    precision: {
+      // price precision
+      price: number
+      // Quantity precision
+      volume: number
+    },
+    // thousands separator
+    thousandsSeparator: string,
+    // Constructor for objects that format date and time, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat for details
+    dateTimeFormat: Intl. DateTimeFormat
+    // The default style, that is, the overlay in the global style configuration, the type participates in the overlay in [style]
+    defaultStyles: OverlayStyle
+    // x-axis component, some built-in conversion methods
+    xAxis: XAxis,
+    // y-axis component, with some built-in conversion methods
+    yAxis: YAxis
+  }) => ({
+    // No special meaning, can be used for extension fields
+    key?: string
+    // Graphic type, one of the return values of klinecharts.getSupportFigures
+    type: string
+    // The properties of the graphic corresponding to the type
+    attrs: any | any[]
+    // The style of the graphic corresponding to type
+    styles?: any
+    // Whether to ignore the event
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }) | Array<{
+    key?: string
+    type: string
+    attrs: any | any[]
+    styles?: any
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }>
+
+  // Create graphics on the X axis, not required, parameters and return values are consistent with \`createPointFigures\`
+  createXAxisFigures?: OverlayCreateFiguresCallback
+
+  // Create graphics on the Y axis, not required, parameters and return values are consistent with \`createPointFigures\`
+  createYAxisFigures?: OverlayCreateFiguresCallback
+
+  // Handle the movement operation during the drawing process, which can be defaulted and triggered during the movement drawing process
+  performEventMoveForDrawing?: ({
+    // current step
+    currentStep: number
+    // model
+    mode: 'normal' | 'weak_magnet' | 'strong_magnet'
+    // point information
+    points: Array<{
+      // timestamp
+      timestamp: number
+      // data index
+      dataIndex?: number
+      // corresponding to the value of the y-axis
+      value?: number
+    }>,
+    // index of the event point
+    performPointIndex
+    // Information about the point where the event is located
+    performPoint
+  }) => void,
+
+  // Handle the press and move operation, which can be defaulted, and is triggered during the movement of a certain operation point
+  // The callback parameters are consistent with \`performEventMoveForDrawing\`
+  performEventPressedMove?: (params: OverlayPerformEventParams) => void
+
+  // draw start callback event, can be default
+  onDrawStart?: (event: OverlayEvent) => boolean
+
+  // callback event during drawing, can be defaulted
+  onDrawing?: (event: OverlayEvent) => boolean
+
+  // Draw end callback event, can be default
+  onDrawEnd?: (event: OverlayEvent) => boolean
+
+  // click callback event, default
+  onClick?: (event: OverlayEvent) => boolean
+
+  // double click callback event, default
+  onDoubleClick?: (event: OverlayEvent) => boolean
+
+  // The right-click callback event, which can be defaulted, needs to return a value of type boolean. If it returns true, the built-in right-click delete will be invalid
+  onRightClick?: (event: OverlayEvent) => boolean
+
+  // Hold down and drag to start the callback event, which can be defaulted
+  onPressedMoveStart?: (event: OverlayEvent) => boolean
+
+  // Press and hold the drag callback event, which can be defaulted
+  onPressedMoving?: (event: OverlayEvent) => boolean
+
+  // Hold down and drag to end the callback event, which can be defaulted
+  onPressedMoveEnd: (event: OverlayEvent) => boolean
+
+  // Mouse move event, can be default
+  onMouseEnter?: (event: OverlayEvent) => boolean
+
+  // Mouse out event, default
+  onMouseLeave?: (event: OverlayEvent) => boolean
+
+  // delete callback event, default
+  onRemoved?: (event: OverlayEvent) => boolean
+
+  // Select the callback event, which can be defaulted
+  onSelected?: (event: OverlayEvent) => boolean
+
+  // cancel callback event, default
+  onDeselected?: (event: OverlayEvent) => boolean
+}

Example

A filled, bordered circle is used to illustrate how to configure.

javascript
{
+   // name
+   name: 'sampleCircle',
+
+   // Three steps are required to complete the drawing of a circle
+   totalStep: 3,
+
+   // Create the graphic information corresponding to the point
+   createPointFigures: ({ scoordinates }) => {
+     if (coordinates. length === 2) {
+       const xDis = Math.abs(coordinates[0].x - coordinates[1].x)
+       const yDis = Math.abs(coordinates[0].y - coordinates[1].y)
+       // Determine the coordinates of the circle generated by the corresponding point
+       const radius = Math. sqrt(xDis * xDis + yDis * yDis)
+       // The chart has built-in basic graphics 'circle', which can be used directly
+       return {
+         key: 'sampleCircle',
+         type: 'circle',
+         attrs: {
+           ...coordinates[0],
+           r: radius
+         },
+         styles: {
+           // Select the border and fill it, other selections use the default style
+           style: 'stroke_fill'
+         }
+       }
+     }
+     return []
+   }
+}
{
+   // name
+   name: 'sampleCircle',
+
+   // Three steps are required to complete the drawing of a circle
+   totalStep: 3,
+
+   // Create the graphic information corresponding to the point
+   createPointFigures: ({ scoordinates }) => {
+     if (coordinates. length === 2) {
+       const xDis = Math.abs(coordinates[0].x - coordinates[1].x)
+       const yDis = Math.abs(coordinates[0].y - coordinates[1].y)
+       // Determine the coordinates of the circle generated by the corresponding point
+       const radius = Math. sqrt(xDis * xDis + yDis * yDis)
+       // The chart has built-in basic graphics 'circle', which can be used directly
+       return {
+         key: 'sampleCircle',
+         type: 'circle',
+         attrs: {
+           ...coordinates[0],
+           r: radius
+         },
+         styles: {
+           // Select the border and fill it, other selections use the default style
+           style: 'stroke_fill'
+         }
+       }
+     }
+     return []
+   }
+}

So a custom overlay is complete.

`,12),e=[o];function t(c,r,y,i,F,D){return n(),a("div",null,e)}const C=s(p,[["render",t]]);export{A as __pageData,C as default}; diff --git a/assets/en-US_guide_styles.md.d6179c4c.js b/assets/en-US_guide_styles.md.30beaf82.js similarity index 99% rename from assets/en-US_guide_styles.md.d6179c4c.js rename to assets/en-US_guide_styles.md.30beaf82.js index f5683f7f1..6b8b62060 100644 --- a/assets/en-US_guide_styles.md.d6179c4c.js +++ b/assets/en-US_guide_styles.md.30beaf82.js @@ -1,4 +1,4 @@ -import{S as a}from"./chunks/StyleExplain.c9b1fabe.js";import{o as l,c as p,L as o,k as s,a as n,V as e}from"./chunks/framework.410404a1.js";const c=s("h1",{id:"🎨-style",tabindex:"-1"},[n("🎨 Style "),s("a",{class:"header-anchor",href:"#🎨-style","aria-label":'Permalink to "🎨 Style"'},"​")],-1),t=s("p",null,[n("Whether you see a point or a line on the chart, you can basically customize the style. Changes can be made via the chart method "),s("code",null,"init(ds, options)"),n(" or the chart instance method "),s("code",null,"setStyles(styles)"),n(".")],-1),r=s("h2",{id:"picture-explanation",tabindex:"-1"},[n("Picture explanation "),s("a",{class:"header-anchor",href:"#picture-explanation","aria-label":'Permalink to "Picture explanation"'},"​")],-1),y=e(`

Default full configuration

javascript
{
+import{v as a,b as l,E as p,F as s,L as n,R as o}from"./chunks/framework.3ac7bdc3.js";import{S as e}from"./chunks/StyleExplain.b92d884c.js";const c=s("h1",{id:"🎨-style",tabindex:"-1"},[n("🎨 Style "),s("a",{class:"header-anchor",href:"#🎨-style","aria-label":'Permalink to "🎨 Style"'},"​")],-1),t=s("p",null,[n("Whether you see a point or a line on the chart, you can basically customize the style. Changes can be made via the chart method "),s("code",null,"init(ds, options)"),n(" or the chart instance method "),s("code",null,"setStyles(styles)"),n(".")],-1),r=s("h2",{id:"picture-explanation",tabindex:"-1"},[n("Picture explanation "),s("a",{class:"header-anchor",href:"#picture-explanation","aria-label":'Permalink to "Picture explanation"'},"​")],-1),y=o(`

Default full configuration

javascript
{
   grid: {
     show: true,
     horizontal: {
@@ -970,4 +970,4 @@ import{S as a}from"./chunks/StyleExplain.c9b1fabe.js";import{o as l,c as p,L as
       backgroundColor: '#1677FF'
     }
   }
-}
`,2),d=JSON.parse('{"title":"🎨 Style","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/styles.md","filePath":"en-US/guide/styles.md","lastUpdated":1689272235000}'),F={name:"en-US/guide/styles.md"},h=Object.assign(F,{setup(D){return(i,C)=>(l(),p("div",null,[c,t,r,o(a),y]))}});export{d as __pageData,h as default}; +}
`,2),d=JSON.parse('{"title":"🎨 Style","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/styles.md","filePath":"en-US/guide/styles.md","lastUpdated":1691074246000}'),F={name:"en-US/guide/styles.md"},h=Object.assign(F,{setup(D){return(i,C)=>(a(),l("div",null,[c,t,r,p(e),y]))}});export{d as __pageData,h as default}; diff --git a/assets/en-US_guide_styles.md.30beaf82.lean.js b/assets/en-US_guide_styles.md.30beaf82.lean.js new file mode 100644 index 000000000..6b8b62060 --- /dev/null +++ b/assets/en-US_guide_styles.md.30beaf82.lean.js @@ -0,0 +1,973 @@ +import{v as a,b as l,E as p,F as s,L as n,R as o}from"./chunks/framework.3ac7bdc3.js";import{S as e}from"./chunks/StyleExplain.b92d884c.js";const c=s("h1",{id:"🎨-style",tabindex:"-1"},[n("🎨 Style "),s("a",{class:"header-anchor",href:"#🎨-style","aria-label":'Permalink to "🎨 Style"'},"​")],-1),t=s("p",null,[n("Whether you see a point or a line on the chart, you can basically customize the style. Changes can be made via the chart method "),s("code",null,"init(ds, options)"),n(" or the chart instance method "),s("code",null,"setStyles(styles)"),n(".")],-1),r=s("h2",{id:"picture-explanation",tabindex:"-1"},[n("Picture explanation "),s("a",{class:"header-anchor",href:"#picture-explanation","aria-label":'Permalink to "Picture explanation"'},"​")],-1),y=o(`

Default full configuration

javascript
{
+  grid: {
+    show: true,
+    horizontal: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    },
+    vertical: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    }
+  },
+  candle: {
+    // 'candle_solid'|'candle_stroke'|'candle_up_stroke'|'candle_down_stroke'|'ohlc'|'area'
+    type: 'candle_solid',
+    bar: {
+      upColor: '#2DC08E',
+      downColor: '#F92855',
+      noChangeColor: '#888888',
+      upBorderColor: '#2DC08E',
+      downBorderColor: '#F92855',
+      noChangeBorderColor: '#888888',
+      upWickColor: '#2DC08E',
+      downWickColor: '#F92855',
+      noChangeWickColor: '#888888'
+    },
+    area: {
+      lineSize: 2,
+      lineColor: '#2196F3',
+      value: 'close',
+      backgroundColor: [{
+        offset: 0,
+        color: 'rgba(33, 150, 243, 0.01)'
+      }, {
+        offset: 1,
+        color: 'rgba(33, 150, 243, 0.2)'
+      }]
+    },
+    priceMark: {
+      show: true,
+      high: {
+        show: true,
+        color: '#D9D9D9',
+        textMargin: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal'
+      },
+      low: {
+        show: true,
+        color: '#D9D9D9',
+        textMargin: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal',
+      },
+      last: {
+        show: true,
+        upColor: '#2DC08E',
+        downColor: '#F92855',
+        noChangeColor: '#888888',
+        line: {
+          show: true,
+          // 'solid' | 'dashed'
+          style: 'dashed',
+          dashedValue: [4, 4],
+          size: 1
+        },
+        text: {
+          show: true,
+          // 'fill' | 'stroke' | 'stroke_fill'
+          style: 'fill',
+          size: 12,
+          paddingLeft: 4,
+          paddingTop: 4,
+          paddingRight: 4,
+          paddingBottom: 4,
+          // 'solid' | 'dashed'
+          borderStyle: 'solid',
+          borderSize: 1,
+          borderDashedValue: [2, 2],
+          color: '#FFFFFF',
+          family: 'Helvetica Neue',
+          weight: 'normal',
+          borderRadius: 2
+        }
+      }
+    },
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      // Custom display, it can be a callback method or an array, when it is a method, it needs to return an array
+      // The child item type of the array is { title, value }
+      // title and value can be strings or objects, and the object type is { text, color }
+      // title or title.text can be an internationalized key,
+      // value or value.text supports string templates
+      // For example: want to display time, opening and closing, configure [{ title: 'time', value: '{time}' }, { title: 'open', value: '{open}' }, { title: ' close', value: '{close}' }]
+      custom: null
+      defaultValue: 'n/a',
+      rect: {
+       // 'fixed' | 'pointer'
+        position: 'fixed',
+        paddingLeft: 0,
+        paddingRight: 0,
+        paddingTop: 0,
+        paddingBottom: 6,
+        offsetLeft: 10,
+        offsetTop: 8,
+        offsetRight: 10,
+        offsetBottom: 8,
+        borderRadius: 4,
+        borderSize: 1,
+        borderColor: '#f2f3f5',
+        color: '#FEFEFE'
+      },
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginLeft: 10,
+        marginTop: 8,
+        marginRight: 6,
+        marginBottom: 0
+      },
+      // sample:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // types include 'left', 'middle', 'right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  indicator: {
+    ohlc: {
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    },
+    bars: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    lines: [
+      {
+        // 'solid' | 'dashed'
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#FF9600'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#935EBD'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#2196F3'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#E11D74'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#01C5C4'
+      }
+    ],
+    circles: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    lastValueMark: {
+      show: false,
+      text: {
+        show: false,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderSize: 1,
+        borderDashedValue: [2, 2],
+        paddingLeft: 4,
+        paddingTop: 4,
+        paddingRight: 4,
+        paddingBottom: 4,
+        borderRadius: 2
+      }
+    },
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      showName: true,
+      showParams: true,
+      defaultValue: 'n/a',
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginTop: 8,
+        marginRight: 6,
+        marginBottom: 0,
+        marginLeft: 10
+      },
+      // sample:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // types include 'left', 'middle', 'right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  xAxis: {
+    show: true,
+    size: 'auto',
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  yAxis: {
+    show: true,
+    size: 'auto',
+    // 'left' | 'right'
+    position: 'right',
+    // 'normal' | 'percentage' | 'log'
+    type: 'normal',
+    inside: false,
+    reverse: false,
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  separator: {
+    size: 1,
+    color: '#888888',
+    fill: true,
+    activeBackgroundColor: 'rgba(230, 230, 230, .15)'
+  },
+  crosshair: {
+    show: true,
+    horizontal: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    },
+    vertical: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    }
+  },
+  overlay: {
+    point: {
+      color: '#1677FF',
+      borderColor: 'rgba(22, 119, 255, 0.35)',
+      borderSize: 1,
+      radius: 5,
+      activeColor: '#1677FF',
+      activeBorderColor: 'rgba(22, 119, 255, 0.35)',
+      activeBorderSize: 3,
+      activeRadius: 5
+    },
+    line: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      smooth: false,
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    rect: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      borderRadius: 0,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    polygon: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#1677FF',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    circle: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    arc: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    text: {
+      color: '#1677FF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal'
+    },
+    rectText: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#FFFFFF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2],
+      borderSize: 1,
+      borderRadius: 2,
+      borderColor: '#1677FF',
+      paddingLeft: 4,
+      paddingRight: 4,
+      paddingTop: 4,
+      paddingBottom: 4,
+      backgroundColor: '#1677FF'
+    }
+  }
+}
{
+  grid: {
+    show: true,
+    horizontal: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    },
+    vertical: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    }
+  },
+  candle: {
+    // 'candle_solid'|'candle_stroke'|'candle_up_stroke'|'candle_down_stroke'|'ohlc'|'area'
+    type: 'candle_solid',
+    bar: {
+      upColor: '#2DC08E',
+      downColor: '#F92855',
+      noChangeColor: '#888888',
+      upBorderColor: '#2DC08E',
+      downBorderColor: '#F92855',
+      noChangeBorderColor: '#888888',
+      upWickColor: '#2DC08E',
+      downWickColor: '#F92855',
+      noChangeWickColor: '#888888'
+    },
+    area: {
+      lineSize: 2,
+      lineColor: '#2196F3',
+      value: 'close',
+      backgroundColor: [{
+        offset: 0,
+        color: 'rgba(33, 150, 243, 0.01)'
+      }, {
+        offset: 1,
+        color: 'rgba(33, 150, 243, 0.2)'
+      }]
+    },
+    priceMark: {
+      show: true,
+      high: {
+        show: true,
+        color: '#D9D9D9',
+        textMargin: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal'
+      },
+      low: {
+        show: true,
+        color: '#D9D9D9',
+        textMargin: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal',
+      },
+      last: {
+        show: true,
+        upColor: '#2DC08E',
+        downColor: '#F92855',
+        noChangeColor: '#888888',
+        line: {
+          show: true,
+          // 'solid' | 'dashed'
+          style: 'dashed',
+          dashedValue: [4, 4],
+          size: 1
+        },
+        text: {
+          show: true,
+          // 'fill' | 'stroke' | 'stroke_fill'
+          style: 'fill',
+          size: 12,
+          paddingLeft: 4,
+          paddingTop: 4,
+          paddingRight: 4,
+          paddingBottom: 4,
+          // 'solid' | 'dashed'
+          borderStyle: 'solid',
+          borderSize: 1,
+          borderDashedValue: [2, 2],
+          color: '#FFFFFF',
+          family: 'Helvetica Neue',
+          weight: 'normal',
+          borderRadius: 2
+        }
+      }
+    },
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      // Custom display, it can be a callback method or an array, when it is a method, it needs to return an array
+      // The child item type of the array is { title, value }
+      // title and value can be strings or objects, and the object type is { text, color }
+      // title or title.text can be an internationalized key,
+      // value or value.text supports string templates
+      // For example: want to display time, opening and closing, configure [{ title: 'time', value: '{time}' }, { title: 'open', value: '{open}' }, { title: ' close', value: '{close}' }]
+      custom: null
+      defaultValue: 'n/a',
+      rect: {
+       // 'fixed' | 'pointer'
+        position: 'fixed',
+        paddingLeft: 0,
+        paddingRight: 0,
+        paddingTop: 0,
+        paddingBottom: 6,
+        offsetLeft: 10,
+        offsetTop: 8,
+        offsetRight: 10,
+        offsetBottom: 8,
+        borderRadius: 4,
+        borderSize: 1,
+        borderColor: '#f2f3f5',
+        color: '#FEFEFE'
+      },
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginLeft: 10,
+        marginTop: 8,
+        marginRight: 6,
+        marginBottom: 0
+      },
+      // sample:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // types include 'left', 'middle', 'right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  indicator: {
+    ohlc: {
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    },
+    bars: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    lines: [
+      {
+        // 'solid' | 'dashed'
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#FF9600'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#935EBD'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#2196F3'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#E11D74'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#01C5C4'
+      }
+    ],
+    circles: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    lastValueMark: {
+      show: false,
+      text: {
+        show: false,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderSize: 1,
+        borderDashedValue: [2, 2],
+        paddingLeft: 4,
+        paddingTop: 4,
+        paddingRight: 4,
+        paddingBottom: 4,
+        borderRadius: 2
+      }
+    },
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      showName: true,
+      showParams: true,
+      defaultValue: 'n/a',
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginTop: 8,
+        marginRight: 6,
+        marginBottom: 0,
+        marginLeft: 10
+      },
+      // sample:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // types include 'left', 'middle', 'right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  xAxis: {
+    show: true,
+    size: 'auto',
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  yAxis: {
+    show: true,
+    size: 'auto',
+    // 'left' | 'right'
+    position: 'right',
+    // 'normal' | 'percentage' | 'log'
+    type: 'normal',
+    inside: false,
+    reverse: false,
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  separator: {
+    size: 1,
+    color: '#888888',
+    fill: true,
+    activeBackgroundColor: 'rgba(230, 230, 230, .15)'
+  },
+  crosshair: {
+    show: true,
+    horizontal: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    },
+    vertical: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    }
+  },
+  overlay: {
+    point: {
+      color: '#1677FF',
+      borderColor: 'rgba(22, 119, 255, 0.35)',
+      borderSize: 1,
+      radius: 5,
+      activeColor: '#1677FF',
+      activeBorderColor: 'rgba(22, 119, 255, 0.35)',
+      activeBorderSize: 3,
+      activeRadius: 5
+    },
+    line: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      smooth: false,
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    rect: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      borderRadius: 0,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    polygon: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#1677FF',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    circle: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    arc: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    text: {
+      color: '#1677FF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal'
+    },
+    rectText: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#FFFFFF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2],
+      borderSize: 1,
+      borderRadius: 2,
+      borderColor: '#1677FF',
+      paddingLeft: 4,
+      paddingRight: 4,
+      paddingTop: 4,
+      paddingBottom: 4,
+      backgroundColor: '#1677FF'
+    }
+  }
+}
`,2),d=JSON.parse('{"title":"🎨 Style","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/styles.md","filePath":"en-US/guide/styles.md","lastUpdated":1691074246000}'),F={name:"en-US/guide/styles.md"},h=Object.assign(F,{setup(D){return(i,C)=>(a(),l("div",null,[c,t,r,p(e),y]))}});export{d as __pageData,h as default}; diff --git a/assets/en-US_guide_styles.md.d6179c4c.lean.js b/assets/en-US_guide_styles.md.d6179c4c.lean.js deleted file mode 100644 index 3ecf18b99..000000000 --- a/assets/en-US_guide_styles.md.d6179c4c.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{S as a}from"./chunks/StyleExplain.c9b1fabe.js";import{o as l,c as p,L as o,k as s,a as n,V as e}from"./chunks/framework.410404a1.js";const c=s("h1",{id:"🎨-style",tabindex:"-1"},[n("🎨 Style "),s("a",{class:"header-anchor",href:"#🎨-style","aria-label":'Permalink to "🎨 Style"'},"​")],-1),t=s("p",null,[n("Whether you see a point or a line on the chart, you can basically customize the style. Changes can be made via the chart method "),s("code",null,"init(ds, options)"),n(" or the chart instance method "),s("code",null,"setStyles(styles)"),n(".")],-1),r=s("h2",{id:"picture-explanation",tabindex:"-1"},[n("Picture explanation "),s("a",{class:"header-anchor",href:"#picture-explanation","aria-label":'Permalink to "Picture explanation"'},"​")],-1),y=e("",2),d=JSON.parse('{"title":"🎨 Style","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/styles.md","filePath":"en-US/guide/styles.md","lastUpdated":1689272235000}'),F={name:"en-US/guide/styles.md"},h=Object.assign(F,{setup(D){return(i,C)=>(l(),p("div",null,[c,t,r,o(a),y]))}});export{d as __pageData,h as default}; diff --git a/assets/en-US_guide_v8-to-v9.md.50c2a7cf.js b/assets/en-US_guide_v8-to-v9.md.50c2a7cf.js new file mode 100644 index 000000000..5ce53bc7d --- /dev/null +++ b/assets/en-US_guide_v8-to-v9.md.50c2a7cf.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as d,R as a}from"./chunks/framework.3ac7bdc3.js";const g=JSON.parse('{"title":"🛠️ From V8 to V9","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/v8-to-v9.md","filePath":"en-US/guide/v8-to-v9.md","lastUpdated":1691074246000}'),t={name:"en-US/guide/v8-to-v9.md"},c=a('

🛠️ From V8 to V9

This document will help you upgrade from kinecharts 8.x to klinecharts 9.x. If you are 7.x or older, please refer to the previous upgrade document to upgrade to 8.x.

Import adjustment

klinecharts/index.blank' and klinecharts/index.simple are no longer distinguished. Please use import {...} from klinecharts uniformly.

Design adjustment

shape, annotation, tag are merged into overlay. Please refer to overlay for details.

Style configuration adjustment

  • The style options of all lines are changed to dashed and dashValue to dashedValue.
  • candle.tooltip.labels and candle.tooltip.values are merged into candle.tooltip.custom.
  • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marginEnd.
  • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marginEnd.
  • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles.
  • Delete shape, annotation, tag, please use overlay instead.

API adjustment

Chart API

  • extension.addTechnicalIndicatorTemplate(template) is changed to registerIndicator(template).
  • Delete extension.addShapeTemplate(template), please use registerOverlay(template) instead.

Instance API

  • getDom({paneId, position}) is changed to getDom(paneId, position), and the parameter position option is changed to root, main and yAxis.
  • getWidth() and getHeight() are combined into a method 'getSize(paneId, position).
  • setStyleOptions(styles) is changed to setStyles(styles).
  • getStyleOptions() is changed to getStyles().
  • setOffsetRightSpace(space) is changed to setOffsetRightDistance(distance).
  • createTechnicalIndicator(value, isStack, paneOptions) is changed to createIndicator(value, isStack, paneOptions).
  • overrideTechnicalIndicator(override, paneId) is changed to overrideIndicator(override, paneId).
  • getTechnicalIndicatorByPaneId(paneId, name) is changed to getIndicatorByPaneId(paneId, name).
  • removeTechnicalIndicator(paneId, name) is changed to removeIndicator(paneId, name).
  • subscribeAction(type, callback) and unsubscribeAction(type, callback). The parameter type option is changed to onZoom, onScroll, onCrosshairChange, onVisibleRangeChange and onPaneDrag.
  • convertToPixel(value, finder) and convertFromPixel(coordinate, finder), the parameter finder.absoluteYAxis is changed to finder.absolute.
  • To delete createShape(value, paneId), createAnnotation(annotation, paneId), createTag(tag, paneId), please use createOverlay(value, paneId) instead.
  • To delete removeShape(id), removeAnnotation(paneId, points), removeTag(paneId, tagId), please use removeOverlay(id) instead.
  • To delete setShapeOptions(options), use overrideOverlay(override) instead.
  • To delete reateHtml(html, paneId), removeHtml(paneId, htmlId), please obtain the corresponding dom through getDom(paneId, position).
  • To delete getTechnicalIndicatorByPaneId(paneId, name).

Shape help API

  • All APIs are migrated to 'klinecharts.utils'.

Customized technical indicator adjustment

  • Attribute plots is changed to figures, sub item methods color, isStroke, isDashed are merged into styles.
  • Change the method 'regeneratePlots(params) to regeneratefigures(params).
  • The method calcTechnicalIndicator(kLineDataList, options) is changed to calc(kLineDataList, indicator).
  • The method createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis, yAxis, defaultStyles }) is changed to createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }). The return value is determined by [{ title: 'xxx', value: 'xxx', color: 'xxx' } ] Change to { name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }.
  • The method render({ctx, dataSource, viewport, styles, xAxis, yAxis}) is changed to draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis }).
  • Delete the attribute shouldCheckParamCount.
',17),i=[c];function n(l,s,r,h,p,u){return o(),d("div",null,i)}const x=e(t,[["render",n]]);export{g as __pageData,x as default}; diff --git a/assets/en-US_guide_v8-to-v9.md.50c2a7cf.lean.js b/assets/en-US_guide_v8-to-v9.md.50c2a7cf.lean.js new file mode 100644 index 000000000..5ce53bc7d --- /dev/null +++ b/assets/en-US_guide_v8-to-v9.md.50c2a7cf.lean.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as d,R as a}from"./chunks/framework.3ac7bdc3.js";const g=JSON.parse('{"title":"🛠️ From V8 to V9","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/v8-to-v9.md","filePath":"en-US/guide/v8-to-v9.md","lastUpdated":1691074246000}'),t={name:"en-US/guide/v8-to-v9.md"},c=a('

🛠️ From V8 to V9

This document will help you upgrade from kinecharts 8.x to klinecharts 9.x. If you are 7.x or older, please refer to the previous upgrade document to upgrade to 8.x.

Import adjustment

klinecharts/index.blank' and klinecharts/index.simple are no longer distinguished. Please use import {...} from klinecharts uniformly.

Design adjustment

shape, annotation, tag are merged into overlay. Please refer to overlay for details.

Style configuration adjustment

  • The style options of all lines are changed to dashed and dashValue to dashedValue.
  • candle.tooltip.labels and candle.tooltip.values are merged into candle.tooltip.custom.
  • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marginEnd.
  • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marginEnd.
  • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles.
  • Delete shape, annotation, tag, please use overlay instead.

API adjustment

Chart API

  • extension.addTechnicalIndicatorTemplate(template) is changed to registerIndicator(template).
  • Delete extension.addShapeTemplate(template), please use registerOverlay(template) instead.

Instance API

  • getDom({paneId, position}) is changed to getDom(paneId, position), and the parameter position option is changed to root, main and yAxis.
  • getWidth() and getHeight() are combined into a method 'getSize(paneId, position).
  • setStyleOptions(styles) is changed to setStyles(styles).
  • getStyleOptions() is changed to getStyles().
  • setOffsetRightSpace(space) is changed to setOffsetRightDistance(distance).
  • createTechnicalIndicator(value, isStack, paneOptions) is changed to createIndicator(value, isStack, paneOptions).
  • overrideTechnicalIndicator(override, paneId) is changed to overrideIndicator(override, paneId).
  • getTechnicalIndicatorByPaneId(paneId, name) is changed to getIndicatorByPaneId(paneId, name).
  • removeTechnicalIndicator(paneId, name) is changed to removeIndicator(paneId, name).
  • subscribeAction(type, callback) and unsubscribeAction(type, callback). The parameter type option is changed to onZoom, onScroll, onCrosshairChange, onVisibleRangeChange and onPaneDrag.
  • convertToPixel(value, finder) and convertFromPixel(coordinate, finder), the parameter finder.absoluteYAxis is changed to finder.absolute.
  • To delete createShape(value, paneId), createAnnotation(annotation, paneId), createTag(tag, paneId), please use createOverlay(value, paneId) instead.
  • To delete removeShape(id), removeAnnotation(paneId, points), removeTag(paneId, tagId), please use removeOverlay(id) instead.
  • To delete setShapeOptions(options), use overrideOverlay(override) instead.
  • To delete reateHtml(html, paneId), removeHtml(paneId, htmlId), please obtain the corresponding dom through getDom(paneId, position).
  • To delete getTechnicalIndicatorByPaneId(paneId, name).

Shape help API

  • All APIs are migrated to 'klinecharts.utils'.

Customized technical indicator adjustment

  • Attribute plots is changed to figures, sub item methods color, isStroke, isDashed are merged into styles.
  • Change the method 'regeneratePlots(params) to regeneratefigures(params).
  • The method calcTechnicalIndicator(kLineDataList, options) is changed to calc(kLineDataList, indicator).
  • The method createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis, yAxis, defaultStyles }) is changed to createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }). The return value is determined by [{ title: 'xxx', value: 'xxx', color: 'xxx' } ] Change to { name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }.
  • The method render({ctx, dataSource, viewport, styles, xAxis, yAxis}) is changed to draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis }).
  • Delete the attribute shouldCheckParamCount.
',17),i=[c];function n(l,s,r,h,p,u){return o(),d("div",null,i)}const x=e(t,[["render",n]]);export{g as __pageData,x as default}; diff --git a/assets/en-US_guide_v8-to-v9.md.80debf94.js b/assets/en-US_guide_v8-to-v9.md.80debf94.js deleted file mode 100644 index aea509059..000000000 --- a/assets/en-US_guide_v8-to-v9.md.80debf94.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as d,V as a}from"./chunks/framework.410404a1.js";const g=JSON.parse('{"title":"🛠️ From V8 to V9","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/v8-to-v9.md","filePath":"en-US/guide/v8-to-v9.md","lastUpdated":1689272235000}'),t={name:"en-US/guide/v8-to-v9.md"},c=a('

🛠️ From V8 to V9

This document will help you upgrade from kinecharts 8.x to klinecharts 9.x. If you are 7.x or older, please refer to the previous upgrade document to upgrade to 8.x.

Import adjustment

klinecharts/index.blank' and klinecharts/index.simple are no longer distinguished. Please use import {...} from klinecharts uniformly.

Design adjustment

shape, annotation, tag are merged into overlay. Please refer to overlay for details.

Style configuration adjustment

  • The style options of all lines are changed to dashed and dashValue to dashedValue.
  • candle.tooltip.labels and candle.tooltip.values are merged into candle.tooltip.custom.
  • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marginEnd.
  • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marginEnd.
  • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles.
  • Delete shape, annotation, tag, please use overlay instead.

API adjustment

Chart API

  • extension.addTechnicalIndicatorTemplate(template) is changed to registerIndicator(template).
  • Delete extension.addShapeTemplate(template), please use registerOverlay(template) instead.

Instance API

  • getDom({paneId, position}) is changed to getDom(paneId, position), and the parameter position option is changed to root, main and yAxis.
  • getWidth() and getHeight() are combined into a method 'getSize(paneId, position).
  • setStyleOptions(styles) is changed to setStyles(styles).
  • getStyleOptions() is changed to getStyles().
  • setOffsetRightSpace(space) is changed to setOffsetRightDistance(distance).
  • createTechnicalIndicator(value, isStack, paneOptions) is changed to createIndicator(value, isStack, paneOptions).
  • overrideTechnicalIndicator(override, paneId) is changed to overrideIndicator(override, paneId).
  • getTechnicalIndicatorByPaneId(paneId, name) is changed to getIndicatorByPaneId(paneId, name).
  • removeTechnicalIndicator(paneId, name) is changed to removeIndicator(paneId, name).
  • subscribeAction(type, callback) and unsubscribeAction(type, callback). The parameter type option is changed to onZoom, onScroll, onCrosshairChange, onVisibleRangeChange and onPaneDrag.
  • convertToPixel(value, finder) and convertFromPixel(coordinate, finder), the parameter finder.absoluteYAxis is changed to finder.absolute.
  • To delete createShape(value, paneId), createAnnotation(annotation, paneId), createTag(tag, paneId), please use createOverlay(value, paneId) instead.
  • To delete removeShape(id), removeAnnotation(paneId, points), removeTag(paneId, tagId), please use removeOverlay(id) instead.
  • To delete setShapeOptions(options), use overrideOverlay(override) instead.
  • To delete reateHtml(html, paneId), removeHtml(paneId, htmlId), please obtain the corresponding dom through getDom(paneId, position).
  • To delete getTechnicalIndicatorByPaneId(paneId, name).

Shape help API

  • All APIs are migrated to 'klinecharts.utils'.

Customized technical indicator adjustment

  • Attribute plots is changed to figures, sub item methods color, isStroke, isDashed are merged into styles.
  • Change the method 'regeneratePlots(params) to regeneratefigures(params).
  • The method calcTechnicalIndicator(kLineDataList, options) is changed to calc(kLineDataList, indicator).
  • The method createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis, yAxis, defaultStyles }) is changed to createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }). The return value is determined by [{ title: 'xxx', value: 'xxx', color: 'xxx' } ] Change to { name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }.
  • The method render({ctx, dataSource, viewport, styles, xAxis, yAxis}) is changed to draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis }).
  • Delete the attribute shouldCheckParamCount.
',17),i=[c];function n(l,r,s,h,p,u){return o(),d("div",null,i)}const x=e(t,[["render",n]]);export{g as __pageData,x as default}; diff --git a/assets/en-US_guide_v8-to-v9.md.80debf94.lean.js b/assets/en-US_guide_v8-to-v9.md.80debf94.lean.js deleted file mode 100644 index 4d0ff6e2b..000000000 --- a/assets/en-US_guide_v8-to-v9.md.80debf94.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as d,V as a}from"./chunks/framework.410404a1.js";const g=JSON.parse('{"title":"🛠️ From V8 to V9","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/v8-to-v9.md","filePath":"en-US/guide/v8-to-v9.md","lastUpdated":1689272235000}'),t={name:"en-US/guide/v8-to-v9.md"},c=a("",17),i=[c];function n(l,r,s,h,p,u){return o(),d("div",null,i)}const x=e(t,[["render",n]]);export{g as __pageData,x as default}; diff --git a/assets/en-US_guide_what-is-klinechart.md.c6f744de.js b/assets/en-US_guide_what-is-klinechart.md.7600558c.js similarity index 81% rename from assets/en-US_guide_what-is-klinechart.md.c6f744de.js rename to assets/en-US_guide_what-is-klinechart.md.7600558c.js index c41476a64..06c59872d 100644 --- a/assets/en-US_guide_what-is-klinechart.md.c6f744de.js +++ b/assets/en-US_guide_what-is-klinechart.md.7600558c.js @@ -1 +1 @@ -import{_ as t,o as e,c as a,V as i}from"./chunks/framework.410404a1.js";const _=JSON.parse('{"title":"📃 Introducation","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/what-is-klinechart.md","filePath":"en-US/guide/what-is-klinechart.md","lastUpdated":1689272235000}'),n={name:"en-US/guide/what-is-klinechart.md"},o=i('

📃 Introducation

What's KLineChart?

KLineChart,it is a highly customizable professional lightweight financial chart.

Features

  • 📦 Out of the box: Simple and fast integration, basically zero cost to get started.
  • 🚀 Lightweight and smooth: Zero dependencies, only 40k under gzip compression.
  • 💪 Powerful functions: Built-in multiple indicators and line drawing models.
  • 🎨 Highly scalable: With rich style configuration and API, the function can be extended as you like.
  • 📱 Mobile: Support mobile, one chart, handle multiple terminals.
  • 🛡 Typescript development: Provide complete type definition files.
',5),r=[o];function s(l,c,h,d,u,p){return e(),a("div",null,r)}const f=t(n,[["render",s]]);export{_ as __pageData,f as default}; +import{_ as t,v as e,b as a,R as i}from"./chunks/framework.3ac7bdc3.js";const f=JSON.parse('{"title":"📃 Introducation","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/what-is-klinechart.md","filePath":"en-US/guide/what-is-klinechart.md","lastUpdated":1691074246000}'),n={name:"en-US/guide/what-is-klinechart.md"},o=i('

📃 Introducation

What's KLineChart?

KLineChart,it is a highly customizable professional lightweight financial chart.

Features

  • 📦 Out of the box: Simple and fast integration, basically zero cost to get started.
  • 🚀 Lightweight and smooth: Zero dependencies, only 40k under gzip compression.
  • 💪 Powerful functions: Built-in multiple indicators and line drawing models.
  • 🎨 Highly scalable: With rich style configuration and API, the function can be extended as you like.
  • 📱 Mobile: Support mobile, one chart, handle multiple terminals.
  • 🛡 Typescript development: Provide complete type definition files.
',5),r=[o];function s(l,h,d,c,u,g){return e(),a("div",null,r)}const m=t(n,[["render",s]]);export{f as __pageData,m as default}; diff --git a/assets/en-US_guide_what-is-klinechart.md.7600558c.lean.js b/assets/en-US_guide_what-is-klinechart.md.7600558c.lean.js new file mode 100644 index 000000000..06c59872d --- /dev/null +++ b/assets/en-US_guide_what-is-klinechart.md.7600558c.lean.js @@ -0,0 +1 @@ +import{_ as t,v as e,b as a,R as i}from"./chunks/framework.3ac7bdc3.js";const f=JSON.parse('{"title":"📃 Introducation","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/what-is-klinechart.md","filePath":"en-US/guide/what-is-klinechart.md","lastUpdated":1691074246000}'),n={name:"en-US/guide/what-is-klinechart.md"},o=i('

📃 Introducation

What's KLineChart?

KLineChart,it is a highly customizable professional lightweight financial chart.

Features

  • 📦 Out of the box: Simple and fast integration, basically zero cost to get started.
  • 🚀 Lightweight and smooth: Zero dependencies, only 40k under gzip compression.
  • 💪 Powerful functions: Built-in multiple indicators and line drawing models.
  • 🎨 Highly scalable: With rich style configuration and API, the function can be extended as you like.
  • 📱 Mobile: Support mobile, one chart, handle multiple terminals.
  • 🛡 Typescript development: Provide complete type definition files.
',5),r=[o];function s(l,h,d,c,u,g){return e(),a("div",null,r)}const m=t(n,[["render",s]]);export{f as __pageData,m as default}; diff --git a/assets/en-US_guide_what-is-klinechart.md.c6f744de.lean.js b/assets/en-US_guide_what-is-klinechart.md.c6f744de.lean.js deleted file mode 100644 index 8a3bfbb53..000000000 --- a/assets/en-US_guide_what-is-klinechart.md.c6f744de.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,o as e,c as a,V as i}from"./chunks/framework.410404a1.js";const _=JSON.parse('{"title":"📃 Introducation","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/what-is-klinechart.md","filePath":"en-US/guide/what-is-klinechart.md","lastUpdated":1689272235000}'),n={name:"en-US/guide/what-is-klinechart.md"},o=i("",5),r=[o];function s(l,c,h,d,u,p){return e(),a("div",null,r)}const f=t(n,[["render",s]]);export{_ as __pageData,f as default}; diff --git a/assets/en-US_index.md.94b82877.js b/assets/en-US_index.md.a6d642a5.js similarity index 88% rename from assets/en-US_index.md.94b82877.js rename to assets/en-US_index.md.a6d642a5.js index bbb49e95b..f5d8cf4d5 100644 --- a/assets/en-US_index.md.94b82877.js +++ b/assets/en-US_index.md.a6d642a5.js @@ -1 +1 @@ -import{_ as t,o as e,c as i}from"./chunks/framework.410404a1.js";const g=JSON.parse('{"title":"Highly customizable professional lightweight financial chart","description":"","frontmatter":{"title":"Highly customizable professional lightweight financial chart","layout":"home","hero":{"name":"KLineChart","text":"Highly customizable professional lightweight financial chart","tagline":"Easy to use, lightweight and smooth, suitable for web front-end financial chart with rich scenarios.","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"Getting Started","link":"/en-US/guide/getting-started"},{"theme":"alt","text":"View on Github","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"Out of the box","details":"Simple and fast integration, zero cost to get started, only 3 lines of code to display a chart, so that all attention can be focused on data docking."},{"icon":{"src":"/images/rocket.png"},"title":"Lightweight and smooth","details":"Zero dependency, only about 40k under Gzip compression, and less than 1 millisecond to load under 4G network. Charts remain fluid even with thousands of candles."},{"icon":{"src":"/images/expand.png"},"title":"Highly expand","details":"Provide rich configuration and Api, style modification, function collocation as you like. Provide technical indicators and line drawing model extensions, so that the chart has more possibilities."}]},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md","lastUpdated":1689272235000}'),a={name:"en-US/index.md"};function n(o,s,l,r,c,d){return e(),i("div")}const m=t(a,[["render",n]]);export{g as __pageData,m as default}; +import{_ as t,v as e,b as i}from"./chunks/framework.3ac7bdc3.js";const g=JSON.parse('{"title":"Highly customizable professional lightweight financial chart","description":"","frontmatter":{"title":"Highly customizable professional lightweight financial chart","layout":"home","hero":{"name":"KLineChart","text":"Highly customizable professional lightweight financial chart","tagline":"Easy to use, lightweight and smooth, suitable for web front-end financial chart with rich scenarios.","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"Getting Started","link":"/en-US/guide/getting-started"},{"theme":"alt","text":"View on Github","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"Out of the box","details":"Simple and fast integration, zero cost to get started, only 3 lines of code to display a chart, so that all attention can be focused on data docking."},{"icon":{"src":"/images/rocket.png"},"title":"Lightweight and smooth","details":"Zero dependency, only about 40k under Gzip compression, and less than 1 millisecond to load under 4G network. Charts remain fluid even with thousands of candles."},{"icon":{"src":"/images/expand.png"},"title":"Highly expand","details":"Provide rich configuration and Api, style modification, function collocation as you like. Provide technical indicators and line drawing model extensions, so that the chart has more possibilities."}]},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md","lastUpdated":1691074246000}'),a={name:"en-US/index.md"};function n(o,s,r,l,c,d){return e(),i("div")}const m=t(a,[["render",n]]);export{g as __pageData,m as default}; diff --git a/assets/en-US_index.md.94b82877.lean.js b/assets/en-US_index.md.a6d642a5.lean.js similarity index 88% rename from assets/en-US_index.md.94b82877.lean.js rename to assets/en-US_index.md.a6d642a5.lean.js index bbb49e95b..f5d8cf4d5 100644 --- a/assets/en-US_index.md.94b82877.lean.js +++ b/assets/en-US_index.md.a6d642a5.lean.js @@ -1 +1 @@ -import{_ as t,o as e,c as i}from"./chunks/framework.410404a1.js";const g=JSON.parse('{"title":"Highly customizable professional lightweight financial chart","description":"","frontmatter":{"title":"Highly customizable professional lightweight financial chart","layout":"home","hero":{"name":"KLineChart","text":"Highly customizable professional lightweight financial chart","tagline":"Easy to use, lightweight and smooth, suitable for web front-end financial chart with rich scenarios.","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"Getting Started","link":"/en-US/guide/getting-started"},{"theme":"alt","text":"View on Github","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"Out of the box","details":"Simple and fast integration, zero cost to get started, only 3 lines of code to display a chart, so that all attention can be focused on data docking."},{"icon":{"src":"/images/rocket.png"},"title":"Lightweight and smooth","details":"Zero dependency, only about 40k under Gzip compression, and less than 1 millisecond to load under 4G network. Charts remain fluid even with thousands of candles."},{"icon":{"src":"/images/expand.png"},"title":"Highly expand","details":"Provide rich configuration and Api, style modification, function collocation as you like. Provide technical indicators and line drawing model extensions, so that the chart has more possibilities."}]},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md","lastUpdated":1689272235000}'),a={name:"en-US/index.md"};function n(o,s,l,r,c,d){return e(),i("div")}const m=t(a,[["render",n]]);export{g as __pageData,m as default}; +import{_ as t,v as e,b as i}from"./chunks/framework.3ac7bdc3.js";const g=JSON.parse('{"title":"Highly customizable professional lightweight financial chart","description":"","frontmatter":{"title":"Highly customizable professional lightweight financial chart","layout":"home","hero":{"name":"KLineChart","text":"Highly customizable professional lightweight financial chart","tagline":"Easy to use, lightweight and smooth, suitable for web front-end financial chart with rich scenarios.","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"Getting Started","link":"/en-US/guide/getting-started"},{"theme":"alt","text":"View on Github","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"Out of the box","details":"Simple and fast integration, zero cost to get started, only 3 lines of code to display a chart, so that all attention can be focused on data docking."},{"icon":{"src":"/images/rocket.png"},"title":"Lightweight and smooth","details":"Zero dependency, only about 40k under Gzip compression, and less than 1 millisecond to load under 4G network. Charts remain fluid even with thousands of candles."},{"icon":{"src":"/images/expand.png"},"title":"Highly expand","details":"Provide rich configuration and Api, style modification, function collocation as you like. Provide technical indicators and line drawing model extensions, so that the chart has more possibilities."}]},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md","lastUpdated":1691074246000}'),a={name:"en-US/index.md"};function n(o,s,r,l,c,d){return e(),i("div")}const m=t(a,[["render",n]]);export{g as __pageData,m as default}; diff --git a/assets/en-US_sponsor.md.03eedb1c.lean.js b/assets/en-US_sponsor.md.03eedb1c.lean.js deleted file mode 100644 index 17f212290..000000000 --- a/assets/en-US_sponsor.md.03eedb1c.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e}from"./chunks/wechat_pay_qr_code.ab7c3922.js";import{_ as r,o as t,c as o,V as i}from"./chunks/framework.410404a1.js";const b=JSON.parse('{"title":"❤️ Sponsor","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"en-US/sponsor.md","filePath":"en-US/sponsor.md","lastUpdated":1689272235000}'),l={name:"en-US/sponsor.md"},n=i("",10),s=[n];function p(c,h,d,u,m,_){return t(),o("div",null,s)}const P=r(l,[["render",p]]);export{b as __pageData,P as default}; diff --git a/assets/en-US_sponsor.md.03eedb1c.js b/assets/en-US_sponsor.md.4f8585ac.js similarity index 75% rename from assets/en-US_sponsor.md.03eedb1c.js rename to assets/en-US_sponsor.md.4f8585ac.js index 0f09426ef..cdf2b888b 100644 --- a/assets/en-US_sponsor.md.03eedb1c.js +++ b/assets/en-US_sponsor.md.4f8585ac.js @@ -1 +1 @@ -import{_ as a,a as e}from"./chunks/wechat_pay_qr_code.ab7c3922.js";import{_ as r,o as t,c as o,V as i}from"./chunks/framework.410404a1.js";const b=JSON.parse('{"title":"❤️ Sponsor","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"en-US/sponsor.md","filePath":"en-US/sponsor.md","lastUpdated":1689272235000}'),l={name:"en-US/sponsor.md"},n=i('

❤️ Sponsor

If you think the plugin is good, I hope you can click 🌟 on GitHub. If you can reward a cup of ☕️, that would be very much appreciated.

Alipay

Wechat Pay

PayPal

Cryptocurrency

',10),s=[n];function p(c,h,d,u,m,_){return t(),o("div",null,s)}const P=r(l,[["render",p]]);export{b as __pageData,P as default}; +import{_ as a,v as e,b as r,R as t}from"./chunks/framework.3ac7bdc3.js";import{_ as o,a as i}from"./chunks/wechat_pay_qr_code.ab7c3922.js";const _=JSON.parse('{"title":"❤️ Sponsor","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"en-US/sponsor.md","filePath":"en-US/sponsor.md","lastUpdated":1691074246000}'),l={name:"en-US/sponsor.md"},s=t('

❤️ Sponsor

If you think the plugin is good, I hope you can click 🌟 on GitHub. If you can reward a cup of ☕️, that would be very much appreciated.

Alipay

Wechat Pay

PayPal

Cryptocurrency

',10),n=[s];function h(p,c,d,u,m,f){return e(),r("div",null,n)}const x=a(l,[["render",h]]);export{_ as __pageData,x as default}; diff --git a/assets/en-US_sponsor.md.4f8585ac.lean.js b/assets/en-US_sponsor.md.4f8585ac.lean.js new file mode 100644 index 000000000..cdf2b888b --- /dev/null +++ b/assets/en-US_sponsor.md.4f8585ac.lean.js @@ -0,0 +1 @@ +import{_ as a,v as e,b as r,R as t}from"./chunks/framework.3ac7bdc3.js";import{_ as o,a as i}from"./chunks/wechat_pay_qr_code.ab7c3922.js";const _=JSON.parse('{"title":"❤️ Sponsor","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"en-US/sponsor.md","filePath":"en-US/sponsor.md","lastUpdated":1691074246000}'),l={name:"en-US/sponsor.md"},s=t('

❤️ Sponsor

If you think the plugin is good, I hope you can click 🌟 on GitHub. If you can reward a cup of ☕️, that would be very much appreciated.

Alipay

Wechat Pay

PayPal

Cryptocurrency

',10),n=[s];function h(p,c,d,u,m,f){return e(),r("div",null,n)}const x=a(l,[["render",h]]);export{_ as __pageData,x as default}; diff --git a/assets/guide_changelog.md.11eaeab5.js b/assets/guide_changelog.md.11eaeab5.js deleted file mode 100644 index 9c2c2c84e..000000000 --- a/assets/guide_changelog.md.11eaeab5.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c,V as d}from"./chunks/framework.410404a1.js";const x=JSON.parse('{"title":"📠 更新日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/changelog.md","filePath":"guide/changelog.md","lastUpdated":1689272235000}'),i={name:"guide/changelog.md"},l=d('

📠 更新日志

9.5.0

2023-06-15

  • 🆕 Overlay新增事件onDoubleClick,新增属性modeSensitivity
  • 🆕 样式配置candle.tooltip.custom支持字符串模版。
  • 🐞 优化移动端阻尼滚动掉帧问题。
  • 🐞 修复窗口id命名拼写错误。
  • 💄 优化分割线事件响应灵敏度。
  • 💄 优化typescript下,OverlayFigure中的attrs类型声明。

9.4.0

2023-05-25

  • 🆕 实例api createOverlay 支持数组。
  • 🆕 overlay新增属性paneIddefaultZLevelzLevel
  • 🆕 xAxis新增方法convertTimestampFromPixelconvertTimestampToPixel
  • 💄 优化蜡烛柱显示。

9.3.0

2023-05-13

  • 🆕 新增图表API utils.calcTextWidth
  • 🆕 图表API createIndicator(value, isStack, options)setPaneOptions(options)新增options.axisOptions
  • 🆕 指标图形配置支持自定义。
  • 💄 优化bar宽度比例。
  • 💄 优化内部获取屏幕像素比。
  • 💄 优化内部id生成。

9.2.2

2023-05-04

  • 🐞 修复基础图形line事件检查可能导致错误问题。
  • 💄 优化类型检查。

9.2.1

2023-04-27

  • 💄 优化默认样式,#EF5350变更为#F92855#26A69A变更为#2DC08E
  • 💄 优化typescript声明。

9.2.0

2023-04-24

  • 🆕 实例API新增getOffsetRightDistanceexecuteAction
  • 🆕 实例APIapplyNewDataapplyMoreDataupdateData新增成功回调入参callback
  • 🆕 支持千分符显示。
  • 🆕 样式配置新增candle.bar.upBorderColorcandle.bar.downBorderColorcandle.bar.noChangeBorderColorcandle.bar.upWickColorcandle.bar.downWickColorcandle.bar.noChangeWickColorcandle.tooltip.rect.positioncandle.tooltip.rect.offsetBottom
  • 🆕 所有visibleRange新增realFromrealTo
  • 💄 优化API,klinecharts.utils.isValidklinecharts.utils.formatBigNumber
  • 💄 优化开发环境下,日志输出。

9.1.3

2023-04-15

  • 🐞 修复图表api applyNewData 入参是空数组时不刷新问题。
  • 🐞 修复无数据时y轴上十字光标文字不显示问题。
  • 💄 优化面积图显示。
  • 💄 优化覆盖物事件回调参数,新增figureKeyfigureIndex
  • 💄 优化typescript覆盖物样式类型,和基础类型DeepPartial, DeepRequired

9.1.2

2023-04-10

  • 🐞 修复内置基础图形line触发事件不准确问题。
  • 🐞 修复内置覆盖物simpleAnnotationsimpleTag绘制完成后第一次触发事件问题。
  • 💄 优化覆盖物图形事件忽略,支持事件选择。

9.1.1

2023-03-14

  • 🐞 修复内置基础图形arc不生效问题。
  • 💄 优化渲染更新。

9.1.0

2023-02-23

  • 🆕 图表实例方法subscribeActionunsubscribeAction类型新增onCandleBarClick
  • 🆕 覆盖物支持双击强制结束绘制。
  • 💄 优化事件处理。

9.0.1

2023-02-17

  • 🐞 修复typescript引入问题。

9.0.0

2023-02-16

  • 🛠 Typescript重构。
  • 🆕 新特性
    • 新增Y轴方向缩放,滚动。
    • API
      • 新增基图表方法registerFiguregetSupportFiguresgetFigureClassrigisterOverlaygetSupportOverlaysregisterLocalegetSupportLocalesregisterStyles
      • 新增实例方法,getSizesetLocalegetLocalsetCustomApigetVisibleRangecreateOverlaygetOverlayByIdoverrideOverlayremoveOverlay
    • 样式配置
      • 新增candle.priceMark.last.text.borderStylecandle.tooltip.iconsindicator.lastValueMark.text.borderStyleindicator.tooltip.iconscrosshair.horizontal.text.borderStylecrosshair.vertical.text.borderStyle
  • 👉 变更
    • API
      • 图表方法extension.addTechnicalIndicatorTemplate变更为registerIndicator
      • 图表方法extension.addShapeTemplate变更为registerOverlay
      • 实例方法setStyleOptions变更为setStyles
      • 实例方法getStyleOptions变更为getStyles
      • 实例方法setPaneOptions(options)options新增属性gap
      • 实例方法setOffsetRightSpace变更为setOffsetRightDistance
      • 实例方法createTechnicalIndicator变更为createIndicator
      • 实例方法overlayTechnicalIndicator变更为overlayIndicator
      • 实例方法getTechnicalIndicatorByPaneId变更为getIndicatorByPaneId
      • 实例方法removeTechnicalIndicator变更为removeIndicator
    • 样式配置
      • 所有line.style选项变更为soliddashed
      • 所有dashValue变更为dashedValue
      • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
      • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
      • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
    • 自定义扩展
      • 技术指标属性calcParams,变更为支持任意类型。
      • 技术指标属性plots变更为figures
      • 技术指标属性regeneratePlots变更为regeneratefigures
      • 技术指标属性calcTechnicalIndicator变更为calc
      • 技术指标属性render变更为draw
  • 🗑 废弃
    • API
      • 删除实例方法getWidthgetHeight,改用getSize
      • 删除实例方法createShapecreateAnnotationcreateTag,改用createOverlay
      • 删除实例方法removeShaperemoveAnnotationremoveTag,改用removeOverlay
      • 删除实例方法setShapeOptions,改用overrideOverlay
      • 删除实例方法createHtmlremoveHtmladdTechnicalIndicatorTemplategetTechnicalIndicatorTemplateaddShapeTemplate
    • 样式配置
      • 删除shapeannotationtag,改用overlay
      • 删除candle.margintechnicalIndicator.margin
    • 自定义扩展
      • 技术指标模版不再保存相关属性。
      • 技术指标删除属性shouldCheckParamCount
      • 删除Shape,改用Overlay

8.x

Github上查看 8.x 的 Change Log。

7.x

Github上查看 7.x 的 Change Log。

6.x

Github上查看 6.x 的 Change Log。

5.x

Github上查看 5.x 的版本记录。

4.x

Github上查看 4.x 的版本记录。

',47),a=[l];function t(r,n,h,s,u,p){return o(),c("div",null,a)}const b=e(i,[["render",t]]);export{x as __pageData,b as default}; diff --git a/assets/guide_changelog.md.11eaeab5.lean.js b/assets/guide_changelog.md.11eaeab5.lean.js deleted file mode 100644 index 22e37486e..000000000 --- a/assets/guide_changelog.md.11eaeab5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c,V as d}from"./chunks/framework.410404a1.js";const x=JSON.parse('{"title":"📠 更新日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/changelog.md","filePath":"guide/changelog.md","lastUpdated":1689272235000}'),i={name:"guide/changelog.md"},l=d("",47),a=[l];function t(r,n,h,s,u,p){return o(),c("div",null,a)}const b=e(i,[["render",t]]);export{x as __pageData,b as default}; diff --git a/assets/guide_changelog.md.96c85efb.js b/assets/guide_changelog.md.96c85efb.js new file mode 100644 index 000000000..ce6a8209f --- /dev/null +++ b/assets/guide_changelog.md.96c85efb.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as c,R as d}from"./chunks/framework.3ac7bdc3.js";const x=JSON.parse('{"title":"📠 更新日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/changelog.md","filePath":"guide/changelog.md","lastUpdated":1691074246000}'),i={name:"guide/changelog.md"},l=d('

📠 更新日志

9.5.0

2023-06-15

  • 🆕 Overlay新增事件onDoubleClick,新增属性modeSensitivity
  • 🆕 样式配置candle.tooltip.custom支持字符串模版。
  • 🐞 优化移动端阻尼滚动掉帧问题。
  • 🐞 修复窗口id命名拼写错误。
  • 💄 优化分割线事件响应灵敏度。
  • 💄 优化typescript下,OverlayFigure中的attrs类型声明。

9.4.0

2023-05-25

  • 🆕 实例api createOverlay 支持数组。
  • 🆕 overlay新增属性paneIddefaultZLevelzLevel
  • 🆕 xAxis新增方法convertTimestampFromPixelconvertTimestampToPixel
  • 💄 优化蜡烛柱显示。

9.3.0

2023-05-13

  • 🆕 新增图表API utils.calcTextWidth
  • 🆕 图表API createIndicator(value, isStack, options)setPaneOptions(options)新增options.axisOptions
  • 🆕 指标图形配置支持自定义。
  • 💄 优化bar宽度比例。
  • 💄 优化内部获取屏幕像素比。
  • 💄 优化内部id生成。

9.2.2

2023-05-04

  • 🐞 修复基础图形line事件检查可能导致错误问题。
  • 💄 优化类型检查。

9.2.1

2023-04-27

  • 💄 优化默认样式,#EF5350变更为#F92855#26A69A变更为#2DC08E
  • 💄 优化typescript声明。

9.2.0

2023-04-24

  • 🆕 实例API新增getOffsetRightDistanceexecuteAction
  • 🆕 实例APIapplyNewDataapplyMoreDataupdateData新增成功回调入参callback
  • 🆕 支持千分符显示。
  • 🆕 样式配置新增candle.bar.upBorderColorcandle.bar.downBorderColorcandle.bar.noChangeBorderColorcandle.bar.upWickColorcandle.bar.downWickColorcandle.bar.noChangeWickColorcandle.tooltip.rect.positioncandle.tooltip.rect.offsetBottom
  • 🆕 所有visibleRange新增realFromrealTo
  • 💄 优化API,klinecharts.utils.isValidklinecharts.utils.formatBigNumber
  • 💄 优化开发环境下,日志输出。

9.1.3

2023-04-15

  • 🐞 修复图表api applyNewData 入参是空数组时不刷新问题。
  • 🐞 修复无数据时y轴上十字光标文字不显示问题。
  • 💄 优化面积图显示。
  • 💄 优化覆盖物事件回调参数,新增figureKeyfigureIndex
  • 💄 优化typescript覆盖物样式类型,和基础类型DeepPartial, DeepRequired

9.1.2

2023-04-10

  • 🐞 修复内置基础图形line触发事件不准确问题。
  • 🐞 修复内置覆盖物simpleAnnotationsimpleTag绘制完成后第一次触发事件问题。
  • 💄 优化覆盖物图形事件忽略,支持事件选择。

9.1.1

2023-03-14

  • 🐞 修复内置基础图形arc不生效问题。
  • 💄 优化渲染更新。

9.1.0

2023-02-23

  • 🆕 图表实例方法subscribeActionunsubscribeAction类型新增onCandleBarClick
  • 🆕 覆盖物支持双击强制结束绘制。
  • 💄 优化事件处理。

9.0.1

2023-02-17

  • 🐞 修复typescript引入问题。

9.0.0

2023-02-16

  • 🛠 Typescript重构。
  • 🆕 新特性
    • 新增Y轴方向缩放,滚动。
    • API
      • 新增基图表方法registerFiguregetSupportFiguresgetFigureClassrigisterOverlaygetSupportOverlaysregisterLocalegetSupportLocalesregisterStyles
      • 新增实例方法,getSizesetLocalegetLocalsetCustomApigetVisibleRangecreateOverlaygetOverlayByIdoverrideOverlayremoveOverlay
    • 样式配置
      • 新增candle.priceMark.last.text.borderStylecandle.tooltip.iconsindicator.lastValueMark.text.borderStyleindicator.tooltip.iconscrosshair.horizontal.text.borderStylecrosshair.vertical.text.borderStyle
  • 👉 变更
    • API
      • 图表方法extension.addTechnicalIndicatorTemplate变更为registerIndicator
      • 图表方法extension.addShapeTemplate变更为registerOverlay
      • 实例方法setStyleOptions变更为setStyles
      • 实例方法getStyleOptions变更为getStyles
      • 实例方法setPaneOptions(options)options新增属性gap
      • 实例方法setOffsetRightSpace变更为setOffsetRightDistance
      • 实例方法createTechnicalIndicator变更为createIndicator
      • 实例方法overlayTechnicalIndicator变更为overlayIndicator
      • 实例方法getTechnicalIndicatorByPaneId变更为getIndicatorByPaneId
      • 实例方法removeTechnicalIndicator变更为removeIndicator
    • 样式配置
      • 所有line.style选项变更为soliddashed
      • 所有dashValue变更为dashedValue
      • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
      • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
      • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
    • 自定义扩展
      • 技术指标属性calcParams,变更为支持任意类型。
      • 技术指标属性plots变更为figures
      • 技术指标属性regeneratePlots变更为regeneratefigures
      • 技术指标属性calcTechnicalIndicator变更为calc
      • 技术指标属性render变更为draw
  • 🗑 废弃
    • API
      • 删除实例方法getWidthgetHeight,改用getSize
      • 删除实例方法createShapecreateAnnotationcreateTag,改用createOverlay
      • 删除实例方法removeShaperemoveAnnotationremoveTag,改用removeOverlay
      • 删除实例方法setShapeOptions,改用overrideOverlay
      • 删除实例方法createHtmlremoveHtmladdTechnicalIndicatorTemplategetTechnicalIndicatorTemplateaddShapeTemplate
    • 样式配置
      • 删除shapeannotationtag,改用overlay
      • 删除candle.margintechnicalIndicator.margin
    • 自定义扩展
      • 技术指标模版不再保存相关属性。
      • 技术指标删除属性shouldCheckParamCount
      • 删除Shape,改用Overlay

8.x

Github上查看 8.x 的 Change Log。

7.x

Github上查看 7.x 的 Change Log。

6.x

Github上查看 6.x 的 Change Log。

5.x

Github上查看 5.x 的版本记录。

4.x

Github上查看 4.x 的版本记录。

',47),a=[l];function t(r,n,s,h,u,p){return o(),c("div",null,a)}const b=e(i,[["render",t]]);export{x as __pageData,b as default}; diff --git a/assets/guide_changelog.md.96c85efb.lean.js b/assets/guide_changelog.md.96c85efb.lean.js new file mode 100644 index 000000000..ce6a8209f --- /dev/null +++ b/assets/guide_changelog.md.96c85efb.lean.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as c,R as d}from"./chunks/framework.3ac7bdc3.js";const x=JSON.parse('{"title":"📠 更新日志","description":"","frontmatter":{},"headers":[],"relativePath":"guide/changelog.md","filePath":"guide/changelog.md","lastUpdated":1691074246000}'),i={name:"guide/changelog.md"},l=d('

📠 更新日志

9.5.0

2023-06-15

  • 🆕 Overlay新增事件onDoubleClick,新增属性modeSensitivity
  • 🆕 样式配置candle.tooltip.custom支持字符串模版。
  • 🐞 优化移动端阻尼滚动掉帧问题。
  • 🐞 修复窗口id命名拼写错误。
  • 💄 优化分割线事件响应灵敏度。
  • 💄 优化typescript下,OverlayFigure中的attrs类型声明。

9.4.0

2023-05-25

  • 🆕 实例api createOverlay 支持数组。
  • 🆕 overlay新增属性paneIddefaultZLevelzLevel
  • 🆕 xAxis新增方法convertTimestampFromPixelconvertTimestampToPixel
  • 💄 优化蜡烛柱显示。

9.3.0

2023-05-13

  • 🆕 新增图表API utils.calcTextWidth
  • 🆕 图表API createIndicator(value, isStack, options)setPaneOptions(options)新增options.axisOptions
  • 🆕 指标图形配置支持自定义。
  • 💄 优化bar宽度比例。
  • 💄 优化内部获取屏幕像素比。
  • 💄 优化内部id生成。

9.2.2

2023-05-04

  • 🐞 修复基础图形line事件检查可能导致错误问题。
  • 💄 优化类型检查。

9.2.1

2023-04-27

  • 💄 优化默认样式,#EF5350变更为#F92855#26A69A变更为#2DC08E
  • 💄 优化typescript声明。

9.2.0

2023-04-24

  • 🆕 实例API新增getOffsetRightDistanceexecuteAction
  • 🆕 实例APIapplyNewDataapplyMoreDataupdateData新增成功回调入参callback
  • 🆕 支持千分符显示。
  • 🆕 样式配置新增candle.bar.upBorderColorcandle.bar.downBorderColorcandle.bar.noChangeBorderColorcandle.bar.upWickColorcandle.bar.downWickColorcandle.bar.noChangeWickColorcandle.tooltip.rect.positioncandle.tooltip.rect.offsetBottom
  • 🆕 所有visibleRange新增realFromrealTo
  • 💄 优化API,klinecharts.utils.isValidklinecharts.utils.formatBigNumber
  • 💄 优化开发环境下,日志输出。

9.1.3

2023-04-15

  • 🐞 修复图表api applyNewData 入参是空数组时不刷新问题。
  • 🐞 修复无数据时y轴上十字光标文字不显示问题。
  • 💄 优化面积图显示。
  • 💄 优化覆盖物事件回调参数,新增figureKeyfigureIndex
  • 💄 优化typescript覆盖物样式类型,和基础类型DeepPartial, DeepRequired

9.1.2

2023-04-10

  • 🐞 修复内置基础图形line触发事件不准确问题。
  • 🐞 修复内置覆盖物simpleAnnotationsimpleTag绘制完成后第一次触发事件问题。
  • 💄 优化覆盖物图形事件忽略,支持事件选择。

9.1.1

2023-03-14

  • 🐞 修复内置基础图形arc不生效问题。
  • 💄 优化渲染更新。

9.1.0

2023-02-23

  • 🆕 图表实例方法subscribeActionunsubscribeAction类型新增onCandleBarClick
  • 🆕 覆盖物支持双击强制结束绘制。
  • 💄 优化事件处理。

9.0.1

2023-02-17

  • 🐞 修复typescript引入问题。

9.0.0

2023-02-16

  • 🛠 Typescript重构。
  • 🆕 新特性
    • 新增Y轴方向缩放,滚动。
    • API
      • 新增基图表方法registerFiguregetSupportFiguresgetFigureClassrigisterOverlaygetSupportOverlaysregisterLocalegetSupportLocalesregisterStyles
      • 新增实例方法,getSizesetLocalegetLocalsetCustomApigetVisibleRangecreateOverlaygetOverlayByIdoverrideOverlayremoveOverlay
    • 样式配置
      • 新增candle.priceMark.last.text.borderStylecandle.tooltip.iconsindicator.lastValueMark.text.borderStyleindicator.tooltip.iconscrosshair.horizontal.text.borderStylecrosshair.vertical.text.borderStyle
  • 👉 变更
    • API
      • 图表方法extension.addTechnicalIndicatorTemplate变更为registerIndicator
      • 图表方法extension.addShapeTemplate变更为registerOverlay
      • 实例方法setStyleOptions变更为setStyles
      • 实例方法getStyleOptions变更为getStyles
      • 实例方法setPaneOptions(options)options新增属性gap
      • 实例方法setOffsetRightSpace变更为setOffsetRightDistance
      • 实例方法createTechnicalIndicator变更为createIndicator
      • 实例方法overlayTechnicalIndicator变更为overlayIndicator
      • 实例方法getTechnicalIndicatorByPaneId变更为getIndicatorByPaneId
      • 实例方法removeTechnicalIndicator变更为removeIndicator
    • 样式配置
      • 所有line.style选项变更为soliddashed
      • 所有dashValue变更为dashedValue
      • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
      • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
      • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
    • 自定义扩展
      • 技术指标属性calcParams,变更为支持任意类型。
      • 技术指标属性plots变更为figures
      • 技术指标属性regeneratePlots变更为regeneratefigures
      • 技术指标属性calcTechnicalIndicator变更为calc
      • 技术指标属性render变更为draw
  • 🗑 废弃
    • API
      • 删除实例方法getWidthgetHeight,改用getSize
      • 删除实例方法createShapecreateAnnotationcreateTag,改用createOverlay
      • 删除实例方法removeShaperemoveAnnotationremoveTag,改用removeOverlay
      • 删除实例方法setShapeOptions,改用overrideOverlay
      • 删除实例方法createHtmlremoveHtmladdTechnicalIndicatorTemplategetTechnicalIndicatorTemplateaddShapeTemplate
    • 样式配置
      • 删除shapeannotationtag,改用overlay
      • 删除candle.margintechnicalIndicator.margin
    • 自定义扩展
      • 技术指标模版不再保存相关属性。
      • 技术指标删除属性shouldCheckParamCount
      • 删除Shape,改用Overlay

8.x

Github上查看 8.x 的 Change Log。

7.x

Github上查看 7.x 的 Change Log。

6.x

Github上查看 6.x 的 Change Log。

5.x

Github上查看 5.x 的版本记录。

4.x

Github上查看 4.x 的版本记录。

',47),a=[l];function t(r,n,s,h,u,p){return o(),c("div",null,a)}const b=e(i,[["render",t]]);export{x as __pageData,b as default}; diff --git a/assets/guide_chart-api.md.e1df3378.js b/assets/guide_chart-api.md.b57a9e6d.js similarity index 99% rename from assets/guide_chart-api.md.e1df3378.js rename to assets/guide_chart-api.md.b57a9e6d.js index 7359ea8c8..39cab73b9 100644 --- a/assets/guide_chart-api.md.e1df3378.js +++ b/assets/guide_chart-api.md.b57a9e6d.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"图表API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/chart-api.md","filePath":"guide/chart-api.md","lastUpdated":1689272235000}'),p={name:"guide/chart-api.md"},o=l(`

图表API

init(ds, options)

typescript
(
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"图表API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/chart-api.md","filePath":"guide/chart-api.md","lastUpdated":1691074246000}'),p={name:"guide/chart-api.md"},o=l(`

图表API

init(ds, options)

typescript
(
   ds: string | HTMLElement,
   options?: {
     locale?: string
diff --git a/assets/guide_chart-api.md.b57a9e6d.lean.js b/assets/guide_chart-api.md.b57a9e6d.lean.js
new file mode 100644
index 000000000..39cab73b9
--- /dev/null
+++ b/assets/guide_chart-api.md.b57a9e6d.lean.js
@@ -0,0 +1,777 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"图表API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/chart-api.md","filePath":"guide/chart-api.md","lastUpdated":1691074246000}'),p={name:"guide/chart-api.md"},o=l(`

图表API

init(ds, options)

typescript
(
+  ds: string | HTMLElement,
+  options?: {
+    locale?: string
+    styles?: string | object
+    timezone?: string
+    customApi?: {
+      formatDate?: (dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string, type: number) => string
+      formatBigNumber?: (value: string | number) => string
+    }
+    thousandsSeparator?: string
+  }
+) => Chart
(
+  ds: string | HTMLElement,
+  options?: {
+    locale?: string
+    styles?: string | object
+    timezone?: string
+    customApi?: {
+      formatDate?: (dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string, type: number) => string
+      formatBigNumber?: (value: string | number) => string
+    }
+    thousandsSeparator?: string
+  }
+) => Chart

初始化一个图表,返回图表实例。

  • ds 容器,可以是dom元素或者元素id。
  • options 可选配置项。
    • locale 语言,内置支持zh-CNen-US
    • timezone 时区名,如'Asia/Shanghai',如果不设置会自动获取本机时区,时区对应名字列表请参阅时区列表
    • styles 可以是通过klinecharts.registerStyles注册的样式名,也可以是object,样式列表,详情参阅样式,支持增量。
    • customApi 自定义一些api。
      • formatDate 格式化日期。
      • formatBigNumber 格式化大的数字,如1000转换成1k,1000000转换为1M等。
    • thousandsSeparator 千分符

dispose(dcs)

typescript
(dcs: HTMLElement | Chart | string) => void
(dcs: HTMLElement | Chart | string) => void

销毁一个图表,一旦销毁,图表将不再可用。

  • dcs 可以是dom元素、元素id或者图表实例。

registerLocale(locale, locales)

typescript
(
+  locale: string,
+  locales: {
+    time: string
+    open: string
+    high: string
+    low: string
+    close: string
+    volume: string
+  }
+) => void
(
+  locale: string,
+  locales: {
+    time: string
+    open: string
+    high: string
+    low: string
+    close: string
+    volume: string
+  }
+) => void

添加一个本地化语言。图表内置了zh-CNen-US

  • locale 语言名
  • locales 语言配置

getOverlayClass()

typescript
(name: string) => Nullable<OverlayConstructor>
(name: string) => Nullable<OverlayConstructor>

根据覆盖物名称获取图表内覆盖物的属性。

getSupportedLocales()

typescript
() => string[]
() => string[]

获取图表支持的本地化语言类型。

registerStyles(name, styles)

typescript
(
+  name: string,
+  styles: object
+) => void
(
+  name: string,
+  styles: object
+) => void

添加一个样式配置。

  • name 样式名
  • styles 样式配置,类型参阅样式,支持增量。

registerFigure(figure)

typescript
(
+  figure: {
+    name: string
+    draw: (ctx: CanvasRenderingContext2D, attrs: any, styles: object) => void
+    checkEventOn: (coordinate: Coordinate, attrs: any, styles: object) => boolean
+  }
+) => void
(
+  figure: {
+    name: string
+    draw: (ctx: CanvasRenderingContext2D, attrs: any, styles: object) => void
+    checkEventOn: (coordinate: Coordinate, attrs: any, styles: object) => boolean
+  }
+) => void

添加一个基础图形。

  • figure 基础图形信息,详情参阅基础图形
    • name 名字,唯一标识
    • draw 绘制方法
    • checkEventOn 检查事件是否在图形上

getSupportedFigures()

typescript
() => string[]
() => string[]

获取图表支持的基础图形类型。

getFigureClass(name)

typescript
(name: string) => Figure
(name: string) => Figure

获取图形类

  • name 图形名

registerIndicator(indicator)

typescript
(
+  indicator: {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => object
+      attrs: (
+        coordinate: object
+        bounding: Bounding
+        barSpace: BarSpace
+        xAxis: XAxis
+        yAxis: YAxis
+      ) => object
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => object
+      attrs: (
+        coordinate: object
+        bounding: Bounding
+        barSpace: BarSpace
+        xAxis: XAxis
+        yAxis: YAxis
+      ) => object
+    }>
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    }
+    draw?: (params: object) => boolean
+  }
+) => void
(
+  indicator: {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => object
+      attrs: (
+        coordinate: object
+        bounding: Bounding
+        barSpace: BarSpace
+        xAxis: XAxis
+        yAxis: YAxis
+      ) => object
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => object
+      attrs: (
+        coordinate: object
+        bounding: Bounding
+        barSpace: BarSpace
+        xAxis: XAxis
+        yAxis: YAxis
+      ) => object
+    }>
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    }
+    draw?: (params: object) => boolean
+  }
+) => void

添加一个技术指标。

  • indicator 技术指标信息
    • name 指标名,用于创建和操作的唯一标识
    • shortName 简短名字,用于显示
    • precision 精度
    • calcParams 计算参数
    • shouldOhlc 是否需要ohlc辅助图形
    • shouldFormatBigNumber 是否需要格式化大的数字。如1000转换成1k,1000000转换为1M等
    • visible 是否可见
    • extendData 扩展数据
    • series 指标系列,可选项有'normal','price'和'volume'
    • figures 图形配置
    • minValue 指定最小值
    • maxValue 指定最大值
    • styles 样式
    • calc 计算方法
    • regenerateFigures 重新生成图形信息方法
    • createTooltipDataSource 创建自定义提示信息方法
    • draw 自定义绘制方法

getSupportedIndicators()

typescript
() => string[]
() => string[]

获取图表支持的技术指标

registerOverlay(overlay)

typescript
(
+  overlay: {
+    name: string
+    totalStep?: number
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{ timestamp: number, dataIndex?: number, value?: number }>
+    extendData?: any
+    styles?: object
+    createPointFigures?: (params: object) => {
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    } | Array<{
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    }>
+    createXAxisFigures?: (params: object) => {
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    } | Array<{
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    }>
+    createYAxisFigures?: (params: object) => {
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    } | Array<{
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    }>
+    performEventPressedMove?: (params: object) => void
+    performEventMoveForDrawing?: (params: object) => void
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }
+) => void
(
+  overlay: {
+    name: string
+    totalStep?: number
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{ timestamp: number, dataIndex?: number, value?: number }>
+    extendData?: any
+    styles?: object
+    createPointFigures?: (params: object) => {
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    } | Array<{
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    }>
+    createXAxisFigures?: (params: object) => {
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    } | Array<{
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    }>
+    createYAxisFigures?: (params: object) => {
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    } | Array<{
+      key?: string
+      type: string
+      attrs: any | any[]
+      styles?: any
+      ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+    }>
+    performEventPressedMove?: (params: object) => void
+    performEventMoveForDrawing?: (params: object) => void
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }
+) => void

添加一个覆盖物。

  • overlay 覆盖物信息,详情参阅覆盖物
    • name 覆盖物名,用于创建的唯一标识
    • totalStep 总的实现步骤
    • lock 是否锁定不让拖动
    • visible 是否可见
    • zLevel 绘制层级,值越大,越靠前显示
    • needDefaultPointFigure 是否需要默认的点对应的图形
    • needDefaultXAxisFigure 是否需要默认的x轴上的图形
    • needDefaultYAxisFigure 是否需要默认的y轴上的图形
    • mode 模式,可选项有'normal','weak_magnet'和'strong_magnet'
    • modeSensitivity 模式灵敏度,仅 mode 是 weak_magnet 时有效
    • points 点信息
    • extendData 扩展数据
    • styles 样式
    • createPointFigures 创建点对应的图形
    • createXAxisFigures 创建x轴上的图形
    • createYAxisFigures 创建y轴上的图形
    • performEventPressedMove 按住移动事件特殊处理方法
    • performEventMoveForDrawing 移动事件过程中特殊处理方法
    • onDrawStart 开始绘制事件
    • onDrawing 绘制中事件
    • onDrawEnd 绘制结束事件
    • onClick 点击事件
    • onDoubleClick 双击事件
    • onRightClick 右击事件
    • onPressedMoveStart 按住开始移动事件
    • onPressedMoving 按住移动中事件
    • onPressedMoveEnd 按住移动结束事件
    • onMouseEnter 鼠标移入事件
    • onMouseLeave 鼠标移出事件
    • onRemoved 删除事件
    • onSelected 选中事件
    • onDeselected 取消选中事件

getSupportedOverlays()

typescript
() => string[]
() => string[]

获取图表支持的覆盖物

version()

typescript
() => string
() => string

获取图表当前版本号。

utils

辅助方法集合。

utils.clone(target)

typescript
(target: any) => any
(target: any) => any

深度复制。

utils.merge(target, source)

typescript
(target: object, source: object) => void
(target: object, source: object) => void

将一个对象合并到另一个对象。

utils.isString(value)

typescript
(value: any) => boolean
(value: any) => boolean

检查某个值是否是字符串。

utils.isNumber(value)

typescript
(value: any) => boolean
(value: any) => boolean

检查某个值是否是数字。

utils.isValid(value)

typescript
(value: any) => boolean
(value: any) => boolean

检查某个值是否有效。

utils.isObject(value)

typescript
(value: any) => boolean
(value: any) => boolean

检查某个值是否是对象。

utils.isFunction(value)

typescript
(value: any) => boolean
(value: any) => boolean

检查某个值是否是方法。

utils.isBoolean(value)

typescript
(value: any) => boolean
(value: any) => boolean

检查某个值是否是bool值。

utils.formatValue(value, key, defaultValue)

typescript
(data: any, key: string, defaultValue?: any) => any
(data: any, key: string, defaultValue?: any) => any

从某个值取对应的值,支持嵌套,如const o = { a: { b: { c: 1 } } }formatValue(o, 'a.b.c')c的值。

utils.formatPrecision(value)

typescript
(value: string | number, precision?: number) => string
(value: string | number, precision?: number) => string

格式化精度。

utils.formatBigNumber(value)

typescript
(value: string | number) => string
(value: string | number) => string

格式化大的数字,如1000转换成1k,1000000转换为1M等。

utils.formatDate(dateTimeFormat, timestamp, format)

typescript
(dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string) => string
(dateTimeFormat: Intl.DateTimeFormat, timestamp: number, format: string) => string

格式化日期。format格式,如'YYYY-MM-DD HH:mm:ss'。

utils.formatThousands(value, sign)

typescript
(value: string | number, sign: string) => string
(value: string | number, sign: string) => string

格式化日期千分符。

utils.calcTextWidth(text, size, weight, family)

typescript
(text: string, size?: number, weight?: string | number, family?: string) => number
(text: string, size?: number, weight?: string | number, family?: string) => number

计算文字宽度

utils.getLinearSlopeIntercept(coordinate1, coordinate2)

typescript
(
+  coordinate1: {
+    x: number
+    y: number
+  },
+  coordinate2: {
+    x: number
+    y: number
+  }
+) => []
(
+  coordinate1: {
+    x: number
+    y: number
+  },
+  coordinate2: {
+    x: number
+    y: number
+  }
+) => []

根据两个坐标点,获取点组成的线的斜率和常数项,即y = kx + b中的kb

utils.getLinearYFromCoordinates(coordinate1, coordinate2, targetCoordinate)

typescript
(
+  coordinate1: {
+    x: number
+    y: number
+  },
+  coordinate2: {
+    x: number
+    y: number
+  }
+  targetCoordinate: {
+    x: number
+    y: number
+  }
+) => number
(
+  coordinate1: {
+    x: number
+    y: number
+  },
+  coordinate2: {
+    x: number
+    y: number
+  }
+  targetCoordinate: {
+    x: number
+    y: number
+  }
+) => number

获取一个点在另外两个坐标点形成的线上的y轴坐标值。

utils.getLinearYFromSlopeIntercept(kb, targetCoordinate)

typescript
(
+  kb: Array<number>,
+  targetCoordinate: {
+    x: number
+    y: number
+  }
+) => number
(
+  kb: Array<number>,
+  targetCoordinate: {
+    x: number
+    y: number
+  }
+) => number

获取一个点在斜率和常数项形成的线上的y轴坐标值。

utils.checkCoordinateOnArc(coordinate, arc)

typescript
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  arc: {
+    x: number
+    y: number
+    r: number
+    startAngle: number
+    endAngle: number
+  }
+) => boolean
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  arc: {
+    x: number
+    y: number
+    r: number
+    startAngle: number
+    endAngle: number
+  }
+) => boolean

检查某个坐标点是否在圆弧上。

  • coordinate 坐标点信息
  • arc 圆弧参数
    • x 圆心的x轴值
    • y 圆心的y轴值
    • r 半径
    • startAngle 起始角度
    • endAngle 结束角度

utils.checkCoordinateOnCircle(coordinate, circle)

typescript
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  circle: {
+    x: number
+    y: number
+    r: number
+  }
+) => boolean
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  circle: {
+    x: number
+    y: number
+    r: number
+  }
+) => boolean

检查某个坐标点是否在圆上。

  • coordinate 坐标点信息
  • circle 圆参数
    • x 圆心的x轴值
    • y 圆心的y轴值
    • r 半径

utils.checkCoordinateOnLine(coordinate, line)

typescript
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  line: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  }
+) => boolean
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  line: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  }
+) => boolean

检查某个坐标点是否在线上。

utils.checkCoordinateOnPolygon(coordinate, polygon)

typescript
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  polygon: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  }
+) => boolean
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  polygon: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  }
+) => boolean

检查某个坐标点是否在多边形上。

utils.checkCoordinateOnRect(coordinate, rect)

typescript
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  rect: {
+    x: number
+    y: number
+    width: number
+    height: number
+  }
+) => boolean
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  rect: {
+    x: number
+    y: number
+    width: number
+    height: number
+  }
+) => boolean

检查某个坐标点是否在矩形上。

  • coordinate 坐标点信息
  • rect 矩形参数
    • x 起始点x轴值
    • y 起始点y轴值
    • width 宽度
    • height 高度

utils.checkCoordinateOnText(coordinate, text, styles)

typescript
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  text: {
+    x: number
+    y: number
+    text: any
+    align?: 'center' | 'end' | 'left' | 'right' | 'start'
+    baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+  },
+  styles: {
+    color?: string
+    size?: number
+    family?: string
+    weight?: number | string
+  }
+) => boolean
(
+  coordinate: {
+    x: number
+    y: number
+  },
+  text: {
+    x: number
+    y: number
+    text: any
+    align?: 'center' | 'end' | 'left' | 'right' | 'start'
+    baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+  },
+  styles: {
+    color?: string
+    size?: number
+    family?: string
+    weight?: number | string
+  }
+) => boolean

检查某个坐标点是否在文字上。

  • coordinate 坐标点信息
  • text 文字参数
    • x 起始点x轴值
    • y 起始点y轴值
    • text 文字内容
    • align 水平对齐方式
    • baseline 垂直对齐方式
  • styles 样式
    • color 颜色
    • size 尺寸
    • family 字体
    • weight 权重

utils.drawArc(ctx, arc, styles)

typescript
(
+  ctx: CanvasRenderingContext2D,
+  arc: {
+    x: number
+    y: number
+    r: number
+    startAngle: number
+    endAngle: number
+  },
+  styles: {
+    style?: 'solid' | 'dashed'
+    size?: number
+    color?: string
+    dashedValue?: number[]
+  }
+) => void
(
+  ctx: CanvasRenderingContext2D,
+  arc: {
+    x: number
+    y: number
+    r: number
+    startAngle: number
+    endAngle: number
+  },
+  styles: {
+    style?: 'solid' | 'dashed'
+    size?: number
+    color?: string
+    dashedValue?: number[]
+  }
+) => void

绘制圆弧。

  • ctx 画布上下文
  • arc 圆弧参数
    • x 圆心的x轴值
    • y 圆心的y轴值
    • r 半径
    • startAngle 起始角度
    • endAngle 结束角度
  • styles 样式
    • style 弧样式
    • size 粗细
    • color 颜色
    • dashedValue 虚线参数值

utils.drawCircle(ctx, circle, styles)

typescript
(
+  ctx: CanvasRenderingContext2D,
+  circle: {
+    x: number
+    y: number
+    r: number
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string | CanvasGradient
+    borderColor?: string
+    borderSize?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: Array<number>
+  }
+) => void
(
+  ctx: CanvasRenderingContext2D,
+  circle: {
+    x: number
+    y: number
+    r: number
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string | CanvasGradient
+    borderColor?: string
+    borderSize?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: Array<number>
+  }
+) => void

绘制圆。

  • ctx 画布上下文
  • circle 圆参数
    • x 圆心的x轴值
    • y 圆心的y轴值
    • r 半径
  • styles 样式
    • style 样式
    • color 颜色
    • borderColor 边框颜色
    • borderSize 边框粗细
    • borderStyle 边框样式
    • borderDashedValue 边框虚线参数值

utils.drawLine(ctx, line, styles)

typescript
(
+  ctx: CanvasRenderingContext2D,
+  line: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    style?: 'solid' | 'dashed'
+    size?: number
+    color?: string
+    dashedValue?: number[]
+  }
+) => void
(
+  ctx: CanvasRenderingContext2D,
+  line: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    style?: 'solid' | 'dashed'
+    size?: number
+    color?: string
+    dashedValue?: number[]
+  }
+) => void

绘制线。

  • ctx 画布上下文
  • line 线参数
  • styles 样式
    • style 线样式
    • size 粗细
    • color 颜色
    • dashedValue 虚线参数值

utils.drawPolygon(ctx, polygon, styles)

typescript
(
+  ctx: CanvasRenderingContext2D,
+  polygon: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string | CanvasGradient
+    borderColor?: string
+    borderSize?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: Array<number>
+  }
+) => void
(
+  ctx: CanvasRenderingContext2D,
+  polygon: {
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string | CanvasGradient
+    borderColor?: string
+    borderSize?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: Array<number>
+  }
+) => void

绘制多边形。

  • ctx 画布上下文
  • polygon 多边形参数
  • styles 样式
    • style 样式
    • color 颜色
    • borderColor 边框颜色
    • borderSize 边框粗细
    • borderStyle 边框样式
    • borderDashedValue 边框虚线参数值

utils.drawRect(ctx, rect, styles)

typescript
(
+  ctx: CanvasRenderingContext2D,
+  rect: {
+    x: number
+    y: number
+    width: number
+    height: number
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string | CanvasGradient
+    borderColor?: string
+    borderSize?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: Array<number>
+    borderRadius?: number
+  }
+) => void
(
+  ctx: CanvasRenderingContext2D,
+  rect: {
+    x: number
+    y: number
+    width: number
+    height: number
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string | CanvasGradient
+    borderColor?: string
+    borderSize?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: Array<number>
+    borderRadius?: number
+  }
+) => void

绘制矩形。

  • ctx 画布上下文
  • rect 矩形参数
    • x 起始点x轴值
    • y 起始点y轴值
    • width 宽度
    • height 高度
  • styles 样式
    • style 样式
    • color 颜色
    • borderColor 边框颜色
    • borderSize 边框粗细
    • borderStyle 边框样式
    • borderDashedValue 边框虚线参数值
    • borderRadius 边框圆角值

utils.drawText(ctx, text, styles)

typescript
(
+  ctx: CanvasRenderingContext2D,
+  text: {
+    x: number
+    y: number
+    text: any
+    align?: 'center' | 'end' | 'left' | 'right' | 'start'
+    baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+  },
+  styles: {
+    color?: string
+    size?: number
+    family?: string
+    weight?: number | string
+  }
+) => void
(
+  ctx: CanvasRenderingContext2D,
+  text: {
+    x: number
+    y: number
+    text: any
+    align?: 'center' | 'end' | 'left' | 'right' | 'start'
+    baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+  },
+  styles: {
+    color?: string
+    size?: number
+    family?: string
+    weight?: number | string
+  }
+) => void

绘制文字。

  • ctx 画布上下文
  • text 文字参数
    • x 起始点x轴值
    • y 起始点y轴值
    • text 文字内容
    • align 水平对齐方式
    • baseline 垂直对齐方式
  • styles 样式
    • color 颜色
    • size 尺寸
    • family 字体
    • weight 权重

utils.drawRectText(ctx, rectText, styles)

typescript
(
+  ctx: CanvasRenderingContext2D,
+  rectText: {
+    x: number
+    y: number
+    text: any
+    align?: 'center' | 'end' | 'left' | 'right' | 'start'
+    baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string
+    size?: number
+    family?: string
+    weight?: number | string
+    paddingLeft?: number
+    paddingTop?: number
+    paddingRight?: number
+    paddingBottom?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: number[]
+    borderSize?: number
+    borderColor?: string
+    borderRadius?: number
+    backgroundColor?: string
+  }
+) => void
(
+  ctx: CanvasRenderingContext2D,
+  rectText: {
+    x: number
+    y: number
+    text: any
+    align?: 'center' | 'end' | 'left' | 'right' | 'start'
+    baseline?: 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
+  },
+  styles: {
+    style?: 'stroke' | 'fill' | 'stroke_fill'
+    color?: string
+    size?: number
+    family?: string
+    weight?: number | string
+    paddingLeft?: number
+    paddingTop?: number
+    paddingRight?: number
+    paddingBottom?: number
+    borderStyle?: 'solid' | 'dashed'
+    borderDashedValue?: number[]
+    borderSize?: number
+    borderColor?: string
+    borderRadius?: number
+    backgroundColor?: string
+  }
+) => void

绘制带背景的文字。

  • ctx 画布上下文
  • rectText 文字参数
    • x 起始点x轴值
    • y 起始点y轴值
    • text 文字内容
    • align 水平对齐方式
    • baseline 垂直对齐方式
  • styles 样式
    • style 样式
    • color 颜色
    • size 尺寸
    • family 字体
    • weight 权重
    • paddingLeft 左内边距,
    • paddingTop 上内边距,
    • paddingRight 右内边距,
    • paddingBottom 下内边距,
    • borderColor 边框颜色
    • borderSize 边框粗细
    • borderStyle 边框样式
    • borderRadius 边框圆角尺寸
    • borderDashedValue 边框虚线参数值
    • backgroundColor 背景色
`,154),e=[o];function t(c,r,y,i,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default}; diff --git a/assets/guide_chart-api.md.e1df3378.lean.js b/assets/guide_chart-api.md.e1df3378.lean.js deleted file mode 100644 index 42fd60243..000000000 --- a/assets/guide_chart-api.md.e1df3378.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"图表API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/chart-api.md","filePath":"guide/chart-api.md","lastUpdated":1689272235000}'),p={name:"guide/chart-api.md"},o=l("",154),e=[o];function t(c,r,y,i,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default}; diff --git a/assets/guide_datasource.md.830e9fd0.lean.js b/assets/guide_datasource.md.830e9fd0.lean.js deleted file mode 100644 index 8b20a8762..000000000 --- a/assets/guide_datasource.md.830e9fd0.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const m=JSON.parse('{"title":"📚 数据","description":"","frontmatter":{},"headers":[],"relativePath":"guide/datasource.md","filePath":"guide/datasource.md","lastUpdated":1689272235000}'),p={name:"guide/datasource.md"},o=l("",3),e=[o];function t(c,r,y,i,F,D){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{m as __pageData,u as default}; diff --git a/assets/guide_datasource.md.830e9fd0.js b/assets/guide_datasource.md.831ea0ee.js similarity index 96% rename from assets/guide_datasource.md.830e9fd0.js rename to assets/guide_datasource.md.831ea0ee.js index f43032a77..f8bddcedd 100644 --- a/assets/guide_datasource.md.830e9fd0.js +++ b/assets/guide_datasource.md.831ea0ee.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const m=JSON.parse('{"title":"📚 数据","description":"","frontmatter":{},"headers":[],"relativePath":"guide/datasource.md","filePath":"guide/datasource.md","lastUpdated":1689272235000}'),p={name:"guide/datasource.md"},o=l(`

📚 数据

图表所需要的数据必须是固定格式。通过图表实例 API applyNewData(dataList, more)applyMoreData(dataList, more)updateData(data)来和图表进行数据交互。

typescript
{
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const m=JSON.parse('{"title":"📚 数据","description":"","frontmatter":{},"headers":[],"relativePath":"guide/datasource.md","filePath":"guide/datasource.md","lastUpdated":1691074246000}'),p={name:"guide/datasource.md"},o=l(`

📚 数据

图表所需要的数据必须是固定格式。通过图表实例 API applyNewData(dataList, more)applyMoreData(dataList, more)updateData(data)来和图表进行数据交互。

typescript
{
   // 时间戳,毫秒级别,必要字段
   timestamp: number
   // 开盘价,必要字段
diff --git a/assets/guide_datasource.md.831ea0ee.lean.js b/assets/guide_datasource.md.831ea0ee.lean.js
new file mode 100644
index 000000000..f8bddcedd
--- /dev/null
+++ b/assets/guide_datasource.md.831ea0ee.lean.js
@@ -0,0 +1,33 @@
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const m=JSON.parse('{"title":"📚 数据","description":"","frontmatter":{},"headers":[],"relativePath":"guide/datasource.md","filePath":"guide/datasource.md","lastUpdated":1691074246000}'),p={name:"guide/datasource.md"},o=l(`

📚 数据

图表所需要的数据必须是固定格式。通过图表实例 API applyNewData(dataList, more)applyMoreData(dataList, more)updateData(data)来和图表进行数据交互。

typescript
{
+  // 时间戳,毫秒级别,必要字段
+  timestamp: number
+  // 开盘价,必要字段
+  open: number
+  // 收盘价,必要字段
+  close: number
+  // 最高价,必要字段
+  high: number
+  // 最低价,必要字段
+  low: number
+  // 成交量,非必须字段
+  volume: number
+  // 成交额,非必须字段,如果需要展示技术指标'EMV'和'AVP',则需要为该字段填充数据。
+  turnover: number
+  
+}
{
+  // 时间戳,毫秒级别,必要字段
+  timestamp: number
+  // 开盘价,必要字段
+  open: number
+  // 收盘价,必要字段
+  close: number
+  // 最高价,必要字段
+  high: number
+  // 最低价,必要字段
+  low: number
+  // 成交量,非必须字段
+  volume: number
+  // 成交额,非必须字段,如果需要展示技术指标'EMV'和'AVP',则需要为该字段填充数据。
+  turnover: number
+  
+}
`,3),e=[o];function t(c,r,y,i,F,D){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{m as __pageData,u as default}; diff --git a/assets/guide_environment.md.23fd3561.js b/assets/guide_environment.md.1b5acfcb.js similarity index 93% rename from assets/guide_environment.md.23fd3561.js rename to assets/guide_environment.md.1b5acfcb.js index 537a6de5b..1ece79f67 100644 --- a/assets/guide_environment.md.23fd3561.js +++ b/assets/guide_environment.md.1b5acfcb.js @@ -1,7 +1,7 @@ -import{_ as s,o as a,c as n,V as o}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"🏝️ 环境要求","description":"","frontmatter":{},"headers":[],"relativePath":"guide/environment.md","filePath":"guide/environment.md","lastUpdated":1689272235000}'),l={name:"guide/environment.md"},e=o(`

🏝️ 环境要求

浏览器支持

图表基于 html5 canvas 构建,需要运行在支持 canvas 的浏览器上,如果需要运行在移动端,请用 webview 加载。

兼容处理

core.js

图表内部集合使用Map,用于兼容不支持的老版浏览器。

javascript
import 'core.js';
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"🏝️ 环境要求","description":"","frontmatter":{},"headers":[],"relativePath":"guide/environment.md","filePath":"guide/environment.md","lastUpdated":1691074246000}'),o={name:"guide/environment.md"},p=l(`

🏝️ 环境要求

浏览器支持

图表基于 html5 canvas 构建,需要运行在支持 canvas 的浏览器上,如果需要运行在移动端,请用 webview 加载。

兼容处理

core.js

图表内部集合使用Map,用于兼容不支持的老版浏览器。

javascript
import 'core.js';
 import { init } from 'klincharts';
import 'core.js';
 import { init } from 'klincharts';

Intl.js

图表依赖Intl,某些浏览器无此 API。

javascript
import 'intl';
 import 'intl/local-data/jsonp/en';
 import { init } from 'klincharts';
import 'intl';
 import 'intl/local-data/jsonp/en';
-import { init } from 'klincharts';
`,10),t=[e];function p(r,c,i,y,D,h){return a(),n("div",null,t)}const m=s(l,[["render",p]]);export{F as __pageData,m as default}; +import { init } from 'klincharts';
`,10),t=[p];function e(r,c,i,y,D,h){return a(),n("div",null,t)}const m=s(o,[["render",e]]);export{F as __pageData,m as default}; diff --git a/assets/guide_environment.md.1b5acfcb.lean.js b/assets/guide_environment.md.1b5acfcb.lean.js new file mode 100644 index 000000000..1ece79f67 --- /dev/null +++ b/assets/guide_environment.md.1b5acfcb.lean.js @@ -0,0 +1,7 @@ +import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"🏝️ 环境要求","description":"","frontmatter":{},"headers":[],"relativePath":"guide/environment.md","filePath":"guide/environment.md","lastUpdated":1691074246000}'),o={name:"guide/environment.md"},p=l(`

🏝️ 环境要求

浏览器支持

图表基于 html5 canvas 构建,需要运行在支持 canvas 的浏览器上,如果需要运行在移动端,请用 webview 加载。

兼容处理

core.js

图表内部集合使用Map,用于兼容不支持的老版浏览器。

javascript
import 'core.js';
+import { init } from 'klincharts';
import 'core.js';
+import { init } from 'klincharts';

Intl.js

图表依赖Intl,某些浏览器无此 API。

javascript
import 'intl';
+import 'intl/local-data/jsonp/en';
+import { init } from 'klincharts';
import 'intl';
+import 'intl/local-data/jsonp/en';
+import { init } from 'klincharts';
`,10),t=[p];function e(r,c,i,y,D,h){return a(),n("div",null,t)}const m=s(o,[["render",e]]);export{F as __pageData,m as default}; diff --git a/assets/guide_environment.md.23fd3561.lean.js b/assets/guide_environment.md.23fd3561.lean.js deleted file mode 100644 index 16425c8ed..000000000 --- a/assets/guide_environment.md.23fd3561.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as o}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"🏝️ 环境要求","description":"","frontmatter":{},"headers":[],"relativePath":"guide/environment.md","filePath":"guide/environment.md","lastUpdated":1689272235000}'),l={name:"guide/environment.md"},e=o("",10),t=[e];function p(r,c,i,y,D,h){return a(),n("div",null,t)}const m=s(l,[["render",p]]);export{F as __pageData,m as default}; diff --git a/assets/guide_faq.md.e7d81dbd.js b/assets/guide_faq.md.797c3011.js similarity index 96% rename from assets/guide_faq.md.e7d81dbd.js rename to assets/guide_faq.md.797c3011.js index 02ce39d97..734e49153 100644 --- a/assets/guide_faq.md.e7d81dbd.js +++ b/assets/guide_faq.md.797c3011.js @@ -1,4 +1,4 @@ -import{_ as a,o as s,c as e,V as n}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"🙋 常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md","lastUpdated":1689272235000}'),o={name:"guide/faq.md"},l=n(`

🙋 常见问题

初始化图表后,只能看到一条线,是怎么回事?

图表总是会填充容器,检查一下容器是否有高度。

蜡烛柱显示趋近于一条线,看不到波动,怎么办?

图表默认价格精度为两位小数,调用setPriceVolumePrecision(pricePrecision, volumePrecision)设置下精度。

分时图怎么创建?

通过样式设置。

javascript
chart.setStyles({
+import{_ as a,v as s,b as e,R as n}from"./chunks/framework.3ac7bdc3.js";const u=JSON.parse('{"title":"🙋 常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md","lastUpdated":1691074246000}'),o={name:"guide/faq.md"},l=n(`

🙋 常见问题

初始化图表后,只能看到一条线,是怎么回事?

图表总是会填充容器,检查一下容器是否有高度。

蜡烛柱显示趋近于一条线,看不到波动,怎么办?

图表默认价格精度为两位小数,调用setPriceVolumePrecision(pricePrecision, volumePrecision)设置下精度。

分时图怎么创建?

通过样式设置。

javascript
chart.setStyles({
   candle: {
     type: 'area',
   },
diff --git a/assets/guide_faq.md.797c3011.lean.js b/assets/guide_faq.md.797c3011.lean.js
new file mode 100644
index 000000000..734e49153
--- /dev/null
+++ b/assets/guide_faq.md.797c3011.lean.js
@@ -0,0 +1,9 @@
+import{_ as a,v as s,b as e,R as n}from"./chunks/framework.3ac7bdc3.js";const u=JSON.parse('{"title":"🙋 常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md","lastUpdated":1691074246000}'),o={name:"guide/faq.md"},l=n(`

🙋 常见问题

初始化图表后,只能看到一条线,是怎么回事?

图表总是会填充容器,检查一下容器是否有高度。

蜡烛柱显示趋近于一条线,看不到波动,怎么办?

图表默认价格精度为两位小数,调用setPriceVolumePrecision(pricePrecision, volumePrecision)设置下精度。

分时图怎么创建?

通过样式设置。

javascript
chart.setStyles({
+  candle: {
+    type: 'area',
+  },
+});
chart.setStyles({
+  candle: {
+    type: 'area',
+  },
+});

内置的技术指标,计算出来的数据不是想要的,怎么办?

可以通过图表方法createIndicator或者overrideIndicator重写calc即可。

想创建一个内置技术指标之外的指标,怎么办?

图表支持自定义技术指标,详情参阅技术指标

想标记一下买卖点,该怎么做?

可以使用覆盖物,内置的覆盖物有一个simpleAnnotation,用图表api创建即可createOverlay({ name: 'simpleAnnotation', ... }, paneId)

`,14),p=[l];function t(c,r,i,d,h,y){return s(),e("div",null,p)}const F=a(o,[["render",t]]);export{u as __pageData,F as default}; diff --git a/assets/guide_faq.md.e7d81dbd.lean.js b/assets/guide_faq.md.e7d81dbd.lean.js deleted file mode 100644 index 316a8ff99..000000000 --- a/assets/guide_faq.md.e7d81dbd.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as s,c as e,V as n}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"🙋 常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md","lastUpdated":1689272235000}'),o={name:"guide/faq.md"},l=n("",14),p=[l];function t(c,r,i,d,h,y){return s(),e("div",null,p)}const F=a(o,[["render",t]]);export{u as __pageData,F as default}; diff --git a/assets/guide_feedback.md.40ddc497.js b/assets/guide_feedback.md.40ddc497.js deleted file mode 100644 index 086e5868a..000000000 --- a/assets/guide_feedback.md.40ddc497.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,a}from"./chunks/qq_group_qr_code.5c7ad67d.js";import{_ as t,o as r,c as i,V as s}from"./chunks/framework.410404a1.js";const f=JSON.parse('{"title":"💬 反馈和共建","description":"","frontmatter":{},"headers":[],"relativePath":"guide/feedback.md","filePath":"guide/feedback.md","lastUpdated":1689272235000}'),o={name:"guide/feedback.md"},h=s('

💬 反馈和共建

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

微信讨论群

扫一扫,添加开发者,备注『 KLineChart 』,加入群聊。

QQ讨论群

',11),l=[h];function d(n,c,u,_,p,m){return r(),i("div",null,l)}const k=t(o,[["render",d]]);export{f as __pageData,k as default}; diff --git a/assets/guide_feedback.md.40ddc497.lean.js b/assets/guide_feedback.md.40ddc497.lean.js deleted file mode 100644 index 38531c852..000000000 --- a/assets/guide_feedback.md.40ddc497.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,a}from"./chunks/qq_group_qr_code.5c7ad67d.js";import{_ as t,o as r,c as i,V as s}from"./chunks/framework.410404a1.js";const f=JSON.parse('{"title":"💬 反馈和共建","description":"","frontmatter":{},"headers":[],"relativePath":"guide/feedback.md","filePath":"guide/feedback.md","lastUpdated":1689272235000}'),o={name:"guide/feedback.md"},h=s("",11),l=[h];function d(n,c,u,_,p,m){return r(),i("div",null,l)}const k=t(o,[["render",d]]);export{f as __pageData,k as default}; diff --git a/assets/guide_feedback.md.59c54408.js b/assets/guide_feedback.md.59c54408.js new file mode 100644 index 000000000..81dcc5275 --- /dev/null +++ b/assets/guide_feedback.md.59c54408.js @@ -0,0 +1 @@ +import{_ as a,v as e,b as t,R as r}from"./chunks/framework.3ac7bdc3.js";import{_ as i,a as s}from"./chunks/qq_group_qr_code.5c7ad67d.js";const _=JSON.parse('{"title":"💬 反馈和共建","description":"","frontmatter":{},"headers":[],"relativePath":"guide/feedback.md","filePath":"guide/feedback.md","lastUpdated":1691074246000}'),h={name:"guide/feedback.md"},o=r('

💬 反馈和共建

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

微信讨论群

扫一扫,添加开发者,备注『 KLineChart 』,加入群聊。

QQ讨论群

',11),l=[o];function d(n,u,c,p,m,b){return e(),t("div",null,l)}const q=a(h,[["render",d]]);export{_ as __pageData,q as default}; diff --git a/assets/guide_feedback.md.59c54408.lean.js b/assets/guide_feedback.md.59c54408.lean.js new file mode 100644 index 000000000..81dcc5275 --- /dev/null +++ b/assets/guide_feedback.md.59c54408.lean.js @@ -0,0 +1 @@ +import{_ as a,v as e,b as t,R as r}from"./chunks/framework.3ac7bdc3.js";import{_ as i,a as s}from"./chunks/qq_group_qr_code.5c7ad67d.js";const _=JSON.parse('{"title":"💬 反馈和共建","description":"","frontmatter":{},"headers":[],"relativePath":"guide/feedback.md","filePath":"guide/feedback.md","lastUpdated":1691074246000}'),h={name:"guide/feedback.md"},o=r('

💬 反馈和共建

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

微信讨论群

扫一扫,添加开发者,备注『 KLineChart 』,加入群聊。

QQ讨论群

',11),l=[o];function d(n,u,c,p,m,b){return e(),t("div",null,l)}const q=a(h,[["render",d]]);export{_ as __pageData,q as default}; diff --git a/assets/guide_figure.md.3e683623.lean.js b/assets/guide_figure.md.3e683623.lean.js deleted file mode 100644 index a36d7cf70..000000000 --- a/assets/guide_figure.md.3e683623.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const C=JSON.parse('{"title":"基础图形","description":"","frontmatter":{},"headers":[],"relativePath":"guide/figure.md","filePath":"guide/figure.md","lastUpdated":1689272235000}'),p={name:"guide/figure.md"},o=l("",33),e=[o];function c(t,r,y,D,F,i){return n(),a("div",null,e)}const E=s(p,[["render",c]]);export{C as __pageData,E as default}; diff --git a/assets/guide_figure.md.3e683623.js b/assets/guide_figure.md.ee6e8201.js similarity index 99% rename from assets/guide_figure.md.3e683623.js rename to assets/guide_figure.md.ee6e8201.js index cbb9f410a..0667fdd07 100644 --- a/assets/guide_figure.md.3e683623.js +++ b/assets/guide_figure.md.ee6e8201.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const C=JSON.parse('{"title":"基础图形","description":"","frontmatter":{},"headers":[],"relativePath":"guide/figure.md","filePath":"guide/figure.md","lastUpdated":1689272235000}'),p={name:"guide/figure.md"},o=l(`

基础图形

基础图形是图表重要的组成部分,图表上所有的元素都是由基础图形组成,如果需要制作复杂的自定义技术指标和覆盖物,建议仔细阅读。这篇文档介绍了内置的基本图形和如何自定义一个基础图形。基础图形可以通过图表方法klinecharts.getFigureClass(name)获取。

使用示例

注意

需要在有画布上下文的情况下使用。

javascript
// 获取基础图形实例
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const C=JSON.parse('{"title":"基础图形","description":"","frontmatter":{},"headers":[],"relativePath":"guide/figure.md","filePath":"guide/figure.md","lastUpdated":1691074246000}'),p={name:"guide/figure.md"},o=l(`

基础图形

基础图形是图表重要的组成部分,图表上所有的元素都是由基础图形组成,如果需要制作复杂的自定义技术指标和覆盖物,建议仔细阅读。这篇文档介绍了内置的基本图形和如何自定义一个基础图形。基础图形可以通过图表方法klinecharts.getFigureClass(name)获取。

使用示例

注意

需要在有画布上下文的情况下使用。

javascript
// 获取基础图形实例
 // name为基础图形名字,如,'arc', 'circle'等。
 const Figure = klinecharts.getFigureClass(name)
 // 实例化并绘制
diff --git a/assets/guide_figure.md.ee6e8201.lean.js b/assets/guide_figure.md.ee6e8201.lean.js
new file mode 100644
index 000000000..0667fdd07
--- /dev/null
+++ b/assets/guide_figure.md.ee6e8201.lean.js
@@ -0,0 +1,523 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const C=JSON.parse('{"title":"基础图形","description":"","frontmatter":{},"headers":[],"relativePath":"guide/figure.md","filePath":"guide/figure.md","lastUpdated":1691074246000}'),p={name:"guide/figure.md"},o=l(`

基础图形

基础图形是图表重要的组成部分,图表上所有的元素都是由基础图形组成,如果需要制作复杂的自定义技术指标和覆盖物,建议仔细阅读。这篇文档介绍了内置的基本图形和如何自定义一个基础图形。基础图形可以通过图表方法klinecharts.getFigureClass(name)获取。

使用示例

注意

需要在有画布上下文的情况下使用。

javascript
// 获取基础图形实例
+// name为基础图形名字,如,'arc', 'circle'等。
+const Figure = klinecharts.getFigureClass(name)
+// 实例化并绘制
+// attrs 属性
+// styles 样式
+// ctx 画布上下文
+new Figure({ attrs, styles }).draw(ctx)
// 获取基础图形实例
+// name为基础图形名字,如,'arc', 'circle'等。
+const Figure = klinecharts.getFigureClass(name)
+// 实例化并绘制
+// attrs 属性
+// styles 样式
+// ctx 画布上下文
+new Figure({ attrs, styles }).draw(ctx)

内置基础图形

图表内置了这些基础图形,arccirclelinepolygonrecttextrectText

arc

typescript
new ({
+  attrs: {
+    // 圆心x轴坐标值
+    x: number
+    // 圆心y轴坐标值
+    y: number
+    // 半径
+    r: number
+    // 开始角度
+    startAngle: number
+    // 结束角度
+    endAngle: number
+  },
+  styles: {
+    // 样式,可选项\`solid\`,\`dashed\`
+    style?: 'solid' | 'dashed'
+    // 尺寸
+    size?: number
+    // 颜色
+    color?: string
+    // 虚线参数
+    dashedValue?: number[]
+  }
+}) => Figure
new ({
+  attrs: {
+    // 圆心x轴坐标值
+    x: number
+    // 圆心y轴坐标值
+    y: number
+    // 半径
+    r: number
+    // 开始角度
+    startAngle: number
+    // 结束角度
+    endAngle: number
+  },
+  styles: {
+    // 样式,可选项\`solid\`,\`dashed\`
+    style?: 'solid' | 'dashed'
+    // 尺寸
+    size?: number
+    // 颜色
+    color?: string
+    // 虚线参数
+    dashedValue?: number[]
+  }
+}) => Figure

circle

typescript
new ({
+  attrs: {
+    // 圆心x轴坐标值
+    x: number
+    // 圆心y轴坐标值
+    y: number
+    // 半径
+    r: number
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed'
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+  }
+}) => Figure
new ({
+  attrs: {
+    // 圆心x轴坐标值
+    x: number
+    // 圆心y轴坐标值
+    y: number
+    // 半径
+    r: number
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed'
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+  }
+}) => Figure

line

typescript
new ({
+  attrs: {
+    // 坐标集合
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // 样式,可选项\`solid\`,\`dashed\`
+    style?: 'solid' | 'dashed'
+    // 尺寸
+    size?: number
+    // 颜色
+    color?: string
+    // 虚线参数
+    dashedValue?: number[]
+  }
+}) => Figure
new ({
+  attrs: {
+    // 坐标集合
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // 样式,可选项\`solid\`,\`dashed\`
+    style?: 'solid' | 'dashed'
+    // 尺寸
+    size?: number
+    // 颜色
+    color?: string
+    // 虚线参数
+    dashedValue?: number[]
+  }
+}) => Figure

polygon

typescript
new ({
+  attrs: {
+    // 坐标集合
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed'
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+  }
+}) => Figure
new ({
+  attrs: {
+    // 坐标集合
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed'
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+  }
+}) => Figure

rect

typescript
new ({
+  attrs: {
+    // 起始点x轴坐标值
+    x: number
+    // 起始点y轴坐标值
+    y: number
+    // 宽度
+    width: number
+    // 高度
+    height: number
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed',
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+    // 边框圆角值
+    borderRadius?: number
+  }
+}) => Figure
new ({
+  attrs: {
+    // 起始点x轴坐标值
+    x: number
+    // 起始点y轴坐标值
+    y: number
+    // 宽度
+    width: number
+    // 高度
+    height: number
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed',
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+    // 边框圆角值
+    borderRadius?: number
+  }
+}) => Figure

text

typescript
new ({
+  attrs: {
+    // 起始点x轴坐标值
+    x: number
+    // 起始点y轴坐标值
+    y: number
+    // 文字内容
+    text: any
+    // 对齐方式
+    align: CanvasTextAlign
+    // 基准
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // 颜色
+    color?: string
+    // 尺寸
+    size?: number
+    // 字体
+    family?: string
+    // 粗细
+    weight?: string | number
+  }
+}) => Figure
new ({
+  attrs: {
+    // 起始点x轴坐标值
+    x: number
+    // 起始点y轴坐标值
+    y: number
+    // 文字内容
+    text: any
+    // 对齐方式
+    align: CanvasTextAlign
+    // 基准
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // 颜色
+    color?: string
+    // 尺寸
+    size?: number
+    // 字体
+    family?: string
+    // 粗细
+    weight?: string | number
+  }
+}) => Figure

rectText

typescript
new ({
+  attrs: {
+    // 起始点x轴坐标值
+    x: number
+    // 起始点y轴坐标值
+    y: number
+    // 文字内容
+    text: any
+    // 对齐方式
+    align: CanvasTextAlign
+    // 基准
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 尺寸
+    size?: number
+    // 字体
+    family?: string
+    // 粗细
+    weight?: string | number
+    // 左内边距
+    paddingLeft?: number
+    // 右内边距
+    paddingRight?: number
+    // 上内边距
+    paddingTop?: number
+    // 下内边距
+    paddingBootom?: number
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed'
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+    // 边框圆角值
+    borderRadius?: number
+    // 背景色
+    backgroundColor?: string | CanvasGradient
+  }
+}) => Figure
new ({
+  attrs: {
+    // 起始点x轴坐标值
+    x: number
+    // 起始点y轴坐标值
+    y: number
+    // 文字内容
+    text: any
+    // 对齐方式
+    align: CanvasTextAlign
+    // 基准
+    baseline: CanvasTextBaseline
+  },
+  styles: {
+    // 样式,可选项\`fill\`,\`stroke\`,\`stroke_fill\`
+    style?: 'fill' | 'stroke' | 'stroke_fill'
+    // 颜色
+    color?: string
+    // 尺寸
+    size?: number
+    // 字体
+    family?: string
+    // 粗细
+    weight?: string | number
+    // 左内边距
+    paddingLeft?: number
+    // 右内边距
+    paddingRight?: number
+    // 上内边距
+    paddingTop?: number
+    // 下内边距
+    paddingBootom?: number
+    // 边框样式
+    borderStyle?: 'solid' | 'dashed'
+    // 边框颜色
+    borderColor?: string
+    // 边框尺寸
+    borderSize?: number
+    // 边框虚线参数
+    borderDashedValue?: number[]
+    // 边框圆角值
+    borderRadius?: number
+    // 背景色
+    backgroundColor?: string | CanvasGradient
+  }
+}) => Figure

自定义基础图形

创建一个自定义基础图形,只需要生成基础图形信息,然后通过klinecharts.registerFigure全局添加,添加到图表即可和内置基础图形一样去使用。

属性说明

typescript
{
+  // 图形名字,必要字段,是创建的唯一标识
+  name: string
+
+  // 校验事件是否在图形上,返回一个boolean值
+  checkEventOn: (
+    // 事件的坐标
+    coordinate: {
+      x: number
+      y: number
+    }
+    // 图形的属性
+    attrs: any
+    // 图形的样式
+    styles: any
+  ) => boolean
+
+  // 绘制
+  draw: (
+    // 画布上下文
+    ctx: CanvasRenderingContext2D,
+    // 图形的属性
+    attrs: any,
+    // 图形的样式
+  ) => void
+}
{
+  // 图形名字,必要字段,是创建的唯一标识
+  name: string
+
+  // 校验事件是否在图形上,返回一个boolean值
+  checkEventOn: (
+    // 事件的坐标
+    coordinate: {
+      x: number
+      y: number
+    }
+    // 图形的属性
+    attrs: any
+    // 图形的样式
+    styles: any
+  ) => boolean
+
+  // 绘制
+  draw: (
+    // 画布上下文
+    ctx: CanvasRenderingContext2D,
+    // 图形的属性
+    attrs: any,
+    // 图形的样式
+  ) => void
+}

示例

以一个可以有边框和背景菱形来具体说明自定义。

步骤一

先确定属性和样式 属性{ x, y, width, height }x是中心点x轴坐标值,y是中心点y轴坐标值,width是宽度,height是高度。 样式{ style, color, borderStyle, borderSize, borderColor, dashedValue }style是样式类型,我们可以定义三个选项strokefillstroke_fillstroke只有边框,fill只有背景,stroke_fill又有边框又有背景,color是颜色,borderStyle是边框样式,可以定义两个选项soliddashedsolid是实线,dashed是虚线,borderSize是边框尺寸,borderColor是边框颜色,dashedValue是虚线值。

步骤二

实现checkEventOndraw两个方法。

javascript
{
+  name: 'diamond',
+  checkEventOn: (coordinate, attrs) => {
+    const { x, y, width, height } = attrs
+    const xDis = Math.abs(coordinate.x - x)
+    const yDis = Math.abs(coordinate.y - y)
+    return xDis * height + yDis * width < width * height / 2
+  },
+  draw: (ctx, attrs, styles) => {
+    const { x, y, width, height } = attrs
+    const {
+      style = 'fill',
+      color = 'currentColor',
+      borderSize = 1,
+      borderColor = 'currentColor',
+      borderStyle = 'solid,
+      borderDashedValue = [2, 2]
+    } = styles
+    // 绘制填充的菱形
+    if (style === 'fill' || styles.style === 'stroke_fill') {
+      ctx.fillStyle = color
+      ctx.beginPath()
+      ctx.moveTo(x - width / 2, y)
+      ctx.lineTo(x, y - height / 2)
+      ctx.lineTo(x + width / 2, y)
+      ctx.lineTo(x, y + height / 2)
+      ctx.closePath()
+      ctx.fill()
+    }
+    // 绘制边框的菱形
+    if (style === 'stroke' || styles.style === 'stroke_fill') {
+      ctx.strokeStyle = borderColor
+      ctx.lineWidth = borderSize
+      if (borderStyle === 'dashed') {
+        ctx.setLineDash(borderDashedValue)
+      } else {
+        ctx.setLineDash([])
+      }
+      ctx.beginPath()
+      ctx.beginPath()
+      ctx.moveTo(x - width / 2, y)
+      ctx.lineTo(x, y - height / 2)
+      ctx.lineTo(x + width / 2, y)
+      ctx.lineTo(x, y + height / 2)
+      ctx.closePath()
+      ctx.stroke()
+    }
+  }
+}
{
+  name: 'diamond',
+  checkEventOn: (coordinate, attrs) => {
+    const { x, y, width, height } = attrs
+    const xDis = Math.abs(coordinate.x - x)
+    const yDis = Math.abs(coordinate.y - y)
+    return xDis * height + yDis * width < width * height / 2
+  },
+  draw: (ctx, attrs, styles) => {
+    const { x, y, width, height } = attrs
+    const {
+      style = 'fill',
+      color = 'currentColor',
+      borderSize = 1,
+      borderColor = 'currentColor',
+      borderStyle = 'solid,
+      borderDashedValue = [2, 2]
+    } = styles
+    // 绘制填充的菱形
+    if (style === 'fill' || styles.style === 'stroke_fill') {
+      ctx.fillStyle = color
+      ctx.beginPath()
+      ctx.moveTo(x - width / 2, y)
+      ctx.lineTo(x, y - height / 2)
+      ctx.lineTo(x + width / 2, y)
+      ctx.lineTo(x, y + height / 2)
+      ctx.closePath()
+      ctx.fill()
+    }
+    // 绘制边框的菱形
+    if (style === 'stroke' || styles.style === 'stroke_fill') {
+      ctx.strokeStyle = borderColor
+      ctx.lineWidth = borderSize
+      if (borderStyle === 'dashed') {
+        ctx.setLineDash(borderDashedValue)
+      } else {
+        ctx.setLineDash([])
+      }
+      ctx.beginPath()
+      ctx.beginPath()
+      ctx.moveTo(x - width / 2, y)
+      ctx.lineTo(x, y - height / 2)
+      ctx.lineTo(x + width / 2, y)
+      ctx.lineTo(x, y + height / 2)
+      ctx.closePath()
+      ctx.stroke()
+    }
+  }
+}

这样一个自定义的基础图形就完成了。

`,33),e=[o];function c(t,r,y,D,F,i){return n(),a("div",null,e)}const E=s(p,[["render",c]]);export{C as __pageData,E as default}; diff --git a/assets/guide_getting-started.md.f8bcbca3.js b/assets/guide_getting-started.md.0acdaf38.js similarity index 99% rename from assets/guide_getting-started.md.f8bcbca3.js rename to assets/guide_getting-started.md.0acdaf38.js index 29b4ca847..c28f00716 100644 --- a/assets/guide_getting-started.md.f8bcbca3.js +++ b/assets/guide_getting-started.md.0acdaf38.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const i=JSON.parse('{"title":"🚀 快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1689272235000}'),p={name:"guide/getting-started.md"},o=l(`

🚀 快速开始

获取KLineChart

KLineChart 支持多种下载方式,你可以通过npmyarn等包管理工具,也可以通过CDN获取。

使用npm

bash
npm install klinecharts --save
npm install klinecharts --save

使用yarn

bash
yarn add klinecharts
yarn add klinecharts

使用CDN

可以使用jsDelivrunpkg或者其它的,推荐从jsDelivr引用。

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

创建第一个图表

npmyarn等包管理工具的项目中创建

javascript
import { init } from 'klinecharts'
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const i=JSON.parse('{"title":"🚀 快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1691074246000}'),p={name:"guide/getting-started.md"},o=l(`

🚀 快速开始

获取KLineChart

KLineChart 支持多种下载方式,你可以通过npmyarn等包管理工具,也可以通过CDN获取。

使用npm

bash
npm install klinecharts --save
npm install klinecharts --save

使用yarn

bash
yarn add klinecharts
yarn add klinecharts

使用CDN

可以使用jsDelivrunpkg或者其它的,推荐从jsDelivr引用。

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

创建第一个图表

npmyarn等包管理工具的项目中创建

javascript
import { init } from 'klinecharts'
 
 // 初始化图表
 const chart = init(\`\${domId}\`)
diff --git a/assets/guide_getting-started.md.0acdaf38.lean.js b/assets/guide_getting-started.md.0acdaf38.lean.js
new file mode 100644
index 000000000..c28f00716
--- /dev/null
+++ b/assets/guide_getting-started.md.0acdaf38.lean.js
@@ -0,0 +1,101 @@
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const i=JSON.parse('{"title":"🚀 快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1691074246000}'),p={name:"guide/getting-started.md"},o=l(`

🚀 快速开始

获取KLineChart

KLineChart 支持多种下载方式,你可以通过npmyarn等包管理工具,也可以通过CDN获取。

使用npm

bash
npm install klinecharts --save
npm install klinecharts --save

使用yarn

bash
yarn add klinecharts
yarn add klinecharts

使用CDN

可以使用jsDelivrunpkg或者其它的,推荐从jsDelivr引用。

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

创建第一个图表

npmyarn等包管理工具的项目中创建

javascript
import { init } from 'klinecharts'
+
+// 初始化图表
+const chart = init(\`\${domId}\`)
+
+// 为图表添加数据
+chart.applyNewData([
+  { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+  { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+  { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+  { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+  { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+  { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+  { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+  { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+  { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+  { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+])
import { init } from 'klinecharts'
+
+// 初始化图表
+const chart = init(\`\${domId}\`)
+
+// 为图表添加数据
+chart.applyNewData([
+  { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+  { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+  { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+  { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+  { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+  { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+  { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+  { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+  { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+  { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+])

在直接通过 script 标签引入的项目中创建

html
<!DOCTYPE html>
+<html lang="en" >
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="theme-color" content="#000000" />
+    <meta name="keywords" content="快速开始"/>
+    <meta name="description" content="快速开始"/>
+    <title>快速开始</title>
+  </head>
+  <body>
+    <div id="chart" style="width:600px;height:600px"></div>
+    <script>
+      window.onload = function () {
+        // 初始化图表
+        var chart = klinecharts.init('chart')
+
+        // 为图表添加数据
+        chart.applyNewData([
+          { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+          { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+          { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+          { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+          { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+          { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+          { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+          { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+          { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+          { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+        ])
+      }
+    </script>
+  </body>
+</html>
<!DOCTYPE html>
+<html lang="en" >
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="theme-color" content="#000000" />
+    <meta name="keywords" content="快速开始"/>
+    <meta name="description" content="快速开始"/>
+    <title>快速开始</title>
+  </head>
+  <body>
+    <div id="chart" style="width:600px;height:600px"></div>
+    <script>
+      window.onload = function () {
+        // 初始化图表
+        var chart = klinecharts.init('chart')
+
+        // 为图表添加数据
+        chart.applyNewData([
+          { close: 4976.16, high: 4977.99, low: 4970.12, open: 4972.89, timestamp: 1587660000000, volume: 204 },
+          { close: 4977.33, high: 4979.94, low: 4971.34, open: 4973.20, timestamp: 1587660060000, volume: 194 },
+          { close: 4977.93, high: 4977.93, low: 4974.20, open: 4976.53, timestamp: 1587660120000, volume: 197 },
+          { close: 4966.77, high: 4968.53, low: 4962.20, open: 4963.88, timestamp: 1587660180000, volume: 28 },
+          { close: 4961.56, high: 4972.61, low: 4961.28, open: 4961.28, timestamp: 1587660240000, volume: 184 },
+          { close: 4964.19, high: 4964.74, low: 4961.42, open: 4961.64, timestamp: 1587660300000, volume: 191 },
+          { close: 4968.93, high: 4972.70, low: 4964.55, open: 4966.96, timestamp: 1587660360000, volume: 105 },
+          { close: 4979.31, high: 4979.61, low: 4973.99, open: 4977.06, timestamp: 1587660420000, volume: 35 },
+          { close: 4977.02, high: 4981.66, low: 4975.14, open: 4981.66, timestamp: 1587660480000, volume: 135 },
+          { close: 4985.09, high: 4988.62, low: 4980.30, open: 4986.72, timestamp: 1587660540000, volume: 76 }
+        ])
+      }
+    </script>
+  </body>
+</html>

这样你的第一个图表就创建完成了。

`,16),e=[o];function t(c,r,y,F,D,C){return a(),n("div",null,e)}const E=s(p,[["render",t]]);export{i as __pageData,E as default}; diff --git a/assets/guide_getting-started.md.f8bcbca3.lean.js b/assets/guide_getting-started.md.f8bcbca3.lean.js deleted file mode 100644 index 21eb77d48..000000000 --- a/assets/guide_getting-started.md.f8bcbca3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const i=JSON.parse('{"title":"🚀 快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1689272235000}'),p={name:"guide/getting-started.md"},o=l("",16),e=[o];function t(c,r,y,F,D,C){return a(),n("div",null,e)}const E=s(p,[["render",t]]);export{i as __pageData,E as default}; diff --git a/assets/guide_hot-key.md.54dce03b.js b/assets/guide_hot-key.md.54dce03b.js new file mode 100644 index 000000000..69c797110 --- /dev/null +++ b/assets/guide_hot-key.md.54dce03b.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as t,R as d}from"./chunks/framework.3ac7bdc3.js";const u=JSON.parse('{"title":"⌨️ 快捷键","description":"","frontmatter":{},"headers":[],"relativePath":"guide/hot-key.md","filePath":"guide/hot-key.md","lastUpdated":1691074246000}'),a={name:"guide/hot-key.md"},c=d('

⌨️ 快捷键

目前快捷键仅支持移动和缩放。

  • shift + 右移
  • shift + 左移
  • shift + + 放大
  • shift + - 缩小
',3),i=[c];function s(r,l,h,n,_,f){return o(),t("div",null,i)}const m=e(a,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/guide_hot-key.md.54dce03b.lean.js b/assets/guide_hot-key.md.54dce03b.lean.js new file mode 100644 index 000000000..69c797110 --- /dev/null +++ b/assets/guide_hot-key.md.54dce03b.lean.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as t,R as d}from"./chunks/framework.3ac7bdc3.js";const u=JSON.parse('{"title":"⌨️ 快捷键","description":"","frontmatter":{},"headers":[],"relativePath":"guide/hot-key.md","filePath":"guide/hot-key.md","lastUpdated":1691074246000}'),a={name:"guide/hot-key.md"},c=d('

⌨️ 快捷键

目前快捷键仅支持移动和缩放。

  • shift + 右移
  • shift + 左移
  • shift + + 放大
  • shift + - 缩小
',3),i=[c];function s(r,l,h,n,_,f){return o(),t("div",null,i)}const m=e(a,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/guide_hot-key.md.9c7a4d73.js b/assets/guide_hot-key.md.9c7a4d73.js deleted file mode 100644 index cac5fec27..000000000 --- a/assets/guide_hot-key.md.9c7a4d73.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as t,V as c}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"⌨️ 快捷键","description":"","frontmatter":{},"headers":[],"relativePath":"guide/hot-key.md","filePath":"guide/hot-key.md","lastUpdated":1689272235000}'),d={name:"guide/hot-key.md"},a=c('

⌨️ 快捷键

目前快捷键仅支持移动和缩放。

  • shift + 右移
  • shift + 左移
  • shift + + 放大
  • shift + - 缩小
',3),i=[a];function s(_,l,r,n,h,p){return o(),t("div",null,i)}const m=e(d,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/guide_hot-key.md.9c7a4d73.lean.js b/assets/guide_hot-key.md.9c7a4d73.lean.js deleted file mode 100644 index f4b84a9d0..000000000 --- a/assets/guide_hot-key.md.9c7a4d73.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as t,V as c}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"⌨️ 快捷键","description":"","frontmatter":{},"headers":[],"relativePath":"guide/hot-key.md","filePath":"guide/hot-key.md","lastUpdated":1689272235000}'),d={name:"guide/hot-key.md"},a=c("",3),i=[a];function s(_,l,r,n,h,p){return o(),t("div",null,i)}const m=e(d,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/guide_i18n.md.53fe5521.lean.js b/assets/guide_i18n.md.53fe5521.lean.js deleted file mode 100644 index fd40960ee..000000000 --- a/assets/guide_i18n.md.53fe5521.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const C=JSON.parse('{"title":"🌏 国际化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/i18n.md","filePath":"guide/i18n.md","lastUpdated":1689272235000}'),o={name:"guide/i18n.md"},p=l("",7),e=[p];function c(t,r,y,D,i,F){return a(),n("div",null,e)}const h=s(o,[["render",c]]);export{C as __pageData,h as default}; diff --git a/assets/guide_i18n.md.53fe5521.js b/assets/guide_i18n.md.75372bb4.js similarity index 92% rename from assets/guide_i18n.md.53fe5521.js rename to assets/guide_i18n.md.75372bb4.js index 550d4cf49..6005ed275 100644 --- a/assets/guide_i18n.md.53fe5521.js +++ b/assets/guide_i18n.md.75372bb4.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const C=JSON.parse('{"title":"🌏 国际化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/i18n.md","filePath":"guide/i18n.md","lastUpdated":1689272235000}'),o={name:"guide/i18n.md"},p=l(`

🌏 国际化

目前图表内置了en-USzh-CN两种语言,默认语言是en-US,如果需要使用其他语言,可以参考下面的方案。

增加语言包

增加语言包通过klinecharts.registerLocale(key, locales)去完成。 例如,添加一个中文繁体的语言包,可以这样做:

typescript
klinecharts.registerLocale('zh-HK', {
+import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const C=JSON.parse('{"title":"🌏 国际化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/i18n.md","filePath":"guide/i18n.md","lastUpdated":1691074246000}'),p={name:"guide/i18n.md"},o=l(`

🌏 国际化

目前图表内置了en-USzh-CN两种语言,默认语言是en-US,如果需要使用其他语言,可以参考下面的方案。

增加语言包

增加语言包通过klinecharts.registerLocale(key, locales)去完成。 例如,添加一个中文繁体的语言包,可以这样做:

typescript
klinecharts.registerLocale('zh-HK', {
   time: '時間:',
   open: '開:',
   high: '高:',
@@ -12,4 +12,4 @@ import{_ as s,o as a,c as n,V as l}from"./chunks/framework.410404a1.js";const C=
   low: '低:',
   close: '收:',
   volume: '成交量:'
-})

使用语言包

当添加完语言包后,可以通过图表API init(options)或者setLocale(key),完成语言切换。

`,7),e=[p];function c(t,r,y,D,i,F){return a(),n("div",null,e)}const h=s(o,[["render",c]]);export{C as __pageData,h as default}; +})

使用语言包

当添加完语言包后,可以通过图表API init(options)或者setLocale(key),完成语言切换。

`,7),e=[o];function c(t,r,y,D,i,F){return a(),n("div",null,e)}const h=s(p,[["render",c]]);export{C as __pageData,h as default}; diff --git a/assets/guide_i18n.md.75372bb4.lean.js b/assets/guide_i18n.md.75372bb4.lean.js new file mode 100644 index 000000000..6005ed275 --- /dev/null +++ b/assets/guide_i18n.md.75372bb4.lean.js @@ -0,0 +1,15 @@ +import{_ as s,v as a,b as n,R as l}from"./chunks/framework.3ac7bdc3.js";const C=JSON.parse('{"title":"🌏 国际化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/i18n.md","filePath":"guide/i18n.md","lastUpdated":1691074246000}'),p={name:"guide/i18n.md"},o=l(`

🌏 国际化

目前图表内置了en-USzh-CN两种语言,默认语言是en-US,如果需要使用其他语言,可以参考下面的方案。

增加语言包

增加语言包通过klinecharts.registerLocale(key, locales)去完成。 例如,添加一个中文繁体的语言包,可以这样做:

typescript
klinecharts.registerLocale('zh-HK', {
+  time: '時間:',
+  open: '開:',
+  high: '高:',
+  low: '低:',
+  close: '收:',
+  volume: '成交量:'
+})
klinecharts.registerLocale('zh-HK', {
+  time: '時間:',
+  open: '開:',
+  high: '高:',
+  low: '低:',
+  close: '收:',
+  volume: '成交量:'
+})

使用语言包

当添加完语言包后,可以通过图表API init(options)或者setLocale(key),完成语言切换。

`,7),e=[o];function c(t,r,y,D,i,F){return a(),n("div",null,e)}const h=s(p,[["render",c]]);export{C as __pageData,h as default}; diff --git a/assets/guide_indicator.md.23b6042f.lean.js b/assets/guide_indicator.md.23b6042f.lean.js deleted file mode 100644 index 1f15fed1a..000000000 --- a/assets/guide_indicator.md.23b6042f.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const A=JSON.parse('{"title":"技术指标","description":"","frontmatter":{},"headers":[],"relativePath":"guide/indicator.md","filePath":"guide/indicator.md","lastUpdated":1689272235000}'),p={name:"guide/indicator.md"},o=l("",17),e=[o];function t(c,r,y,F,D,i){return n(),a("div",null,e)}const C=s(p,[["render",t]]);export{A as __pageData,C as default}; diff --git a/assets/guide_indicator.md.23b6042f.js b/assets/guide_indicator.md.ef292373.js similarity index 99% rename from assets/guide_indicator.md.23b6042f.js rename to assets/guide_indicator.md.ef292373.js index f98bbca2d..abbb5d89d 100644 --- a/assets/guide_indicator.md.23b6042f.js +++ b/assets/guide_indicator.md.ef292373.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const A=JSON.parse('{"title":"技术指标","description":"","frontmatter":{},"headers":[],"relativePath":"guide/indicator.md","filePath":"guide/indicator.md","lastUpdated":1689272235000}'),p={name:"guide/indicator.md"},o=l(`

技术指标

本文档介绍了图表内置的技术指标和如何自定义一个技术指标。

内置技术指标

指标名默认计算参数指标名默认计算参数指标名默认计算参数
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2,  20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVT
RSI[6, 12, 24]OBV[30]AVP

自定义技术指标

创建一个自定义技术指标,只需要生成一个技术指标信息,然后通过klinecharts.registerIndicator全局添加,添加到图表即可和内置技术指标一样去使用。

属性说明

typescript
{
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const A=JSON.parse('{"title":"技术指标","description":"","frontmatter":{},"headers":[],"relativePath":"guide/indicator.md","filePath":"guide/indicator.md","lastUpdated":1691074246000}'),p={name:"guide/indicator.md"},o=l(`

技术指标

本文档介绍了图表内置的技术指标和如何自定义一个技术指标。

内置技术指标

指标名默认计算参数指标名默认计算参数指标名默认计算参数
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2,  20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVT
RSI[6, 12, 24]OBV[30]AVP

自定义技术指标

创建一个自定义技术指标,只需要生成一个技术指标信息,然后通过klinecharts.registerIndicator全局添加,添加到图表即可和内置技术指标一样去使用。

属性说明

typescript
{
   // 指标名
   name: string
   // 指标简短名称,用于显示,缺省将显示name
diff --git a/assets/guide_indicator.md.ef292373.lean.js b/assets/guide_indicator.md.ef292373.lean.js
new file mode 100644
index 000000000..abbb5d89d
--- /dev/null
+++ b/assets/guide_indicator.md.ef292373.lean.js
@@ -0,0 +1,487 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const A=JSON.parse('{"title":"技术指标","description":"","frontmatter":{},"headers":[],"relativePath":"guide/indicator.md","filePath":"guide/indicator.md","lastUpdated":1691074246000}'),p={name:"guide/indicator.md"},o=l(`

技术指标

本文档介绍了图表内置的技术指标和如何自定义一个技术指标。

内置技术指标

指标名默认计算参数指标名默认计算参数指标名默认计算参数
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2,  20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVT
RSI[6, 12, 24]OBV[30]AVP

自定义技术指标

创建一个自定义技术指标,只需要生成一个技术指标信息,然后通过klinecharts.registerIndicator全局添加,添加到图表即可和内置技术指标一样去使用。

属性说明

typescript
{
+  // 指标名
+  name: string
+  // 指标简短名称,用于显示,缺省将显示name
+  shortName?: string
+  // 精度,默认为4
+  precision?: number
+  // 计算参数
+  calcParams?: any[]
+  // 是否需要ohlc
+  shouldOhlc?: boolean
+  // 是否需要格式化大数据值,从1000开始格式化,比如100000是否需要格式化100K
+  shouldFormatBigNumber?: boolean
+  // 是否可见
+  visible?: boolean 
+  // 扩展数据
+  extendData?: any
+  // 系列,默认为'normal'
+  series?: 'normal' | 'price' | 'volume'
+  // 数据信息
+  figures?: Array<{
+    // 用于取计算结果中值
+    key: string
+    // 用于tooltip显示
+    title?: string
+    // 图形类型
+    type?: string
+    // 基准值,如果给定,将以这个值上下去绘制,一般用于type是'rect'
+    baseValue?: number
+    // 是一个方法,用于生成自定义图形的属性,
+    attrs?: ({
+      coordinate: IndicatorFigureAttrsCallbackCoordinate
+      bounding: Bounding
+      barSpace: BarSpace
+      xAxis: XAxis
+      yAxis: YAxis
+    }) => IndicatorFigureAttrs
+    // 是一个方法,用于生成样式
+    styles?: (
+      data: {
+        // 上一个图形的数据
+        prev: {
+          // k线数据,类型参阅[数据源]
+          kLineData?: KLineData
+          // 技术指标数据
+          indicatorData?: any
+        }
+        // 当前图形的数据
+        current: {
+          kLineData?: KLineData
+          indicatorData?: any
+        }
+        // 下一个图形的数据
+        next: {
+          kLineData?: KLineData
+          indicatorData?: any
+        }
+      },
+      // 技术图表实例
+      indicator: Indicator
+      // 默认的技术指标样式,即全局设置的技术指标样式,参阅[样式]中的indicator
+      defaultStyles: IndicatorStyle
+    ) => IndicatorFigureStyle
+  }>
+  // 指定的最小值,默认null
+  minValue?: number
+  // 指定的最大值,默认null
+  maxValue?: number
+  // 样式,支持增量,默认为null,类型参阅[样式]中的indicator
+  styles?: IndicatorStyle
+  // 计算方法,可以是一个promise
+  calc: (
+    // 数据源,类型参阅[数据源]
+    dataList: KLineData[],
+    // 技术指标实例
+    indicator: Indicator
+  ) => Promise<Array<any>> | Array<any>
+  // 重新生成数图形配置方法,会在计算参数发生变化后触发,返回类型参阅figures,默认为null
+  regenerateFigures?: (
+    // 计算参数
+    calcParms: any[]
+  ) => Array<IndicatorFigure<D>>
+  // 创建自定义提示文字
+  createTooltipDataSource?: (params: {
+    // 数据源,类型参阅[数据源]
+    kLineDataList: KLineData[]
+    // 技术指标实例
+    indicator: Indicator
+    // 可见区域信息
+    visibleRange: {
+      // 起点数据索引
+      from: number
+      // 终点数据索引
+      to: number
+      // 实际起点数据索引
+      realFrom: number
+      // 实际终点数据索引
+      realTo: number
+    },
+    // 窗口尺寸信息
+    bounding: {
+      // 宽
+      width: number
+      // 高
+      height: number
+      // 距离左边距离
+      left: number
+      // 距离右边距离
+      right: number
+      // 距离顶部距离
+      top: number
+      // 距离底部距离
+      bottom: number
+    },
+    // 十字光标的信息
+    crosshair: {
+      // 十字光标交叉点所在的窗口id
+      paneId?: string
+      // 真实的x坐标
+      realX?: number
+      // k线数据,类型参阅[数据源]
+      kLineData?: KLineData
+      // 数据索引
+      dataIndex?: number
+      // 真实数据索引
+      realDataIndex?: number
+    }
+    // 默认的技术指标样式,即全局设置的技术指标样式,参阅[样式]中的indicator
+    defaultStyles: IndicatorStyle
+    // x轴组件,内置一些转换方法
+    xAxis: XAxis
+    // y轴组件,内置一些转换方法
+    yAxis: YAxis
+  }) => ({
+    // 名字
+    name?: string
+    // 计算参数文字,如果name无值,则不会显示
+    calcParamsText?: string
+    // 值信息
+    values?: Array<{
+      title: string | {
+        text: string
+        color: string
+      }
+      value: string | {
+        text: string
+        color: string
+      }
+    }>
+  }),
+  // 自定义绘制,如果返回true,则figures配置的图形不会绘制
+  draw?: (params: {
+    // 画布上下文
+    ctx: CanvasRenderingContext2D
+    // 数据源,类型参阅[数据源]
+    kLineDataList: KLineData[]
+    // 技术指标实例
+    indicator: Indicator
+    // 可见区域信息
+    visibleRange: {
+      // 起点数据索引
+      from: number
+      // 终点数据索引
+      to: number,
+      // 实际起点数据索引
+      realFrom: number
+      // 实际终点数据索引
+      realTo: number
+    },
+    // 窗口尺寸信息
+    bounding: {
+      // 宽
+      width: number
+      // 高
+      height: number
+      // 距离左边距离
+      left: number
+      // 距离右边距离
+      right: number
+      // 距离顶部距离
+      top: number
+      // 距离底部距离
+      bottom: number
+    },
+    // 蜡烛柱的尺寸信息
+    barSpace: {
+      // 蜡烛柱尺寸
+      bar: number
+      halfBar: number
+      // 蜡烛柱不包含蜡烛柱之间间隙的尺寸
+      gapBar: number
+      halfGapBar: number
+    },
+    // 默认的技术指标样式,即全局设置的技术指标样式,参阅[样式]中的indicator
+    defaultStyles: IndicatorStyle
+    // x轴组件,内置一些转换方法
+    xAxis: XAxis
+    // y轴组件,内置一些转换方法
+    yAxis: YAxis
+  }) => boolean
+}
{
+  // 指标名
+  name: string
+  // 指标简短名称,用于显示,缺省将显示name
+  shortName?: string
+  // 精度,默认为4
+  precision?: number
+  // 计算参数
+  calcParams?: any[]
+  // 是否需要ohlc
+  shouldOhlc?: boolean
+  // 是否需要格式化大数据值,从1000开始格式化,比如100000是否需要格式化100K
+  shouldFormatBigNumber?: boolean
+  // 是否可见
+  visible?: boolean 
+  // 扩展数据
+  extendData?: any
+  // 系列,默认为'normal'
+  series?: 'normal' | 'price' | 'volume'
+  // 数据信息
+  figures?: Array<{
+    // 用于取计算结果中值
+    key: string
+    // 用于tooltip显示
+    title?: string
+    // 图形类型
+    type?: string
+    // 基准值,如果给定,将以这个值上下去绘制,一般用于type是'rect'
+    baseValue?: number
+    // 是一个方法,用于生成自定义图形的属性,
+    attrs?: ({
+      coordinate: IndicatorFigureAttrsCallbackCoordinate
+      bounding: Bounding
+      barSpace: BarSpace
+      xAxis: XAxis
+      yAxis: YAxis
+    }) => IndicatorFigureAttrs
+    // 是一个方法,用于生成样式
+    styles?: (
+      data: {
+        // 上一个图形的数据
+        prev: {
+          // k线数据,类型参阅[数据源]
+          kLineData?: KLineData
+          // 技术指标数据
+          indicatorData?: any
+        }
+        // 当前图形的数据
+        current: {
+          kLineData?: KLineData
+          indicatorData?: any
+        }
+        // 下一个图形的数据
+        next: {
+          kLineData?: KLineData
+          indicatorData?: any
+        }
+      },
+      // 技术图表实例
+      indicator: Indicator
+      // 默认的技术指标样式,即全局设置的技术指标样式,参阅[样式]中的indicator
+      defaultStyles: IndicatorStyle
+    ) => IndicatorFigureStyle
+  }>
+  // 指定的最小值,默认null
+  minValue?: number
+  // 指定的最大值,默认null
+  maxValue?: number
+  // 样式,支持增量,默认为null,类型参阅[样式]中的indicator
+  styles?: IndicatorStyle
+  // 计算方法,可以是一个promise
+  calc: (
+    // 数据源,类型参阅[数据源]
+    dataList: KLineData[],
+    // 技术指标实例
+    indicator: Indicator
+  ) => Promise<Array<any>> | Array<any>
+  // 重新生成数图形配置方法,会在计算参数发生变化后触发,返回类型参阅figures,默认为null
+  regenerateFigures?: (
+    // 计算参数
+    calcParms: any[]
+  ) => Array<IndicatorFigure<D>>
+  // 创建自定义提示文字
+  createTooltipDataSource?: (params: {
+    // 数据源,类型参阅[数据源]
+    kLineDataList: KLineData[]
+    // 技术指标实例
+    indicator: Indicator
+    // 可见区域信息
+    visibleRange: {
+      // 起点数据索引
+      from: number
+      // 终点数据索引
+      to: number
+      // 实际起点数据索引
+      realFrom: number
+      // 实际终点数据索引
+      realTo: number
+    },
+    // 窗口尺寸信息
+    bounding: {
+      // 宽
+      width: number
+      // 高
+      height: number
+      // 距离左边距离
+      left: number
+      // 距离右边距离
+      right: number
+      // 距离顶部距离
+      top: number
+      // 距离底部距离
+      bottom: number
+    },
+    // 十字光标的信息
+    crosshair: {
+      // 十字光标交叉点所在的窗口id
+      paneId?: string
+      // 真实的x坐标
+      realX?: number
+      // k线数据,类型参阅[数据源]
+      kLineData?: KLineData
+      // 数据索引
+      dataIndex?: number
+      // 真实数据索引
+      realDataIndex?: number
+    }
+    // 默认的技术指标样式,即全局设置的技术指标样式,参阅[样式]中的indicator
+    defaultStyles: IndicatorStyle
+    // x轴组件,内置一些转换方法
+    xAxis: XAxis
+    // y轴组件,内置一些转换方法
+    yAxis: YAxis
+  }) => ({
+    // 名字
+    name?: string
+    // 计算参数文字,如果name无值,则不会显示
+    calcParamsText?: string
+    // 值信息
+    values?: Array<{
+      title: string | {
+        text: string
+        color: string
+      }
+      value: string | {
+        text: string
+        color: string
+      }
+    }>
+  }),
+  // 自定义绘制,如果返回true,则figures配置的图形不会绘制
+  draw?: (params: {
+    // 画布上下文
+    ctx: CanvasRenderingContext2D
+    // 数据源,类型参阅[数据源]
+    kLineDataList: KLineData[]
+    // 技术指标实例
+    indicator: Indicator
+    // 可见区域信息
+    visibleRange: {
+      // 起点数据索引
+      from: number
+      // 终点数据索引
+      to: number,
+      // 实际起点数据索引
+      realFrom: number
+      // 实际终点数据索引
+      realTo: number
+    },
+    // 窗口尺寸信息
+    bounding: {
+      // 宽
+      width: number
+      // 高
+      height: number
+      // 距离左边距离
+      left: number
+      // 距离右边距离
+      right: number
+      // 距离顶部距离
+      top: number
+      // 距离底部距离
+      bottom: number
+    },
+    // 蜡烛柱的尺寸信息
+    barSpace: {
+      // 蜡烛柱尺寸
+      bar: number
+      halfBar: number
+      // 蜡烛柱不包含蜡烛柱之间间隙的尺寸
+      gapBar: number
+      halfGapBar: number
+    },
+    // 默认的技术指标样式,即全局设置的技术指标样式,参阅[样式]中的indicator
+    defaultStyles: IndicatorStyle
+    // x轴组件,内置一些转换方法
+    xAxis: XAxis
+    // y轴组件,内置一些转换方法
+    yAxis: YAxis
+  }) => boolean
+}

示例

以一个名为'MA'技术指标,介绍如何去做自定义技术指标。

步骤一

首先确定计算参数(calcParams)和配置项(figures),'MA'技术指标需要展示两个周期的收盘价平均值连起来的线,一条为'ma1',一条名为'ma2'。因此figures配置为:

javascript
{
+  // 计算参数是2个,一个计算5个周期时间的均值,即'ma1',另一个计算10个周期时间的均值,即'ma10'
+  calcParams: [5, 10],
+  figures: [
+    // 第一条线'ma5'
+    { key: 'ma1', title: 'MA5: ', type: 'line' },
+    // 第二条线'ma10'
+    { key: 'ma2', title: 'MA10: ', type: 'line' }
+  ]
+}
{
+  // 计算参数是2个,一个计算5个周期时间的均值,即'ma1',另一个计算10个周期时间的均值,即'ma10'
+  calcParams: [5, 10],
+  figures: [
+    // 第一条线'ma5'
+    { key: 'ma1', title: 'MA5: ', type: 'line' },
+    // 第二条线'ma10'
+    { key: 'ma2', title: 'MA10: ', type: 'line' }
+  ]
+}

步骤二

确定其它属性

javascript
{
+  name: 'MA',
+  shortName: 'MA',
+  calcParams: [5, 10],
+  figures: [
+    { key: 'ma1', title: 'MA5: ', type: 'line' },
+    { key: 'ma2', title: 'MA10: ', type: 'line' }
+  ],
+  // 当计算参数改变时,希望提示的和参数一样,即title的值需要改变
+  regenerateFigures: (params) => {
+    return params.map((p, i) => {
+      return { key: \`ma\${i + 1}\`, title: \`MA\${p}: \`, type: 'line' }
+    })
+  },
+  // 计算结果
+  calc: (kLineDataList, { calcParams, figures }) => {
+    // 注意:返回数据个数需要和kLineDataList的数据个数一致,如果无值,用{}代替即可。
+    // 计算参数最好取回调参数calcParams,如果不是,后续计算参数发生变化的时候,这里计算不能及时响应
+    const closeSums = []
+    return kLineDataList.map((kLineData, i) => {
+      const ma = {}
+      const close = kLineData. close
+      calcParams.forEach((param, j) => {
+        closeSums[j] = (closeSums[j] || 0) + close
+        if (i >= param - 1) {
+          ma[figures[j].key] = closeSums[j] / param
+          closeSums[j] -= kLineDataList[i - (param - 1)].close
+        }
+      })
+      // 如果有值的情况下,这里每一项的数据格式应该是 { ma1: xxx, ma2: xxx }
+      // 每个key需要和figures中的子项key对应的值一致
+      return ma
+    })
+  }
+}
{
+  name: 'MA',
+  shortName: 'MA',
+  calcParams: [5, 10],
+  figures: [
+    { key: 'ma1', title: 'MA5: ', type: 'line' },
+    { key: 'ma2', title: 'MA10: ', type: 'line' }
+  ],
+  // 当计算参数改变时,希望提示的和参数一样,即title的值需要改变
+  regenerateFigures: (params) => {
+    return params.map((p, i) => {
+      return { key: \`ma\${i + 1}\`, title: \`MA\${p}: \`, type: 'line' }
+    })
+  },
+  // 计算结果
+  calc: (kLineDataList, { calcParams, figures }) => {
+    // 注意:返回数据个数需要和kLineDataList的数据个数一致,如果无值,用{}代替即可。
+    // 计算参数最好取回调参数calcParams,如果不是,后续计算参数发生变化的时候,这里计算不能及时响应
+    const closeSums = []
+    return kLineDataList.map((kLineData, i) => {
+      const ma = {}
+      const close = kLineData. close
+      calcParams.forEach((param, j) => {
+        closeSums[j] = (closeSums[j] || 0) + close
+        if (i >= param - 1) {
+          ma[figures[j].key] = closeSums[j] / param
+          closeSums[j] -= kLineDataList[i - (param - 1)].close
+        }
+      })
+      // 如果有值的情况下,这里每一项的数据格式应该是 { ma1: xxx, ma2: xxx }
+      // 每个key需要和figures中的子项key对应的值一致
+      return ma
+    })
+  }
+}

这样一个自定义指标就完成了。

`,17),e=[o];function t(c,r,y,F,D,i){return n(),a("div",null,e)}const C=s(p,[["render",t]]);export{A as __pageData,C as default}; diff --git a/assets/guide_instance-api.md.d27a29d6.js b/assets/guide_instance-api.md.3f6b0b24.js similarity index 99% rename from assets/guide_instance-api.md.d27a29d6.js rename to assets/guide_instance-api.md.3f6b0b24.js index 685d46beb..cb145b185 100644 --- a/assets/guide_instance-api.md.d27a29d6.js +++ b/assets/guide_instance-api.md.3f6b0b24.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"实例API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/instance-api.md","filePath":"guide/instance-api.md","lastUpdated":1689272235000}'),p={name:"guide/instance-api.md"},o=l(`

实例API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

获取dom容器。

  • paneId 窗口id,缺省则是整个图表容器
  • position 可选项为'root','main'和'yAxis',缺省则是'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"实例API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/instance-api.md","filePath":"guide/instance-api.md","lastUpdated":1691074246000}'),p={name:"guide/instance-api.md"},o=l(`

实例API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

获取dom容器。

  • paneId 窗口id,缺省则是整个图表容器
  • position 可选项为'root','main'和'yAxis',缺省则是'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
   width: number
   height: number
   left: number
diff --git a/assets/guide_instance-api.md.3f6b0b24.lean.js b/assets/guide_instance-api.md.3f6b0b24.lean.js
new file mode 100644
index 000000000..cb145b185
--- /dev/null
+++ b/assets/guide_instance-api.md.3f6b0b24.lean.js
@@ -0,0 +1,1009 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const F=JSON.parse('{"title":"实例API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/instance-api.md","filePath":"guide/instance-api.md","lastUpdated":1691074246000}'),p={name:"guide/instance-api.md"},o=l(`

实例API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

获取dom容器。

  • paneId 窗口id,缺省则是整个图表容器
  • position 可选项为'root','main'和'yAxis',缺省则是'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+  width: number
+  height: number
+  left: number
+  top: number
+  right: number
+  bottom: number
+}
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+  width: number
+  height: number
+  left: number
+  top: number
+  right: number
+  bottom: number
+}

获取尺寸。

  • paneId 窗口id,缺省则是整个图表容器
  • position 位置,支持rootmainyAxis,缺省则是root

setStyles(styles)

typescript
(styles: string | object) => HTMLElement
(styles: string | object) => HTMLElement

设置样式配置。

  • styles 样式配置,可以是通过registerStyles注册进去的样式名。当是对象时,详情可参阅样式,支持合并。

getStyles()

typescript
() => object
() => object

获取样式配置,返回完整类型参阅样式

setPriceVolumePrecision(pricePrecision, volumePrecision)

typescript
(pricePrecision: number, volumePrecision: number) => void
(pricePrecision: number, volumePrecision: number) => void

设置价格和数量精度,同时技术指标系列是'price'或者'volume'也会受影响。

  • pricePrecision 价格精度
  • volumePrecision 数量精度

setTimezone(timezone)

typescript
(timezone: string) => void
(timezone: string) => void

设置时区。

  • timezone 时区名,如'Asia/Shanghai',如果不设置会自动获取本机时区,时区对应名字列表请参阅时区列表

getTimezone()

typescript
() => string
() => string

获取图表时区名。

setZoomEnabled(enabled)

typescript
(enabled: boolean) => void
(enabled: boolean) => void

设置是否缩放。

isZoomEnabled()

typescript
() => boolean
() => boolean

是否可以缩放。

setScrollEnabled(enabled)

typescript
(enabled: boolean) => void
(enabled: boolean) => void

设置是否可以拖拽滚动。

isScrollEnabled()

typescript
() => boolean
() => boolean

是否可以拖拽滚动。

setOffsetRightDistance(distance)

typescript
(distance: number) => void
(distance: number) => void

设置图表右边可以空出来的间隙。

getOffsetRightDistance()

typescript
() => number
() => number

获取图表右边可以空出来的间隙。

setLeftMinVisibleBarCount(barCount)

typescript
(barCount: number) => void
(barCount: number) => void

设置左边最小可见的蜡烛数量。

setRightMinVisibleBarCount(barCount)

typescript
(barCount: number) => void
(barCount: number) => void

设置右边最小可见的蜡烛数量。

setBarSpace(space)

typescript
(space: number) => void
(space: number) => void

设置图表单根蜡烛柱的宽度。

getBarSpace()

typescript
() => number
() => number

获取图表单根蜡烛柱的宽度。

getVisibleRange()

typescript
() => {
+  from: number
+  to: number
+  realFrom: number
+  realTo: number
+}
() => {
+  from: number
+  to: number
+  realFrom: number
+  realTo: number
+}

获取可见区间范围。

applyNewData(dataList, more, callback)

typescript
(
+  dataList:Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number,
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void
(
+  dataList:Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number,
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void

添加新数据,此方法会清空图表数据,不需要额外调用clearData方法。

  • dataList 是一个K线数据数组,数据类型详情可参阅数据源
  • more 告诉图表还有没有更多历史数据,可缺省,默认为true
  • callback 成功回调

applyMoreData(dataList, more, callback)

typescript
(
+  dataList:Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void
(
+  dataList:Array<{
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  }>,
+  more?: boolean,
+  callback?: () => void
+) => void

添加历史更多数据。

  • dataList 是一个K线数据数组,数据类型详情可参阅数据源
  • more 告诉图表还有没有更多历史数据,可缺省,默认为true
  • callback 成功回调

updateData(data, callback)

typescript
(
+  data: {
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  },
+  callback?: () => void
+) => void
(
+  data: {
+    timestamp: number
+    open: number
+    close: number
+    high: number
+    low: number
+    volume?: number
+    turnover?: number
+  },
+  callback?: () => void
+) => void

更新数据,目前只会匹配当前最后一条数据的时间戳,相同则覆盖,不同则追加。

  • data 单条k线数据,数据类型详情可参阅数据源
  • callback 成功回调

getDataList()

typescript
() => Array<{
+  timestamp: number
+  open: number
+  close: number
+  high: number
+  low: number
+  volume?: number
+  turnover?: number
+}>
() => Array<{
+  timestamp: number
+  open: number
+  close: number
+  high: number
+  low: number
+  volume?: number
+  turnover?: number
+}>

获取图表目前的数据源,返回数据类型可参阅数据源

clearData()

typescript
() => void
() => void

清空图表数据,一般情况下不用手动调用,为了避免重复绘制,这里只是清除数据,图表不会重绘。

loadMore(cb)

typescript
(cb: (timestamp: number | null) => void) => void
(cb: (timestamp: number | null) => void) => void

设置加载更多回调函数。

  • cb 是一个回调方法,timestamp为第一条数据的时间戳

createIndicator(value, isStack, paneOptions, callback)

typescript
(
+  value: string | {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>,
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    }
+    draw?: (params: object) => boolean
+  },
+  isStack?: boolean,
+  paneOptions?: {
+    id?: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  } | null,
+  callback?: () => void
+) => string | null
(
+  value: string | {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>,
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    }
+    draw?: (params: object) => boolean
+  },
+  isStack?: boolean,
+  paneOptions?: {
+    id?: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  } | null,
+  callback?: () => void
+) => string | null

创建一个技术指标,返回值是一个标识窗口的字符串,这非常重要,后续对该窗口的一些操作,都需要此标识。

  • value 技术指标名或者技术指标对象,当是对象时,类型和图表方法overrideIndicator的入参一致

  • isStack 是否覆盖

  • paneOptions 窗口配置信息,可缺省

    • id 窗口id,可缺省
    • height 窗口高度,可缺省
    • minHeight 窗口最小高度,可缺省
    • dragEnbaled 窗口是否可以拖拽调整高度,可缺省
    • gap 边距
      • top 上边距,值小余1则是百分比
      • bottom 下边距,值小余1则是百分比
    • axisOptions
      • scrollZoomEnabled 轴上是否可以滚动缩放
  • callback 指标创建完成回调方法

特殊的id

'candle_pane',主图的窗口id。

示例:

javascript
chart.createIndicator('MA', false, {
+  id: 'pane_1',
+  height: 100,
+  minHeight: 30,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+}, () => {})
chart.createIndicator('MA', false, {
+  id: 'pane_1',
+  height: 100,
+  minHeight: 30,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+}, () => {})

overrideIndicator(override, paneId, callback)

typescript
(
+  override: {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>,
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string 
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    }
+    draw?: (params: object) => boolean
+  },
+  paneId?: string | null,
+  callback?: () => void
+) => void
(
+  override: {
+    name: string
+    shortName?: string
+    precision?: number
+    calcParams?: any[]
+    shouldOhlc?: boolean
+    shouldFormatBigNumber?: boolean
+    visible?: boolean
+    extendData?: any
+    series?: 'normal' | 'price' | 'volume'
+    figures?: Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>
+    minValue?: number
+    maxValue?: number
+    styles?: object
+    calc?: (dataList: KLineData[], indicator: object) => Promise<object[]> | object[]
+    regenerateFigures?: (calcParms: any[]) => Array<{
+      key: string
+      title?: string
+      type?: string
+      baseValue?: number
+      styles?: (
+        data: object,
+        indicator: object,
+        defaultStyles: object
+      ) => {
+        style?: 'solid' | 'dashed' | 'stroke' | 'fill' | 'stroke_fill'
+        color?: string
+      }
+    }>,
+    createTooltipDataSource?: (params: object) => {
+      name?: string
+      calcParamsText?: string
+      values?: Array<{
+        title: string | {
+          text: string
+          color: string 
+        }
+        value: string | {
+          text: string
+          color: string
+        }
+      }>
+    }
+    draw?: (params: object) => boolean
+  },
+  paneId?: string | null,
+  callback?: () => void
+) => void

覆盖技术指标信息。

  • override 需要覆盖的一些参数
    • name 指标名,用于创建和操作的唯一标识
    • shortName 简短名字,用于显示
    • precision 精度
    • calcParams 计算参数
    • shouldOhlc 是否需要ohlc辅助图形
    • shouldFormatBigNumber 是否需要格式化大的数字。如1000转换成1k,1000000转换为1M等
    • visible 是否可见
    • extendData 扩展数据
    • series 指标系列,可选项有'normal','price'和'volume'
    • figures 图形配置
    • minValue 指定最小值
    • maxValue 指定最大值
    • styles 样式
    • calc 计算方法
    • regenerateFigures 重新生成图形信息方法
    • createTooltipDataSource 创建自定义提示信息方法
    • draw 自定义绘制方法
  • paneId 窗口id,缺省则设置所有
  • callback 成功回调

特殊的id

'candle_pane',主图的窗口id。

示例:

javascript
chart.overrideIndicator({
+  name: 'BOLL',
+  showName: 'BOLL'
+  calcParams: [20, 5.5],
+  precision: 4,
+  shouldOhlc: true,
+  shouldFormatBigNumber: false,
+  visible: true,
+  extendData: 2432435,
+  series: 'price',
+  figures: [],
+  minValue: null,
+  maxValue: null,
+  calc: () => [],
+  regenerateFigures: () => [],
+  draw: () => {},
+  styles: {
+  	bars:[{
+      style: 'fill,
+      borderStyle: 'solid,
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: '#26A69A',
+      downColor: '#EF5350',
+      noChangeColor: '#888888'
+    }],
+    lines: [{
+      size: 1,
+      style: 'solid',
+      dashedValue: [2, 2],
+      color: '#FF9600'
+    }],
+    circles: [{
+      style: 'fill,
+      borderStyle: 'solid,
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: '#26A69A',
+      downColor: '#EF5350',
+      noChangeColor: '#888888'
+    }]
+  }
+}, 'candle_pane', () => {})
chart.overrideIndicator({
+  name: 'BOLL',
+  showName: 'BOLL'
+  calcParams: [20, 5.5],
+  precision: 4,
+  shouldOhlc: true,
+  shouldFormatBigNumber: false,
+  visible: true,
+  extendData: 2432435,
+  series: 'price',
+  figures: [],
+  minValue: null,
+  maxValue: null,
+  calc: () => [],
+  regenerateFigures: () => [],
+  draw: () => {},
+  styles: {
+  	bars:[{
+      style: 'fill,
+      borderStyle: 'solid,
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: '#26A69A',
+      downColor: '#EF5350',
+      noChangeColor: '#888888'
+    }],
+    lines: [{
+      size: 1,
+      style: 'solid',
+      dashedValue: [2, 2],
+      color: '#FF9600'
+    }],
+    circles: [{
+      style: 'fill,
+      borderStyle: 'solid,
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: '#26A69A',
+      downColor: '#EF5350',
+      noChangeColor: '#888888'
+    }]
+  }
+}, 'candle_pane', () => {})

getIndicatorByPaneId(paneId, name)

typescript
(paneId?: string, name?: string) => object
(paneId?: string, name?: string) => object

根据窗口id获取技术指标信息。

  • paneId 窗口id,即调用createIndicator方法时返回的窗口标识,可缺省,缺省则返回所有。
  • name 技术指标名

特殊的id

'candle_pane',主图的窗口id。

removeIndicator(paneId, name)

typescript
(paneId: string, name?: string) => object
(paneId: string, name?: string) => object

移除技术指标。

  • paneId 窗口id,即调用createIndicator方法时返回的窗口标识
  • name 技术指标名,如果缺省,则会移除所有

特殊的id

'candle_pane',主图的窗口id。

createOverlay(value, paneId)

typescript
(
+  value: string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  } | Array<string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }>,
+  paneId?: string
+) => string | null
(
+  value: string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  } | Array<string | {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }>,
+  paneId?: string
+) => string | null

创建覆盖物,返回一个字符串类型的标识。

  • value 覆盖物名或者对象,当是对象时,参数和overrideOverlay一致
  • paneId 窗口id,可缺省

特殊的id

'candle_pane',主图的窗口id。

示例:

javascript
chart.createOverlay({
+  name: 'segment',
+  id: 'segment_1'
+  groupId: 'segment',
+  points: [
+    { timestamp: 1614171282000, value: 18987 },
+    { timestamp: 1614171202000, value: 16098 },
+  ],
+  styles: {
+    line: {
+      style: 'solid',
+      dashedValue: [2, 2]
+      color: '#f00',
+      size: 2
+    }
+  },
+  lock: false,
+  visible: true,
+  zLevel: 0,
+  mode: 'weak_magnet',
+  modeSensitivity: 8,
+  extendData: 'xxxxxxxx',
+  needDefaultPointFigure: false,
+  needDefaultXAxisFigure: false,
+  needDefaultYAxisFigure: false,
+  onDrawStart: function (event) { console.log(event) },
+  onDrawing: function (event) { console.log(event) },
+  onDrawEnd: function (event) { console.log(event) },
+  onClick: function (event) { console.log(event) },
+  onDoubleClick: function (event) { console.log(event) },
+  onRightClick: function (event) {
+    console.log(event)
+    return false
+  },
+  onMouseEnter: function (event) { console.log(event) },
+  onMouseLeave: function (event) { console.log(event) },
+  onPressedMoveStart: function (event) { console.log(event) },
+  onPressedMoving: function (event) { console.log(event) },
+  onPressedMoveEnd: function (event) { console.log(event) },
+  onRemoved: function (event) { console.log(event) },
+  onSelected: function (event) { console.log(event) },
+  onDeselected: function (event) { console.log(event) }
+})
chart.createOverlay({
+  name: 'segment',
+  id: 'segment_1'
+  groupId: 'segment',
+  points: [
+    { timestamp: 1614171282000, value: 18987 },
+    { timestamp: 1614171202000, value: 16098 },
+  ],
+  styles: {
+    line: {
+      style: 'solid',
+      dashedValue: [2, 2]
+      color: '#f00',
+      size: 2
+    }
+  },
+  lock: false,
+  visible: true,
+  zLevel: 0,
+  mode: 'weak_magnet',
+  modeSensitivity: 8,
+  extendData: 'xxxxxxxx',
+  needDefaultPointFigure: false,
+  needDefaultXAxisFigure: false,
+  needDefaultYAxisFigure: false,
+  onDrawStart: function (event) { console.log(event) },
+  onDrawing: function (event) { console.log(event) },
+  onDrawEnd: function (event) { console.log(event) },
+  onClick: function (event) { console.log(event) },
+  onDoubleClick: function (event) { console.log(event) },
+  onRightClick: function (event) {
+    console.log(event)
+    return false
+  },
+  onMouseEnter: function (event) { console.log(event) },
+  onMouseLeave: function (event) { console.log(event) },
+  onPressedMoveStart: function (event) { console.log(event) },
+  onPressedMoving: function (event) { console.log(event) },
+  onPressedMoveEnd: function (event) { console.log(event) },
+  onRemoved: function (event) { console.log(event) },
+  onSelected: function (event) { console.log(event) },
+  onDeselected: function (event) { console.log(event) }
+})

getOverlayById(id)

typescript
(id: string) => object
(id: string) => object

根据id获取覆盖物信息。

  • id 调用createOverlay方法是返回的标识

overrideOverlay(override)

typescript
(
+  override: {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }
+) => string | null
(
+  override: {
+    name: string
+    id?: string
+    groupId?: string
+    lock?: boolean
+    visible?: boolean
+    zLevel?: number
+    needDefaultPointFigure?: boolean
+    needDefaultXAxisFigure?: boolean
+    needDefaultYAxisFigure?: boolean
+    mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+    modeSensitivity?: number
+    points?: Array<{
+      timestamp?: number
+      dataIndex?: number
+      value?: number
+    }>
+    extendData?: any
+    styles?: object
+    onDrawStart?: (event: object) => boolean
+    onDrawing?: (event: object) => boolean
+    onDrawEnd?: (event: object) => boolean
+    onClick?: (event: object) => boolean
+    onDoubleClick?: (event: object) => boolean
+    onRightClick?: (event: object) => boolean
+    onPressedMoveStart?: (event: object) => boolean
+    onPressedMoving?: (event: object) => boolean
+    onPressedMoveEnd?: (event: object) => boolean
+    onMouseEnter?: (event: object) => boolean
+    onMouseLeave?: (event: object) => boolean
+    onRemoved?: (event: object) => boolean
+    onSelected?: (event: object) => boolean
+    onDeselected?: (event: object) => boolean
+  }
+) => string | null

覆盖已绘制的覆盖物。

  • override 需要覆盖的参数
    • name 覆盖物名,用于创建的唯一标识
    • id 覆盖物标识,如果id存在,则会以id为依据去覆盖
    • groupId 编组id
    • lock 是否锁定不让拖动
    • visible 是否可见
    • zLevel 绘制层级,值越大越靠前显示
    • needDefaultPointFigure 是否需要默认的点对应的图形
    • needDefaultXAxisFigure 是否需要默认的x轴上的图形
    • needDefaultYAxisFigure 是否需要默认的y轴上的图形
    • mode 模式,可选项有'normal','weak_magnet'和'strong_magnet'
    • modeSensitivity 模式灵敏度,仅 mode 是 weak_magnet 时有效
    • points 点信息
    • extendData 扩展数据
    • styles 样式
    • onDrawStart 开始绘制事件
    • onDrawing 绘制中事件
    • onDrawEnd 绘制结束事件
    • onClick 点击事件
    • onDoubleClick 双击事件
    • onRightClick 右击事件
    • onPressedMoveStart 按住开始移动事件
    • onPressedMoving 按住移动中事件
    • onPressedMoveEnd 按住移动结束事件
    • onMouseEnter 鼠标移入事件
    • onMouseLeave 鼠标移出事件
    • onRemoved 删除事件
    • onSelected 选中事件
    • onDeselected 取消选中事件

示例:

javascript
chart.overrideOverlay({
+  name: 'segment',
+  id: 'segment_1',
+  groupId: 'segment',
+  points: [
+    { timestamp: 1614171282000, value: 18987 },
+    { timestamp: 1614171202000, value: 16098 },
+  ],
+  styles: {
+    line: {
+      style: 'solid',
+      dashedValue: [2, 2]
+      color: '#f00',
+      size: 2
+    }
+  },
+  lock: false,
+  visible: true,
+  zLevel: 0,
+  mode: 'weak_magnet',
+  modeSensitivity: 8,
+  extendData: 'xxxxxxxx',
+  needDefaultPointFigure: false,
+  needDefaultXAxisFigure: false,
+  needDefaultYAxisFigure: false,
+  onDrawStart: function (event) { console.log(event) },
+  onDrawing: function (event) { console.log(event) },
+  onDrawEnd: function (event) { console.log(event) },
+  onClick: function (event) { console.log(event) },
+  onDoubleClick: function (event) { console.log(event) },
+  onRightClick: function (event) {
+    console.log(event)
+    return false
+  },
+  onMouseEnter: function (event) { console.log(event) },
+  onMouseLeave: function (event) { console.log(event) },
+  onPressedMoveStart: function (event) { console.log(event) },
+  onPressedMoving: function (event) { console.log(event) },
+  onPressedMoveEnd: function (event) { console.log(event) },
+  onRemoved: function (event) { console.log(event) },
+  onSelected: function (event) { console.log(event) },
+  onDeselected: function (event) { console.log(event) }
+})
chart.overrideOverlay({
+  name: 'segment',
+  id: 'segment_1',
+  groupId: 'segment',
+  points: [
+    { timestamp: 1614171282000, value: 18987 },
+    { timestamp: 1614171202000, value: 16098 },
+  ],
+  styles: {
+    line: {
+      style: 'solid',
+      dashedValue: [2, 2]
+      color: '#f00',
+      size: 2
+    }
+  },
+  lock: false,
+  visible: true,
+  zLevel: 0,
+  mode: 'weak_magnet',
+  modeSensitivity: 8,
+  extendData: 'xxxxxxxx',
+  needDefaultPointFigure: false,
+  needDefaultXAxisFigure: false,
+  needDefaultYAxisFigure: false,
+  onDrawStart: function (event) { console.log(event) },
+  onDrawing: function (event) { console.log(event) },
+  onDrawEnd: function (event) { console.log(event) },
+  onClick: function (event) { console.log(event) },
+  onDoubleClick: function (event) { console.log(event) },
+  onRightClick: function (event) {
+    console.log(event)
+    return false
+  },
+  onMouseEnter: function (event) { console.log(event) },
+  onMouseLeave: function (event) { console.log(event) },
+  onPressedMoveStart: function (event) { console.log(event) },
+  onPressedMoving: function (event) { console.log(event) },
+  onPressedMoveEnd: function (event) { console.log(event) },
+  onRemoved: function (event) { console.log(event) },
+  onSelected: function (event) { console.log(event) },
+  onDeselected: function (event) { console.log(event) }
+})

removeOverlay(remove)

typescript
(
+  remove: string | {
+    id?: string
+    groupId?: string
+    name?: string
+  }
+) => void
(
+  remove: string | {
+    id?: string
+    groupId?: string
+    name?: string
+  }
+) => void

移除图形。

  • id 调用createOverlay方法是返回的标识
  • groupId 编组id
  • name 覆盖物名称

删除一个html元素

  • paneId 窗口id,缺省则删除所有
  • htmlId 创建时候的id,可以是单个id,也可以是id组成的数组,缺省则删除对应窗口上所有的

scrollByDistance(distance, animationDuration)

typescript
(distance: number, animationDuration?: number) => void
(distance: number, animationDuration?: number) => void

滚动一定的距离。

  • distance 距离
  • animationDuration 动画时间,可以缺省,缺省则无动画

scrollToRealTime(animationDuration)

typescript
(distance: number, animationDuration?: number) => void
(distance: number, animationDuration?: number) => void

滚动到最初的位置。

  • animationDuration 动画时间,可以缺省,缺省则无动画

scrollToDataIndex(dataIndex, animationDuration)

typescript
(dataIndex: number, animationDuration?: number) => void
(dataIndex: number, animationDuration?: number) => void

滚动到指定的位置。

  • dataIndex 数据的索引
  • animationDuration 动画时间,可以缺省,缺省则无动画

scrollToTimestamp(timestamp, animationDuration)

typescript
(timestamp: number, animationDuration?: number) => void
(timestamp: number, animationDuration?: number) => void

滚动到指定时间戳。

  • timestamp 时间戳
  • animationDuration 动画时间,可以缺省,缺省则无动画

zoomAtCoordinate(scale, coordinate, animationDuration)

typescript
(
+  scale: number,
+  coordinate?: {
+    x: number
+    y: number
+  },
+  animationDuration?: number
+) => void
(
+  scale: number,
+  coordinate?: {
+    x: number
+    y: number
+  },
+  animationDuration?: number
+) => void

在某个坐标点缩放。

  • scale 缩放比例
  • coordinate 坐标点,可缺省,缺省则在图表中间位置缩放
  • animationDuration 动画时间,可以缺省,缺省则无动画

zoomAtDataIndex(scale, dataIndex, animationDuration)

typescript
(scale: number, dataIndex: number, animationDuration?: number) => void
(scale: number, dataIndex: number, animationDuration?: number) => void

在某个位置缩放。

  • scale 缩放比例
  • dataIndex 数据的索引
  • animationDuration 动画时间,可以缺省,缺省则无动画

zoomAtTimestamp(scale, timestamp, animationDuration)

typescript
(scale: number, timestamp: number, animationDuration?: number) => void
(scale: number, timestamp: number, animationDuration?: number) => void

在指定时间戳上缩放。

  • scale 缩放比例
  • timestamp 时间戳
  • animationDuration 动画时间,可以缺省,缺省则无动画

setPaneOptions(options)

typescript
(
+  options: {
+    id: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  }
+) => void
(
+  options: {
+    id: string
+    height?: number
+    minHeight?: number
+    dragEnabled?: boolean
+    gap?: {
+      top?: number
+      bottom?: number
+    }
+    axisOptions?: {
+      scrollZoomEnabled?: boolean
+    }
+  }
+) => void

设置窗口配置。

  • paneOptions 窗口配置信息,可缺省
    • id 窗口id
    • height 窗口高度,可缺省
    • minHeight 窗口最小高度,可缺省
    • dragEnbaled 窗口是否可以拖拽调整高度,可缺省
    • gap 边距
      • top 上边距,值小余1则是百分比
      • bottom 下边距,值小余1则是百分比
    • axisOptions
      • scrollZoomEnabled 轴上是否可以滚动缩放

特殊的id

'candle_pane',主图的窗口id。

示例:

javascript
chart.setPaneOptions({
+  id: 'pane_1',
+  height: 100,
+  minHeight: 3,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+})
chart.setPaneOptions({
+  id: 'pane_1',
+  height: 100,
+  minHeight: 3,
+  dragEnabled: true,
+  gap: { top: 0.2, bottom: 0.1 },
+  axisOptions: { scrollZoomEnabled: true }
+})

executeAction(type, data)

typescript
(
+   type: 'onCrosshairChange',
+   data: any => void
+) => void
(
+   type: 'onCrosshairChange',
+   data: any => void
+) => void

执行图表动作

  • type 仅支持 'onCrosshairChange'
  • data 执行动作需要的数据

subscribeAction(type, callback)

typescript
(
+  type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+  callback: (data?: any) => void
+) => void
(
+  type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+  callback: (data?: any) => void
+) => void

订阅图表动作。

  • type 可选项为'onZoom','onScroll','onVisibleRangeChange','onCandleBarClick', 'onTooltipIconClick','onCrosshairChange'和'onPaneDrag'
  • callback 是一个回调方法

unsubscribeAction(type, callback)

typescript
(
+  type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+  callback?: (data?: any) => void
+) => void
(
+  type: 'onZoom' | 'onScroll' | 'onVisibleRangeChange' | 'onCrosshairChange' | 'onCandleBarClick' | 'onTooltipIconClick' | 'onPaneDrag',
+  callback?: (data?: any) => void
+) => void

取消订阅图表动作。

  • type 可选项为'onZoom','onScroll','onVisibleRangeChange','onCandleBarClick', 'onTooltipIconClick','onCrosshairChange'和'onPaneDrag'
  • callback 订阅时的回调方法,缺省则取消当前类型所有

convertToPixel(value, finder)

typescript
(
+  value: {
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  } | Array<{
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  }>,
+  finder: {
+    paneId?: string
+    absolute?: boolean
+  }
+) => { x: number?, y?: number } | Array<{ x?: number, y?: number }>
(
+  value: {
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  } | Array<{
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  }>,
+  finder: {
+    paneId?: string
+    absolute?: boolean
+  }
+) => { x: number?, y?: number } | Array<{ x?: number, y?: number }>

将值转换成坐标。

  • value 需要转换的值,可以是当个对象,也可以是数组
    • dataIndex 数据索引,如果dataIndextimestamp同时存在,则依据索引转换
    • timestamp 时间戳
    • value 对应y轴的值
  • finder 过滤条件
    • paneId 窗口id
    • absolute 是否是绝对坐标,只作用于y轴

convertFromPixel(coordinate, finder)

typescript
(
+  coordinate: {
+    x?: number
+    y?: number
+  } | Array<{
+    x?: number
+    y?: number
+  },
+  finder: {
+    paneId?: string
+    absolute?: boolean
+  }
+) => {
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  } | Array<{
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  }>
(
+  coordinate: {
+    x?: number
+    y?: number
+  } | Array<{
+    x?: number
+    y?: number
+  },
+  finder: {
+    paneId?: string
+    absolute?: boolean
+  }
+) => {
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  } | Array<{
+    dataIndex?: number
+    timestamp?: number
+    value?: number
+  }>

将坐标转换成值。

  • coordinate 需要转换的值,可以是当个对象,也可以是数组
  • finder 过滤条件
    • paneId 窗口id
    • absolute 是否是绝对坐标,只作用于y轴

getConvertPictureUrl(includeOverlay, type, backgroundColor)

typescript
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string

获取图表转换成图片后的图片url。

  • includeOverlay 是否需要包含浮层,可缺省
  • type 转换后的图片类型,类型是'png'、'jpeg'、'bmp'三种中的一种,可缺省,默认为'jpeg'
  • backgroundColor 背景色,可缺省,默认为'#FFFFFF'

resize()

typescript
() => void
() => void

调整图表大小,总是会填充容器大小。

注意

此方法会重新计算整个图表各个模块的大小,频繁调用可能会影响到性能,调用请谨慎。

`,192),e=[o];function t(c,r,y,D,C,A){return n(),a("div",null,e)}const E=s(p,[["render",t]]);export{F as __pageData,E as default}; diff --git a/assets/guide_instance-api.md.d27a29d6.lean.js b/assets/guide_instance-api.md.d27a29d6.lean.js deleted file mode 100644 index ecc54a1b6..000000000 --- a/assets/guide_instance-api.md.d27a29d6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const F=JSON.parse('{"title":"实例API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/instance-api.md","filePath":"guide/instance-api.md","lastUpdated":1689272235000}'),p={name:"guide/instance-api.md"},o=l("",192),e=[o];function t(c,r,y,D,C,A){return n(),a("div",null,e)}const E=s(p,[["render",t]]);export{F as __pageData,E as default}; diff --git a/assets/guide_overlay.md.b20e5b98.js b/assets/guide_overlay.md.59e828be.js similarity index 99% rename from assets/guide_overlay.md.b20e5b98.js rename to assets/guide_overlay.md.59e828be.js index fab9ce7cf..94874d8b9 100644 --- a/assets/guide_overlay.md.b20e5b98.js +++ b/assets/guide_overlay.md.59e828be.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const E=JSON.parse('{"title":"覆盖物","description":"","frontmatter":{},"headers":[],"relativePath":"guide/overlay.md","filePath":"guide/overlay.md","lastUpdated":1689272235000}'),p={name:"guide/overlay.md"},o=l(`

覆盖物

本文档介绍了图表内置的覆盖物和如何自定义一个覆盖物。

内置覆盖物类型

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelStraightLine, fibonacciLine, simpleAnnotation, simpleTag

自定义覆盖物

自定义一个覆盖物,然后通过klinecharts.registerOverlay 全局添加,添加到图表即可和内置覆盖物一样去使用。

属性说明

typescript
{
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const E=JSON.parse('{"title":"覆盖物","description":"","frontmatter":{},"headers":[],"relativePath":"guide/overlay.md","filePath":"guide/overlay.md","lastUpdated":1691074246000}'),p={name:"guide/overlay.md"},o=l(`

覆盖物

本文档介绍了图表内置的覆盖物和如何自定义一个覆盖物。

内置覆盖物类型

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelStraightLine, fibonacciLine, simpleAnnotation, simpleTag

自定义覆盖物

自定义一个覆盖物,然后通过klinecharts.registerOverlay 全局添加,添加到图表即可和内置覆盖物一样去使用。

属性说明

typescript
{
   // 名称,必须字段,作为覆盖物创建的唯一标识
   name: string
 
diff --git a/assets/guide_overlay.md.59e828be.lean.js b/assets/guide_overlay.md.59e828be.lean.js
new file mode 100644
index 000000000..94874d8b9
--- /dev/null
+++ b/assets/guide_overlay.md.59e828be.lean.js
@@ -0,0 +1,437 @@
+import{_ as s,v as n,b as a,R as l}from"./chunks/framework.3ac7bdc3.js";const E=JSON.parse('{"title":"覆盖物","description":"","frontmatter":{},"headers":[],"relativePath":"guide/overlay.md","filePath":"guide/overlay.md","lastUpdated":1691074246000}'),p={name:"guide/overlay.md"},o=l(`

覆盖物

本文档介绍了图表内置的覆盖物和如何自定义一个覆盖物。

内置覆盖物类型

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelStraightLine, fibonacciLine, simpleAnnotation, simpleTag

自定义覆盖物

自定义一个覆盖物,然后通过klinecharts.registerOverlay 全局添加,添加到图表即可和内置覆盖物一样去使用。

属性说明

typescript
{
+  // 名称,必须字段,作为覆盖物创建的唯一标识
+  name: string
+
+  // 总共需要多少步操作才行绘制完成,非必须
+  totalStep?: number
+
+  // 是否锁定,不触发事件,非必须
+  lock?: boolean
+
+  // 是否可见
+  visible?: boolean
+
+  // 绘制层级,值越大越靠前显示
+  zLevel?: number
+
+  // 是否需要默认的点对应的图形,非必须
+  needDefaultPointFigure?: boolean
+
+  // 是否需要默认的X轴上的图形,非必须
+  needDefaultXAxisFigure?: boolean
+
+  // 是否需要默认的Y轴上的图形,非必须
+  needDefaultYAxisFigure?: boolean
+
+  // 模式,可选项为\`normal\`,\`weak_magnet\`,\`strong_magnet\`,非必须
+  mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+
+  // 模式灵敏度,仅 mode 是 weak_magnet 时有效
+  modeSensitivity?: number
+
+  // 点信息,非必须
+  points?: Array<{
+    // 时间戳
+    timestamp: number
+    // 数据索引
+    dataIndex?: number
+    // 对应y轴的值
+    value?: number
+  }>,
+
+  // 扩展数据,非必须
+  extendData?: any
+
+  // 样式,非必须,类型参与[样式]中的overlay
+  styles?: OverlayStyle
+
+  // 创建点对应的图形,非必须
+  createPointFigures: ({
+    // 覆盖物实例
+    overlay: Overlay
+    // points对应的坐标信息
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+    // 窗口尺寸信息
+    bounding: {
+      // 宽
+      width: number
+      // 高
+      height: number
+      // 距离左边距离
+      left: number
+      // 距离右边距离
+      right: number
+      // 距离顶部距离
+      top: number
+      // 距离底部距离
+      bottom: number
+    }
+    // 蜡烛柱的尺寸信息
+    barSpace: {
+      // 蜡烛柱尺寸
+      bar: number
+      halfBar: number
+      // 蜡烛柱不包含蜡烛柱之间间隙的尺寸
+      gapBar: number
+      halfGapBar: number
+    },
+    // 精度
+    precision: {
+      // 价格精度
+      price: number
+      // 数量精度
+      volume: number
+    }
+    // 千分符
+    thousandsSeparator: string
+    // 格式化日期和时间的对象的构造器,详情参阅 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
+    dateTimeFormat: Intl.DateTimeFormat
+    // 默认样式,即全局样式配置中的overlay,类型参与[样式]中的overlay
+    defaultStyles: OverlayStyle
+     // x轴组件,内置一些转换方法
+    xAxis: XAxis
+    // y轴组件,内置一些转换方法
+    yAxis: YAxis
+  }) => ({
+    // 无特殊含义,可用于扩展字段
+    key?: string
+    // 图形类型,类型为klinecharts.getSupportFigures返回值中的一种
+    type: string
+    // type对应的图形的属性
+    attrs: any | any[]
+    // type对应的图形的样式
+    styles?: any
+    // 是否忽略事件
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }) | Array<{
+    key?: string
+    type: string
+    attrs: any | any[]
+    styles?: any
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }>
+
+  // 创建X轴上的图形,非必须,参数和返回值和\`createPointFigures\`一致
+  createXAxisFigures?: OverlayCreateFiguresCallback
+
+  // 创建Y轴上的图形,非必须,参数和返回值和\`createPointFigures\`一致
+  createYAxisFigures?: OverlayCreateFiguresCallback
+
+  // 处理在绘制过程中移动操作,可缺省,移动绘制过程中触发
+  performEventMoveForDrawing?: ({
+    // 当前步骤
+    currentStep: number
+    // 模式
+    mode: 'normal' | 'weak_magnet' | 'strong_magnet'
+    // 点信息
+    points: Array<{
+      // 时间戳
+      timestamp: number
+      // 数据索引
+      dataIndex?: number
+      // 对应y轴的值
+      value?: number
+    }>
+    // 事件所在点的索引
+    performPointIndex
+    // 事件所在点的信息
+    performPoint
+  }) => void
+
+  // 处理按住移动操作,可缺省,按住某个操作点移动过程中触发
+  // 回调参数和\`performEventMoveForDrawing\`一致
+  performEventPressedMove?: (params: OverlayPerformEventParams) => void
+
+  // 绘制开始回调事件,可缺省
+  onDrawStart?: (event: OverlayEvent) => boolean
+
+  // 绘制过程中回调事件,可缺省
+  onDrawing?: (event: OverlayEvent) => boolean
+
+  // 绘制结束回调事件,可缺省
+  onDrawEnd?: (event: OverlayEvent) => boolean
+
+  // 点击回调事件,可缺省
+  onClick?: (event: OverlayEvent) => boolean
+
+  // 双击回调事件,可缺省
+  onDoubleClick?: (event: OverlayEvent) => boolean
+
+  // 右击回调事件,可缺省,需要返回一个boolean类型的值,如果返回true,内置的右击删除将无效
+  onRightClick?: (event: OverlayEvent) => boolean
+
+  // 按住拖动开始回调事件,可缺省
+  onPressedMoveStart?: (event: OverlayEvent) => boolean
+
+  // 按住拖动回调事件,可缺省  
+  onPressedMoving?: (event: OverlayEvent) => boolean
+
+  // 按住拖动结束回调事件,可缺省
+  onPressedMoveEnd: (event: OverlayEvent) => boolean
+
+  // 鼠标移入事件,可缺省
+  onMouseEnter?: (event: OverlayEvent) => boolean
+
+  // 鼠标移出事件,可缺省
+  onMouseLeave?: (event: OverlayEvent) => boolean
+
+  // 删除回调事件,可缺省
+  onRemoved?: (event: OverlayEvent) => boolean
+
+  // 选中回调事件,可缺省
+  onSelected?: (event: OverlayEvent) => boolean
+
+  // 取消回调事件,可缺省
+  onDeselected?: (event: OverlayEvent) => boolean
+}
{
+  // 名称,必须字段,作为覆盖物创建的唯一标识
+  name: string
+
+  // 总共需要多少步操作才行绘制完成,非必须
+  totalStep?: number
+
+  // 是否锁定,不触发事件,非必须
+  lock?: boolean
+
+  // 是否可见
+  visible?: boolean
+
+  // 绘制层级,值越大越靠前显示
+  zLevel?: number
+
+  // 是否需要默认的点对应的图形,非必须
+  needDefaultPointFigure?: boolean
+
+  // 是否需要默认的X轴上的图形,非必须
+  needDefaultXAxisFigure?: boolean
+
+  // 是否需要默认的Y轴上的图形,非必须
+  needDefaultYAxisFigure?: boolean
+
+  // 模式,可选项为\`normal\`,\`weak_magnet\`,\`strong_magnet\`,非必须
+  mode?: 'normal' | 'weak_magnet' | 'strong_magnet'
+
+  // 模式灵敏度,仅 mode 是 weak_magnet 时有效
+  modeSensitivity?: number
+
+  // 点信息,非必须
+  points?: Array<{
+    // 时间戳
+    timestamp: number
+    // 数据索引
+    dataIndex?: number
+    // 对应y轴的值
+    value?: number
+  }>,
+
+  // 扩展数据,非必须
+  extendData?: any
+
+  // 样式,非必须,类型参与[样式]中的overlay
+  styles?: OverlayStyle
+
+  // 创建点对应的图形,非必须
+  createPointFigures: ({
+    // 覆盖物实例
+    overlay: Overlay
+    // points对应的坐标信息
+    coordinates: Array<{
+      x: number
+      y: number
+    }>
+    // 窗口尺寸信息
+    bounding: {
+      // 宽
+      width: number
+      // 高
+      height: number
+      // 距离左边距离
+      left: number
+      // 距离右边距离
+      right: number
+      // 距离顶部距离
+      top: number
+      // 距离底部距离
+      bottom: number
+    }
+    // 蜡烛柱的尺寸信息
+    barSpace: {
+      // 蜡烛柱尺寸
+      bar: number
+      halfBar: number
+      // 蜡烛柱不包含蜡烛柱之间间隙的尺寸
+      gapBar: number
+      halfGapBar: number
+    },
+    // 精度
+    precision: {
+      // 价格精度
+      price: number
+      // 数量精度
+      volume: number
+    }
+    // 千分符
+    thousandsSeparator: string
+    // 格式化日期和时间的对象的构造器,详情参阅 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
+    dateTimeFormat: Intl.DateTimeFormat
+    // 默认样式,即全局样式配置中的overlay,类型参与[样式]中的overlay
+    defaultStyles: OverlayStyle
+     // x轴组件,内置一些转换方法
+    xAxis: XAxis
+    // y轴组件,内置一些转换方法
+    yAxis: YAxis
+  }) => ({
+    // 无特殊含义,可用于扩展字段
+    key?: string
+    // 图形类型,类型为klinecharts.getSupportFigures返回值中的一种
+    type: string
+    // type对应的图形的属性
+    attrs: any | any[]
+    // type对应的图形的样式
+    styles?: any
+    // 是否忽略事件
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }) | Array<{
+    key?: string
+    type: string
+    attrs: any | any[]
+    styles?: any
+    ignoreEvent?: boolean | OverlayFigureIgnoreEventType[]
+  }>
+
+  // 创建X轴上的图形,非必须,参数和返回值和\`createPointFigures\`一致
+  createXAxisFigures?: OverlayCreateFiguresCallback
+
+  // 创建Y轴上的图形,非必须,参数和返回值和\`createPointFigures\`一致
+  createYAxisFigures?: OverlayCreateFiguresCallback
+
+  // 处理在绘制过程中移动操作,可缺省,移动绘制过程中触发
+  performEventMoveForDrawing?: ({
+    // 当前步骤
+    currentStep: number
+    // 模式
+    mode: 'normal' | 'weak_magnet' | 'strong_magnet'
+    // 点信息
+    points: Array<{
+      // 时间戳
+      timestamp: number
+      // 数据索引
+      dataIndex?: number
+      // 对应y轴的值
+      value?: number
+    }>
+    // 事件所在点的索引
+    performPointIndex
+    // 事件所在点的信息
+    performPoint
+  }) => void
+
+  // 处理按住移动操作,可缺省,按住某个操作点移动过程中触发
+  // 回调参数和\`performEventMoveForDrawing\`一致
+  performEventPressedMove?: (params: OverlayPerformEventParams) => void
+
+  // 绘制开始回调事件,可缺省
+  onDrawStart?: (event: OverlayEvent) => boolean
+
+  // 绘制过程中回调事件,可缺省
+  onDrawing?: (event: OverlayEvent) => boolean
+
+  // 绘制结束回调事件,可缺省
+  onDrawEnd?: (event: OverlayEvent) => boolean
+
+  // 点击回调事件,可缺省
+  onClick?: (event: OverlayEvent) => boolean
+
+  // 双击回调事件,可缺省
+  onDoubleClick?: (event: OverlayEvent) => boolean
+
+  // 右击回调事件,可缺省,需要返回一个boolean类型的值,如果返回true,内置的右击删除将无效
+  onRightClick?: (event: OverlayEvent) => boolean
+
+  // 按住拖动开始回调事件,可缺省
+  onPressedMoveStart?: (event: OverlayEvent) => boolean
+
+  // 按住拖动回调事件,可缺省  
+  onPressedMoving?: (event: OverlayEvent) => boolean
+
+  // 按住拖动结束回调事件,可缺省
+  onPressedMoveEnd: (event: OverlayEvent) => boolean
+
+  // 鼠标移入事件,可缺省
+  onMouseEnter?: (event: OverlayEvent) => boolean
+
+  // 鼠标移出事件,可缺省
+  onMouseLeave?: (event: OverlayEvent) => boolean
+
+  // 删除回调事件,可缺省
+  onRemoved?: (event: OverlayEvent) => boolean
+
+  // 选中回调事件,可缺省
+  onSelected?: (event: OverlayEvent) => boolean
+
+  // 取消回调事件,可缺省
+  onDeselected?: (event: OverlayEvent) => boolean
+}

示例

以一个填充带边框的圆来具体说明如何配置。

javascript
{
+  // 名称
+  name: 'sampleCircle',
+
+  // 完成一个圆的绘制需要三个步骤
+  totalStep: 3,
+
+  // 创建点对应的图形信息
+  createPointFigures: ({ coordinates }) => {
+    if (coordinates.length === 2) {
+      const xDis = Math.abs(coordinates[0].x - coordinates[1].x)
+      const yDis = Math.abs(coordinates[0].y - coordinates[1].y)
+      // 确定对应点生成的圆的坐标
+      const radius = Math.sqrt(xDis * xDis + yDis * yDis)
+      // 图表内置了基础图形'circle',可以直接使用
+      return {
+        key: 'sampleCircle',
+        type: 'circle',
+        attrs: {
+          ...coordinates[0],
+          r: radius
+        },
+        styles: {
+          // 选择边框且填充,其它选择使用默认样式
+          style: 'stroke_fill'
+        }
+      }
+    }
+    return []
+  }
+}
{
+  // 名称
+  name: 'sampleCircle',
+
+  // 完成一个圆的绘制需要三个步骤
+  totalStep: 3,
+
+  // 创建点对应的图形信息
+  createPointFigures: ({ coordinates }) => {
+    if (coordinates.length === 2) {
+      const xDis = Math.abs(coordinates[0].x - coordinates[1].x)
+      const yDis = Math.abs(coordinates[0].y - coordinates[1].y)
+      // 确定对应点生成的圆的坐标
+      const radius = Math.sqrt(xDis * xDis + yDis * yDis)
+      // 图表内置了基础图形'circle',可以直接使用
+      return {
+        key: 'sampleCircle',
+        type: 'circle',
+        attrs: {
+          ...coordinates[0],
+          r: radius
+        },
+        styles: {
+          // 选择边框且填充,其它选择使用默认样式
+          style: 'stroke_fill'
+        }
+      }
+    }
+    return []
+  }
+}

这样一个自定义覆盖物就完成了。

`,12),e=[o];function t(c,r,y,F,D,i){return n(),a("div",null,e)}const C=s(p,[["render",t]]);export{E as __pageData,C as default}; diff --git a/assets/guide_overlay.md.b20e5b98.lean.js b/assets/guide_overlay.md.b20e5b98.lean.js deleted file mode 100644 index 79950ea7f..000000000 --- a/assets/guide_overlay.md.b20e5b98.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as a,V as l}from"./chunks/framework.410404a1.js";const E=JSON.parse('{"title":"覆盖物","description":"","frontmatter":{},"headers":[],"relativePath":"guide/overlay.md","filePath":"guide/overlay.md","lastUpdated":1689272235000}'),p={name:"guide/overlay.md"},o=l("",12),e=[o];function t(c,r,y,F,D,i){return n(),a("div",null,e)}const C=s(p,[["render",t]]);export{E as __pageData,C as default}; diff --git a/assets/guide_styles.md.b135c3aa.js b/assets/guide_styles.md.3ffd89df.js similarity index 99% rename from assets/guide_styles.md.b135c3aa.js rename to assets/guide_styles.md.3ffd89df.js index 4701c9718..5ab009e09 100644 --- a/assets/guide_styles.md.b135c3aa.js +++ b/assets/guide_styles.md.3ffd89df.js @@ -1,4 +1,4 @@ -import{S as a}from"./chunks/StyleExplain.c9b1fabe.js";import{o as l,c as p,L as o,k as s,a as n,V as e}from"./chunks/framework.410404a1.js";const c=s("h1",{id:"🎨-样式配置",tabindex:"-1"},[n("🎨 样式配置 "),s("a",{class:"header-anchor",href:"#🎨-样式配置","aria-label":'Permalink to "🎨 样式配置"'},"​")],-1),t=s("p",null,[n("图表上看到的不管是点还是线,基本都可以自定义样式。可以通过图表方法"),s("code",null,"init(ds, options)"),n("或者图表实例方法"),s("code",null,"setStyles(styles)"),n("进行更改。")],-1),r=s("h2",{id:"图解说明",tabindex:"-1"},[n("图解说明 "),s("a",{class:"header-anchor",href:"#图解说明","aria-label":'Permalink to "图解说明"'},"​")],-1),y=e(`

默认完整配置

javascript
{
+import{v as a,b as l,E as p,F as s,L as n,R as o}from"./chunks/framework.3ac7bdc3.js";import{S as e}from"./chunks/StyleExplain.b92d884c.js";const c=s("h1",{id:"🎨-样式配置",tabindex:"-1"},[n("🎨 样式配置 "),s("a",{class:"header-anchor",href:"#🎨-样式配置","aria-label":'Permalink to "🎨 样式配置"'},"​")],-1),t=s("p",null,[n("图表上看到的不管是点还是线,基本都可以自定义样式。可以通过图表方法"),s("code",null,"init(ds, options)"),n("或者图表实例方法"),s("code",null,"setStyles(styles)"),n("进行更改。")],-1),r=s("h2",{id:"图解说明",tabindex:"-1"},[n("图解说明 "),s("a",{class:"header-anchor",href:"#图解说明","aria-label":'Permalink to "图解说明"'},"​")],-1),y=o(`

默认完整配置

javascript
{
   // 网格线
   grid: {
     show: true,
@@ -1018,4 +1018,4 @@ import{S as a}from"./chunks/StyleExplain.c9b1fabe.js";import{o as l,c as p,L as
       backgroundColor: '#1677FF'
     }
   }
-}
`,2),d=JSON.parse('{"title":"🎨 样式配置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/styles.md","filePath":"guide/styles.md","lastUpdated":1689272235000}'),F={name:"guide/styles.md"},f=Object.assign(F,{setup(D){return(i,C)=>(l(),p("div",null,[c,t,r,o(a),y]))}});export{d as __pageData,f as default}; +}
`,2),d=JSON.parse('{"title":"🎨 样式配置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/styles.md","filePath":"guide/styles.md","lastUpdated":1691074246000}'),F={name:"guide/styles.md"},f=Object.assign(F,{setup(D){return(i,C)=>(a(),l("div",null,[c,t,r,p(e),y]))}});export{d as __pageData,f as default}; diff --git a/assets/guide_styles.md.3ffd89df.lean.js b/assets/guide_styles.md.3ffd89df.lean.js new file mode 100644 index 000000000..5ab009e09 --- /dev/null +++ b/assets/guide_styles.md.3ffd89df.lean.js @@ -0,0 +1,1021 @@ +import{v as a,b as l,E as p,F as s,L as n,R as o}from"./chunks/framework.3ac7bdc3.js";import{S as e}from"./chunks/StyleExplain.b92d884c.js";const c=s("h1",{id:"🎨-样式配置",tabindex:"-1"},[n("🎨 样式配置 "),s("a",{class:"header-anchor",href:"#🎨-样式配置","aria-label":'Permalink to "🎨 样式配置"'},"​")],-1),t=s("p",null,[n("图表上看到的不管是点还是线,基本都可以自定义样式。可以通过图表方法"),s("code",null,"init(ds, options)"),n("或者图表实例方法"),s("code",null,"setStyles(styles)"),n("进行更改。")],-1),r=s("h2",{id:"图解说明",tabindex:"-1"},[n("图解说明 "),s("a",{class:"header-anchor",href:"#图解说明","aria-label":'Permalink to "图解说明"'},"​")],-1),y=o(`

默认完整配置

javascript
{
+  // 网格线
+  grid: {
+    show: true,
+    horizontal: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    },
+    vertical: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    }
+  },
+  // 蜡烛图
+  candle: {
+    // 蜡烛图类型 'candle_solid'|'candle_stroke'|'candle_up_stroke'|'candle_down_stroke'|'ohlc'|'area'
+    type: 'candle_solid',
+    // 蜡烛柱
+    bar: {
+      upColor: '#2DC08E',
+      downColor: '#F92855',
+      noChangeColor: '#888888',
+      upBorderColor: '#2DC08E',
+      downBorderColor: '#F92855',
+      noChangeBorderColor: '#888888',
+      upWickColor: '#2DC08E',
+      downWickColor: '#F92855',
+      noChangeWickColor: '#888888'
+    },
+    // 面积图
+    area: {
+      lineSize: 2,
+      lineColor: '#2196F3',
+      value: 'close',
+      backgroundColor: [{
+        offset: 0,
+        color: 'rgba(33, 150, 243, 0.01)'
+      }, {
+        offset: 1,
+        color: 'rgba(33, 150, 243, 0.2)'
+      }]
+    },
+    priceMark: {
+      show: true,
+      // 最高价标记
+      high: {
+        show: true,
+        color: '#D9D9D9',
+        textOffset: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal'
+      },
+      // 最低价标记
+      low: {
+        show: true,
+        color: '#D9D9D9',
+        textOffset: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal',
+      },
+      // 最新价标记
+      last: {
+        show: true,
+        upColor: '#2DC08E',
+        downColor: '#F92855',
+        noChangeColor: '#888888',
+        line: {
+          show: true,
+          // 'solid' | 'dashed'
+          style: 'dashed',
+          dashedValue: [4, 4],
+          size: 1
+        },
+        text: {
+          show: true,
+          // 'fill' | 'stroke' | 'stroke_fill'
+          style: 'fill',
+          size: 12,
+          paddingLeft: 4,
+          paddingTop: 4,
+          paddingRight: 4,
+          paddingBottom: 4,
+          // 'solid' | 'dashed'
+          borderStyle: 'solid',
+          borderSize: 1,
+          borderDashedValue: [2, 2],
+          color: '#FFFFFF',
+          family: 'Helvetica Neue',
+          weight: 'normal',
+          borderRadius: 2
+        }
+      }
+    },
+    // 提示
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      // 自定义显示,可以是回调方法也可以是数组,当是一个方法时,需要返回一个数组
+      // 数组的子项类型为 { title, value }
+      // title和value可以是字符串或者对象,对象类型为 { text, color }
+      // title 或者 title.text 可以是国际化的 key,
+      // value 或者 value.text 支持字符串模版
+      // 例如:想显示时间,开盘和收盘,配置[{ title: 'time', value: '{time}' }, { title: 'open', value: '{open}' }, { title: 'close', value: '{close}' }]
+      custom: null
+      defaultValue: 'n/a',
+      rect: {
+        // 'fixed' | 'pointer'
+        position: 'fixed',
+        paddingLeft: 0,
+        paddingRight: 0,
+        paddingTop: 0,
+        paddingBottom: 6,
+        offsetLeft: 10,
+        offsetTop: 8,
+        offsetRight: 10,
+        offsetBottom: 8,
+        borderRadius: 4,
+        borderSize: 1,
+        borderColor: '#f2f3f5',
+        color: '#FEFEFE'
+      },
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginLeft: 10,
+        marginTop: 8,
+        marginRight: 6,
+        marginBottom: 0
+      },
+      // 示例:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // 类型有'left','middle','right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  // 技术指标
+  indicator: {
+    ohlc: {
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    },
+    bars: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    lines: [
+      {
+        // 'solid' | 'dashed'
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#FF9600'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#935EBD'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#2196F3'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#E11D74'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#01C5C4'
+      }
+    ],
+    circles: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    // 最新值标记
+    lastValueMark: {
+      show: false,
+      text: {
+        show: false,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderSize: 1,
+        borderDashedValue: [2, 2],
+        paddingLeft: 4,
+        paddingTop: 4,
+        paddingRight: 4,
+        paddingBottom: 4,
+        borderRadius: 2
+      }
+    },
+    // 提示
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      showName: true,
+      showParams: true,
+      defaultValue: 'n/a',
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginTop: 8,
+        marginRight: 10,
+        marginBottom: 0,
+        marginLeft: 6
+      },
+      // 示例:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // 类型有'left','middle','right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  // x轴
+  xAxis: {
+    show: true,
+    size: 'auto',
+    // x轴线
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    // x轴分割文字
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    // x轴分割线
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  // y轴
+  yAxis: {
+    show: true,
+    size: 'auto',
+    // 'left' | 'right'
+    position: 'right',
+    // 'normal' | 'percentage' | 'log'
+    type: 'normal',
+    inside: false,
+    reverse: false,
+    // y轴线
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    // x轴分割文字
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    // x轴分割线
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  // 图表之间的分割线
+  separator: {
+    size: 1,
+    color: '#888888',
+    fill: true,
+    activeBackgroundColor: 'rgba(230, 230, 230, .15)'
+  },
+  // 十字光标
+  crosshair: {
+    show: true,
+    // 十字光标水平线及文字
+    horizontal: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    },
+    // 十字光标垂直线及文字
+    vertical: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    }
+  },
+  // 覆盖物
+  overlay: {
+    point: {
+      color: '#1677FF',
+      borderColor: 'rgba(22, 119, 255, 0.35)',
+      borderSize: 1,
+      radius: 5,
+      activeColor: '#1677FF',
+      activeBorderColor: 'rgba(22, 119, 255, 0.35)',
+      activeBorderSize: 3,
+      activeRadius: 5
+    },
+    line: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      smooth: false,
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    rect: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      borderRadius: 0,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    polygon: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#1677FF',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    circle: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    arc: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    text: {
+      color: '#1677FF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal'
+    },
+    rectText: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#FFFFFF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2],
+      borderSize: 1,
+      borderRadius: 2,
+      borderColor: '#1677FF',
+      paddingLeft: 4,
+      paddingRight: 4,
+      paddingTop: 4,
+      paddingBottom: 4,
+      backgroundColor: '#1677FF'
+    }
+  }
+}
{
+  // 网格线
+  grid: {
+    show: true,
+    horizontal: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    },
+    vertical: {
+      show: true,
+      size: 1,
+      color: '#EDEDED',
+      style: 'dashed',
+      dashedValue: [2, 2]
+    }
+  },
+  // 蜡烛图
+  candle: {
+    // 蜡烛图类型 'candle_solid'|'candle_stroke'|'candle_up_stroke'|'candle_down_stroke'|'ohlc'|'area'
+    type: 'candle_solid',
+    // 蜡烛柱
+    bar: {
+      upColor: '#2DC08E',
+      downColor: '#F92855',
+      noChangeColor: '#888888',
+      upBorderColor: '#2DC08E',
+      downBorderColor: '#F92855',
+      noChangeBorderColor: '#888888',
+      upWickColor: '#2DC08E',
+      downWickColor: '#F92855',
+      noChangeWickColor: '#888888'
+    },
+    // 面积图
+    area: {
+      lineSize: 2,
+      lineColor: '#2196F3',
+      value: 'close',
+      backgroundColor: [{
+        offset: 0,
+        color: 'rgba(33, 150, 243, 0.01)'
+      }, {
+        offset: 1,
+        color: 'rgba(33, 150, 243, 0.2)'
+      }]
+    },
+    priceMark: {
+      show: true,
+      // 最高价标记
+      high: {
+        show: true,
+        color: '#D9D9D9',
+        textOffset: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal'
+      },
+      // 最低价标记
+      low: {
+        show: true,
+        color: '#D9D9D9',
+        textOffset: 5,
+        textSize: 10,
+        textFamily: 'Helvetica Neue',
+        textWeight: 'normal',
+      },
+      // 最新价标记
+      last: {
+        show: true,
+        upColor: '#2DC08E',
+        downColor: '#F92855',
+        noChangeColor: '#888888',
+        line: {
+          show: true,
+          // 'solid' | 'dashed'
+          style: 'dashed',
+          dashedValue: [4, 4],
+          size: 1
+        },
+        text: {
+          show: true,
+          // 'fill' | 'stroke' | 'stroke_fill'
+          style: 'fill',
+          size: 12,
+          paddingLeft: 4,
+          paddingTop: 4,
+          paddingRight: 4,
+          paddingBottom: 4,
+          // 'solid' | 'dashed'
+          borderStyle: 'solid',
+          borderSize: 1,
+          borderDashedValue: [2, 2],
+          color: '#FFFFFF',
+          family: 'Helvetica Neue',
+          weight: 'normal',
+          borderRadius: 2
+        }
+      }
+    },
+    // 提示
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      // 自定义显示,可以是回调方法也可以是数组,当是一个方法时,需要返回一个数组
+      // 数组的子项类型为 { title, value }
+      // title和value可以是字符串或者对象,对象类型为 { text, color }
+      // title 或者 title.text 可以是国际化的 key,
+      // value 或者 value.text 支持字符串模版
+      // 例如:想显示时间,开盘和收盘,配置[{ title: 'time', value: '{time}' }, { title: 'open', value: '{open}' }, { title: 'close', value: '{close}' }]
+      custom: null
+      defaultValue: 'n/a',
+      rect: {
+        // 'fixed' | 'pointer'
+        position: 'fixed',
+        paddingLeft: 0,
+        paddingRight: 0,
+        paddingTop: 0,
+        paddingBottom: 6,
+        offsetLeft: 10,
+        offsetTop: 8,
+        offsetRight: 10,
+        offsetBottom: 8,
+        borderRadius: 4,
+        borderSize: 1,
+        borderColor: '#f2f3f5',
+        color: '#FEFEFE'
+      },
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginLeft: 10,
+        marginTop: 8,
+        marginRight: 6,
+        marginBottom: 0
+      },
+      // 示例:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // 类型有'left','middle','right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  // 技术指标
+  indicator: {
+    ohlc: {
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    },
+    bars: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    lines: [
+      {
+        // 'solid' | 'dashed'
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#FF9600'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#935EBD'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#2196F3'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#E11D74'
+      }, {
+        style: 'solid',
+        smooth: false,
+        size: 1,
+        dashedValue: [2, 2],
+        color: '#01C5C4'
+      }
+    ],
+    circles: [{
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderSize: 1,
+      borderDashedValue: [2, 2],
+      upColor: 'rgba(45, 192, 142, .7)',
+      downColor: 'rgba(249, 40, 85, .7)',
+      noChangeColor: '#888888'
+    }],
+    // 最新值标记
+    lastValueMark: {
+      show: false,
+      text: {
+        show: false,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderSize: 1,
+        borderDashedValue: [2, 2],
+        paddingLeft: 4,
+        paddingTop: 4,
+        paddingRight: 4,
+        paddingBottom: 4,
+        borderRadius: 2
+      }
+    },
+    // 提示
+    tooltip: {
+      // 'always' | 'follow_cross' | 'none'
+      showRule: 'always',
+      // 'standard' | 'rect'
+      showType: 'standard',
+      showName: true,
+      showParams: true,
+      defaultValue: 'n/a',
+      text: {
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        color: '#D9D9D9',
+        marginTop: 8,
+        marginRight: 10,
+        marginBottom: 0,
+        marginLeft: 6
+      },
+      // 示例:
+      // [{
+      //   id: 'icon_id',
+      //   position: 'left', // 类型有'left','middle','right'
+      //   marginLeft: 8,
+      //   marginTop: 6,
+      //   marginRight: 0,
+      //   marginBottom: 0,
+      //   paddingLeft: 1,
+      //   paddingTop: 1,
+      //   paddingRight: 1,
+      //   paddingBottom: 1,
+      //   icon: '\\ue900',
+      //   fontFamily: 'iconfont',
+      //   size: 12,
+      //   color: '#76808F',
+      //   backgroundColor: 'rgba(33, 150, 243, 0.2)',
+      //   activeBackgroundColor: 'rgba(33, 150, 243, 0.4)'
+      // }]
+      icons: []
+    }
+  },
+  // x轴
+  xAxis: {
+    show: true,
+    size: 'auto',
+    // x轴线
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    // x轴分割文字
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    // x轴分割线
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  // y轴
+  yAxis: {
+    show: true,
+    size: 'auto',
+    // 'left' | 'right'
+    position: 'right',
+    // 'normal' | 'percentage' | 'log'
+    type: 'normal',
+    inside: false,
+    reverse: false,
+    // y轴线
+    axisLine: {
+      show: true,
+      color: '#888888',
+      size: 1
+    },
+    // x轴分割文字
+    tickText: {
+      show: true,
+      color: '#D9D9D9',
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      size: 12,
+      marginStrat: 4,
+      marginBottom: 4
+    },
+    // x轴分割线
+    tickLine: {
+      show: true,
+      size: 1,
+      length: 3,
+      color: '#888888'
+    }
+  },
+  // 图表之间的分割线
+  separator: {
+    size: 1,
+    color: '#888888',
+    fill: true,
+    activeBackgroundColor: 'rgba(230, 230, 230, .15)'
+  },
+  // 十字光标
+  crosshair: {
+    show: true,
+    // 十字光标水平线及文字
+    horizontal: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    },
+    // 十字光标垂直线及文字
+    vertical: {
+      show: true,
+      line: {
+        show: true,
+        // 'solid'|'dashed'
+        style: 'dashed',
+        dashedValue: [4, 2],
+        size: 1,
+        color: '#888888'
+      },
+      text: {
+        show: true,
+        // 'fill' | 'stroke' | 'stroke_fill'
+        style: 'fill',
+        color: '#FFFFFF',
+        size: 12,
+        family: 'Helvetica Neue',
+        weight: 'normal',
+        // 'solid' | 'dashed'
+        borderStyle: 'solid',
+        borderDashedValue: [2, 2],
+        borderSize: 1,
+        borderColor: '#686D76',
+        borderRadius: 2,
+        paddingLeft: 4,
+        paddingRight: 4,
+        paddingTop: 4,
+        paddingBottom: 4,
+        backgroundColor: '#686D76'
+      }
+    }
+  },
+  // 覆盖物
+  overlay: {
+    point: {
+      color: '#1677FF',
+      borderColor: 'rgba(22, 119, 255, 0.35)',
+      borderSize: 1,
+      radius: 5,
+      activeColor: '#1677FF',
+      activeBorderColor: 'rgba(22, 119, 255, 0.35)',
+      activeBorderSize: 3,
+      activeRadius: 5
+    },
+    line: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      smooth: false,
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    rect: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      borderRadius: 0,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    polygon: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#1677FF',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    circle: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: 'rgba(22, 119, 255, 0.25)',
+      borderColor: '#1677FF',
+      borderSize: 1,
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2]
+    },
+    arc: {
+      // 'solid' | 'dashed'
+      style: 'solid',
+      color: '#1677FF',
+      size: 1,
+      dashedValue: [2, 2]
+    },
+    text: {
+      color: '#1677FF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal'
+    },
+    rectText: {
+      // 'fill' | 'stroke' | 'stroke_fill'
+      style: 'fill',
+      color: '#FFFFFF',
+      size: 12,
+      family: 'Helvetica Neue',
+      weight: 'normal',
+      // 'solid' | 'dashed'
+      borderStyle: 'solid',
+      borderDashedValue: [2, 2],
+      borderSize: 1,
+      borderRadius: 2,
+      borderColor: '#1677FF',
+      paddingLeft: 4,
+      paddingRight: 4,
+      paddingTop: 4,
+      paddingBottom: 4,
+      backgroundColor: '#1677FF'
+    }
+  }
+}
`,2),d=JSON.parse('{"title":"🎨 样式配置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/styles.md","filePath":"guide/styles.md","lastUpdated":1691074246000}'),F={name:"guide/styles.md"},f=Object.assign(F,{setup(D){return(i,C)=>(a(),l("div",null,[c,t,r,p(e),y]))}});export{d as __pageData,f as default}; diff --git a/assets/guide_styles.md.b135c3aa.lean.js b/assets/guide_styles.md.b135c3aa.lean.js deleted file mode 100644 index 01f69b719..000000000 --- a/assets/guide_styles.md.b135c3aa.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{S as a}from"./chunks/StyleExplain.c9b1fabe.js";import{o as l,c as p,L as o,k as s,a as n,V as e}from"./chunks/framework.410404a1.js";const c=s("h1",{id:"🎨-样式配置",tabindex:"-1"},[n("🎨 样式配置 "),s("a",{class:"header-anchor",href:"#🎨-样式配置","aria-label":'Permalink to "🎨 样式配置"'},"​")],-1),t=s("p",null,[n("图表上看到的不管是点还是线,基本都可以自定义样式。可以通过图表方法"),s("code",null,"init(ds, options)"),n("或者图表实例方法"),s("code",null,"setStyles(styles)"),n("进行更改。")],-1),r=s("h2",{id:"图解说明",tabindex:"-1"},[n("图解说明 "),s("a",{class:"header-anchor",href:"#图解说明","aria-label":'Permalink to "图解说明"'},"​")],-1),y=e("",2),d=JSON.parse('{"title":"🎨 样式配置","description":"","frontmatter":{},"headers":[],"relativePath":"guide/styles.md","filePath":"guide/styles.md","lastUpdated":1689272235000}'),F={name:"guide/styles.md"},f=Object.assign(F,{setup(D){return(i,C)=>(l(),p("div",null,[c,t,r,o(a),y]))}});export{d as __pageData,f as default}; diff --git a/assets/guide_v8-to-v9.md.7dee35c1.js b/assets/guide_v8-to-v9.md.7dee35c1.js deleted file mode 100644 index bb501d48d..000000000 --- a/assets/guide_v8-to-v9.md.7dee35c1.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c,V as d}from"./chunks/framework.410404a1.js";const m=JSON.parse('{"title":"🛠️ 从 V8 到 V9","description":"","frontmatter":{},"headers":[],"relativePath":"guide/v8-to-v9.md","filePath":"guide/v8-to-v9.md","lastUpdated":1689272235000}'),a={name:"guide/v8-to-v9.md"},i=d('

🛠️ 从 V8 到 V9

本文档将帮助你从 klinecharts 8.x 版本升级到 klinecharts 9.x 版本,如果你是 7.x 或者更老的版本,请先参考之前的升级文档升级到 8.x。

引入调整

不再区分klinecharts/index.blankklinecharts/index.simple,请统一使用import { ... } from 'klinecharts'

设计调整

shapeannotationtag合并成overlay,详情请查阅覆盖物

样式配置调整

  • 所有线的样式选项dash,更改为dasheddashValue更改为dashedValue
  • candle.tooltip.labelscandle.tooltip.values,合并为candle.tooltip.custom
  • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
  • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
  • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
  • 删除shapeannotationtag,请用overlay代替。

API调整

图表API

  • extension.addTechnicalIndicatorTemplate(template)变更为registerIndicator(template)
  • 删除extension.addShapeTemplate(template),请用registerOverlay(template)代替。

实例API

  • getDom({ paneId, position })变更为getDom(paneId, position),参数position选项变更为rootmainyAxis
  • getWidth()getHeight()合并成一个方法getSize(paneId, position)
  • setStyleOptions(styles)变更为setStyles(styles)
  • getStyleOptions()变更为getStyles()
  • setOffsetRightSpace(space)变更为setOffsetRightDistance(distance)
  • createTechnicalIndicator(value, isStack, paneOptions)变更为createIndicator(value, isStack, paneOptions)
  • overrideTechnicalIndicator(override, paneId)变更为overrideIndicator(override, paneId)
  • getTechnicalIndicatorByPaneId(paneId, name)变更为getIndicatorByPaneId(paneId, name)
  • removeTechnicalIndicator(paneId, name)变更为removeIndicator(paneId, name)
  • subscribeAction(type, callback)unsubscribeAction(type, callback),参数type选项变更为onZoomonScrollonCrosshairChangeonVisibleRangeChangeonPaneDrag
  • convertToPixel(value, finder)convertFromPixel(coordinate, finder),参数finder.absoluteYAxis变更为finder.absolute
  • 删除createShape(value, paneId)createAnnotation(annotation, paneId)createTag(tag, paneId),请用createOverlay(value, paneId)代替。
  • 删除removeShape(id)removeAnnotation(paneId, points)removeTag(paneId, tagId),请用removeOverlay(id)代替。
  • 删除setShapeOptions(options),请用overrideOverlay(override)代替。
  • 删除createHtml(html, paneId)removeHtml(paneId, htmlId),请通过getDom(paneId, position)获取到对应的dom后操作。
  • 删除getTechnicalIndicatorByPaneId(paneId, name)

图形辅助API

  • 所有的API都迁移至klinecharts.utils

自定义技术指标调整

  • 属性plots变更为figures,子项方法colorisStrokeisDashed合并成styles
  • 方法regeneratePlots(params)变更为regeneratefigures(params)
  • 方法calcTechnicalIndicator(kLineDataList, options)变更为calc(kLineDataList, indicator)
  • 方法createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis,yAxis, defaultStyles })变更为createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }),返回值由[{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...]变更为{ name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }
  • 方法render({ ctx, dataSource, viewport, styles,xAxis, yAxis })变更为draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis })
  • 删除属性shouldCheckParamCount
',17),t=[i];function l(n,r,s,h,p,x){return o(),c("div",null,t)}const I=e(a,[["render",l]]);export{m as __pageData,I as default}; diff --git a/assets/guide_v8-to-v9.md.7dee35c1.lean.js b/assets/guide_v8-to-v9.md.7dee35c1.lean.js deleted file mode 100644 index 7fb43a685..000000000 --- a/assets/guide_v8-to-v9.md.7dee35c1.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c,V as d}from"./chunks/framework.410404a1.js";const m=JSON.parse('{"title":"🛠️ 从 V8 到 V9","description":"","frontmatter":{},"headers":[],"relativePath":"guide/v8-to-v9.md","filePath":"guide/v8-to-v9.md","lastUpdated":1689272235000}'),a={name:"guide/v8-to-v9.md"},i=d("",17),t=[i];function l(n,r,s,h,p,x){return o(),c("div",null,t)}const I=e(a,[["render",l]]);export{m as __pageData,I as default}; diff --git a/assets/guide_v8-to-v9.md.f835732b.js b/assets/guide_v8-to-v9.md.f835732b.js new file mode 100644 index 000000000..34e76974e --- /dev/null +++ b/assets/guide_v8-to-v9.md.f835732b.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as c,R as d}from"./chunks/framework.3ac7bdc3.js";const m=JSON.parse('{"title":"🛠️ 从 V8 到 V9","description":"","frontmatter":{},"headers":[],"relativePath":"guide/v8-to-v9.md","filePath":"guide/v8-to-v9.md","lastUpdated":1691074246000}'),a={name:"guide/v8-to-v9.md"},i=d('

🛠️ 从 V8 到 V9

本文档将帮助你从 klinecharts 8.x 版本升级到 klinecharts 9.x 版本,如果你是 7.x 或者更老的版本,请先参考之前的升级文档升级到 8.x。

引入调整

不再区分klinecharts/index.blankklinecharts/index.simple,请统一使用import { ... } from 'klinecharts'

设计调整

shapeannotationtag合并成overlay,详情请查阅覆盖物

样式配置调整

  • 所有线的样式选项dash,更改为dasheddashValue更改为dashedValue
  • candle.tooltip.labelscandle.tooltip.values,合并为candle.tooltip.custom
  • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
  • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
  • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
  • 删除shapeannotationtag,请用overlay代替。

API调整

图表API

  • extension.addTechnicalIndicatorTemplate(template)变更为registerIndicator(template)
  • 删除extension.addShapeTemplate(template),请用registerOverlay(template)代替。

实例API

  • getDom({ paneId, position })变更为getDom(paneId, position),参数position选项变更为rootmainyAxis
  • getWidth()getHeight()合并成一个方法getSize(paneId, position)
  • setStyleOptions(styles)变更为setStyles(styles)
  • getStyleOptions()变更为getStyles()
  • setOffsetRightSpace(space)变更为setOffsetRightDistance(distance)
  • createTechnicalIndicator(value, isStack, paneOptions)变更为createIndicator(value, isStack, paneOptions)
  • overrideTechnicalIndicator(override, paneId)变更为overrideIndicator(override, paneId)
  • getTechnicalIndicatorByPaneId(paneId, name)变更为getIndicatorByPaneId(paneId, name)
  • removeTechnicalIndicator(paneId, name)变更为removeIndicator(paneId, name)
  • subscribeAction(type, callback)unsubscribeAction(type, callback),参数type选项变更为onZoomonScrollonCrosshairChangeonVisibleRangeChangeonPaneDrag
  • convertToPixel(value, finder)convertFromPixel(coordinate, finder),参数finder.absoluteYAxis变更为finder.absolute
  • 删除createShape(value, paneId)createAnnotation(annotation, paneId)createTag(tag, paneId),请用createOverlay(value, paneId)代替。
  • 删除removeShape(id)removeAnnotation(paneId, points)removeTag(paneId, tagId),请用removeOverlay(id)代替。
  • 删除setShapeOptions(options),请用overrideOverlay(override)代替。
  • 删除createHtml(html, paneId)removeHtml(paneId, htmlId),请通过getDom(paneId, position)获取到对应的dom后操作。
  • 删除getTechnicalIndicatorByPaneId(paneId, name)

图形辅助API

  • 所有的API都迁移至klinecharts.utils

自定义技术指标调整

  • 属性plots变更为figures,子项方法colorisStrokeisDashed合并成styles
  • 方法regeneratePlots(params)变更为regeneratefigures(params)
  • 方法calcTechnicalIndicator(kLineDataList, options)变更为calc(kLineDataList, indicator)
  • 方法createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis,yAxis, defaultStyles })变更为createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }),返回值由[{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...]变更为{ name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }
  • 方法render({ ctx, dataSource, viewport, styles,xAxis, yAxis })变更为draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis })
  • 删除属性shouldCheckParamCount
',17),t=[i];function l(n,r,s,h,p,x){return o(),c("div",null,t)}const v=e(a,[["render",l]]);export{m as __pageData,v as default}; diff --git a/assets/guide_v8-to-v9.md.f835732b.lean.js b/assets/guide_v8-to-v9.md.f835732b.lean.js new file mode 100644 index 000000000..34e76974e --- /dev/null +++ b/assets/guide_v8-to-v9.md.f835732b.lean.js @@ -0,0 +1 @@ +import{_ as e,v as o,b as c,R as d}from"./chunks/framework.3ac7bdc3.js";const m=JSON.parse('{"title":"🛠️ 从 V8 到 V9","description":"","frontmatter":{},"headers":[],"relativePath":"guide/v8-to-v9.md","filePath":"guide/v8-to-v9.md","lastUpdated":1691074246000}'),a={name:"guide/v8-to-v9.md"},i=d('

🛠️ 从 V8 到 V9

本文档将帮助你从 klinecharts 8.x 版本升级到 klinecharts 9.x 版本,如果你是 7.x 或者更老的版本,请先参考之前的升级文档升级到 8.x。

引入调整

不再区分klinecharts/index.blankklinecharts/index.simple,请统一使用import { ... } from 'klinecharts'

设计调整

shapeannotationtag合并成overlay,详情请查阅覆盖物

样式配置调整

  • 所有线的样式选项dash,更改为dasheddashValue更改为dashedValue
  • candle.tooltip.labelscandle.tooltip.values,合并为candle.tooltip.custom
  • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
  • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
  • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
  • 删除shapeannotationtag,请用overlay代替。

API调整

图表API

  • extension.addTechnicalIndicatorTemplate(template)变更为registerIndicator(template)
  • 删除extension.addShapeTemplate(template),请用registerOverlay(template)代替。

实例API

  • getDom({ paneId, position })变更为getDom(paneId, position),参数position选项变更为rootmainyAxis
  • getWidth()getHeight()合并成一个方法getSize(paneId, position)
  • setStyleOptions(styles)变更为setStyles(styles)
  • getStyleOptions()变更为getStyles()
  • setOffsetRightSpace(space)变更为setOffsetRightDistance(distance)
  • createTechnicalIndicator(value, isStack, paneOptions)变更为createIndicator(value, isStack, paneOptions)
  • overrideTechnicalIndicator(override, paneId)变更为overrideIndicator(override, paneId)
  • getTechnicalIndicatorByPaneId(paneId, name)变更为getIndicatorByPaneId(paneId, name)
  • removeTechnicalIndicator(paneId, name)变更为removeIndicator(paneId, name)
  • subscribeAction(type, callback)unsubscribeAction(type, callback),参数type选项变更为onZoomonScrollonCrosshairChangeonVisibleRangeChangeonPaneDrag
  • convertToPixel(value, finder)convertFromPixel(coordinate, finder),参数finder.absoluteYAxis变更为finder.absolute
  • 删除createShape(value, paneId)createAnnotation(annotation, paneId)createTag(tag, paneId),请用createOverlay(value, paneId)代替。
  • 删除removeShape(id)removeAnnotation(paneId, points)removeTag(paneId, tagId),请用removeOverlay(id)代替。
  • 删除setShapeOptions(options),请用overrideOverlay(override)代替。
  • 删除createHtml(html, paneId)removeHtml(paneId, htmlId),请通过getDom(paneId, position)获取到对应的dom后操作。
  • 删除getTechnicalIndicatorByPaneId(paneId, name)

图形辅助API

  • 所有的API都迁移至klinecharts.utils

自定义技术指标调整

  • 属性plots变更为figures,子项方法colorisStrokeisDashed合并成styles
  • 方法regeneratePlots(params)变更为regeneratefigures(params)
  • 方法calcTechnicalIndicator(kLineDataList, options)变更为calc(kLineDataList, indicator)
  • 方法createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis,yAxis, defaultStyles })变更为createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }),返回值由[{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...]变更为{ name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }
  • 方法render({ ctx, dataSource, viewport, styles,xAxis, yAxis })变更为draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis })
  • 删除属性shouldCheckParamCount
',17),t=[i];function l(n,r,s,h,p,x){return o(),c("div",null,t)}const v=e(a,[["render",l]]);export{m as __pageData,v as default}; diff --git a/assets/guide_what-is-klinechart.md.7a27d312.lean.js b/assets/guide_what-is-klinechart.md.7a27d312.lean.js deleted file mode 100644 index 276f071e4..000000000 --- a/assets/guide_what-is-klinechart.md.7a27d312.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,o as a,c as e,V as r}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"📃 介绍","description":"","frontmatter":{},"headers":[],"relativePath":"guide/what-is-klinechart.md","filePath":"guide/what-is-klinechart.md","lastUpdated":1689272235000}'),i={name:"guide/what-is-klinechart.md"},n=r("",5),o=[n];function s(l,h,c,d,_,p){return a(),e("div",null,o)}const m=t(i,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/guide_what-is-klinechart.md.7a27d312.js b/assets/guide_what-is-klinechart.md.7d0ac241.js similarity index 78% rename from assets/guide_what-is-klinechart.md.7a27d312.js rename to assets/guide_what-is-klinechart.md.7d0ac241.js index d0be43061..455a28f2b 100644 --- a/assets/guide_what-is-klinechart.md.7a27d312.js +++ b/assets/guide_what-is-klinechart.md.7d0ac241.js @@ -1 +1 @@ -import{_ as t,o as a,c as e,V as r}from"./chunks/framework.410404a1.js";const u=JSON.parse('{"title":"📃 介绍","description":"","frontmatter":{},"headers":[],"relativePath":"guide/what-is-klinechart.md","filePath":"guide/what-is-klinechart.md","lastUpdated":1689272235000}'),i={name:"guide/what-is-klinechart.md"},n=r('

📃 介绍

什么是 KLineChart?

KLineChart,是一款可高度自定义的专业级轻量金融图表。

特性

  • 📦 开箱即用:简单快速集成,基本零成本上手。
  • 🚀 轻量流畅:零依赖,Gzip压缩下仅40k。
  • 💪 功能强大:内置多种指标和画线模型。
  • 🎨 高可扩展:丰富的样式配置和API,功能扩展随心所欲。
  • 📱 移动端:支持移动端,一个图表,搞定多端。
  • 🛡 Typescript开发:提供完整的类型定义文件。
',5),o=[n];function s(l,h,c,d,_,p){return a(),e("div",null,o)}const m=t(i,[["render",s]]);export{u as __pageData,m as default}; +import{_ as t,v as a,b as e,R as r}from"./chunks/framework.3ac7bdc3.js";const _=JSON.parse('{"title":"📃 介绍","description":"","frontmatter":{},"headers":[],"relativePath":"guide/what-is-klinechart.md","filePath":"guide/what-is-klinechart.md","lastUpdated":1691074246000}'),i={name:"guide/what-is-klinechart.md"},s=r('

📃 介绍

什么是 KLineChart?

KLineChart,是一款可高度自定义的专业级轻量金融图表。

特性

  • 📦 开箱即用:简单快速集成,基本零成本上手。
  • 🚀 轻量流畅:零依赖,Gzip压缩下仅40k。
  • 💪 功能强大:内置多种指标和画线模型。
  • 🎨 高可扩展:丰富的样式配置和API,功能扩展随心所欲。
  • 📱 移动端:支持移动端,一个图表,搞定多端。
  • 🛡 Typescript开发:提供完整的类型定义文件。
',5),n=[s];function o(l,h,c,d,g,p){return a(),e("div",null,n)}const f=t(i,[["render",o]]);export{_ as __pageData,f as default}; diff --git a/assets/guide_what-is-klinechart.md.7d0ac241.lean.js b/assets/guide_what-is-klinechart.md.7d0ac241.lean.js new file mode 100644 index 000000000..455a28f2b --- /dev/null +++ b/assets/guide_what-is-klinechart.md.7d0ac241.lean.js @@ -0,0 +1 @@ +import{_ as t,v as a,b as e,R as r}from"./chunks/framework.3ac7bdc3.js";const _=JSON.parse('{"title":"📃 介绍","description":"","frontmatter":{},"headers":[],"relativePath":"guide/what-is-klinechart.md","filePath":"guide/what-is-klinechart.md","lastUpdated":1691074246000}'),i={name:"guide/what-is-klinechart.md"},s=r('

📃 介绍

什么是 KLineChart?

KLineChart,是一款可高度自定义的专业级轻量金融图表。

特性

  • 📦 开箱即用:简单快速集成,基本零成本上手。
  • 🚀 轻量流畅:零依赖,Gzip压缩下仅40k。
  • 💪 功能强大:内置多种指标和画线模型。
  • 🎨 高可扩展:丰富的样式配置和API,功能扩展随心所欲。
  • 📱 移动端:支持移动端,一个图表,搞定多端。
  • 🛡 Typescript开发:提供完整的类型定义文件。
',5),n=[s];function o(l,h,c,d,g,p){return a(),e("div",null,n)}const f=t(i,[["render",o]]);export{_ as __pageData,f as default}; diff --git a/assets/index.md.d272dfbc.js b/assets/index.md.60c8a73f.js similarity index 83% rename from assets/index.md.d272dfbc.js rename to assets/index.md.60c8a73f.js index a6db1b2b9..3c186251c 100644 --- a/assets/index.md.d272dfbc.js +++ b/assets/index.md.60c8a73f.js @@ -1 +1 @@ -import{_ as e,o as t,c as i}from"./chunks/framework.410404a1.js";const p=JSON.parse('{"title":"可高度自定义的专业级轻量金融图表","description":"","frontmatter":{"title":"可高度自定义的专业级轻量金融图表","layout":"home","hero":{"name":"KLineChart","text":"可高度自定义的专业级轻量金融图表","tagline":"简单易用,轻量流畅,适用场景丰富的 Web 前端金融图表。","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"快速开始","link":"/guide/getting-started"},{"theme":"alt","text":"在 Github 上查看","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"开箱即用","details":"简单快速集成,零成本上手,显示出一个图表仅需3行代码,让所有注意力都能放在数据对接上。"},{"icon":{"src":"/images/rocket.png"},"title":"轻量流畅","details":"零依赖,Gzip压缩下仅40k左右,4G网络下加载耗时不足1毫秒。图表即使在成千上万蜡烛图的情况下也能保持流畅。"},{"icon":{"src":"/images/expand.png"},"title":"高可扩展","details":"提供丰富的配置和Api,样式修改、功能搭配随心所欲。提供技术指标和画线模型扩展,让图表拥有更多可能。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1689272235000}'),a={name:"index.md"};function n(s,r,o,c,d,l){return t(),i("div")}const g=e(a,[["render",n]]);export{p as __pageData,g as default}; +import{_ as t,v as e,b as i}from"./chunks/framework.3ac7bdc3.js";const p=JSON.parse('{"title":"可高度自定义的专业级轻量金融图表","description":"","frontmatter":{"title":"可高度自定义的专业级轻量金融图表","layout":"home","hero":{"name":"KLineChart","text":"可高度自定义的专业级轻量金融图表","tagline":"简单易用,轻量流畅,适用场景丰富的 Web 前端金融图表。","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"快速开始","link":"/guide/getting-started"},{"theme":"alt","text":"在 Github 上查看","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"开箱即用","details":"简单快速集成,零成本上手,显示出一个图表仅需3行代码,让所有注意力都能放在数据对接上。"},{"icon":{"src":"/images/rocket.png"},"title":"轻量流畅","details":"零依赖,Gzip压缩下仅40k左右,4G网络下加载耗时不足1毫秒。图表即使在成千上万蜡烛图的情况下也能保持流畅。"},{"icon":{"src":"/images/expand.png"},"title":"高可扩展","details":"提供丰富的配置和Api,样式修改、功能搭配随心所欲。提供技术指标和画线模型扩展,让图表拥有更多可能。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1691074246000}'),a={name:"index.md"};function s(n,r,o,d,c,l){return e(),i("div")}const g=t(a,[["render",s]]);export{p as __pageData,g as default}; diff --git a/assets/index.md.d272dfbc.lean.js b/assets/index.md.60c8a73f.lean.js similarity index 83% rename from assets/index.md.d272dfbc.lean.js rename to assets/index.md.60c8a73f.lean.js index a6db1b2b9..3c186251c 100644 --- a/assets/index.md.d272dfbc.lean.js +++ b/assets/index.md.60c8a73f.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as i}from"./chunks/framework.410404a1.js";const p=JSON.parse('{"title":"可高度自定义的专业级轻量金融图表","description":"","frontmatter":{"title":"可高度自定义的专业级轻量金融图表","layout":"home","hero":{"name":"KLineChart","text":"可高度自定义的专业级轻量金融图表","tagline":"简单易用,轻量流畅,适用场景丰富的 Web 前端金融图表。","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"快速开始","link":"/guide/getting-started"},{"theme":"alt","text":"在 Github 上查看","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"开箱即用","details":"简单快速集成,零成本上手,显示出一个图表仅需3行代码,让所有注意力都能放在数据对接上。"},{"icon":{"src":"/images/rocket.png"},"title":"轻量流畅","details":"零依赖,Gzip压缩下仅40k左右,4G网络下加载耗时不足1毫秒。图表即使在成千上万蜡烛图的情况下也能保持流畅。"},{"icon":{"src":"/images/expand.png"},"title":"高可扩展","details":"提供丰富的配置和Api,样式修改、功能搭配随心所欲。提供技术指标和画线模型扩展,让图表拥有更多可能。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1689272235000}'),a={name:"index.md"};function n(s,r,o,c,d,l){return t(),i("div")}const g=e(a,[["render",n]]);export{p as __pageData,g as default}; +import{_ as t,v as e,b as i}from"./chunks/framework.3ac7bdc3.js";const p=JSON.parse('{"title":"可高度自定义的专业级轻量金融图表","description":"","frontmatter":{"title":"可高度自定义的专业级轻量金融图表","layout":"home","hero":{"name":"KLineChart","text":"可高度自定义的专业级轻量金融图表","tagline":"简单易用,轻量流畅,适用场景丰富的 Web 前端金融图表。","image":{"src":"/images/logo_hero.svg","alt":"KLineChart"},"actions":[{"theme":"brand","text":"快速开始","link":"/guide/getting-started"},{"theme":"alt","text":"在 Github 上查看","link":"https://github.com/liihuu/KLineChart"}]},"features":[{"icon":{"src":"/images/box.png"},"title":"开箱即用","details":"简单快速集成,零成本上手,显示出一个图表仅需3行代码,让所有注意力都能放在数据对接上。"},{"icon":{"src":"/images/rocket.png"},"title":"轻量流畅","details":"零依赖,Gzip压缩下仅40k左右,4G网络下加载耗时不足1毫秒。图表即使在成千上万蜡烛图的情况下也能保持流畅。"},{"icon":{"src":"/images/expand.png"},"title":"高可扩展","details":"提供丰富的配置和Api,样式修改、功能搭配随心所欲。提供技术指标和画线模型扩展,让图表拥有更多可能。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1691074246000}'),a={name:"index.md"};function s(n,r,o,d,c,l){return e(),i("div")}const g=t(a,[["render",s]]);export{p as __pageData,g as default}; diff --git a/assets/sponsor.md.60732f4f.js b/assets/sponsor.md.4de7c862.js similarity index 70% rename from assets/sponsor.md.60732f4f.js rename to assets/sponsor.md.4de7c862.js index 701030b3a..9bb0fb14c 100644 --- a/assets/sponsor.md.60732f4f.js +++ b/assets/sponsor.md.4de7c862.js @@ -1 +1 @@ -import{_ as a,a as e}from"./chunks/wechat_pay_qr_code.ab7c3922.js";import{_ as t,o as r,c as l,V as i}from"./chunks/framework.410404a1.js";const x=JSON.parse('{"title":"❤️ 赞助","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"sponsor.md","filePath":"sponsor.md","lastUpdated":1689272235000}'),o={name:"sponsor.md"},s=i('

❤️ 赞助

如果你觉得插件还不错,希望你能在GitHub点一个 🌟。如果能够打赏一杯 ☕️,那就真的太感谢了。

支付宝

微信支付

PayPal

加密货币

',10),h=[s];function n(p,c,d,m,_,f){return r(),l("div",null,h)}const P=t(o,[["render",n]]);export{x as __pageData,P as default}; +import{_ as a,v as e,b as r,R as t}from"./chunks/framework.3ac7bdc3.js";import{_ as i,a as l}from"./chunks/wechat_pay_qr_code.ab7c3922.js";const x=JSON.parse('{"title":"❤️ 赞助","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"sponsor.md","filePath":"sponsor.md","lastUpdated":1691074246000}'),s={name:"sponsor.md"},o=t('

❤️ 赞助

如果你觉得插件还不错,希望你能在GitHub点一个 🌟。如果能够打赏一杯 ☕️,那就真的太感谢了。

支付宝

微信支付

PayPal

加密货币

',10),h=[o];function n(p,d,c,m,f,u){return e(),r("div",null,h)}const q=a(s,[["render",n]]);export{x as __pageData,q as default}; diff --git a/assets/sponsor.md.4de7c862.lean.js b/assets/sponsor.md.4de7c862.lean.js new file mode 100644 index 000000000..9bb0fb14c --- /dev/null +++ b/assets/sponsor.md.4de7c862.lean.js @@ -0,0 +1 @@ +import{_ as a,v as e,b as r,R as t}from"./chunks/framework.3ac7bdc3.js";import{_ as i,a as l}from"./chunks/wechat_pay_qr_code.ab7c3922.js";const x=JSON.parse('{"title":"❤️ 赞助","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"sponsor.md","filePath":"sponsor.md","lastUpdated":1691074246000}'),s={name:"sponsor.md"},o=t('

❤️ 赞助

如果你觉得插件还不错,希望你能在GitHub点一个 🌟。如果能够打赏一杯 ☕️,那就真的太感谢了。

支付宝

微信支付

PayPal

加密货币

',10),h=[o];function n(p,d,c,m,f,u){return e(),r("div",null,h)}const q=a(s,[["render",n]]);export{x as __pageData,q as default}; diff --git a/assets/sponsor.md.60732f4f.lean.js b/assets/sponsor.md.60732f4f.lean.js deleted file mode 100644 index bc070c263..000000000 --- a/assets/sponsor.md.60732f4f.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e}from"./chunks/wechat_pay_qr_code.ab7c3922.js";import{_ as t,o as r,c as l,V as i}from"./chunks/framework.410404a1.js";const x=JSON.parse('{"title":"❤️ 赞助","description":"","frontmatter":{"sidebar":false},"headers":[],"relativePath":"sponsor.md","filePath":"sponsor.md","lastUpdated":1689272235000}'),o={name:"sponsor.md"},s=i("",10),h=[s];function n(p,c,d,m,_,f){return r(),l("div",null,h)}const P=t(o,[["render",n]]);export{x as __pageData,P as default}; diff --git a/assets/style.5a035358.css b/assets/style.5a035358.css new file mode 100644 index 000000000..2436a54a9 --- /dev/null +++ b/assets/style.5a035358.css @@ -0,0 +1 @@ +@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-gray: #8e8e93;--vp-c-text-light-1: rgba(60, 60, 67);--vp-c-text-light-2: rgba(60, 60, 67, .75);--vp-c-text-light-3: rgba(60, 60, 67, .33);--vp-c-text-dark-1: rgba(255, 255, 245, .86);--vp-c-text-dark-2: rgba(235, 235, 245, .6);--vp-c-text-dark-3: rgba(235, 235, 245, .38);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d97706;--vp-c-yellow-light: #f59e0b;--vp-c-yellow-lighter: #fbbf24;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5);--vp-c-sponsor: #db2777}:root{--vp-c-bg: #ffffff;--vp-c-bg-elv: #ffffff;--vp-c-bg-elv-up: #ffffff;--vp-c-bg-elv-down: #f6f6f7;--vp-c-bg-elv-mute: #f6f6f7;--vp-c-bg-soft: #f6f6f7;--vp-c-bg-soft-up: #f9f9fa;--vp-c-bg-soft-down: #e3e3e5;--vp-c-bg-soft-mute: #e3e3e5;--vp-c-bg-alt: #f6f6f7;--vp-c-border: rgba(60, 60, 67, .29);--vp-c-divider: rgba(60, 60, 67, .12);--vp-c-gutter: rgba(60, 60, 67, .12);--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white);--vp-c-text-1: var(--vp-c-text-light-1);--vp-c-text-2: var(--vp-c-text-light-2);--vp-c-text-3: var(--vp-c-text-light-3);--vp-c-text-inverse-1: var(--vp-c-text-dark-1);--vp-c-text-inverse-2: var(--vp-c-text-dark-2);--vp-c-text-inverse-3: var(--vp-c-text-dark-3);--vp-c-text-code: #476582;--vp-c-brand: var(--vp-c-green);--vp-c-brand-light: var(--vp-c-green-light);--vp-c-brand-lighter: var(--vp-c-green-lighter);--vp-c-brand-dark: var(--vp-c-green-dark);--vp-c-brand-darker: var(--vp-c-green-darker);--vp-c-mute: #f6f6f7;--vp-c-mute-light: #f9f9fc;--vp-c-mute-lighter: #ffffff;--vp-c-mute-dark: #e3e3e5;--vp-c-mute-darker: #d7d7d9}.dark{--vp-c-bg: #1e1e20;--vp-c-bg-elv: #252529;--vp-c-bg-elv-up: #313136;--vp-c-bg-elv-down: #1e1e20;--vp-c-bg-elv-mute: #313136;--vp-c-bg-soft: #252529;--vp-c-bg-soft-up: #313136;--vp-c-bg-soft-down: #1e1e20;--vp-c-bg-soft-mute: #313136;--vp-c-bg-alt: #161618;--vp-c-border: rgba(82, 82, 89, .68);--vp-c-divider: rgba(82, 82, 89, .32);--vp-c-gutter: #000000;--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black);--vp-c-text-1: var(--vp-c-text-dark-1);--vp-c-text-2: var(--vp-c-text-dark-2);--vp-c-text-3: var(--vp-c-text-dark-3);--vp-c-text-inverse-1: var(--vp-c-text-light-1);--vp-c-text-inverse-2: var(--vp-c-text-light-2);--vp-c-text-inverse-3: var(--vp-c-text-light-3);--vp-c-text-code: #c9def1;--vp-c-mute: #313136;--vp-c-mute-light: #3a3a3c;--vp-c-mute-lighter: #505053;--vp-c-mute-dark: #2c2c30;--vp-c-mute-darker: #252529}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-local-nav: 10;--vp-z-index-nav: 20;--vp-z-index-layout-top: 30;--vp-z-index-backdrop: 40;--vp-z-index-sidebar: 50;--vp-z-index-footer: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-c-code-dimm: var(--vp-c-text-dark-3);--vp-code-block-color: var(--vp-c-text-dark-1);--vp-code-block-bg: #292b30;--vp-code-block-bg-light: #1e1e20;--vp-code-block-divider-color: #000000;--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-line-diff-add-color: var(--vp-c-green-dimm-2);--vp-code-line-diff-add-symbol-color: var(--vp-c-green);--vp-code-line-diff-remove-color: var(--vp-c-red-dimm-2);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red);--vp-code-line-warning-color: var(--vp-c-yellow-dimm-2);--vp-code-line-error-color: var(--vp-c-red-dimm-2);--vp-code-copy-code-border-color: transparent;--vp-code-copy-code-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-active-text: var(--vp-c-text-dark-2);--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-dark-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-bar-color: var(--vp-c-brand)}.dark{--vp-code-block-bg: #161618}:root:not(.dark) .vp-adaptive-theme{--vp-c-code-dimm: var(--vp-c-text-2);--vp-code-block-color: var(--vp-c-text-1);--vp-code-block-bg: #f8f8f8;--vp-code-block-divider-color: var(--vp-c-divider);--vp-code-line-highlight-color: #ececec;--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-copy-code-bg: #e2e2e2;--vp-code-copy-code-hover-bg: #dcdcdc;--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-tab-divider: var(--vp-c-divider);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1)}:root{--vp-button-brand-border: var(--vp-c-brand-lighter);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-lighter);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-dark);--vp-button-brand-active-border: var(--vp-c-brand-lighter);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-darker);--vp-button-alt-border: var(--vp-c-border);--vp-button-alt-text: var(--vp-c-neutral);--vp-button-alt-bg: var(--vp-c-mute);--vp-button-alt-hover-border: var(--vp-c-border);--vp-button-alt-hover-text: var(--vp-c-neutral);--vp-button-alt-hover-bg: var(--vp-c-mute-dark);--vp-button-alt-active-border: var(--vp-c-border);--vp-button-alt-active-text: var(--vp-c-neutral);--vp-button-alt-active-bg: var(--vp-c-mute-darker);--vp-button-sponsor-border: var(--vp-c-gray-light-3);--vp-button-sponsor-text: var(--vp-c-text-light-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}.dark{--vp-button-sponsor-border: var(--vp-c-gray-dark-1);--vp-button-sponsor-text: var(--vp-c-text-dark-2)}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: var(--vp-c-border);--vp-custom-block-info-text: var(--vp-c-text-2);--vp-custom-block-info-bg: var(--vp-c-bg-soft-up);--vp-custom-block-info-code-bg: var(--vp-c-bg-soft);--vp-custom-block-tip-border: var(--vp-c-green);--vp-custom-block-tip-text: var(--vp-c-green-dark);--vp-custom-block-tip-bg: var(--vp-c-bg-soft-up);--vp-custom-block-tip-code-bg: var(--vp-c-bg-soft);--vp-custom-block-warning-border: var(--vp-c-yellow);--vp-custom-block-warning-text: var(--vp-c-yellow);--vp-custom-block-warning-bg: var(--vp-c-bg-soft-up);--vp-custom-block-warning-code-bg: var(--vp-c-bg-soft);--vp-custom-block-danger-border: var(--vp-c-red);--vp-custom-block-danger-text: var(--vp-c-red);--vp-custom-block-danger-bg: var(--vp-c-bg-soft-up);--vp-custom-block-danger-code-bg: var(--vp-c-bg-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-details-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-hover-border-color: var(--vp-c-gray);--vp-input-switch-bg-color: var(--vp-c-mute)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: var(--vp-c-border);--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-bg-soft-up);--vp-badge-tip-border: var(--vp-c-green-dark);--vp-badge-tip-text: var(--vp-c-green);--vp-badge-tip-bg: var(--vp-c-green-dimm-1);--vp-badge-warning-border: var(--vp-c-yellow-dark);--vp-badge-warning-text: var(--vp-c-yellow);--vp-badge-warning-bg: var(--vp-c-yellow-dimm-1);--vp-badge-danger-border: var(--vp-c-red-dark);--vp-badge-danger-text: var(--vp-c-red);--vp-badge-danger-bg: var(--vp-c-red-dimm-1)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand);--vp-local-search-highlight-bg: var(--vp-c-green-lighter);--vp-local-search-highlight-text: var(--vp-c-black)}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);direction:ltr;font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600}.custom-block a:hover{text-decoration:underline}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.dark .vp-code-light{display:none}html:not(.dark) .vp-code-dark{display:none}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:absolute;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:1px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-]{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active{display:block}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.vp-doc a:hover{text-decoration:underline}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block a{color:inherit;font-weight:600}.vp-doc .custom-block a:hover{text-decoration:underline}.vp-doc .custom-block code{font-size:var(--vp-custom-block-code-font-size);font-weight:700;color:inherit}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;color:var(--vp-c-text-code);background-color:var(--vp-c-mute);transition:color .5s,background-color .5s}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc a>code{color:var(--vp-c-brand);transition:color .25s}.vp-doc a:hover>code{color:var(--vp-c-brand-dark)}.vp-doc div[class*=language-]{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-]{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;left:-65px;display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;width:64px;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:"Copied"}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-c-code-dimm);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-bg-soft-down)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge[data-v-f026a7e7]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:10px;padding:0 8px;line-height:18px;font-size:12px;font-weight:600;transform:translateY(-2px)}h1 .VPBadge[data-v-f026a7e7],h2 .VPBadge[data-v-f026a7e7],h3 .VPBadge[data-v-f026a7e7],h4 .VPBadge[data-v-f026a7e7],h5 .VPBadge[data-v-f026a7e7],h6 .VPBadge[data-v-f026a7e7]{vertical-align:text-top}h2 .VPBadge[data-v-f026a7e7]{border-radius:11px;line-height:20px}.VPBadge.info[data-v-f026a7e7]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-f026a7e7]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-f026a7e7]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-f026a7e7]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-c70503b8]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-c70503b8]{padding:96px 32px 168px}}.code[data-v-c70503b8]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-c70503b8]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-c70503b8]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-c70503b8]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-c70503b8]{padding-top:20px}.link[data-v-c70503b8]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .25s,color .25s}.link[data-v-c70503b8]:hover{border-color:var(--vp-c-brand-dark);color:var(--vp-c-brand-dark)}.root[data-v-b0ff2abe]{position:relative;z-index:1}.nested[data-v-b0ff2abe]{padding-left:13px}.outline-link[data-v-b0ff2abe]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:500}.outline-link[data-v-b0ff2abe]:hover,.outline-link.active[data-v-b0ff2abe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b0ff2abe]{padding-left:13px}.VPDocAsideOutline[data-v-ff0f39c8]{display:none}.VPDocAsideOutline.has-outline[data-v-ff0f39c8]{display:block}.content[data-v-ff0f39c8]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-ff0f39c8]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:1px;height:18px;background-color:var(--vp-c-brand);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-ff0f39c8]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-149a99df]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-149a99df]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-37656e44]{margin-top:64px}.edit-info[data-v-37656e44]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-37656e44]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-37656e44]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.edit-link-button[data-v-37656e44]:hover{color:var(--vp-c-brand-dark)}.edit-link-icon[data-v-37656e44]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-37656e44]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-37656e44]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-37656e44]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-37656e44]:hover{border-color:var(--vp-c-brand)}.pager-link.next[data-v-37656e44]{margin-left:auto;text-align:right}.desc[data-v-37656e44]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-37656e44]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.VPDocOutlineDropdown[data-v-2edece88]{margin-bottom:42px}.VPDocOutlineDropdown button[data-v-2edece88]{display:block;font-size:14px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;border:1px solid var(--vp-c-border);padding:4px 12px;border-radius:8px}.VPDocOutlineDropdown button[data-v-2edece88]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-2edece88]{color:var(--vp-c-text-1)}.icon[data-v-2edece88]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-2edece88] .outline-link{font-size:13px}.open>.icon[data-v-2edece88]{transform:rotate(90deg)}.items[data-v-2edece88]{margin-top:10px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-6b87e69f]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-6b87e69f]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-6b87e69f]{display:block}}@media (min-width: 768px){.VPDoc[data-v-6b87e69f]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-6b87e69f]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-6b87e69f]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-6b87e69f]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-6b87e69f]{display:flex;justify-content:center}.VPDoc .aside[data-v-6b87e69f]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-6b87e69f]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-6b87e69f]{max-width:1104px}}.container[data-v-6b87e69f]{margin:0 auto;width:100%}.aside[data-v-6b87e69f]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-6b87e69f]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-6b87e69f]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-6b87e69f]::-webkit-scrollbar{display:none}.aside-curtain[data-v-6b87e69f]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-6b87e69f]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-6b87e69f]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-6b87e69f]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-6b87e69f]{order:1;margin:0;min-width:640px}}.content-container[data-v-6b87e69f]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-6b87e69f]{max-width:688px}.external-link-icon-enabled[data-v-6b87e69f] :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.VPButton[data-v-567ba664]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-567ba664]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-567ba664]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-567ba664]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-567ba664]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-567ba664]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-567ba664]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-567ba664]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-567ba664]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-567ba664]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-567ba664]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-567ba664]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-567ba664]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-6db2186b]{display:none}.dark .VPImage.light[data-v-6db2186b]{display:none}.VPHero[data-v-da5d1713]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-da5d1713]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-da5d1713]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-da5d1713]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-da5d1713]{flex-direction:row}}.main[data-v-da5d1713]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-da5d1713]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-da5d1713]{text-align:left}}@media (min-width: 960px){.main[data-v-da5d1713]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-da5d1713]{max-width:592px}}.name[data-v-da5d1713],.text[data-v-da5d1713]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-da5d1713],.VPHero.has-image .text[data-v-da5d1713]{margin:0 auto}.name[data-v-da5d1713]{color:var(--vp-home-hero-name-color)}.clip[data-v-da5d1713]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-da5d1713],.text[data-v-da5d1713]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-da5d1713],.text[data-v-da5d1713]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-da5d1713],.VPHero.has-image .text[data-v-da5d1713]{margin:0}}.tagline[data-v-da5d1713]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-da5d1713]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-da5d1713]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-da5d1713]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-da5d1713]{margin:0}}.actions[data-v-da5d1713]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-da5d1713]{justify-content:center}@media (min-width: 640px){.actions[data-v-da5d1713]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-da5d1713]{justify-content:flex-start}}.action[data-v-da5d1713]{flex-shrink:0;padding:6px}.image[data-v-da5d1713]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-da5d1713]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-da5d1713]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-da5d1713]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-da5d1713]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-da5d1713]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-da5d1713]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-da5d1713]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-da5d1713]{width:320px;height:320px}}[data-v-da5d1713] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-da5d1713] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-da5d1713] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f7bdba60]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f7bdba60]:hover{border-color:var(--vp-c-brand);background-color:var(--vp-c-bg-soft-up)}.box[data-v-f7bdba60]{display:flex;flex-direction:column;padding:24px;height:100%}.VPFeature[data-v-f7bdba60] .VPImage{width:48px;height:48px;margin-bottom:20px}.icon[data-v-f7bdba60]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-bg-soft-down);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f7bdba60]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f7bdba60]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f7bdba60]{padding-top:8px}.link-text-value[data-v-f7bdba60]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.link-text-icon[data-v-f7bdba60]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-39646fad]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-39646fad]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-39646fad]{padding:0 64px}}.container[data-v-39646fad]{margin:0 auto;max-width:1152px}.items[data-v-39646fad]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-39646fad]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-39646fad],.item.grid-4[data-v-39646fad],.item.grid-6[data-v-39646fad]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-39646fad],.item.grid-4[data-v-39646fad]{width:50%}.item.grid-3[data-v-39646fad],.item.grid-6[data-v-39646fad]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-39646fad]{width:25%}}.VPHome[data-v-d82743a8]{padding-bottom:96px}.VPHome[data-v-d82743a8] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-d82743a8]{padding-bottom:128px}}.VPContent[data-v-3107c4ee]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-3107c4ee]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-3107c4ee]{margin:0}@media (min-width: 960px){.VPContent[data-v-3107c4ee]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-3107c4ee]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-3107c4ee]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e03eb2e1]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e03eb2e1]{display:none}@media (min-width: 768px){.VPFooter[data-v-e03eb2e1]{padding:32px}}.container[data-v-e03eb2e1]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e03eb2e1],.copyright[data-v-e03eb2e1]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-d5bb9d56]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-d5bb9d56]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-d5bb9d56]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-d5bb9d56]{color:var(--vp-c-text-1)}.icon[data-v-d5bb9d56]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-d5bb9d56] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-d5bb9d56]{transform:rotate(90deg)}.items[data-v-d5bb9d56]{position:absolute;left:20px;right:20px;top:64px;background-color:var(--vp-local-nav-bg-color);padding:4px 10px 16px;border:1px solid var(--vp-c-divider);border-radius:8px;max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.top-link[data-v-d5bb9d56]{display:block;color:var(--vp-c-brand);font-size:13px;font-weight:500;padding:6px 0;margin:0 13px 10px;border-bottom:1px solid var(--vp-c-divider)}.flyout-enter-active[data-v-d5bb9d56]{transition:all .2s ease-out}.flyout-leave-active[data-v-d5bb9d56]{transition:all .15s ease-in}.flyout-enter-from[data-v-d5bb9d56],.flyout-leave-to[data-v-d5bb9d56]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-5cfd5582]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-5cfd5582]{position:fixed}.VPLocalNav.reached-top[data-v-5cfd5582]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-5cfd5582]{display:none}}.menu[data-v-5cfd5582]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-5cfd5582]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-5cfd5582]{padding:0 32px}}.menu-icon[data-v-5cfd5582]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-5cfd5582]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-5cfd5582]{padding:12px 32px 11px}}.VPSwitch[data-v-f3c41672]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s}.VPSwitch[data-v-f3c41672]:hover{border-color:var(--vp-input-hover-border-color)}.check[data-v-f3c41672]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s}.icon[data-v-f3c41672]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-f3c41672] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-f3c41672] svg{fill:var(--vp-c-text-1);transition:opacity .25s}.sun[data-v-82b282f1]{opacity:1}.moon[data-v-82b282f1],.dark .sun[data-v-82b282f1]{opacity:0}.dark .moon[data-v-82b282f1]{opacity:1}.dark .VPSwitchAppearance[data-v-82b282f1] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-f6a63727]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-f6a63727]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-2f2cfafc]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-2f2cfafc]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-2f2cfafc]:hover{color:var(--vp-c-brand);background-color:var(--vp-c-bg-elv-mute)}.link.active[data-v-2f2cfafc]{color:var(--vp-c-brand)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e7ea1737]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e7ea1737] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e7ea1737] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e7ea1737] .group:last-child{padding-bottom:0}.VPMenu[data-v-e7ea1737] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e7ea1737] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e7ea1737] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e7ea1737] .action{padding-left:24px}.VPFlyout[data-v-764effdf]{position:relative}.VPFlyout[data-v-764effdf]:hover{color:var(--vp-c-brand);transition:color .25s}.VPFlyout:hover .text[data-v-764effdf]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-764effdf]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-764effdf]{color:var(--vp-c-brand)}.VPFlyout.active:hover .text[data-v-764effdf]{color:var(--vp-c-brand-dark)}.VPFlyout:hover .menu[data-v-764effdf],.button[aria-expanded=true]+.menu[data-v-764effdf]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-764effdf]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-764effdf]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-764effdf]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-764effdf]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-764effdf]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-764effdf]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-f80f8133]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-f80f8133]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-f80f8133]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-40855f84]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-40855f84]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-40855f84]{display:none}}.trans-title[data-v-40855f84]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-40855f84],.item.social-links[data-v-40855f84]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-40855f84]{min-width:176px}.appearance-action[data-v-40855f84]{margin-right:-2px}.social-links-list[data-v-40855f84]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-5e623618]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-5e623618],.VPNavBarMenuLink[data-v-5e623618]:hover{color:var(--vp-c-brand)}.VPNavBarMenu[data-v-7f418b0f]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-7f418b0f]{display:flex}}/*! @docsearch/css 3.5.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.DocSearch{--docsearch-primary-color: var(--vp-c-brand);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark .DocSearch{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-bg-soft-mute);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:1px;letter-spacing:-12px;color:transparent}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:var(--vp-meta-key);font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-bg-soft-mute)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-8bbac535]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-8bbac535]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-8bbac535]{border-bottom-color:var(--vp-c-divider)}}[data-v-8bbac535] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-74abcbb9]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-74abcbb9]{display:flex;align-items:center}}.title[data-v-74abcbb9]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-faa4ef78]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-faa4ef78]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-faa4ef78]{padding:0}.VPNavBar.fill[data-v-faa4ef78]:not(.has-sidebar){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-faa4ef78]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-faa4ef78],.container>.content[data-v-faa4ef78]{pointer-events:none}.container[data-v-faa4ef78] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-faa4ef78]{max-width:100%}}.title[data-v-faa4ef78]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-faa4ef78]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-faa4ef78]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-faa4ef78]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-faa4ef78]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-faa4ef78]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-faa4ef78]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .content-body[data-v-faa4ef78],.VPNavBar.fill .content-body[data-v-faa4ef78]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 768px){.content-body[data-v-faa4ef78]{column-gap:.5rem}}.menu+.translations[data-v-faa4ef78]:before,.menu+.appearance[data-v-faa4ef78]:before,.menu+.social-links[data-v-faa4ef78]:before,.translations+.appearance[data-v-faa4ef78]:before,.appearance+.social-links[data-v-faa4ef78]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-faa4ef78]:before,.translations+.appearance[data-v-faa4ef78]:before{margin-right:16px}.appearance+.social-links[data-v-faa4ef78]:before{margin-left:16px}.social-links[data-v-faa4ef78]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-faa4ef78]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-faa4ef78]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-faa4ef78]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenMenuLink[data-v-30be0acb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-30be0acb]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupLink[data-v-6656c42a]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-6656c42a]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-338a1689]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-338a1689]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-338a1689]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-338a1689]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-338a1689]{padding-bottom:6px;color:var(--vp-c-brand)}.VPNavScreenMenuGroup.open .button-icon[data-v-338a1689]{transform:rotate(45deg)}.button[data-v-338a1689]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-338a1689]:hover{color:var(--vp-c-brand)}.button-icon[data-v-338a1689]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-338a1689]:first-child{padding-top:0}.group+.group[data-v-338a1689],.group+.item[data-v-338a1689]{padding-top:4px}.VPNavScreenAppearance[data-v-add8f686]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-add8f686]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenTranslations[data-v-d72aa483]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-d72aa483]{height:auto}.title[data-v-d72aa483]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-d72aa483]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-d72aa483]{margin-right:8px}.icon.chevron[data-v-d72aa483]{margin-left:4px}.list[data-v-d72aa483]{padding:4px 0 0 24px}.link[data-v-d72aa483]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-69fcc70f]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-69fcc70f],.VPNavScreen.fade-leave-active[data-v-69fcc70f]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-69fcc70f],.VPNavScreen.fade-leave-active .container[data-v-69fcc70f]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-69fcc70f],.VPNavScreen.fade-leave-to[data-v-69fcc70f]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-69fcc70f],.VPNavScreen.fade-leave-to .container[data-v-69fcc70f]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-69fcc70f]{display:none}}.container[data-v-69fcc70f]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-69fcc70f],.menu+.appearance[data-v-69fcc70f],.translations+.appearance[data-v-69fcc70f]{margin-top:24px}.menu+.social-links[data-v-69fcc70f]{margin-top:16px}.appearance+.social-links[data-v-69fcc70f]{margin-top:16px}.VPNav[data-v-7e5bc4a5]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7e5bc4a5]{position:fixed}}.VPSidebarItem.level-0[data-v-4fbabd82]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-4fbabd82]{padding-bottom:10px}.item[data-v-4fbabd82]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-4fbabd82]{cursor:pointer}.indicator[data-v-4fbabd82]{position:absolute;top:6px;bottom:6px;left:-17px;width:1px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-4fbabd82],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-4fbabd82],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-4fbabd82],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-4fbabd82]{background-color:var(--vp-c-brand)}.link[data-v-4fbabd82]{display:flex;align-items:center;flex-grow:1}.text[data-v-4fbabd82]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-4fbabd82]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-4fbabd82],.VPSidebarItem.level-2 .text[data-v-4fbabd82],.VPSidebarItem.level-3 .text[data-v-4fbabd82],.VPSidebarItem.level-4 .text[data-v-4fbabd82],.VPSidebarItem.level-5 .text[data-v-4fbabd82]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-4fbabd82],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-4fbabd82],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-4fbabd82],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-4fbabd82],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-4fbabd82],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-4fbabd82]{color:var(--vp-c-brand)}.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-4fbabd82],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-4fbabd82],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-4fbabd82],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-4fbabd82],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-4fbabd82],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-4fbabd82]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-4fbabd82],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-4fbabd82],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-4fbabd82],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-4fbabd82],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-4fbabd82],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-4fbabd82]{color:var(--vp-c-brand)}.caret[data-v-4fbabd82]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-4fbabd82]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-4fbabd82]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-4fbabd82]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-4fbabd82]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-4fbabd82],.VPSidebarItem.level-2 .items[data-v-4fbabd82],.VPSidebarItem.level-3 .items[data-v-4fbabd82],.VPSidebarItem.level-4 .items[data-v-4fbabd82],.VPSidebarItem.level-5 .items[data-v-4fbabd82]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-4fbabd82]{display:none}.VPSidebar[data-v-845b8fc6]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-845b8fc6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-845b8fc6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-845b8fc6]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-845b8fc6]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-845b8fc6]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-845b8fc6]{outline:0}.group+.group[data-v-845b8fc6]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-845b8fc6]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-ae3e3f51]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-ae3e3f51]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-ae3e3f51]{top:14px;left:16px}}.Layout[data-v-255ec12d]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3c6e61c2]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-3c6e61c2]{margin:0 auto;max-width:1152px}.love[data-v-3c6e61c2]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-3c6e61c2]{width:28px;height:28px;fill:currentColor}.message[data-v-3c6e61c2]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3c6e61c2]{padding-top:32px}.action[data-v-3c6e61c2]{padding-top:40px;text-align:center}.VPTeamPage[data-v-10b00018]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-10b00018]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-10b00018-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-10b00018-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:96px}}.VPTeamMembers[data-v-10b00018-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-10b00018-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-10b00018-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-a3462077]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-a3462077]{padding:32px}.VPTeamMembersItem.small .data[data-v-a3462077]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-a3462077]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-a3462077]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-a3462077]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-a3462077]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-a3462077]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-a3462077]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-a3462077]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-a3462077]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-a3462077]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-a3462077]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-a3462077]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-a3462077]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-a3462077]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-a3462077]{text-align:center}.avatar[data-v-a3462077]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-a3462077]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-a3462077]{margin:0;font-weight:600}.affiliation[data-v-a3462077]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-a3462077]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-a3462077]:hover{color:var(--vp-c-brand)}.desc[data-v-a3462077]{margin:0 auto}.desc[data-v-a3462077] a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.links[data-v-a3462077]{display:flex;justify-content:center;height:56px}.sp-link[data-v-a3462077]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-a3462077]:hover,.sp .sp-link.link[data-v-a3462077]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-a3462077]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-04685dce]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-04685dce]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-04685dce]{max-width:876px}.VPTeamMembers.medium .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-04685dce]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-04685dce]{max-width:760px}.container[data-v-04685dce]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.style-explain[data-v-214cdbcb]{display:flex;flex-direction:row;flex-wrap:wrap;margin-top:12px}.style-explain-item[data-v-214cdbcb]{display:flex;flex-direction:row;align-items:center;margin-right:30px;margin-top:2px}.style-explain-item strong[data-v-214cdbcb]{display:flex;flex-direction:row;align-items:center;justify-content:center;background-color:red;width:18px;height:18px;margin-right:4px;font-size:12px;border-radius:9px;color:#fff}.who-are-use-section[data-v-37acb926]{margin-top:100px}.who-are-use h2[data-v-37acb926]{font-size:24px;text-align:center;font-weight:600}.who-are-use .grid[data-v-37acb926]{display:flex;flex-wrap:wrap;gap:6px;margin-top:40px}.who-are-use .grid .item[data-v-37acb926]{display:flex;justify-content:center;align-items:center;width:100%;height:120px;background-color:var(--vp-c-bg-soft);border-radius:4px;transition:background-color .2s;cursor:pointer;color:inherit}.who-are-use .grid .item .image[data-v-37acb926]{height:34px}.who-are-use .grid .item[data-v-37acb926]:hover{background-color:var(--vp-c-bg-soft-down)}.dark .who-are-use .grid .item .image[data-v-37acb926]{filter:grayscale(1) invert(1)}.dark .who-are-use .grid .item[data-v-37acb926]:hover{background-color:var(--vp-c-neutral)}.dark .who-are-use .grid .item:hover .image[data-v-37acb926]{filter:grayscale(0) invert(0)}@media (min-width: 640px){.who-are-use .grid .item[data-v-37acb926]{width:calc((100% - 12px) / 3)}}@media (min-width: 960px){.who-are-use .grid .item[data-v-37acb926]{width:calc((100% - 18px)/4)}}.who-are-use .become-next[data-v-37acb926]{display:flex;flex-direction:row;justify-content:center;padding-top:50px}.who-are-use .become-next a[data-v-37acb926]{font-size:14px;line-height:36px;border-radius:18px;padding:0 20px;color:var(--vp-c-text-3);font-weight:400;border:solid 1px var(--vp-button-alt-border);cursor:pointer;transition:border-color .2s,color .2s}.who-are-use .become-next a[data-v-37acb926]:hover{border-color:var(--vp-c-brand);color:var(--vp-c-brand)}.NotFound[data-v-18af756e]{padding:96px 24px;text-align:center}.NotFound .logo[data-v-18af756e]{display:flex;flex-direction:row;align-items:center;justify-content:center}.NotFound .logo span[data-v-18af756e]{font-size:110px;font-weight:600}.NotFound .logo img[data-v-18af756e]{width:76px;margin:0 16px}@media (min-width: 768px){.NotFound[data-v-18af756e]{padding:128px 32px 168px}}.title[data-v-18af756e]{padding-top:30px;letter-spacing:2px;font-size:30px;font-weight:700}.tip[data-v-18af756e]{font-size:14px;color:var(--vp-c-text-2)}.action[data-v-18af756e]{padding-top:20px}.link[data-v-18af756e]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .2s,color .2s}.link[data-v-18af756e]:hover{border-color:var(--vp-c-brand-light);color:var(--vp-c-brand-light)}:root{--vp-c-brand: #1677FF;--vp-c-brand-dark: #1677FF;--vp-c-brand-light: #3086ff;--vp-c-brand-lighter: #4995ff;--vp-c-brand-lightest: #afd0ff;--vp-c-brand-dimm: rgba(22, 119, 255, .08)}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 145deg, #2DC08E 26%, #F92855 );--vp-home-hero-image-background-image: linear-gradient( -45deg, rgba(45, 192, 142, .3), rgba(249, 40, 85, .3) );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(60px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(80px)}}:root{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm)}.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm)}.home-section{border-top:1px solid var(--vp-c-gutter);padding:60px 24px;text-align:center}.home-section .home-section-content{margin:0 auto;max-width:1152px}@media (min-width: 640px){.home-section{padding:60px 48px}}@media (min-width: 960px){.home-section{padding:60px 64px}}.VPLocalSearchBox[data-v-3e2bae22]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-3e2bae22]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-3e2bae22]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 768px){.shell[data-v-3e2bae22]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-3e2bae22]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 768px){.search-bar[data-v-3e2bae22]{padding:0 8px}}.search-bar[data-v-3e2bae22]:focus-within{border-color:var(--vp-c-brand)}.search-icon[data-v-3e2bae22]{margin:8px}@media (max-width: 768px){.search-icon[data-v-3e2bae22]{display:none}}.search-input[data-v-3e2bae22]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 768px){.search-input[data-v-3e2bae22]{padding:6px 4px}}.search-actions[data-v-3e2bae22]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-3e2bae22]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-3e2bae22]{display:none}}.search-actions button[data-v-3e2bae22]{padding:8px}.search-actions button[data-v-3e2bae22]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-3e2bae22]{color:var(--vp-c-brand)}.search-actions button.clear-button[data-v-3e2bae22]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-3e2bae22]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-3e2bae22]{display:flex;align-items:center;gap:4px}@media (max-width: 768px){.search-keyboard-shortcuts[data-v-3e2bae22]{display:none}}.search-keyboard-shortcuts kbd[data-v-3e2bae22]{background:rgba(128,128,128,.1);border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-3e2bae22]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-3e2bae22]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-3e2bae22]{margin:12px;width:100%;overflow:hidden}@media (max-width: 768px){.result>div[data-v-3e2bae22]{margin:8px}}.titles[data-v-3e2bae22]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-3e2bae22]{display:flex;align-items:center;gap:4px}.title.main[data-v-3e2bae22]{font-weight:500}.title-icon[data-v-3e2bae22]{opacity:.5;font-weight:500;color:var(--vp-c-brand)}.title svg[data-v-3e2bae22]{opacity:.5}.result.selected[data-v-3e2bae22]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-3e2bae22]{position:relative}.excerpt[data-v-3e2bae22]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-3e2bae22]{opacity:1}.excerpt[data-v-3e2bae22] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-3e2bae22] mark,.excerpt[data-v-3e2bae22] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-3e2bae22] .vp-code-group .tabs{display:none}.excerpt[data-v-3e2bae22] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-3e2bae22]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-3e2bae22]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-3e2bae22],.result.selected .title-icon[data-v-3e2bae22]{color:var(--vp-c-brand)!important}.no-results[data-v-3e2bae22]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-3e2bae22]{flex:none} diff --git a/assets/style.5e5414dc.css b/assets/style.5e5414dc.css deleted file mode 100644 index d88e9b799..000000000 --- a/assets/style.5e5414dc.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-gray: #8e8e93;--vp-c-text-light-1: rgba(60, 60, 67);--vp-c-text-light-2: rgba(60, 60, 67, .75);--vp-c-text-light-3: rgba(60, 60, 67, .33);--vp-c-text-dark-1: rgba(255, 255, 245, .86);--vp-c-text-dark-2: rgba(235, 235, 245, .6);--vp-c-text-dark-3: rgba(235, 235, 245, .38);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d97706;--vp-c-yellow-light: #f59e0b;--vp-c-yellow-lighter: #fbbf24;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5);--vp-c-sponsor: #db2777}:root{--vp-c-bg: #ffffff;--vp-c-bg-elv: #ffffff;--vp-c-bg-elv-up: #ffffff;--vp-c-bg-elv-down: #f6f6f7;--vp-c-bg-elv-mute: #f6f6f7;--vp-c-bg-soft: #f6f6f7;--vp-c-bg-soft-up: #f9f9fa;--vp-c-bg-soft-down: #e3e3e5;--vp-c-bg-soft-mute: #e3e3e5;--vp-c-bg-alt: #f6f6f7;--vp-c-border: rgba(60, 60, 67, .29);--vp-c-divider: rgba(60, 60, 67, .12);--vp-c-gutter: rgba(60, 60, 67, .12);--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white);--vp-c-text-1: var(--vp-c-text-light-1);--vp-c-text-2: var(--vp-c-text-light-2);--vp-c-text-3: var(--vp-c-text-light-3);--vp-c-text-inverse-1: var(--vp-c-text-dark-1);--vp-c-text-inverse-2: var(--vp-c-text-dark-2);--vp-c-text-inverse-3: var(--vp-c-text-dark-3);--vp-c-text-code: #476582;--vp-c-brand: var(--vp-c-green);--vp-c-brand-light: var(--vp-c-green-light);--vp-c-brand-lighter: var(--vp-c-green-lighter);--vp-c-brand-dark: var(--vp-c-green-dark);--vp-c-brand-darker: var(--vp-c-green-darker);--vp-c-mute: #f6f6f7;--vp-c-mute-light: #f9f9fc;--vp-c-mute-lighter: #ffffff;--vp-c-mute-dark: #e3e3e5;--vp-c-mute-darker: #d7d7d9}.dark{--vp-c-bg: #1e1e20;--vp-c-bg-elv: #252529;--vp-c-bg-elv-up: #313136;--vp-c-bg-elv-down: #1e1e20;--vp-c-bg-elv-mute: #313136;--vp-c-bg-soft: #252529;--vp-c-bg-soft-up: #313136;--vp-c-bg-soft-down: #1e1e20;--vp-c-bg-soft-mute: #313136;--vp-c-bg-alt: #161618;--vp-c-border: rgba(82, 82, 89, .68);--vp-c-divider: rgba(82, 82, 89, .32);--vp-c-gutter: #000000;--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black);--vp-c-text-1: var(--vp-c-text-dark-1);--vp-c-text-2: var(--vp-c-text-dark-2);--vp-c-text-3: var(--vp-c-text-dark-3);--vp-c-text-inverse-1: var(--vp-c-text-light-1);--vp-c-text-inverse-2: var(--vp-c-text-light-2);--vp-c-text-inverse-3: var(--vp-c-text-light-3);--vp-c-text-code: #c9def1;--vp-c-mute: #313136;--vp-c-mute-light: #3a3a3c;--vp-c-mute-lighter: #505053;--vp-c-mute-dark: #2c2c30;--vp-c-mute-darker: #252529}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-local-nav: 10;--vp-z-index-nav: 20;--vp-z-index-layout-top: 30;--vp-z-index-backdrop: 40;--vp-z-index-sidebar: 50;--vp-z-index-footer: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-c-code-dimm: var(--vp-c-text-dark-3);--vp-code-block-color: var(--vp-c-text-dark-1);--vp-code-block-bg: #292b30;--vp-code-block-bg-light: #1e1e20;--vp-code-block-divider-color: #000000;--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-line-diff-add-color: var(--vp-c-green-dimm-2);--vp-code-line-diff-add-symbol-color: var(--vp-c-green);--vp-code-line-diff-remove-color: var(--vp-c-red-dimm-2);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red);--vp-code-line-warning-color: var(--vp-c-yellow-dimm-2);--vp-code-line-error-color: var(--vp-c-red-dimm-2);--vp-code-copy-code-border-color: transparent;--vp-code-copy-code-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-active-text: var(--vp-c-text-dark-2);--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-dark-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-bar-color: var(--vp-c-brand)}.dark{--vp-code-block-bg: #161618}:root:not(.dark) .vp-adaptive-theme{--vp-c-code-dimm: var(--vp-c-text-2);--vp-code-block-color: var(--vp-c-text-1);--vp-code-block-bg: #f8f8f8;--vp-code-block-divider-color: var(--vp-c-divider);--vp-code-line-highlight-color: #ececec;--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-copy-code-bg: #e2e2e2;--vp-code-copy-code-hover-bg: #dcdcdc;--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-tab-divider: var(--vp-c-divider);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1)}:root{--vp-button-brand-border: var(--vp-c-brand-lighter);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-lighter);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-dark);--vp-button-brand-active-border: var(--vp-c-brand-lighter);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-darker);--vp-button-alt-border: var(--vp-c-border);--vp-button-alt-text: var(--vp-c-neutral);--vp-button-alt-bg: var(--vp-c-mute);--vp-button-alt-hover-border: var(--vp-c-border);--vp-button-alt-hover-text: var(--vp-c-neutral);--vp-button-alt-hover-bg: var(--vp-c-mute-dark);--vp-button-alt-active-border: var(--vp-c-border);--vp-button-alt-active-text: var(--vp-c-neutral);--vp-button-alt-active-bg: var(--vp-c-mute-darker);--vp-button-sponsor-border: var(--vp-c-gray-light-3);--vp-button-sponsor-text: var(--vp-c-text-light-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}.dark{--vp-button-sponsor-border: var(--vp-c-gray-dark-1);--vp-button-sponsor-text: var(--vp-c-text-dark-2)}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: var(--vp-c-border);--vp-custom-block-info-text: var(--vp-c-text-2);--vp-custom-block-info-bg: var(--vp-c-bg-soft-up);--vp-custom-block-info-code-bg: var(--vp-c-bg-soft);--vp-custom-block-tip-border: var(--vp-c-green);--vp-custom-block-tip-text: var(--vp-c-green-dark);--vp-custom-block-tip-bg: var(--vp-c-bg-soft-up);--vp-custom-block-tip-code-bg: var(--vp-c-bg-soft);--vp-custom-block-warning-border: var(--vp-c-yellow);--vp-custom-block-warning-text: var(--vp-c-yellow);--vp-custom-block-warning-bg: var(--vp-c-bg-soft-up);--vp-custom-block-warning-code-bg: var(--vp-c-bg-soft);--vp-custom-block-danger-border: var(--vp-c-red);--vp-custom-block-danger-text: var(--vp-c-red);--vp-custom-block-danger-bg: var(--vp-c-bg-soft-up);--vp-custom-block-danger-code-bg: var(--vp-c-bg-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-details-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-hover-border-color: var(--vp-c-gray);--vp-input-switch-bg-color: var(--vp-c-mute)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg)}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: var(--vp-c-border);--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-bg-soft-up);--vp-badge-tip-border: var(--vp-c-green-dark);--vp-badge-tip-text: var(--vp-c-green);--vp-badge-tip-bg: var(--vp-c-green-dimm-1);--vp-badge-warning-border: var(--vp-c-yellow-dark);--vp-badge-warning-text: var(--vp-c-yellow);--vp-badge-warning-bg: var(--vp-c-yellow-dimm-1);--vp-badge-danger-border: var(--vp-c-red-dark);--vp-badge-danger-text: var(--vp-c-red);--vp-badge-danger-bg: var(--vp-c-red-dimm-1)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand);--vp-local-search-highlight-bg: var(--vp-c-green-lighter);--vp-local-search-highlight-text: var(--vp-c-black)}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);direction:ltr;font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600}.custom-block a:hover{text-decoration:underline}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.dark .vp-code-light{display:none}html:not(.dark) .vp-code-dark{display:none}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden}.vp-code-group .tabs:after{position:absolute;right:0;bottom:0;left:0;height:1px;background-color:var(--vp-code-tab-divider);content:""}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:absolute;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:1px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-]{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active{display:block}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{float:left;margin-left:-.87em;padding-right:.23em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.vp-doc a:hover{text-decoration:underline}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block a{color:inherit;font-weight:600}.vp-doc .custom-block a:hover{text-decoration:underline}.vp-doc .custom-block code{font-size:var(--vp-custom-block-code-font-size);font-weight:700;color:inherit}.vp-doc .custom-block div[class*=language-]{margin:8px 0}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;color:var(--vp-c-text-code);background-color:var(--vp-c-mute);transition:color .5s,background-color .5s}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc a>code{color:var(--vp-c-brand);transition:color .25s}.vp-doc a:hover>code{color:var(--vp-c-brand-dark)}.vp-doc div[class*=language-]{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-]{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;left:-65px;display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;width:64px;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:"Copied"}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-c-code-dimm);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target="_blank"]):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-bg-soft-down)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge[data-v-350d3852]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:10px;padding:0 8px;line-height:18px;font-size:12px;font-weight:600;transform:translateY(-2px)}h1 .VPBadge[data-v-350d3852],h2 .VPBadge[data-v-350d3852],h3 .VPBadge[data-v-350d3852],h4 .VPBadge[data-v-350d3852],h5 .VPBadge[data-v-350d3852],h6 .VPBadge[data-v-350d3852]{vertical-align:top}h2 .VPBadge[data-v-350d3852]{border-radius:11px;line-height:20px}.VPBadge.info[data-v-350d3852]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-350d3852]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-350d3852]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-350d3852]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-c70503b8]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-c70503b8]{padding:96px 32px 168px}}.code[data-v-c70503b8]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-c70503b8]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-c70503b8]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-c70503b8]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-c70503b8]{padding-top:20px}.link[data-v-c70503b8]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .25s,color .25s}.link[data-v-c70503b8]:hover{border-color:var(--vp-c-brand-dark);color:var(--vp-c-brand-dark)}.root[data-v-b0ff2abe]{position:relative;z-index:1}.nested[data-v-b0ff2abe]{padding-left:13px}.outline-link[data-v-b0ff2abe]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:500}.outline-link[data-v-b0ff2abe]:hover,.outline-link.active[data-v-b0ff2abe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b0ff2abe]{padding-left:13px}.VPDocAsideOutline[data-v-ff0f39c8]{display:none}.VPDocAsideOutline.has-outline[data-v-ff0f39c8]{display:block}.content[data-v-ff0f39c8]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-ff0f39c8]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:1px;height:18px;background-color:var(--vp-c-brand);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-ff0f39c8]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-149a99df]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-149a99df]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-face870a]{margin-top:64px}.edit-info[data-v-face870a]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-face870a]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-face870a]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.edit-link-button[data-v-face870a]:hover{color:var(--vp-c-brand-dark)}.edit-link-icon[data-v-face870a]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-face870a]{border-top:1px solid var(--vp-c-divider);padding-top:24px}@media (min-width: 640px){.prev-next[data-v-face870a]{display:flex}}.pager.has-prev[data-v-face870a]{padding-top:8px}@media (min-width: 640px){.pager[data-v-face870a]{display:flex;flex-direction:column;flex-shrink:0;width:50%}.pager.has-prev[data-v-face870a]{padding-top:0;padding-left:16px}}.pager-link[data-v-face870a]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-face870a]:hover{border-color:var(--vp-c-brand)}.pager-link.next[data-v-face870a]{margin-left:auto;text-align:right}.desc[data-v-face870a]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-face870a]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.VPDocOutlineDropdown[data-v-2edece88]{margin-bottom:42px}.VPDocOutlineDropdown button[data-v-2edece88]{display:block;font-size:14px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;border:1px solid var(--vp-c-border);padding:4px 12px;border-radius:8px}.VPDocOutlineDropdown button[data-v-2edece88]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-2edece88]{color:var(--vp-c-text-1)}.icon[data-v-2edece88]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-2edece88] .outline-link{font-size:13px}.open>.icon[data-v-2edece88]{transform:rotate(90deg)}.items[data-v-2edece88]{margin-top:10px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-e9631fd0]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-e9631fd0]{display:none}@media (min-width: 960px) and (max-width: 1280px){.VPDoc .VPDocOutlineDropdown[data-v-e9631fd0]{display:block}}@media (min-width: 768px){.VPDoc[data-v-e9631fd0]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-e9631fd0]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-e9631fd0]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-e9631fd0]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-e9631fd0]{display:flex;justify-content:center}.VPDoc .aside[data-v-e9631fd0]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-e9631fd0]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-e9631fd0]{max-width:1104px}}.container[data-v-e9631fd0]{margin:0 auto;width:100%}.aside[data-v-e9631fd0]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-e9631fd0]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-e9631fd0]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-e9631fd0]::-webkit-scrollbar{display:none}.aside-curtain[data-v-e9631fd0]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-e9631fd0]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-e9631fd0]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-e9631fd0]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-e9631fd0]{order:1;margin:0;min-width:640px}}.content-container[data-v-e9631fd0]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-e9631fd0]{max-width:688px}.external-link-icon-enabled[data-v-e9631fd0] :is(.vp-doc a[href*="://"],.vp-doc a[target="_blank"]):after{content:""}.VPButton[data-v-567ba664]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-567ba664]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-567ba664]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-567ba664]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-567ba664]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-567ba664]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-567ba664]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-567ba664]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-567ba664]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-567ba664]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-567ba664]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-567ba664]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-567ba664]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-6db2186b]{display:none}.dark .VPImage.light[data-v-6db2186b]{display:none}.VPHero[data-v-fd2650d5]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-fd2650d5]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-fd2650d5]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-fd2650d5]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-fd2650d5]{flex-direction:row}}.main[data-v-fd2650d5]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-fd2650d5]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-fd2650d5]{text-align:left}}@media (min-width: 960px){.main[data-v-fd2650d5]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-fd2650d5]{max-width:592px}}.name[data-v-fd2650d5],.text[data-v-fd2650d5]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-fd2650d5],.VPHero.has-image .text[data-v-fd2650d5]{margin:0 auto}.name[data-v-fd2650d5]{color:var(--vp-home-hero-name-color)}.clip[data-v-fd2650d5]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-fd2650d5],.text[data-v-fd2650d5]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-fd2650d5],.text[data-v-fd2650d5]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-fd2650d5],.VPHero.has-image .text[data-v-fd2650d5]{margin:0}}.tagline[data-v-fd2650d5]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-fd2650d5]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-fd2650d5]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-fd2650d5]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-fd2650d5]{margin:0}}.actions[data-v-fd2650d5]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-fd2650d5]{justify-content:center}@media (min-width: 640px){.actions[data-v-fd2650d5]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-fd2650d5]{justify-content:flex-start}}.action[data-v-fd2650d5]{flex-shrink:0;padding:6px}.image[data-v-fd2650d5]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-fd2650d5]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-fd2650d5]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-fd2650d5]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-fd2650d5]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-fd2650d5]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-fd2650d5]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-fd2650d5]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-fd2650d5]{width:320px;height:320px}}[data-v-fd2650d5] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-fd2650d5] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-fd2650d5] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-837f6cca]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-837f6cca]:hover{border-color:var(--vp-c-brand);background-color:var(--vp-c-bg-soft-up)}.box[data-v-837f6cca]{display:flex;flex-direction:column;padding:24px;height:100%}.VPFeature[data-v-837f6cca] .VPImage{width:48px;height:48px;margin-bottom:20px}.icon[data-v-837f6cca]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-bg-soft-down);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-837f6cca]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-837f6cca]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-837f6cca]{padding-top:8px}.link-text-value[data-v-837f6cca]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.link-text-icon[data-v-837f6cca]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-ba861f23]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-ba861f23]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-ba861f23]{padding:0 64px}}.container[data-v-ba861f23]{margin:0 auto;max-width:1152px}.items[data-v-ba861f23]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-ba861f23]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-ba861f23],.item.grid-4[data-v-ba861f23],.item.grid-6[data-v-ba861f23]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-ba861f23],.item.grid-4[data-v-ba861f23]{width:50%}.item.grid-3[data-v-ba861f23],.item.grid-6[data-v-ba861f23]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-ba861f23]{width:25%}}.VPHome[data-v-d82743a8]{padding-bottom:96px}.VPHome[data-v-d82743a8] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-d82743a8]{padding-bottom:128px}}.VPContent[data-v-97b5189c]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-97b5189c]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-97b5189c]{margin:0}@media (min-width: 960px){.VPContent[data-v-97b5189c]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-97b5189c]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-97b5189c]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-f4388a15]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-f4388a15]{display:none}@media (min-width: 768px){.VPFooter[data-v-f4388a15]{padding:32px}}.container[data-v-f4388a15]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-f4388a15],.copyright[data-v-f4388a15]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-687955bc]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-687955bc]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-687955bc]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-687955bc]{color:var(--vp-c-text-1)}.icon[data-v-687955bc]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-687955bc] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-687955bc]{transform:rotate(90deg)}.items[data-v-687955bc]{position:absolute;left:20px;right:20px;top:64px;background-color:var(--vp-local-nav-bg-color);padding:4px 10px 16px;border:1px solid var(--vp-c-divider);border-radius:8px;max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.top-link[data-v-687955bc]{display:block;color:var(--vp-c-brand);font-size:13px;font-weight:500;padding:6px 0;margin:0 13px 10px;border-bottom:1px solid var(--vp-c-divider)}.flyout-enter-active[data-v-687955bc]{transition:all .2s ease-out}.flyout-leave-active[data-v-687955bc]{transition:all .15s ease-in}.flyout-enter-from[data-v-687955bc],.flyout-leave-to[data-v-687955bc]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a97031cc]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a97031cc]{position:fixed}.VPLocalNav.reached-top[data-v-a97031cc]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-a97031cc]{display:none}}.menu[data-v-a97031cc]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a97031cc]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a97031cc]{padding:0 32px}}.menu-icon[data-v-a97031cc]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-a97031cc]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a97031cc]{padding:12px 32px 11px}}.VPSwitch[data-v-f3c41672]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s}.VPSwitch[data-v-f3c41672]:hover{border-color:var(--vp-input-hover-border-color)}.check[data-v-f3c41672]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s}.icon[data-v-f3c41672]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-f3c41672] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-f3c41672] svg{fill:var(--vp-c-text-1);transition:opacity .25s}.sun[data-v-82b282f1]{opacity:1}.moon[data-v-82b282f1],.dark .sun[data-v-82b282f1]{opacity:0}.dark .moon[data-v-82b282f1]{opacity:1}.dark .VPSwitchAppearance[data-v-82b282f1] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-f6a63727]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-f6a63727]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-2f2cfafc]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-2f2cfafc]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-2f2cfafc]:hover{color:var(--vp-c-brand);background-color:var(--vp-c-bg-elv-mute)}.link.active[data-v-2f2cfafc]{color:var(--vp-c-brand)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e7ea1737]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e7ea1737] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e7ea1737] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e7ea1737] .group:last-child{padding-bottom:0}.VPMenu[data-v-e7ea1737] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e7ea1737] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e7ea1737] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e7ea1737] .action{padding-left:24px}.VPFlyout[data-v-764effdf]{position:relative}.VPFlyout[data-v-764effdf]:hover{color:var(--vp-c-brand);transition:color .25s}.VPFlyout:hover .text[data-v-764effdf]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-764effdf]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-764effdf]{color:var(--vp-c-brand)}.VPFlyout.active:hover .text[data-v-764effdf]{color:var(--vp-c-brand-dark)}.VPFlyout:hover .menu[data-v-764effdf],.button[aria-expanded=true]+.menu[data-v-764effdf]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-764effdf]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-764effdf]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-764effdf]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-764effdf]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-764effdf]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-764effdf]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-36371990]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-36371990]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-36371990]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-40855f84]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-40855f84]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-40855f84]{display:none}}.trans-title[data-v-40855f84]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-40855f84],.item.social-links[data-v-40855f84]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-40855f84]{min-width:176px}.appearance-action[data-v-40855f84]{margin-right:-2px}.social-links-list[data-v-40855f84]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-5e623618]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-5e623618],.VPNavBarMenuLink[data-v-5e623618]:hover{color:var(--vp-c-brand)}.VPNavBarMenu[data-v-7f418b0f]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-7f418b0f]{display:flex}}/*! @docsearch/css 3.5.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.DocSearch{--docsearch-primary-color: var(--vp-c-brand);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark .DocSearch{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-bg-soft-mute);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:1px;letter-spacing:-12px;color:transparent}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:var(--vp-meta-key);font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-bg-soft-mute)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-305adf00]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-305adf00]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-305adf00]{border-bottom-color:var(--vp-c-divider)}}[data-v-305adf00] .logo{margin-right:8px;height:24px}.VPNavBarTranslations[data-v-74abcbb9]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-74abcbb9]{display:flex;align-items:center}}.title[data-v-74abcbb9]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-381568bf]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-381568bf]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-381568bf]{padding:0}.VPNavBar.fill[data-v-381568bf]:not(.has-sidebar){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-381568bf]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-381568bf],.container>.content[data-v-381568bf]{pointer-events:none}.container[data-v-381568bf] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-381568bf]{max-width:100%}}.title[data-v-381568bf]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-381568bf]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-381568bf]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-381568bf]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-381568bf]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-381568bf]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-381568bf]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .content-body[data-v-381568bf],.VPNavBar.fill .content-body[data-v-381568bf]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 768px){.content-body[data-v-381568bf]{column-gap:.5rem}}.menu+.translations[data-v-381568bf]:before,.menu+.appearance[data-v-381568bf]:before,.menu+.social-links[data-v-381568bf]:before,.translations+.appearance[data-v-381568bf]:before,.appearance+.social-links[data-v-381568bf]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-381568bf]:before,.translations+.appearance[data-v-381568bf]:before{margin-right:16px}.appearance+.social-links[data-v-381568bf]:before{margin-left:16px}.social-links[data-v-381568bf]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-381568bf]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-381568bf]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-381568bf]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenMenuLink[data-v-30be0acb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-30be0acb]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupLink[data-v-6656c42a]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-6656c42a]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-338a1689]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-338a1689]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-338a1689]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-338a1689]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-338a1689]{padding-bottom:6px;color:var(--vp-c-brand)}.VPNavScreenMenuGroup.open .button-icon[data-v-338a1689]{transform:rotate(45deg)}.button[data-v-338a1689]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-338a1689]:hover{color:var(--vp-c-brand)}.button-icon[data-v-338a1689]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-338a1689]:first-child{padding-top:0}.group+.group[data-v-338a1689],.group+.item[data-v-338a1689]{padding-top:4px}.VPNavScreenAppearance[data-v-add8f686]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-add8f686]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenTranslations[data-v-d72aa483]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-d72aa483]{height:auto}.title[data-v-d72aa483]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-d72aa483]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-d72aa483]{margin-right:8px}.icon.chevron[data-v-d72aa483]{margin-left:4px}.list[data-v-d72aa483]{padding:4px 0 0 24px}.link[data-v-d72aa483]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-724636ae]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-724636ae],.VPNavScreen.fade-leave-active[data-v-724636ae]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-724636ae],.VPNavScreen.fade-leave-active .container[data-v-724636ae]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-724636ae],.VPNavScreen.fade-leave-to[data-v-724636ae]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-724636ae],.VPNavScreen.fade-leave-to .container[data-v-724636ae]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-724636ae]{display:none}}.container[data-v-724636ae]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-724636ae],.menu+.appearance[data-v-724636ae],.translations+.appearance[data-v-724636ae]{margin-top:24px}.menu+.social-links[data-v-724636ae]{margin-top:16px}.appearance+.social-links[data-v-724636ae]{margin-top:16px}.VPNav[data-v-7e5bc4a5]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7e5bc4a5]{position:fixed}}.VPSidebarItem.level-0[data-v-c4656e6d]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-c4656e6d]{padding-bottom:10px}.item[data-v-c4656e6d]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-c4656e6d]{cursor:pointer}.indicator[data-v-c4656e6d]{position:absolute;top:6px;bottom:6px;left:-17px;width:1px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-c4656e6d],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-c4656e6d],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-c4656e6d],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-c4656e6d]{background-color:var(--vp-c-brand)}.link[data-v-c4656e6d]{display:flex;align-items:center;flex-grow:1}.text[data-v-c4656e6d]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-c4656e6d]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-c4656e6d],.VPSidebarItem.level-2 .text[data-v-c4656e6d],.VPSidebarItem.level-3 .text[data-v-c4656e6d],.VPSidebarItem.level-4 .text[data-v-c4656e6d],.VPSidebarItem.level-5 .text[data-v-c4656e6d]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-c4656e6d],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-c4656e6d]{color:var(--vp-c-brand)}.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-c4656e6d],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-c4656e6d]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-c4656e6d],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-c4656e6d]{color:var(--vp-c-brand)}.caret[data-v-c4656e6d]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s}.item:hover .caret[data-v-c4656e6d]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-c4656e6d]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-c4656e6d]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-c4656e6d]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-c4656e6d],.VPSidebarItem.level-2 .items[data-v-c4656e6d],.VPSidebarItem.level-3 .items[data-v-c4656e6d],.VPSidebarItem.level-4 .items[data-v-c4656e6d],.VPSidebarItem.level-5 .items[data-v-c4656e6d]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-c4656e6d]{display:none}.VPSidebar[data-v-54885d6c]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-54885d6c]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-54885d6c]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-54885d6c]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-54885d6c]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-54885d6c]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-54885d6c]{outline:0}.group+.group[data-v-54885d6c]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-54885d6c]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-ae3e3f51]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-ae3e3f51]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-ae3e3f51]{top:14px;left:16px}}.Layout[data-v-99cf8a88]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3c6e61c2]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-3c6e61c2]{margin:0 auto;max-width:1152px}.love[data-v-3c6e61c2]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-3c6e61c2]{width:28px;height:28px;fill:currentColor}.message[data-v-3c6e61c2]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3c6e61c2]{padding-top:32px}.action[data-v-3c6e61c2]{padding-top:40px;text-align:center}.VPTeamPage[data-v-10b00018]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-10b00018]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-10b00018-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-10b00018-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:96px}}.VPTeamMembers[data-v-10b00018-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-10b00018-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-10b00018-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-a3462077]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-a3462077]{padding:32px}.VPTeamMembersItem.small .data[data-v-a3462077]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-a3462077]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-a3462077]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-a3462077]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-a3462077]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-a3462077]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-a3462077]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-a3462077]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-a3462077]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-a3462077]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-a3462077]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-a3462077]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-a3462077]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-a3462077]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-a3462077]{text-align:center}.avatar[data-v-a3462077]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-a3462077]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-a3462077]{margin:0;font-weight:600}.affiliation[data-v-a3462077]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-a3462077]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-a3462077]:hover{color:var(--vp-c-brand)}.desc[data-v-a3462077]{margin:0 auto}.desc[data-v-a3462077] a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.links[data-v-a3462077]{display:flex;justify-content:center;height:56px}.sp-link[data-v-a3462077]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-a3462077]:hover,.sp .sp-link.link[data-v-a3462077]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-a3462077]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-04685dce]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-04685dce]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-04685dce]{max-width:876px}.VPTeamMembers.medium .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-04685dce]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-04685dce]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-04685dce]{max-width:760px}.container[data-v-04685dce]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.style-explain[data-v-214cdbcb]{display:flex;flex-direction:row;flex-wrap:wrap;margin-top:12px}.style-explain-item[data-v-214cdbcb]{display:flex;flex-direction:row;align-items:center;margin-right:30px;margin-top:2px}.style-explain-item strong[data-v-214cdbcb]{display:flex;flex-direction:row;align-items:center;justify-content:center;background-color:red;width:18px;height:18px;margin-right:4px;font-size:12px;border-radius:9px;color:#fff}.who-are-use-section[data-v-37acb926]{margin-top:100px}.who-are-use h2[data-v-37acb926]{font-size:24px;text-align:center;font-weight:600}.who-are-use .grid[data-v-37acb926]{display:flex;flex-wrap:wrap;gap:6px;margin-top:40px}.who-are-use .grid .item[data-v-37acb926]{display:flex;justify-content:center;align-items:center;width:100%;height:120px;background-color:var(--vp-c-bg-soft);border-radius:4px;transition:background-color .2s;cursor:pointer;color:inherit}.who-are-use .grid .item .image[data-v-37acb926]{height:34px}.who-are-use .grid .item[data-v-37acb926]:hover{background-color:var(--vp-c-bg-soft-down)}.dark .who-are-use .grid .item .image[data-v-37acb926]{filter:grayscale(1) invert(1)}.dark .who-are-use .grid .item[data-v-37acb926]:hover{background-color:var(--vp-c-neutral)}.dark .who-are-use .grid .item:hover .image[data-v-37acb926]{filter:grayscale(0) invert(0)}@media (min-width: 640px){.who-are-use .grid .item[data-v-37acb926]{width:calc((100% - 12px) / 3)}}@media (min-width: 960px){.who-are-use .grid .item[data-v-37acb926]{width:calc((100% - 18px)/4)}}.who-are-use .become-next[data-v-37acb926]{display:flex;flex-direction:row;justify-content:center;padding-top:50px}.who-are-use .become-next a[data-v-37acb926]{font-size:14px;line-height:36px;border-radius:18px;padding:0 20px;color:var(--vp-c-text-3);font-weight:400;border:solid 1px var(--vp-button-alt-border);cursor:pointer;transition:border-color .2s,color .2s}.who-are-use .become-next a[data-v-37acb926]:hover{border-color:var(--vp-c-brand);color:var(--vp-c-brand)}.NotFound[data-v-507dca79]{padding:96px 24px;text-align:center}@media (min-width: 768px){.NotFound[data-v-507dca79]{padding:128px 32px 168px}}.code[data-v-507dca79]{font-size:80px;font-weight:600}.code span[data-v-507dca79]{display:inline-block;width:130px;height:130px;line-height:130px;border-top:solid 6px var(--vp-c-border);border-left:solid 10px var(--vp-c-border);border-right:solid 10px var(--vp-c-border);border-bottom:solid 16px var(--vp-c-border);border-radius:8px;padding-bottom:30px;box-sizing:border-box}.title[data-v-507dca79]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-507dca79]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-507dca79]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-507dca79]{padding-top:20px}.link[data-v-507dca79]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .2s,color .2s}.link[data-v-507dca79]:hover{border-color:var(--vp-c-brand-light);color:var(--vp-c-brand-light)}:root{--vp-c-brand: #1677FF;--vp-c-brand-dark: #1677FF;--vp-c-brand-light: #3086ff;--vp-c-brand-lighter: #4995ff;--vp-c-brand-lightest: #afd0ff;--vp-c-brand-dimm: rgba(22, 119, 255, .08)}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 145deg, #2DC08E 26%, #F92855 );--vp-home-hero-image-background-image: linear-gradient( -45deg, rgba(45, 192, 142, .3), rgba(249, 40, 85, .3) );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(60px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(80px)}}:root{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm)}.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm)}.home-section{border-top:1px solid var(--vp-c-gutter);padding:60px 24px;text-align:center}.home-section .home-section-content{margin:0 auto;max-width:1152px}@media (min-width: 640px){.home-section{padding:60px 48px}}@media (min-width: 960px){.home-section{padding:60px 64px}}.VPLocalSearchBox[data-v-d4300ab9]{position:fixed;z-index:100;inset:0;display:flex}.backdrop[data-v-d4300ab9]{position:absolute;inset:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-d4300ab9]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 768px){.shell[data-v-d4300ab9]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-d4300ab9]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 768px){.search-bar[data-v-d4300ab9]{padding:0 8px}}.search-bar[data-v-d4300ab9]:focus-within{border-color:var(--vp-c-brand)}.search-icon[data-v-d4300ab9]{margin:8px}@media (max-width: 768px){.search-icon[data-v-d4300ab9]{display:none}}.search-input[data-v-d4300ab9]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 768px){.search-input[data-v-d4300ab9]{padding:6px 4px}}.search-actions[data-v-d4300ab9]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-d4300ab9]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-d4300ab9]{display:none}}.search-actions button[data-v-d4300ab9]{padding:8px}.search-actions button[data-v-d4300ab9]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-d4300ab9]{color:var(--vp-c-brand)}.search-actions button.clear-button[data-v-d4300ab9]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-d4300ab9]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-d4300ab9]{display:flex;align-items:center;gap:4px}@media (max-width: 768px){.search-keyboard-shortcuts[data-v-d4300ab9]{display:none}}.search-keyboard-shortcuts kbd[data-v-d4300ab9]{background:rgba(128,128,128,.1);border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-d4300ab9]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-d4300ab9]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-d4300ab9]{margin:12px;width:100%;overflow:hidden}@media (max-width: 768px){.result>div[data-v-d4300ab9]{margin:8px}}.titles[data-v-d4300ab9]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-d4300ab9]{display:flex;align-items:center;gap:4px}.title.main[data-v-d4300ab9]{font-weight:500}.title-icon[data-v-d4300ab9]{opacity:.5;font-weight:500;color:var(--vp-c-brand)}.title svg[data-v-d4300ab9]{opacity:.5}.result.selected[data-v-d4300ab9]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-d4300ab9]{position:relative}.excerpt[data-v-d4300ab9]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-d4300ab9]{opacity:1}.excerpt[data-v-d4300ab9] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-d4300ab9] mark,.excerpt[data-v-d4300ab9] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-d4300ab9] .vp-code-group .tabs{display:none}.excerpt[data-v-d4300ab9] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-d4300ab9]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-d4300ab9]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-d4300ab9],.result.selected .title-icon[data-v-d4300ab9]{color:var(--vp-c-brand)!important}.no-results[data-v-d4300ab9]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-d4300ab9]{flex:none} diff --git a/en-US/guide/changelog.html b/en-US/guide/changelog.html index 7dd99c529..cf9b5d3e0 100644 --- a/en-US/guide/changelog.html +++ b/en-US/guide/changelog.html @@ -5,20 +5,20 @@ 📠 Change Log | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

📠 Change Log

9.5.0

2023-06-15

  • 🆕 Overlay add event onDoubleClick, add property modeSensitivity.
  • 🆕 Style configuration candle.tooltip.custom supports string templates.
  • 🐞 Optimize the scrolling frame drop issue on the mobile side.
  • 🐞 Fix pane id naming typo.
  • 💄 Optimize the response sensitivity of dividing line events.
  • 💄 Optimize the attrs type declaration in OverlayFigure under typescript.

9.4.0

2023-05-25

  • 🆕 Instance API 'createOverlay' supports arrays.
  • 🆕 overlay add attributes paneId, defaultZLevel and zLevel.
  • 🆕 xAxis add methods convertTimestampFromPixel and convertTimestampToPixel.
  • 💄 Optimize the display of candle.

9.3.0

2023-05-13

  • 🆕 Add chart API utils.calcTextWidth.
  • 🆕 The instance APIs createIndicator(value, isStack, options) and setPaneOptions(options) have added options. axisOptions.
  • 🆕 The indicator graphic configuration supports customization.
  • 💄 Optimize the bar width ratio.
  • 💄 Optimize internal acquisition of screen pixel ratio.
  • 💄 Optimize internal ID generation.

9.2.2

2023-05-04

  • 🐞 Fix figure line check event error.
  • 💄 Optimize type check.

9.2.1

2023-04-27

  • 💄 Optimize the default style by changing #EF5350 to #F92855 and #26A69A to #2DC08E.
  • 💄 Optimize typescript declarations.

9.2.0

2023-04-24

  • 🆕 Add instance API getOffsetRightDistance and executeAction.
  • 🆕 Add success callback for instance API applyNewData, applyMoreData and updateData.
  • 🆕 Support the display of thousands.
  • 🆕 Add style configuration candle.bar.upBorderColor, candle.bar.downBorderColor, candle.bar.noChangeBorderColor, candle.bar.upWickColor, candle.bar.downWickColor, candle.bar.noChangeWickColor, candle.tooltip.rect.position and candle.tooltip.rect.offsetBottom.
  • 🆕 Add realFrom and realTo to all visibleRange.
  • 💄 Optimize API, klinecharts.utils.isValid and klinecharts.utils.formatBigNumber.
  • 💄 Optimize the log output in the development environment.

9.1.3

2023-04-15

  • 🐞 Fix the issue of not refreshing when the input parameter of the chart API applyNewData is an empty array.
  • 🐞 Fix the issue of cross cursor text not displaying on the y-axis when there is no data.
  • 💄 Optimize the display of area chart.
  • 💄 Optimize coverage event callback parameters and add figureKey and figureIndex.
  • 💄 Optimize typescript overlay style types, as well as base types DeepPartial and DeepRequired.

9.1.2

2023-04-10

  • 🐞 Fix the issue of inaccurate triggering events for the built-in figure line.
  • 🐞 Fix the issue of triggering events for the first time after the simpleAnnotation and simpleTag built-in overlays are drawn.
  • 💄 Optimize overlay figure to ignore events and support event selection.

9.1.1

2023-03-14

  • 🐞 Fix the invalidity of the built-in figure arc.
  • 💄 Optimize rendering updates.

9.1.0

2023-02-23

  • 🆕 The chart instance method subscribeAction and unsubscribeAction types add onCandleBarClick.
  • 🆕 The overlay supports double-clicking to force the end of drawing.
  • 💄 Optimize event handling.

9.0.1

2023-02-17 🐞 Fix the introduction of typescript.

9.0.0

2023-02-16

  • 🛠 Typescript refactoring.
  • 🆕 New features
    • Add Y axis direction zoom and scroll.
    • API
      • New chart methods registerFigure, getSupportFigures, getFigureClass, rigiderOverlay, getSupportOverlays, registerLocale, getSupportLocales, registerStyles are added.
      • New instance methods, getSize, setLocale, getLocal, setCustomApi, getVisibleRange, createOverlay, getOverlayById, overrideOverlay, removeOverlay.
    • Style Configuration
      • Add candle.priceMark.last.text.borderStyle, candle.tooltip.icons, indicator.lastValueMark.text.borderStyle, indicator.tooltip.icons, crosshair.horizontal. text.borderStyle, crosshair.vertical.text.borderStyle.
  • 👉 Change
    • API
      • Chart method extension.addTechnicalIndicatorTemplate is changed to registerIndicator.
      • Chart method extension.addShapeTemplate is changed to registerOverlay.
      • Instance method setStyleOptions is changed to setStyles.
      • Instance method getStyleOptions is changed to getStyles.
      • Instance method setPaneOptions(options), options add new attribute gap.
      • Instance method setOffsetRightSpace is changed to setOffsetRightDistance.
      • Instance method createTechnicalIndicator is changed to createIndicator
      • Instance method overlayTechnicalIndicator is changed to overrideIndicator.
      • Instance method getTechnicalIndicatorByPaneId is changed to getIndicatorByPaneId.
      • Instance method removeTechnicalIndicator is changed to removeIndicator.
    • Style Configuration
      • All line.style options are changed to solid and dashed.
      • All dashValue is changed to dashedValue.
      • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marinEnd.
      • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marinEnd.
      • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles
    • Custom Extension
      • The technical indicator attribute calcParams has been changed to support any type.
      • The technical indicator attribute plots is changed to figures.
      • The technical indicator attribute regeneratePlots is changed to' regeneratefigures'.
      • The technical indicator attribute calcTechnicalIndicator is changed to calc.
      • The technical indicator attribute render is changed to 'draw'.
  • 🗑 Abandonment
    • API
      • Delete instance methods getWidth, getHeight, and use getSize instead.
      • Delete instance methods createShape, createAnnotation, createTag, and use createOverlay instead.
      • Delete instance methods removeShape, removeAnnotation, removeTag. Use removeOverlay instead.
      • Delete the instance method setShapeOptions and use overrideOverlay instead.
      • Delete instance methods createHtml, removeHtml, addTechnicalIndicatorTemplate, getTechnicalIndicatorTemplate, addShapeTemplate.
    • Style Configuration
      • Delete shape, annotation, tag and use overlay instead.
      • Delete candle.margintechnicalIndicator.margin
    • Custom Extension
      • The related attributes are no longer saved in the technical indicator template.
      • Delete Shape and use Overlay instead.

8.x

Go to Github to check the change log for 8.x.

7.x

Go to Github to check the change log for 7.x.

6.x

Go to Github to check the change log for 6.x.

5.x

Go to Github to view the 5.x release notes.

4.x

Go to Github to view the 4.x release notes.

Released under the Apache License V2.

- +
Skip to content
On this page

📠 Change Log

9.5.0

2023-06-15

  • 🆕 Overlay add event onDoubleClick, add property modeSensitivity.
  • 🆕 Style configuration candle.tooltip.custom supports string templates.
  • 🐞 Optimize the scrolling frame drop issue on the mobile side.
  • 🐞 Fix pane id naming typo.
  • 💄 Optimize the response sensitivity of dividing line events.
  • 💄 Optimize the attrs type declaration in OverlayFigure under typescript.

9.4.0

2023-05-25

  • 🆕 Instance API 'createOverlay' supports arrays.
  • 🆕 overlay add attributes paneId, defaultZLevel and zLevel.
  • 🆕 xAxis add methods convertTimestampFromPixel and convertTimestampToPixel.
  • 💄 Optimize the display of candle.

9.3.0

2023-05-13

  • 🆕 Add chart API utils.calcTextWidth.
  • 🆕 The instance APIs createIndicator(value, isStack, options) and setPaneOptions(options) have added options. axisOptions.
  • 🆕 The indicator graphic configuration supports customization.
  • 💄 Optimize the bar width ratio.
  • 💄 Optimize internal acquisition of screen pixel ratio.
  • 💄 Optimize internal ID generation.

9.2.2

2023-05-04

  • 🐞 Fix figure line check event error.
  • 💄 Optimize type check.

9.2.1

2023-04-27

  • 💄 Optimize the default style by changing #EF5350 to #F92855 and #26A69A to #2DC08E.
  • 💄 Optimize typescript declarations.

9.2.0

2023-04-24

  • 🆕 Add instance API getOffsetRightDistance and executeAction.
  • 🆕 Add success callback for instance API applyNewData, applyMoreData and updateData.
  • 🆕 Support the display of thousands.
  • 🆕 Add style configuration candle.bar.upBorderColor, candle.bar.downBorderColor, candle.bar.noChangeBorderColor, candle.bar.upWickColor, candle.bar.downWickColor, candle.bar.noChangeWickColor, candle.tooltip.rect.position and candle.tooltip.rect.offsetBottom.
  • 🆕 Add realFrom and realTo to all visibleRange.
  • 💄 Optimize API, klinecharts.utils.isValid and klinecharts.utils.formatBigNumber.
  • 💄 Optimize the log output in the development environment.

9.1.3

2023-04-15

  • 🐞 Fix the issue of not refreshing when the input parameter of the chart API applyNewData is an empty array.
  • 🐞 Fix the issue of cross cursor text not displaying on the y-axis when there is no data.
  • 💄 Optimize the display of area chart.
  • 💄 Optimize coverage event callback parameters and add figureKey and figureIndex.
  • 💄 Optimize typescript overlay style types, as well as base types DeepPartial and DeepRequired.

9.1.2

2023-04-10

  • 🐞 Fix the issue of inaccurate triggering events for the built-in figure line.
  • 🐞 Fix the issue of triggering events for the first time after the simpleAnnotation and simpleTag built-in overlays are drawn.
  • 💄 Optimize overlay figure to ignore events and support event selection.

9.1.1

2023-03-14

  • 🐞 Fix the invalidity of the built-in figure arc.
  • 💄 Optimize rendering updates.

9.1.0

2023-02-23

  • 🆕 The chart instance method subscribeAction and unsubscribeAction types add onCandleBarClick.
  • 🆕 The overlay supports double-clicking to force the end of drawing.
  • 💄 Optimize event handling.

9.0.1

2023-02-17 🐞 Fix the introduction of typescript.

9.0.0

2023-02-16

  • 🛠 Typescript refactoring.
  • 🆕 New features
    • Add Y axis direction zoom and scroll.
    • API
      • New chart methods registerFigure, getSupportFigures, getFigureClass, rigiderOverlay, getSupportOverlays, registerLocale, getSupportLocales, registerStyles are added.
      • New instance methods, getSize, setLocale, getLocal, setCustomApi, getVisibleRange, createOverlay, getOverlayById, overrideOverlay, removeOverlay.
    • Style Configuration
      • Add candle.priceMark.last.text.borderStyle, candle.tooltip.icons, indicator.lastValueMark.text.borderStyle, indicator.tooltip.icons, crosshair.horizontal. text.borderStyle, crosshair.vertical.text.borderStyle.
  • 👉 Change
    • API
      • Chart method extension.addTechnicalIndicatorTemplate is changed to registerIndicator.
      • Chart method extension.addShapeTemplate is changed to registerOverlay.
      • Instance method setStyleOptions is changed to setStyles.
      • Instance method getStyleOptions is changed to getStyles.
      • Instance method setPaneOptions(options), options add new attribute gap.
      • Instance method setOffsetRightSpace is changed to setOffsetRightDistance.
      • Instance method createTechnicalIndicator is changed to createIndicator
      • Instance method overlayTechnicalIndicator is changed to overrideIndicator.
      • Instance method getTechnicalIndicatorByPaneId is changed to getIndicatorByPaneId.
      • Instance method removeTechnicalIndicator is changed to removeIndicator.
    • Style Configuration
      • All line.style options are changed to solid and dashed.
      • All dashValue is changed to dashedValue.
      • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marinEnd.
      • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marinEnd.
      • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles
    • Custom Extension
      • The technical indicator attribute calcParams has been changed to support any type.
      • The technical indicator attribute plots is changed to figures.
      • The technical indicator attribute regeneratePlots is changed to' regeneratefigures'.
      • The technical indicator attribute calcTechnicalIndicator is changed to calc.
      • The technical indicator attribute render is changed to 'draw'.
  • 🗑 Abandonment
    • API
      • Delete instance methods getWidth, getHeight, and use getSize instead.
      • Delete instance methods createShape, createAnnotation, createTag, and use createOverlay instead.
      • Delete instance methods removeShape, removeAnnotation, removeTag. Use removeOverlay instead.
      • Delete the instance method setShapeOptions and use overrideOverlay instead.
      • Delete instance methods createHtml, removeHtml, addTechnicalIndicatorTemplate, getTechnicalIndicatorTemplate, addShapeTemplate.
    • Style Configuration
      • Delete shape, annotation, tag and use overlay instead.
      • Delete candle.margintechnicalIndicator.margin
    • Custom Extension
      • The related attributes are no longer saved in the technical indicator template.
      • Delete Shape and use Overlay instead.

8.x

Go to Github to check the change log for 8.x.

7.x

Go to Github to check the change log for 7.x.

6.x

Go to Github to check the change log for 6.x.

5.x

Go to Github to view the 5.x release notes.

4.x

Go to Github to view the 4.x release notes.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/chart-api.html b/en-US/guide/chart-api.html index 05a5a3f60..574259792 100644 --- a/en-US/guide/chart-api.html +++ b/en-US/guide/chart-api.html @@ -5,18 +5,19 @@ Chart API | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

Chart API

init(ds, options)

typescript
(
+    
Skip to content
On this page

Chart API

init(ds, options)

typescript
(
    ds: string | HTMLElement,
    options?: {
       locale?: string
@@ -792,9 +793,8 @@
       borderRadius?: number
       backgroundColor?: string
    }
-) => void

Draw text with background.

  • ctx canvas context
  • rectText text parameter
    • x starting point x-axis value
    • y starting point y-axis value
    • text text content
    • align horizontal alignment
    • baseline vertical alignment
  • styles styles
    • style style
    • color color
    • size size
    • family font
    • weight weight
    • paddingLeft left padding,
    • paddingTop top padding,
    • paddingRight right padding,
    • paddingBottom bottom padding,
    • borderColor border color
    • borderSize border thickness
    • borderStyle border style
    • borderRadius border radius size
    • borderDashedValue border dashed line parameter value
    • backgroundColor background color

Released under the Apache License V2.

- +) => void

Draw text with background.

  • ctx canvas context
  • rectText text parameter
    • x starting point x-axis value
    • y starting point y-axis value
    • text text content
    • align horizontal alignment
    • baseline vertical alignment
  • styles styles
    • style style
    • color color
    • size size
    • family font
    • weight weight
    • paddingLeft left padding,
    • paddingTop top padding,
    • paddingRight right padding,
    • paddingBottom bottom padding,
    • borderColor border color
    • borderSize border thickness
    • borderStyle border style
    • borderRadius border radius size
    • borderDashedValue border dashed line parameter value
    • backgroundColor background color

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/datasource.html b/en-US/guide/datasource.html index 75fabe263..18a8da13a 100644 --- a/en-US/guide/datasource.html +++ b/en-US/guide/datasource.html @@ -5,18 +5,19 @@ 📚 Data | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

📚 Data

The data required for the chart must be in a fixed format. Through the chart API applyNewData(dataList, more), applyMoreData(dataList, more) and updateData(data) to interact data with the chart.

typescript
{
+    
Skip to content
On this page

📚 Data

The data required for the chart must be in a fixed format. Through the chart API applyNewData(dataList, more), applyMoreData(dataList, more) and updateData(data) to interact data with the chart.

typescript
{
   // Timestamp, millisecond, required fields
   timestamp: number
   // Open price, required fields
@@ -46,9 +47,8 @@
   volume: number
   // Turnover, a non-required field, if you need to display the technical indicators 'EMV' and 'AVP', you need to fill this field with data.
   turnover: number
-}

Released under the Apache License V2.

- +}

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/environment.html b/en-US/guide/environment.html index 8be4442f0..b629f8235 100644 --- a/en-US/guide/environment.html +++ b/en-US/guide/environment.html @@ -5,26 +5,26 @@ 🏝️ Environment | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

🏝️ Environment

Browser support

The chart is built based on html5 canvas and needs to run on a browser that supports canvas. If it needs to run on the mobile terminal, please use webview to load it.

Polyfill

core.js

The internal collection of the chart uses Map for compatibility with unsupported older browsers.

javascript
import 'core.js';
+    
Skip to content
On this page

🏝️ Environment

Browser support

The chart is built based on html5 canvas and needs to run on a browser that supports canvas. If it needs to run on the mobile terminal, please use webview to load it.

Polyfill

core.js

The internal collection of the chart uses Map for compatibility with unsupported older browsers.

javascript
import 'core.js';
 import { init } from 'klincharts';
import 'core.js';
 import { init } from 'klincharts';

Intl.js

Charts rely on Intl, some browsers do not have this API.

javascript
import 'intl';
 import 'intl/local-data/jsonp/en';
 import { init } from 'klincharts';
import 'intl';
 import 'intl/local-data/jsonp/en';
-import { init } from 'klincharts';

Released under the Apache License V2.

- +import { init } from 'klincharts';

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/faq.html b/en-US/guide/faq.html index 28b2619df..1cb43aed6 100644 --- a/en-US/guide/faq.html +++ b/en-US/guide/faq.html @@ -5,18 +5,19 @@ 🙋 FAQ | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

🙋 FAQ

After the chart is initialized, only one line can be seen?

The chart always fills the container, checking to see if the container has height.

The candle shows a line, no fluctuation, what to do?

Chart default price precision is two decimal, call setPriceVolumePrecision(pricePrecision, volumePrecision) to set the precision.

How to create a real-time chart?

Through style settings.

javascript
chart.setStyles({
+    
Skip to content
On this page

🙋 FAQ

After the chart is initialized, only one line can be seen?

The chart always fills the container, checking to see if the container has height.

The candle shows a line, no fluctuation, what to do?

Chart default price precision is two decimal, call setPriceVolumePrecision(pricePrecision, volumePrecision) to set the precision.

How to create a real-time chart?

Through style settings.

javascript
chart.setStyles({
   candle: {
     type: 'area',
   },
@@ -24,9 +25,8 @@
   candle: {
     type: 'area',
   },
-});

Built-in technical indicators, calculated data is not what you want, how to do?

You can override calc by the chart method createIndicator or overrideIndicator.

What if I want to create an indicator other than the built-in technical indicator?

Charts support custom technical indicators, see indicators for details.

Want to mark the point of sale, how should do?

Overlays can be used. The built-in overlay has a simpleAnnotation, which can be created with the chart api createOverlay({ name: 'simpleAnnotation', ... }, paneId).

Released under the Apache License V2.

- +});

Built-in technical indicators, calculated data is not what you want, how to do?

You can override calc by the chart method createIndicator or overrideIndicator.

What if I want to create an indicator other than the built-in technical indicator?

Charts support custom technical indicators, see indicators for details.

Want to mark the point of sale, how should do?

Overlays can be used. The built-in overlay has a simpleAnnotation, which can be created with the chart api createOverlay({ name: 'simpleAnnotation', ... }, paneId).

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/feedback.html b/en-US/guide/feedback.html index 71d9cb61c..78c76f4cd 100644 --- a/en-US/guide/feedback.html +++ b/en-US/guide/feedback.html @@ -5,21 +5,21 @@ 💬 Feedback | KLineChart - - + + + - - - - - - - + + + + + + + -
Skip to content
On this page

💬 Feedback

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

Wechat discussion group

Scan to add developers, note KLineChart, and join the group chat.

QQ discussion group

Released under the Apache License V2.

- +
Skip to content
On this page

💬 Feedback

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

Wechat discussion group

Scan to add developers, note KLineChart, and join the group chat.

QQ discussion group

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/figure.html b/en-US/guide/figure.html index a67e4bbf1..2a3746e58 100644 --- a/en-US/guide/figure.html +++ b/en-US/guide/figure.html @@ -5,18 +5,19 @@ Figure | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

Figure

Figure are an important part of the chart. All elements on the chart are composed of figures. If you need to make complex custom technical indicators and overlays, it is recommended to read carefully. This document describes the built-in figures and how to customize a figure. The basic figure can be obtained through the chart method klinecharts.getFigureClass(name).

Example of use

Note

It needs to be used when there is a canvas context.

javascript
// Get the figure class
+    
Skip to content
On this page

Figure

Figure are an important part of the chart. All elements on the chart are composed of figures. If you need to make complex custom technical indicators and overlays, it is recommended to read carefully. This document describes the built-in figures and how to customize a figure. The basic figure can be obtained through the chart method klinecharts.getFigureClass(name).

Example of use

Note

It needs to be used when there is a canvas context.

javascript
// Get the figure class
 // name is the name of the figure, such as 'arc', 'circle', etc.
 const Figure = klinecharts.getFigureClass(name)
 // instantiate and draw
@@ -540,9 +541,8 @@
        ctx.stroke()
      }
    }
-}

So a custom figure is completed.

Released under the Apache License V2.

- +}

So a custom figure is completed.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/getting-started.html b/en-US/guide/getting-started.html index be1e68c13..04626be96 100644 --- a/en-US/guide/getting-started.html +++ b/en-US/guide/getting-started.html @@ -5,18 +5,19 @@ 🚀 Getting started | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

🚀 Getting started

Get KLineChart

KLineChart supports multiple download methods, you can get it through package management tools such as npm or yarn, or through CDN.

Using npm

bash
npm install klinecharts --save
npm install klinecharts --save

use yarn

bash
yarn add klinecharts
yarn add klinecharts

Using a CDN

You can use jsDelivr, unpkg or others, it is recommended to quote from jsDelivr.

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

Create the first chart

Created in the project of package management tools such as npm or yarn

javascript
import { init } from 'klinecharts'
+    
Skip to content
On this page

🚀 Getting started

Get KLineChart

KLineChart supports multiple download methods, you can get it through package management tools such as npm or yarn, or through CDN.

Using npm

bash
npm install klinecharts --save
npm install klinecharts --save

use yarn

bash
yarn add klinecharts
yarn add klinecharts

Using a CDN

You can use jsDelivr, unpkg or others, it is recommended to quote from jsDelivr.

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

Create the first chart

Created in the project of package management tools such as npm or yarn

javascript
import { init } from 'klinecharts'
 
 // initialize the chart
 const chart = init(`${domId}`)
@@ -116,9 +117,8 @@
        }
      </script>
    </body>
-</html>

This completes your first chart creation.

Released under the Apache License V2.

- +</html>

This completes your first chart creation.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/hot-key.html b/en-US/guide/hot-key.html index b4cd3074f..fecfabf69 100644 --- a/en-US/guide/hot-key.html +++ b/en-US/guide/hot-key.html @@ -5,20 +5,20 @@ ⌨️ Hot Key | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

⌨️ Hot Key

Currently only supports moving and zooming.

  • shift + move right
  • shift + move left
  • shift + + zoom in
  • shift + - zoom out

Released under the Apache License V2.

- +
Skip to content
On this page

⌨️ Hot Key

Currently only supports moving and zooming.

  • shift + move right
  • shift + move left
  • shift + + zoom in
  • shift + - zoom out

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/i18n.html b/en-US/guide/i18n.html index e69ef6a03..f50cb4443 100644 --- a/en-US/guide/i18n.html +++ b/en-US/guide/i18n.html @@ -5,18 +5,19 @@ 🌏 Internationalization | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

🌏 Internationalization

Currently, the chart has two built-in en-US and zh-CN. The default language is en-US. If you need to use other languages, you can refer to the following scheme.

Adding new language

Adding new language is accomplished through klinecharts.registerLocale(key, locales).

For example, to add traditional Chinese language, you can do this,

typescript
klinecharts.registerLocale('zh-HK', {
+    
Skip to content
On this page

🌏 Internationalization

Currently, the chart has two built-in en-US and zh-CN. The default language is en-US. If you need to use other languages, you can refer to the following scheme.

Adding new language

Adding new language is accomplished through klinecharts.registerLocale(key, locales).

For example, to add traditional Chinese language, you can do this,

typescript
klinecharts.registerLocale('zh-HK', {
   time: '時間:',
   open: '開:',
   high: '高:',
@@ -30,9 +31,8 @@
   low: '低:',
   close: '收:',
   volume: '成交量:'
-})

Use new language

After adding new language, you can complete language switching through the chart API init(options) or setLocale(key).

Released under the Apache License V2.

- +})

Use new language

After adding new language, you can complete language switching through the chart API init(options) or setLocale(key).

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/indicator.html b/en-US/guide/indicator.html index f14e8c3fb..6b71c44eb 100644 --- a/en-US/guide/indicator.html +++ b/en-US/guide/indicator.html @@ -5,18 +5,19 @@ Technical indicator | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

Technical indicator

This document introduces the built-in technical indicators in the chart and how to customize a technical indicator.

Built-in technical indicators

NameDefault calc paramsNameDefault calc paramsNameDefault calc params
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2, 20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVTNone
RSI[6, 12, 24]OBV[30]AVPNone

Custom Technical Indicators

To create a custom technical indicator, you only need to generate a technical indicator information, and then add it globally through klinecharts.registerIndicator, add it to the chart and use it like the built-in technical indicator.

Attribute description

typescript
{
+    
Skip to content
On this page

Technical indicator

This document introduces the built-in technical indicators in the chart and how to customize a technical indicator.

Built-in technical indicators

NameDefault calc paramsNameDefault calc paramsNameDefault calc params
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2, 20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVTNone
RSI[6, 12, 24]OBV[30]AVPNone

Custom Technical Indicators

To create a custom technical indicator, you only need to generate a technical indicator information, and then add it globally through klinecharts.registerIndicator, add it to the chart and use it like the built-in technical indicator.

Attribute description

typescript
{
   // indicator name
   name: string
   // The short name of the indicator, used for display, the name will be displayed by default
@@ -494,9 +495,8 @@
        return ma
      })
    }
-}

So a custom indicator is completed.

Released under the Apache License V2.

- +}

So a custom indicator is completed.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/instance-api.html b/en-US/guide/instance-api.html index 27d609cd0..2adeeef5f 100644 --- a/en-US/guide/instance-api.html +++ b/en-US/guide/instance-api.html @@ -5,18 +5,19 @@ Instance API | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

Instance API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

Get the dom container.

  • paneId window id, the default is the entire chart container
  • position options are 'root', 'main' and 'yAxis', default is 'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+    
Skip to content
On this page

Instance API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

Get the dom container.

  • paneId window id, the default is the entire chart container
  • position options are 'root', 'main' and 'yAxis', default is 'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
    width: number
    height: number
    left: number
@@ -1012,9 +1013,8 @@
     dataIndex?: number
     timestamp?: number
     value?: number
-  }>

Convert coordinates to values.

  • coordinate needs to be converted, it can be an object or an array
  • finder filter
    • paneId window id
    • absolute is an absolute coordinate, only works on the y axis

getConvertPictureUrl(includeOverlay, type, backgroundColor)

typescript
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string

Get the image url after the chart is converted into an image.

  • includeOverlay needs to include the overlay layer, it can be defaulted
  • type The converted image type, one of the three types of 'png', 'jpeg', 'bmp', can be defaulted, the default is 'jpeg'
  • backgroundColor background color, can be defaulted, the default is '#FFFFFF'

resize()

typescript
() => void
() => void

Resizing the chart will always fill the container size.

Note

This method will recalculate the size of each module in the entire chart, frequent calls may affect performance, please call with caution.

Released under the Apache License V2.

- + }>

Convert coordinates to values.

  • coordinate needs to be converted, it can be an object or an array
  • finder filter
    • paneId window id
    • absolute is an absolute coordinate, only works on the y axis

getConvertPictureUrl(includeOverlay, type, backgroundColor)

typescript
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string

Get the image url after the chart is converted into an image.

  • includeOverlay needs to include the overlay layer, it can be defaulted
  • type The converted image type, one of the three types of 'png', 'jpeg', 'bmp', can be defaulted, the default is 'jpeg'
  • backgroundColor background color, can be defaulted, the default is '#FFFFFF'

resize()

typescript
() => void
() => void

Resizing the chart will always fill the container size.

Note

This method will recalculate the size of each module in the entire chart, frequent calls may affect performance, please call with caution.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/overlay.html b/en-US/guide/overlay.html index fcf9b7744..55061fac1 100644 --- a/en-US/guide/overlay.html +++ b/en-US/guide/overlay.html @@ -5,18 +5,19 @@ Overlay | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

Overlay

This document introduces the built-in overlays in the chart and how to customize a overlay.

Built-in overlay types

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelLfilineLine, ci , simpleAnnotation, simpleTag

Custom overlays

Customize an overlay, then add it globally through klinecharts.registerOverlay, add it to the chart and use it like the built-in overlay.

Attribute description

typescript
{
+    
Skip to content
On this page

Overlay

This document introduces the built-in overlays in the chart and how to customize a overlay.

Built-in overlay types

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelLfilineLine, ci , simpleAnnotation, simpleTag

Custom overlays

Customize an overlay, then add it globally through klinecharts.registerOverlay, add it to the chart and use it like the built-in overlay.

Attribute description

typescript
{
   // Name, a required field, used as the unique identifier for overlay creation
   name: string
 
@@ -452,9 +453,8 @@
      }
      return []
    }
-}

So a custom overlay is complete.

Released under the Apache License V2.

- +}

So a custom overlay is complete.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/styles.html b/en-US/guide/styles.html index 9da027158..5c6f545c3 100644 --- a/en-US/guide/styles.html +++ b/en-US/guide/styles.html @@ -5,19 +5,20 @@ 🎨 Style | KLineChart - - + + + - - - - - - - + + + + + + + -
Skip to content
On this page

🎨 Style

Whether you see a point or a line on the chart, you can basically customize the style. Changes can be made via the chart method init(ds, options) or the chart instance method setStyles(styles).

Picture explanation

1 grid.horizontal2 grid.vertical3 candle.bar4 candle.candle.priceMark.last.line5 candle.candle.priceMark.last.text6 candle.candle.priceMark.high7 candle.candle.priceMark.low8 candle.candle.tooltip9 indicator.ohlc10 indicator.lastValueMark11 indicator.tooltip12 xAxis.axisLine13 xAxis.tickLine14 xAxis.tickText15 yAxis.axisLine16 yAxis.tickLine17 yAxis.tickText18 separator19 crosshair.horizontal.line20 crosshair.horizontal.text21 crosshair.vertical.line22 crosshair.vertical.text23 overlay

Default full configuration

javascript
{
+    
Skip to content
On this page

🎨 Style

Whether you see a point or a line on the chart, you can basically customize the style. Changes can be made via the chart method init(ds, options) or the chart instance method setStyles(styles).

Picture explanation

1 grid.horizontal2 grid.vertical3 candle.bar4 candle.candle.priceMark.last.line5 candle.candle.priceMark.last.text6 candle.candle.priceMark.high7 candle.candle.priceMark.low8 candle.candle.tooltip9 indicator.ohlc10 indicator.lastValueMark11 indicator.tooltip12 xAxis.axisLine13 xAxis.tickLine14 xAxis.tickText15 yAxis.axisLine16 yAxis.tickLine17 yAxis.tickText18 separator19 crosshair.horizontal.line20 crosshair.horizontal.text21 crosshair.vertical.line22 crosshair.vertical.text23 overlay

Default full configuration

javascript
{
   grid: {
     show: true,
     horizontal: {
@@ -989,9 +990,8 @@
       backgroundColor: '#1677FF'
     }
   }
-}

Released under the Apache License V2.

- +}

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/v8-to-v9.html b/en-US/guide/v8-to-v9.html index 73e109f49..768a0b221 100644 --- a/en-US/guide/v8-to-v9.html +++ b/en-US/guide/v8-to-v9.html @@ -5,20 +5,20 @@ 🛠️ From V8 to V9 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

🛠️ From V8 to V9

This document will help you upgrade from kinecharts 8.x to klinecharts 9.x. If you are 7.x or older, please refer to the previous upgrade document to upgrade to 8.x.

Import adjustment

klinecharts/index.blank' and klinecharts/index.simple are no longer distinguished. Please use import {...} from klinecharts uniformly.

Design adjustment

shape, annotation, tag are merged into overlay. Please refer to overlay for details.

Style configuration adjustment

  • The style options of all lines are changed to dashed and dashValue to dashedValue.
  • candle.tooltip.labels and candle.tooltip.values are merged into candle.tooltip.custom.
  • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marginEnd.
  • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marginEnd.
  • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles.
  • Delete shape, annotation, tag, please use overlay instead.

API adjustment

Chart API

  • extension.addTechnicalIndicatorTemplate(template) is changed to registerIndicator(template).
  • Delete extension.addShapeTemplate(template), please use registerOverlay(template) instead.

Instance API

  • getDom({paneId, position}) is changed to getDom(paneId, position), and the parameter position option is changed to root, main and yAxis.
  • getWidth() and getHeight() are combined into a method 'getSize(paneId, position).
  • setStyleOptions(styles) is changed to setStyles(styles).
  • getStyleOptions() is changed to getStyles().
  • setOffsetRightSpace(space) is changed to setOffsetRightDistance(distance).
  • createTechnicalIndicator(value, isStack, paneOptions) is changed to createIndicator(value, isStack, paneOptions).
  • overrideTechnicalIndicator(override, paneId) is changed to overrideIndicator(override, paneId).
  • getTechnicalIndicatorByPaneId(paneId, name) is changed to getIndicatorByPaneId(paneId, name).
  • removeTechnicalIndicator(paneId, name) is changed to removeIndicator(paneId, name).
  • subscribeAction(type, callback) and unsubscribeAction(type, callback). The parameter type option is changed to onZoom, onScroll, onCrosshairChange, onVisibleRangeChange and onPaneDrag.
  • convertToPixel(value, finder) and convertFromPixel(coordinate, finder), the parameter finder.absoluteYAxis is changed to finder.absolute.
  • To delete createShape(value, paneId), createAnnotation(annotation, paneId), createTag(tag, paneId), please use createOverlay(value, paneId) instead.
  • To delete removeShape(id), removeAnnotation(paneId, points), removeTag(paneId, tagId), please use removeOverlay(id) instead.
  • To delete setShapeOptions(options), use overrideOverlay(override) instead.
  • To delete reateHtml(html, paneId), removeHtml(paneId, htmlId), please obtain the corresponding dom through getDom(paneId, position).
  • To delete getTechnicalIndicatorByPaneId(paneId, name).

Shape help API

  • All APIs are migrated to 'klinecharts.utils'.

Customized technical indicator adjustment

  • Attribute plots is changed to figures, sub item methods color, isStroke, isDashed are merged into styles.
  • Change the method 'regeneratePlots(params) to regeneratefigures(params).
  • The method calcTechnicalIndicator(kLineDataList, options) is changed to calc(kLineDataList, indicator).
  • The method createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis, yAxis, defaultStyles }) is changed to createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }). The return value is determined by [{ title: 'xxx', value: 'xxx', color: 'xxx' } ] Change to { name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }.
  • The method render({ctx, dataSource, viewport, styles, xAxis, yAxis}) is changed to draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis }).
  • Delete the attribute shouldCheckParamCount.

Released under the Apache License V2.

- +
Skip to content
On this page

🛠️ From V8 to V9

This document will help you upgrade from kinecharts 8.x to klinecharts 9.x. If you are 7.x or older, please refer to the previous upgrade document to upgrade to 8.x.

Import adjustment

klinecharts/index.blank' and klinecharts/index.simple are no longer distinguished. Please use import {...} from klinecharts uniformly.

Design adjustment

shape, annotation, tag are merged into overlay. Please refer to overlay for details.

Style configuration adjustment

  • The style options of all lines are changed to dashed and dashValue to dashedValue.
  • candle.tooltip.labels and candle.tooltip.values are merged into candle.tooltip.custom.
  • xAxis.height is changed to xAxis.size, xAxis.tickeText.paddingTop is changed to xAxis.tickeText.marinStart, and xAxis.tickeText.paddingBottom is changed to xAxis.tickeText.marginEnd.
  • yAxis.height is changed to yAxis.size, yAxis.tickeText.paddingTop is changed to yAxis.tickeText.marinStart, and yAxis.tickeText.paddingBottom is changed to yAxis.tickeText.marginEnd.
  • technicalIndicator.bar is changed to indicator.bars, technicalIndicator.line is changed to indicator.linestechnicalIndicator.circle is changed to indicator.circles.
  • Delete shape, annotation, tag, please use overlay instead.

API adjustment

Chart API

  • extension.addTechnicalIndicatorTemplate(template) is changed to registerIndicator(template).
  • Delete extension.addShapeTemplate(template), please use registerOverlay(template) instead.

Instance API

  • getDom({paneId, position}) is changed to getDom(paneId, position), and the parameter position option is changed to root, main and yAxis.
  • getWidth() and getHeight() are combined into a method 'getSize(paneId, position).
  • setStyleOptions(styles) is changed to setStyles(styles).
  • getStyleOptions() is changed to getStyles().
  • setOffsetRightSpace(space) is changed to setOffsetRightDistance(distance).
  • createTechnicalIndicator(value, isStack, paneOptions) is changed to createIndicator(value, isStack, paneOptions).
  • overrideTechnicalIndicator(override, paneId) is changed to overrideIndicator(override, paneId).
  • getTechnicalIndicatorByPaneId(paneId, name) is changed to getIndicatorByPaneId(paneId, name).
  • removeTechnicalIndicator(paneId, name) is changed to removeIndicator(paneId, name).
  • subscribeAction(type, callback) and unsubscribeAction(type, callback). The parameter type option is changed to onZoom, onScroll, onCrosshairChange, onVisibleRangeChange and onPaneDrag.
  • convertToPixel(value, finder) and convertFromPixel(coordinate, finder), the parameter finder.absoluteYAxis is changed to finder.absolute.
  • To delete createShape(value, paneId), createAnnotation(annotation, paneId), createTag(tag, paneId), please use createOverlay(value, paneId) instead.
  • To delete removeShape(id), removeAnnotation(paneId, points), removeTag(paneId, tagId), please use removeOverlay(id) instead.
  • To delete setShapeOptions(options), use overrideOverlay(override) instead.
  • To delete reateHtml(html, paneId), removeHtml(paneId, htmlId), please obtain the corresponding dom through getDom(paneId, position).
  • To delete getTechnicalIndicatorByPaneId(paneId, name).

Shape help API

  • All APIs are migrated to 'klinecharts.utils'.

Customized technical indicator adjustment

  • Attribute plots is changed to figures, sub item methods color, isStroke, isDashed are merged into styles.
  • Change the method 'regeneratePlots(params) to regeneratefigures(params).
  • The method calcTechnicalIndicator(kLineDataList, options) is changed to calc(kLineDataList, indicator).
  • The method createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis, yAxis, defaultStyles }) is changed to createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }). The return value is determined by [{ title: 'xxx', value: 'xxx', color: 'xxx' } ] Change to { name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }.
  • The method render({ctx, dataSource, viewport, styles, xAxis, yAxis}) is changed to draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis }).
  • Delete the attribute shouldCheckParamCount.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/guide/what-is-klinechart.html b/en-US/guide/what-is-klinechart.html index 41b5ceba9..db1777b1d 100644 --- a/en-US/guide/what-is-klinechart.html +++ b/en-US/guide/what-is-klinechart.html @@ -5,20 +5,20 @@ 📃 Introducation | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
On this page

📃 Introducation

What's KLineChart?

KLineChart,it is a highly customizable professional lightweight financial chart.

Features

  • 📦 Out of the box: Simple and fast integration, basically zero cost to get started.
  • 🚀 Lightweight and smooth: Zero dependencies, only 40k under gzip compression.
  • 💪 Powerful functions: Built-in multiple indicators and line drawing models.
  • 🎨 Highly scalable: With rich style configuration and API, the function can be extended as you like.
  • 📱 Mobile: Support mobile, one chart, handle multiple terminals.
  • 🛡 Typescript development: Provide complete type definition files.

Released under the Apache License V2.

- +
Skip to content
On this page

📃 Introducation

What's KLineChart?

KLineChart,it is a highly customizable professional lightweight financial chart.

Features

  • 📦 Out of the box: Simple and fast integration, basically zero cost to get started.
  • 🚀 Lightweight and smooth: Zero dependencies, only 40k under gzip compression.
  • 💪 Powerful functions: Built-in multiple indicators and line drawing models.
  • 🎨 Highly scalable: With rich style configuration and API, the function can be extended as you like.
  • 📱 Mobile: Support mobile, one chart, handle multiple terminals.
  • 🛡 Typescript development: Provide complete type definition files.

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/index.html b/en-US/index.html index c34c51618..7eba5f81c 100644 --- a/en-US/index.html +++ b/en-US/index.html @@ -5,20 +5,20 @@ Highly customizable professional lightweight financial chart | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content

KLineChart

Highly customizable professional lightweight financial chart

Easy to use, lightweight and smooth, suitable for web front-end financial chart with rich scenarios.

KLineChart

Out of the box

Simple and fast integration, zero cost to get started, only 3 lines of code to display a chart, so that all attention can be focused on data docking.

Lightweight and smooth

Zero dependency, only about 40k under Gzip compression, and less than 1 millisecond to load under 4G network. Charts remain fluid even with thousands of candles.

Highly expand

Provide rich configuration and Api, style modification, function collocation as you like. Provide technical indicators and line drawing model extensions, so that the chart has more possibilities.

Who are using

Released under the Apache License V2.

- +
Skip to content

KLineChart

Highly customizable professional lightweight financial chart

Easy to use, lightweight and smooth, suitable for web front-end financial chart with rich scenarios.

KLineChart

Who are using

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/en-US/sponsor.html b/en-US/sponsor.html index 783b13ec8..697eb89af 100644 --- a/en-US/sponsor.html +++ b/en-US/sponsor.html @@ -5,21 +5,21 @@ ❤️ Sponsor | KLineChart - - + + + - - - - - - - + + + + + + + -
Skip to content
On this page

❤️ Sponsor

If you think the plugin is good, I hope you can click 🌟 on GitHub. If you can reward a cup of ☕️, that would be very much appreciated.

Alipay

Wechat Pay

PayPal

Cryptocurrency

Released under the Apache License V2.

- +
Skip to content
On this page

❤️ Sponsor

If you think the plugin is good, I hope you can click 🌟 on GitHub. If you can reward a cup of ☕️, that would be very much appreciated.

Alipay

Wechat Pay

PayPal

Cryptocurrency

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/changelog.html b/guide/changelog.html index d71763d88..e2eca44dc 100644 --- a/guide/changelog.html +++ b/guide/changelog.html @@ -5,20 +5,20 @@ 📠 更新日志 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

📠 更新日志

9.5.0

2023-06-15

  • 🆕 Overlay新增事件onDoubleClick,新增属性modeSensitivity
  • 🆕 样式配置candle.tooltip.custom支持字符串模版。
  • 🐞 优化移动端阻尼滚动掉帧问题。
  • 🐞 修复窗口id命名拼写错误。
  • 💄 优化分割线事件响应灵敏度。
  • 💄 优化typescript下,OverlayFigure中的attrs类型声明。

9.4.0

2023-05-25

  • 🆕 实例api createOverlay 支持数组。
  • 🆕 overlay新增属性paneIddefaultZLevelzLevel
  • 🆕 xAxis新增方法convertTimestampFromPixelconvertTimestampToPixel
  • 💄 优化蜡烛柱显示。

9.3.0

2023-05-13

  • 🆕 新增图表API utils.calcTextWidth
  • 🆕 图表API createIndicator(value, isStack, options)setPaneOptions(options)新增options.axisOptions
  • 🆕 指标图形配置支持自定义。
  • 💄 优化bar宽度比例。
  • 💄 优化内部获取屏幕像素比。
  • 💄 优化内部id生成。

9.2.2

2023-05-04

  • 🐞 修复基础图形line事件检查可能导致错误问题。
  • 💄 优化类型检查。

9.2.1

2023-04-27

  • 💄 优化默认样式,#EF5350变更为#F92855#26A69A变更为#2DC08E
  • 💄 优化typescript声明。

9.2.0

2023-04-24

  • 🆕 实例API新增getOffsetRightDistanceexecuteAction
  • 🆕 实例APIapplyNewDataapplyMoreDataupdateData新增成功回调入参callback
  • 🆕 支持千分符显示。
  • 🆕 样式配置新增candle.bar.upBorderColorcandle.bar.downBorderColorcandle.bar.noChangeBorderColorcandle.bar.upWickColorcandle.bar.downWickColorcandle.bar.noChangeWickColorcandle.tooltip.rect.positioncandle.tooltip.rect.offsetBottom
  • 🆕 所有visibleRange新增realFromrealTo
  • 💄 优化API,klinecharts.utils.isValidklinecharts.utils.formatBigNumber
  • 💄 优化开发环境下,日志输出。

9.1.3

2023-04-15

  • 🐞 修复图表api applyNewData 入参是空数组时不刷新问题。
  • 🐞 修复无数据时y轴上十字光标文字不显示问题。
  • 💄 优化面积图显示。
  • 💄 优化覆盖物事件回调参数,新增figureKeyfigureIndex
  • 💄 优化typescript覆盖物样式类型,和基础类型DeepPartial, DeepRequired

9.1.2

2023-04-10

  • 🐞 修复内置基础图形line触发事件不准确问题。
  • 🐞 修复内置覆盖物simpleAnnotationsimpleTag绘制完成后第一次触发事件问题。
  • 💄 优化覆盖物图形事件忽略,支持事件选择。

9.1.1

2023-03-14

  • 🐞 修复内置基础图形arc不生效问题。
  • 💄 优化渲染更新。

9.1.0

2023-02-23

  • 🆕 图表实例方法subscribeActionunsubscribeAction类型新增onCandleBarClick
  • 🆕 覆盖物支持双击强制结束绘制。
  • 💄 优化事件处理。

9.0.1

2023-02-17

  • 🐞 修复typescript引入问题。

9.0.0

2023-02-16

  • 🛠 Typescript重构。
  • 🆕 新特性
    • 新增Y轴方向缩放,滚动。
    • API
      • 新增基图表方法registerFiguregetSupportFiguresgetFigureClassrigisterOverlaygetSupportOverlaysregisterLocalegetSupportLocalesregisterStyles
      • 新增实例方法,getSizesetLocalegetLocalsetCustomApigetVisibleRangecreateOverlaygetOverlayByIdoverrideOverlayremoveOverlay
    • 样式配置
      • 新增candle.priceMark.last.text.borderStylecandle.tooltip.iconsindicator.lastValueMark.text.borderStyleindicator.tooltip.iconscrosshair.horizontal.text.borderStylecrosshair.vertical.text.borderStyle
  • 👉 变更
    • API
      • 图表方法extension.addTechnicalIndicatorTemplate变更为registerIndicator
      • 图表方法extension.addShapeTemplate变更为registerOverlay
      • 实例方法setStyleOptions变更为setStyles
      • 实例方法getStyleOptions变更为getStyles
      • 实例方法setPaneOptions(options)options新增属性gap
      • 实例方法setOffsetRightSpace变更为setOffsetRightDistance
      • 实例方法createTechnicalIndicator变更为createIndicator
      • 实例方法overlayTechnicalIndicator变更为overlayIndicator
      • 实例方法getTechnicalIndicatorByPaneId变更为getIndicatorByPaneId
      • 实例方法removeTechnicalIndicator变更为removeIndicator
    • 样式配置
      • 所有line.style选项变更为soliddashed
      • 所有dashValue变更为dashedValue
      • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
      • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
      • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
    • 自定义扩展
      • 技术指标属性calcParams,变更为支持任意类型。
      • 技术指标属性plots变更为figures
      • 技术指标属性regeneratePlots变更为regeneratefigures
      • 技术指标属性calcTechnicalIndicator变更为calc
      • 技术指标属性render变更为draw
  • 🗑 废弃
    • API
      • 删除实例方法getWidthgetHeight,改用getSize
      • 删除实例方法createShapecreateAnnotationcreateTag,改用createOverlay
      • 删除实例方法removeShaperemoveAnnotationremoveTag,改用removeOverlay
      • 删除实例方法setShapeOptions,改用overrideOverlay
      • 删除实例方法createHtmlremoveHtmladdTechnicalIndicatorTemplategetTechnicalIndicatorTemplateaddShapeTemplate
    • 样式配置
      • 删除shapeannotationtag,改用overlay
      • 删除candle.margintechnicalIndicator.margin
    • 自定义扩展
      • 技术指标模版不再保存相关属性。
      • 技术指标删除属性shouldCheckParamCount
      • 删除Shape,改用Overlay

8.x

Github上查看 8.x 的 Change Log。

7.x

Github上查看 7.x 的 Change Log。

6.x

Github上查看 6.x 的 Change Log。

5.x

Github上查看 5.x 的版本记录。

4.x

Github上查看 4.x 的版本记录。

Released under the Apache License V2.

- +
Skip to content
本页目录

📠 更新日志

9.5.0

2023-06-15

  • 🆕 Overlay新增事件onDoubleClick,新增属性modeSensitivity
  • 🆕 样式配置candle.tooltip.custom支持字符串模版。
  • 🐞 优化移动端阻尼滚动掉帧问题。
  • 🐞 修复窗口id命名拼写错误。
  • 💄 优化分割线事件响应灵敏度。
  • 💄 优化typescript下,OverlayFigure中的attrs类型声明。

9.4.0

2023-05-25

  • 🆕 实例api createOverlay 支持数组。
  • 🆕 overlay新增属性paneIddefaultZLevelzLevel
  • 🆕 xAxis新增方法convertTimestampFromPixelconvertTimestampToPixel
  • 💄 优化蜡烛柱显示。

9.3.0

2023-05-13

  • 🆕 新增图表API utils.calcTextWidth
  • 🆕 图表API createIndicator(value, isStack, options)setPaneOptions(options)新增options.axisOptions
  • 🆕 指标图形配置支持自定义。
  • 💄 优化bar宽度比例。
  • 💄 优化内部获取屏幕像素比。
  • 💄 优化内部id生成。

9.2.2

2023-05-04

  • 🐞 修复基础图形line事件检查可能导致错误问题。
  • 💄 优化类型检查。

9.2.1

2023-04-27

  • 💄 优化默认样式,#EF5350变更为#F92855#26A69A变更为#2DC08E
  • 💄 优化typescript声明。

9.2.0

2023-04-24

  • 🆕 实例API新增getOffsetRightDistanceexecuteAction
  • 🆕 实例APIapplyNewDataapplyMoreDataupdateData新增成功回调入参callback
  • 🆕 支持千分符显示。
  • 🆕 样式配置新增candle.bar.upBorderColorcandle.bar.downBorderColorcandle.bar.noChangeBorderColorcandle.bar.upWickColorcandle.bar.downWickColorcandle.bar.noChangeWickColorcandle.tooltip.rect.positioncandle.tooltip.rect.offsetBottom
  • 🆕 所有visibleRange新增realFromrealTo
  • 💄 优化API,klinecharts.utils.isValidklinecharts.utils.formatBigNumber
  • 💄 优化开发环境下,日志输出。

9.1.3

2023-04-15

  • 🐞 修复图表api applyNewData 入参是空数组时不刷新问题。
  • 🐞 修复无数据时y轴上十字光标文字不显示问题。
  • 💄 优化面积图显示。
  • 💄 优化覆盖物事件回调参数,新增figureKeyfigureIndex
  • 💄 优化typescript覆盖物样式类型,和基础类型DeepPartial, DeepRequired

9.1.2

2023-04-10

  • 🐞 修复内置基础图形line触发事件不准确问题。
  • 🐞 修复内置覆盖物simpleAnnotationsimpleTag绘制完成后第一次触发事件问题。
  • 💄 优化覆盖物图形事件忽略,支持事件选择。

9.1.1

2023-03-14

  • 🐞 修复内置基础图形arc不生效问题。
  • 💄 优化渲染更新。

9.1.0

2023-02-23

  • 🆕 图表实例方法subscribeActionunsubscribeAction类型新增onCandleBarClick
  • 🆕 覆盖物支持双击强制结束绘制。
  • 💄 优化事件处理。

9.0.1

2023-02-17

  • 🐞 修复typescript引入问题。

9.0.0

2023-02-16

  • 🛠 Typescript重构。
  • 🆕 新特性
    • 新增Y轴方向缩放,滚动。
    • API
      • 新增基图表方法registerFiguregetSupportFiguresgetFigureClassrigisterOverlaygetSupportOverlaysregisterLocalegetSupportLocalesregisterStyles
      • 新增实例方法,getSizesetLocalegetLocalsetCustomApigetVisibleRangecreateOverlaygetOverlayByIdoverrideOverlayremoveOverlay
    • 样式配置
      • 新增candle.priceMark.last.text.borderStylecandle.tooltip.iconsindicator.lastValueMark.text.borderStyleindicator.tooltip.iconscrosshair.horizontal.text.borderStylecrosshair.vertical.text.borderStyle
  • 👉 变更
    • API
      • 图表方法extension.addTechnicalIndicatorTemplate变更为registerIndicator
      • 图表方法extension.addShapeTemplate变更为registerOverlay
      • 实例方法setStyleOptions变更为setStyles
      • 实例方法getStyleOptions变更为getStyles
      • 实例方法setPaneOptions(options)options新增属性gap
      • 实例方法setOffsetRightSpace变更为setOffsetRightDistance
      • 实例方法createTechnicalIndicator变更为createIndicator
      • 实例方法overlayTechnicalIndicator变更为overlayIndicator
      • 实例方法getTechnicalIndicatorByPaneId变更为getIndicatorByPaneId
      • 实例方法removeTechnicalIndicator变更为removeIndicator
    • 样式配置
      • 所有line.style选项变更为soliddashed
      • 所有dashValue变更为dashedValue
      • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
      • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
      • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
    • 自定义扩展
      • 技术指标属性calcParams,变更为支持任意类型。
      • 技术指标属性plots变更为figures
      • 技术指标属性regeneratePlots变更为regeneratefigures
      • 技术指标属性calcTechnicalIndicator变更为calc
      • 技术指标属性render变更为draw
  • 🗑 废弃
    • API
      • 删除实例方法getWidthgetHeight,改用getSize
      • 删除实例方法createShapecreateAnnotationcreateTag,改用createOverlay
      • 删除实例方法removeShaperemoveAnnotationremoveTag,改用removeOverlay
      • 删除实例方法setShapeOptions,改用overrideOverlay
      • 删除实例方法createHtmlremoveHtmladdTechnicalIndicatorTemplategetTechnicalIndicatorTemplateaddShapeTemplate
    • 样式配置
      • 删除shapeannotationtag,改用overlay
      • 删除candle.margintechnicalIndicator.margin
    • 自定义扩展
      • 技术指标模版不再保存相关属性。
      • 技术指标删除属性shouldCheckParamCount
      • 删除Shape,改用Overlay

8.x

Github上查看 8.x 的 Change Log。

7.x

Github上查看 7.x 的 Change Log。

6.x

Github上查看 6.x 的 Change Log。

5.x

Github上查看 5.x 的版本记录。

4.x

Github上查看 4.x 的版本记录。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/chart-api.html b/guide/chart-api.html index fcab59e6f..8743ab32f 100644 --- a/guide/chart-api.html +++ b/guide/chart-api.html @@ -5,18 +5,19 @@ 图表API | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

图表API

init(ds, options)

typescript
(
+    
Skip to content
本页目录

图表API

init(ds, options)

typescript
(
   ds: string | HTMLElement,
   options?: {
     locale?: string
@@ -792,9 +793,8 @@
     borderRadius?: number
     backgroundColor?: string
   }
-) => void

绘制带背景的文字。

  • ctx 画布上下文
  • rectText 文字参数
    • x 起始点x轴值
    • y 起始点y轴值
    • text 文字内容
    • align 水平对齐方式
    • baseline 垂直对齐方式
  • styles 样式
    • style 样式
    • color 颜色
    • size 尺寸
    • family 字体
    • weight 权重
    • paddingLeft 左内边距,
    • paddingTop 上内边距,
    • paddingRight 右内边距,
    • paddingBottom 下内边距,
    • borderColor 边框颜色
    • borderSize 边框粗细
    • borderStyle 边框样式
    • borderRadius 边框圆角尺寸
    • borderDashedValue 边框虚线参数值
    • backgroundColor 背景色

Released under the Apache License V2.

- +) => void

绘制带背景的文字。

  • ctx 画布上下文
  • rectText 文字参数
    • x 起始点x轴值
    • y 起始点y轴值
    • text 文字内容
    • align 水平对齐方式
    • baseline 垂直对齐方式
  • styles 样式
    • style 样式
    • color 颜色
    • size 尺寸
    • family 字体
    • weight 权重
    • paddingLeft 左内边距,
    • paddingTop 上内边距,
    • paddingRight 右内边距,
    • paddingBottom 下内边距,
    • borderColor 边框颜色
    • borderSize 边框粗细
    • borderStyle 边框样式
    • borderRadius 边框圆角尺寸
    • borderDashedValue 边框虚线参数值
    • backgroundColor 背景色

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/datasource.html b/guide/datasource.html index e4d781bc5..05764ab90 100644 --- a/guide/datasource.html +++ b/guide/datasource.html @@ -5,18 +5,19 @@ 📚 数据 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

📚 数据

图表所需要的数据必须是固定格式。通过图表实例 API applyNewData(dataList, more)applyMoreData(dataList, more)updateData(data)来和图表进行数据交互。

typescript
{
+    
Skip to content
本页目录

📚 数据

图表所需要的数据必须是固定格式。通过图表实例 API applyNewData(dataList, more)applyMoreData(dataList, more)updateData(data)来和图表进行数据交互。

typescript
{
   // 时间戳,毫秒级别,必要字段
   timestamp: number
   // 开盘价,必要字段
@@ -48,9 +49,8 @@
   // 成交额,非必须字段,如果需要展示技术指标'EMV'和'AVP',则需要为该字段填充数据。
   turnover: number
   
-}

Released under the Apache License V2.

- +}

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/environment.html b/guide/environment.html index e1bd0578c..c033f9de4 100644 --- a/guide/environment.html +++ b/guide/environment.html @@ -5,26 +5,26 @@ 🏝️ 环境要求 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

🏝️ 环境要求

浏览器支持

图表基于 html5 canvas 构建,需要运行在支持 canvas 的浏览器上,如果需要运行在移动端,请用 webview 加载。

兼容处理

core.js

图表内部集合使用Map,用于兼容不支持的老版浏览器。

javascript
import 'core.js';
+    
Skip to content
本页目录

🏝️ 环境要求

浏览器支持

图表基于 html5 canvas 构建,需要运行在支持 canvas 的浏览器上,如果需要运行在移动端,请用 webview 加载。

兼容处理

core.js

图表内部集合使用Map,用于兼容不支持的老版浏览器。

javascript
import 'core.js';
 import { init } from 'klincharts';
import 'core.js';
 import { init } from 'klincharts';

Intl.js

图表依赖Intl,某些浏览器无此 API。

javascript
import 'intl';
 import 'intl/local-data/jsonp/en';
 import { init } from 'klincharts';
import 'intl';
 import 'intl/local-data/jsonp/en';
-import { init } from 'klincharts';

Released under the Apache License V2.

- +import { init } from 'klincharts';

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/faq.html b/guide/faq.html index d6e4d9146..ed50e636c 100644 --- a/guide/faq.html +++ b/guide/faq.html @@ -5,18 +5,19 @@ 🙋 常见问题 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

🙋 常见问题

初始化图表后,只能看到一条线,是怎么回事?

图表总是会填充容器,检查一下容器是否有高度。

蜡烛柱显示趋近于一条线,看不到波动,怎么办?

图表默认价格精度为两位小数,调用setPriceVolumePrecision(pricePrecision, volumePrecision)设置下精度。

分时图怎么创建?

通过样式设置。

javascript
chart.setStyles({
+    
Skip to content
本页目录

🙋 常见问题

初始化图表后,只能看到一条线,是怎么回事?

图表总是会填充容器,检查一下容器是否有高度。

蜡烛柱显示趋近于一条线,看不到波动,怎么办?

图表默认价格精度为两位小数,调用setPriceVolumePrecision(pricePrecision, volumePrecision)设置下精度。

分时图怎么创建?

通过样式设置。

javascript
chart.setStyles({
   candle: {
     type: 'area',
   },
@@ -24,9 +25,8 @@
   candle: {
     type: 'area',
   },
-});

内置的技术指标,计算出来的数据不是想要的,怎么办?

可以通过图表方法createIndicator或者overrideIndicator重写calc即可。

想创建一个内置技术指标之外的指标,怎么办?

图表支持自定义技术指标,详情参阅技术指标

想标记一下买卖点,该怎么做?

可以使用覆盖物,内置的覆盖物有一个simpleAnnotation,用图表api创建即可createOverlay({ name: 'simpleAnnotation', ... }, paneId)

Released under the Apache License V2.

- +});

内置的技术指标,计算出来的数据不是想要的,怎么办?

可以通过图表方法createIndicator或者overrideIndicator重写calc即可。

想创建一个内置技术指标之外的指标,怎么办?

图表支持自定义技术指标,详情参阅技术指标

想标记一下买卖点,该怎么做?

可以使用覆盖物,内置的覆盖物有一个simpleAnnotation,用图表api创建即可createOverlay({ name: 'simpleAnnotation', ... }, paneId)

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/feedback.html b/guide/feedback.html index 3ac1477dd..2b3e48dbb 100644 --- a/guide/feedback.html +++ b/guide/feedback.html @@ -5,21 +5,21 @@ 💬 反馈和共建 | KLineChart - - + + + - - - - - - - + + + + + + + -
Skip to content
本页目录

💬 反馈和共建

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

微信讨论群

扫一扫,添加开发者,备注『 KLineChart 』,加入群聊。

QQ讨论群

Released under the Apache License V2.

- +
Skip to content
本页目录

💬 反馈和共建

Github

Telegram

https://t.me/+098syuQtzI0yNzll

Discord

https://discord.gg/7YjHYgvvvZ

微信讨论群

扫一扫,添加开发者,备注『 KLineChart 』,加入群聊。

QQ讨论群

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/figure.html b/guide/figure.html index 450dbb108..6be50443a 100644 --- a/guide/figure.html +++ b/guide/figure.html @@ -5,18 +5,19 @@ 基础图形 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

基础图形

基础图形是图表重要的组成部分,图表上所有的元素都是由基础图形组成,如果需要制作复杂的自定义技术指标和覆盖物,建议仔细阅读。这篇文档介绍了内置的基本图形和如何自定义一个基础图形。基础图形可以通过图表方法klinecharts.getFigureClass(name)获取。

使用示例

注意

需要在有画布上下文的情况下使用。

javascript
// 获取基础图形实例
+    
Skip to content
本页目录

基础图形

基础图形是图表重要的组成部分,图表上所有的元素都是由基础图形组成,如果需要制作复杂的自定义技术指标和覆盖物,建议仔细阅读。这篇文档介绍了内置的基本图形和如何自定义一个基础图形。基础图形可以通过图表方法klinecharts.getFigureClass(name)获取。

使用示例

注意

需要在有画布上下文的情况下使用。

javascript
// 获取基础图形实例
 // name为基础图形名字,如,'arc', 'circle'等。
 const Figure = klinecharts.getFigureClass(name)
 // 实例化并绘制
@@ -538,9 +539,8 @@
       ctx.stroke()
     }
   }
-}

这样一个自定义的基础图形就完成了。

Released under the Apache License V2.

- +}

这样一个自定义的基础图形就完成了。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/getting-started.html b/guide/getting-started.html index 7a8364782..c17d7ee1d 100644 --- a/guide/getting-started.html +++ b/guide/getting-started.html @@ -5,18 +5,19 @@ 🚀 快速开始 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

🚀 快速开始

获取KLineChart

KLineChart 支持多种下载方式,你可以通过npmyarn等包管理工具,也可以通过CDN获取。

使用npm

bash
npm install klinecharts --save
npm install klinecharts --save

使用yarn

bash
yarn add klinecharts
yarn add klinecharts

使用CDN

可以使用jsDelivrunpkg或者其它的,推荐从jsDelivr引用。

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

创建第一个图表

npmyarn等包管理工具的项目中创建

javascript
import { init } from 'klinecharts'
+    
Skip to content
本页目录

🚀 快速开始

获取KLineChart

KLineChart 支持多种下载方式,你可以通过npmyarn等包管理工具,也可以通过CDN获取。

使用npm

bash
npm install klinecharts --save
npm install klinecharts --save

使用yarn

bash
yarn add klinecharts
yarn add klinecharts

使用CDN

可以使用jsDelivrunpkg或者其它的,推荐从jsDelivr引用。

bash
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>

创建第一个图表

npmyarn等包管理工具的项目中创建

javascript
import { init } from 'klinecharts'
 
 // 初始化图表
 const chart = init(`${domId}`)
@@ -116,9 +117,8 @@
       }
     </script>
   </body>
-</html>

这样你的第一个图表就创建完成了。

Released under the Apache License V2.

- +</html>

这样你的第一个图表就创建完成了。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/hot-key.html b/guide/hot-key.html index 2eb8d9686..df232738f 100644 --- a/guide/hot-key.html +++ b/guide/hot-key.html @@ -5,20 +5,20 @@ ⌨️ 快捷键 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

⌨️ 快捷键

目前快捷键仅支持移动和缩放。

  • shift + 右移
  • shift + 左移
  • shift + + 放大
  • shift + - 缩小

Released under the Apache License V2.

- +
Skip to content
本页目录

⌨️ 快捷键

目前快捷键仅支持移动和缩放。

  • shift + 右移
  • shift + 左移
  • shift + + 放大
  • shift + - 缩小

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/i18n.html b/guide/i18n.html index 75ce42013..1678d6930 100644 --- a/guide/i18n.html +++ b/guide/i18n.html @@ -5,18 +5,19 @@ 🌏 国际化 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

🌏 国际化

目前图表内置了en-USzh-CN两种语言,默认语言是en-US,如果需要使用其他语言,可以参考下面的方案。

增加语言包

增加语言包通过klinecharts.registerLocale(key, locales)去完成。 例如,添加一个中文繁体的语言包,可以这样做:

typescript
klinecharts.registerLocale('zh-HK', {
+    
Skip to content
本页目录

🌏 国际化

目前图表内置了en-USzh-CN两种语言,默认语言是en-US,如果需要使用其他语言,可以参考下面的方案。

增加语言包

增加语言包通过klinecharts.registerLocale(key, locales)去完成。 例如,添加一个中文繁体的语言包,可以这样做:

typescript
klinecharts.registerLocale('zh-HK', {
   time: '時間:',
   open: '開:',
   high: '高:',
@@ -30,9 +31,8 @@
   low: '低:',
   close: '收:',
   volume: '成交量:'
-})

使用语言包

当添加完语言包后,可以通过图表API init(options)或者setLocale(key),完成语言切换。

Released under the Apache License V2.

- +})

使用语言包

当添加完语言包后,可以通过图表API init(options)或者setLocale(key),完成语言切换。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/indicator.html b/guide/indicator.html index 3ad7bd6e7..c92bfa9ba 100644 --- a/guide/indicator.html +++ b/guide/indicator.html @@ -5,18 +5,19 @@ 技术指标 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

技术指标

本文档介绍了图表内置的技术指标和如何自定义一个技术指标。

内置技术指标

指标名默认计算参数指标名默认计算参数指标名默认计算参数
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2,  20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVT
RSI[6, 12, 24]OBV[30]AVP

自定义技术指标

创建一个自定义技术指标,只需要生成一个技术指标信息,然后通过klinecharts.registerIndicator全局添加,添加到图表即可和内置技术指标一样去使用。

属性说明

typescript
{
+    
Skip to content
本页目录

技术指标

本文档介绍了图表内置的技术指标和如何自定义一个技术指标。

内置技术指标

指标名默认计算参数指标名默认计算参数指标名默认计算参数
MA[5, 10, 30, 60]BIAS[6, 12, 24]VR[24, 30]
EMA[6, 12, 20]BRAR[26]WR[6, 10, 14]
SMA[12, 2]CCI[13]MTM[6, 10]
BBI[3, 6, 12, 24]DMI[14, 6]EMV[14, 9]
VOL[5, 10, 20]CR[26, 10, 20, 40, 60]SAR[2, 2,  20]
MACD[12, 26, 9]PSY[12, 6]AO[5, 34]
BOLL[20]DMA[10, 50, 10]ROC[12, 6]
KDJ[9, 3, 3]TRIX[12, 20]PVT
RSI[6, 12, 24]OBV[30]AVP

自定义技术指标

创建一个自定义技术指标,只需要生成一个技术指标信息,然后通过klinecharts.registerIndicator全局添加,添加到图表即可和内置技术指标一样去使用。

属性说明

typescript
{
   // 指标名
   name: string
   // 指标简短名称,用于显示,缺省将显示name
@@ -502,9 +503,8 @@
       return ma
     })
   }
-}

这样一个自定义指标就完成了。

Released under the Apache License V2.

- +}

这样一个自定义指标就完成了。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/instance-api.html b/guide/instance-api.html index 557a24e19..adcda8828 100644 --- a/guide/instance-api.html +++ b/guide/instance-api.html @@ -5,18 +5,19 @@ 实例API | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

实例API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

获取dom容器。

  • paneId 窗口id,缺省则是整个图表容器
  • position 可选项为'root','main'和'yAxis',缺省则是'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
+    
Skip to content
本页目录

实例API

getDom(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => HTMLElement

获取dom容器。

  • paneId 窗口id,缺省则是整个图表容器
  • position 可选项为'root','main'和'yAxis',缺省则是'root'

getSize(paneId, position)

typescript
(paneId?: string, position?: 'root' | 'main' | 'yAxis') => {
   width: number
   height: number
   left: number
@@ -1024,9 +1025,8 @@
     dataIndex?: number
     timestamp?: number
     value?: number
-  }>

将坐标转换成值。

  • coordinate 需要转换的值,可以是当个对象,也可以是数组
  • finder 过滤条件
    • paneId 窗口id
    • absolute 是否是绝对坐标,只作用于y轴

getConvertPictureUrl(includeOverlay, type, backgroundColor)

typescript
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string

获取图表转换成图片后的图片url。

  • includeOverlay 是否需要包含浮层,可缺省
  • type 转换后的图片类型,类型是'png'、'jpeg'、'bmp'三种中的一种,可缺省,默认为'jpeg'
  • backgroundColor 背景色,可缺省,默认为'#FFFFFF'

resize()

typescript
() => void
() => void

调整图表大小,总是会填充容器大小。

注意

此方法会重新计算整个图表各个模块的大小,频繁调用可能会影响到性能,调用请谨慎。

Released under the Apache License V2.

- + }>

将坐标转换成值。

  • coordinate 需要转换的值,可以是当个对象,也可以是数组
  • finder 过滤条件
    • paneId 窗口id
    • absolute 是否是绝对坐标,只作用于y轴

getConvertPictureUrl(includeOverlay, type, backgroundColor)

typescript
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string
(includeOverlay?: boolean, type?: string, backgroundColor?: string) => string

获取图表转换成图片后的图片url。

  • includeOverlay 是否需要包含浮层,可缺省
  • type 转换后的图片类型,类型是'png'、'jpeg'、'bmp'三种中的一种,可缺省,默认为'jpeg'
  • backgroundColor 背景色,可缺省,默认为'#FFFFFF'

resize()

typescript
() => void
() => void

调整图表大小,总是会填充容器大小。

注意

此方法会重新计算整个图表各个模块的大小,频繁调用可能会影响到性能,调用请谨慎。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/overlay.html b/guide/overlay.html index 7546bd4e1..21c480eb7 100644 --- a/guide/overlay.html +++ b/guide/overlay.html @@ -5,18 +5,19 @@ 覆盖物 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

覆盖物

本文档介绍了图表内置的覆盖物和如何自定义一个覆盖物。

内置覆盖物类型

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelStraightLine, fibonacciLine, simpleAnnotation, simpleTag

自定义覆盖物

自定义一个覆盖物,然后通过klinecharts.registerOverlay 全局添加,添加到图表即可和内置覆盖物一样去使用。

属性说明

typescript
{
+    
Skip to content
本页目录

覆盖物

本文档介绍了图表内置的覆盖物和如何自定义一个覆盖物。

内置覆盖物类型

horizontalRayLine, horizontalSegment, horizontalStraightLine, verticalRayLine, verticalSegment, verticalStraightLine, rayLine, segment, straightLine, priceLine, priceChannelLine, parallelStraightLine, fibonacciLine, simpleAnnotation, simpleTag

自定义覆盖物

自定义一个覆盖物,然后通过klinecharts.registerOverlay 全局添加,添加到图表即可和内置覆盖物一样去使用。

属性说明

typescript
{
   // 名称,必须字段,作为覆盖物创建的唯一标识
   name: string
 
@@ -452,9 +453,8 @@
     }
     return []
   }
-}

这样一个自定义覆盖物就完成了。

Released under the Apache License V2.

- +}

这样一个自定义覆盖物就完成了。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/styles.html b/guide/styles.html index 3db15fb8b..0b3c9b79b 100644 --- a/guide/styles.html +++ b/guide/styles.html @@ -5,19 +5,20 @@ 🎨 样式配置 | KLineChart - - + + + - - - - - - - + + + + + + + -
Skip to content
本页目录

🎨 样式配置

图表上看到的不管是点还是线,基本都可以自定义样式。可以通过图表方法init(ds, options)或者图表实例方法setStyles(styles)进行更改。

图解说明

1 grid.horizontal2 grid.vertical3 candle.bar4 candle.candle.priceMark.last.line5 candle.candle.priceMark.last.text6 candle.candle.priceMark.high7 candle.candle.priceMark.low8 candle.candle.tooltip9 indicator.ohlc10 indicator.lastValueMark11 indicator.tooltip12 xAxis.axisLine13 xAxis.tickLine14 xAxis.tickText15 yAxis.axisLine16 yAxis.tickLine17 yAxis.tickText18 separator19 crosshair.horizontal.line20 crosshair.horizontal.text21 crosshair.vertical.line22 crosshair.vertical.text23 overlay

默认完整配置

javascript
{
+    
Skip to content
本页目录

🎨 样式配置

图表上看到的不管是点还是线,基本都可以自定义样式。可以通过图表方法init(ds, options)或者图表实例方法setStyles(styles)进行更改。

图解说明

1 grid.horizontal2 grid.vertical3 candle.bar4 candle.candle.priceMark.last.line5 candle.candle.priceMark.last.text6 candle.candle.priceMark.high7 candle.candle.priceMark.low8 candle.candle.tooltip9 indicator.ohlc10 indicator.lastValueMark11 indicator.tooltip12 xAxis.axisLine13 xAxis.tickLine14 xAxis.tickText15 yAxis.axisLine16 yAxis.tickLine17 yAxis.tickText18 separator19 crosshair.horizontal.line20 crosshair.horizontal.text21 crosshair.vertical.line22 crosshair.vertical.text23 overlay

默认完整配置

javascript
{
   // 网格线
   grid: {
     show: true,
@@ -1037,9 +1038,8 @@
       backgroundColor: '#1677FF'
     }
   }
-}

Released under the Apache License V2.

- +}

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/v8-to-v9.html b/guide/v8-to-v9.html index 7f7787daf..fdf940ff2 100644 --- a/guide/v8-to-v9.html +++ b/guide/v8-to-v9.html @@ -5,20 +5,20 @@ 🛠️ 从 V8 到 V9 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

🛠️ 从 V8 到 V9

本文档将帮助你从 klinecharts 8.x 版本升级到 klinecharts 9.x 版本,如果你是 7.x 或者更老的版本,请先参考之前的升级文档升级到 8.x。

引入调整

不再区分klinecharts/index.blankklinecharts/index.simple,请统一使用import { ... } from 'klinecharts'

设计调整

shapeannotationtag合并成overlay,详情请查阅覆盖物

样式配置调整

  • 所有线的样式选项dash,更改为dasheddashValue更改为dashedValue
  • candle.tooltip.labelscandle.tooltip.values,合并为candle.tooltip.custom
  • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
  • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
  • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
  • 删除shapeannotationtag,请用overlay代替。

API调整

图表API

  • extension.addTechnicalIndicatorTemplate(template)变更为registerIndicator(template)
  • 删除extension.addShapeTemplate(template),请用registerOverlay(template)代替。

实例API

  • getDom({ paneId, position })变更为getDom(paneId, position),参数position选项变更为rootmainyAxis
  • getWidth()getHeight()合并成一个方法getSize(paneId, position)
  • setStyleOptions(styles)变更为setStyles(styles)
  • getStyleOptions()变更为getStyles()
  • setOffsetRightSpace(space)变更为setOffsetRightDistance(distance)
  • createTechnicalIndicator(value, isStack, paneOptions)变更为createIndicator(value, isStack, paneOptions)
  • overrideTechnicalIndicator(override, paneId)变更为overrideIndicator(override, paneId)
  • getTechnicalIndicatorByPaneId(paneId, name)变更为getIndicatorByPaneId(paneId, name)
  • removeTechnicalIndicator(paneId, name)变更为removeIndicator(paneId, name)
  • subscribeAction(type, callback)unsubscribeAction(type, callback),参数type选项变更为onZoomonScrollonCrosshairChangeonVisibleRangeChangeonPaneDrag
  • convertToPixel(value, finder)convertFromPixel(coordinate, finder),参数finder.absoluteYAxis变更为finder.absolute
  • 删除createShape(value, paneId)createAnnotation(annotation, paneId)createTag(tag, paneId),请用createOverlay(value, paneId)代替。
  • 删除removeShape(id)removeAnnotation(paneId, points)removeTag(paneId, tagId),请用removeOverlay(id)代替。
  • 删除setShapeOptions(options),请用overrideOverlay(override)代替。
  • 删除createHtml(html, paneId)removeHtml(paneId, htmlId),请通过getDom(paneId, position)获取到对应的dom后操作。
  • 删除getTechnicalIndicatorByPaneId(paneId, name)

图形辅助API

  • 所有的API都迁移至klinecharts.utils

自定义技术指标调整

  • 属性plots变更为figures,子项方法colorisStrokeisDashed合并成styles
  • 方法regeneratePlots(params)变更为regeneratefigures(params)
  • 方法calcTechnicalIndicator(kLineDataList, options)变更为calc(kLineDataList, indicator)
  • 方法createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis,yAxis, defaultStyles })变更为createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }),返回值由[{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...]变更为{ name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }
  • 方法render({ ctx, dataSource, viewport, styles,xAxis, yAxis })变更为draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis })
  • 删除属性shouldCheckParamCount

Released under the Apache License V2.

- +
Skip to content
本页目录

🛠️ 从 V8 到 V9

本文档将帮助你从 klinecharts 8.x 版本升级到 klinecharts 9.x 版本,如果你是 7.x 或者更老的版本,请先参考之前的升级文档升级到 8.x。

引入调整

不再区分klinecharts/index.blankklinecharts/index.simple,请统一使用import { ... } from 'klinecharts'

设计调整

shapeannotationtag合并成overlay,详情请查阅覆盖物

样式配置调整

  • 所有线的样式选项dash,更改为dasheddashValue更改为dashedValue
  • candle.tooltip.labelscandle.tooltip.values,合并为candle.tooltip.custom
  • xAxis.height变更为xAxis.sizexAxis.tickText.paddingTop变更为xAxis.tickText.marginStartxAxis.tickText.paddingBottom变更为xAxis.tickText.marginEnd
  • yAxis.height变更为yAxis.sizeyAxis.tickText.paddingTop变更为yAxis.tickText.marginStartyAxis.tickText.paddingBottom变更为yAxis.tickText.marginEnd
  • technicalIndicator.bar变更为indicator.barstechnicalIndicator.line变更为indicator.linestechnicalIndicator.circle变更为indicator.circles
  • 删除shapeannotationtag,请用overlay代替。

API调整

图表API

  • extension.addTechnicalIndicatorTemplate(template)变更为registerIndicator(template)
  • 删除extension.addShapeTemplate(template),请用registerOverlay(template)代替。

实例API

  • getDom({ paneId, position })变更为getDom(paneId, position),参数position选项变更为rootmainyAxis
  • getWidth()getHeight()合并成一个方法getSize(paneId, position)
  • setStyleOptions(styles)变更为setStyles(styles)
  • getStyleOptions()变更为getStyles()
  • setOffsetRightSpace(space)变更为setOffsetRightDistance(distance)
  • createTechnicalIndicator(value, isStack, paneOptions)变更为createIndicator(value, isStack, paneOptions)
  • overrideTechnicalIndicator(override, paneId)变更为overrideIndicator(override, paneId)
  • getTechnicalIndicatorByPaneId(paneId, name)变更为getIndicatorByPaneId(paneId, name)
  • removeTechnicalIndicator(paneId, name)变更为removeIndicator(paneId, name)
  • subscribeAction(type, callback)unsubscribeAction(type, callback),参数type选项变更为onZoomonScrollonCrosshairChangeonVisibleRangeChangeonPaneDrag
  • convertToPixel(value, finder)convertFromPixel(coordinate, finder),参数finder.absoluteYAxis变更为finder.absolute
  • 删除createShape(value, paneId)createAnnotation(annotation, paneId)createTag(tag, paneId),请用createOverlay(value, paneId)代替。
  • 删除removeShape(id)removeAnnotation(paneId, points)removeTag(paneId, tagId),请用removeOverlay(id)代替。
  • 删除setShapeOptions(options),请用overrideOverlay(override)代替。
  • 删除createHtml(html, paneId)removeHtml(paneId, htmlId),请通过getDom(paneId, position)获取到对应的dom后操作。
  • 删除getTechnicalIndicatorByPaneId(paneId, name)

图形辅助API

  • 所有的API都迁移至klinecharts.utils

自定义技术指标调整

  • 属性plots变更为figures,子项方法colorisStrokeisDashed合并成styles
  • 方法regeneratePlots(params)变更为regeneratefigures(params)
  • 方法calcTechnicalIndicator(kLineDataList, options)变更为calc(kLineDataList, indicator)
  • 方法createTooltipDataSource({ dataSource, viewport, crosshair, technicalIndicator, xAxis,yAxis, defaultStyles })变更为createTooltipDataSource({ kLineDataList, indicator, visibleRange, bounding, crosshair, defaultStyles, xAxis, yAxis }),返回值由[{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...]变更为{ name: 'xxx', calcParamsText: 'xxx', values: [{ title: 'xxx', value: 'xxx', color: 'xxx' }, ...] }
  • 方法render({ ctx, dataSource, viewport, styles,xAxis, yAxis })变更为draw({ ctx, kLineDataList, indicator, visibleRange, bounding, barSpace, defaultStyles, xAxis, yAxis })
  • 删除属性shouldCheckParamCount

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/guide/what-is-klinechart.html b/guide/what-is-klinechart.html index 9789851c2..034179010 100644 --- a/guide/what-is-klinechart.html +++ b/guide/what-is-klinechart.html @@ -5,20 +5,20 @@ 📃 介绍 | KLineChart - - + + + - - - - - - + + + + + + -
Skip to content
本页目录

📃 介绍

什么是 KLineChart?

KLineChart,是一款可高度自定义的专业级轻量金融图表。

特性

  • 📦 开箱即用:简单快速集成,基本零成本上手。
  • 🚀 轻量流畅:零依赖,Gzip压缩下仅40k。
  • 💪 功能强大:内置多种指标和画线模型。
  • 🎨 高可扩展:丰富的样式配置和API,功能扩展随心所欲。
  • 📱 移动端:支持移动端,一个图表,搞定多端。
  • 🛡 Typescript开发:提供完整的类型定义文件。

Released under the Apache License V2.

- +
Skip to content
本页目录

📃 介绍

什么是 KLineChart?

KLineChart,是一款可高度自定义的专业级轻量金融图表。

特性

  • 📦 开箱即用:简单快速集成,基本零成本上手。
  • 🚀 轻量流畅:零依赖,Gzip压缩下仅40k。
  • 💪 功能强大:内置多种指标和画线模型。
  • 🎨 高可扩展:丰富的样式配置和API,功能扩展随心所欲。
  • 📱 移动端:支持移动端,一个图表,搞定多端。
  • 🛡 Typescript开发:提供完整的类型定义文件。

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index f837363a9..b320db1eb 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"en-us_guide_changelog.md":"1af60161","en-us_guide_indicator.md":"561b6caf","en-us_guide_environment.md":"8463c7a7","en-us_guide_faq.md":"99902967","en-us_guide_getting-started.md":"a32abfcf","en-us_guide_hot-key.md":"2f8b79f1","en-us_guide_i18n.md":"d37cc7ba","en-us_guide_datasource.md":"782a2025","en-us_guide_overlay.md":"3c11662b","guide_getting-started.md":"f8bcbca3","guide_hot-key.md":"9c7a4d73","guide_i18n.md":"53fe5521","guide_indicator.md":"23b6042f","guide_instance-api.md":"d27a29d6","en-us_guide_styles.md":"d6179c4c","guide_datasource.md":"830e9fd0","guide_chart-api.md":"e1df3378","guide_faq.md":"e7d81dbd","guide_what-is-klinechart.md":"7a27d312","sponsor.md":"60732f4f","index.md":"d272dfbc","guide_styles.md":"b135c3aa","guide_v8-to-v9.md":"7dee35c1","en-us_sponsor.md":"03eedb1c","en-us_guide_instance-api.md":"f3e75242","guide_changelog.md":"11eaeab5","en-us_guide_figure.md":"3b2cddea","en-us_guide_v8-to-v9.md":"80debf94","guide_environment.md":"23fd3561","guide_feedback.md":"40ddc497","en-us_guide_feedback.md":"00404ad3","en-us_index.md":"94b82877","en-us_guide_what-is-klinechart.md":"c6f744de","guide_figure.md":"3e683623","guide_overlay.md":"b20e5b98","en-us_guide_chart-api.md":"c55032c6"} +{"en-us_guide_datasource.md":"9c9be884","en-us_guide_environment.md":"bece0f9a","en-us_guide_getting-started.md":"196ef520","en-us_guide_faq.md":"d858da72","en-us_guide_changelog.md":"65fd4e5f","guide_datasource.md":"831ea0ee","en-us_guide_what-is-klinechart.md":"7600558c","en-us_index.md":"a6d642a5","en-us_sponsor.md":"4f8585ac","guide_changelog.md":"96c85efb","guide_chart-api.md":"b57a9e6d","guide_faq.md":"797c3011","guide_feedback.md":"59c54408","guide_hot-key.md":"54dce03b","guide_indicator.md":"ef292373","guide_figure.md":"ee6e8201","guide_environment.md":"1b5acfcb","en-us_guide_v8-to-v9.md":"50c2a7cf","en-us_guide_chart-api.md":"d36887c7","en-us_guide_instance-api.md":"13db160d","en-us_guide_overlay.md":"c6625146","guide_overlay.md":"59e828be","guide_getting-started.md":"0acdaf38","sponsor.md":"4de7c862","en-us_guide_i18n.md":"c577d9a9","guide_styles.md":"3ffd89df","en-us_guide_figure.md":"66cf160e","en-us_guide_indicator.md":"f8019259","guide_v8-to-v9.md":"f835732b","en-us_guide_hot-key.md":"906ee3ad","guide_i18n.md":"75372bb4","guide_instance-api.md":"3f6b0b24","guide_what-is-klinechart.md":"7d0ac241","en-us_guide_styles.md":"30beaf82","en-us_guide_feedback.md":"9beda3e8","index.md":"60c8a73f"} diff --git a/images/404.png b/images/404.png deleted file mode 100644 index 9a191bf0e2a07eec92edbadd93216f440f5e9d85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223121 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�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%0A~stljy z*^-7QQtwWW21Q8IB5$tfX^ygbU`hk}?lFXE5ro;ZOFv(`$rTzlP8}EIZ3Vlv<-hnz zXucigD*JwOS(IKhSO~EqGVOhyq=nBuhi7Y!C<-N9XIfa$j=q@(D`R>FIAT#(h;)(D z^A&5$4XmyNWO&3p#38`tGBUg;)2X3BJt*zc94(eX+7VQy7Mxx=22evYTVwa9du!E) zGtW1}NE5R|Td_e%X}jK76H7a03>S($M5{3de7X6w{A?NgBFu(fLmG0MYzW*OXVuI0 zpgZq_tMJCuzWmJ($@gpTI}4T7N;a=m)$o)t%u$dYR5Y$7nE)+AcTx3E$&kx4Jbqtu z=dU3ELw@M;ekJiH{UH2~m}Z-0^uNCS$Yds+sGgT?H`kz%CjNzJO5WXd4}CqHCrqFD z#l@}l*En|2jpv+Lv2CdT<-F%})5F{{35@tij~;k72nB|I$jx1qeF-QyVW)qu&A(su zE;U7fT-u!(2`dLAF4E`Me~q^WZVvdnUj`hrk2FsmE>{nT=lPq_0C3M!lBDsnO=gh` zEWHQSV!#k=E8QvCK`sWpcgBIP^({nz21BryZ^J?%^`kD4k%K}8(K*=S%m$6qFD{n| zusDA4*tus;sQK~Q;zl=f@~e|<^h@e{I0tnkJE$-7Ca_1Yf>oGwg)iI(W&Dqcv~I5n z82Vs%OC)oD#>bzy-4herYK1D~g?)jgx}b0A zdA^vePztkg@LaORem@=R^2p$lf&`GeX+#XL%v{Ohl9Q8pKVSg43HJoRYh)NW4&P3% zXttejZg|gZZzPK0kDa2pm*U59-lxeR6UOLAiZczJq_`K3sotO7Az zX5fW{U<>3T`1cGj8gQEWn?k$)8MV@S*hKAhG9JsM{)bECA3FNW526+8;mg_(Xs;*c z16`-WiAHwgHP@{Gx-2RB5l&-3d>H642MRaes48K2TtJCqIvx-D^7y-EXgH=Swd4Ss zdXwEI93>HZ{x}6toPSQN`~pU|#))wO(%fGOKRLptfH80)4J1>P%jcH$hYIL;*cB8? zlW7qa6ARjd<4M}^Wj#YO!%`)WjstO8kh2NI*#+38%Vcr(a|^VUv7MLD?{7A)};tI zW4okcOL05KD@A?9e-0#9o6N>Qb(bfr((R z6LD_5Zc)$j=uvm*=PBhKV8ms0FG!wn3m{ zbNW?&ZPnM7_YXkQoBKP}+xylbor@!^A3q7)UKA3jQ$?y_Jv6j&D@QN=ODTB*OZA8o znI_iPtV=atP6r+dL7~RCbDsyL%pHzxD)g?@`7+uei(=W0Z3&m-Nq(Gf$(tu!X^ zB`3)nD=YS~JMKi0J`FbIDtCm(s*NCysA+6J^wg(sRaMC7Y+-4rxoHPlq;`)9@sb`&+-tv>^K8nVF)q-a(JPraH8wFJk{kg2L_o(v-h)Cl06Mue z4L>30Ct?&iC*wfFM-`yPLp3|@CpqZ_s_EJ36u1Cn$AdI5S@h8xN+pz%+YC{#+h%X> z{WzEHa12N$D8qG@_KZ)H$p%3QypIO&6}|v`E`;!hWYVlL3n|tXw3FCG1Z@tq&bwnb zJ=vjF>?*&KYqKBmt^#Mm$j5tWKBPU5HAbbRhUrX?n-_mUs3&8WXKcy8LnP;p3rOuO ze)%}BoxPR4Ll%8gT%N_(bC|`IK06!yhWHC@vynaWd8S{c9}7(Tm|G80i>f~qOLmx@&k%n1CO3fF*|N0AbF>Rd zVYXA~%U#q&(Z)OCdEW!Zz4!$71$x!}!yA0TE{%xvHIBtuEPsQV#-hL@?NrCFcXEY} zS8ym`(THIZIHQ|+5qjQwVYg^xVj`Ud`4g*RQ@6Zu#(}77s9W9VtABi6G!+Y@K23Tm zUdZD^oovEhYQ5VPk^5t)y#L?N4l8FLja`N6LhGwy*@xU=^Plk}_^UN?hd$XkmMjY? zbD3lQS@Im9FaSS)vK$i!R3O|P#EWb0Z`1{u4K3y^gAFL; zrRrz+7P21xij}RVA;G#{0-}DROvZwn&dzmA=I=BnJxl-nQ7pk-*&6Lu{WCW3=@-B_ zLGag+cjDG|>o{*t#VJWeo&x;pgEHdd8&@^({MXbl1 zHhy>)=}*I3QcSzY04_K%^)!RyDRbO|l6Ajmb9%5k0f&f+qz>n4)!5kP%v;A6e|gF$ zUBEzuePCfVjaeO4Y=AYZ&hTBhJH>4bxh7z3&nuH2h6zD;TBo400Qjvzlzf-2%46E4 zY?|fqok4`5Vl_d9X>ZZipY}(Y_f-CfA(MypQ_sNbVs$efz>0RG3kJRpQ6m(51*4KdNy=O&IyMN_f(wS)ui&sQH#sYB`SQQw z^0nD;YP~>smLos^_g0fie)A^u=@)Ilwd+0B9U$IV zz;bPyk$i07p4Klt_kZ5bG(gb* zAI6!>992j!xbhvtdV=-v{TSQn98ZXY@F`ea8iN;cN8&4s{@%7e#s_9;(w|a1{i6js0oy+S+KSECuny#MykeA| z%E~U4P9NAx@K*wO*t@@Ge&q)(6l#a~#{rek?7Ks&^z~IcPb;EX-Y9R3r1luh;zmGF( z#4eShLN32E?p^-Whp&7NfL#!*X9~gyM_2`-e0SO(YV~~Kn?CbZ(xAhAp*vZ6fCx za3vQW6dr-H!lTp)EFxu3e=YaKn)0|bvLO_Z;Bmwy%>sR74wFiVFpjfB+*AsaX=AnZ zSqOqT=GtFv>0Ac-&Di~cyolt#Zu$%7%PDOk06(o<`zRpp#EOh+j4kWz5tliy-QP2& z?oRp!6F>oG1BlP7$OM3qPql5QAd}x!fj6x|t#5vpWTzLNe@z5V-~S2HZ$Ed|_x13p zubmXTj4ya;_b(>Bp!KHHB$r*TJYUI4xv5kFW-T99wD#(G#|9Sg%>*X6J<4^{+fNlt zxejvvuY77>X*Zu{h#VU-Q@{$E>f-i=fuAIh>y^yLil55(Zn2 zP7L)?_e%O3H^DAoZ81(_ zx%LmufUw8W_wrRofmy_#T{5oiTGbV$cVa(I+^HG*ZzP&jY*Pqx)1^X#Fk9r?>VTUe z&JMXwNRxOJ5;f;jb@+MQtN*n8_$l_r2+);lTRY0xqM6DKMOCjv+5U&8d_Thp!YTO$ zU|AK(iQn+nfu8F%<_`Y=l=j<17GnHjHD7Y+7vWZ8x)5UwBC7TOQ%SsGa71r zYuF)1a3PaDFFkSVuWL_HKFb8eh^eFRsy+Qtd+=Rf!c9{6g`t z)jpQ5-Ihy%;(=(=^@~h19E(8%C7Nz2?58(k-#822rW5p&B%SIg%wru=gNw`Or%`2E zzWSW{?!@EL>Cypr)2BF|{d}1)THs(3F!^vpI3+zi_pxv-WDu$SflXnL=)$-Rv9`(- zb-cC8x*XWS^oBq+MBZYiN6gHKsB^USJ?^25OO|4igX%&!53Pc0c`HRlsjY(0hmh4E zu4f|(CKHRtl*i)>hhA6Dy-)q`0J&fwXfAOy6bb;J7v5MhN2iOFP0nz#v1*J%gnOqX z>FT%RRpIXZ`f)`)*4uENI_%i4#5gd_fqT4f{FDsQ$LK?JlloqAd_G08e$7K3A@h_sr0ii^GkU-$KYoAqDiZvG>9@u}Bi zsc?GIu-5B*+jpx0OaqfTsc|~VSqmoNDrB8!eSDcz321~{`6LYR_PdTqS}T1rEWoyI z#EIOZ5pNXEz9?w&^bCc$&f<{Xauq4JIiGYv`i|u ztE$&>M!<`}*g8tKh*ZAY3?<lt-CFf^a0!bMDobhnRLqh`g1omE5g>XvPJO+GXibZIs9KU+&$jbD!?P-tM<-9qYp#o z8+LYVN%J>d+_{1@_~^=K@zFP?$2m~MtN`&;8K^itw!y{8e`uwFXOWlT1eaIS>k!G? zMT_(%oTzw$9E`;#Z<@fIAJTWprvkbsbmt-QGEDVQv937EtaJo5hUol9z1!MUg56tv z%=X@E#MWkSGu2tdvE8XKJ2EnI88@kg$iC^ws~KBax8gS4thQK#?8G{;S;ozNt(Ti`d|h;0^fOh|G)jqT35Mv%IY@tEG3fHv+DDOCVPS}`pnf)7XhSs zso(-8plOKAXH3a6x*?sn&1<5+hb-)5?%0PUF)jVwWCOp#m+9mL=H~5sCz8qwQ6^ax# zNq7V0{wWO|CA?34n2<1CYgOociVtU`v8Z!BZQN=lrp&+=?v_QfE zyK&5ZBlg+av9#2SbSA?8X&TXw#wq#%WyvPHaVX>$arryLWrLA*7yCPZM~pB%_>6Lwu#NW!x0NJxzno@BZMH1V?AL4#G zGyOjHZ$_$u?8#;@u0yl$o+0B&jz$-T<5`F6h}oz{+p2q;a9%##qS5{2wZyHO-F6^5v!K+POo=g!;cy+{|;&Yww`x;nnK9=MP`HT4>O<9#qc z8nff-y`34?PtEwy(5?J|a`!-Rp9UHUjepnZmH>3)6o9thdb|8kXPz%OJTq`{3ke|LrCOJ z7_s;A_}2JXICty4rQK=4R#6i?TdVF-=jX%3Lfydg@M@gn(-T?maX@(awAt7OKajN2 z;O$WmYK``F9rLHB{__k%Be#Nly#4OY=;dhx!7odC!xtuEs=R9tFf8=p>Z}okQa!yE zc1=5;BK;aok~d?l_1Hg=FbWPk%ywA`g z6t5#rXMT81w%D*6K572_=_yp}<+yDKwpVMf?ZaLJAo7}g0)&y^w>6G(4|d&R*npEs z7+7sd|BQuf7YKVFDbrxL)-2UcXti~<XAoT-nQzplvIBI(w0~VJ=k}o}*ew;e+-|Qhn?S z2d{P#`xgKglDKMU=@ZJnPOfh9%elaBSm{2j=?p#mNoyDm>NB6jNAvDbxIO(lKgl|g zQPQuP-4byk?~fPJr=_#BxtSs9r{@Oy4!Ze*^LAAw&|OjgXaa4ruC3_!P-5!g!R(J) z5C1l&aQ8@WaWd6ODXV0A2JI^RE@DK)`eAEz8|dmB7A_Ck?u54r1i;0>)G$nm`}e$Sth$ppM< zNM!WkvG+D#CGy6!X`&Fxe*bRFby}s>XG%7HTDKlx`>?FO=M`ChH0o+dG#g9t>EI2$ zVrhvZo?q+|AJGEV0R(6Qj`|i3rR3#VaF)A99f8%dR}L3xO>uDa36EqDAYQ+Z#el+g zh(Bg{qwgD{WX8&+w$}e{UK?*?CtXsr$lWhH$5~;{LFDOiR3~T6!!3C#Y;3EPSb+He ze=P2f6Pzyg9f0v8BBQ=&i-#od|EPmL1Kykos+kR+y(2%g-8k#4y^VZ?@MpIW-@h>R zjYq6P>}HT}K6&v)ZG1)7OnM9L57q<8CK0M^?-cL`UTBd{AUD|FrDjCiz{BKQYl-KF z#p`~Irwum|Gi1H(TN?L4|LNl`maIS7M3gtgbhz(OT#W`sW!K8GlSSovQ!e7Cbh2Dz zJ$t`z*N9d)@CO2F_(!6hU#>U+Su`C$@S|5J&G#h3%AY^AEus}U_E~%t+5e{nSS!_- zc#<*X@%Y(yIoZXQ%uU;WKfXH%%FT1v*MFkfSn6s{en=to`u+gmYwZ+B_dFk!IVK(l zaQ5cav=lL7z%$2hrv(HDp1^rxTL;I6q*fv7br@naFFU{ju?&8XbN)lJ1i6O;fCrz^ zSu+B*f4p;#*7l%DwmqL`_MXGtVeuy!hSfvB*UMKWzXOV~BW(mQfkYy%Md$~a*CO~1 z02T2@D)l)vz@&?EbGnxxXZgZ56{Lb7n{DYi=V0tUY^{$Pr$oO&gjTQ6RcgOuIgl!9 zIS150MgzNHPOYoPJA_=N9I-Un-$I#yTHVf0D|wK(dw(KBQX&%ALhk}e;i$#RciaNJ4rHWZ<8fz zHAhf?d$UZ~a|O)^@VbnUwPGj)RSfSAqqGhnV_W#qqqz2MW5X<~*L{$hh5^t`Dx}nh zn{xkX>xl04gKinTd=VhZ=lK>#y|Dx(R zu6JC8#o1~e&^6qT;DzGMQ_bd$lL7I_%Ix6EbiGqRYy$XIxrLkNU9y(~oXklQOPpd( z0P1_>ouh%?a|jY5*+fh)3dHlbQ?h~;0*9V1US_xn9DMvacT8D~OoB`J?Stk* zYtO5kkNrvN?$D#HKyNTBDcL{xYk_895f#h9dw%@>fkNJE%SNTSG>YNiauuV+5|aDj zkTzZV-=yX8)rJf~@pfh>ptJ2AJ3)gZZke-h}toq!e9VL2wTn0{Sa}nJrD@ zBkkK`r*;IUUd;UPo%b_p1q0Y@OWDjxmcfkN`~(nAc59MyMp*opWO5XFc&p7fYk069 z1Wp!KW@wf^DEU`-GGNw0X8+4g_}KBD#G-8U0$%+{sg1!}a&O#cAR|yoiDU$7M@g)E z{1j0^>G&{@V~vIGP!P+vxPmIFnnxO8_jpsQzWoyWn}b2YIv9=iJLT=`Kc%j%&)o`g zU|3iC2W+_y!D$KVqZ0=G2e}T<*wro(=H2!>q=#C;oeH3NTFqITbwK#^X{dk*Rwq`6 z8vSYRjlx6ZXoqSA8v&!FED*a~-EF?k6rGo*0x)Uvjg5_Obgc#NJTjo1o)h``h*T#sLo%+PvU|mGpnHotrA}6C!Q6xP4Xp13rqeZ-gZ3r zt!}x<68@}LD)LeU1BDxL?osXxEdR#7KyEGJf??o3sk#;65k^F02u=E?gzB&w`TZ!p z`)#SEe&?Ma+MWTPVEE=mvm3$i{uZI*hpboL*Tq*yV>D$EJw3o}bsTOOh+Ey*HCmuT z{Dx?id=O`hIRQAgu;8{8AyWHFvwq@^iu7f{7Ek^gpL3YFe(_Et_FBbGjnUKIIT>R! ztM^=0CF23>Ppf;~es9#sm1P-WmRch4=!>K^rMYDIrfIfZs0aPCMpxt%SdVQ*uyTLq*+nK6?`*{*Yc2l}+)=Wu_BymwpCvoo{ znCN9{>&81|L|HX;!hK%S2ZJt0@nG`(^ZozoYMvw+NZ{W7K%sgSrS{gbbf;l9FiDCA zRo7qv?rU|*gt{Sg@Aea=YQD?vg9!hsL*5CU_`PKQUY&JNG3JFjc`9{PtW>D&9L##A zgrYkgI*ga+bJwUKhx1z@7JVj;I`z{*V05aQc&$|gMMUNA0Iyer(CDGokBj&0<|-fV zPM7>G{P8>N(jwM7VwY!+xh}VIy0A9>=HYbZl}efrr4M>0+z~T-EN(u{?xNW+hh{PO zol?_Pb^f`H@PwMC+l%+3GrON4bN}vv&KNC0!?c8Y&9F4{Q;EVtJ2L( zp&zRnke__g3zwIFF8e-r1b-K$%|Pf{T>)?`SlOQgk0S> zN8a~m78kBAYfDkHi{V`jK5i4Ayu8QAzPUslZ+=J?pu{?C`l|^`>eeZ0a_CT@>~e?x zDJ~LKJ_W~QZ?L&Rtzgm-)S^prF{tg^fxw0BLUOR@KO?B;8V zp1*9bd37_5*0mNoea0Gx&bfi+)9^(* zWibhCeQeIX@?)Mgv5U69A+NzO!=xg|n%er!gZ0=(4hfOY6RG>1qZ8`PzF+ z&RpWHix!c82WmdK!^RW&X`0{n)KNQ2D3e0$7G8ows{m+opLtkUE#)P6{by#7=1o>B zwOPzdAi`roZ*Q9T?19)lRoH#bKd2tr+3}{nj0-nGu5S6?BNWXXCWx*=)ZaO(5T|tb zC}S}mTia}<@HgWN87~z>`1EE`n&yY5>sQ9Z{XlreTfF}}LVC136>ELGPknLkl0a<& zs_T`)vF9eJ7*(W`o2dI(1&x`K`Ln#!{?w`K?F{gVF5|UM${UN(%%1QOYfD|-pHe?W zrDG(Lq;gi@zcbWJmLjJli`{1Vd`^g?BIbBk_BY!x$BS8Zv2wm3=1ML3KY@t>4)+!^ zOSy&x$_-n{7?K#=w?QDoVBhwgsbYsi!9%h}U~3&{I%MAre+bDi^q0C~hcIVZpDzCK z5KZ@P3G+b zUTIc!&RlCV7hvWVG*dX3yc8ME^NXn`owXYWB;=ON3SOu!HRIi$x0$OflnNT#j`fl8 zzVV87QfkDCkkfz(uTM#npAPQA*rF{TH`d?d0V4LbV07Urg0%@zW=)Z|F~p*?8~-Hb zkS_S8i889wEsX?Nk4cq?dN0AKX9mH~t%Sds5?5M6O?smu+sHJP+VTRat4X>qba3XK z1lllMeY=Fo!*C5pK=h{}w>Q_NMK~g4682BU;Z3lT!&$HipO>-cY*47rC9j4)&MlbA&@|5qdQarXO}-tvPdn-9{y*|pLX5IzI9R1dxI*W3pgu@n)L zo$H$M6byg9G4@pV+T!njJn}Ymcl<#XA*(0uVNU=c=h!51ZuKrJC%5Mpqc{{^`n~QB zZ?vaoR`sBwulH#{a3#V>?S_Mh?d3200^4~yB#lKK5fo~}Jhe9G%@?W~RQsSxKz?_! znW1u_Oe3M4seky}rOGFSB}wP20eK?>_tSqSm>=WaB5xbjo0khB{kV7cYi?fJIraHN z4wSM!%mwS?L2N>RLPZ3m zJ^!45_5R?sUa^dkZY%zfL%iO*k7nN%StT0G@9^m!<{YaPXzoxlg^)OeAVgKlCH;B) zg)*p}&K^11dslw>XSY=kdEvjtFGF1?N1dw;q$!e5OI}2jo3Kx;O3w|4!%>$*5UVrA zEbwAIvL2IDbvLO$HKDO5jRekWx4p!v`>0C^``+kJbkQ|AkRoZXWX$8YWOJvcWiUW$ zM|Sxo@kkZ;tyuo62t)(L!Kw&9;E#UnYhvgC{41fhF0Z5L_+Ai}d-&%mx0gqI0`MFw zoO`Kz1^$6NGGWjfP76M-jVh>-j+JFdGst--tXFG8R-+hd0UJba3JN@itq%{;X-ovu z-UNw<{*&~}hbH^Ojz_0L5HdaVSe_yH>*8F4e4q{i@S{E)zL*Q+3s9zrmab>aG# zL_t?w{WkCWtqt2lTeH0R+RZ17Pdaz<#ipGegbw`Hu|CXRD#l55M})HUMB|m4mFF_4 zI)0rq8bwLW1PzDK3aJ0<%N>UPyvy8E*>i`gq{`EC zCWPBSdevW(XbD!Bo9p_XU0!E@G&6k3U2vFc4LGh{{sX8~4mBe{w)B>Q{voUDF zzv9)1P1%52Kf!9{plbEldBTyo*hz8+*8+T`U+N7wGRlXBRP(;| zl$VdY-Vk>))-%co`$A(@-hR26-ky=_!+bd@qabmPv`h8w`Q>+EojIFR85^gvYlN?S z5YBHA#%O5zG_uTOxtK3P&e_yHiufjUKQPwCX}$rhi2Zxg_u9&i_>3$63cZ=Z28vXr zMS3PnEhIv|5QTfb$eFl8nXGVZgM>EkR@Z=X^g{RYY=0AX|B?~e*n97U4`8*57|iB~ z#xy)_ZhAUObx1EHLDjZHb^`p#jrSeC#0OB>jWNs2yUDN*({?1KG$}8d)bFksSrp{+ zM|AOyT-_T^Eq2bni~o?@q$DKKff>2aiB$h)T=OO$eQ7bim~o1StIy9oiLjjj2cQ2l->A{E{6A} zz3JKZnZejIR>acg;>Zt4{n&4oS~LGL%NJGB#hCie&uqI{%F~%3YLeO|-cGW|8$fjZ z%NqA5`Rqy_qf~9nh}Af|ujOf!c(^;+ z8_;r8d)G_fuI{WQNVtldu(j^}v6$xDvxiU`$a1Th5ERjLbh0@iC z{7~sGk0I&K8lsQ->?Y>4;CqLit?5dp0bh=s5cph^vHZp>!Ti#xYQ`-q%FyoP z(>`@mYO`xqp_SaVAGCLtW98{Pu$Z-kt%d1LcU=D@BUnV+<=$OP9~vwx2nGUTQTd+q z((+flYZ(D_4?QQyuH+>uKAFXc5wC-+WDwAW1hE%}jtAIumf@E|2w^7UkR)(|t56h> zgLAMNghGX;i+pas@%?krI5LtizmU&oGZ_5lIGwAvXPaF9>b1G9gu^hNcFQ@_Vm*Xf zq)9H;=ex_U<|Ehf+``K9qC#0Y)~P^^3G1#>btU9L5_fyFPxT`lhapTL8|U!zU*E)Y zeIUWr3KyoPKt!E{M#%m&T751k2m;?w=)ISI6;mX;HL>W{pvnULZ(cybWF8E?F{?1N zN^Tq3N8sg_*<3M!NThOIj-pyUGau?7HTmvlXzDn4wUbh(gSSyW;>1?7%Th{U({XuFwle?wmVqiXwu zgLBlXp8w?@zkXSfYW6cHBR?>!$l!#mVg^iWJtJNN#iE0+>Q7mDapMSDyCZD$^jH;n zb%gb;y9=plbgh}>I~pJKs1lE@Q?3+3r2PeIFwACW|5MH6r-2n#uE9*TcY>tscI^J< z&*Tm9Lp24a4&KHMn zc`)GMmQ$%E|5R>PY`w&A>mysckQr)$B{$j;sD;uYGpBC-^JDRgIU#?!%eSdk1Egt; zCM^e8fy6Hn5TSoZEBn5ThL^qQ*nLXbhgcw!``*BDUR{h)STy!{wi7imFnrw9NTtuR za|*n?{8<8ho?qt_8H`VF%>nfEqso?jNNW@5-sygz8~RKW~UT+wv&>dnyQo2ITI(o`^IuSws+iV(v0 zYvkNc4Uh396aR#VrA;D!nEZS+TNQX*a^6t57X2`aQAA$$hMHflb$CU7R};Y_Ax;1c zp^vbasLpzi1KIk^B7znkbN#u2DTU$ERWOJZ4a#BuTT_S5t6=W!x>*Hnbk3i$# z6hFNzX|!bpwsvu^2qRa8M)V4!ZH}OU3xgMhv*x=5zxgz1q-;w!3+*}5=~jfhofpi1 zli>W_EkE>j`|q43w+}t4%*{q$Ez@mkH(w7xboY1ES*v$` zjp?=sPKZcSUTLvZf>%|ZMxRHS1bCYmGz98n6PQpreJo77hD-(qjL4dDp5E;r`A;t6 zZ5i!u*Gf*BUCrhB-SX%4#E1)<)8sjyZ8uLk#2_$z9vZ zn*JDa$SNd7vZcyeV~dJOP^_S$XvI85OD8DZ)LcA)xH{$OY(b+3G%vL&Q9sHR&fXTqw_5aPK6zJ6RqTfX=RN4w57 zPskq8#g?U@WQWKt+*V|xmT0CkYP)VnaKxGhm*WfC?%C-Wz_ft$_A0;k!P1|am4Td4 zgp{7|M1|txIHgOLva%ATKoBlZ8uR6QpgH*RU$0vR?)7dGcIMl=_)a?Ema|HH;oKb@fSTXiI#irn<^>B{?gdy+u zG!!4kqAFMt?1&bD`}i(;aE8wdB6`qjkJl5CmboMAsy>yIuj_$*i@x74d1qW)gNoG=lWE2rK-0(?@2+8Aw1THhAupy9+8^9Z#(lB)?H9WtzxHIacj4 z+(vt9Q+oCDMEOi!FBRtIGCx9ZUxUf%h#ZK9FC0nkk#G~ z59}0Xl?;L~57vQg6K~PM)aW^IPzmCF{!CUsiHpk(OFFd3-65?#b@8t8Zo@rdL^q}c zazH?G7QLYB5O(|2E2Klrs5Y)m;iZDsFY|9;UpR%)Tu-5=&-IUb{T<+NqV8Ps^UGtK z4emWdHF)kVXvoIprNi30BXjy|hBIFD<^ArwY0l^O46f&cKR{*+UQ=tzw&&D*QcU-( zy-!PauJ%oDul7lvcy_W{bz@gfI4SP(LDOMazxW}>vb#^SfatQHeQx;yt)PS0aaFFj5TkD#K8@O@}qw01b1xM7YOH9*YpQ{)M^~!;9k2Ya%Tw+!#|v75)4#Sqt!xq3r9B-n znV^jDYwS<$!gB#W^ zd3)N*&&~?PRisL(H2=iiViOcyFT)#1Q)3oQ72ER&xQWX_El z(Q)k^x;X)QwEC?d5>Lqfrv*U#s?d869H@ZTa;jxtiIQsuy{qYC9{~V9h+LB>HF9I& zR+-9=^(pEx?q?P*dpT3>^X+2Y=&kkdqG!rlRl{d z7eB|e9iag|4=#w7Iym(_1b_Iv^uat8cCE#HRo^=4HkdqXwE%j2+;0WktX%A@y4Zg|_@kjr?u z;vn}Za!|l)>HQpFI^HOwsXsHvB=pGfq1UA94}*+R%en2>+#>-g)t9?bz)g;MKfq`4 z!Wkbosyi$~o!#umN*p!s!b_IZCb;QFNsD-Tv1YlU>@U3hUYf$LkBN-yX z7t#Dw##YeCL2mrZu;>@(zdpQW|C%wL@j=WX0Ny|juv%|$ea@)}##|N)5cM^F;K0wj z%8Tzdzf_jzt9}U)Y^Dl(Gnyl?6FF#zpO- zV7~Yig61dX1|i!?gSnjdMgQ&-U50nER~4KB;AQ*}&JLAAxn30+l`1F?BeSl%ypd9N zas~q4|1*O|1$>ekk_7#n9&bJRJ~h1~8a74Ms9{N~(@` zr6B|ZKC<;kX>8ZHzvfiEWTZ4E`|SlRV2$YM@x+EMLFSV2!v=U}qAvcs+tO?2ZruAl zA>&ffgi-kT{qn%f<95$hTZbzd(TWz(YVT6+o!OI%)5%XtTvrCViBja$8GP?J7|VK` zgKGN-Qy8EKa>rC-{)bUAW84I*Lh5wAKy1)Z`{P`GaTvWxm+FJpRSDha{64%ODD?QQ zCjj04^a60N8R|0gbi=1+F?_$OST}4?4)RTbuzRDl^VAto@KC-S<|8<0J>nND@zVt2`v%N`~S zjfgJ!x~!kpK)?(D7Gt(GhHo!f+E0i9F{B*w4lfB!KiMUk#h4dNYF4LKz3VSgmGIME z)^_b@L2?pf3pFgpaD*;Y*J|$2X@Ec!e{W;2fB|1g#e0Aro+?Z&_Vg#T?~B(yPY@zk zatodZ6jsdXw!y%qixU?>DH`RO30k};G6>2>7k;7buB)C>#UmK=0GhGAEcgVTK1?iC9Oi<;UY#t|&i&!03 zT?3OupDzH@vU;LFTzGPJN5-u+L=TvU_J$lje4`d7k!F?ChCuN|OGda@YdVb_V}M~G zO0w--afIFn1JUQ_F&+6dUBQ83QS1KOAmU8*0nig?FIcsFKUMYH1d)t9DnT$debxed z0$s}CfYb0}gOz}mSfAPZepOQTaa2|BxBPFJn`>5pW%zmV15PyC`L@S}u!D{~1Lpy8+eW8EgKn#H<(8S8LyxnpDl)r!2emd62=-kVkXCtM_g zV4R~mK`#5B#%mQ+$*63XRb^_GjFwQDU8=Du=*Uj;a1E2=(N_GC+5e3VYm_nwIF6gXx8;IOHj{uOwnOh| znxQauQBwFo$p4oQ-&3F0&a5KvF;I*7+=S`^gbe7$bRR#ZzWZer#_kw9hER2w-FZ#$ zU21(Ezu+}Nx;%B{lq%QheML6ZpL3aV{5XtbZ=~XUmB(38%#g$HF|g6~qhQD`=h58A zAP)%6v(BGkpnVzq;ftVRf^psF`&%Z*-@3sn(XNf}8*QfU*-d0rWn+G@Nz4MfC<~8U zPonK2{?r|*nh*WLDqk?!2J{!s{y85+o;=~~+G|*Xc*_ve`|Pc3d2!I@ISb^fCdp%f zcez>(r;mf`KtOj_s544?SiJh%>{DkAEJFcWFnZNr)-CEt+3#uSs zzhN{Hqs^H3D=DjfQOr)E{AaID^mImFCQ+gNsFh_F;hINPPS8^?yTw-#yA~@|v+w01 zUI}dr{>9F{rWgRtHS})k&35Aq+dzkI@2KW`CG*E1g{dqJsyw-nT+PzYF{D}uulI9~ z+$ZhHz_#+{E8&%{Z#dfxV9%q)s*#ucGRl&Xe-^#5vBAj5@?K(mG-_(;wvKkpoBj^I zAnk1)e&CKRXnfwuGL!1=X|NzdzfDMn^cebe8f{e-7rb!!=9~U(5TU}HTgVLUi5h<2 zsN?*L&fV8m9ghz|h-aojMSSM5OJ?dr*i-51IuQ98BTEAHOTo#4z-#+S0h6A*UVqS= z@5?-`rsi<~eXD-Fv1f0u9~PcJ@&O$5j}k-f?`uL&oo=wQ_x@Y&KQR)XAYwZ5(h`b* zh+hwv6rS$vfaW8rfg9OcEjJlD$j3?;dchzt&$YGXMgzqLpgOMFYZc!Z-A zs_Pji&DYtl%AXq|g=mB}fL%Ey6CW1t*;5+b6+(7B+!C=f9WT?fH;9YaxH?lbwU6`f zb{;ujCf6DX`{o7=t6+(y7>o(SwMl{xXD*0oL^2Vwt+4B2DbcVom}YITpld8z^Ra99 zHP|Wg*}JrkWd2MmqC^hTF0E2w6T@=h6YDoF5s_8~;Hs7b>vlsT_)jSG*;?2aS6mnMODdUH3Eu8>od z@&Aqf`=Z^VBc?SP3~Co2zW?7DOLZ!^^%k)BLwLQmezJ0}WE6;+?X4TL*;r3Y^48wJ zsmPA1@F@{u8WcVFvnP|9Lz(k-XkfueW;IG(iR(HBacz!U2eUEq%Hw6}47vkATx!Fj zKIKO1TqU3uBLD^ey$6N#-q*b_!zbdCR*JRczC(Sx-zCGbXEIj@nD(gvnwtWd$`ng# z-v`Bd60c%Th9lDFAK=t^o4CgkA#ZqNZvVt0Epkvc_{ye@tkrGu)YWnPU3sTuMl~CQ z&SAIJlR+g<<;C#Hxcr_8^{QLrZDpM&fM3vy6D; zds-b&yXB#$R)Z>dw7+#v{oSY8uOvnZ#`ln;UeZ2W;q9>6bCV-tH!+~H#jQ<-svouV zdN`anOuW;Szr1hQwwE3h6-xYdZ=K&_veHQ?kojfR-=@%+rOqZPO#{|fU4s2jMbh)j z-fwBg8%I=#|9kb!sJGfD;=hx8CEV!%e+2f3Lghqtc#>;Qe;P3C>)CJOJ!EO?yez%) zX_-@#A#4>|;i~tV9KF^(h?T$FOP`Y7loAuQG;07J1DGYiFvDz$cHXRxUMH@OA z1CJh$L=_1D&mvu(cvu>717Crr9eUo&)c@F z4mc)$z8|>RV80W=aMC(t09q~G^&ggD^1-$YI1XQ_cFe!#sJgZVgcrA%z}CXKZthI9 z?<7jb@5ID^N7jS|ftd}7zuy$-6Lt~}OretcO{7!?Vx5w6NEGj?<5)NU(TF69`W9-D zi+D=ClXQ#Okcin75PsG)DK<3nOy7DxY_55-51`vkDT#SRaZ?JXpa#m+t)FqLj_(hmdXxlO`I^h^ zri5(Fy?~HKpZFy+-*&q>e1_evz1RJc+vq1|3nW5D(ZxtV|n(B`S zUPxsxfOD5*&7pLfD`2=1w@!>(jpBzOySe7H zkP^q?_vF1O(6WC1VQaeizpUbyM?`rtWSg!I)`bpbz+X=`BKgKYTmp(R1dWlAA9-)& zFf26^fUahI+#jM@;t%;HV1^tR8FWfqRlg)34Tadf@y||O12v{yNM0psb``dIzGj{^ z)luINw?-j;^8TQLA0d~{B3)O~=MN7!p2OGyniN>#?Zic0*D_-MKHWp|pv_JA$zTfQ zSun3jkIB2uf2Kz60N>DT2=CGG;flQW{~}1NKGJ^0k|k!-0?Go&iOImTm>)Z4f{C=q zL`X5JzK+>;gUBFAz|1ssZ3 zlI_#c-6%2-zmi7ZXZPD*G@l(>1I8j&sMEwN|0kuv4Czdd3Ywg3U3$9YQ3(JskT+A{ z;o+Hg!-|`|7s>zp;5+-wLNUF68D9{$|C7BM!+{_oakY)T{)VNWqHgqZ-=gjk{y8tC z{OP2656*n{r@#59uHGJ#EZn8BrvC7oBi6P%G zs}tqNzC8x6R$Zmzl^r0(_zTTL^7Ild@DSgfBNsl`_BXmNGP-$scBtAWeD)vG@0f7= zviI(X!GU(Z8ha?}-}WU==k8e$TeqH%?-tKRTyr#rnfp7=a#-~6-6rIfvACq$EBv8*e=55_7XkhMB^#G}m`Mea*X}6} z#xTuEp49SlDmE7+D%b42K_5b;iu00Qp>_FG9iND>^*DjabN><7fAqg>Prr;?f)RVpYcn<(@KKo?-*Poi z&#zo{THt!-HPCxejKrA97m{!WLnadi`;TvB1b@XiH`5>dJNkOLTsCB;M770DCrEr~ zj_q1nyhv+qY42?8 zXVM$qSBAs*H!lhb#DK-%&(kyX!M4)&esx`I}L*xDZ{r%V) zW1_^WD#9U8Y(Rpk?8{_obPg8%%BPPd2a~tSU z=4`E3n>)SKlnBNsh!Q|~Sy+c|=F?^SmFqg=6WDAog^1b{^RTozsR;fy65;O?^&FAV zy0KlXwdFwH&yp*&CMzFyQvN3ytUJWb_Y-ULAy0p&7B+ z^O=-L2@euG2{hMF)c+&uE4-rYqP9XRa&{W(4OJtW)Npkl|kws_Zi_rd$kBS7sZWV<*P0p~C z8;2fm01%S)3JzLTc}4r@jlxkle*R+zt4>M6=0Q_DT{=| zZZ$9ZSk!p?B7r&)3lLGU8*2yE<-ljb6MStDg(1NSzIPszzp}zsm@b%Cs}PEeLGc5Y z1ogU?$e7RB8#bzVgo<@rQ2Yj5hK6s&&)ghhi=qWfdWBmxOC{AB)6%uUDunT;K*D>! z_~<5QZ`S`BXP*=x>Rb^-@1ac<<6jXj^e^YOcSCIVo}Uv{GYEHN+(^ojgp?%4*EJ0; z!_mbn24@O{0}ttEku)2f6yEu^)8y%Qm@e1z`_q*7<}-+ zj=A~p+kTP;(Ea@V?K1fO^xUTHpFPD3%vhZSuKDSTb=zu#cN%c(lqmxkNlziZ;8^ zmctnKn)t9OBPAf8L~h@D1*L&AyW-08$CK#{2Bhr^k^bD6o-0mw{-op!KpZ27qD)V* z)h@RzSo7?6Ka)sXSvZ`@-{uAlAg+?Dbch+me%Y4jux3Z{rHw&fm<)c7kf>bBpSm9d z&_+@@9JE6A`1x#Q484#r$J?1mTm zkJf$`18#{pv}q~8jNa)chQKg7kkcYIFsCPPWRq=GbC#mxD$tvs@iE_$*i>1$Qz|TF zIF+$dvOxHYg+b-jY4~HA=)&jJ_jHlLS#0ZCvRV}G-+<523;{+iCgt!yw};&jz;!#zN1Vq89u zVed6IChA*TYRhxRoTyqEOc<*!i>Yhrc&GLPkYS4^Y%S8CRZWCTjCnnAMNsR0Ks_al ztoLl<|05gXy4w;oc+@Kp`$OGc>4sC|Ey3+iL>1N0;Zuxg+kQMe&`nSC`4*AqmNo9C z++izA;7zy&&suw`?2F9>+;d;4r0DEOoLbwZ@v3hqs_y@bZ3NljUqT%@zj&E>R+(M4 z!6H4YJ_1(8(Kv}OBcr20N_fev1#|E|(;%G|bZ1Tp38JTxKHT*1lUak9J??yp0X=oq zLx%HF{-h=S^t|a^w0EEhbW%TypucJ8MNtSgh7v~{Q(}M-%7d+ytafp-hl1euHdA() zG7Vyv1q>s>)HWkeQ$fO_tUslH9`cU^!Pz*Kr+tfR7SytV34|#;{Cs*dq}Nc}aFObB z`42K}yCrE_HYp$xMAKbL6lgKW<-3t%k5OfyOrSF;cpO-WJm(z6rp_KtMj`IMWK%)V3OY z4<;>dRKq*$%_R8!keO{EQP}LYgucD(YOxNJ6}N-+iOAzeYP64z;)0huHs7H16MI)F z%cr}Z@N}67Z!@FBcszE~83My#4tnp+vOGGlsXeC44_i+|hsX_7KfJR&eERL*kx*Ae zDvN+0;94S`2R?tJH<->(y7m?}+gnIz_~+Uw1$yDvwC6GK9#XCv+RyIwYOB9g5^xx%kC#`CQ%;YHQ*JtdAMiby0vjHNYSoZ#|hx8j9CjxK;wJ<>h{lU1J_V$ zSL#CksV=1u{bmSLvH12DhnX(81voJODdyy&QnD_pomD;Sh_-n`7R4i=>PPXlszQsU zoS!`Tl7P3L15V$FS2OU*ljvMWYLcCRmtJ~FE8O9@s~OX z;P}{eR~{~-Z87wD1_D?*wP$C~F!#Ki&_}f{qtkw{=QBiY3OO*+y^qJY0ZeyBg?i6x z?Rv{0f55Pim^6IFxfc@hb3x`0Pg(qdP34S$1m@m5!L=8We-jG$G<2^x89q2Pw)c5? z>@(N$8reonqu4m!sJ+uW;S_d0!L?%FaesdF?>1lNNs@6reS2QPxsuXEeBz78gelSrL! ze|ZlNrw%L#60`?47e9|&E&#D+FzvngLfi)F4$RNIV&uSGPq+L03n3Qk60}+gqyx4= zYxnS^@^pXn)7az47lOmm_RaSy6U3~`$JI2sO0Yi}ygVVszeQav_$S+Z_FG(3`sFlB zDRJ!^i2Rq`39N;&-v8`*;*fIFYO%OHt_-GVY638{Z|wn0lrzy^mQU#2Z;=&7oZso$ zbUXqsb#&Dp{ht<~*t`T@?5J)(-(es}4^Xe=aHcdq0NqQt86LLXdPbl5eE3E_j$o$Z zRE_tl*s3jJElF@1wpz|YU-NVzB!XH8WSrb)(iD8zv;}q$4WxSpah`qw0Ul25eCUd@ z>hCpa&&m2@M86^JqL;b*VDUv{$w!yL;-X)}3F}i2i`}m5;yEER{&$Ur?cPLcRy>L$ za8--$PUI%5sN>*EEugmZEDSC8$+DQA(o0Cw!Eo>gJPa$Qkq6|xb?*cevllulF{hSR zWCQ&)YOUqhd!+YcbDp0TwW?JV=~!%6UZUBdwfLLNHrk?0^9t7jw972C+z2zyL~r{q zf{$wry)T}(F4@nK-|HNl!CKN*E#oyxrFJaap%(c#cU?>V^X~|E6%9}nEhs5${nC*& zn=Xi|$T@lb{iPA-G9c1q zr1T!mT%@|mcVC~4J1t$-NHVvOGnhKui3R`ay1c@%nlW>js_-2}r5R%Bhu>+n_g=UvCuhsS;Ji?@)xf~Xo*R#OyHCfC@$pxHJ(c@uG-p{au7 zfmE+Z*xp}vfR;+Gke!bj5jGAOUiiJO&@_Ar#q21FnqR^wWRI3BQ`AW!ZSr00g z>Y7ah4aeJmNcEJH$O|24U*`R*2765KRHE<<%z;*G@CKcIx{Lgjn8~qNTu2u<7{=e( zjegk}eQ5Gw0C2Xk8kO^~xD6d?4c4WF3f#uH;_O^$+I5IrzxBP$lj#MVP~KY~PhiV0 zVhqqztBSj>6Ds-)Qeu`tttqY~oy^R-{6lyBKC!1oFP#u`K&@0zMgN(!0~z*O6844$ zCAcA;u)5}@EtN`~pPoF`e~FL<rdUal!4bJ;gT5W%OqLIe@)L&OaUVQoj4! zmF&%>yj_N{8u~FMNjXnRVvI9o>7FOxJ{_{|2OXuvHJ>pc=U>HNs@IGazQ)v($Rsj-vp3QLrdcnCWeqj|$Y#Jm^*hd?Q8{vxCW zmiop~_aA}-%HAcuF#N$YD^mDM_WH@U$r1ICU?Yg;XUzoYWYa_b2~y_m$pei)Y-O|< zu4J8qbiXFRN6ABV`EnDaqZ+W`wR9e+{z_CZa&DpFrQ=rbb?JYAezENk&d0aRl6VG5 zFG`xlitpk?C-z0a95{oyQ!yO%=HarY;Yp+JYF5MKo+ie#<2fpG)|t0hoo?842%%s$xW*Xx72~Z81J~r|1TxlA9@mexu_$FVJ{Fa?)Yk%QkMo$`*N~I&qNs*mx zsE#5v1(BdRA6CyyUGUF50Hnfl-%mv38we19myQVI7u^H_sIKEw(e&$7icNJ5BSLbt z{34a3IV9d=i8g36HrjiMwp>-wOJleo48m>nI7v_lI?6vmC%i+V>;(I0TEpVIas6YB zK0LwO>~ZeRDo{amS=YeA)T6Z7>2KMu)Vn?cImuuiTbd;ygt5J48e# zRV)}3#CHF+{yI6xgziQ;rQgNGQj9cLSi~HZ&5HhX!xL$z6y+948xo$&lVm5RAff-E zfuP>={K4v1PS@6)0X!PEM1rUJQxBAy4nOSGzJKQ?b*PN~+S|0fN{%k9t<%PQ{+fi0 z~<)laub35>1uIZHJARJ*f~;%6e$ zs%OK~Z)%O)eB2{kphIT2`-vXWHq{#g+iEl!Z;^(BiH%3&02@!6God4}DmKn80ODp} z<9|+HBBp2-m2>y@`TG+IDtua{!Nt|CbD^49nU6Ui9-Fg0-@Lm?q5P@ZNi=3rjUcQd zW|n!WN=_?kC2W$_T#8u8G=IG~Ui!14aIE#NJyG?u?ZYHxD1^8mYR2{aU?FLm%jj^U z+f?wp$7GL#IcIh{xpf|WH^jy3aXB72U9Op66TQ*(P~ zW@cD^nEgIJ*bMyZEC%4KeAdgM=KNSW@XX;2ivE%O5lS+fr^ zpa&1ez`&5*f2GOtGxRf~C9t;NGo0v^^t{`4=f3N1oH;+ERK}?jiGUvz#_6A`f&}h4 zKwOMu#r@oR#9HhFcj&5NiKM?DG@VNTml;GvE!Hc3PV{0 zJZvWLcm1X>D83eh=vQiA819O00A7ml)##P*XKbT3^!D6idt$)q+QzzUu8cQM`~9%C z#g?j?w&N$Z8JLFSzV|nO9(QK{*h~+?+U8*DAc%n421c8hiaivcSxkYw#|?4hP_ka# zWuE&f)Pq+@mex14l*#39(-zC zHm)0=jA^WrMLw8Lxt|3@Qns;Hq$t4F{spLp5PwL7tmWI z&eeh`BMTjcNQzWq*geGFE(%~WX2H?SfYNGLHmxe!B^~>B2d7{F1b1Xc?9=HIP<&3* z=|%Dl=QNAUq;6KxD3`mBAplz|WhJrDD?LfTx}DgQHkc+(lA4;m_LyyPreDRE5bbkH zg8Wg{fsgqZ-~Rruto<6Z$Q1OFoF9ca@019-n8fx(HGyV7AwyK`I_3yTG;kWG-MU?a zgB)K`khJD|Jv6}O@uc!%mwLQ$?L8oieAO{>NwVj^E<4O z7@$=Dr;ZUzj)U>rNTBZR`IEAWDKbQ>w*eeTUE_nlZ5v4Bg z^ik+&0OvPW;NtywJdc}2NQ`7So0i1u*d2&^XK#W!3y&Rog8%m!!3dS4WxAy?X%o*r zvYV;vPYsXng7IM;)8`14Vfa{8cO-43+cYEr87bI0L$J=g?`0pe)z;RuIP^up^{VIt z$;oTM*pKukF<-{qd#k_5&ojy?Rum>h0z$S`01%UPM3X^29KF4gAAf2GY-umO&S4G~ zdi6E1x1!BR;lzFFK9a>-rFnGu(l|gV)$4aZMfqOaru)uCGEvTifyKAfThqWBaicF` z4X4u>3xkwX{F?)xGA+Pm5mBikU~V_}<_V2^F?+Rwyq?!u99vDVg3XVF=-n^~Amb&@ zbljJHlhk%#0@ZhTmGZ1@dkE~4_4w6Qw7?rX0EKE(iA}|_{wX2BGaaLvI)k&M2@IkD z+vpz9?7L|jhl467#Ie?`ES36G72Gu zied%pLo`brfP%b*UYx{Rm-uZVeC(h5w$~&o6$xvXKbUX00V_9HPMeWRj+FrA!c4+g z%xTU2<@8s1Z3oxeUw~>#`gpLpJ1jlm=_&Ujsw_Q#S}rBL$n0R-LOI=jJ-+Rb?Ca3g zyIi8MRbLoG#_BL68j%aV_`CBt7VR@p3?&`TIQ_IN8Nbp5%I@R6D$3Ulxqb$r+Vla; zQNIzX542$0K6j-QlrFo7<(G;Zu}Oo;Ro7R5N&5O`Q{nb&zp2W%xmv0Oh$l7RHO(w7 z#R9s#;OhC`P};7rS8S?NY{DkE5H$F+{7Js{fb;BoK9W?Z&;y z+`vA7sQmgCnK?NrQMPfi*T^tPi5m$#lAY|QyCpL%?@+N_UhFvQ|0YhNJI@aP_NCPs z1)}VR9jcsJc0Vif28LFz;qV&ww&lLBm#8}C?$&Wn*Vh!S~1 zMK!eeg{x%wpWj2e{l4XT!c?195HtQlCKizA+`Pg@u4l_ykN}^2pi=MB5ZLeZ2PmT

&aRh zPj91hCkEr1Q!&XzeYVqlEv^pO-BJ*M45*O<^{(kaWUPE&$%c2k_$a%s8;2lzWgH=Q z?C#ks_%r|G@E4YOKR_h0pRLm5HVBXk`F-`H@Y(R04X*ssOrS671B?6|o4c z`CUkl>Ug!D?kntD>urU^L%p_&PjF>0Jc?jnr9Y}8e)-tT>AK7Fbkx_*iH#tBT%*4^ z`YUnx=A?tT+t$aM*=LUX6EOHf30=@NARSqG!s|hjM7$qxuQ{Z?h_qUj)yVtsh`3x%7ve9=_Jf6BwSo_1dS-a}xx!av z10J@qWM8h`3?=oR8be8!=Kj*2lqdQNtCUhU@9r=7EqWv%Mwuo2y3;RdBX;Q+%>vZ1 z+7STw{QdgANz|i5 zdDu`dAno>lv;Q(6rhQ-&W|1u9 zD6$y9rI2FxiPj@wWfSF*QsJ61{7<}_?&UC@M*7=B@qVup=@S-^NxAA-Zxb`GH~Cg8 z`-RPHu&vE&X!;m*g4EYlW1gi+*j^YAlHwfp85edrPs|j{s)oRqY?@st8o_uiWfJQ} z`WH=SslI5Zb!XGfmdR@1>9w|4pl~Or>FMh0;g9WD$EqT(?fZp4cOBL&y%-*n-t ztBAt4+%2Oe)KO=HwCUZn90Z}YwZ!ukr_y@I(Spe9U9a9MU|1A3KB0ZH>KRk}R4L@Kn2zLIv(-Q5GMh2_)VEc9OVcIxQ;CD)i{z8OLgEuh&f-|^9z`7BeSmNl?ow_Q+uMP&<*b=bOyws zU700Pd%)_Y?2RhZ=|)rP!Tm$R*@Fdh6{g25GxbfE?-5eX(Ceg&iO9%u6HJh_7|-}` z*OQp~G_LbV28n;@?i-Nl=Itf(Z*{cuou>I*Q^(PFqkUvsp~$E$3H#3%MAYxd#@A8? zkHwof$^h2XM&S|PgrFYK*LfE~)8YLH8~Q9EKNZzKvU@GDpX0P+J^6gQtmA!Dox^aC5NCQA%OlxsKep-tvz2 z#rHD;r9FC|%xr((8kSwt5# zz2ro*;ST$>CL@(3iMSn~hh;sFCLF#qIT%)sxFoUU(7{vR|rZk_wnX$ zhi$eaH>bhA{^%2DJurz@uSy;dGgjLPZvT@D1~SMJ5F@`Q`yoNnwf%1?-x)ewgD z>^?3C)<&=3J%4&QZv*q{(-Sw5;sM08fl<|_=XEBUE%BKe>S+*t)#X}{MmP=Q!x^F%p z4Vl>%w~w8vO=PBeufErQ6ZaTrgm0(`b|zJIitu-4!L`GH*>b}~zzB)Ec&=C<)2mpe z>1>}pT{6g<9sAS#*7JE~(g| zT}yGfl0NWG{ITj~q9IoTG?~tk)aYKJzg&EVwi8Me=+Sx5No0{xwc-tDtJaPDdEtwt z01(Hmtfyr&(TTuzc4;k3Qi7t*O}Q&ZdN0)npb=aVj*{X>9XxjuWZ;edy|z~OUkHPG zc8Lmt6FEPPn29LvLEQRM^h5I@X1aBrdBFRjW}%IvWZGezQ~M8?#S_e4E!I4P$9uxI zI?z~bpkbV3#h(3!ft!TP?AMp_o(ycr+ut0+nW!Sdq!0HWHox|zwmkz4_7l?C1C~01 zzrhLUm-Wa1xpnp(0&UNJ0X_Gt=b7y&D_by50_3%tQw0`LcbTUx(1 zMjMB=w;D@1ZEk!wLtr36lbV2*?#RC>pT}8Z-BL=~WD6@RzoAC#{n)zc(C%clgOr!U z*IKm+c&+y;Dp4)Rj=0M}!&oyG_7Uv>9m)qPhY=(U}lN;62So$!t3w^S4*w6zW*sWNj zd+`k3&-gFlKUU!SzBhbEyPLSnAOb*h0eAbex2Bgj1oT}z1_t%`F_=YyuGwhQivx^= z+tAQV5YxIkAm0>X2bx|ATGo(8O86(rE_prul)PoJ>cQRa7}_U2=E@F(+SwmS%v!4< z7b<3cq7*m{N~Tew6i+2O05v;OwM2ZE8JdW`&{2FeuFi9McTz zKwa?Bq=5VH)h)SHVJwaAhQ^~dr{xw2&#C9emD7u^lgh%^yl{GFG8_EXrc<^HV5~F% z38;eF;y4;A;P8WaN@qPyDLuj{9%VUeP>GFGq^7N8ze%&h+2%;Qz)um=3iSKi`{Y1C z)!&&U4*l+A5{(aXv1UUVu|cjm*X?RONCXu+9Q}!qWsqj?j$-Xs8|43^y<16tX!{Rr z;lbX-_TW&|=FKzef8~c7?ne2Yjp?_G*a>4hL&QEDsTIXl56Edy3^(}FEJ=9Fk8wdqM zknC%RL00>SJwLAIM>WN>x}A>ZX%0`0DdbWvu28Gz=ltG5htOB9A9?&CI{vgNt z&VO}muZLgRB|8iT!A@^TR=p0rX#RkODJ~W~5|(eZYoQL=KO3|LDFFBC<|~H9sr&IY zR$AL>Pob%~LG^xi1~DlE#2+NAxxJ4rheKR{IY+Qzwia<#(leB&o*2uLq7#L zZPxnL6#$8zJS4hZ)d`EI<>BTBh5F&%|Dj;E71QIbIn{zrO$^^}xbwAleQX2Hp8dSq!U1#Fyp3dTLJ0SBSmEOBH z1Ns+#@1x!$RAoP)9;0-KxuU0^;r-;oY<;6k$Ku(b`Ye7mIPHqLj%{#hyO#)@Pu$#U zW7hna_u!oQml|^F`g*lM2OW3A&PSF=y>7bXs+qFCWVFFuzUa7t*zF+DJ@XiCY|8q) zx_*e(VuWfo@?Ka#%p^-R7$`UQ?5-)zDbqbkH1zb3N$lpp^I-suDr0q|vXaRxaZL&c z;r4wnwPlu44f5Z9kMBsh8k|eR-w%}E_5B=ER<=Ndv zNr*x3%|%e*_2tDcZJs^n6yaPD>W4%p*8B8Ik+bHiSV;D1f4SFdV$j^ml98!2Iy3&G zr(tAq0Fse!ZdgWsWmOh4suzHZ9JsR2NLs=qt;n5Jnl}wG@eB~vkEMI2vlQL33H%lwkEKL-Szg!3L^@4Uc=Z@5VfxvpMkQUqY&r%8HyZf?-6#Xf#%iF& z9y~6niC+|_gm1m_bL~$qJ0{Nlm*ckh^DpTGQqg2MD;Wd1h)m+{<=(p2i|+1(vAX*f zavD{!1dw2Sf%dCmsz*Ov4l`k|B&L0VM@3rK16Mg&2-|v}G5DnP;}=7@^Su;D{+6TK z^EX{Zm-Q}#kLIE6G=Si%FN|?2UE`87)g*k^X#D)CfI0eAcbB_AsNk5Qar0YNTCGfa zT#9FA%DLZae|8+&&@A>k7Z%G52(a(}T;Y}0KydGvQNIJtG4s5(bZF#ih8|}8U6~50 zC#87Bozc?B0UA)#qYz0KYo7=QEqoyuTCg*_1Wr(VqYq6)oHp{o%tOa(sm4yqVMxw2xmF+2*q>3qWuP`eK>?``Ak4F~sAx3r^}b8b|)fLXIQNO0}q zyOA+pHu)`rVW*EbLgE^Qi@bvCun3p{LB4Fm{K3~D6#HjlcWJs?J)ZwZ6kh*vZ+`)> zTMYCq{&IGS==cHF#f$PzmwvCumB;rStZlvYe_8+~ZaW%hmcAf2OpXCViJ%#X9cSjF zT*ZoJOFG96Lcs7&QI~hgNZUMv&Mu-l>#xU1`MkHCyj*o)G>iRX+MTJEefi>$OPrGV zs(X3~4`l2`ItAY~hC`|H3-Y2FR3;sGKex;?L33jsjBa zoFfwwp_hk0(qR1*Z<7|z!Al}@kV}L(^2N?K9p0KJxx%#7#~4<2YQ8UWPZHS6Kw}Ke zI(h7H04|Q+@Iy~v3(J=+#3P0e`X+Y>T>2CCj~{5~k?Q5l$wl;CTbOMVbcJj`b7PNh zcKRWH%~8^WEk{Beg0 zT|s6$>DCE*pMD7Drr#s(k&Jzph3UuoWWaMxvQXdoUcjBomZGtlEc63T4>+bywUb@M zPkl@;@jXwxfI6Av z7fDaQe~SbtDP**TnIY<$NgW^V^k-y{O!UiOlE&&~y*+1ZO9p`c+B6!fw$oRw`miyY zNUme+^<+f1nsj|M_>Kd4M*!pz8R0}}#S%%!>o9ID(8U3 zT(O2y5^hRJv}WcSicYvr&6v=QA!LOiDWsTSr_NpPS+i=_NJ4Ub#d{Nvx)ykmN%a3r<|GSbconZ={&#Py#f{-a`c`o zgwFs4FG$?XAFC9A&%=I;G-(z^0ps2(mS_FBvfYkot2%V}wE|b|&XNS1@;(@EDZr<3 zdGnY;vuZ!3t1(7Rh~QSP%WkVJu`D}4u5FhO z(iWimB2G+`@)PL~a3if>JRbLNioa{FHfRG`fyu!3~ZRiD11cV)HrcVJkQD9|kzF~1( z!Rd5D$k|Jk3Rtr~{WOi6JN+pq+q87~Z(Sr2`%Ma&fM@Gg{p!W7RL=pkIb0VC(41aQi;F%|7Lr zQs)r7v6)*-sxs$IWRA+K)^hl74jM$!lpE^3!*|2c@K$L6@!sI8(jw-BXE}{2blRKZ z=AFt2>nc+%=KM$Jt)uhsKSAw_9lrVFwq&g9Rf`PhC&XqKQG0#FwIR#hP`=6G93)ez zG-8+T&A5UMQ4-DBro(@apSbG`zGT1B^@B{{46|E|648xCYk713!fVK3UX9Xq%;Rs& zt}#wiE>|UB%>c$W1{NxQX5KaxFLWP*D3U$#-w7T(^qtK=4JEKlK$2=TwC=x_UCW;B z=qIq$SKY0nZi!zEulHfH1-tA)pWk%jj!p{qIc|E}(KVlpa5Z8|F4(AdiE6l-xqD;& zh$VaX66)QU5sYfbv+f0S0ze>i84Y`L*iUc2d5mka(S0K?My+|3{}1e;Tvt7J!}(KM z@hW`J8stEH&Y68Z6)G@RM`iL3roO>uQ&gMKz^oK>?28Q}c ze%$G^!kl>Di7~`X++HL5fez1(M05E`TBA!x?K9_NrtX3^{)vD7Qvn0E^AS( z(0vlKIRcn_zFR?V008bwKP~+$ZT0F{=gjH1y0H%Osz>Nyx77p`Vty_u18fE7$eT_P zPL@`LC6ZRBdnAKYBLP-9i$sL&G%lcG5`7fO~7}fp+iStxS_^4k>0b{hhhr3ZfuSZ<v&{-mT6b!YA2CyE^I=CP{0b}+f*qtBWxCZ-vKgYGIH8D{{d%z z(tw7xDjc5G9P^nyr3h{#rG;JsS8R%y1H&}#j3!tBdUf`b&PwcYX9k0>4JbN6Wybc~ zo0C83n&vWV6x05l4M9thjG>fWi$>|<*pGc#FeWW)#E@rrFWf6dTt zmS>Mj+$?i#XOl7B+DK>FwZri4TxO!?VqIw! z$9A9|*#{=|!Y&&gjlZD_3Y;UU$!*?iAOz%rx54m7-9F7 zSA_4TbR(FUtEp@b+S#0neHh_y!&6-Bwh>g`wDg;xmZ1o_(6HAE#_Vtban4)B2t4ybogsn`c_GZLaWg76(SMUz;hhK5o z#h3o{7D#FH?V~s%0X-1_f*>h*o`p8p1?z>2P*4U?v8#2(-+*!BJ zYai{^K_ceH%y#2b)tG)tp&20cNa?J**f5luzx5^m=SL9QF&+g1bjwld%%e|Ps0%PD zjkmcNH7`WwQN_~Rt>vTj-8D7hZic_r!ADm%JPK2Ni4|=Dvwhmu{z}jHV>SQDNamAf zQ(P9*dqyU;h~^y^>5zMRLDED33~r%HEnU0C5z>mcuqyVozyd+8CrD zs4SP~oFmpw8*M=hAJ+-^u=0-Be-lPZ_B06ZXV3@y=56ybJ6brU*8}4xj~?Mhi{O#8 zc|boXS$8>4Lnw;Rh-_cy8~!vlv&Qjm@1>se4cVZuZh~0`kvJbxL}V3iY=~_Bp6dUFvkhiHS#@pEH5Vg zJv5WKQhM7qw`C(F<4nM z{L3jZ?Y$hhKz#AQ5qN($%6`^&h%g2o=P`f5q_mv~ha(zWJ@F5hJJ!Bou!uXzOno_jy7!^^Xt>2v)cIQb& zCriIkd~a{T60v@OKA*kcTzelsl7U&$Pw<;kFFUG%yz$EG)IAa-00E}@VPU15?FZVA zH;H3zOk0kGulZ+Tp1OZLb}Y<3zEZ|VU^AKF$@8WbJ)XPwjCaiIoMfh6H4^a#*9U7; z>2ffzX^cPBs_ArMd?=&h!$_s18lEaeNCu@hE4kXN8kKzqc$H9M3y)jne9w_JyvywN zbhxFxM>h6;>~#HUyGe^3{|s%pI8`9?G2!i$8Uy;WNA?IAssF1lKyT3s9?QfjasDs& z6S(O1`QZ<2+|6^TUqE{JIB$Sy(tT$Wj7xgejA`2J5>iP^iA+eT9_Ua+ad{AuwS4A# zlF~BH{Xh=+RpR4{^!C3gVJ5$X<4?^DUQbf|Rjz$vv>2tYUeyaQ@m@=J$W!3Pk@Ns( z-cJ=u%Cy+xC!m`4;usG~3c7mw%(n|SrKA7#mxYS5=MvMoEv%dU&gnBa+oHYJ|M=#( z=UyPBu4MYGXCDUen2Ib2w=8*E;A(ohj^yOlG9nlG;I)z*D)q{)gU9eQM+bu$E$><^ zGp`%N+i6)Q@#Hko;gz;_=4lwBBwzA}6F4%@tD9XPccSTOYI9ont-YR4!dW*)`pYzNoN_{k&A9+6{GHu|Hp zA2d62g!Sjx589sX&>#JQixJ5)yK#9VV2Les*U9$JrJ|l?m zVy%@+L_`<9Vq_Op0)Ka&68*hWS~B> zNi#${Zw1?%brs>LqZi1TXHjO)`ql{X(m(Uaa4;Z@m_oinBGz6!%CHaHd|*Z3-yccG zf0pe>XM&BNS^C?Xn@7RVEct7|gXtU*wx-^(#|h6gXT1Y>fO}!)@Y{NK%4GR0g!bON zH?tl33`?(qFZS6wo!6HSn_uD#c659B3E%E0CScCfv1s%*k;VH=%(pA-m&+u~tz}a1 zt4p--wdB6rlWyS*FQ_1d!9Ed=!pr_ zMieY191$t5)99}{ezSC=+*@}ARLCYtouQE*UPr}*6u`Nj+J}qY`}x!1!No8$T;a`$ z313T|lIv<*ehMk_?xJX=d7D;}nTWH!A0BnJUB+Wx#}j~J$=CTcHqw#tb9m;Ze_=X~ zjq3`F5i8WCQ^{ipHE4SY+Q{VEkQ?Mv%l0vnp!pokk>rSfNCo;SizFq*0`sCqgzuZ_ zaiX9c) z%nSTIx2%_su&wCt+YOd7F+=_`8eGkkAr%mUX+k~(B!D_VY}X=^U95~2LKdOwWL_y7 z&F;S(nd3@|c*zAe6#G1)>LQB!r**kIFtrvj*aP7Q>Xg6Wa0_grWrb(@l*P2E?BkD? z=n|*MXf_{$JPhCHx$$~VEb?p(+GXeUPNHy*&#={QZOm4FWb9C(-2 zezIo~5~>d^7ycYBM@GJ;WX5dympTgz*I@5Xd2u4G(WP2T+{yEW-BGzYj;M(43f(h3$=-%%mta zszHau#_49n}qkqD>_{jCo~mEs@~gwHlI;;bK!L~p#Me2>D2ac z9R3!bFBwybBr1>Sw5LLaAytnbv@+*b{9uY~$buaK3?B)+c)|RRzBheSBp_`cA%+GK>r7s2!tAOwA z7hJg4d*q(ZfM*@(?YlE8M4W2kmA>|@R8OJOL`j~`M ztWKKuUP#wh&%IV%m%0=9CmP>%3hk_BJ!KL?{v1-f!Y#j*1w|~|Lk9Ra zLSyAS!9wfaixQh6;7xV7@j=a$no5RA^K|FKp%@~r3itqY zYHAiW77h*|<=1YsWq&r@OBy%a8&|?NjT=Q4YNFQ|k9FmLX7yg(gqX*FMrLkl)H9zq zV2|;<3yl!v_E7DaD&!U2+&44AETy$%ZQk;wq2Q?3prhuKhZ{2l#BJC#`eT0_x{Ax* zfgj}`v3Odq6Z&mV;s$3=u(fb$sX%L<#H-*w(Qfh!dsdC_SRvpUCp!VopOh-lFzO7vc$_Y#cWjXoGN z&;0(+`&_+OUl%TX&awB|d#$zCmKAag@uEuzoG_e;S-?KHYw;cmM0`0de_Mdhh9?4; zf8}N_e#Tyk?z2$_F`JK7Kbz?pgOLw~ZCW1u*I2Qx_)_XipXty@MyICu0(U8m>}Egs zV2+=&O0B$Zxt2TKG>&Z^r&Yp%9Dn0Q9=@6bExm4Y)v!yAa5LDTvl%#|U`x$29mTU* z=l?}4PROdZ4uUi%{UsiJsmx_h%HFtX=ddf>A<*l9Z8{NuGsFyiJ{m>DZ;;v87!Nvp z(z@TobGol?;cc0P2~>5>VQW3tIaqy?70_mn4{jW0hW&yB;hi8Q6X@!O2&N6+f4P`| z_Vf9H%64u-!I9bxso0X0vmwv=*jA$B5S)3)u#ytA%T{zZ=A3P%7EyDb#S*wE zq*Lic0GM_lpx9TL+-JRscSjej!*<)YU~B)LUVH38#3>dvZ;Q+;C-X0XJQHFo1Lq%bcf<{Nps zCZ8l}AmEOBLYK?juSW_a%^l{yOjdRE^1GKS%8M`{u>0=|$1MF;w7SQKH3au=xUed3 zS)La6fRP&G67vkZOqD`y%_vD=g=Ym{DRwKf9LoF19${AQ-mhbjEgNLK;gdIMFdDFU z{*>HC5f13o|DC$KuDt~zhqfA9EySr& zSxGvKVTb?LwNrlb(C`i0y7cJOL`Pt%Hpp27yr2l)^NE4hECYy*jnh*Tf9uNUuF)+LYqp zWeW$Zo|FtCDn>&OO~*gpLmYsTLk!=1L^XFlhB;Z$`uot0goo{C|ZioA9*CeP^u{MpuREw5IF$3Qricr z>h-`gOS`nTrbV;X9~V$LrY}eJ!lp_AR3|BHj`#e^(Fyj^tLV_~)>Vk`Rmf=J{Qmc& zgz((c?<6gLaQo9N*h#;?@)3Japl1~0XPb!ItLBi_rFv?g2^*jth@(k};zE+bMDWE|Sh*=3fb}}}$T*q;O zXuh02KyOb+D{jwkAh2FY>^J+k@o^+ie{Z+T;mD*hsap+^Y4Ky1yEKbgCl@)i@EEir zs3<#S+x+-OKin;twL?YP+R=*t#ZmR^&Q5G5b1N^T<2?F|;Jx!QYEc?5z>k`Rr0RWNG9@WSgw>*-$AOM|-!&|LSzLS- z9prc$16fE6PUha@o6hdxQ`U`CjJ#fvxiyrFgxv^674S5!$ba>~rRs_cVr@AWT=f*j z=4>1$NR-FQhF9-(ONs_nNiAt|@#3*vtCr$ag85$9h0xGgLgtoXd8ZmxldbG!%RhLo zhcW|^QlR2*CFh{3wUEB#$G5UFSM{bwOdjM*E~HKrOLc4pyI$a9KqhNI(Ax_G6HEzv z%GK)V@cCaL`Tf{A$BhhT%}4(d1U-1@-%VV$TUwl>dyb=|M5)bo^I0T`r;Ls36~2ei zmm%bIb?-R2z+?qCf0#9Ho>TNS>8Hd$>FL2ONgFaEDt06*7ydhI(L4#78PP>=qz_!s z8QDPKM$%E~SvQsb`9}0fz%>DNVD|$|&>ZbBoTT6P`bWG#&Wni6gO>i(3kl~WjqvNg ztAWo(R~Z?D5D(2W#KRB|J&t+L2TY=M0|#S;oNNY@(!gE37K8`EI!I>$6mp#zK`R=PWzt3()`50-S-o*vgQUN+#@WuKke)0ewBJ zra1?{Va9KjFQr+f;md#1g0&vabO!xsRC~nsu(I(w4549zdR7~UthbEHb9*0C6;{mm zb1xTldOnv8`ea&YdZ?r!txYit;k!ZynR@Azvq4T7xnHk zY>jUJXp_IG^`=WEQO4N%S@T~=VRJZA@(&(1400aIXIjQoh0>}>vGzV$-jK#x+*>ZZ ztnZqa+;V%E;3no+IJ-+8|Uk&_AdWb_BuJd6zr6rE( zS~G+mW%$?NRst@o&hs`T!q@s@K?2wfkO7@6n_qh%8rZMq(4{_w6S)DID)C!1{q>V@ z&O)KRmaAvA%rRo0HjP9ug);~|& zsjsm`mb#ErDft|9Z$Dc8DpGHYgZkCQpOeKQbXx2E0lXrQ(8TY!FO$ ztzz_0saPs^roFVLxHapqveVFsW%+!N;BrXs$s1_QZLBSnB@tDOptZgt*J}^tykbUe zV(Wodt8H|7n!itrigVvnunb$W8NXpz%h2*+Wb=ckavc0&NkDLWcNe(QGkTGNV|Sy? zbO}!AIPzO^1dS^x!em#w_}_5+Sn$2p?%cwnOgSbxpXRZ+6&7gy)X!H0{e)yST@3}w z?~l8B6H1Fch&iJ?J?Fco&p4=TCFD}*H7w`syju;l391=Lp3&2hyQN3u^WcGBT(Ij1 zsSvPjs6l26J7o6${HzX3uvmGCpAeTa#8@?$8IK}9AIl7m5mcnSdZrOo(V)T*1#AlLy6pKtd7^^!`VSj#%{9WXpfnKA zuOJmqR)$bX@bnCiCn_6+Ic!j$fqR!mj()mDfXp5(IONoJ7&XVx+5@x|^<6SHD4aBV z?6l&uS+w=s2Y2Ua2G;;W)fG8|7f*)i5sZQ%tMxZuk-kLOz$exwHl>7(8`GS5x`$6P zZpXo%M*KGgjwkS;vdir)qr! zA)eJ8K{tyo;xfPFg*Co6<9PPQ>Uo~>iQ?f1Thu=wV;rh47+se=ewkC`nca1xkZ{VW zbYQrac`E3>Rm>(?hV_PKh1N#tfNDD{;Z5e%e%%=CYa?k@mhlg5 zQNoQc+}t|*Ao%Vlqx254>~WajF!^O+<{-DFz|!ifW;a9%c{w!9tqghT5iHZuujPI1hD5|Zjku&FyP*Jq zAfy<<)|*7*P(C$wdP!do_ZZn{eUNSsu9l87tGHY7_naIYu10}P*8BZkJKN5$X&n~o zoq6=l0;E@pIh0#=HPTZAMbfkkYM;0*hWf0a1HzV?{YZD(?l0x;{!Vcpf5ba^RP{5w zq_8CK#Te^UT&v8yI!{KI)hO;*DZ3M2$XVFF(cil3?hNyqFTxmT#9a1GPrtjoCwv-F`^` z_8i+nZdRi&CB)`*1s-St3S!oG4}))9Xd(M!fbilH*bn86r?id8CRn#r?liVr*(Vvt zdQ88frG{w$ZD3+Rw2*wt=?>L#ahO_L=;rK^8au?isu+g~UB8}ySU;~MebE*RJfA^+2UK0yYf?l) z4_`SY*bH51^@&~3>X+J(2Td9@9y$DZb)<)wB?Vj(}&Ha2XC`UHZ0gZ>Ix`3OV%e}=C9{s(VfB5brRtOSEC=1Jf#amBrnDdDk)H?n%}id+1-C zb8V}ShKdmqitN>fNO8}>EkDUsIh<(%atMq*9jp*^SY7a6JbCj&$AtF#H;z0MS@V!c zt#54Dq~dDfFPT0pzF9tKOK!aY_Y$1gbSfFa(i zL7`e(39AxPgm3J2ixEnp#u}PodaG{m=iN`=@sY>0*)tr=Vk7$Wj}t*qzWx>dLNGCw zXvF#YvJokBVoR^Baw-i@mu?|en#u=SLlb4(w zsR-_#&lFRp775&#nU~Zv&dvn2TvnwY)RiW{l(? zHlnUD&j{K1{cYP>R(jL5x_82B53u$`lT-)2(=em7cWwVJHRfXFW?^r4uub|eS#ftO)sks45nqnD*xExd9-_nRV*T1#eXd^?%Qg{|`VcgZ9xRSRG4_JcWR;iH`q%z+{+P zux`ZD;w9M_FsHyrp32ZgwEx`TUF5uw5?E+mowV6=7ho(Piuq)Yil{Vq#?AQ>gKB#3ODC2~<%)Ebx@ zZ+8HHQ>F$vG`hGG>HmR*E}f`hFJ^jt`B1HJg5lE75Azzyi`|pdp5bu}i}eU2sPPbm z?C1wzWQTvy=#NayVtf7gkh`VPhqQkN2X7!df5bYT^5x*kne*LJ zBo$;QG4Jj4B&Xr7Y_NL(S+A#{^>Ci}owW@6G^5T>&hAz|8a+oL9buCD&nIevJW>Vq zXd}g-C!f8-z@}D>9$Fi*Tgeb`H;v7X$2uM`51EQIIxspa`wn^pC0r?|>uM1^8ghMa zllHslLniLD_>9>GWKFQ`AiOIba- zrtn<24!!&RVS>ZBX;^`Dq-NjW?JY0LI;+a32IVU%nc^LV*L#wm)M6oK2vj*D@zt%u zx>7>JYd1Nh-*pX%pR@wxj=tcIqV1#Fks5Qrv-v3-g9Q%h?^pI$c4gKd@|QU3Gi>2s zK+ENs?mF$??kg{-BJBrP0}XDTVt`C*vl`&GjV?>H-}>b);KQLarL!=t^f9Mj{UY1k z3sUxq*`wm$>B3nZjV(8CESZ=<$blcBj2o00(4wc?)OqkHgwIBCu}GF@-)gp?iUI{r zar^e)ZMWE#vkAFx{8jz**p53@NHl)03tAURMx~!1DERm7s+rz;r1Gn$T%&>67n8!B0Itr2H!mNd!BfPe>`-clk-=PE6l>ztTM@TU4zm_UJeAI zTKhfH;jqfO*5>w{#HzY*dL?pFdm+3pR`yU8X*ir$Yhw@njpmMT+`<0|T4#h6DTfNS zZ?;>1fgLDIUHAsTO_kc3IyWlBGCPu?6v~(NbCa-;#rm3E*d>Q_23qZNI?{XAw#0ay zb+PfK6TZ^iiLLIjA#mu0W|WOFpE=DBY9x2LBWS~fzm*{3M@-p<)~c7;>tott>9TAp9N z;;yQ&EY4gqq%j9)z}rBnGwqZVqcHbk#NIeK}M=o|4ekaQD39R9dwp~SscLOXM`$O4G)EeWy&e<}7F|54A0M5x zY=4-`{5?9Zr+?c+E218(`r(n+0R74}Y{&N3q7)%HfXwRV=2b@fNn27)f+~Ro z@U$kbr~D!vGdyF~h@k#rI#lB~%wYAQw}`v_@?ci`zM(?gk(M|TLw*XKDIfbH8&=QF zFuFl%F%FYGmB4wDOfS7NNvgqQmMP>UPZ_~@BN+5VTx9JgiQKFGcb8db|Cu4tKpL~< z*9~|6UA~UVSlbS&OAV`@SX-5p+=vS0; zMhn$aV1SZ&9s?5Zc!)Y~Qlr}K`srZ{PrUZy^Sq{z8Q2HLuTbLo_=OFlpX?`TGTbCz zMY#B3N(HV7!zL&C!+^{`ZxKk2(r`6y52!%IoXd3FBqSJn@CGN+e2yKSTZiF*rU&Oc zV?-@tl>8c3LMFnn9lqQaax7gKLnCT!g@c^@B{ULL;W3wbu|am*bQZfcU+=6TIQDed zu6Gc({^6$!Dc=i`z;cL|Fv}-Vr@}x^XuEK5vEF)}vR#*|8(O2utz}LqQ6lPfkbH=Z z`Lws@z4Y1dkP~tNa28gjO+@b8@+4^{Nn>`5Ancw2~K zY0Vd^{~YngtxBA~!}D0v*(eR;R|;V~>OA7eYwX=f5ZO$WW=8XuJbGNZ`;TUJ(|W+* zM2&W2mDM8N(ReYOA(a09LutR60bQbi)^f$|*4?cC_=C@M9RXxb)(8N{YU9*~TmL0Y z>8jq}5WT(O*^QtY0;}bi+|!)Oh%rNBSjDRbicqB3mIW<;4&qS~5D!({gZJO*f9aZ%x1L)=rg&Ne3SI(S76N+o?^TqhE7t zSdP~I)*fcfa@zgvDQdRD7}*iH>b%|RI8yc!{aBYiL4tG!LGTbf$JXBNE;1V2f56k8 zp4~{Ee108=3}xkDf!^LALdm>ctgwWj%D-8~P&|&OK*HRL1g&kStQYt@oqSErn(u?w zv%{qR#+=a4aBIaXQC#k=4@oj&VPIZ-4R^TYs) z9u6hjA)EeOK;O$wa9=I`mAfY*;J~A-GAdDN~k#w57eVR=EPAEQ}uh56mlCL`n}k@DwC7Q%Fc%Q=U{NHZmWc{<}UcqDg$)G zA2VPpdhZX(65^1y6OYgvfIs4uo_qIi=7RTF3JPB^{#PMv(GPq5`(+Aht8vd%m~VEF z8dW)vc6H4lzm-Erpf-PnbeO$!CN@Njko)Bh#B76<)dSuiQ)O*ebra}6^BQ% zn2~-hFi9UsFqq$z@?sVpF)P=qBghIZaJRNH-^N=J3VOOyd28snXbo%%@IBA@3O!rb z&Kjd<@SOalPPoKDV1o7xl@0Mjiqtu^!*}=ozV$C^b)?^=z-1v5MJmDpg*6GNvpR>(t+hGUrm$yTd(npgS|t`Juas1 zc0I6KTSvOv8ELF9f_VI3ibli*=*;GJMd&U{nv@nj(7!yHr06+rm{PHpu8WS2&At>Q zz~pPC=gzh7jJIF;a|FevuUcUncjo^(6Z62qY*r2tHew(Ozq?u!E@Hc9XcsefolWvY zB5%~gjl7tm<1VqPi+-K=Eo#L1D*n@dN|aH|9hroDQQ$0lP&3$kAuiVLlIsN z$nXYrE>M!;DlyV2Z{CLiLp+m=;8cn+4HkM=Ek#DvB^6%NPXCHXT2GGOia$>}D?_y@ ze7a4yk-sYWrtH%;x3`Ys8e$|5^3x2c`i|&Ld#8#NsBqI){rP&c@M~+pf?h%Ds^AI9 z6g?xVgcjOxG26RrsPGk#Jw#>Hk&%t^AJtzJ5)3dtOvZZzcJ}YSZAJi<+Uf>3;zLxz z_*7`Hg;>84n!#!d#`ddx`u+`+_gDEEAoF}Ow>kqn2rNk`Tl4RUO&>6j^~?eP1E$>a zrXK?u4KR2~xqZ*brH(HymZdEdAkOKxvJ-H9+Aih;{`G-1j zjAEVtbtl_0w*@%=E;qvDKIqQ1l;)jOS;k3?$ml=tCQLc@A}t`q&)e!)7hg3Bq=DpJl{CHP(f{Z?W=<_Pn6qL3VnBnCu=cB^ zUl*J%5njDq=#-A+)VisvCJV#@xn!S`H<)<8lCW{_46QJVHG zVBh(g&xI=Uit4}1DM|)Tvg-=~CGa)9KW~~2q1F5}-O$mfhpPrb#v!!bZXDB8J?fQ8 z7h8&z8OzeAbLA#YM+7q0)5d(>IBRi=8h<8ciQa^}W;sPKiO6T+$BPD$A=B2sCj8Lu zzwb>ltGoTQe%}ic?qtOrTM4VI4`>7Xa8gE-yGa-)?^n?j%qusr1CQR1kwjtaLwqU$ zxGUFf{(b#azz=(`x>Lm=R;Zdd&-K9(8;NdP<%8?%Zj)O%87zVy^ys(yzc0@z!{Ghp zz`&WyFL?^@17b8fn1x)KDPzGzK}J4u1< zv+gimdga_@B4S1cjy&1_+E)RXGGIpHhAKV@4BB17e|c2%L`|BAtst8#N0gXE6cxjz zqXsQLtV#yEmp9U!l^11sK~qlTkbT1(kSPi5%*br}R!y;W)@&tvu-SD;2zfLur7~Bi z@GVhdUiJL5y4Km-oU#z6q$;oA!l=7sOO-8mm%)PK+*s)}lEvwJ)q~Jxhfq7p7Bc+J zJ*tuzI%qTgevz2MP#RH@yIt%* zOxGX?72bHfSl^5;GtG7V*g65w-YeAPSDb>gGt%_J9|b zj`r}2qe@!JVK(}KR5}W@PZc9^vLfW8va-8M1g^j5L z!gD^i{~IVxy`O-<`neUvqPA`mi^1^+DJMwHG@&@DRUMQHoL^p9USAa< zat>>UBSbpL*x%GJO`RH#L+iN6qD(y@|TcJG=#P1TOMA2M9S0$-8^c#td|fdE_6C1A;{6CJrYV0Mz~q8=P%pI;aeF3E z8Vz?{fEYf4mzXs9D=SJMJfY$3L!pIOc(!#!biX*1Cy3v)toaL+6S4knfD3NB-t@?dWtX+|*?!v4i!AE|e0ZYg zXW98a!B-=LJ&KWHgToDmox_J#U51@spxHwjf}J!fi_u&XOAJeiX`!p@^lr+uI%j^Q zW28QwjsC2NPLIHrz!6pbQSw0JBAp}rJ*Gt;C5FYq8)el>-z0E%XDJw2d@q!;T89#S z^&LrRanb+c23H@&bANFAkTCC!ecP#(HSCi2P;ZCmE8rD#7EYF%Fr}$bR=8-u`D$R* zxg5p^UkS;HeJL7#Y{Hycy4_Ty36H5GfOeP{r=U-(&KMOQe(+h+A|R6IZvII~5A^8` zrbCt^a@d>XSPl%I#UXkIY2P1jU#wXl;JKe)$z7SseNNfIWHOE;w0=0wVLM{eJbsxZ zObhIzPfYyjK=9_VkdrlOKE70l_a>K_$4}3rc1###4huD&!>r3B1vkOMW@P&CYZN^< zYdhb5@o>DdJ`knzt;=JH(kieYM|OD&^!cL9TPQlB1{hcQuxVKp0Mi#LJezJVg2SM8eLw->^G zrC#mRGMab0Cy6bK-keXMMztH!1l-EMrZP;%*Fyx>Rge z089GRIGsMULKf&DDlDI1p;MTF_dzrxXgLy^f5CImA>&8f<-;t`A`>X&^oVG8K;{`F z;iI_;^9=)HsOzErE@)kzk=iCRCrr;#16z3*Xcl2L{1aBsl;TRBXX|m#zeG5`k4-X$ z&>_mqx3L0(E}9i#LesD2p`nGuPT>o`@y%}RVGYaT9dpNLgKcu}$d*JkZC~9bUhS?2 zCzu^vjY8Fs#m{KM0PJ4@=kdT-3@^-+64VRSh}0gspO0L=#xj+2YFk7}U`Gh|Qip7* zd|Ad4sphF>E7>1G7SB=HUmlOX+68aD_q=9^YQNpZ!9aa5wg020wyHHi1l6n7r*1{cgFLNPu47$e&-;NoAw5A_{-Mvbh`R0o0JJwocN1)b zrFe8U%->zM89(ZjZJ)dzMt(tBf}IeN!wd0VAt#>;SBR93_SRRLPgY{FEJDeHOP#o4 z`z+{VzMYM4R5o~61zGA7M)5OaFE_4G(5=4dW^wmx-(Ldx(^Psm7BUqfC(qJVf@F0= zV1He*8`}L%)`co*SA5zcy$P(6^2ROJfzvQ(R0$WX6cj@hqILfUmG9|WEW&Nplz3R& zrJWT^;<;zz_+t;+xPg@cnUfmq+~_$96+$Dvt6JXZ8GX_nqSjs>dpJj)-g9_X1we=;9ZlBBO_opep<5m}K1NIXX z-u|FB6p1PkOkK42KzG#ea*Sglgz(}9e9`zJy#FBKXcdcFA8YkSl?r3>kE1kPfh+E& zyuf0y-V@%lrh$@ez&WV8#Bp&=;n3CT~v%&?8Wl9Z`<>}#M<1g!#`yxB^97)c1p&=JJcSacGf3Lb` zPg7_!c^^uDYkTfAU$^|xH`UwA+t+>cXIgf}le^C~)Kn2Z`#-uQY=&J*xN1uG`oClj z>-)vysZ?~R&VNbE;3+l&K6yTpzsi>(}&qVyllT^&e>6nf#CX)l zl<0j&>1Z*VUp;@-e`GS>n%r(?)UC1>>N1C0)il3xoX6^bRYzKlE7(H_*u;%tgB`lrU{LRz2VwE@Rfwaz7K2LF{7a?-LOk4jx(e7 zH+`vdQyd`s%zVR_O)(INLHT3f&E0c^_ql1u-Qz=b$3?Kn=IS z|Nrcv|KHiGN-HZamXxQ&B^MSpf$HA=+H`d|AKz!d8o@X)>)7=D-}B#kH3j4H=sCi> zWyWdTl)$StGuP-!O z7=0+Ze74Anh7Z*FY`n=(>k~etB`D5wvh;aMbNn|_iz^ZTT!vVpoB!EecTv`%HshaX zDWmr>NB^Om*IX_^+!nsuulf*fwtPMg zO=QUZCd2lRhU=B$diMk;`m34+Pgf5OZvq<$8z@&j(_(WdI`Qq9`ViM;VV5EcpSnt^ z{`dbf_Nj#K7WIk0xmviCXM!iE6~8GK9^;7c=VhYnQ0BBI#1v36}?a@4?6m?9Iy}uwRsI;=6#g6MHKCw0b$#%R+6*1?^jP331qiivdJ4cv* z1;^`ND#Gs#Eh^uvnch2Be(%M5cV}>en?B-P+RA=ur zIyynH9N9o;sOlTSi%MD-%I)yNS?>928PdP{eja>>9*$MUWt!rsXWH}Q*Jf9u&U>05 zN5pI%YPT^%u$~7eZ}IO&>GsA>B#O#?-;MTpN@;8r`#s>5d$R6r(gI(Tywl6I)u+JI zmlY2jAypTJQs<}Q(+1I>%*oAx6qVIc!kX~zTq)BIA97*se|BN6Xm$5ih4J5@ku_|> z?h*)!-u`toI2DLIi+yH9d|Lay#AR6M$=3TUQCW(JWa2xCHv7kjZo=e4KF?9+0K`(m z*%wX9`u@_Zf2>qZvYp-Vt2;t${3&5)3lE#@qE6dtWohUgTMUe9tuu~5d;gj_npm;u zz@m#tiPC2jp5uk`<49$vB=y#D`I)?5J3NcYW2=<%iyX->Jy++kD~ew#&!Dm$7z@xd z9MT6QkuL2-KmP<`Ym=ssVS9r*11cr)R^MOBP5~{m$AA*~_Xr<`s&~){U__85D%`(J zbu(%Ja4LV7vzz{6DcteG<6V9Rs_8gHS;>>L1vAJcc3#zdDH-Hl(wlo_!ZJ*1@wrhN z9wsWJ!}f2hnzzc~ja=98fcRFy*%Q;Q#G%N?KRXQz7D*q1dNk_$CW$xX&tj?daoKr_ zBS5$(!~ieOY@Y1@jWW>)Y!8SL6LraK*(ni^8J-D$v+9_;;4%L0#B}~VUuk`W+ec?u zAm~kDnN_LYn|?kv!znvrIXH!s_^Cd;Zr}E6B-B+2BT4vIcABDY@FLk)m^)ARH3%Zm zP-fdzCo&kDf_xpvJX$n~^3Ljxa_3mdcfEyd4&8bTu?8cu{-c=~@~0o=`zS z0RMbsF+6cZ3)vMG*VR%^w2^R3j#}mxQsK=Vdz;jF?zk* z=2MkOKuk!Nba`#Da%f-6$8Ea{2&6mAK8X^$<&{;5IB%U1XB^@4B8iY5q226A`0|G1 zO=ib{mD>3Nz?(qx@?N`ZpVTn6ekuuJQ(UMloCJ#`L(!?s7(q(^Q7p_Qc{N{+S{;oK+hNCUnqCw2-H>4IFdw5)A33K`B&WU65&<=U=@?9 zzVUwtuHHH-0|=EZz5>=TiQL}wK3S_hq4Ml!DD>0~Ny-y7?r4794{sh*E5q@2_%Xhc zs{WHc<5~5K*9Dx!ZC`QVN zhckbbkQNHM1@0_;mvzH%wHmUPBEKm$hXuF>(#h?xz&2z9ve9qvEwTOZuac{X*mMjt zJNe(=8H+AvNu=WPZ7!EovxYY?R|1uDp)fH$5PlQ($2r&))xSF`OHh#u2l@lmNOw3< z`(Hrqm1M)LsG&iiWc&wg#WG2wP9y-ODdgi{lMnd9&GFf5-9nv3u0*Fcc05Cleh+uk zKrw!lRx)t1tDqf@>vE|3~Bid!57s>AKOO!!~G~7{e9lrmw8($56)qNPY%J|TE z9C2?M`{GD#vCjA=sVYCDlMi<ZRjj@H4YO2G;(mJD>H35i+w5yiYck+e?l?I zwZnKmLti3jj(Gm=_n~G9cpkoeVT#{A(3!koR3-4;2-ek?@Y{K4z3< zUXck2Xd%!uO58p`INe7nm`p8y~cH2!mHIw-r#oKc&rb5bvO z;NN|ge)MeHbbdHPz^d%&9ne-$Tls;!m1_gxow|t?oe06(M?3@dfioKEk9c3q{R#5t zpQS!g+h92_dkr5;y2_`&NcT2fC=-1wP5EaA?=BrZ7 zlkw^VvSD2g@bg2BA*cMbJLQN&egb`XGV~DF+8k(w&X>saR!D@F*t96Yj#tCZo}#SS zB4&>ISvo8lofyONymu$uOIxQGQ*Erz%9MV+-x7pS+c?g%(Y4J}rgp3-76JG+iILNk z4&hVf32iYDmD+B2oIm7evrGPiPr6k-r)SMNJ5IC#)qET{)yfJ_Lf`Z^-|t?LIE?)@ zMa)q?ne7$_ihz{%al_BR-s)eLG^W8}RpCY@l0RPn+thyCdL(G!Q(i8!v9^ttqwJa! zmwOL2plNIpeg(?TcjH%izx-225LEwg*k|SvJ2jS+N1F)cpd0!BVU#(#?LnOLA@3e7 zL_{1~U4TXI!`)5I1Ib4+mWwZ_xU37X{>of|LuxmvyL>Hi_n!x<5=AQ#h~$5DbKa1m zZ3zPu$4?MI`HRgXzU5lGymE?@mH(~=Yuh0Akc*qr?(r6meW-Bm)5ln`s|bR&aJ70U zi8r17$L$}ve8O5aDfLGhjKwZyoqJ zw`7f-vOgWU%8$`~KtX6!U{2}AAo2R)79WNrzm4y+(92tYnwlq*<{qH9btWMjJBHrN z&AQ3?Cl6n4K7z5mv3h(b`CV+OZYI|^Jf39W8*1Fc#!smFI2U*He)xZtrBW=1L5Ap! z+A(m5JhOc-2am%`YuJW{FQmY9{xa5N5b$BplrXv}GyxTEVcW1dKBssM`0{ER9A7oG zbOCZ-FVg@kG@f}a-3!P<``m<5>i>Ia>xf2VF!HbE?mZHiC`l(*qC$OW0C_IjizG>v z3y{;a>c^=Nxs1GIlWZBA6Xm!$&X8L-O$jPXo|?~A3}!)*P_x;W&@kHD8ti7UGOX-R zbuCI9D;r$p7kgl{ALSY0A75eSQJyUSREfCC>-6VGe^N2mCu?*Z1VPhO`4`C>-=U$) zQ2wHEDr-6xKSOB&u`g^9Z)wh1AGLKEe;WKu$3fpxX~QLR&fD@(wlm9xqeB+DetP># zv3ebZU&pqPt6ZL&b)cT7KO?k6hP`mLhet~EkGJ}d6t?@J&wu$$P{RaOW_kGir6tbz;%me*q@l8MftkBh5(>(KU+rR}qxcgXIN;GQ%`tGXp z68KL!7Ko1QE?1fOkGseLO`KN)x!Zd-685okPk?M!TK(V5S5yI1<%q9`f0j@*cZ!CO z`aRdnmvL_>;BrWd5kL+2TOIrYQAncv1{ix7Pe?Ui*X6L9~1UjpA&*rbzLQ1Q_q0#XTN*-hlRMAd>j6Ew& z41i_E()8L3g8P-~(3*GZ)FD4r;7pA3(J;3vWJm2mb z+t{Iqza-{0Xi3yUlpP7ufBs@zGDa)D2s^cwjs!qYT<6DjL9cIiXDpl6KJ_m(-~gJn zDl!b;3v}uA0i-ptzLat5_b!3)t7<}(4>YzI=S#F*f9V#s{cL_{aW2kN$-KJw%K{o( zWlwglnr43$Hu$otlkzN8#+hg)I*?jgFt)1r<1qantBZQcwtJ9Am2P5eQD10o3a4m=B0^$`l*$u_> zM*Ig;vRjs$K_V_=3Rrry8F$YK>(tuu&U19oCyxT>leD}%pbC0q4!Lw0jaW|RW7qN$ z`|2$maANK^#th$3{qcL}^U##@*w^9fFV0Ge;(9Cl95O5&^0qo^$N9(8_;QgROFky` zbtZR)jent}_i~);LuUW6En(bcdq82>#C5pmhr{k9zfIXwg0kIJc)>y9-c< zilD<#`WK)Clo6NpHmqyrrv}B|xb$1oQ>rGETR`2d5Y_c{R2y9tv(hM_<$crA$J{F> zED34}{%2e)VwwDF@K^dc-1GfND2sCkPl@zvVTWVIb-Who{K_?#iyD|sG*;>7d0Rf# z({^{f6g%e5i1?~RfZP8ApuENpCl4Yrdm`a1;O-IznlNA_+?a(i8O(X^UK;n}HtyiU z;@TCnGyGE916nyve@6Yr^IOZZo~14Lx^3DB9u^ZT7WEtiPZ>TJuTyrizKY#FaQyy9 zz@4GyxTM{AvA^Dg^Q}ZX-(UPu`B6BG;Q}jrDOFVdKWu$>INNX3K4R3aqDDoi)~r=p zJE$71RjnFTtE%>@O(bTiBB;GbOIx#ci^Sfw_uhL1L6Gsw_x)Y(fA4>h>k2+O&pFRI z_qoq~P$ceiF6NqYYFEelAr~-&9LLveTG;w?5ewc0L41BED8aI7%%HVrDe9W_vioqz zZWQ+7FDaz}#ICa`S@iq1gG~Oh&hTNk31xIAg9j%-edJJN+&ixaQx4b>101FA3Ea5p zo~$`Q`C6FSsq++qh;VMVEDwWTf^IrL`kcCw>>dG6h(Uj-Xd zO}&j@^jqU#my1ye{0`?$G z(^t0F*J&<6DifXUl*f! z@-GI&23o^i<`aUt>U$OXNZvn2zxr-EIwW{rIki_zTkgl(Jtb!1+MHtD2>nF;vI>>@ zfqhw&l-zH=@!!fT<>?TGVimxAfSg&yE06xMgXcjy)rC3d(K>UuXiyeD{F@TenT+nN z$F7??vcd9a!XdFOp<3HgxaaciYWIh+6fy&uw}&KTwpD%CxQC^h!txI98$c81l4IlUDB{B(U=_5^g{pi`qUD#a z#;?agA8_Y*@ zBN3ruXG@!mAmyQp|NpF(s(=nZ{>*qUXXAuc`>8GAykzs7WPITvTqCz~_hcQfu5Xfk z2Q7YcCe}fRxkh4N)LTWUahD_=)!H(kGk9j>ea{6W7P`NC zwIko+y60B(Jy#3@m>*sv4vW>^p=@YPOFI}~js4T-#t#TKpp^HN3`t97t>98B26X)1 znDPjo{@$F6jcoY|nvVE%TDj( zw#-mxOo_r8w9wKk2l2@m^jL&OdXEoB{Ohwe<y=-d;_`yHkL9G_5t!dm#ry@5AMZFJT;F`(R=<&iD3DiY z>-4i-!U3$pbeP6-cZLRUR5 z;WVIhJBIh&|H}nn$g6{t_SZ5v4=^W=d(=HuDVCHFJXGz+2$NRR9Ptwd)8Yrt!o9gZ zvV3{fUvV1#dO;jbRm(c}>NY^!eDy#20hvUclD)t3l4x*|y&(+TkI&yteSZ1x4Z&bX zym+VLJ@h=~?$&%)Yat_HXLd*l-+eZEQBzHvWvHnMoqU}4scJlYi36aKCt=~(3YX4v zZJh%KLJPk_XTLm>!g=MHyG7g>8`YosJlAk$BX_c3uI%38lBop7wUZtOYI$$-d1ZMj zh5Yy~GAezN*-MgVGIUSVzwKoj&wJ*mlMc`GyOa4@?OwGZgMwGRtl!0q(T_zgnU>NS zZZgh-{JOsg{Pzf)L)_B+hZ<;OZrKZ(5(3( zeQ)b&pHK=nZ-_4pp~|FgnmX~#>FaWdC}`_$yqnoAHmi3##*8y69R~LFzZ;iN+VPUr z@ZWNLQdP~}ni&V3MLTZPH`2+zIW4*LJPqgtj|cUONgPs_oHzCoPNTclwn&ellK*9K zA2a%u?AM$tRs%|u#f$geaQ7<@JcA~=6+oI2%3A6%kq$a0#@CSxxx^8xnMXv|x}=#k z%z?}T`r2aae1`p19F`SYG~RIRzFamS`crGenN%OSch=SKdA&Obi%Q26x}`nMwa`3! z^q5N<;R{trKePr=@5bT6GkeLDvBN+o41{^FPA9l|lf3A2OHGfj*|Jk_c?A_^PIS;Q z{DAH$e&H@7R~9lWc*QYu_(2Hy>b61?x`%k9HYXP~Q@ND7d2qENGaz$-dkVIUZ(JD9 zxzHf^)g|vE(=B4yu2?+U<)O~~vCjS-FnGMv)Sww#Qrsh6Jm_=#qmyUU zUqc}3jFtjHft{YU)+$1K9z9+jQ|4Sg7hNnr;&CG;bW$p5+d_$9{L>GToROI`7-`g$sQKz+tdK-Ut83&!7;qC z?eq}?ys7mnyJS5y!*y#x%=%uTHSI?%KUXxAlb(mymMnRojP;1UrJ3*cip(_)p++1p z*yKx{Tg+SP8QA~8N><34%2c1%H6GDKwOw5OT=PwVY9#n3g=`9*)SZ;|G`c9Dj=cf% z2;1P992GAj2MBqO@OEoTa-m#4WEz@yX54boNFgEi{Y zU|)hQA*H)H_Cpnwi-wQbXsj=pWLb+*mX%M?-m3k_H@I$D9DvPJjJq|wU4yuH7Be|S znALyte0Gd$*pJ`7k(i&w9m&TZ%A>>{+9T&l?HKK&wNblGdwfoXrBO3*p5$Y5F0_d; zd*d=0Qcomie1*k`B=UVJDjo3tGuu7AvuHh;Ye|Q3pXuQ+IN6j7m(|3=v7Nv9w2oUbj^nx8!ic?sn%+}XA9)^wi{$*?uQe zs5qLc>)t{4ih5er%?9Ysi7)!PpeuuP&pZh{lnRysP9Zlu-12g9beNeTc^@PCgMh%{ zK1if=n36r;xpo^Uw&rf}5uBgkd;#)?#ZAC34)xuzF>^*+qhrn^L?fCR08Kuy6-mb5 z#x+sjC|2tyDw+PA%c;&jZLTg49AsbGjn|kjGy?j`M1Nrz?Vu7a<>{oQL}qjkVK~Me zm1!0qt4N{DgJ=AHk6LsblsB}+>K&BOmgfTj%bCh<2;0fuYQ6H?raAF3(v{r56<_9z zhJOoMmFx?DU!!E7e4XMqHep80WPyhrq?%xrtO#r$q?WG_XY-E$Kfm$w-~xvG%)OPp zT#35)&!+D)2FYDgF$|m^rj)&Qlr>i8CUaAfT74aL@rvMSKHi? ze;xeWJ)>Ql{!b{;irRp?Z*ifkQ=vz{a*f^w6UCq}j)3;>aW!%egBt&Z)JtrC>t^DA zXMQ#|v%-wf4)Lvn`e0T%_Nzb#+p;R-F)EZcUfbF7S%(K@X9xpAw!lrB!3yoa2?~zu zAJ@+d>Akk}c^+QBAeAo3`6XRo;S|8Usqii+>Cg=S?q1`a--@L8jQb1%iWRVR5B={u zdc$v!VU&L@|1SP9|M!nC=zPvrt(6A%`WO+e+n+mSPfn1ygVXFq>giy<@Wa5zpNMQC zPwlnzJPr~2HEzLZ54G5sPp=~CZ>z8tQn)dOe}w# z-H08E3u2C~9BMo^rvvwS@ z|9cwszwK1yaeQS`$+*9J(Dz(M0Y9&$T#U~T<4VRi{E{K*RUY>5hW^}z%PY;~Q;;nG zW@1#HCZ@Iw|C9S2fbk3&ua7Q&##XGbK$EDaWi4+dvNlpIO;{fYU2%8^*B5WwvG{9x zV5=)Y8}XTAAykKHCzvS^L*=FQ8(wi;EqMj#+F!XA`m1rEMrPU%7rRBay|9T(H`lovN5G7@}c2N>kq=`K;Zy%A}tDc9&bolbLmRIq^H5CjDLAvXuAw%p3zExI(H& zd)OwFMp3^)tgL+?Q#S+cP${`wDmit)FDPRsr#Z{eXsgA!Q zu}e7@oWw#$EMJAtU;F>NMJx;tRi(43X9>Pis7^OP5$rRrZ(d((^Dlw@vs*XzdD+K# z=E;26jetA(NY3AuA6?zQ&z+yXa>KU~uB`IIm10Avmo) z0X~eOoD3zd%|&J{Oq*VDs4waPZ2p?t4Yz#|pMr1b&7to9B~lcBf(}}MX0<$Lq^qTR zJTYfhp>|8!>>+h}GRs77OsUM`o@fAGSwaA}R}*DE<5 zhp&-40W2Vvv!@+*Q| z3-Hy9f|T8Sz9A4+*6g$YqH3-{O=!DbjcSP)`GeHeXjLf6>yD}xqtDC=Z#NH~hu>>7 z?{^cRlU=9i{1LVgbEaTlQ23Ip>s_p``kL=1zzt9PpS?DvajZ3c? z*Ns?gl@r)ok#T}{`?&+uPI>3Y#%8b-ihECX)(K)!*z(4MqnHigo-seDq4kgP3=>V5bu#UgRih_AFsi9>^ zP5Ye%u%k%b87Up>bX9Jh&ud4*SS@3_r7d94W0TEwYQL=If*MY0(cG~TF+^nS%$qyN zGuMcBX>v*0DAW`G{}as#>~lE!Unh4>Uo=;9jp&6Y#U;%}8NRR)I{a(uuQKQ-;xT?! zvEJ{DW{Mb3V%AAwY$?i|x?c|bn6BIdR8Eq<-QNxiNk#bsvikq4sWv6vfOsFGM0IZl z@ECTcUr{FsyGIp8#YcV~GLogiJSMo%2mk88{{eXC41fAqC#MnAI7(D{oR?q8I8m+v zVn)pY^X_oab@-U$|anF%9IwlG;uYD}3+1-kR2MvbEEiT%KosCAme-Oqui%V?CFn<1f(Ot`+Xxy96 zOLW(84^(Wb2tGf*9;}Vdw-*i< ze;Oi#{6S234>i`N!zitseYnL>F*djPZ`QUL)hpS%T+sVJ@QyKc%Rae7+?6;3dVP5% za^c?q3+a)yCl-a*AQJ9{d@&=+xBRuSvA8OsXU+9#buE?4dl>i&F&oCJrDD5U>v!QbcRm~LR{Xt&CxGbT6r-UD zp)vTrM4Q|oZl(QA5$-^3RX!ze9xAIY<{GMcQbr}k_Xdyl;{eYSN~LcKp+L4|liqEU z-&@S7*lot(l6k-SBtx6Bxp-C@SsJF`vGw!siS?Jn=j%gpB{4iAE{7a4MQUfYw8At; zgu|3J1VH)JpiR*}^THGc??EH27zSsf(?Uph>y)0|oMu6~zLuj~WGPkj6aNXhkt0G% zyE4+TfMsE7r0lbZI1!;nrW!HwT>lF_fq=_TTs)e)W-*e-9 zES^~mRY+S?M;c(&z9VV438yK#5OdnTjc;Aw!_G}YeO8r- zvISYUBNiQWStla00P`rJad$6wlF>)ug`ULrSDgFq7LgGYC#eNVaHobR`F;hQvR4&9 z<1ClxuUP()1e&7# zJ$yBFCW7vkF|7N`{f_%LE(Yc*^nRo@6DLGH zt4Ta?G$=i{tx}onoASr_%a3<{UQ(Sfrzn3kV2*;QK|hP%C72``&IZ6(<7SoOWerN* z(=+Q@jjtjNZ>JL#Jfrb~Txz&#%ez1t*th*cq5Ve2OYQl~rqoLuokO5wzJ%(S$JdeG zz!n)M@}m_d?(>sl&bE-T)i8G-FACtK7Yj~vOHQ%$Kzle!i-s=bN#q!PsxsiBce zY}MZrS;?>&*6r}G&>o9=BHI@E@%vUS^CB~NRdGc{HZk>>j7Z-SPlA4HiWypumHWn- zLX_d$s=a?pUFw~pcI*Fb%~Q_er?sd*XT^c_F2}MLnF{VBzP`(d$RFi1lq#CJH#;WAcMc0d4MN?-nNHb*e0#7Y%lB{%+;RXS%Hr8 zF5NfZqU@#=fwk4EBX#hmnAgIz$q9Rw)0(|vZIaVKVq3JZJgLWc;syv}#AywBqVOq5 zqHMvQqq9Nlbnu}47px?=2P^r#Z~vcT<8Qp$^NN!~aDr&~0ib2UOmPrv40oFHbDn!_ zWP4Ua8*dBB+2@;&O|$pi6>uJ=9VAW-o0*}5_CevbU*cqvO?;MLTnZ7HlXq($y~}4U z$fjT7N4DSGynh0y!roKkTY3piN1i@s0GU$EsINT7hn3S>9;pA@!fVY?jp6_xzv(64 zZA(|>*7$~Entylh6iWo2|0|W}>~)_!a2VB#Rt;imcTi3zinlzUa=Se09zck@0?I$Uz|)BBjXURi^~ z^)5ePB8Od7^@*?&u+*feXs# z<-cl;%6^$&U&sb=>N%V$G&)YasWl36ng~2nNy(=wOeNz%({G?5tj({`s&6O3*=-}> zoRF!)z_{}f&9*Bq0a)wyABwC30b_*rW;m&QK&$@9x7FnhbUx%qf%K*b;089#{y$OIxt+`2*JUg%<*@xZ zfj^7;h~{6E>W(g=4oA1=ua7Ane-^3**Gp0j@ zYD%A4fJCq01Ag#`ESPRrVUh9$E^@!ZF91P^$E*3I{YI|h5-}5NdEatRH>QYZNUhOn z!}9aa(z~6}u_eWssv5Tgio3PeK$04lFGcAG4-o7a)bnraBRvC9S-pqoCrP~$8@Y5h zVjm{34fSWOh|ij7sE&Hw9umHOv91}MW3f#nSgs4#;$vT4uM|BSGImtBuB=U`BedxE z+oF>SUx~Ds%6F!6QD3j4Z(p$-@EvS(31RK`sso+{e-rYTQ+o=8vg5+~!-wYQSL?b3 z_3bFSWbI4lc!iJhm^^#`w%?@xdws_BtXKpQhXInAyIa^R^`esQosD(9_G4=J?Y@%w zBwL3~BvKf(wKtbK11*alBvDCvJ|Qk{F}S4OCat`cSwmT<_{@bCN@K+Vc>&TF(`EFN za2GhvzdU)OP!!p1egRpa+0RQju`_)udjQWnd4}Kytqa~iPI_O{m4MN5A0}*_9FZ*j z$wak!0`=rP4n*PlpHw*2U!g&YmNUxi51-=&TMIuv{fiX7iiE(_@8Mofg8t~hqI6)% z82uv<)Om zJ@LNn(KRV4pE~MswXP$s(3q(uxt(3W7T_nZ4kv3ycs};Kc#vi5llb5#sea@S&0N8Q z_K#n7&(B9{J43@Gq*IFkg`UCX7OL>HO_pZ$9)Ayxj77<-JTsbZ@?I-+f!zE3Y9h*k zF1ihK*Znf*E2*HYHzxo~* zSrQ-n|C(+|fR{cD6 zic!iImQ0{00ugX>UyY^~bHQf}psK;cxz7|!YHPe?&z4DkI~U*|fs-s5@JVYV`)qxa z_aWpueh5l%gYESda?2p{0z&De$(?&obsw@ae!l}(#dLX5yE#(CLqx`k; zA(x*^l~e8vd&+yz}(S`xUZ z20pcc(s79$n))Z$&kFk)QcDm0l}DBOYFnNFycF!KDSe_%@QGM~!M~CBXE6HnQm1wn zpHCwSjz%xDrB35A2nWPybs0x*X>-%g`SXau^KRnLpGWMBCA6}SU!$KeYUsCt{R4uw zoKc7Ami|m;!au|9LF7u1f*Qtt(O+|Onp3xFgF;hz2TFEYwr>niI6XMG_u~)m*p^kI zK{v&Wf)lj(IAU@LW9Oz|lD7eYUzYw{k(4it@Y85Nt*Tr3U1-olo5B8)jV{zJHK~gV z7ojNVAODd#jQzZR*K*F(DUl*2DYfQCm-d=y-x!^D#QnGG3NpAGl6OuFKRA7Hqp^xU zX~F%(TB5_aKsxeNimA_hW{QwuU6|V_rVSxo>Vll-n42NN1dp%Dl~H-Lj~Xio>Cmqk?W`V4nCmKS(d?rbo;`BYJ` zB_jRq(-8D5n!z$!cf0E9?k?}7!1OI@ab}X@?eB<$MM$7to@U;Zg8e%R_4W5&905N` z3q4~7IlPD-SSqVgG3EAAL~)a$@XJQzsBx*_=jENe{q|9urQT@!H@ioyU+%H7`+N9H z7fzvq0Sq-QY)AIT3QJkbeFq&krroOE?d&ZQ#%|cvsbiBh)+oZ3X}cv_Hb_T`IFs|m z^4A^01Qnh=VpfO@SW!1V*EfE^SNNX7VB9xap(L9e;+Z9~;dh;U&_Ru8%RQE#IDSjo zpKFRY?D>j`zY!AO?Xm1#?W5@3)B<$MG~f{fg{!P~=TVg1TbWGy} z4NRFd(Bh-6zXv<8y=tiVhoKtL@VX;{*0zEQBu5JBW2g?`NzFBX6?2Zgqmv&qnLzxs zeJjsle% zcAd#hn!a_UrYZ${34{D>RIv?S)Nuybnc$YITnDP6!13TJ1n4sSN12I3} z-ZgT6^6SP!(1-FrVU$lAoH}xo0XLVDdG&3Z?sX4`&E5OaawZkSbI^^lsim!2JJU;@ zIP|;bK!g=}eAr{sdR@Dtpz-(d%S{cI5+i19CGdOED+Q3GxkTS`7z@}d)(^pOQm%Ob zl!k7V!fypw_}Y~x3~)Zg_q9>n1rKCAKJIA{BrrX187Rc5Z68q@_N>H7=iO+yHdt0l zB_ZsewdiNno?Gv!iN;fo{=oD7ORez%z|~If9zqDMIT1V?0`>!u>FLB;kVrZEjsZ#+ z2BDDE_$;RTi}6XwGZBNiv*p0r> zV$GzX9j-zf5e6%?75d%%d-YYMe?Arrg@=utzRr6ep{#bq5~OG80O}I2WPa4YAJ#LK zX)&UG{WQQ8+hbCr1EY+ZfUe`d`007+6bRLpW-7{SLhstxfk2q1G0{B*MGE>mg~{^D2JztoL6IyJFeWH&aT4 z7^)WKd^o)O#ABg3*1J(=HoyM{O&x2#qACHG{30;vB;vNq?Ec3Am z&3s`|G9$2#E|={6N*v%+)5LZf^S@jGeEmAy3$}4!i#FD?Tf^UoF?t$B6Xhs$%f)f? zxk=EaEZgbBB_VQ!^SvZpV*awsvjwMvNVt%TVZ|S9!S+<=PflbG@RI=qA3 z)W`A8pgBthl-)c4C=1l)gWU#q9m7HgE9h=;zd+w;S~q`aDHiq6KR^PHg;b9Rm+AP) zM|)*)$8g73WF4^DHE{sh%`3!e(6D1=>JZVH%lFg?Z6m2XmF60`WWI4~vQnqT>{AhmXOz!QUZbuK2YSaZ92z0pE zPs^evDC`=nc6PEY0H6?!m_-bI7lw}(^n|;Zsk!6y;?J2(HuP{E z*P`y3p3Bu|Ek=2>8xO_zYSsh{b{At+osK`xup^x{qc&%Fe{T`e9v02&2#Cu6Fduh;i@&HC12@@Wd36EIYQg!rrMZ^%*HEphuF0^)9*gcfYVZYp-k2f0on z4U)&rGvY6dv+GZVaLMXaBwu^i3w6h^)eh;32)g|lwctJeE{27-GlYzM0SV(rQeNeu z;2xl0@H4w%fe}`;DdnSc$?Y%Jr9rX_G_!Uwh(`@SYZ<5Nds0WHNc^M+A8t^QUMT8e zI(!BE{3=@QqG0qnzi2*ed?5$^IkwiVe&Y36c=S5@;Spy@(6-F_8l^iRU|nqz`ue=L z!_NKaxN7ty+L|Boemw$`(dq|5UHRSy>qHizT61Z42*hYZh@VO+q0YSu__7d~=2s{k zcJ}B#_yM6_3t}RBu`(|O#24qjy{{z!_?p9aC(3Vk4p z%9Z$ERZBuecaGb{f8u}jceC8a+o=pO;WUMo6gODgxv**o!gkx}-(LNc0MOG?(olCA;zp(!Mt8NZdEl z_GWXBw)DCr3wn@}3L=aLhV;xM!fp>H-6BoOaiF@Uh#CQ$405ml?^e8sY@y`;eR99D9aMRARiui0PwvVImz^yVnG z>=^<77-vJK&m)nJ%l9aigaWv|CIX3{_>6mgEg`Qy#3S1GgNcUB=MaEz_vOcgIWa8P zbt}H{3vy@S7>MAxt;yxj1VFe@#02ABM(2;W9M8y)fht??6`$N(pCK9k^zytK#fvdo z?)-7|GALqobDhFWW$R^d46<#q4~fCN4b;be{ml5`9nNq^nLyD z?NrZPN!{@EQ8HTo`C!55^*^Qyc6%bm1l*CgFXxWujXQB9VzP~`lNS$Gvc|F={1BvU zr)ZBn)Yl>C?N4=Rt_#RMgv7@aw=rQvO8bwQSZQrB zb6BoOef-tx(RWK<;x;|YV%I0K%f8jeK_=+9uDiJQKXzouDxY-^Uh52CO_{MA^DE3`2Vcm)l-HyaV4CA&XoFQ-Qs%&odMTg~Er=&Iln?&AFOpj>bl^W~I3I=K zo-G&1?LR0xTn@gRS2bHyQ@_4?p+LHZ?(~Xrs;mwEc@X@`-PYUde#pf6%7J~Fv!9B< z7X`)mv0j^lSL`>E$i+s%k79~{51o)MpER1i{nKo|0Zc2u>C)m5_b_Jf1tcKGRuc>~ ziEQgrR*N*Pn)|xhv(?70a?X?yr6B4-31O#wJO;dcu;+V8XbLZ609E#8waFl~G1D+7 zkEOz~I%8J1*Oercm=-dFW zcqU%R)|c~u_8#BmX5TB<3O@9Y2l^hZ#qo?psogAkMrhKWXC9&(`8J`#Xz{C) zW>*B6XH$2aC!To{OCy*@s<~SD4f?YkLPIBu|L0F{5fp7bMDa<~m>KMCOAPd%j;+gr zr*usoaW{J%z~9f@Ua(MY`F$stc8GK^;CME&Y>TxhBQL0PWi!wd|BH4q{ArVv)dO(R zwsIoYX8k9mNcoKkL2}vBZn%&(!+rU?(3n_~DgH*l%H!3-{z&^}jxMRchV%^Bj#^8| z2}0$)>y}(cx&eWfY+M-%)5&$I-(j-fFn^d!b+@8eGsGh2_XRqKp_%(8dVx40EGb{` zO{ubLe zKIyflrYQQCoqYL`6FKT3;V1u<0{L^*dG9ds5K)Lbvd1H#JM!rb8D~Dv44Xc3P796t6TbB zl;)H>gFx#HmXPK^o%(HmUC0)1n}F*(&B92Oe7H@3g`Li|hr7}lrd%W28&I`VFs zYd+Etx$nyCqeC^8Mg-Dp!*#P7#YHaNk|9Ha!`}!`?#Ie=D_;rg%R!(sgl5Q>ihFON zL9{!{N)aQNbLlL@}mV zW|Sy;lNEXiAjU0U?}s1be_$^;bM-~u7H^H?AzgStOC2A)3vO}d;Oq9OotJ}4B2vL# zpQJy~^Y+sYCSg?nu~C6qwwl&%(2un`_VHoXZ7N!m_NlK^vrJOc#h=8~l-;iB7;eyA zWk}3|Bgk(4h3mkGV;hWY2&#rr!2C-DF9OK7aFcN}0UR`L%;L2h2P-1odfuP;k;D@f zw{QP>Y|X|)^J-m+bo$Cndm0l%+W0{BEis0#iU=-@-1*EH0=PG6IzsCDGs}GYA(tj()n6`f%cwg<~RLCat^=hOx>@0iR)Ixg^3Mqd-SXL zXE`k$(-w;cofLeT|GG+Xm!SpXGkne?#Uw?t_uSXnFw*o-*!#m96Z`0ahOqZ#I&>qc zls{e_@chHpX@EZZ4no3p#Y3%1E;(A=wK}b&_wULX`=%Y_sjc>sFV|&x_z21!Nz?x(&`%DD1SvMy_z*rqO-&Cjd?KXxN~ z?Dnx?pYz#^H&$2QjY*Jx=d)(q#nh+Bup(Rn{1NsG>xbj5@B6eU#>hjUH1M{v^&_^I zcDogQSDARl5l*w5AT*9mk;8&#HMka7^TbQZ{8QfZB~C;Pf`8zBF6UpmpyZ$vxRC#S zSJ@y|;D_p=u)rI+f66*t;H-2-ClwGX2?AfxticfUTg7~9=J~5*>J=8BJ7c6e?K00E zqkm+p#3UG3%~dKML`5DaEFE(xkPLHTG{uYahHhM&9B*Z9q8gRWdG)Nv-lb=+C$cVUJ!oV@-+V`7`?D&lc{= zCW*#h-CpGAi(M9uDyl5EQ<=gwOO@RxW$Me3J`F4-GNpjvqV(f|<~_==&&b0u5{zeo zyHVisdNjCxWsRkI=fzub_{i72uWI4Ckt*VMO8014&R)1lo>1$JY9b3UXJ}~8%8sW< z;b8C9yh;zT6UdP93cbFc%vikLx*hRWJ(q4?3jGJD;Q|Vblr*U>h7X;ScTTB%t5^7D zQjO^H*{1+|&XLzEX^@^4g&CiLP`0&H+$4UTOX3)rQIYH2& z;BP!bOJ|Vm=kQC24_il|e+qXiSNi#(p?p%qdzD`u)g$BI?wJAx&stZ?EE0V>R zq%A$Rf7148b6WQ zv0gIE-0!9A6CmP>NK(+VK=ipbHlZ~4-yPtf|IcFCyS zo2NYyRB8*8x`M}#Q%sas5k*RJVLDf;Y-fE?D+*^f^4|N#M zjl`>6@@-Yx5v*apSK`B(uobVSix)~K+re^2d8TXWPj0flc_yy(?+V6 z`o!lToA@O&`5g4l*|jsZTvph-<3$#pAivk)43<|bY8$Wt{7tvur)P}jSDU&K&p2qO z7WDisy3M+bX(#FVQqVnT;q{2Nl`WXpL641Y8WAhuIL@C*V@`a7C{PrF?jA`D&03yy zj?mr{Ryxy6;cmY&^D%o$kPHxTFT%H{7{3}c@bPq=W6~5wUS;M6%_;%Dn|rsCwkRIv ziSET|Q!O%-k^?h=@f%d`Row~bTHhhZqePFZm+j@yex5=Q`@_4k1$~Wnj{t>LK@f?< zAJmLoI|^c5B)TL0d<+rso%)|3KLA!n80Tt2g}vWxAc_+ zsB-&d`k00sp1i#87VK88Sio0ZrSBv|B1AF~-r)$RO^Z(wD9v$GMTX*M7(9Exo*kOW zO?@Xx?#6B1n|2D$OV6gw)8aSQfkEW%i!?gp*e_4Zk$@iuOD`ezFmmg(tOdPAax6NX zp@JhV>GR1VDRvWPL_5QW8xhebCyM=65~~Fs9m4JIEX!Rom_TrD{J>h=YU>H3nryBc zF-?S*9{0uICY~U|jJ&BtR|};VIZEtm7wE1ZJn}mo%Kjt{eBS85(6Y~5Lxh_rV#e)e zd4=h>OQUoEgAWDe63K#u#`UCSapUK`!!sNu1$zfSwy6%bd+mPfTPU8_wxk~I@_(@X z6oEnj(Q5tx%#x+ zaQMy`dlU?A-A!h6+aIG6{@j zj`Q}r(0@lfEW85;3>o@a+KtiStpu)J;$OifIOJOUe}}q%zlNKl*^?rp;OsT|we7!J zH5)hNhNeAwnp8SS(}F@Dj}iM+ic{9?&T<52&62N?oGm0_&H!U{FR(T|hh8fnK*}6f zB(lx%_j#nu5wOdjsC+oaxRc310@0$%TaC-`v^Q&$@x2N5y}oC2G2U8%W@_?BWjFGb z3o*vLG5gju5dLUW`&a@_-Fp|loPI8n?w|oNAp$|)6t&^W-0thA8>sxTe#|slC(<$~ zyIroB18N;--T!(aZgwqDc(-J|SsRtcT5MV%qLWOTAAGX8)jzDJ%aY+bUyGSVl8ojIvyIRHmw(y)X6XMG{5PzC^W8 zyGoF*!<0IsRWzVDtBHeB)^`3oCOyD*el0(Mtn|_`;tyGQpKIZ6e^2FcdJBb}3~lz0 zgGGSz<=kyHOKXK)PQp!}zD)_CHQwg1599{iF2^-cOOLxN=E}9_DVjhdVgoA?W-N#q z<2#%~l5#QYP^+Ld66_NoZ$(RH_4t8?rKA081*O}_kWY#|Q})YYUVOgsCuT&L#Uejp zr>&KBhxWkWQE9#p|9~Y^Q8tR1v|ecv*6$2DxnkZVO7Oxf1aLszi`qJY6EN8I(7IW>P`rYvU3a5ll zVBlgCwd_{R<$lt}69+1n6pA9|IMPMj6|pE*93U`ca7SXM=lygd(nxEP5-lnxsxlRs;p2bTWhp6Z4@MXlcu$8m zfH4>yp80F?l{J}KKR@vjWPS)~MP$}m?wS)qt;(mx2u~b$Q_!OU_B9zj=zXYW8+mJf zy@%m`8dyMoT?%EWVEt&eyFtM|qvD~VANumWV;M3lu-i1f!YHR@L2<)&R5S~|D$@70 zl}LW7DY9$IYo(}Yew5}OPeJE>NNU-~X=#L4izdm&rk zi=RR39*^c#MK=0Bh4{$0hB!1ey;L?4bqhxdUwba_bm?nhWF5z;V^k4MEzXMl2dQIj ztvF3xuyzih4vP|MSWZ;_Sh7hhJJN!vTfL!(zA4(WL6sRts1s>n!S2^8(;W)}Bsy}P_WnN zensQ4#oM7mHmmTCIIgu*+s^R+XnOBJD*QkC-^vUjBV3mhmA6rpakyPx0p`~AZo_fN0OYns$X%HF0dNp7nU-XW`Vq3TA8g7m1fD3}=Xhj0;m1;5os@)N6!6QP=R$g?i*&7xqcIarcOA$(w zGWK9?md2nbC@0rGY>)V*lO}LZ#;=b--DoLFZR1_8hPILqY&c?-A};aPpx%p}cP6dK zKL>K$53TN(3UZx9cZNlu&M~O_LY0U=oB?Iz=PRVoH zU~sJqO6k<$#!wvZakDKQ(_SQjPHN)-)t{Wq2U6!pi!mThtQ2vyn4v?CNR}hqytoz- zX+$gCCH^C!bwg9<^um^3iYMFXe*ov1liw}4kfKGC5z9QQMa48Zw;%|Gh!f49Ha`}m z?&u~(PSkEDGk?(*HD4$4KK{F>ZnC5tqn;#Rt*d~YIjS<~h&;nf5k9ehoei!DBIB3* zJ+mN)?kJs~Zm%JRA_MLp1Dy?N0jwfUfa z;RCESkrO5ps2DC*1IZ}1hp!CMzcG0?*1$qw1D!P;xa_~G zx=hV$#NQHf&T;Ccq-fElyE_b$`cU(|U7J7uJ@@{``lqlBb+BqjKzGQEoBZ`P4Q(L? z!;Fq#Nc`^L&Ue4K^?;%5PeyOAj<%AT+#1+DV3ZcR==OeVQotprUw+#<9mQ*KOhbPe zokWXYpsTJU`Jee{;*emD16d9KPpXd*+93a{OL25#QbW zYL_Ijoyv~*PDq%P-1hjeuC*i9Q$-BoMqb_>g?u=Xe@Rx%!p2z)8l@#V=40y61o zuxDs274=g2(`$C}$~;aX8c+2e=&>*7Ya5X1+ojxr6S3u(37X`aUQzp78U}X=mm8Dw zVM*_@E%cx_*FSC{uWqO4(n8`U)J8=KNs2cTwc;g~cXN0UkNR>>VtEL=`{JY(hkw!e zd!6g`{D^*mjF@Frd$w(%_0b#6N(P+66{6*32V=)9iJdmo`uX(}kDe?XKm|T=ikYg2 zQjPRbh0t!Ii<#j{qLAP(zTi<8dKR5&XZ=iMSgr`t7F4&iH0E$~yO9{Y_z_8`b>Y%u zTa@Xz0;I2iH!e+}I;V1X=G($F{zE?$)w6uMs?*c|$Nzz;CqITsaP1CQE~`!$`k|Q$ z7*M93W^1G^&jkGG+=mqu(OhF924m*gfQzRervKLN)r+>q@ak8qTsxqWQ1!4zhA&A9 zvdEq34lKsXH6oanr!C04*1BG_aBP47_}cAl;QItXcZLO79dW3=C%H;j0GV#RU~O*l zhHsJjPFSBII`N|9NipeOXO?7@_tXqxyOj|? z+yL_ksSr9s(1WG`Xq5%yaP!qsrW@U?zCarPIn0JYSOb{+`&@@5oEn|?6j1wnEvWds zi!D=T*1!$G;>K>JOK)38YVo}|mUs~go|m#e$i9#NRfCRdbmgLb@)*|Jp`j=ImZjL* zs}DnX6MZM~tzb zUFPuB9V>Tb$n1CaIgA;a)L%K*_IydD|3?n-HX7jQdD60ejNhg6S-NuvHd1oT!Pnwm zp+-z*{5=4qs`8q>|QK6n!dRHhj{eIBI3}JL2D55G(vp=?HN``s$Gyu**{~s& znEGVsrfA6*tD3|WUD~tKxvP_8=<)8C#ZBN?B2e6!luEG!>(_3)Y{}Z?loqiY)fUp4 zR9;Gu6Z9CowVgRXdg;*lV+Wr&t=``!4M}^~DLiVuO$nsO{!#S>8jL zAHNPf5Q1-C-Q5GB%e@lY@pY!JjN!G1Z0O(9)ePW>THf$)d15rM13~zuZdhXMwQRrY zcB`;IX?QW-g9b-<_HRd80r=-Agr(I3gdr#(O#nz9`ApEXJs2bxs(t-PTDCj`idad! zO6jh)c(N7a#RIH6%w@(G99(pw7D09`c!6` ziJKIK!-x$)Ghj&~?j}zaH!VF24#4uXWd=~qSU=$3mk)eQ@jF*?d)EYhVJ&BSwgzg za9f~v)NI+G1G>imsMmV`Aj7zxtAj?JRFd7{-}js2%$eo*$8B@AE42i3V~g2A%H^Rz zdm+GU^dMtK=Pr`Mve-8b{^r`+QR2p10?o^LN2FtHvdwnI7jQ6yvx-Dp%w0{mTJ$zbKg7Wbw;iW`NN(k&4=koLo#E&^VeAL;g~5gSJ%5}fi= z5dX>4WM6V1OB`8fEg`?k)t9b&-z0i@W?#jmZpS{u0VW|oNp|FCh2@ogC)u!U-T%$p zdtEZidxu5gif}p~@lp@KFSSWl;5_dK=P?-P2I;rb`c?>i;C+^&^0SQz(^;OeZ;)Tb z-ZfXGzS+yf98IxMAL-P)pGXoOe|+uZc6QVWbA$T>3wxeI%)knR6rhoZMyXgq=*Lvbf59e9m;%ISpffHp>3qto-|G0IE%nZt%q|YI&F@GqW+L>iXo^qSXl%L3$Iho~c9%m3ue;pb(S@i+# z(KYf5-S_*-od1h5+Scg@t-=f?4~F_iuz=^y?H4sCLj9WsuII;|L+)|e_2uoIlQ9)I z_$}O8jd-Q8+U6RMPNy6OgInDY0VuZ6-+Pdp&_`TpZE3Dt|ee_cY zEz$iR_ov2#JENeI;nL8lGiF3AjWiv$MPU1*B{36NcKTWD8SkX+0eu1{ryM#ffuZnMDoqh zIFY2GZS3y-43g}CcNM#&x{NJMZ(JohUbb~+d$38~a5fX#Ad{)TNsO%}h)9;}$ZOtJ z%e4O3Z*Q#uS z4uXX(TRyAOYtmW4U-Du9JtJeE|vQc=32%`?C#(|^7-xI!# zMborB3C zK@1e!P~JRynU6UB*HSwP$$>3-?JHUcKI-1>bdgz~a4cQD*&XMSKkS=&8@H5R zc)I=)qmo%@fb#vyED#a@ovvV$legvfog7z?Egl3~x#YaAp*wndXy$|zL4n5IvSagE zDW*^$1JrUcap@K;H>KImu^pc;^rL@nNXBJqv*B6YF7cxlVIu5^u7kcq zw@z+fH}~n}_LduWCg^aFJZ|GfJ6a*XMNbT;$B!6XR_jxXf;BUKy&IhZe0}TI4PY}b zV}-uUr@g_edS!MqHrD^i4KGt`6HKjr78weoEq z%T?(B@>uR$_O{cB$iPMI_g!a8wD7%Gc!`4kRf!mmOl=m=q_ukA{|>21TaVD8KHG6* z^Z%mk2*olCe!bUbluZ>6hz2d0{y2hIu{<}h+ z_U_Fd29x28#XyLxF7|zw*6d;K&%@>u=S+E_(bYFg7t|xDGaYW@biW}aw9BDqX7H|u z!P)97Vp4OW&9d5=mc+5xqnwnQ7A1mYjk(u3YZmN0xu2rkeRnGKYmfZt=b+$Xa3#}wzXIRMZ3FqlnDMX|7;DGxZmXd zzwMj8xuVH?v_jF>0zb>}cQrTpm&2*a#o^!35tnoDrnjt(nK#e4 zy+asuFBJTye|ZZrdMV6`w`o18#bLYoO&m9+lBtS6U!D|pI=XnO zA4dHxHrA~u2TdWjx1@!wLCCirG||Xz-xTdesRqg|JL`i@B~dyQ(-;xq+JBHGjhmU` zix4U)KBgW_WBL%v-rh{PJ}H{c;Zp!X!JYeG(q!BtkS&ciq`{aE=v&TMVX_FZaz%}HV*FH+T-&bJk;ZOlH+D8;I&XEZ8MRl zECR-VKk*zynoR-OtYu$Ku$^F;D%xnEp78@Q`xM}>%W6fNdW?e2GM~{J7Vm1%x5qss z2tfiC+s9dk!ogBtVc{GM^u>wb`rYJr9S=`4?$9nJ9P*n47+L)KAs!p2>whizK=2Fv zM)$QXoGi+BL6ov_a&xZU{r7z3hyF1|bHOoY)P^^m4pljRXf}@8&}=5I{g2Yi#P2p+ zRfOt=1*DKsGox>iaKA$nUg~;nhgHZkyK*hyhd=>G!x2$2dtX}y?8>5eX>E(nDQBQ9 zy50(uoE7{24b|Bv61^oxrQ&W&gfMa<51JgbHIK0;h6YD*gg_`IdIsIQsrVdNTT!$R@=Boxb%Bnm=4 z#z~Oxo47HzAC?-gMQH?&olit8+v8bmn#=oryTTXWAFS#8{PKDiAfvSuA4Yk#5{-N# z3C6@I`fY+_CMD+5K(>vL=elv%wKXF0+93b21G$DaTV>U`F~*IGvleew+uyd3Evk>L z{+@p7?DMAg9UCjLy|Ox1%AdWeWI~<)*mWblAq#T;xW>-o@bzVYj51}##OU_gb>9l% zfstu?{$EA`s0b-J!I945zp;~k|JDB&Bty=Kaf!Qze`#xi-U)jPKhX7g_fbJg+?Xit z(dtFnbC3IBv!&Qqq9YdL9w|7(+6G9~SqbCpg7)=F<#h*ne!0_m+vi!SYe^n*FDc)A zICg!nDv`RbmSg*#uAnY>X}P#vVU{oFpnQ9aC6{js_KBi=*@>HE9)9E~0rKxBwNPgb zks}aY*A^Rl-On~mWta2guFDYD>M23Iqx;``g~g9;Lm}^W-q4u}3Ru~CD(N$V1UF3F z=w1xMdK@RJQ8%j9WE4J6>VE_AKJcrj^nWRJ)4oFTKK*FYiscVla#MZSwnfpD8avkP zpFuOL+|JihGh%8>DS2LC3%^IW*6>q|p_gKGOgOZr@w(?}tbhVk0CqrgP-{)U=5epN zb2LnTxsk~)ptb)G8HW#u9c!C16}_R@@FAvdF8VHzoGxVq*WQh#xOx1r9Qk6Wtnke} z>hk@Cs!~PVgaIt=Zua@L+lxG|l#b3N(ns`yn+ahGwci7JH}5E^<*XOok@!gWhe|H0 znWmT~juT+6L-%&c3KKgD=C}<%6>76N%uGA8&5+g9;FF;0;&bAm4vt{3HzV>LcLo2I5jrNl8wh@X&-dd(bP4o#v)##LUw>(jv{#WY z{nv zPSj0@_D0G~X<6YZTQ54p+c(IIXN)5Ho>Z;S*sqSR#Gwn)ZCWjZXYQ`pXWYC!Lm)lH8P%I~q0 zfafu&Ooj3{*g2eCEL>MwNT>^e?y+&crf3jqFzC2Vl z2@UjZj>mr(gZ`a1B}9?=GHj^rYd`^ElmexI$WEuw3yK{&{On_3#m&rvSQ{nd60i}h zz4j%KUf%f81UjEU^;* zwN3Z+#Ulo~onihy$AGhzHK(!T;DRX_?Tjb6%s}t3!yRO{2&iTb16Az)-8WnX}>Fj}KSvKamS@_e@1(W!A$2(6YHb1M$NhKafD|8uvX zu<0W)z7v*=3(N2@yk5}Pju(wsZAnfq-*GN|VEeD764SGbkRqu4Y{uAM{E_;Yuu-o% z09FA_z(#1d6}?KWAB-4{F5jqO1w!xD1AG{+jtjR%K59}6rAyX1PCel2Nc(l3!3{wyTd1Z6d8)l2g7$CK;@ifCNA^ z<7E;RWswpq_6$g;E8lC?9!iPlq)*g@RXclmc?;BhrXykdjh6w@3xMkFT?>U!N;rjf zwq((85feBUIP8#|!Yyi(V@l{DSqs3cRy(fsi_Pmu-@|@;4u8-6iq825=dPCWehTU` zS*x87;F{-=ut72KA&`r_i2gHlqi8LPiQZfI+m??22~o$fl~kbz#ms)#5uWmirMury zEOWJh_7&Y+m7HLWe~ zZKfY%x$|o4qE5rEL|Z%SaM$YLAq{D*?2%v5&F3WB5Q3VHuTHdUVfQ_ROj34xR$Quy z^6z8TXN2O^LR;#sz$&-jEi1DI?%Z?c+_Q+JHJsDI8zX_&3L9H$gLeigU2B8R<&HW8 z8Wc}6{Eycj1yMc;ZH;W*!bYsA#b|O{hwNKFMhW3np1%5*br}%pn1lYe_{xdr1??7Y zO{DSrT3wt<*M+0}^@exg%R6Ii^oNSSTk9Zcu>b6>+(W+A=p9|AN~~^Nia2Sp_@f?D zn^sNi=er-$QJRkHbYX`wTm_*-XL2dWqWj?{OqrV-U*Xr8b)n^?QF_6}_Y%nHw{6Mn zRE7JvCAA+gP8EZ>MIEv2@xGesAL&Por$__t{kQ`su_x)wm=`_NR&&pBhqCmEa;Lwm z1BYcp%NWR|g^NjV*SPWP1lCu@#`T zp}Q9ti%BM9CRbHsBzW=}Fa=@E53Ys)n@HOKXMGUaI*9pJ&9G!N#$8P8|FRFTgJo=L`TLX&i3?i z&;Nck|0&>?(k3wofA^5G39*H^4D^C5Kf)Cc-!~^w^#dOgg9RSF*#+(y*~^wiCz6z~ zKHcM4?+2VI$)`GA?Kk3NIGrSWQ})OZA2+5o%RJ}64;-VpeTVw-66A>G0fyr`9pTNg z+U99sxS~L2Qa2xsPZYeNR*OXE)bEQlF@H8wQShz!PluMe$HAV6%{UqLSWekjW&n<0 z>5pDwM>rDvp=ZTMY=LcIM}tyxhJheM3(K>RMg+a56C-P{zXo{IS#-VoTnG?2S*rfx zT)(}}m|scCdgo~aa}+u7vxXRCupJI@*$$pu;UflZ?w*|zbH|41lvvjB@*g4nIeZ?j zb1Gs`AW;niRm0Bcg|)CKPtxp980fjHuemtFOz9}T%nv=$EFeKjxL24T#N;-)uR891 z7tISC+sExa60WDDR$v8cXV6nM+*LryUz{a*jx^*?Q3 zF!n@xN;}g4lSdx`cFx$b@}h#fU(y&Y=tZe8GPyqP2>$TC0JL{BTmFP=q{VBrioaqg(elCC}8#I5H%9K8fm{g!UzR!lRury5H?#Jj>21JBMUz*$4Wd|^Dp#aUVY!2 zmyQWC4D&OIR*nv`2fWRXk2b%w(^?Ry3zn=e^bKZieYZ{9*kYiQIGqalzrJ=`+y~ND&Z+VbU z@Hi3vt+GsOk`RJUXLax*C}~{_l9ciU_|IW+?nXSh>+0HGZpA%iNx3`cV`5Yr5rHbP z%7+}@;LM?b{aml+46x_PQnPbphO{Y$Wo{%UkL(2B;{jKzOw)O>RVakNmkVj{4e`rAKTG3w!EjX#^^Z*kMlxq`NrK3 z(kpQBk_htQ;zcv$y{ur0P4BMok)*I2#T(Y#rIV#B-hMbcIHWvb-61ctCHjeUPka|8 z9LyjA7ZulCs|P%p_5}_;yc0V+iuMz1C>RZ?4Weo=dkDE-U!>i@+fuOnJu?qbmfcE# z$-o2nMfE&n5|XFcJUB@7|3PG9w`^v@Lq_QOSh6oCGm_W$SbjgBuGPYqp7&L_@OTiw#S0X(M$fQFVP6d!3k6OWnki$8|4azT9Su#{14BUSw zd~0|YS}&j<gxIcOQJX|&?}+u3PRDbjOPY++mtraZj$m{K@2cEt1WtIbP`mfsh2a{ zJ$@Ig2&l>#YoGt(1w7hzq>y!_8}gBNTEjbZ+k2%up?r~JFJ(37%k$>noHp2#bmA`0 z-LL!|UjFle$qId2-;YvTUS32_Hy0e`m58WP0#}Ja(X9KME>A~5_kONQ6VzG{*N)iq z*rSf2qu(fp{_%a-jS_32Yp3JYvnBOHYdQeaYw)$5i2WC;M5dC`m`Lf7! zP5G_qSdmFo23XC=rIE`l6x?q#S~hf;g+p&EN*IKF7(KO_Z+)71MJx!`TL9lzup_3) z)S80zioJrd#{VqK{Mw#P;F7r}0H5xl*R1_7n)?1M%KET}ne_)>?Mr4OQ_B{^x*j9h z^PHI%Ue*LfbmhIV!#fsH+TsuM&m=i16`=bl+HmqA`#BR;R;7Sd_eaJ&Q_kGB7|>#T zd6kIOvXDBk;6VIVEmf-A+eX&M4ez{QA`9hl$+CfDO8)=9T-}-FcX}^UA{50Zw?h(! zCG{T|8LLE-~0RHGF? zu!UEu(;lam-8fF(Lw4rIu3Nd0Bvlm?zcu(2ZdHNaMVZe%v;j7at#1pS(Z{+dbX_mm zTkUk45cmI|ATj%-Rn2FdGv8?==hLsJ$miqnG@5%OhnCnFK|HlxI+*6gJW)s8iH6YQ z3XmX-{=NLDckYCVXW=HU=*yjUxMPXKlI?$y-%*cuAz`6Y?rF9eL*rxY_{a!i*eD)k zS9-a9@awp>NKJA3M$D7*4pK|A@9lp+6{@}Sf6jr8O}nVTD^1we4QyXA*0R(%EEl@a z9O5Iv$w9yEpN8P6Kg}}|sbh6{%luRCZANiXyyS#YpYEf|ggV8c_8w6?6Rg)Wp%Z4b z@OTS@BGw`lx;X5-es`&H5!2ULt%pu%I&ID71Y>odon^6d<^TjEKpM?aAq?tvoV{I) zv?(Q?zWAkGoVr$^_vH*vizh@a%g=X84EukUxC65I{=?u$W%n@!SC(Sp<3Gd5V> zI;#|P7bwH;O=P~cnY@&`?l?0x1Of^F|K*hA+HJU_<&4aEa6`*@&Kh5CXt7vPUQ;9d>F*TgI zp3rE~ttt#X2CUK-33W`S*4vVIQ6#$y&a$dJF9t3-8NROliJn@Nex1J-lc8Xs=m`~f zP2q_$AGweJ2K!sPHpInxSYU2Zw9}dH!Mv|AX|wX;mBMiMVWxBA4WT69 zJF_27X3$eyF};1bY0rs(be&$#0-~bLd?@XT?U@`HY)wX9j?2%{=KaCBD;-jg1izjR zD%o}xfVFihEfuyzrhFQ1I~IkFC~zIe=wE5?$WMa_!lz{$S**#!jX@%FzXyzoT)zj* z^2u>W5@KcFTc*@dW-nYnrHt;9Ll4fy7IJ;J2SLCnzpWv8GORQ-w~o z$o@woAe{toshqbOA4umpo4nv{O>SDhyf?+kqEET8{aLEJF>ldyJ)DNmBt5X|xOCIb zoYQOcpmTO`)t5jM*x%Vd$5ItZIyVeq+B1Ffj+1a`%rvu6D@f{HH($6va~KRu>GJ3*}+DBO5tNl+!s+3dP84F77bj9uLe<$pXvYX z9#)+-J_S+R6Pf|IKjufTQ~z}zK=+OBkiv6sk6B`MPWFS>wch5e7gn((Kdt!qrzz`2 zbUzcU4PKwZ&u_c8@Xoes48h-OF~lYmom%Eptm#!p5M7EW&*bz9J;Tx*-FAGcz%X*$k$b`n!rY)KhH+GJEDCg!3YScIyUKq`3GQIql=cl>>n!POwtl z;13u<))+yzz)sAfTml6MYC22q?RP$m9HCNzI`h^mC>PM3^ej$$=(Fo`7zT6cvJ$)6Xj!TP{D&P1d-Pae8;z{gi#=)v*yv|7DYfWy@W}cjq77P|8gKShhB< zpqalj%i&{93FKs$5fTpR%f#Nou####pb}9gX^NrU#d5AUpTl>6#^5WBM+!b|s=qfc zl^|B`%_-sQt|LTU7GOAJY}HLkKo>84wT1I0?vb8fCg+w0uzr$CiLIOe3VH+NE#6?c z6?Obyd$%_XE&0&LiNZDpWb41wDx@+>488fRY&;8pM)qZusIzw(cS4rCT~1GW05U;C z-8bSEW&Y3)TI`!HOSF*2Nav+rt7iNIqQ}zttc17lYY-%Y{CyXr-K)@cr0o zCoN+4uT=hwfA-v^XDF#%h3JoCWuA4V?JhbUKdGss6P2p(a zFU2J54uDKZ>>hT{|8FZ|CJ;}v)d#G7Fh(#f8*k$bJf-LqtM4^H9>8>7Ch8i zCo(4f*xz+It-zjFZrXjpskFiR8O^j~Q@p*x@UrOb(s0-a9-G0?JHjTmT*iKN*PVO6 z&!$H8gO3hbuvL&j7cZM6$x5M(IZr4$@b89yWf$RIH~_$*c(KVAoliL>i%6$1s>|dZ z$g`8dj^hCC6u zm)b8|bpH1L*h#q#eqnXeCDz05`lw%_PnoqfN{-)?pN?(V$Ke;(&N&nG9b5Mw3t2c_ zS>c6enHPuwHIBYkq5Z{9B;2OnMrF`HKcypV<>wQ^;d?=IJNgXyr!h%CgpWm0nzyq` ztuL=IM~}C0&y_vamB+pOUTJbO=8SFjLy1?ysQ z7EN)Cg%=p#ho-|n?lQnt)5`R zax|CiXuh*no|#+Obdl2-%vx@jv)Wi@Tw=kpzCTAqTZ{>3Ol`js3;aIcF$&uF-NS8*BD=-FMN1x5b5- zjFG;<5{AMZ1!VdlUtgTCdavk=Im{mCJkLe8cR{aLMVq_`kR^g*uO$?-{v=0qNmYL% z-P;5vLB>Rv?hSV13PHucRFedLf~oPp{XXphs%J`1PH2`efX+V9KyNr}=(oGFxP5KS zB1W>ag_eTe#zX0dQtpn;!m3#%*g`L-(KnR*!gCgxdYd1cjSVl?Y;{`U+t9uA^A!W7BF(fh+~4Bf-)*UFffF2LmR2&RB_rO@ZR;1jQ0^;V0_;@?|#lroE( z+`OBp??BaQMf%cx(f1Sk-@_YrhNs%JQ+Z02?<(QoI#0SUNXXaCg)G5cmW)Wh`#Y@!rqs>IJPWbH zMUGzEKQZIDB;P<{prVwQF2lV=hAKLiDU+Gca9dN{i9Os?p^%Pg76iOSbcF#=VcPF~ z*AB1G5p_x8z8+vQFCEA#;Np$l3^*4$ps9GLgpoV?%jaK4q;^_cM&9RZK#1}iL980q zn-BitE)>_C#y#4yeVZUIU2=C}7pVGz9??gPz-^QA-J|#=!{p=t8!q5seByO<(AY+I z0cr)_hxbsCGZ+A!c31xQ_i0lE{>HNTB9a$W`tfvcu6hC0+Rc0Oc4t`Adwm49=|m;_ zhNo9?6@0J2AAr7e;!V=`t`(62qHW%&`JFKxU>P@Ve)X;%^zLv*`Jv;p<{mZO=s8b$ zcC%o2`w`6>1-()}_%&ah9x4%NxA6Zcd-?j55uJg5I^WwLzoxG|ewV*%unMUDjC&q> zH~ray?F33mICme=KkP`mJ&!X@zCf^37ByQck&d#uS0}jno5yyd7*X}ktV_6fx^f>q7@_==>6MBd zcdYCamcjZ$a@A|@8>)r+yB=#5!<+SRC(QTw}6& zWsjReJIv&49<^p0UOk))bJ_G>8y~Z7T&%3+tC~a#*i0gZq?VstUVqu%JeXEX{R=mFp2u~74)uo zX3@2WOM!iOx{!6znl9FnyB4-`{c4H}wO@b&KKb*bjhn5+TAOYf7Nm85qQlB0-)`5J z%ktCkgDSe97#6sc>Pae4KlcD-VqQZD^t`M(!W3+je``h_jSfQsW6kikvf(Gd?DKuu zYBqWly0%JiYL57ihoZK*lR?l&`AL43!oQ~9sCv2Df>r=rvgVY7G#i|SP_BQ~A2jn!MH;3f5pSK&q z?wA-_qqGYsBdaz<>*{?c@3Y2uNxbXd_T>3do`vIyC?7>0u_<>DZ}y*6a?zt=>sT~= z9WeDZ_Qr4B#)(5uc8BI+?iYoin4BE|b6Jsq(*t64cIUbN5%dL)V12?hFncV->oNqy z*|-OaZk)bbsr4XB(```tyW|k3Aic5+R3~<^I*CWeGX~MBs&{@Z9eL%`<0Nh4SN&ZSgNwAtY~Ty zXm6@sM_q3e?lEso-qBi~U7n$mM{S5+!h3``MU5=1*nSQ?XL&{rC!Nhg`f6akgW!&{zwle%q5PQI;!l8-GM_B!ls>XsBr7Ti)argn~<<& zt&a4-(Hyl2Zc(w)+FiRoVpe?7_yDCu901rMNPOK$7M)zlZ>kW3fSl{#=Z?_>est0E z!;eymZPH7RTX#+HVFTFKp6>Pa18`S<#}kEQ#0zZk1?v;AdiHJbqmwq^o(8ZM;__18 z{E8Ng0aVifU!_sd`DyEqx>mUv61ITw@B2U*aKiD52K)%l4r|6fi8;#&2WLKhb;euE zF=<|Wbtl3&;ko3huFf5qBaM~N)ptK<5eN3>u8RTM_lp>dvc2u(Ry?2hlbugDW8_l) zv0J(2()z~h@>f(He*J`Rt&wu6Pf)v9Uv>Kt&QL(k!|+%4pmxU)W>qmUO~J8?Pg>hA zrPywL5X(XgCl1wOezltNPX_Q-tk=50@T!#4{|_(R0s3AMti<54~PBhf=&7IWvF zcxl^atkY_i&vEmW8^od3+7T{nz3NZWiPBlEmwiI^8A(YzUTmuVL2JvOGSz7vV?6yM zWHqi7v1>iP4jpgO?m)0IZ)xx1ed?QMske5D*9Q#&v%UYO15w4t5JOTmYge#(Vd@u) zJt^)rvP}EG96xJ(!6yulMj4-zZR^h#U|ZN@q4Z(4hlTV$0+>xMD~YDKGP!{NLgLrc zy)EVbD5@)cJcJn#1`fr2)v)AX+3u8M>8$L8#pjn{$>4X2tV)%$!HR$VKTe+Zkor0R zCC&p1YjBOu(vL&tz5i>9SAT*YJn7L6`EV_T zH&bL2``@U_@|WVg_rfpn?9?PI+MEnGWuVWy^=)}pc}=6$4tVoz?B%w`;u}-qy{R89 z5`qWI?$oHyl(TqlrZX=&B`jlEU1q#HbxpD49`iNO(~hTB9$l?Ca=UR2^&MRkOv9(r z;mw*kV*foi$d=$2HW9p%nuYk{H--Qpfpmu5yQ*i-Fd_~HG-^&{QwYJ8NzD<&yB{OO#)6D=j{J9QZ`%D@*5Hglf#O; zv6Nu~55H3flTW#=NKkEoez~56-}|eFtj+nX{=bT@tyur?kg1nCp*OD}eOXw8$=n31 z2YvKh-sZ$h&Ow6L5+E7%;4!y;NJ*OFzIk;XGr}N})n4^wcDY^iuMTp<%J>X4(rlZg zw(WdzAJwutaXQrO;^n{lihMP3NJG)=FJ~q3HctrIiCpuRzApbN(vb=aFX!u_Fze03 zzGu4nUmnONrk?}-`$EU5Gv;3&(|T{DKRkhZosU2O)xfMfnXuwAFqqQ+hLV znioEERRM^z#9gO}2R`d0>sUP}(&1t>-@#T3`k?*_!zb-Tk!c^8a|YBpu>JpNI?K4I z+VATRLwBdZ3?Yb04oDB(9ZCs9r*y*rLr6%MbO?eXsibswcSuV~_t4MWzt8i3HSe!; z&Yr#3{$6X{MP&pn>IqnoN~6y@NV8s=oM)F5B4lztO&_k8N7qqJHL3PH}k}dlA96nUfW-S|vM?qcakg zlbrDBp=XR^WhiV8vuPOjzg}@jr*nDZj`$FCb|b$;7%8+iR{Mz7aM$1UIp}Y|6Y|v( zB+2G~pT+)vINMdf`V%XfaE)7bi^{wFN;{!Ycrw;oDZT2hUeWMOhBqkNwyRU2{YRAP z5@*GH#~8NtOPes3+#!U_)+>Pz%N-{SHIj4W<6&#Z1;L2AL)#KZ*J-l#_#kU>b&)vY z?sp0eyX4oK8{86;f>G-3Z8|J$mTEiTY?=Df+3sZs-W~%nw#W70{pzX2OOpGdx?@o% zhR5qwKdQhJ-_j3krJaP{2R%XFt8ef42`>O4Boqy7()5deY}wdlm3R_q zx@o=y3<%)rp=jQTb{*cR3Hg|9HeaxLMU)Odof6_tsWtL@ROEZimfyau8bC)~pfcpL zeY!0-s7+`8LCfLoOog$(h)v%4o#)hLFtn}3p~A2>yd}JGZL+DVYD{Ea4^4Tl8v~+X zv+K&jppTQn zQfZ0gK)5n%OXUV9pWWg84vOad%img*?q1E5@}+dyDTb5j*O~|mMzpaTR5jho~m)(>|MvGNzIpXc&QgsO;mD; z_&X@TD}n=?oi}VgiHPrPGV#3sbS>C)l*icdTyJFug9Rvgk|}G<&DXmXi$?>r)lC6L zjK9DGn8!eZbPqGH4It_k???#DCHPtQ53v$gLaoDKYD?I~1xv5V{Vm&2w> zScpNKE>lm8{2zSJ2uA2O|2tb=G#Xh+e7YJpdl^l~yVO^Cj!eP*<4)&jAH?%d<%zya z?UTctQyH+3M zwq+OP)MOzMxMl3Ud32}(5W=C81$5Z?1Fq|@gG17D+ripIB<0*~eOLgZR0e z`oIeJ!z?Nk40BTx{x$l3l%xk%f$&QG^T@OO`7#+JXsSEr@*LBO8h?>fz`>Me4Qfxif= z;@?_vHL+perJd2-L1WQSLWy41?a>_lsSIY@o0#f-pTYfaNGTocdmaG%?>>{knq{~6 z|IR+mulxZGuuuxSk`XlKi$;Kd^M6NNt#x_6+R&!T&!TE53a;}UWmqeo{-ii*Rzn0% zai()Q60*f2KdB@(g0G2M=xU=&9}pn~2o$RI9ld> zQd7<{!cN+F+F8TwN1Dzim>;XUVcRc$c~S3p*MYa!o9D2l=Rh1^vvyosfTRgacUV%1 z1NtMy(7nHpUW-p%{tMm)R173Yy_q;I%Ot- zoYu3hYU*x&^Fmo?j1Gs1?=B(SvE3i|@G3RTrE%M{bfw$-XudI77o4@U-x4&`!h)f; zU3}Tem#D#N?V0kqC=cD4sBmbOx{$=LM~Iqt7O?@c z#l9G)YWT;^!i6~O>e1aUX`X1Z8y}0cFs(TA+y-AZU(dz$4fIhD2@VkLx!1p5+jw={ zHM+c+H1LhM5HzwXXGbw&j`n-#H8Qs(L0%phf^28fB^s$jlldwxS>qa3b#*I9(o4c? zmfK1uuo}938dD4Vg-ix5)0g5v_9TxES$o2%qD5R#Xb{^Gk$7U6|nv7 zSZ>L>Rb8?U5J;6s=eI?W4?mg@(GWAPeGPtZFWK)HvO67V7$Int5W)qu9af)UJLavc zQautZl-hhAZfri!ySY)Vw@Eqnez_)cC<%I9YwR<1chom3PLFG;cwdeK=5k0toYZqw zx3aI<6_q(04TGG5uL@ zZUIcpDR!D90#Uk$852VlxXkBR9W;Q8L3Ejd5n1Iv+kgJ!$~WJ$>#SyNr+E;RSU(vn zhvTHCUF{_ZW7L-$RjVo@GUW^H7^_LZneg#&Ql>--z(=l z#TG8l$IeN?XY7*L>75aEOOCmr>*tI}vz3cNy(aW_1w}2H=O}Xq=WgOX?mGJ4_NO~5 z$WIypE!JNlDnG=hNQu8nxd(Ya2gl-6_lD)ahrC=3L%2WVYrrZGErIDmBlPP)RY)Y2 z(eI%$TFIrk-zj@EWC3ww|9+#`LFxUHs4Pe_bWG?-7BVPF0+l7~&gFTn1ESUEL zD!nd$!uEY0+MWWcp5C1D<@4SB#w&|GRG)#ZU^r(!54 zU1Q^qBF?O~VwD&s>6uXblo3iy2k}wDfDEZ_b8ZF{Z;f5X+KV7dro&9{t@WEs3#H zDT-7$P{nIZ!un2!GuO*>9sX5LIw>RBErgmH6m?g>p-(9sR*D?>@@A(#77JCzK8%oz zX5H>_ZTDzdM=muOoKtNWf#>oBRnSVR#i5d4z^~1KW9IzhLW}GZq_~0=FFpu66 zZ}`D5q^)&YY;d6nRVN1Jv_+&%Y0wT62~2GO%@aFi(Z>ebt;yXQ3?!ag2m#P|MKP^s z$neVZUV&@<`=PE0V{2Q0CM@5Y{NKwOz}4Er^UF*kFXeH%W2tIDHKxJ!sB!{H-ASv> z@MsOGMX%36V2(!SN8=iO2=Gk{oO5)s>P(gK=^n(`D=P7rk7It4$wGt7X9DXE)91PU zBSrS_gQ_>w=qm5NDV)?vEPeVYKFgFN^fkb8QVI1hPS=5<1@HZXIYrVjl2X8Lk02pw z&fiv}m3yT}fu(A{s0c+y$d3~QI{&r%p%b$w!_QQp7+UN*#FFrrmPl>UX4WHKcWZ_`+e|9fZct_n$4*n-b< zH#3Ni3aDdLgRP`#e3E#%E{o$y))wP5Dgd8urcbSjkhdMP(f zb5(iG%wJ{gkRY4E?@^~;&s}PY1;`R~-d4+clZpWZ^28v#NF2r+DGrpuizIg|yeHR2 zeGO(2hvOy;Xq97QH~Aym;C~mzG3Gt%f>%=K2IgnBee`GPTLt#NL27FBE!>MVUc-+; zCT>rnPyErahp0l=34Fa=j--M#qyfNtlKQyQk@f_p}M1lX657)i1@&l4v zK-C_)(dicr@!c8=7d--=d3>$s9sL++gArqM_{C9O;?^r+KNIeKT2yf`HXg>;sMG{( zEfJj^71b1;7Klee?26C*GEJL010doqQXvN>^}s29v<^Ef0G2h0bdx9Yo9JWupT7{} zbdSzc4C%l)O+jwSt~)ld)pnZUOsQ<|pyeesTxW)s%!q++1l7!v{8Kwl=feUi%@vyx zY|E8c_dLmu{7s}1s?c~5B+Yw7It8c)U$ax;VOzrCo`l$aE6CI~PrUe`~(kUt+ArxX#vNzJWv4#y^p{@H4t=Ooi)LA%oF3H6x0{ zMY7Oxh^HlQF#HcM*75HXeX*Orsat7S0Oy-=bYvcEfl`%TF4XHEZmG+RT;Dp!w=$QY zYSHWUdzIr(bzVExhX@i}s~2`7%`Vmi{XG2?WUoKUhGLNpv(gn}A$c%WJ4}qW)!4{6 zGuu?+*3@3Lhwnp9-8pS%+ObcAF58-2v;oTh-+-8Z+Nw( z4N(J1QWWR{q3zh+1QWI|?h{K3p+2nFsamXGZ}P#J#4~k?wtL-{WXu%Gt#d0X6v6>oI9z|+Gvvq&bMMp`kgxmAj= z#(HZzECTg_rhyP$JpQSXK&Y*wOBz9qSza+p583TYco3NA7z`AMsTN%BA#u^e1~CN* zV35 z=OcZUFd^q6Tx-c{7pxb!5@k{juUBzSl-@vG?ihPve*}6%qu*ntci>8jBRZxWXqE#nFt-udjNw?7~+FL(qOnDPq)m`TzL!%%8P<|$DH-eq*TFRkIPeh%| zQPu{Fy&k%E7e`=T)J6-5to5iy<$m4C4BZN>yFaz!ftDqBR29<10?r5uT1VP7;?T+r z@)~b;X3Oz|rs~_c2=>4ac3v!j>2OBlSw||MEEUK~;;#aJ!lsS=`A`p0km>HMlW|Mn zL+T!7uoGkX;?oa77|P7e!JgB>o_rJ#TxN#BKTT3&4Isk)h866mmmJ=koZ}UaN-l&vBXgyrgp&;yZ2~&`iw5_Pzo^HzS+xn#1j%7dO>&ZV05U zhAtibIgWR3s3cT(0j8>wkUF$YvyYH`LitQh(iLfi1|?9plfY-1ISP^aN(qU&I@r9W z{CqE%&!{z<^eVFZB+d7C*OJ~(%LhF=0!)efvG9g-Fp_BEbx)|1&~a{RnP4j9Z$~Ma zS4XvfNc9%S;Gj|sH6{cq#lsRvPqChVnMj}^Bo!?;gKb|D^DCDfY%#i#DW<9qH ziT-kmzP_#X(+#s4pQ`~8)nAvEl1eWv=?{+Gm`99Pm!N584PH-#c}`?|VrDn|L7DbG ziK-yu#l^gVv+?;JmM^R~&J$bX+48aJ0Xn)SY00Fy3zy%El`=-{0)VcO~l~bIf0H1U!~Dxtyk6iv&SJA_yqcg{V?+q|*6V zue0o41fc6ka{XfiVRXa(lxxx8e>#duzW!mS!!-PTmcZP8z(hvge6$~HeZ_8~vnpNO z{#R08!uMFb1dg0D${&>tS6^}vZ%WvgC|E*gKC69S9CE?zhSz)Z9(T*zD zd+rPN`#OdwOvIh^pEe@MzxSJRKJ11auAg!#Vg}&oRyJ8c~@zalP@Sn4Bn!JW3>)!JC5gaH* z$~T-7o2bbDy823iw%~kS61=q1n;0yn@_YQMbdet!g@QIQoySe>On+I#e}L%XXS_!; zL=A_0&WC2#smBbL_-?xP1~rb_Dd!GOfN|$6p*Zr)2_<{^wymbRG%S^J_?eI-{NIGO zvX9UPAu^U&RUeHP5!(@`>o+-=g^(yqTI_jGGs2Gf-In>+d|%-2F=<|{HYq-GWbl){ zPQ^@eA@#o~t)eIQapdmtw_+F4q|n8l-VUX@jxKB8-Z2c7aNDWv)MSt)h}f>g2)AGc z_0WkJ76hraF6!X3UhcnfzMar@)<){96Dr-^77-Q!j6P;9;IeMvaz#t>VMFbFPrGVd za;Y@$^B+D-`HIU^O7ktefun%BzO4 zR)xhW81otJfENAu>4@yn!n+Um4N3N`AIDZHV*`cM*ys*R`L`~{{;=L~C%0DHVHc?F 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�<;76%Bm<)q2DeZ04~ZHfi}Q)fGFsNf_EN#JFvT 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 可高度自定义的专业级轻量金融图表 | KLineChart - - + + + - - - - - - + + + + + + -

Skip to content

KLineChart

可高度自定义的专业级轻量金融图表

简单易用,轻量流畅,适用场景丰富的 Web 前端金融图表。

KLineChart

开箱即用

简单快速集成,零成本上手,显示出一个图表仅需3行代码,让所有注意力都能放在数据对接上。

轻量流畅

零依赖,Gzip压缩下仅40k左右,4G网络下加载耗时不足1毫秒。图表即使在成千上万蜡烛图的情况下也能保持流畅。

高可扩展

提供丰富的配置和Api,样式修改、功能搭配随心所欲。提供技术指标和画线模型扩展,让图表拥有更多可能。

谁在使用

Released under the Apache License V2.

- +
Skip to content

KLineChart

可高度自定义的专业级轻量金融图表

简单易用,轻量流畅,适用场景丰富的 Web 前端金融图表。

KLineChart

谁在使用

Released under the Apache License V2.

+ \ No newline at end of file diff --git a/sponsor.html b/sponsor.html index 957a082df..0ba1bce04 100644 --- a/sponsor.html +++ b/sponsor.html @@ -5,21 +5,21 @@ ❤️ 赞助 | KLineChart - - + + + - - - - - - - + + + + + + + -
Skip to content
本页目录

❤️ 赞助

如果你觉得插件还不错,希望你能在GitHub点一个 🌟。如果能够打赏一杯 ☕️,那就真的太感谢了。

支付宝

微信支付

PayPal

加密货币

Released under the Apache License V2.

- +
Skip to content
本页目录

❤️ 赞助

如果你觉得插件还不错,希望你能在GitHub点一个 🌟。如果能够打赏一杯 ☕️,那就真的太感谢了。

支付宝

微信支付

PayPal

加密货币

Released under the Apache License V2.

+ \ No newline at end of file