diff --git a/.gitignore b/.gitignore deleted file mode 100644 index c21ce9b..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -docs_rst/_build diff --git a/404.html b/404.html new file mode 100644 index 0000000..5bedc42 --- /dev/null +++ b/404.html @@ -0,0 +1,30 @@ + + + + + + 404 | Nvim Orgmode + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 8b29882..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 nvim-orgmode - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/assets/app.CcHIVmLN.js b/assets/app.CcHIVmLN.js new file mode 100644 index 0000000..ae97e7e --- /dev/null +++ b/assets/app.CcHIVmLN.js @@ -0,0 +1 @@ +import{t as p}from"./chunks/theme.C5eTVCmd.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.CB8iguzh.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return h(S)}function _(){let e=s;return g(a=>{let t=A(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/assets/changelog.md.rKswCPZz.js b/assets/changelog.md.rKswCPZz.js new file mode 100644 index 0000000..0176205 --- /dev/null +++ b/assets/changelog.md.rKswCPZz.js @@ -0,0 +1 @@ +import{_ as r,c as o,ag as t,o as a}from"./chunks/framework.CB8iguzh.js";const c=JSON.parse('{"title":"Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"changelog.md","filePath":"changelog.md","lastUpdated":null}'),i={name:"changelog.md"};function n(g,e,m,l,s,h){return a(),o("div",null,e[0]||(e[0]=[t('

Changelog

0.7.2 (2025-12-03)

Breaking changes

Features

Bug fixes

0.7.1 (2025-09-06)

Breaking changes

Bug fixes

0.7.0 (2025-09-05)

Breaking changes

Features

Bug fixes

0.6.0 (2025-05-11)

Breaking changes

Features

Bug fixes

0.5.3 (2025-03-26)

Breaking changes

Features

Bug fixes

0.5.2 (2025-03-07)

Bug fixes

0.5.1 (2025-03-05)

Features

Bug fixes

0.5.0 (2025-03-02)

Breaking changes

Features

Bug fixes

0.4.32 (2025-02-23)

Features

Bug fixes

0.4.31 (2025-02-20)

Bug fixes

0.4.3 (2025-02-20)

Features

Bug fixes

0.4.2 (2025-02-01)

Features

Bug fixes

0.4.1 (2025-01-28)

Features

Bug fixes

0.4.0 (2025-01-24)

Features

Bug fixes

0.3.9 (2025-01-21)

Breaking changes

Features

Bug fixes

0.3.8 (2025-01-06)

Breaking changes

Features

Bug fixes

0.3.7 (2024-09-24)

Bug fixes

0.3.61 (2024-09-23)

Bug fixes

0.3.6 (2024-09-23)

Breaking changes

Features

Bug fixes

0.3.5 (2024-08-22)

Breaking changes

Features

Bug fixes

',111)]))}const f=r(i,[["render",n]]);export{c as __pageData,f as default}; diff --git a/assets/changelog.md.rKswCPZz.lean.js b/assets/changelog.md.rKswCPZz.lean.js new file mode 100644 index 0000000..78dcd6b --- /dev/null +++ b/assets/changelog.md.rKswCPZz.lean.js @@ -0,0 +1 @@ +import{_ as r,c as o,ag as t,o as a}from"./chunks/framework.CB8iguzh.js";const c=JSON.parse('{"title":"Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"changelog.md","filePath":"changelog.md","lastUpdated":null}'),i={name:"changelog.md"};function n(g,e,m,l,s,h){return a(),o("div",null,e[0]||(e[0]=[t("",111)]))}const f=r(i,[["render",n]]);export{c as __pageData,f as default}; diff --git a/assets/chunks/VPAlgoliaSearchBox.XYDV-sQ7.js b/assets/chunks/VPAlgoliaSearchBox.XYDV-sQ7.js new file mode 100644 index 0000000..c1660e8 --- /dev/null +++ b/assets/chunks/VPAlgoliaSearchBox.XYDV-sQ7.js @@ -0,0 +1,12 @@ +import{d as pi,ah as di,J as hi,v as vi,q as yi,P as _i,o as gi,c as bi}from"./framework.CB8iguzh.js";import{u as Si}from"./theme.C5eTVCmd.js";/*! @docsearch/js 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Un(){return Un=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&(u.children=arguments.length>3?Wt.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)u[i]===void 0&&(u[i]=e.defaultProps[i]);return Et(e,u,r,o,null)}function Et(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:o??++So,__i:-1,__u:0};return o==null&&H.vnode!=null&&H.vnode(i),i}function Re(e){return e.children}function Ce(e,t){this.props=e,this.context=t}function ct(e,t){if(t==null)return e.__?ct(e.__,e.__i+1):null;for(var n;tt&&Ge.sort(Fn));yn.__r=0}function Io(e,t,n,r,o,i,u,c,f,m,b){var l,d,s,S,g,y=r&&r.__k||Eo,_=t.length;for(n.__d=f,function(h,p,v){var P,E,C,N,I,x=p.length,k=v.length,U=k,z=0;for(h.__k=[],P=0;P0?Et(E.type,E.props,E.key,E.ref?E.ref:null,E.__v):E).__=h,E.__b=h.__b+1,C=null,(I=E.__i=wi(E,v,N,U))!==-1&&(U--,(C=v[I])&&(C.__u|=131072)),C==null||C.__v===null?(I==-1&&z--,typeof E.type!="function"&&(E.__u|=65536)):I!==N&&(I==N-1?z--:I==N+1?z++:(I>N?z--:z++,E.__u|=65536))):E=h.__k[P]=null;if(U)for(P=0;P(f==null||131072&f.__u?0:1))for(;u>=0||c=0){if((f=t[u])&&!(131072&f.__u)&&o==f.key&&i===f.type)return u;u--}if(c2&&(c.children=arguments.length>3?Wt.call(arguments,2):n),Et(e.type,c,r||e.key,o||e.ref,null)}Wt=Eo.slice,H={__e:function(e,t,n,r){for(var o,i,u;t=t.__;)if((o=t.__c)&&!o.__)try{if((i=o.constructor)&&i.getDerivedStateFromError!=null&&(o.setState(i.getDerivedStateFromError(e)),u=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(e,r||{}),u=o.__d),u)return o.__E=o}catch(c){e=c}throw e}},So=0,Ce.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=Te({},this.state),typeof e=="function"&&(e=e(Te({},n),this.props)),e&&Te(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Kn(this))},Ce.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Kn(this))},Ce.prototype.render=Re,Ge=[],Oo=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Fn=function(e,t){return e.__v.__b-t.__v.__b},yn.__r=0,tr=0,Bn=br(!1),Vn=br(!0),wo=0;var Be,Z,Cn,Sr,lt=0,Ao=[],Y=H,Or=Y.__b,wr=Y.__r,Er=Y.diffed,jr=Y.__c,Pr=Y.unmount,Ir=Y.__;function st(e,t){Y.__h&&Y.__h(Z,e,lt||t),lt=0;var n=Z.__H||(Z.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function zt(e){return lt=1,or(Ho,e)}function or(e,t,n){var r=st(Be++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):Ho(void 0,t),function(c){var f=r.__N?r.__N[0]:r.__[0],m=r.t(f,c);f!==m&&(r.__N=[m,r.__[1]],r.__c.setState({}))}],r.__c=Z,!Z.u)){var o=function(c,f,m){if(!r.__c.__H)return!0;var b=r.__c.__H.__.filter(function(d){return!!d.__c});if(b.every(function(d){return!d.__N}))return!i||i.call(this,c,f,m);var l=!1;return b.forEach(function(d){if(d.__N){var s=d.__[0];d.__=d.__N,d.__N=void 0,s!==d.__[0]&&(l=!0)}}),!(!l&&r.__c.props===c)&&(!i||i.call(this,c,f,m))};Z.u=!0;var i=Z.shouldComponentUpdate,u=Z.componentWillUpdate;Z.componentWillUpdate=function(c,f,m){if(this.__e){var b=i;i=void 0,o(c,f,m),i=b}u&&u.call(this,c,f,m)},Z.shouldComponentUpdate=o}return r.__N||r.__}function Jt(e,t){var n=st(Be++,3);!Y.__s&&ir(n.__H,t)&&(n.__=e,n.i=t,Z.__H.__h.push(n))}function Qt(e,t){var n=st(Be++,4);!Y.__s&&ir(n.__H,t)&&(n.__=e,n.i=t,Z.__h.push(n))}function No(e){return lt=5,gn(function(){return{current:e}},[])}function To(e,t,n){lt=6,Qt(function(){return typeof e=="function"?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0},n==null?n:n.concat(e))}function gn(e,t){var n=st(Be++,7);return ir(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Ro(e,t){return lt=8,gn(function(){return e},t)}function Lo(e){var t=Z.context[e.__c],n=st(Be++,9);return n.c=e,t?(n.__==null&&(n.__=!0,t.sub(Z)),t.props.value):e.__}function qo(e,t){Y.useDebugValue&&Y.useDebugValue(t?t(e):e)}function Mo(){var e=st(Be++,11);if(!e.__){for(var t=Z.__v;t!==null&&!t.__m&&t.__!==null;)t=t.__;var n=t.__m||(t.__m=[0,0]);e.__="P"+n[0]+"-"+n[1]++}return e.__}function Ii(){for(var e;e=Ao.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(pn),e.__H.__h.forEach(Wn),e.__H.__h=[]}catch(t){e.__H.__h=[],Y.__e(t,e.__v)}}Y.__b=function(e){Z=null,Or&&Or(e)},Y.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Ir&&Ir(e,t)},Y.__r=function(e){wr&&wr(e),Be=0;var t=(Z=e.__c).__H;t&&(Cn===Z?(t.__h=[],Z.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.i=n.__N=void 0})):(t.__h.forEach(pn),t.__h.forEach(Wn),t.__h=[],Be=0)),Cn=Z},Y.diffed=function(e){Er&&Er(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(Ao.push(t)!==1&&Sr===Y.requestAnimationFrame||((Sr=Y.requestAnimationFrame)||ki)(Ii)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.i=void 0})),Cn=Z=null},Y.__c=function(e,t){t.some(function(n){try{n.__h.forEach(pn),n.__h=n.__h.filter(function(r){return!r.__||Wn(r)})}catch(r){t.some(function(o){o.__h&&(o.__h=[])}),t=[],Y.__e(r,n.__v)}}),jr&&jr(e,t)},Y.unmount=function(e){Pr&&Pr(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(r){try{pn(r)}catch(o){t=o}}),n.__H=void 0,t&&Y.__e(t,n.__v))};var kr=typeof requestAnimationFrame=="function";function ki(e){var t,n=function(){clearTimeout(r),kr&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);kr&&(t=requestAnimationFrame(n))}function pn(e){var t=Z,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),Z=t}function Wn(e){var t=Z;e.__c=e.__(),Z=t}function ir(e,t){return!e||e.length!==t.length||t.some(function(n,r){return n!==e[r]})}function Ho(e,t){return typeof t=="function"?t(e):t}function zn(e,t){for(var n in e)if(n!=="__source"&&!(n in t))return!0;for(var r in t)if(r!=="__source"&&e[r]!==t[r])return!0;return!1}function Jn(e,t){this.props=e,this.context=t}(Jn.prototype=new Ce).isPureReactComponent=!0,Jn.prototype.shouldComponentUpdate=function(e,t){return zn(this.props,e)||zn(this.state,t)};var Dr=H.__b;H.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),Dr&&Dr(e)};var Di=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,Cr=function(e,t){return e==null?null:Le(Le(e).map(t))},Ci={map:Cr,forEach:Cr,count:function(e){return e?Le(e).length:0},only:function(e){var t=Le(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:Le},xi=H.__e;H.__e=function(e,t,n,r){if(e.then){for(var o,i=t;i=i.__;)if((o=i.__c)&&o.__c)return t.__e==null&&(t.__e=n.__e,t.__k=n.__k),o.__c(e,t)}xi(e,t,n,r)};var xr=H.unmount;function Uo(e,t,n){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(r){typeof r.__c=="function"&&r.__c()}),e.__c.__H=null),(e=function(r,o){for(var i in o)r[i]=o[i];return r}({},e)).__c!=null&&(e.__c.__P===n&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map(function(r){return Uo(r,t,n)})),e}function Fo(e,t,n){return e&&n&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(r){return Fo(r,t,n)}),e.__c&&e.__c.__P===t&&(e.__e&&n.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=n)),e}function dn(){this.__u=0,this.t=null,this.__b=null}function Bo(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function Ot(){this.u=null,this.o=null}H.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),xr&&xr(e)},(dn.prototype=new Ce).__c=function(e,t){var n=t.__c,r=this;r.t==null&&(r.t=[]),r.t.push(n);var o=Bo(r.__v),i=!1,u=function(){i||(i=!0,n.__R=null,o?o(c):c())};n.__R=u;var c=function(){if(!--r.__u){if(r.state.__a){var f=r.state.__a;r.__v.__k[0]=Fo(f,f.__c.__P,f.__c.__O)}var m;for(r.setState({__a:r.__b=null});m=r.t.pop();)m.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(u,u)},dn.prototype.componentWillUnmount=function(){this.t=[]},dn.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=Uo(this.__b,n,r.__O=r.__P)}this.__b=null}var o=t.__a&&De(Re,null,e.fallback);return o&&(o.__u&=-33),[De(Re,null,t.__a?null:e.children),o]};var Ar=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(r)}}),Ft(De(Ai,{context:t.context},e.__v),t.l)}function Vo(e,t){var n=De(Ni,{__v:e,i:t});return n.containerInfo=t,n}(Ot.prototype=new Ce).__a=function(e){var t=this,n=Bo(t.__v),r=t.o.get(e);return r[0]++,function(o){var i=function(){t.props.revealOrder?(r.push(o),Ar(t,e,r)):o()};n?n(i):i()}},Ot.prototype.render=function(e){this.u=null,this.o=new Map;var t=Le(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Ot.prototype.componentDidUpdate=Ot.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,n){Ar(e,n,t)})};var Ko=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,Ti=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Ri=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Li=/[A-Z0-9]/g,qi=typeof document<"u",Mi=function(e){return(typeof Symbol<"u"&&A(Symbol())=="symbol"?/fil|che|rad/:/fil|che|ra/).test(e)};function Wo(e,t,n){return t.__k==null&&(t.textContent=""),Ft(e,t),typeof n=="function"&&n(),e?e.__c:null}Ce.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(Ce.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var Nr=H.event;function Hi(){}function Ui(){return this.cancelBubble}function Fi(){return this.defaultPrevented}H.event=function(e){return Nr&&(e=Nr(e)),e.persist=Hi,e.isPropagationStopped=Ui,e.isDefaultPrevented=Fi,e.nativeEvent=e};var ur,Bi={enumerable:!1,configurable:!0,get:function(){return this.class}},Tr=H.vnode;H.vnode=function(e){typeof e.type=="string"&&function(t){var n=t.props,r=t.type,o={},i=r.indexOf("-")===-1;for(var u in n){var c=n[u];if(!(u==="value"&&"defaultValue"in n&&c==null||qi&&u==="children"&&r==="noscript"||u==="class"||u==="className")){var f=u.toLowerCase();u==="defaultValue"&&"value"in n&&n.value==null?u="value":u==="download"&&c===!0?c="":f==="translate"&&c==="no"?c=!1:f[0]==="o"&&f[1]==="n"?f==="ondoubleclick"?u="ondblclick":f!=="onchange"||r!=="input"&&r!=="textarea"||Mi(n.type)?f==="onfocus"?u="onfocusin":f==="onblur"?u="onfocusout":Ri.test(u)&&(u=f):f=u="oninput":i&&Ti.test(u)?u=u.replace(Li,"-$&").toLowerCase():c===null&&(c=void 0),f==="oninput"&&o[u=f]&&(u="oninputCapture"),o[u]=c}}r=="select"&&o.multiple&&Array.isArray(o.value)&&(o.value=Le(n.children).forEach(function(m){m.props.selected=o.value.indexOf(m.props.value)!=-1})),r=="select"&&o.defaultValue!=null&&(o.value=Le(n.children).forEach(function(m){m.props.selected=o.multiple?o.defaultValue.indexOf(m.props.value)!=-1:o.defaultValue==m.props.value})),n.class&&!n.className?(o.class=n.class,Object.defineProperty(o,"className",Bi)):(n.className&&!n.class||n.class&&n.className)&&(o.class=o.className=n.className),t.props=o}(e),e.$$typeof=Ko,Tr&&Tr(e)};var Rr=H.__r;H.__r=function(e){Rr&&Rr(e),ur=e.__c};var Lr=H.diffed;H.diffed=function(e){Lr&&Lr(e);var t=e.props,n=e.__e;n!=null&&e.type==="textarea"&&"value"in t&&t.value!==n.value&&(n.value=t.value==null?"":t.value),ur=null};var Vi={ReactCurrentDispatcher:{current:{readContext:function(e){return ur.__n[e.__c].props.value},useCallback:Ro,useContext:Lo,useDebugValue:qo,useDeferredValue:Jo,useEffect:Jt,useId:Mo,useImperativeHandle:To,useInsertionEffect:$o,useLayoutEffect:Qt,useMemo:gn,useReducer:or,useRef:No,useState:zt,useSyncExternalStore:Zo,useTransition:Qo}}};function nn(e){return!!e&&e.$$typeof===Ko}function zo(e){e()}function Jo(e){return e}function Qo(){return[!1,zo]}var $o=Qt;function Zo(e,t){var n=t(),r=zt({h:{__:n,v:t}}),o=r[0].h,i=r[1];return Qt(function(){o.__=n,o.v=t,xn(o)&&i({h:o})},[e,n,t]),Jt(function(){return xn(o)&&i({h:o}),e(function(){xn(o)&&i({h:o})})},[e]),n}function xn(e){var t,n,r=e.v,o=e.__;try{var i=r();return!((t=o)===(n=i)&&(t!==0||1/t==1/n)||t!=t&&n!=n)}catch{return!0}}var a={useState:zt,useId:Mo,useReducer:or,useEffect:Jt,useLayoutEffect:Qt,useInsertionEffect:$o,useTransition:Qo,useDeferredValue:Jo,useSyncExternalStore:Zo,startTransition:zo,useRef:No,useImperativeHandle:To,useMemo:gn,useCallback:Ro,useContext:Lo,useDebugValue:qo,version:"18.3.1",Children:Ci,render:Wo,hydrate:function(e,t,n){return xo(e,t),typeof n=="function"&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(Ft(null,e),!0)},createPortal:Vo,createElement:De,createContext:function(e,t){var n={__c:t="__cC"+wo++,__:e,Consumer:function(r,o){return r.children(o)},Provider:function(r){var o,i;return this.getChildContext||(o=new Set,(i={})[t]=this,this.getChildContext=function(){return i},this.componentWillUnmount=function(){o=null},this.shouldComponentUpdate=function(u){this.props.value!==u.value&&o.forEach(function(c){c.__e=!0,Kn(c)})},this.sub=function(u){o.add(u);var c=u.componentWillUnmount;u.componentWillUnmount=function(){o&&o.delete(u),c&&c.call(u)}}),r.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return De.bind(null,e)},cloneElement:function(e){return nn(e)?Pi.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:Re,isValidElement:nn,isElement:nn,isFragment:function(e){return nn(e)&&e.type===Re},isMemo:function(e){return!!e&&!!e.displayName&&(typeof e.displayName=="string"||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")},findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:Ce,PureComponent:Jn,memo:function(e,t){function n(o){var i=this.props.ref,u=i==o.ref;return!u&&i&&(i.call?i(null):i.current=null),t?!t(this.props,o)||!u:zn(this.props,o)}function r(o){return this.shouldComponentUpdate=n,De(e,o)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r},forwardRef:function(e){function t(n){if(!("ref"in n))return e(n,null);var r=n.ref;delete n.ref;var o=e(n,r);return n.ref=r,o}return t.$$typeof=Di,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},flushSync:function(e,t){return e(t)},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:Re,Suspense:dn,SuspenseList:Ot,lazy:function(e){var t,n,r;function o(i){if(t||(t=e()).then(function(u){n=u.default||u},function(u){r=u}),r)throw r;if(!n)throw t;return De(n,i)}return o.displayName="Lazy",o.__f=!0,o},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Vi};function Qn(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=0;--R){var D=this.tryEntries[R],L=D.completion;if(D.tryLoc==="root")return j("end");if(D.tryLoc<=this.prev){var W=r.call(D,"catchLoc"),K=r.call(D,"finallyLoc");if(W&&K){if(this.prev=0;--j){var R=this.tryEntries[j];if(R.tryLoc<=this.prev&&r.call(R,"finallyLoc")&&this.prev=0;--w){var j=this.tryEntries[w];if(j.finallyLoc===O)return this.complete(j.completion,j.afterLoc),z(j),y}},catch:function(O){for(var w=this.tryEntries.length-1;w>=0;--w){var j=this.tryEntries[w];if(j.tryLoc===O){var R=j.completion;if(R.type==="throw"){var D=R.arg;z(j)}return D}}throw Error("illegal catch attempt")},delegateYield:function(O,w,j){return this.delegate={iterator:oe(O),resultName:w,nextLoc:j},this.method==="next"&&(this.arg=e),y}},t}function Vt(e,t){return Vt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,r){return n.__proto__=r,n},Vt(e,t)}function he(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var i,u,c,f,m=[],b=!0,l=!1;try{if(c=(o=o.call(n)).next,r===0){if(Object(o)!==o)return;b=!1}else for(;!(b=(i=c.call(o)).done)&&(m.push(i.value),m.length!==r);b=!0);}catch(d){l=!0,u=d}finally{try{if(!b&&o.return!=null&&(f=o.return(),Object(f)!==f))return}finally{if(l)throw u}}return m}}(e,t)||Go(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function jt(e){return function(t){if(Array.isArray(t))return Qn(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||Go(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Go(e,t){if(e){if(typeof e=="string")return Qn(e,t);var n={}.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qn(e,t):void 0}}function $n(e){var t=typeof Map=="function"?new Map:void 0;return $n=function(n){if(n===null||!function(o){try{return Function.toString.call(o).indexOf("[native code]")!==-1}catch{return typeof o=="function"}}(n))return n;if(typeof n!="function")throw new TypeError("Super expression must either be null or a function");if(t!==void 0){if(t.has(n))return t.get(n);t.set(n,r)}function r(){return function(o,i,u){if(ar())return Reflect.construct.apply(null,arguments);var c=[null];c.push.apply(c,i);var f=new(o.bind.apply(o,c));return u&&Vt(f,u.prototype),f}(n,arguments,Bt(this).constructor)}return r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),Vt(r,n)},$n(e)}function Ki(){return a.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},a.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function Yo(){return a.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20","aria-hidden":"true"},a.createElement("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",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var Wi=["translations"],Nn="Ctrl",zi=a.forwardRef(function(e,t){var n=e.translations,r=n===void 0?{}:n,o=xe(e,Wi),i=r.buttonText,u=i===void 0?"Search":i,c=r.buttonAriaLabel,f=c===void 0?"Search":c,m=he(zt(null),2),b=m[0],l=m[1];Jt(function(){typeof navigator<"u"&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?l("⌘"):l(Nn))},[]);var d=he(b===Nn?[Nn,"Ctrl",a.createElement(Ki,null)]:["Meta","Command",b],3),s=d[0],S=d[1],g=d[2];return a.createElement("button",le({type:"button",className:"DocSearch DocSearch-Button","aria-label":"".concat(f," (").concat(S,"+K)")},o,{ref:t}),a.createElement("span",{className:"DocSearch-Button-Container"},a.createElement(Yo,null),a.createElement("span",{className:"DocSearch-Button-Placeholder"},u)),a.createElement("span",{className:"DocSearch-Button-Keys"},b!==null&&a.createElement(a.Fragment,null,a.createElement(Hr,{reactsToKey:s},g),a.createElement(Hr,{reactsToKey:"k"},"K"))))});function Hr(e){var t=e.reactsToKey,n=e.children,r=he(zt(!1),2),o=r[0],i=r[1];return Jt(function(){if(t)return window.addEventListener("keydown",u),window.addEventListener("keyup",c),function(){window.removeEventListener("keydown",u),window.removeEventListener("keyup",c)};function u(f){f.key===t&&i(!0)}function c(f){f.key!==t&&f.key!=="Meta"||i(!1)}},[t]),a.createElement("kbd",{className:o?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"},n)}function Xo(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(b[f]=u[f]);return b}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Vr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function ut(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=3||S===2&&g>=4||S===1&&g>=10);function _(h,p,v){if(y&&v!==void 0){var P=v[0].__autocomplete_algoliaCredentials,E={"X-Algolia-Application-Id":P.appId,"X-Algolia-API-Key":P.apiKey};d.apply(void 0,[h].concat(rn(p),[{headers:E}]))}else d.apply(void 0,[h].concat(rn(p)))}return{init:function(h,p){d("init",{appId:h,apiKey:p})},setAuthenticatedUserToken:function(h){d("setAuthenticatedUserToken",h)},setUserToken:function(h){d("setUserToken",h)},clickedObjectIDsAfterSearch:function(){for(var h=arguments.length,p=new Array(h),v=0;v0&&_("clickedObjectIDsAfterSearch",on(p),p[0].items)},clickedObjectIDs:function(){for(var h=arguments.length,p=new Array(h),v=0;v0&&_("clickedObjectIDs",on(p),p[0].items)},clickedFilters:function(){for(var h=arguments.length,p=new Array(h),v=0;v0&&d.apply(void 0,["clickedFilters"].concat(p))},convertedObjectIDsAfterSearch:function(){for(var h=arguments.length,p=new Array(h),v=0;v0&&_("convertedObjectIDsAfterSearch",on(p),p[0].items)},convertedObjectIDs:function(){for(var h=arguments.length,p=new Array(h),v=0;v0&&_("convertedObjectIDs",on(p),p[0].items)},convertedFilters:function(){for(var h=arguments.length,p=new Array(h),v=0;v0&&d.apply(void 0,["convertedFilters"].concat(p))},viewedObjectIDs:function(){for(var h=arguments.length,p=new Array(h),v=0;v0&&p.reduce(function(P,E){var C=E.items,N=ti(E,Zi);return[].concat(rn(P),rn(function(I){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:20,k=[],U=0;U0&&d.apply(void 0,["viewedFilters"].concat(p))}}}(f),b={current:[]},l=Xo(function(d){var s=d.state;if(s.isOpen){var S=s.collections.reduce(function(g,y){return[].concat(at(g),at(y.items))},[]).filter(bt);ei(b.current.map(function(g){return g.objectID}),S.map(function(g){return g.objectID}))||(b.current=S,S.length>0&&tu({onItemsChange:o,items:S,insights:m,state:s}))}},0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(d){var s=d.setContext,S=d.onSelect,g=d.onActive,y=!1;function _(h){s({algoliaInsightsPlugin:{__algoliaSearchParameters:we(we({},c?{clickAnalytics:!0}:{}),h?{userToken:nu(h)}:{}),insights:m}})}f("addAlgoliaAgent","insights-plugin"),_(),f("onUserTokenChange",function(h){y||_(h)}),f("getUserToken",null,function(h,p){y||_(p)}),f("onAuthenticatedUserTokenChange",function(h){h?(y=!0,_(h)):(y=!1,f("getUserToken",null,function(p,v){return _(v)}))}),f("getAuthenticatedUserToken",null,function(h,p){p&&(y=!0,_(p))}),S(function(h){var p=h.item,v=h.state,P=h.event,E=h.source;bt(p)&&i({state:v,event:P,insights:m,item:p,insightsEvents:[we({eventName:"Item Selected"},Fr({item:p,items:E.getItems().filter(bt)}))]})}),g(function(h){var p=h.item,v=h.source,P=h.state,E=h.event;bt(p)&&u({state:P,event:E,insights:m,item:p,insightsEvents:[we({eventName:"Item Active"},Fr({item:p,items:v.getItems().filter(bt)}))]})})},onStateChange:function(d){var s=d.state;l({state:s})},__autocomplete_pluginOptions:e}}function zr(){var e,t=arguments.length>1?arguments[1]:void 0;return[].concat(at(arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]),["autocomplete-internal"],at((e=t.algoliaInsightsPlugin)!==null&&e!==void 0&&e.__automaticInsights?["autocomplete-automatic"]:[]))}function nu(e){return typeof e=="number"?e.toString():e}function vn(e,t){var n=t;return{then:function(r,o){return vn(e.then(un(r,n,e),un(o,n,e)),n)},catch:function(r){return vn(e.catch(un(r,n,e)),n)},finally:function(r){return r&&n.onCancelList.push(r),vn(e.finally(un(r&&function(){return n.onCancelList=[],r()},n,e)),n)},cancel:function(){n.isCanceled=!0;var r=n.onCancelList;n.onCancelList=[],r.forEach(function(o){o()})},isCanceled:function(){return n.isCanceled===!0}}}function Jr(e){return vn(e,{isCanceled:!1,onCancelList:[]})}function un(e,t,n){return e?function(r){return t.isCanceled?r:e(r)}:n}function Qr(e,t,n,r){if(!n)return null;if(e<0&&(t===null||r!==null&&t===0))return n+e;var o=(t===null?-1:t)+e;return o<=-1||o>=n?r===null?null:0:o}function $r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Zr(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(z[k]=I[k]);return z}(p,v);if(Object.getOwnPropertySymbols){var N=Object.getOwnPropertySymbols(p);for(E=0;E=0||Object.prototype.propertyIsEnumerable.call(p,P)&&(C[P]=p[P])}return C}(e,su);St&&o.environment.clearTimeout(St);var m=f.setCollections,b=f.setIsOpen,l=f.setQuery,d=f.setActiveItemId,s=f.setStatus,S=f.setContext;if(l(i),d(o.defaultActiveItemId),!i&&o.openOnFocus===!1){var g,y=c.getState().collections.map(function(p){return ze(ze({},p),{},{items:[]})});s("idle"),m(y),b((g=r.isOpen)!==null&&g!==void 0?g:o.shouldPanelOpen({state:c.getState()}));var _=Jr(io(y).then(function(){return Promise.resolve()}));return c.pendingRequests.add(_)}s("loading"),St=o.environment.setTimeout(function(){s("stalled")},o.stallThreshold);var h=Jr(io(o.getSources(ze({query:i,refresh:u,state:c.getState()},f)).then(function(p){return Promise.all(p.map(function(v){return Promise.resolve(v.getItems(ze({query:i,refresh:u,state:c.getState()},f))).then(function(P){return function(E,C,N){if(x=E,!!(x!=null&&x.execute)){var I=E.requesterId==="algolia"?Object.assign.apply(Object,[{}].concat(oi(Object.keys(N.context).map(function(k){var U;return(U=N.context[k])===null||U===void 0?void 0:U.__algoliaSearchParameters})))):{};return rt(rt({},E),{},{requests:E.queries.map(function(k){return{query:E.requesterId==="algolia"?rt(rt({},k),{},{params:rt(rt({},I),k.params)}):k,sourceId:C,transformResponse:E.transformResponse}})})}var x;return{items:E,sourceId:C}}(P,v.sourceId,c.getState())})})).then(lu).then(function(v){var P,E=v.some(function(C){return function(N){return!Array.isArray(N)&&!!(N!=null&&N._automaticInsights)}(C.items)});return E&&S({algoliaInsightsPlugin:ze(ze({},((P=c.getState().context)===null||P===void 0?void 0:P.algoliaInsightsPlugin)||{}),{},{__automaticInsights:E})}),function(C,N,I){return N.map(function(x){var k,U=C.filter(function(O){return O.sourceId===x.sourceId}),z=U.map(function(O){return O.items}),q=U[0].transformResponse,oe=q?q({results:k=z,hits:k.map(function(O){return O.hits}).filter(Boolean),facetHits:k.map(function(O){var w;return(w=O.facetHits)===null||w===void 0?void 0:w.map(function(j){return{label:j.value,count:j.count,_highlightResult:{label:{value:j.highlighted}}}})}).filter(Boolean)}):z;return x.onResolve({source:x,results:z,items:oe,state:I.getState()}),oe.every(Boolean),'The `getItems` function from source "'.concat(x.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),`. + +Did you forget to return items? + +See: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems`),{source:x,items:oe}})}(v,p,c)}).then(function(v){return function(P){var E=P.props,C=P.state,N=P.collections.reduce(function(x,k){return cn(cn({},x),{},ri({},k.source.sourceId,cn(cn({},k.source),{},{getItems:function(){return Kt(k.items)}})))},{}),I=E.plugins.reduce(function(x,k){return k.reshape?k.reshape(x):x},{sourcesBySourceId:N,state:C}).sourcesBySourceId;return Kt(E.reshape({sourcesBySourceId:I,sources:Object.values(I),state:C})).filter(Boolean).map(function(x){return{source:x,items:x.getItems()}})}({collections:v,props:o,state:c.getState()})})}))).then(function(p){var v;s("idle"),m(p);var P=o.shouldPanelOpen({state:c.getState()});b((v=r.isOpen)!==null&&v!==void 0?v:o.openOnFocus&&!i&&P||P);var E=Ye(c.getState());if(c.getState().activeItemId!==null&&E){var C=E.item,N=E.itemInputValue,I=E.itemUrl,x=E.source;x.onActive(ze({event:t,item:C,itemInputValue:N,itemUrl:I,refresh:u,source:x,state:c.getState()},f))}}).finally(function(){s("idle"),St&&o.environment.clearTimeout(St)});return c.pendingRequests.add(h)}function Rt(e){return Rt=typeof Symbol=="function"&&A(Symbol.iterator)=="symbol"?function(t){return A(t)}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":A(t)},Rt(e)}var mu=["event","props","refresh","store"];function uo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Qe(e){for(var t=1;t=0||(b[f]=u[f]);return b}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qt(e){return qt=typeof Symbol=="function"&&A(Symbol.iterator)=="symbol"?function(t){return A(t)}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":A(t)},qt(e)}function co(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Su(e){for(var t=1;t0},reshape:function(g){return g.sources}},b),{},{id:(d=b.id)!==null&&d!==void 0?d:"autocomplete-".concat(Ji++),plugins:S,initialState:nt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},b.initialState),onStateChange:function(g){var y;(y=b.onStateChange)===null||y===void 0||y.call(b,g),S.forEach(function(_){var h;return(h=_.onStateChange)===null||h===void 0?void 0:h.call(_,g)})},onSubmit:function(g){var y;(y=b.onSubmit)===null||y===void 0||y.call(b,g),S.forEach(function(_){var h;return(h=_.onSubmit)===null||h===void 0?void 0:h.call(_,g)})},onReset:function(g){var y;(y=b.onReset)===null||y===void 0||y.call(b,g),S.forEach(function(_){var h;return(h=_.onReset)===null||h===void 0?void 0:h.call(_,g)})},getSources:function(g){return Promise.all([].concat(function(y){return function(_){if(Array.isArray(_))return Ln(_)}(y)||function(_){if(typeof Symbol<"u"&&_[Symbol.iterator]!=null||_["@@iterator"]!=null)return Array.from(_)}(y)||function(_,h){if(_){if(typeof _=="string")return Ln(_,h);var p=Object.prototype.toString.call(_).slice(8,-1);return p==="Object"&&_.constructor&&(p=_.constructor.name),p==="Map"||p==="Set"?Array.from(_):p==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(p)?Ln(_,h):void 0}}(y)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}(S.map(function(y){return y.getSources})),[b.getSources]).filter(Boolean).map(function(y){return function(_,h){var p=[];return Promise.resolve(_(h)).then(function(v){return Promise.all(v.filter(function(P){return!!P}).map(function(P){if(P.sourceId,p.includes(P.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(P.sourceId)," is not unique."));p.push(P.sourceId);var E={getItemInputValue:function(N){return N.state.query},getItemUrl:function(){},onSelect:function(N){(0,N.setIsOpen)(!1)},onActive:hn,onResolve:hn};Object.keys(E).forEach(function(N){E[N].__default=!0});var C=Zr(Zr({},E),P);return Promise.resolve(C)}))})}(y,g)})).then(function(y){return Kt(y)}).then(function(y){return y.map(function(_){return nt(nt({},_),{},{onSelect:function(h){_.onSelect(h),l.forEach(function(p){var v;return(v=p.onSelect)===null||v===void 0?void 0:v.call(p,h)})},onActive:function(h){_.onActive(h),l.forEach(function(p){var v;return(v=p.onActive)===null||v===void 0?void 0:v.call(p,h)})},onResolve:function(h){_.onResolve(h),l.forEach(function(p){var v;return(v=p.onResolve)===null||v===void 0?void 0:v.call(p,h)})}})})})},navigator:nt({navigate:function(g){var y=g.itemUrl;s.location.assign(y)},navigateNewTab:function(g){var y=g.itemUrl,_=s.open(y,"_blank","noopener");_==null||_.focus()},navigateNewWindow:function(g){var y=g.itemUrl;s.open(y,"_blank","noopener")}},b.navigator)})}(e,t),r=function(b,l,d){var s,S=l.initialState;return{getState:function(){return S},dispatch:function(g,y){var _=function(h){for(var p=1;p=0||(qe[je]=Ee[je]);return qe}(K,J);if(Object.getOwnPropertySymbols){var vt=Object.getOwnPropertySymbols(K);for(se=0;se=0||Object.prototype.propertyIsEnumerable.call(K,G)&&(ee[G]=K[G])}return ee}(x,mu);if(k.key==="ArrowUp"||k.key==="ArrowDown"){var O=function(){var K=Ye(q.getState()),J=U.environment.document.getElementById(be(U.id,"item-".concat(q.getState().activeItemId),K==null?void 0:K.source));J&&(J.scrollIntoViewIfNeeded?J.scrollIntoViewIfNeeded(!1):J.scrollIntoView(!1))},w=function(){var K=Ye(q.getState());if(q.getState().activeItemId!==null&&K){var J=K.item,G=K.itemInputValue,se=K.itemUrl,ee=K.source;ee.onActive(Qe({event:k,item:J,itemInputValue:G,itemUrl:se,refresh:z,source:ee,state:q.getState()},oe))}};k.preventDefault(),q.getState().isOpen===!1&&(U.openOnFocus||q.getState().query)?Je(Qe({event:k,props:U,query:q.getState().query,refresh:z,store:q},oe)).then(function(){q.dispatch(k.key,{nextActiveItemId:U.defaultActiveItemId}),w(),setTimeout(O,0)}):(q.dispatch(k.key,{}),w(),O())}else if(k.key==="Escape")k.preventDefault(),q.dispatch(k.key,null),q.pendingRequests.cancelAll();else if(k.key==="Tab")q.dispatch("blur",null),q.pendingRequests.cancelAll();else if(k.key==="Enter"){if(q.getState().activeItemId===null||q.getState().collections.every(function(K){return K.items.length===0}))return void(U.debug||q.pendingRequests.cancelAll());k.preventDefault();var j=Ye(q.getState()),R=j.item,D=j.itemInputValue,L=j.itemUrl,W=j.source;if(k.metaKey||k.ctrlKey)L!==void 0&&(W.onSelect(Qe({event:k,item:R,itemInputValue:D,itemUrl:L,refresh:z,source:W,state:q.getState()},oe)),U.navigator.navigateNewTab({itemUrl:L,item:R,state:q.getState()}));else if(k.shiftKey)L!==void 0&&(W.onSelect(Qe({event:k,item:R,itemInputValue:D,itemUrl:L,refresh:z,source:W,state:q.getState()},oe)),U.navigator.navigateNewWindow({itemUrl:L,item:R,state:q.getState()}));else if(!k.altKey){if(L!==void 0)return W.onSelect(Qe({event:k,item:R,itemInputValue:D,itemUrl:L,refresh:z,source:W,state:q.getState()},oe)),void U.navigator.navigate({itemUrl:L,item:R,state:q.getState()});Je(Qe({event:k,nextState:{isOpen:!1},props:U,query:D,refresh:z,store:q},oe)).then(function(){W.onSelect(Qe({event:k,item:R,itemInputValue:D,itemUrl:L,refresh:z,source:W,state:q.getState()},oe))})}}}(ie({event:I,props:l,refresh:d,store:s},S))},onFocus:_,onBlur:hn,onClick:function(I){g.inputElement!==l.environment.document.activeElement||s.getState().isOpen||_(I)}},P)},getPanelProps:function(g){return ie({onMouseDown:function(y){y.preventDefault()},onMouseLeave:function(){s.dispatch("mouseleave",null)}},g)},getListProps:function(g){var y=g||{},_=y.source,h=ot(y,_u);return ie({role:"listbox","aria-labelledby":be(l.id,"label"),id:be(l.id,"list",_)},h)},getItemProps:function(g){var y=g.item,_=g.source,h=ot(g,gu);return ie({id:be(l.id,"item-".concat(y.__autocomplete_id),_),role:"option","aria-selected":s.getState().activeItemId===y.__autocomplete_id,onMouseMove:function(p){if(y.__autocomplete_id!==s.getState().activeItemId){s.dispatch("mousemove",y.__autocomplete_id);var v=Ye(s.getState());if(s.getState().activeItemId!==null&&v){var P=v.item,E=v.itemInputValue,C=v.itemUrl,N=v.source;N.onActive(ie({event:p,item:P,itemInputValue:E,itemUrl:C,refresh:d,source:N,state:s.getState()},S))}}},onMouseDown:function(p){p.preventDefault()},onClick:function(p){var v=_.getItemInputValue({item:y,state:s.getState()}),P=_.getItemUrl({item:y,state:s.getState()});(P?Promise.resolve():Je(ie({event:p,nextState:{isOpen:!1},props:l,query:v,refresh:d,store:s},S))).then(function(){_.onSelect(ie({event:p,item:y,itemInputValue:v,itemUrl:P,refresh:d,source:_,state:s.getState()},S))})}},h)}}}($e({props:n,refresh:u,store:r,navigator:n.navigator},o));function u(){return Je($e({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:u,store:r},o))}function c(b){b.forEach(function(l){var d;return(d=l.subscribe)===null||d===void 0?void 0:d.call(l,$e($e({},o),{},{navigator:n.navigator,refresh:u,onSelect:function(s){t.push({onSelect:s})},onActive:function(s){t.push({onActive:s})},onResolve:function(s){t.push({onResolve:s})}}))})}function f(){return n.plugins.some(function(b){return b.name==="aa.algoliaInsightsPlugin"})}if(n.insights&&!f()){var m=typeof n.insights=="boolean"?{}:n.insights;n.plugins.push(Wr(m))}return c(n.plugins),function(b){var l,d,s=b.metadata,S=b.environment;if(!((l=S.navigator)===null||l===void 0||(d=l.userAgent)===null||d===void 0)&&d.includes("Algolia Crawler")){var g=S.document.createElement("meta"),y=S.document.querySelector("head");g.name="algolia:metadata",setTimeout(function(){g.content=JSON.stringify(s),y.appendChild(g)},0)}}({metadata:Ou({plugins:n.plugins,options:e}),environment:n.environment}),$e($e({refresh:u,navigator:n.navigator},i),o)}function Iu(e){var t=e.translations,n=(t===void 0?{}:t).searchByText,r=n===void 0?"Search by":n;return a.createElement("a",{href:"https://www.algolia.com/ref/docsearch/?utm_source=".concat(window.location.hostname,"&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch"),target:"_blank",rel:"noopener noreferrer"},a.createElement("span",{className:"DocSearch-Label"},r),a.createElement("svg",{width:"77",height:"19","aria-label":"Algolia",role:"img",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 2196.2 500"},a.createElement("defs",null,a.createElement("style",null,".cls-1,.cls-2{fill:#003dff;}.cls-2{fill-rule:evenodd;}")),a.createElement("path",{className:"cls-2",d:"M1070.38,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z"}),a.createElement("rect",{className:"cls-1",x:"1845.88",y:"104.73",width:"62.58",height:"277.9",rx:"5.9",ry:"5.9"}),a.createElement("path",{className:"cls-2",d:"M1851.78,71.38h50.77c3.26,0,5.9-2.64,5.9-5.9V5.9c0-3.62-3.24-6.39-6.82-5.83l-50.77,7.95c-2.87,.45-4.99,2.92-4.99,5.83v51.62c0,3.26,2.64,5.9,5.9,5.9Z"}),a.createElement("path",{className:"cls-2",d:"M1764.03,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z"}),a.createElement("path",{className:"cls-2",d:"M1631.95,142.72c-11.14-12.25-24.83-21.65-40.78-28.31-15.92-6.53-33.26-9.85-52.07-9.85-18.78,0-36.15,3.17-51.92,9.85-15.59,6.66-29.29,16.05-40.76,28.31-11.47,12.23-20.38,26.87-26.76,44.03-6.38,17.17-9.24,37.37-9.24,58.36,0,20.99,3.19,36.87,9.55,54.21,6.38,17.32,15.14,32.11,26.45,44.36,11.29,12.23,24.83,21.62,40.6,28.46,15.77,6.83,40.12,10.33,52.4,10.48,12.25,0,36.78-3.82,52.7-10.48,15.92-6.68,29.46-16.23,40.78-28.46,11.29-12.25,20.05-27.04,26.25-44.36,6.22-17.34,9.24-33.22,9.24-54.21,0-20.99-3.34-41.19-10.03-58.36-6.38-17.17-15.14-31.8-26.43-44.03Zm-44.43,163.75c-11.47,15.75-27.56,23.7-48.09,23.7-20.55,0-36.63-7.8-48.1-23.7-11.47-15.75-17.21-34.01-17.21-61.2,0-26.89,5.59-49.14,17.06-64.87,11.45-15.75,27.54-23.52,48.07-23.52,20.55,0,36.63,7.78,48.09,23.52,11.47,15.57,17.36,37.98,17.36,64.87,0,27.19-5.72,45.3-17.19,61.2Z"}),a.createElement("path",{className:"cls-2",d:"M894.42,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z"}),a.createElement("path",{className:"cls-2",d:"M2133.97,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z"}),a.createElement("path",{className:"cls-2",d:"M1314.05,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-11.79,18.34-19.6,39.64-22.11,62.59-.58,5.3-.88,10.68-.88,16.14s.31,11.15,.93,16.59c4.28,38.09,23.14,71.61,50.66,94.52,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47h0c17.99,0,34.61-5.93,48.16-15.97,16.29-11.58,28.88-28.54,34.48-47.75v50.26h-.11v11.08c0,21.84-5.71,38.27-17.34,49.36-11.61,11.08-31.04,16.63-58.25,16.63-11.12,0-28.79-.59-46.6-2.41-2.83-.29-5.46,1.5-6.27,4.22l-12.78,43.11c-1.02,3.46,1.27,7.02,4.83,7.53,21.52,3.08,42.52,4.68,54.65,4.68,48.91,0,85.16-10.75,108.89-32.21,21.48-19.41,33.15-48.89,35.2-88.52V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,64.1s.65,139.13,0,143.36c-12.08,9.77-27.11,13.59-43.49,14.7-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-1.32,0-2.63-.03-3.94-.1-40.41-2.11-74.52-37.26-74.52-79.38,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33Z"}),a.createElement("path",{className:"cls-1",d:"M249.83,0C113.3,0,2,110.09,.03,246.16c-2,138.19,110.12,252.7,248.33,253.5,42.68,.25,83.79-10.19,120.3-30.03,3.56-1.93,4.11-6.83,1.08-9.51l-23.38-20.72c-4.75-4.21-11.51-5.4-17.36-2.92-25.48,10.84-53.17,16.38-81.71,16.03-111.68-1.37-201.91-94.29-200.13-205.96,1.76-110.26,92-199.41,202.67-199.41h202.69V407.41l-115-102.18c-3.72-3.31-9.42-2.66-12.42,1.31-18.46,24.44-48.53,39.64-81.93,37.34-46.33-3.2-83.87-40.5-87.34-86.81-4.15-55.24,39.63-101.52,94-101.52,49.18,0,89.68,37.85,93.91,85.95,.38,4.28,2.31,8.27,5.52,11.12l29.95,26.55c3.4,3.01,8.79,1.17,9.63-3.3,2.16-11.55,2.92-23.58,2.07-35.92-4.82-70.34-61.8-126.93-132.17-131.26-80.68-4.97-148.13,58.14-150.27,137.25-2.09,77.1,61.08,143.56,138.19,145.26,32.19,.71,62.03-9.41,86.14-26.95l150.26,133.2c6.44,5.71,16.61,1.14,16.61-7.47V9.48C499.66,4.25,495.42,0,490.18,0H249.83Z"})))}function fn(e){return a.createElement("svg",{width:"15",height:"15","aria-label":e.ariaLabel,role:"img"},a.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function ku(e){var t=e.translations,n=t===void 0?{}:t,r=n.selectText,o=r===void 0?"to select":r,i=n.selectKeyAriaLabel,u=i===void 0?"Enter key":i,c=n.navigateText,f=c===void 0?"to navigate":c,m=n.navigateUpKeyAriaLabel,b=m===void 0?"Arrow up":m,l=n.navigateDownKeyAriaLabel,d=l===void 0?"Arrow down":l,s=n.closeText,S=s===void 0?"to close":s,g=n.closeKeyAriaLabel,y=g===void 0?"Escape key":g,_=n.searchByText,h=_===void 0?"Search by":_;return a.createElement(a.Fragment,null,a.createElement("div",{className:"DocSearch-Logo"},a.createElement(Iu,{translations:{searchByText:h}})),a.createElement("ul",{className:"DocSearch-Commands"},a.createElement("li",null,a.createElement("kbd",{className:"DocSearch-Commands-Key"},a.createElement(fn,{ariaLabel:u},a.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),a.createElement("span",{className:"DocSearch-Label"},o)),a.createElement("li",null,a.createElement("kbd",{className:"DocSearch-Commands-Key"},a.createElement(fn,{ariaLabel:d},a.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),a.createElement("kbd",{className:"DocSearch-Commands-Key"},a.createElement(fn,{ariaLabel:b},a.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),a.createElement("span",{className:"DocSearch-Label"},f)),a.createElement("li",null,a.createElement("kbd",{className:"DocSearch-Commands-Key"},a.createElement(fn,{ariaLabel:y},a.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),a.createElement("span",{className:"DocSearch-Label"},S))))}function Du(e){var t=e.hit,n=e.children;return a.createElement("a",{href:t.url},n)}function Cu(){return a.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},a.createElement("g",{fill:"none",fillRule:"evenodd"},a.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},a.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),a.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},a.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}function xu(){return a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},a.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},a.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),a.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function Gn(){return a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},a.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function Au(){return a.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},a.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},a.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),a.createElement("path",{d:"M8 17l-6-6 6-6"})))}var Nu=function(){return a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},a.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Tu(e){switch(e.type){case"lvl1":return a.createElement(Nu,null);case"content":return a.createElement(Lu,null);default:return a.createElement(Ru,null)}}function Ru(){return a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},a.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function Lu(){return a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},a.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function mo(){return a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},a.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function qu(){return a.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},a.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function Mu(){return a.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},a.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}function Hu(e){var t=e.translations,n=t===void 0?{}:t,r=n.titleText,o=r===void 0?"Unable to fetch results":r,i=n.helpText,u=i===void 0?"You might want to check your network connection.":i;return a.createElement("div",{className:"DocSearch-ErrorScreen"},a.createElement("div",{className:"DocSearch-Screen-Icon"},a.createElement(qu,null)),a.createElement("p",{className:"DocSearch-Title"},o),a.createElement("p",{className:"DocSearch-Help"},u))}var Uu=["translations"];function Fu(e){var t=e.translations,n=t===void 0?{}:t,r=xe(e,Uu),o=n.noResultsText,i=o===void 0?"No results for":o,u=n.suggestedQueryText,c=u===void 0?"Try searching for":u,f=n.reportMissingResultsText,m=f===void 0?"Believe this query should return results?":f,b=n.reportMissingResultsLinkText,l=b===void 0?"Let us know.":b,d=r.state.context.searchSuggestions;return a.createElement("div",{className:"DocSearch-NoResults"},a.createElement("div",{className:"DocSearch-Screen-Icon"},a.createElement(Mu,null)),a.createElement("p",{className:"DocSearch-Title"},i,' "',a.createElement("strong",null,r.state.query),'"'),d&&d.length>0&&a.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},a.createElement("p",{className:"DocSearch-Help"},c,":"),a.createElement("ul",null,d.slice(0,3).reduce(function(s,S){return[].concat(jt(s),[a.createElement("li",{key:S},a.createElement("button",{className:"DocSearch-Prefill",key:S,type:"button",onClick:function(){r.setQuery(S.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},S))])},[]))),r.getMissingResultsUrl&&a.createElement("p",{className:"DocSearch-Help"},"".concat(m," "),a.createElement("a",{href:r.getMissingResultsUrl({query:r.state.query}),target:"_blank",rel:"noopener noreferrer"},l)))}var Bu=["hit","attribute","tagName"];function po(e,t){return t.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},e)}function it(e){var t=e.hit,n=e.attribute,r=e.tagName;return De(r===void 0?"span":r,B(B({},xe(e,Bu)),{},{dangerouslySetInnerHTML:{__html:po(t,"_snippetResult.".concat(n,".value"))||po(t,n)}}))}function Yn(e){return e.collection&&e.collection.items.length!==0?a.createElement("section",{className:"DocSearch-Hits"},a.createElement("div",{className:"DocSearch-Hit-source"},e.title),a.createElement("ul",e.getListProps(),e.collection.items.map(function(t,n){return a.createElement(Vu,le({key:[e.title,t.objectID].join(":"),item:t,index:n},e))}))):null}function Vu(e){var t=e.item,n=e.index,r=e.renderIcon,o=e.renderAction,i=e.getItemProps,u=e.onItemClick,c=e.collection,f=e.hitComponent,m=he(a.useState(!1),2),b=m[0],l=m[1],d=he(a.useState(!1),2),s=d[0],S=d[1],g=a.useRef(null),y=f;return a.createElement("li",le({className:["DocSearch-Hit",t.__docsearch_parent&&"DocSearch-Hit--Child",b&&"DocSearch-Hit--deleting",s&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){g.current&&g.current()}},i({item:t,source:c.source,onClick:function(_){u(t,_)}})),a.createElement(y,{hit:t},a.createElement("div",{className:"DocSearch-Hit-Container"},r({item:t,index:n}),t.hierarchy[t.type]&&t.type==="lvl1"&&a.createElement("div",{className:"DocSearch-Hit-content-wrapper"},a.createElement(it,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.lvl1"}),t.content&&a.createElement(it,{className:"DocSearch-Hit-path",hit:t,attribute:"content"})),t.hierarchy[t.type]&&(t.type==="lvl2"||t.type==="lvl3"||t.type==="lvl4"||t.type==="lvl5"||t.type==="lvl6")&&a.createElement("div",{className:"DocSearch-Hit-content-wrapper"},a.createElement(it,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.".concat(t.type)}),a.createElement(it,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),t.type==="content"&&a.createElement("div",{className:"DocSearch-Hit-content-wrapper"},a.createElement(it,{className:"DocSearch-Hit-title",hit:t,attribute:"content"}),a.createElement(it,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),o({item:t,runDeleteTransition:function(_){l(!0),g.current=_},runFavoriteTransition:function(_){S(!0),g.current=_}}))))}function ho(e,t,n){return e.reduce(function(r,o){var i=t(o);return r.hasOwnProperty(i)||(r[i]=[]),r[i].length<(n||5)&&r[i].push(o),r},{})}function vo(e){return e}function mn(e){return e.button===1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function Ku(){}var ui=/(|<\/mark>)/g,Wu=RegExp(ui.source);function ai(e){var t,n,r=e;if(!r.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=r.__docsearch_parent?(t=r.__docsearch_parent)===null||t===void 0||(t=t._highlightResult)===null||t===void 0||(t=t.hierarchy)===null||t===void 0?void 0:t.lvl0:(n=e._highlightResult)===null||n===void 0||(n=n.hierarchy)===null||n===void 0?void 0:n.lvl0;return o?o.value&&Wu.test(o.value)?o.value.replace(ui,""):o.value:e.hierarchy.lvl0}function zu(e){return a.createElement("div",{className:"DocSearch-Dropdown-Container"},e.state.collections.map(function(t){if(t.items.length===0)return null;var n=ai(t.items[0]);return a.createElement(Yn,le({},e,{key:t.source.sourceId,title:n,collection:t,renderIcon:function(r){var o,i=r.item,u=r.index;return a.createElement(a.Fragment,null,i.__docsearch_parent&&a.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},a.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},i.__docsearch_parent!==((o=t.items[u+1])===null||o===void 0?void 0:o.__docsearch_parent)?a.createElement("path",{d:"M8 6v21M20 27H8.3"}):a.createElement("path",{d:"M8 6v42M20 27H8.3"}))),a.createElement("div",{className:"DocSearch-Hit-icon"},a.createElement(Tu,{type:i.type})))},renderAction:function(){return a.createElement("div",{className:"DocSearch-Hit-action"},a.createElement(Au,null))}}))}),e.resultsFooterComponent&&a.createElement("section",{className:"DocSearch-HitsFooter"},a.createElement(e.resultsFooterComponent,{state:e.state})))}var Ju=["translations"];function Qu(e){var t=e.translations,n=t===void 0?{}:t,r=xe(e,Ju),o=n.recentSearchesTitle,i=o===void 0?"Recent":o,u=n.noRecentSearchesText,c=u===void 0?"No recent searches":u,f=n.saveRecentSearchButtonTitle,m=f===void 0?"Save this search":f,b=n.removeRecentSearchButtonTitle,l=b===void 0?"Remove this search from history":b,d=n.favoriteSearchesTitle,s=d===void 0?"Favorite":d,S=n.removeFavoriteSearchButtonTitle,g=S===void 0?"Remove this search from favorites":S;return r.state.status==="idle"&&r.hasCollections===!1?r.disableUserPersonalization?null:a.createElement("div",{className:"DocSearch-StartScreen"},a.createElement("p",{className:"DocSearch-Help"},c)):r.hasCollections===!1?null:a.createElement("div",{className:"DocSearch-Dropdown-Container"},a.createElement(Yn,le({},r,{title:i,collection:r.state.collections[0],renderIcon:function(){return a.createElement("div",{className:"DocSearch-Hit-icon"},a.createElement(xu,null))},renderAction:function(y){var _=y.item,h=y.runFavoriteTransition,p=y.runDeleteTransition;return a.createElement(a.Fragment,null,a.createElement("div",{className:"DocSearch-Hit-action"},a.createElement("button",{className:"DocSearch-Hit-action-button",title:m,type:"submit",onClick:function(v){v.preventDefault(),v.stopPropagation(),h(function(){r.favoriteSearches.add(_),r.recentSearches.remove(_),r.refresh()})}},a.createElement(mo,null))),a.createElement("div",{className:"DocSearch-Hit-action"},a.createElement("button",{className:"DocSearch-Hit-action-button",title:l,type:"submit",onClick:function(v){v.preventDefault(),v.stopPropagation(),p(function(){r.recentSearches.remove(_),r.refresh()})}},a.createElement(Gn,null))))}})),a.createElement(Yn,le({},r,{title:s,collection:r.state.collections[1],renderIcon:function(){return a.createElement("div",{className:"DocSearch-Hit-icon"},a.createElement(mo,null))},renderAction:function(y){var _=y.item,h=y.runDeleteTransition;return a.createElement("div",{className:"DocSearch-Hit-action"},a.createElement("button",{className:"DocSearch-Hit-action-button",title:g,type:"submit",onClick:function(p){p.preventDefault(),p.stopPropagation(),h(function(){r.favoriteSearches.remove(_),r.refresh()})}},a.createElement(Gn,null)))}})))}var $u=["translations"],Zu=a.memo(function(e){var t=e.translations,n=t===void 0?{}:t,r=xe(e,$u);if(r.state.status==="error")return a.createElement(Hu,{translations:n==null?void 0:n.errorScreen});var o=r.state.collections.some(function(i){return i.items.length>0});return r.state.query?o===!1?a.createElement(Fu,le({},r,{translations:n==null?void 0:n.noResultsScreen})):a.createElement(zu,r):a.createElement(Qu,le({},r,{hasCollections:o,translations:n==null?void 0:n.startScreen}))},function(e,t){return t.state.status==="loading"||t.state.status==="stalled"}),Gu=["translations"];function Yu(e){var t=e.translations,n=t===void 0?{}:t,r=xe(e,Gu),o=n.resetButtonTitle,i=o===void 0?"Clear the query":o,u=n.resetButtonAriaLabel,c=u===void 0?"Clear the query":u,f=n.cancelButtonText,m=f===void 0?"Cancel":f,b=n.cancelButtonAriaLabel,l=b===void 0?"Cancel":b,d=n.searchInputLabel,s=d===void 0?"Search":d,S=r.getFormProps({inputElement:r.inputRef.current}).onReset;return a.useEffect(function(){r.autoFocus&&r.inputRef.current&&r.inputRef.current.focus()},[r.autoFocus,r.inputRef]),a.useEffect(function(){r.isFromSelection&&r.inputRef.current&&r.inputRef.current.select()},[r.isFromSelection,r.inputRef]),a.createElement(a.Fragment,null,a.createElement("form",{className:"DocSearch-Form",onSubmit:function(g){g.preventDefault()},onReset:S},a.createElement("label",le({className:"DocSearch-MagnifierLabel"},r.getLabelProps()),a.createElement(Yo,null),a.createElement("span",{className:"DocSearch-VisuallyHiddenForAccessibility"},s)),a.createElement("div",{className:"DocSearch-LoadingIndicator"},a.createElement(Cu,null)),a.createElement("input",le({className:"DocSearch-Input",ref:r.inputRef},r.getInputProps({inputElement:r.inputRef.current,autoFocus:r.autoFocus,maxLength:64}))),a.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":c,hidden:!r.state.query},a.createElement(Gn,null))),a.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":l,onClick:r.onClose},m))}var Xu=["_highlightResult","_snippetResult"];function yo(e){var t=e.key,n=e.limit,r=n===void 0?5:n,o=function(u){return function(){var c="__TEST_KEY__";try{return localStorage.setItem(c,""),localStorage.removeItem(c),!0}catch{return!1}}()===!1?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(c){return window.localStorage.setItem(u,JSON.stringify(c))},getItem:function(){var c=window.localStorage.getItem(u);return c?JSON.parse(c):[]}}}(t),i=o.getItem().slice(0,r);return{add:function(u){var c=u;c._highlightResult,c._snippetResult;var f=xe(c,Xu),m=i.findIndex(function(b){return b.objectID===f.objectID});m>-1&&i.splice(m,1),i.unshift(f),i=i.slice(0,r),o.setItem(i)},remove:function(u){i=i.filter(function(c){return c.objectID!==u.objectID}),o.setItem(i)},getAll:function(){return i}}}function ea(e){var t,n="algolia-client-js-".concat(e.key);function r(){return t===void 0&&(t=e.localStorage||window.localStorage),t}function o(){return JSON.parse(r().getItem(n)||"{}")}function i(u){r().setItem(n,JSON.stringify(u))}return{get:function(u,c){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then(function(){var m,b,l;return m=e.timeToLive?1e3*e.timeToLive:null,b=o(),i(l=Object.fromEntries(Object.entries(b).filter(function(d){return he(d,2)[1].timestamp!==void 0}))),m&&i(Object.fromEntries(Object.entries(l).filter(function(d){var s=he(d,2)[1],S=new Date().getTime();return!(s.timestamp+m2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return o().then(function(u){return Promise.all([u,i.miss(u)])}).then(function(u){return he(u,1)[0]})},set:function(r,o){return Promise.resolve(o)},delete:function(r){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(r,o){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(r,o,i).catch(function(){return wt({caches:t}).get(r,o,i)})},set:function(r,o){return n.set(r,o).catch(function(){return wt({caches:t}).set(r,o)})},delete:function(r){return n.delete(r).catch(function(){return wt({caches:t}).delete(r)})},clear:function(){return n.clear().catch(function(){return wt({caches:t}).clear()})}}}function Hn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{serializable:!0},t={};return{get:function(n,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}},i=JSON.stringify(n);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);var u=r();return u.then(function(c){return o.miss(c)}).then(function(){return u})},set:function(n,r){return t[JSON.stringify(n)]=e.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete:function(n){return delete t[JSON.stringify(n)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function ta(e){var t=e.algoliaAgents,n=e.client,r=e.version,o=function(i){var u={value:"Algolia for JavaScript (".concat(i,")"),add:function(c){var f="; ".concat(c.segment).concat(c.version!==void 0?" (".concat(c.version,")"):"");return u.value.indexOf(f)===-1&&(u.value="".concat(u.value).concat(f)),u}};return u}(r).add({segment:n,version:r});return t.forEach(function(i){return o.add(i)}),o}var _o=12e4;function go(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"up",n=Date.now();return B(B({},e),{},{status:t,lastUpdate:n,isUp:function(){return t==="up"||Date.now()-n>_o},isTimedOut:function(){return t==="timed out"&&Date.now()-n<=_o}})}var ci=function(){function e(t,n){var r;return mt(this,e),dt(r=ft(this,e,[t]),"name","AlgoliaError"),n&&(r.name=n),r}return ht(e,$n(Error)),pt(e)}(),li=function(){function e(t,n,r){var o;return mt(this,e),dt(o=ft(this,e,[t,r]),"stackTrace",void 0),o.stackTrace=n,o}return ht(e,ci),pt(e)}(),na=function(){function e(t){return mt(this,e),ft(this,e,["Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support.",t,"RetryError"])}return ht(e,li),pt(e)}(),Xn=function(){function e(t,n,r){var o,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"ApiError";return mt(this,e),dt(o=ft(this,e,[t,r,i]),"status",void 0),o.status=n,o}return ht(e,li),pt(e)}(),ra=function(){function e(t,n){var r;return mt(this,e),dt(r=ft(this,e,[t,"DeserializationError"]),"response",void 0),r.response=n,r}return ht(e,ci),pt(e)}(),oa=function(){function e(t,n,r,o){var i;return mt(this,e),dt(i=ft(this,e,[t,n,o,"DetailedApiError"]),"error",void 0),i.error=r,i}return ht(e,Xn),pt(e)}();function ia(e,t,n){var r,o=(r=n,Object.keys(r).filter(function(u){return r[u]!==void 0}).sort().map(function(u){return"".concat(u,"=").concat(encodeURIComponent(Object.prototype.toString.call(r[u])==="[object Array]"?r[u].join(","):r[u]).replace(/\+/g,"%20"))}).join("&")),i="".concat(e.protocol,"://").concat(e.url).concat(e.port?":".concat(e.port):"","/").concat(t.charAt(0)==="/"?t.substring(1):t);return o.length&&(i+="?".concat(o)),i}function ua(e,t){if(e.method!=="GET"&&(e.data!==void 0||t.data!==void 0)){var n=Array.isArray(e.data)?e.data:B(B({},e.data),t.data);return JSON.stringify(n)}}function aa(e,t,n){var r=B(B(B({Accept:"application/json"},e),t),n),o={};return Object.keys(r).forEach(function(i){var u=r[i];o[i.toLowerCase()]=u}),o}function ca(e){try{return JSON.parse(e.content)}catch(t){throw new ra(t.message,e)}}function la(e,t){var n=e.content,r=e.status;try{var o=JSON.parse(n);return"error"in o?new oa(o.message,r,o.error,t):new Xn(o.message,r,t)}catch{}return new Xn(n,r,t)}function sa(e){return e.map(function(t){return si(t)})}function si(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return B(B({},e),{},{request:B(B({},e.request),{},{headers:B(B({},e.request.headers),t)})})}var fa=["appId","apiKey","authMode","algoliaAgents"],ma=["params"],bo="5.14.2";function pa(e){return[{url:"".concat(e,"-dsn.algolia.net"),accept:"read",protocol:"https"},{url:"".concat(e,".algolia.net"),accept:"write",protocol:"https"}].concat(function(t){for(var n=t,r=t.length-1;r>0;r--){var o=Math.floor(Math.random()*(r+1)),i=t[r];n[r]=t[o],n[o]=i}return n}([{url:"".concat(e,"-1.algolianet.com"),accept:"readWrite",protocol:"https"},{url:"".concat(e,"-2.algolianet.com"),accept:"readWrite",protocol:"https"},{url:"".concat(e,"-3.algolianet.com"),accept:"readWrite",protocol:"https"}]))}var er="3.8.2",da=["footer","searchBox"];function ha(e){var t=e.appId,n=e.apiKey,r=e.indexName,o=e.placeholder,i=o===void 0?"Search docs":o,u=e.searchParameters,c=e.maxResultsPerGroup,f=e.onClose,m=f===void 0?Ku:f,b=e.transformItems,l=b===void 0?vo:b,d=e.hitComponent,s=d===void 0?Du:d,S=e.resultsFooterComponent,g=S===void 0?function(){return null}:S,y=e.navigator,_=e.initialScrollY,h=_===void 0?0:_,p=e.transformSearchClient,v=p===void 0?vo:p,P=e.disableUserPersonalization,E=P!==void 0&&P,C=e.initialQuery,N=C===void 0?"":C,I=e.translations,x=I===void 0?{}:I,k=e.getMissingResultsUrl,U=e.insights,z=U!==void 0&&U,q=x.footer,oe=x.searchBox,O=xe(x,da),w=he(a.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),j=w[0],R=w[1],D=a.useRef(null),L=a.useRef(null),W=a.useRef(null),K=a.useRef(null),J=a.useRef(null),G=a.useRef(10),se=a.useRef(typeof window<"u"?window.getSelection().toString().slice(0,64):"").current,ee=a.useRef(N||se).current,vt=function(F,Q,ue){return a.useMemo(function(){var me=function(ve,_e){if(!ve||typeof ve!="string")throw new Error("`appId` is missing.");if(!_e||typeof _e!="string")throw new Error("`apiKey` is missing.");return function(M){var te=M.appId,X=M.apiKey,Pe=M.authMode,Me=M.algoliaAgents,Ie=xe(M,fa),Se=function(T,$){var ne=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"WithinHeaders",ye={"x-algolia-api-key":$,"x-algolia-application-id":T};return{headers:function(){return ne==="WithinHeaders"?ye:{}},queryParameters:function(){return ne==="WithinQueryParameters"?ye:{}}}}(te,X,Pe),pe=function(T){var $=T.hosts,ne=T.hostsCache,ye=T.baseHeaders,ke=T.logger,He=T.baseQueryParameters,Ke=T.algoliaAgent,lr=T.timeouts,sr=T.requester,yt=T.requestsCache,bn=T.responsesCache;function mi(ge){return fr.apply(this,arguments)}function fr(){return(fr=An(Ze().mark(function ge(ae){var re,Ae,ce,de,Ue;return Ze().wrap(function(Ne){for(;;)switch(Ne.prev=Ne.next){case 0:return Ne.next=2,Promise.all(ae.map(function(fe){return ne.get(fe,function(){return Promise.resolve(go(fe))})}));case 2:return re=Ne.sent,Ae=re.filter(function(fe){return fe.isUp()}),ce=re.filter(function(fe){return fe.isTimedOut()}),de=[].concat(jt(Ae),jt(ce)),Ue=de.length>0?de:ae,Ne.abrupt("return",{hosts:Ue,getTimeout:function(fe,et){return(ce.length===0&&fe===0?1:ce.length+3+fe)*et}});case 8:case"end":return Ne.stop()}},ge)}))).apply(this,arguments)}function mr(ge,ae){return Sn.apply(this,arguments)}function Sn(){return Sn=An(Ze().mark(function ge(ae,re){var Ae,ce,de,Ue,Ne,fe,et,On,We,Zt,wn,pr,En,jn=arguments;return Ze().wrap(function(tt){for(;;)switch(tt.prev=tt.next){case 0:if(Ae=!(jn.length>2&&jn[2]!==void 0)||jn[2],ce=[],de=ua(ae,re),Ue=aa(ye,ae.headers,re.headers),Ne=ae.method==="GET"?B(B({},ae.data),re.data):{},fe=B(B(B({},He),ae.queryParameters),Ne),Ke.value&&(fe["x-algolia-agent"]=Ke.value),re&&re.queryParameters)for(et=0,On=Object.keys(re.queryParameters);et1&&arguments[1]!==void 0?arguments[1]:{},re=ge.useReadTransporter||ge.method==="GET";if(!re)return mr(ge,ae,re);var Ae=function(){return mr(ge,ae)};if((ae.cacheable||ge.cacheable)!==!0)return Ae();var ce={request:ge,requestOptions:ae,transporter:{queryParameters:He,headers:ye}};return bn.get(ce,function(){return yt.get(ce,function(){return yt.set(ce,Ae()).then(function(de){return Promise.all([yt.delete(ce),de])},function(de){return Promise.all([yt.delete(ce),Promise.reject(de)])}).then(function(de){var Ue=he(de,2);return Ue[0],Ue[1]})})},{miss:function(de){return bn.set(ce,de)}})},requestsCache:yt,responsesCache:bn}}(B(B({hosts:pa(te)},Ie),{},{algoliaAgent:ta({algoliaAgents:Me,client:"Lite",version:bo}),baseHeaders:B(B({"content-type":"text/plain"},Se.headers()),Ie.baseHeaders),baseQueryParameters:B(B({},Se.queryParameters()),Ie.baseQueryParameters)}));return{transporter:pe,appId:te,clearCache:function(){return Promise.all([pe.requestsCache.clear(),pe.responsesCache.clear()]).then(function(){})},get _ua(){return pe.algoliaAgent.value},addAlgoliaAgent:function(T,$){pe.algoliaAgent.add({segment:T,version:$})},setClientApiKey:function(T){var $=T.apiKey;Pe&&Pe!=="WithinHeaders"?pe.baseQueryParameters["x-algolia-api-key"]=$:pe.baseHeaders["x-algolia-api-key"]=$},searchForHits:function(T,$){return this.search(T,$)},searchForFacets:function(T,$){return this.search(T,$)},customPost:function(T,$){var ne=T.path,ye=T.parameters,ke=T.body;if(!ne)throw new Error("Parameter `path` is required when calling `customPost`.");var He={method:"POST",path:"/{path}".replace("{path}",ne),queryParameters:ye||{},headers:{},data:ke||{}};return pe.request(He,$)},getRecommendations:function(T,$){if(T&&Array.isArray(T)&&(T={requests:T}),!T)throw new Error("Parameter `getRecommendationsParams` is required when calling `getRecommendations`.");if(!T.requests)throw new Error("Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.");var ne={method:"POST",path:"/1/indexes/*/recommendations",queryParameters:{},headers:{},data:T,useReadTransporter:!0,cacheable:!0};return pe.request(ne,$)},search:function(T,$){if(T&&Array.isArray(T)){var ne={requests:T.map(function(ke){var He=ke.params,Ke=xe(ke,ma);return Ke.type==="facet"?B(B(B({},Ke),He),{},{type:"facet"}):B(B(B({},Ke),He),{},{facet:void 0,maxFacetHits:void 0,facetQuery:void 0})})};T=ne}if(!T)throw new Error("Parameter `searchMethodParams` is required when calling `search`.");if(!T.requests)throw new Error("Parameter `searchMethodParams.requests` is required when calling `search`.");var ye={method:"POST",path:"/1/indexes/*/queries",queryParameters:{},headers:{},data:T,useReadTransporter:!0,cacheable:!0};return pe.request(ye,$)}}}(B({appId:ve,apiKey:_e,timeouts:{connect:1e3,read:2e3,write:3e4},logger:{debug:function(M,te){return Promise.resolve()},info:function(M,te){return Promise.resolve()},error:function(M,te){return Promise.resolve()}},requester:{send:function(M){return new Promise(function(te){var X=new XMLHttpRequest;X.open(M.method,M.url,!0),Object.keys(M.headers).forEach(function(Se){return X.setRequestHeader(Se,M.headers[Se])});var Pe,Me=function(Se,pe){return setTimeout(function(){X.abort(),te({status:0,content:pe,isTimedOut:!0})},Se)},Ie=Me(M.connectTimeout,"Connection timeout");X.onreadystatechange=function(){X.readyState>X.OPENED&&Pe===void 0&&(clearTimeout(Ie),Pe=Me(M.responseTimeout,"Socket timeout"))},X.onerror=function(){X.status===0&&(clearTimeout(Ie),clearTimeout(Pe),te({content:X.responseText||"Network request failed",status:X.status,isTimedOut:!1}))},X.onload=function(){clearTimeout(Ie),clearTimeout(Pe),te({content:X.responseText,status:X.status,isTimedOut:!1})},X.send(M.data)})}},algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:Hn(),requestsCache:Hn({serializable:!1}),hostsCache:wt({caches:[ea({key:"".concat(bo,"-").concat(ve)}),Hn()]})},void 0))}(F,Q);return me.addAlgoliaAgent("docsearch",er),/docsearch.js \(.*\)/.test(me.transporter.algoliaAgent.value)===!1&&me.addAlgoliaAgent("docsearch-react",er),ue(me)},[F,Q,ue])}(t,n,v),Ee=a.useRef(yo({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(r),limit:10})).current,Ve=a.useRef(yo({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(r),limit:Ee.getAll().length===0?7:4})).current,je=a.useCallback(function(F){if(!E){var Q=F.type==="content"?F.__docsearch_parent:F;Q&&Ee.getAll().findIndex(function(ue){return ue.objectID===Q.objectID})===-1&&Ve.add(Q)}},[Ee,Ve,E]),Xe=a.useCallback(function(F){if(j.context.algoliaInsightsPlugin&&F.__autocomplete_id){var Q=F,ue={eventName:"Item Selected",index:Q.__autocomplete_indexName,items:[Q],positions:[F.__autocomplete_id],queryID:Q.__autocomplete_queryID};j.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(ue)}},[j.context.algoliaInsightsPlugin]),qe=a.useMemo(function(){return Pu({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:ee,context:{searchSuggestions:[]}},insights:z,navigator:y,onStateChange:function(F){R(F.state)},getSources:function(F){var Q=F.query,ue=F.state,me=F.setContext,ve=F.setStatus;if(!Q)return E?[]:[{sourceId:"recentSearches",onSelect:function(M){var te=M.item,X=M.event;je(te),mn(X)||m()},getItemUrl:function(M){return M.item.url},getItems:function(){return Ve.getAll()}},{sourceId:"favoriteSearches",onSelect:function(M){var te=M.item,X=M.event;je(te),mn(X)||m()},getItemUrl:function(M){return M.item.url},getItems:function(){return Ee.getAll()}}];var _e=!!z;return vt.search({requests:[B({query:Q,indexName:r,attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(G.current),"hierarchy.lvl2:".concat(G.current),"hierarchy.lvl3:".concat(G.current),"hierarchy.lvl4:".concat(G.current),"hierarchy.lvl5:".concat(G.current),"hierarchy.lvl6:".concat(G.current),"content:".concat(G.current)],snippetEllipsisText:"…",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:_e},u)]}).catch(function(M){throw M.name==="RetryError"&&ve("error"),M}).then(function(M){var te=M.results[0],X=te.hits,Pe=te.nbHits,Me=ho(X,function(Se){return ai(Se)},c);ue.context.searchSuggestions.length0&&(cr(),J.current&&J.current.focus())},[ee,cr]),a.useEffect(function(){function F(){if(L.current){var Q=.01*window.innerHeight;L.current.style.setProperty("--docsearch-vh","".concat(Q,"px"))}}return F(),window.addEventListener("resize",F),function(){window.removeEventListener("resize",F)}},[]),a.createElement("div",le({ref:D},fi({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container",j.status==="stalled"&&"DocSearch-Container--Stalled",j.status==="error"&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(F){F.target===F.currentTarget&&m()}}),a.createElement("div",{className:"DocSearch-Modal",ref:L},a.createElement("header",{className:"DocSearch-SearchBar",ref:W},a.createElement(Yu,le({},qe,{state:j,autoFocus:ee.length===0,inputRef:J,isFromSelection:!!ee&&ee===se,translations:oe,onClose:m}))),a.createElement("div",{className:"DocSearch-Dropdown",ref:K},a.createElement(Zu,le({},qe,{indexName:r,state:j,hitComponent:s,resultsFooterComponent:g,disableUserPersonalization:E,recentSearches:Ve,favoriteSearches:Ee,inputRef:J,translations:O,getMissingResultsUrl:k,onItemClick:function(F,Q){Xe(F),je(F),mn(Q)||m()}}))),a.createElement("footer",{className:"DocSearch-Footer"},a.createElement(ku,{translations:q}))))}function va(e){var t,n,r=a.useRef(null),o=he(a.useState(!1),2),i=o[0],u=o[1],c=he(a.useState((e==null?void 0:e.initialQuery)||void 0),2),f=c[0],m=c[1],b=a.useCallback(function(){u(!0)},[u]),l=a.useCallback(function(){u(!1),m(e==null?void 0:e.initialQuery)},[u,e.initialQuery]);return function(d){var s=d.isOpen,S=d.onOpen,g=d.onClose,y=d.onInput,_=d.searchButtonRef;a.useEffect(function(){function h(p){var v;if(p.code==="Escape"&&s||((v=p.key)===null||v===void 0?void 0:v.toLowerCase())==="k"&&(p.metaKey||p.ctrlKey)||!function(P){var E=P.target,C=E.tagName;return E.isContentEditable||C==="INPUT"||C==="SELECT"||C==="TEXTAREA"}(p)&&p.key==="/"&&!s)return p.preventDefault(),void(s?g():document.body.classList.contains("DocSearch--active")||S());_&&_.current===document.activeElement&&y&&/[a-zA-Z0-9]/.test(String.fromCharCode(p.keyCode))&&y(p)}return window.addEventListener("keydown",h),function(){window.removeEventListener("keydown",h)}},[s,S,g,y,_])}({isOpen:i,onOpen:b,onClose:l,onInput:a.useCallback(function(d){u(!0),m(d.key)},[u,m]),searchButtonRef:r}),a.createElement(a.Fragment,null,a.createElement(zi,{ref:r,translations:e==null||(t=e.translations)===null||t===void 0?void 0:t.button,onClick:b}),i&&Vo(a.createElement(ha,le({},e,{initialScrollY:window.scrollY,initialQuery:f,translations:e==null||(n=e.translations)===null||n===void 0?void 0:n.modal,onClose:l})),document.body))}function ya(e){Wo(a.createElement(va,Un({},e,{transformSearchClient:function(t){return t.addAlgoliaAgent("docsearch.js",er),e.transformSearchClient?e.transformSearchClient(t):t}})),function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:window;return typeof t=="string"?n.document.querySelector(t):t}(e.container,e.environment))}const _a={id:"docsearch"},Sa=pi({__name:"VPAlgoliaSearchBox",props:{algolia:{}},setup(e){const t=e,n=di(),r=hi(),{site:o,localeIndex:i,lang:u}=Si();vi(c),yi(i,c);async function c(){var s,S;await _i();const b={...t.algolia,...(s=t.algolia.locales)==null?void 0:s[i.value]},l=((S=b.searchParameters)==null?void 0:S.facetFilters)??[],d=[...(Array.isArray(l)?l:[l]).filter(g=>!g.startsWith("lang:")),`lang:${u.value}`];f({...b,searchParameters:{...b.searchParameters,facetFilters:d}})}function f(b){const l=Object.assign({},b,{container:"#docsearch",navigator:{navigate({itemUrl:d}){const{pathname:s}=new URL(window.location.origin+d);r.path===s?window.location.assign(window.location.origin+d):n.go(d)}},transformItems(d){return d.map(s=>Object.assign({},s,{url:m(s.url)}))},hitComponent({hit:d,children:s}){return{__v:null,type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:d.url,children:s}}}});ya(l)}function m(b){const{pathname:l,hash:d}=new URL(b,location.origin);return l.replace(/\.html$/,o.value.cleanUrls?"":".html")+d}return(b,l)=>(gi(),bi("div",_a))}});export{Sa as default}; diff --git a/assets/chunks/framework.CB8iguzh.js b/assets/chunks/framework.CB8iguzh.js new file mode 100644 index 0000000..3056886 --- /dev/null +++ b/assets/chunks/framework.CB8iguzh.js @@ -0,0 +1,18 @@ +/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Os(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ne={},At=[],Ue=()=>{},Oo=()=>!1,Qt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ps=e=>e.startsWith("onUpdate:"),he=Object.assign,Ms=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Po=Object.prototype.hasOwnProperty,Q=(e,t)=>Po.call(e,t),K=Array.isArray,Rt=e=>On(e)==="[object Map]",Gr=e=>On(e)==="[object Set]",G=e=>typeof e=="function",oe=e=>typeof e=="string",Ye=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",Xr=e=>(se(e)||G(e))&&G(e.then)&&G(e.catch),Yr=Object.prototype.toString,On=e=>Yr.call(e),Mo=e=>On(e).slice(8,-1),zr=e=>On(e)==="[object Object]",Is=e=>oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ot=Os(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Io=/-(\w)/g,Ne=Pn(e=>e.replace(Io,(t,n)=>n?n.toUpperCase():"")),Lo=/\B([A-Z])/g,rt=Pn(e=>e.replace(Lo,"-$1").toLowerCase()),Mn=Pn(e=>e.charAt(0).toUpperCase()+e.slice(1)),yn=Pn(e=>e?`on${Mn(e)}`:""),nt=(e,t)=>!Object.is(e,t),Kn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},No=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Fo=e=>{const t=oe(e)?Number(e):NaN;return isNaN(t)?e:t};let tr;const In=()=>tr||(tr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ls(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(Do);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ns(e){let t="";if(oe(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Uo=e=>oe(e)?e:e==null?"":K(e)||se(e)&&(e.toString===Yr||!G(e.toString))?Zr(e)?Uo(e.value):JSON.stringify(e,ei,2):String(e),ei=(e,t)=>Zr(t)?ei(e,t.value):Rt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[qn(s,i)+" =>"]=r,n),{})}:Gr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>qn(n))}:Ye(t)?qn(t):se(t)&&!K(t)&&!zr(t)?String(t):t,qn=(e,t="")=>{var n;return Ye(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class Wo{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(Vt){let t=Vt;for(Vt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;jt;){let t=jt;for(jt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function ii(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function oi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ds(s),Ko(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function gs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(li(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function li(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Bt))return;e.globalVersion=Bt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!gs(e)){e.flags&=-3;return}const n=te,s=He;te=e,He=!0;try{ii(e);const r=e.fn(e._value);(t.version===0||nt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,He=s,oi(e),e.flags&=-3}}function Ds(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ds(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ko(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let He=!0;const ci=[];function it(){ci.push(He),He=!1}function ot(){const e=ci.pop();He=e===void 0?!0:e}function nr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let Bt=0;class qo{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ln{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!He||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new qo(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,fi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,Bt++,this.notify(t)}notify(t){Fs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Hs()}}}function fi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)fi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Sn=new WeakMap,ht=Symbol(""),ms=Symbol(""),Kt=Symbol("");function ye(e,t,n){if(He&&te){let s=Sn.get(e);s||Sn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Ln),r.map=s,r.key=n),r.track()}}function qe(e,t,n,s,r,i){const o=Sn.get(e);if(!o){Bt++;return}const l=c=>{c&&c.trigger()};if(Fs(),t==="clear")o.forEach(l);else{const c=K(e),u=c&&Is(n);if(c&&n==="length"){const f=Number(s);o.forEach((h,y)=>{(y==="length"||y===Kt||!Ye(y)&&y>=f)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),u&&l(o.get(Kt)),t){case"add":c?u&&l(o.get("length")):(l(o.get(ht)),Rt(e)&&l(o.get(ms)));break;case"delete":c||(l(o.get(ht)),Rt(e)&&l(o.get(ms)));break;case"set":Rt(e)&&l(o.get(ht));break}}Hs()}function Go(e,t){const n=Sn.get(e);return n&&n.get(t)}function xt(e){const t=J(e);return t===e?t:(ye(t,"iterate",Kt),Ie(e)?t:t.map(be))}function Nn(e){return ye(e=J(e),"iterate",Kt),e}const Xo={__proto__:null,[Symbol.iterator](){return Xn(this,Symbol.iterator,be)},concat(...e){return xt(this).concat(...e.map(t=>K(t)?xt(t):t))},entries(){return Xn(this,"entries",e=>(e[1]=be(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(be),arguments)},find(e,t){return We(this,"find",e,t,be,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,be,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return Yn(this,"includes",e)},indexOf(...e){return Yn(this,"indexOf",e)},join(e){return xt(this).join(e)},lastIndexOf(...e){return Yn(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ht(this,"pop")},push(...e){return Ht(this,"push",e)},reduce(e,...t){return sr(this,"reduce",e,t)},reduceRight(e,...t){return sr(this,"reduceRight",e,t)},shift(){return Ht(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ht(this,"splice",e)},toReversed(){return xt(this).toReversed()},toSorted(e){return xt(this).toSorted(e)},toSpliced(...e){return xt(this).toSpliced(...e)},unshift(...e){return Ht(this,"unshift",e)},values(){return Xn(this,"values",be)}};function Xn(e,t,n){const s=Nn(e),r=s[t]();return s!==e&&!Ie(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Yo=Array.prototype;function We(e,t,n,s,r,i){const o=Nn(e),l=o!==e&&!Ie(e),c=o[t];if(c!==Yo[t]){const h=c.apply(e,i);return l?be(h):h}let u=n;o!==e&&(l?u=function(h,y){return n.call(this,be(h),y,e)}:n.length>2&&(u=function(h,y){return n.call(this,h,y,e)}));const f=c.call(o,u,s);return l&&r?r(f):f}function sr(e,t,n,s){const r=Nn(e);let i=n;return r!==e&&(Ie(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,be(l),c,e)}),r[t](i,...s)}function Yn(e,t,n){const s=J(e);ye(s,"iterate",Kt);const r=s[t](...n);return(r===-1||r===!1)&&Vs(n[0])?(n[0]=J(n[0]),s[t](...n)):r}function Ht(e,t,n=[]){it(),Fs();const s=J(e)[t].apply(e,n);return Hs(),ot(),s}const zo=Os("__proto__,__v_isRef,__isVue"),ui=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ye));function Jo(e){Ye(e)||(e=String(e));const t=J(this);return ye(t,"has",e),t.hasOwnProperty(e)}class ai{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?ll:gi:i?pi:hi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=Xo[n]))return c;if(n==="hasOwnProperty")return Jo}const l=Reflect.get(t,n,de(t)?t:s);return(Ye(n)?ui.has(n):zo(n))||(r||ye(t,"get",n),i)?l:de(l)?o&&Is(n)?l:l.value:se(l)?r?Fn(l):Mt(l):l}}class di extends ai{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Ie(s)&&!vt(s)&&(i=J(i),s=J(s)),!K(t)&&de(i)&&!de(s))return c?!1:(i.value=s,!0)}const o=K(t)&&Is(n)?Number(n)e,ln=e=>Reflect.getPrototypeOf(e);function nl(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=Rt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),f=n?ys:t?bs:be;return!t&&ye(i,"iterate",c?ms:ht),{next(){const{value:h,done:y}=u.next();return y?{value:h,done:y}:{value:l?[f(h[0]),f(h[1])]:f(h),done:y}},[Symbol.iterator](){return this}}}}function cn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function sl(e,t){const n={get(r){const i=this.__v_raw,o=J(i),l=J(r);e||(nt(r,l)&&ye(o,"get",r),ye(o,"get",l));const{has:c}=ln(o),u=t?ys:e?bs:be;if(c.call(o,r))return u(i.get(r));if(c.call(o,l))return u(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&ye(J(r),"iterate",ht),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=J(i),l=J(r);return e||(nt(r,l)&&ye(o,"has",r),ye(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=J(l),u=t?ys:e?bs:be;return!e&&ye(c,"iterate",ht),l.forEach((f,h)=>r.call(i,u(f),u(h),o))}};return he(n,e?{add:cn("add"),set:cn("set"),delete:cn("delete"),clear:cn("clear")}:{add(r){!t&&!Ie(r)&&!vt(r)&&(r=J(r));const i=J(this);return ln(i).has.call(i,r)||(i.add(r),qe(i,"add",r,r)),this},set(r,i){!t&&!Ie(i)&&!vt(i)&&(i=J(i));const o=J(this),{has:l,get:c}=ln(o);let u=l.call(o,r);u||(r=J(r),u=l.call(o,r));const f=c.call(o,r);return o.set(r,i),u?nt(i,f)&&qe(o,"set",r,i):qe(o,"add",r,i),this},delete(r){const i=J(this),{has:o,get:l}=ln(i);let c=o.call(i,r);c||(r=J(r),c=o.call(i,r)),l&&l.call(i,r);const u=i.delete(r);return c&&qe(i,"delete",r,void 0),u},clear(){const r=J(this),i=r.size!==0,o=r.clear();return i&&qe(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=nl(r,e,t)}),n}function $s(e,t){const n=sl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Q(n,r)&&r in s?n:s,r,i)}const rl={get:$s(!1,!1)},il={get:$s(!1,!0)},ol={get:$s(!0,!1)};const hi=new WeakMap,pi=new WeakMap,gi=new WeakMap,ll=new WeakMap;function cl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fl(e){return e.__v_skip||!Object.isExtensible(e)?0:cl(Mo(e))}function Mt(e){return vt(e)?e:js(e,!1,Zo,rl,hi)}function ul(e){return js(e,!1,tl,il,pi)}function Fn(e){return js(e,!0,el,ol,gi)}function js(e,t,n,s,r){if(!se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=fl(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Ie(e){return!!(e&&e.__v_isShallow)}function Vs(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function bn(e){return!Q(e,"__v_skip")&&Object.isExtensible(e)&&Jr(e,"__v_skip",!0),e}const be=e=>se(e)?Mt(e):e,bs=e=>se(e)?Fn(e):e;function de(e){return e?e.__v_isRef===!0:!1}function ue(e){return mi(e,!1)}function ks(e){return mi(e,!0)}function mi(e,t){return de(e)?e:new al(e,t)}class al{constructor(t,n){this.dep=new Ln,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:J(t),this._value=n?t:be(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Ie(t)||vt(t);t=s?t:J(t),nt(t,n)&&(this._rawValue=t,this._value=s?t:be(t),this.dep.trigger())}}function Us(e){return de(e)?e.value:e}function le(e){return G(e)?e():Us(e)}const dl={get:(e,t,n)=>t==="__v_raw"?e:Us(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return de(r)&&!de(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function yi(e){return pt(e)?e:new Proxy(e,dl)}class hl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Ln,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function pl(e){return new hl(e)}class gl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Go(J(this._object),this._key)}}class ml{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function yl(e,t,n){return de(e)?e:G(e)?new ml(e):se(e)&&arguments.length>1?bl(e,t,n):ue(e)}function bl(e,t,n){const s=e[t];return de(s)?s:new gl(e,t,n)}class _l{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ln(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Bt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return ri(this,!0),!0}get value(){const t=this.dep.track();return li(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vl(e,t,n=!1){let s,r;return G(e)?s=e:(s=e.get,r=e.set),new _l(s,r,n)}const fn={},xn=new WeakMap;let at;function wl(e,t=!1,n=at){if(n){let s=xn.get(n);s||xn.set(n,s=[]),s.push(e)}}function Sl(e,t,n=ne){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,u=g=>r?g:Ie(g)||r===!1||r===0?tt(g,1):tt(g);let f,h,y,b,x=!1,v=!1;if(de(e)?(h=()=>e.value,x=Ie(e)):pt(e)?(h=()=>u(e),x=!0):K(e)?(v=!0,x=e.some(g=>pt(g)||Ie(g)),h=()=>e.map(g=>{if(de(g))return g.value;if(pt(g))return u(g);if(G(g))return c?c(g,2):g()})):G(e)?t?h=c?()=>c(e,2):e:h=()=>{if(y){it();try{y()}finally{ot()}}const g=at;at=f;try{return c?c(e,3,[b]):e(b)}finally{at=g}}:h=Ue,t&&r){const g=h,M=r===!0?1/0:r;h=()=>tt(g(),M)}const j=ti(),L=()=>{f.stop(),j&&j.active&&Ms(j.effects,f)};if(i&&t){const g=t;t=(...M)=>{g(...M),L()}}let D=v?new Array(e.length).fill(fn):fn;const p=g=>{if(!(!(f.flags&1)||!f.dirty&&!g))if(t){const M=f.run();if(r||x||(v?M.some((U,O)=>nt(U,D[O])):nt(M,D))){y&&y();const U=at;at=f;try{const O=[M,D===fn?void 0:v&&D[0]===fn?[]:D,b];c?c(t,3,O):t(...O),D=M}finally{at=U}}}else f.run()};return l&&l(p),f=new ni(h),f.scheduler=o?()=>o(p,!1):p,b=g=>wl(g,!1,f),y=f.onStop=()=>{const g=xn.get(f);if(g){if(c)c(g,4);else for(const M of g)M();xn.delete(f)}},t?s?p(!0):D=f.run():o?o(p.bind(null,!0),!0):f.run(),L.pause=f.pause.bind(f),L.resume=f.resume.bind(f),L.stop=L,L}function tt(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,de(e))tt(e.value,t,n);else if(K(e))for(let s=0;s{tt(s,t,n)});else if(zr(e)){for(const s in e)tt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&tt(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Zt(e,t,n,s){try{return s?e(...s):e()}catch(r){en(r,t,n)}}function De(e,t,n,s){if(G(e)){const r=Zt(e,t,n,s);return r&&Xr(r)&&r.catch(i=>{en(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=Se[s],i=qt(r);i=qt(n)?Se.push(e):Se.splice(El(t),0,e),e.flags|=1,_i()}}function _i(){En||(En=bi.then(vi))}function Tl(e){K(e)?Pt.push(...e):Qe&&e.id===-1?Qe.splice(Tt+1,0,e):e.flags&1||(Pt.push(e),e.flags|=1),_i()}function rr(e,t,n=Ve+1){for(;nqt(n)-qt(s));if(Pt.length=0,Qe){Qe.push(...t);return}for(Qe=t,Tt=0;Tte.id==null?e.flags&2?-1:1/0:e.id;function vi(e){try{for(Ve=0;Ve{s._d&&mr(-1);const i=Cn(t);let o;try{o=e(...r)}finally{Cn(i),s._d&&mr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function ke(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;oe.__isTeleport,Ze=Symbol("_leaveCb"),un=Symbol("_enterCb");function Rl(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Lt(()=>{e.isMounted=!0}),Oi(()=>{e.isUnmounting=!0}),e}const Oe=[Function,Array],xi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Oe,onEnter:Oe,onAfterEnter:Oe,onEnterCancelled:Oe,onBeforeLeave:Oe,onLeave:Oe,onAfterLeave:Oe,onLeaveCancelled:Oe,onBeforeAppear:Oe,onAppear:Oe,onAfterAppear:Oe,onAppearCancelled:Oe},Ei=e=>{const t=e.subTree;return t.component?Ei(t.component):t},Ol={name:"BaseTransition",props:xi,setup(e,{slots:t}){const n=nn(),s=Rl();return()=>{const r=t.default&&Ai(t.default(),!0);if(!r||!r.length)return;const i=Ti(r),o=J(e),{mode:l}=o;if(s.isLeaving)return zn(i);const c=ir(i);if(!c)return zn(i);let u=_s(c,o,s,n,h=>u=h);c.type!==_e&&Gt(c,u);let f=n.subTree&&ir(n.subTree);if(f&&f.type!==_e&&!dt(c,f)&&Ei(n).type!==_e){let h=_s(f,o,s,n);if(Gt(f,h),l==="out-in"&&c.type!==_e)return s.isLeaving=!0,h.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete h.afterLeave,f=void 0},zn(i);l==="in-out"&&c.type!==_e?h.delayLeave=(y,b,x)=>{const v=Ci(s,f);v[String(f.key)]=f,y[Ze]=()=>{b(),y[Ze]=void 0,delete u.delayedLeave,f=void 0},u.delayedLeave=()=>{x(),delete u.delayedLeave,f=void 0}}:f=void 0}else f&&(f=void 0);return i}}};function Ti(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==_e){t=n;break}}return t}const Pl=Ol;function Ci(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 _s(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:y,onLeave:b,onAfterLeave:x,onLeaveCancelled:v,onBeforeAppear:j,onAppear:L,onAfterAppear:D,onAppearCancelled:p}=t,g=String(e.key),M=Ci(n,e),U=(C,I)=>{C&&De(C,s,9,I)},O=(C,I)=>{const A=I[1];U(C,I),K(C)?C.every(_=>_.length<=1)&&A():C.length<=1&&A()},W={mode:o,persisted:l,beforeEnter(C){let I=c;if(!n.isMounted)if(i)I=j||c;else return;C[Ze]&&C[Ze](!0);const A=M[g];A&&dt(e,A)&&A.el[Ze]&&A.el[Ze](),U(I,[C])},enter(C){let I=u,A=f,_=h;if(!n.isMounted)if(i)I=L||u,A=D||f,_=p||h;else return;let F=!1;const Y=C[un]=re=>{F||(F=!0,re?U(_,[C]):U(A,[C]),W.delayedLeave&&W.delayedLeave(),C[un]=void 0)};I?O(I,[C,Y]):Y()},leave(C,I){const A=String(e.key);if(C[un]&&C[un](!0),n.isUnmounting)return I();U(y,[C]);let _=!1;const F=C[Ze]=Y=>{_||(_=!0,I(),Y?U(v,[C]):U(x,[C]),C[Ze]=void 0,M[A]===e&&delete M[A])};M[A]=e,b?O(b,[C,F]):F()},clone(C){const I=_s(C,t,n,s,r);return r&&r(I),I}};return W}function zn(e){if(tn(e))return e=st(e),e.children=null,e}function ir(e){if(!tn(e))return Si(e.type)&&e.children?Ti(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&G(n.default))return n.default()}}function Gt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Gt(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 Ai(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iXt(x,t&&(K(t)?t[v]:t),n,s,r));return}if(gt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Xt(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Xs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,f=l.refs===ne?l.refs={}:l.refs,h=l.setupState,y=J(h),b=h===ne?()=>!1:x=>Q(y,x);if(u!=null&&u!==c&&(oe(u)?(f[u]=null,b(u)&&(h[u]=null)):de(u)&&(u.value=null)),G(c))Zt(c,l,12,[o,f]);else{const x=oe(c),v=de(c);if(x||v){const j=()=>{if(e.f){const L=x?b(c)?h[c]:f[c]:c.value;r?K(L)&&Ms(L,i):K(L)?L.includes(i)||L.push(i):x?(f[c]=[i],b(c)&&(h[c]=f[c])):(c.value=[i],e.k&&(f[e.k]=c.value))}else x?(f[c]=o,b(c)&&(h[c]=o)):v&&(c.value=o,e.k&&(f[e.k]=o))};o?(j.id=-1,Ae(j,n)):j()}}}let or=!1;const Et=()=>{or||(console.error("Hydration completed but contains mismatches."),or=!0)},Ml=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Il=e=>e.namespaceURI.includes("MathML"),an=e=>{if(e.nodeType===1){if(Ml(e))return"svg";if(Il(e))return"mathml"}},Ct=e=>e.nodeType===8;function Ll(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,f=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Tn(),g._vnode=p;return}h(g.firstChild,p,null,null,null),Tn(),g._vnode=p},h=(p,g,M,U,O,W=!1)=>{W=W||!!g.dynamicChildren;const C=Ct(p)&&p.data==="[",I=()=>v(p,g,M,U,O,C),{type:A,ref:_,shapeFlag:F,patchFlag:Y}=g;let re=p.nodeType;g.el=p,Y===-2&&(W=!1,g.dynamicChildren=null);let V=null;switch(A){case bt:re!==3?g.children===""?(c(g.el=r(""),o(p),p),V=p):V=I():(p.data!==g.children&&(Et(),p.data=g.children),V=i(p));break;case _e:D(p)?(V=i(p),L(g.el=p.content.firstChild,p,M)):re!==8||C?V=I():V=i(p);break;case Ut:if(C&&(p=i(p),re=p.nodeType),re===1||re===3){V=p;const X=!g.children.length;for(let $=0;${W=W||!!g.dynamicChildren;const{type:C,props:I,patchFlag:A,shapeFlag:_,dirs:F,transition:Y}=g,re=C==="input"||C==="option";if(re||A!==-1){F&&ke(g,null,M,"created");let V=!1;if(D(p)){V=Gi(null,Y)&&M&&M.vnode.props&&M.vnode.props.appear;const $=p.content.firstChild;V&&Y.beforeEnter($),L($,p,M),g.el=p=$}if(_&16&&!(I&&(I.innerHTML||I.textContent))){let $=b(p.firstChild,g,p,M,U,O,W);for(;$;){dn(p,1)||Et();const fe=$;$=$.nextSibling,l(fe)}}else if(_&8){let $=g.children;$[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&($=$.slice(1)),p.textContent!==$&&(dn(p,0)||Et(),p.textContent=g.children)}if(I){if(re||!W||A&48){const $=p.tagName.includes("-");for(const fe in I)(re&&(fe.endsWith("value")||fe==="indeterminate")||Qt(fe)&&!Ot(fe)||fe[0]==="."||$)&&s(p,fe,null,I[fe],void 0,M)}else if(I.onClick)s(p,"onClick",null,I.onClick,void 0,M);else if(A&4&&pt(I.style))for(const $ in I.style)I.style[$]}let X;(X=I&&I.onVnodeBeforeMount)&&Pe(X,M,g),F&&ke(g,null,M,"beforeMount"),((X=I&&I.onVnodeMounted)||F||V)&&to(()=>{X&&Pe(X,M,g),V&&Y.enter(p),F&&ke(g,null,M,"mounted")},U)}return p.nextSibling},b=(p,g,M,U,O,W,C)=>{C=C||!!g.dynamicChildren;const I=g.children,A=I.length;for(let _=0;_{const{slotScopeIds:C}=g;C&&(O=O?O.concat(C):C);const I=o(p),A=b(i(p),g,I,M,U,O,W);return A&&Ct(A)&&A.data==="]"?i(g.anchor=A):(Et(),c(g.anchor=u("]"),I,A),A)},v=(p,g,M,U,O,W)=>{if(dn(p.parentElement,1)||Et(),g.el=null,W){const A=j(p);for(;;){const _=i(p);if(_&&_!==A)l(_);else break}}const C=i(p),I=o(p);return l(p),n(null,g,I,C,M,U,an(I),O),M&&(M.vnode.el=g.el,Zi(M,g.el)),C},j=(p,g="[",M="]")=>{let U=0;for(;p;)if(p=i(p),p&&Ct(p)&&(p.data===g&&U++,p.data===M)){if(U===0)return i(p);U--}return p},L=(p,g,M)=>{const U=g.parentNode;U&&U.replaceChild(p,g);let O=M;for(;O;)O.vnode.el===g&&(O.vnode.el=O.subTree.el=p),O=O.parent},D=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[f,h]}const lr="data-allow-mismatch",Nl={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function dn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(lr);)e=e.parentElement;const n=e&&e.getAttribute(lr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(Nl[t])}}In().requestIdleCallback;In().cancelIdleCallback;function Fl(e,t){if(Ct(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Ct(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function gu(e){G(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let u=null,f,h=0;const y=()=>(h++,u=null,b()),b=()=>{let x;return u||(x=u=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),c)return new Promise((j,L)=>{c(v,()=>j(y()),()=>L(v),h+1)});throw v}).then(v=>x!==u&&u?u:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),f=v,v)))};return Bs({name:"AsyncComponentWrapper",__asyncLoader:b,__asyncHydrate(x,v,j){const L=i?()=>{const D=i(j,p=>Fl(x,p));D&&(v.bum||(v.bum=[])).push(D)}:j;f?L():b().then(()=>!v.isUnmounted&&L())},get __asyncResolved(){return f},setup(){const x=ae;if(Ks(x),f)return()=>Jn(f,x);const v=p=>{u=null,en(p,x,13,!s)};if(l&&x.suspense||It)return b().then(p=>()=>Jn(p,x)).catch(p=>(v(p),()=>s?ce(s,{error:p}):null));const j=ue(!1),L=ue(),D=ue(!!r);return r&&setTimeout(()=>{D.value=!1},r),o!=null&&setTimeout(()=>{if(!j.value&&!L.value){const p=new Error(`Async component timed out after ${o}ms.`);v(p),L.value=p}},o),b().then(()=>{j.value=!0,x.parent&&tn(x.parent.vnode)&&x.parent.update()}).catch(p=>{v(p),L.value=p}),()=>{if(j.value&&f)return Jn(f,x);if(L.value&&s)return ce(s,{error:L.value});if(n&&!D.value)return ce(n)}}})}function Jn(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ce(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const tn=e=>e.type.__isKeepAlive;function Hl(e,t){Ri(e,"a",t)}function Dl(e,t){Ri(e,"da",t)}function Ri(e,t,n=ae){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Dn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)tn(r.parent.vnode)&&$l(s,t,n,r),r=r.parent}}function $l(e,t,n,s){const r=Dn(t,e,s,!0);$n(()=>{Ms(s[t],r)},n)}function Dn(e,t,n=ae,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=sn(n),c=De(t,n,e,o);return l(),ot(),c});return s?r.unshift(i):r.push(i),i}}const ze=e=>(t,n=ae)=>{(!It||e==="sp")&&Dn(e,(...s)=>t(...s),n)},jl=ze("bm"),Lt=ze("m"),Vl=ze("bu"),kl=ze("u"),Oi=ze("bum"),$n=ze("um"),Ul=ze("sp"),Wl=ze("rtg"),Bl=ze("rtc");function Kl(e,t=ae){Dn("ec",e,t)}const Pi="components";function mu(e,t){return Ii(Pi,e,!0,t)||e}const Mi=Symbol.for("v-ndc");function yu(e){return oe(e)?Ii(Pi,e,!1)||e:e||Mi}function Ii(e,t,n=!0,s=!1){const r=pe||ae;if(r){const i=r.type;{const l=Oc(i,!1);if(l&&(l===t||l===Ne(t)||l===Mn(Ne(t))))return i}const o=cr(r[e]||i[e],t)||cr(r.appContext[e],t);return!o&&s?i:o}}function cr(e,t){return e&&(e[t]||e[Ne(t)]||e[Mn(Ne(t))])}function bu(e,t,n,s){let r;const i=n,o=K(e);if(o||oe(e)){const l=o&&pt(e);let c=!1;l&&(c=!Ie(e),e=Nn(e)),r=new Array(e.length);for(let u=0,f=e.length;ut(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,u=l.length;czt(t)?!(t.type===_e||t.type===xe&&!Li(t.children)):!0)?e:null}function vu(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:yn(s)]=e[s];return n}const vs=e=>e?oo(e)?Xs(e):vs(e.parent):null,kt=he(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=>vs(e.parent),$root:e=>vs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Fi(e),$forceUpdate:e=>e.f||(e.f=()=>{Ws(e.update)}),$nextTick:e=>e.n||(e.n=Hn.bind(e.proxy)),$watch:e=>hc.bind(e)}),Qn=(e,t)=>e!==ne&&!e.__isScriptSetup&&Q(e,t),ql={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const b=o[t];if(b!==void 0)switch(b){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Qn(s,t))return o[t]=1,s[t];if(r!==ne&&Q(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&Q(u,t))return o[t]=3,i[t];if(n!==ne&&Q(n,t))return o[t]=4,n[t];ws&&(o[t]=0)}}const f=kt[t];let h,y;if(f)return t==="$attrs"&&ye(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ne&&Q(n,t))return o[t]=4,n[t];if(y=c.config.globalProperties,Q(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Qn(r,t)?(r[t]=n,!0):s!==ne&&Q(s,t)?(s[t]=n,!0):Q(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!==ne&&Q(e,o)||Qn(t,o)||(l=i[0])&&Q(l,o)||Q(s,o)||Q(kt,o)||Q(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function wu(){return Gl().slots}function Gl(){const e=nn();return e.setupContext||(e.setupContext=co(e))}function fr(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ws=!0;function Xl(e){const t=Fi(e),n=e.proxy,s=e.ctx;ws=!1,t.beforeCreate&&ur(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:f,beforeMount:h,mounted:y,beforeUpdate:b,updated:x,activated:v,deactivated:j,beforeDestroy:L,beforeUnmount:D,destroyed:p,unmounted:g,render:M,renderTracked:U,renderTriggered:O,errorCaptured:W,serverPrefetch:C,expose:I,inheritAttrs:A,components:_,directives:F,filters:Y}=t;if(u&&Yl(u,s,null),o)for(const X in o){const $=o[X];G($)&&(s[X]=$.bind(n))}if(r){const X=r.call(n,n);se(X)&&(e.data=Mt(X))}if(ws=!0,i)for(const X in i){const $=i[X],fe=G($)?$.bind(n,n):G($.get)?$.get.bind(n,n):Ue,rn=!G($)&&G($.set)?$.set.bind(n):Ue,lt=ie({get:fe,set:rn});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const X in l)Ni(l[X],s,n,X);if(c){const X=G(c)?c.call(n):c;Reflect.ownKeys(X).forEach($=>{tc($,X[$])})}f&&ur(f,e,"c");function V(X,$){K($)?$.forEach(fe=>X(fe.bind(n))):$&&X($.bind(n))}if(V(jl,h),V(Lt,y),V(Vl,b),V(kl,x),V(Hl,v),V(Dl,j),V(Kl,W),V(Bl,U),V(Wl,O),V(Oi,D),V($n,g),V(Ul,C),K(I))if(I.length){const X=e.exposed||(e.exposed={});I.forEach($=>{Object.defineProperty(X,$,{get:()=>n[$],set:fe=>n[$]=fe})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),A!=null&&(e.inheritAttrs=A),_&&(e.components=_),F&&(e.directives=F),C&&Ks(e)}function Yl(e,t,n=Ue){K(e)&&(e=Ss(e));for(const s in e){const r=e[s];let i;se(r)?"default"in r?i=yt(r.from||s,r.default,!0):i=yt(r.from||s):i=yt(r),de(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function ur(e,t,n){De(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ni(e,t,n,s){let r=s.includes(".")?Ji(n,s):()=>n[s];if(oe(e)){const i=t[e];G(i)&&Le(r,i)}else if(G(e))Le(r,e.bind(n));else if(se(e))if(K(e))e.forEach(i=>Ni(i,t,n,s));else{const i=G(e.handler)?e.handler.bind(n):t[e.handler];G(i)&&Le(r,i,e)}}function Fi(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(u=>An(c,u,o,!0)),An(c,t,o)),se(t)&&i.set(t,c),c}function An(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&An(e,i,n,!0),r&&r.forEach(o=>An(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=zl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const zl={data:ar,props:dr,emits:dr,methods:$t,computed:$t,beforeCreate:ve,created:ve,beforeMount:ve,mounted:ve,beforeUpdate:ve,updated:ve,beforeDestroy:ve,beforeUnmount:ve,destroyed:ve,unmounted:ve,activated:ve,deactivated:ve,errorCaptured:ve,serverPrefetch:ve,components:$t,directives:$t,watch:Ql,provide:ar,inject:Jl};function ar(e,t){return t?e?function(){return he(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function Jl(e,t){return $t(Ss(e),Ss(t))}function Ss(e){if(K(e)){const t={};for(let n=0;n1)return n&&G(t)?t.call(s&&s.proxy):t}}function Di(){return!!(ae||pe||mt)}const $i={},ji=()=>Object.create($i),Vi=e=>Object.getPrototypeOf(e)===$i;function nc(e,t,n,s=!1){const r={},i=ji();e.propsDefaults=Object.create(null),ki(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:ul(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function sc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[y,b]=Ui(h,t,!0);he(o,y),b&&l.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return se(e)&&s.set(e,At),At;if(K(i))for(let f=0;fe[0]==="_"||e==="$stable",qs=e=>K(e)?e.map(Me):[Me(e)],ic=(e,t,n)=>{if(t._n)return t;const s=Cl((...r)=>qs(t(...r)),n);return s._c=!1,s},Bi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Wi(r))continue;const i=e[r];if(G(i))t[r]=ic(r,i,s);else if(i!=null){const o=qs(i);t[r]=()=>o}}},Ki=(e,t)=>{const n=qs(t);e.slots.default=()=>n},qi=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},oc=(e,t,n)=>{const s=e.slots=ji();if(e.vnode.shapeFlag&32){const r=t._;r?(qi(s,t,n),n&&Jr(s,"_",r,!0)):Bi(t,s)}else t&&Ki(e,t)},lc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ne;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:qi(r,t,n):(i=!t.$stable,Bi(t,r)),o=t}else t&&(Ki(e,t),o={default:1});if(i)for(const l in r)!Wi(l)&&o[l]==null&&delete r[l]},Ae=to;function cc(e){return fc(e,Ll)}function fc(e,t){const n=In();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:f,parentNode:h,nextSibling:y,setScopeId:b=Ue,insertStaticContent:x}=e,v=(a,d,m,E=null,w=null,S=null,N=void 0,P=null,R=!!d.dynamicChildren)=>{if(a===d)return;a&&!dt(a,d)&&(E=on(a),$e(a,w,S,!0),a=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:T,ref:B,shapeFlag:H}=d;switch(T){case bt:j(a,d,m,E);break;case _e:L(a,d,m,E);break;case Ut:a==null&&D(d,m,E,N);break;case xe:_(a,d,m,E,w,S,N,P,R);break;default:H&1?M(a,d,m,E,w,S,N,P,R):H&6?F(a,d,m,E,w,S,N,P,R):(H&64||H&128)&&T.process(a,d,m,E,w,S,N,P,R,St)}B!=null&&w&&Xt(B,a&&a.ref,S,d||a,!d)},j=(a,d,m,E)=>{if(a==null)s(d.el=l(d.children),m,E);else{const w=d.el=a.el;d.children!==a.children&&u(w,d.children)}},L=(a,d,m,E)=>{a==null?s(d.el=c(d.children||""),m,E):d.el=a.el},D=(a,d,m,E)=>{[a.el,a.anchor]=x(a.children,d,m,E,a.el,a.anchor)},p=({el:a,anchor:d},m,E)=>{let w;for(;a&&a!==d;)w=y(a),s(a,m,E),a=w;s(d,m,E)},g=({el:a,anchor:d})=>{let m;for(;a&&a!==d;)m=y(a),r(a),a=m;r(d)},M=(a,d,m,E,w,S,N,P,R)=>{d.type==="svg"?N="svg":d.type==="math"&&(N="mathml"),a==null?U(d,m,E,w,S,N,P,R):C(a,d,w,S,N,P,R)},U=(a,d,m,E,w,S,N,P)=>{let R,T;const{props:B,shapeFlag:H,transition:k,dirs:q}=a;if(R=a.el=o(a.type,S,B&&B.is,B),H&8?f(R,a.children):H&16&&W(a.children,R,null,E,w,Zn(a,S),N,P),q&&ke(a,null,E,"created"),O(R,a,a.scopeId,N,E),B){for(const ee in B)ee!=="value"&&!Ot(ee)&&i(R,ee,null,B[ee],S,E);"value"in B&&i(R,"value",null,B.value,S),(T=B.onVnodeBeforeMount)&&Pe(T,E,a)}q&&ke(a,null,E,"beforeMount");const z=Gi(w,k);z&&k.beforeEnter(R),s(R,d,m),((T=B&&B.onVnodeMounted)||z||q)&&Ae(()=>{T&&Pe(T,E,a),z&&k.enter(R),q&&ke(a,null,E,"mounted")},w)},O=(a,d,m,E,w)=>{if(m&&b(a,m),E)for(let S=0;S{for(let T=R;T{const P=d.el=a.el;let{patchFlag:R,dynamicChildren:T,dirs:B}=d;R|=a.patchFlag&16;const H=a.props||ne,k=d.props||ne;let q;if(m&&ct(m,!1),(q=k.onVnodeBeforeUpdate)&&Pe(q,m,d,a),B&&ke(d,a,m,"beforeUpdate"),m&&ct(m,!0),(H.innerHTML&&k.innerHTML==null||H.textContent&&k.textContent==null)&&f(P,""),T?I(a.dynamicChildren,T,P,m,E,Zn(d,w),S):N||$(a,d,P,null,m,E,Zn(d,w),S,!1),R>0){if(R&16)A(P,H,k,m,w);else if(R&2&&H.class!==k.class&&i(P,"class",null,k.class,w),R&4&&i(P,"style",H.style,k.style,w),R&8){const z=d.dynamicProps;for(let ee=0;ee{q&&Pe(q,m,d,a),B&&ke(d,a,m,"updated")},E)},I=(a,d,m,E,w,S,N)=>{for(let P=0;P{if(d!==m){if(d!==ne)for(const S in d)!Ot(S)&&!(S in m)&&i(a,S,d[S],null,w,E);for(const S in m){if(Ot(S))continue;const N=m[S],P=d[S];N!==P&&S!=="value"&&i(a,S,P,N,w,E)}"value"in m&&i(a,"value",d.value,m.value,w)}},_=(a,d,m,E,w,S,N,P,R)=>{const T=d.el=a?a.el:l(""),B=d.anchor=a?a.anchor:l("");let{patchFlag:H,dynamicChildren:k,slotScopeIds:q}=d;q&&(P=P?P.concat(q):q),a==null?(s(T,m,E),s(B,m,E),W(d.children||[],m,B,w,S,N,P,R)):H>0&&H&64&&k&&a.dynamicChildren?(I(a.dynamicChildren,k,m,w,S,N,P),(d.key!=null||w&&d===w.subTree)&&Xi(a,d,!0)):$(a,d,m,B,w,S,N,P,R)},F=(a,d,m,E,w,S,N,P,R)=>{d.slotScopeIds=P,a==null?d.shapeFlag&512?w.ctx.activate(d,m,E,N,R):Y(d,m,E,w,S,N,R):re(a,d,R)},Y=(a,d,m,E,w,S,N)=>{const P=a.component=Tc(a,E,w);if(tn(a)&&(P.ctx.renderer=St),Cc(P,!1,N),P.asyncDep){if(w&&w.registerDep(P,V,N),!a.el){const R=P.subTree=ce(_e);L(null,R,d,m)}}else V(P,a,d,m,w,S,N)},re=(a,d,m)=>{const E=d.component=a.component;if(bc(a,d,m))if(E.asyncDep&&!E.asyncResolved){X(E,d,m);return}else E.next=d,E.update();else d.el=a.el,E.vnode=d},V=(a,d,m,E,w,S,N)=>{const P=()=>{if(a.isMounted){let{next:H,bu:k,u:q,parent:z,vnode:ee}=a;{const Te=Yi(a);if(Te){H&&(H.el=ee.el,X(a,H,N)),Te.asyncDep.then(()=>{a.isUnmounted||P()});return}}let Z=H,Ee;ct(a,!1),H?(H.el=ee.el,X(a,H,N)):H=ee,k&&Kn(k),(Ee=H.props&&H.props.onVnodeBeforeUpdate)&&Pe(Ee,z,H,ee),ct(a,!0);const ge=es(a),Fe=a.subTree;a.subTree=ge,v(Fe,ge,h(Fe.el),on(Fe),a,w,S),H.el=ge.el,Z===null&&Zi(a,ge.el),q&&Ae(q,w),(Ee=H.props&&H.props.onVnodeUpdated)&&Ae(()=>Pe(Ee,z,H,ee),w)}else{let H;const{el:k,props:q}=d,{bm:z,m:ee,parent:Z,root:Ee,type:ge}=a,Fe=gt(d);if(ct(a,!1),z&&Kn(z),!Fe&&(H=q&&q.onVnodeBeforeMount)&&Pe(H,Z,d),ct(a,!0),k&&Bn){const Te=()=>{a.subTree=es(a),Bn(k,a.subTree,a,w,null)};Fe&&ge.__asyncHydrate?ge.__asyncHydrate(k,a,Te):Te()}else{Ee.ce&&Ee.ce._injectChildStyle(ge);const Te=a.subTree=es(a);v(null,Te,m,E,a,w,S),d.el=Te.el}if(ee&&Ae(ee,w),!Fe&&(H=q&&q.onVnodeMounted)){const Te=d;Ae(()=>Pe(H,Z,Te),w)}(d.shapeFlag&256||Z&>(Z.vnode)&&Z.vnode.shapeFlag&256)&&a.a&&Ae(a.a,w),a.isMounted=!0,d=m=E=null}};a.scope.on();const R=a.effect=new ni(P);a.scope.off();const T=a.update=R.run.bind(R),B=a.job=R.runIfDirty.bind(R);B.i=a,B.id=a.uid,R.scheduler=()=>Ws(B),ct(a,!0),T()},X=(a,d,m)=>{d.component=a;const E=a.vnode.props;a.vnode=d,a.next=null,sc(a,d.props,E,m),lc(a,d.children,m),it(),rr(a),ot()},$=(a,d,m,E,w,S,N,P,R=!1)=>{const T=a&&a.children,B=a?a.shapeFlag:0,H=d.children,{patchFlag:k,shapeFlag:q}=d;if(k>0){if(k&128){rn(T,H,m,E,w,S,N,P,R);return}else if(k&256){fe(T,H,m,E,w,S,N,P,R);return}}q&8?(B&16&&Nt(T,w,S),H!==T&&f(m,H)):B&16?q&16?rn(T,H,m,E,w,S,N,P,R):Nt(T,w,S,!0):(B&8&&f(m,""),q&16&&W(H,m,E,w,S,N,P,R))},fe=(a,d,m,E,w,S,N,P,R)=>{a=a||At,d=d||At;const T=a.length,B=d.length,H=Math.min(T,B);let k;for(k=0;kB?Nt(a,w,S,!0,!1,H):W(d,m,E,w,S,N,P,R,H)},rn=(a,d,m,E,w,S,N,P,R)=>{let T=0;const B=d.length;let H=a.length-1,k=B-1;for(;T<=H&&T<=k;){const q=a[T],z=d[T]=R?et(d[T]):Me(d[T]);if(dt(q,z))v(q,z,m,null,w,S,N,P,R);else break;T++}for(;T<=H&&T<=k;){const q=a[H],z=d[k]=R?et(d[k]):Me(d[k]);if(dt(q,z))v(q,z,m,null,w,S,N,P,R);else break;H--,k--}if(T>H){if(T<=k){const q=k+1,z=qk)for(;T<=H;)$e(a[T],w,S,!0),T++;else{const q=T,z=T,ee=new Map;for(T=z;T<=k;T++){const Ce=d[T]=R?et(d[T]):Me(d[T]);Ce.key!=null&&ee.set(Ce.key,T)}let Z,Ee=0;const ge=k-z+1;let Fe=!1,Te=0;const Ft=new Array(ge);for(T=0;T=ge){$e(Ce,w,S,!0);continue}let je;if(Ce.key!=null)je=ee.get(Ce.key);else for(Z=z;Z<=k;Z++)if(Ft[Z-z]===0&&dt(Ce,d[Z])){je=Z;break}je===void 0?$e(Ce,w,S,!0):(Ft[je-z]=T+1,je>=Te?Te=je:Fe=!0,v(Ce,d[je],m,null,w,S,N,P,R),Ee++)}const Zs=Fe?uc(Ft):At;for(Z=Zs.length-1,T=ge-1;T>=0;T--){const Ce=z+T,je=d[Ce],er=Ce+1{const{el:S,type:N,transition:P,children:R,shapeFlag:T}=a;if(T&6){lt(a.component.subTree,d,m,E);return}if(T&128){a.suspense.move(d,m,E);return}if(T&64){N.move(a,d,m,St);return}if(N===xe){s(S,d,m);for(let H=0;HP.enter(S),w);else{const{leave:H,delayLeave:k,afterLeave:q}=P,z=()=>s(S,d,m),ee=()=>{H(S,()=>{z(),q&&q()})};k?k(S,z,ee):ee()}else s(S,d,m)},$e=(a,d,m,E=!1,w=!1)=>{const{type:S,props:N,ref:P,children:R,dynamicChildren:T,shapeFlag:B,patchFlag:H,dirs:k,cacheIndex:q}=a;if(H===-2&&(w=!1),P!=null&&Xt(P,null,m,a,!0),q!=null&&(d.renderCache[q]=void 0),B&256){d.ctx.deactivate(a);return}const z=B&1&&k,ee=!gt(a);let Z;if(ee&&(Z=N&&N.onVnodeBeforeUnmount)&&Pe(Z,d,a),B&6)Ro(a.component,m,E);else{if(B&128){a.suspense.unmount(m,E);return}z&&ke(a,null,d,"beforeUnmount"),B&64?a.type.remove(a,d,m,St,E):T&&!T.hasOnce&&(S!==xe||H>0&&H&64)?Nt(T,d,m,!1,!0):(S===xe&&H&384||!w&&B&16)&&Nt(R,d,m),E&&Js(a)}(ee&&(Z=N&&N.onVnodeUnmounted)||z)&&Ae(()=>{Z&&Pe(Z,d,a),z&&ke(a,null,d,"unmounted")},m)},Js=a=>{const{type:d,el:m,anchor:E,transition:w}=a;if(d===xe){Ao(m,E);return}if(d===Ut){g(a);return}const S=()=>{r(m),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(a.shapeFlag&1&&w&&!w.persisted){const{leave:N,delayLeave:P}=w,R=()=>N(m,S);P?P(a.el,S,R):R()}else S()},Ao=(a,d)=>{let m;for(;a!==d;)m=y(a),r(a),a=m;r(d)},Ro=(a,d,m)=>{const{bum:E,scope:w,job:S,subTree:N,um:P,m:R,a:T}=a;pr(R),pr(T),E&&Kn(E),w.stop(),S&&(S.flags|=8,$e(N,a,d,m)),P&&Ae(P,d),Ae(()=>{a.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Nt=(a,d,m,E=!1,w=!1,S=0)=>{for(let N=S;N{if(a.shapeFlag&6)return on(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=y(a.anchor||a.el),m=d&&d[Al];return m?y(m):d};let Un=!1;const Qs=(a,d,m)=>{a==null?d._vnode&&$e(d._vnode,null,null,!0):v(d._vnode||null,a,d,null,null,null,m),d._vnode=a,Un||(Un=!0,rr(),Tn(),Un=!1)},St={p:v,um:$e,m:lt,r:Js,mt:Y,mc:W,pc:$,pbc:I,n:on,o:e};let Wn,Bn;return[Wn,Bn]=t(St),{render:Qs,hydrate:Wn,createApp:ec(Qs,Wn)}}function Zn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Gi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Xi(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(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}function Yi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Yi(t)}function pr(e){if(e)for(let t=0;tyt(ac);function zi(e,t){return jn(e,null,t)}function Su(e,t){return jn(e,null,{flush:"post"})}function Le(e,t,n){return jn(e,t,n)}function jn(e,t,n=ne){const{immediate:s,deep:r,flush:i,once:o}=n,l=he({},n),c=t&&s||!t&&i!=="post";let u;if(It){if(i==="sync"){const b=dc();u=b.__watcherHandles||(b.__watcherHandles=[])}else if(!c){const b=()=>{};return b.stop=Ue,b.resume=Ue,b.pause=Ue,b}}const f=ae;l.call=(b,x,v)=>De(b,f,x,v);let h=!1;i==="post"?l.scheduler=b=>{Ae(b,f&&f.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(b,x)=>{x?b():Ws(b)}),l.augmentJob=b=>{t&&(b.flags|=4),h&&(b.flags|=2,f&&(b.id=f.uid,b.i=f))};const y=Sl(e,t,l);return It&&(u?u.push(y):c&&y()),y}function hc(e,t,n){const s=this.proxy,r=oe(e)?e.includes(".")?Ji(s,e):()=>s[e]:e.bind(s,s);let i;G(t)?i=t:(i=t.handler,n=t);const o=sn(this),l=jn(r,i.bind(s),n);return o(),l}function Ji(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function gc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ne;let r=n;const i=t.startsWith("update:"),o=i&&pc(s,t.slice(7));o&&(o.trim&&(r=n.map(f=>oe(f)?f.trim():f)),o.number&&(r=n.map(No)));let l,c=s[l=yn(t)]||s[l=yn(Ne(t))];!c&&i&&(c=s[l=yn(rt(t))]),c&&De(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,De(u,e,6,r)}}function Qi(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(!G(e)){const c=u=>{const f=Qi(u,t,!0);f&&(l=!0,he(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(se(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):he(o,i),se(e)&&s.set(e,o),o)}function Vn(e,t){return!e||!Qt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Q(e,t[0].toLowerCase()+t.slice(1))||Q(e,rt(t))||Q(e,t))}function es(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:f,props:h,data:y,setupState:b,ctx:x,inheritAttrs:v}=e,j=Cn(e);let L,D;try{if(n.shapeFlag&4){const g=r||s,M=g;L=Me(u.call(M,g,f,h,b,y,x)),D=l}else{const g=t;L=Me(g.length>1?g(h,{attrs:l,slots:o,emit:c}):g(h,null)),D=t.props?l:mc(l)}}catch(g){Wt.length=0,en(g,e,1),L=ce(_e)}let p=L;if(D&&v!==!1){const g=Object.keys(D),{shapeFlag:M}=p;g.length&&M&7&&(i&&g.some(Ps)&&(D=yc(D,i)),p=st(p,D,!1,!0))}return n.dirs&&(p=st(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Gt(p,n.transition),L=p,Cn(j),L}const mc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Qt(n))&&((t||(t={}))[n]=e[n]);return t},yc=(e,t)=>{const n={};for(const s in e)(!Ps(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function bc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?gr(s,o,u):!!o;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function to(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Tl(e)}const xe=Symbol.for("v-fgt"),bt=Symbol.for("v-txt"),_e=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),Wt=[];let Re=null;function Es(e=!1){Wt.push(Re=e?null:[])}function _c(){Wt.pop(),Re=Wt[Wt.length-1]||null}let Yt=1;function mr(e,t=!1){Yt+=e,e<0&&Re&&t&&(Re.hasOnce=!0)}function no(e){return e.dynamicChildren=Yt>0?Re||At:null,_c(),Yt>0&&Re&&Re.push(e),e}function xu(e,t,n,s,r,i){return no(ro(e,t,n,s,r,i,!0))}function Ts(e,t,n,s,r){return no(ce(e,t,n,s,r,!0))}function zt(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const so=({key:e})=>e??null,_n=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?oe(e)||de(e)||G(e)?{i:pe,r:e,k:t,f:!!n}:e:null);function ro(e,t=null,n=null,s=0,r=null,i=e===xe?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&so(t),ref:t&&_n(t),scopeId:wi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:pe};return l?(Gs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=oe(n)?8:16),Yt>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ce=vc;function vc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Mi)&&(e=_e),zt(e)){const l=st(e,t,!0);return n&&Gs(l,n),Yt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(Pc(e)&&(e=e.__vccOpts),t){t=wc(t);let{class:l,style:c}=t;l&&!oe(l)&&(t.class=Ns(l)),se(c)&&(Vs(c)&&!K(c)&&(c=he({},c)),t.style=Ls(c))}const o=oe(e)?1:eo(e)?128:Si(e)?64:se(e)?4:G(e)?2:0;return ro(e,t,n,s,r,o,i,!0)}function wc(e){return e?Vs(e)||Vi(e)?he({},e):e:null}function st(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,u=t?Sc(r||{},t):r,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&so(u),ref:t&&t.ref?n&&i?K(i)?i.concat(_n(t)):[i,_n(t)]:_n(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==xe?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&st(e.ssContent),ssFallback:e.ssFallback&&st(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Gt(f,c.clone(f)),f}function io(e=" ",t=0){return ce(bt,null,e,t)}function Eu(e,t){const n=ce(Ut,null,e);return n.staticCount=t,n}function Tu(e="",t=!1){return t?(Es(),Ts(_e,null,e)):ce(_e,null,e)}function Me(e){return e==null||typeof e=="boolean"?ce(_e):K(e)?ce(xe,null,e.slice()):zt(e)?et(e):ce(bt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:st(e)}function Gs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Gs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Vi(t)?t._ctx=pe:r===3&&pe&&(pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else G(t)?(t={default:t,_ctx:pe},n=32):(t=String(t),s&64?(n=16,t=[io(t)]):n=8);e.children=t,e.shapeFlag|=n}function Sc(...e){const t={};for(let n=0;nae||pe;let Rn,Cs;{const e=In(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Rn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),Cs=t("__VUE_SSR_SETTERS__",n=>It=n)}const sn=e=>{const t=ae;return Rn(e),e.scope.on(),()=>{e.scope.off(),Rn(t)}},yr=()=>{ae&&ae.scope.off(),Rn(null)};function oo(e){return e.vnode.shapeFlag&4}let It=!1;function Cc(e,t=!1,n=!1){t&&Cs(t);const{props:s,children:r}=e.vnode,i=oo(e);nc(e,s,i,t),oc(e,r,n);const o=i?Ac(e,t):void 0;return t&&Cs(!1),o}function Ac(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ql);const{setup:s}=n;if(s){it();const r=e.setupContext=s.length>1?co(e):null,i=sn(e),o=Zt(s,e,0,[e.props,r]),l=Xr(o);if(ot(),i(),(l||e.sp)&&!gt(e)&&Ks(e),l){if(o.then(yr,yr),t)return o.then(c=>{br(e,c)}).catch(c=>{en(c,e,0)});e.asyncDep=o}else br(e,o)}else lo(e)}function br(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)&&(e.setupState=yi(t)),lo(e)}function lo(e,t,n){const s=e.type;e.render||(e.render=s.render||Ue);{const r=sn(e);it();try{Xl(e)}finally{ot(),r()}}}const Rc={get(e,t){return ye(e,"get",""),e[t]}};function co(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Rc),slots:e.slots,emit:e.emit,expose:t}}function Xs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(yi(bn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in kt)return kt[n](e)},has(t,n){return n in t||n in kt}})):e.proxy}function Oc(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function Pc(e){return G(e)&&"__vccOpts"in e}const ie=(e,t)=>vl(e,t,It);function As(e,t,n){const s=arguments.length;return s===2?se(t)&&!K(t)?zt(t)?ce(e,null,[t]):ce(e,t):ce(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&zt(n)&&(n=[n]),ce(e,t,n))}const Mc="3.5.13";/** +* @vue/runtime-dom v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Rs;const _r=typeof window<"u"&&window.trustedTypes;if(_r)try{Rs=_r.createPolicy("vue",{createHTML:e=>e})}catch{}const fo=Rs?e=>Rs.createHTML(e):e=>e,Ic="http://www.w3.org/2000/svg",Lc="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,vr=Ke&&Ke.createElement("template"),Nc={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==="svg"?Ke.createElementNS(Ic,e):t==="mathml"?Ke.createElementNS(Lc,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.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{vr.innerHTML=fo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=vr.content;if(s==="svg"||s==="mathml"){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]}},Je="transition",Dt="animation",Jt=Symbol("_vtc"),uo={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},Fc=he({},xi,uo),Hc=e=>(e.displayName="Transition",e.props=Fc,e),Cu=Hc((e,{slots:t})=>As(Pl,Dc(e),t)),ft=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},wr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function Dc(e){const t={};for(const _ in e)_ in uo||(t[_]=e[_]);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:u=o,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:y=`${n}-leave-active`,leaveToClass:b=`${n}-leave-to`}=e,x=$c(r),v=x&&x[0],j=x&&x[1],{onBeforeEnter:L,onEnter:D,onEnterCancelled:p,onLeave:g,onLeaveCancelled:M,onBeforeAppear:U=L,onAppear:O=D,onAppearCancelled:W=p}=t,C=(_,F,Y,re)=>{_._enterCancelled=re,ut(_,F?f:l),ut(_,F?u:o),Y&&Y()},I=(_,F)=>{_._isLeaving=!1,ut(_,h),ut(_,b),ut(_,y),F&&F()},A=_=>(F,Y)=>{const re=_?O:D,V=()=>C(F,_,Y);ft(re,[F,V]),Sr(()=>{ut(F,_?c:i),Be(F,_?f:l),wr(re)||xr(F,s,v,V)})};return he(t,{onBeforeEnter(_){ft(L,[_]),Be(_,i),Be(_,o)},onBeforeAppear(_){ft(U,[_]),Be(_,c),Be(_,u)},onEnter:A(!1),onAppear:A(!0),onLeave(_,F){_._isLeaving=!0;const Y=()=>I(_,F);Be(_,h),_._enterCancelled?(Be(_,y),Cr()):(Cr(),Be(_,y)),Sr(()=>{_._isLeaving&&(ut(_,h),Be(_,b),wr(g)||xr(_,s,j,Y))}),ft(g,[_,Y])},onEnterCancelled(_){C(_,!1,void 0,!0),ft(p,[_])},onAppearCancelled(_){C(_,!0,void 0,!0),ft(W,[_])},onLeaveCancelled(_){I(_),ft(M,[_])}})}function $c(e){if(e==null)return null;if(se(e))return[ts(e.enter),ts(e.leave)];{const t=ts(e);return[t,t]}}function ts(e){return Fo(e)}function Be(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jt]||(e[Jt]=new Set)).add(t)}function ut(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jt];n&&(n.delete(t),n.size||(e[Jt]=void 0))}function Sr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let jc=0;function xr(e,t,n,s){const r=e._endId=++jc,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Vc(e,t);if(!o)return s();const u=o+"end";let f=0;const h=()=>{e.removeEventListener(u,y),i()},y=b=>{b.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[x]||"").split(", "),r=s(`${Je}Delay`),i=s(`${Je}Duration`),o=Er(r,i),l=s(`${Dt}Delay`),c=s(`${Dt}Duration`),u=Er(l,c);let f=null,h=0,y=0;t===Je?o>0&&(f=Je,h=o,y=i.length):t===Dt?u>0&&(f=Dt,h=u,y=c.length):(h=Math.max(o,u),f=h>0?o>u?Je:Dt:null,y=f?f===Je?i.length:c.length:0);const b=f===Je&&/\b(transform|all)(,|$)/.test(s(`${Je}Property`).toString());return{type:f,timeout:h,propCount:y,hasTransform:b}}function Er(e,t){for(;e.lengthTr(n)+Tr(e[s])))}function Tr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Cr(){return document.body.offsetHeight}function kc(e,t,n){const s=e[Jt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ar=Symbol("_vod"),Uc=Symbol("_vsh"),Wc=Symbol(""),Bc=/(^|;)\s*display\s*:/;function Kc(e,t,n){const s=e.style,r=oe(n);let i=!1;if(n&&!r){if(t)if(oe(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&vn(s,l,"")}else for(const o in t)n[o]==null&&vn(s,o,"");for(const o in n)o==="display"&&(i=!0),vn(s,o,n[o])}else if(r){if(t!==n){const o=s[Wc];o&&(n+=";"+o),s.cssText=n,i=Bc.test(n)}}else t&&e.removeAttribute("style");Ar in e&&(e[Ar]=i?s.display:"",e[Uc]&&(s.display="none"))}const Rr=/\s*!important$/;function vn(e,t,n){if(K(n))n.forEach(s=>vn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=qc(e,t);Rr.test(n)?e.setProperty(rt(s),n.replace(Rr,""),"important"):e[s]=n}}const Or=["Webkit","Moz","ms"],ns={};function qc(e,t){const n=ns[t];if(n)return n;let s=Ne(t);if(s!=="filter"&&s in e)return ns[t]=s;s=Mn(s);for(let r=0;rss||(Jc.then(()=>ss=0),ss=Date.now());function Zc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;De(ef(s,n.value),t,5,[s])};return n.value=e,n.attached=Qc(),n}function ef(e,t){if(K(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 Fr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,tf=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?kc(e,s,o):t==="style"?Kc(e,n,s):Qt(t)?Ps(t)||Yc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):nf(e,t,s,o))?(Ir(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Mr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!oe(s))?Ir(e,Ne(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Mr(e,t,s,o))};function nf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Fr(t)&&G(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Fr(t)&&oe(n)?!1:t in e}const sf=["ctrl","shift","alt","meta"],rf={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)=>sf.some(n=>e[`${n}Key`]&&!t.includes(n))},Au=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=rt(r.key);if(t.some(o=>o===i||of[o]===i))return e(r)})},lf=he({patchProp:tf},Nc);let rs,Hr=!1;function cf(){return rs=Hr?rs:cc(lf),Hr=!0,rs}const Ou=(...e)=>{const t=cf().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=uf(s);if(r)return n(r,!0,ff(r))},t};function ff(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function uf(e){return oe(e)?document.querySelector(e):e}const af=window.__VP_SITE_DATA__;function ao(e){return ti()?(Bo(e),!0):!1}const is=new WeakMap,df=(...e)=>{var t;const n=e[0],s=(t=nn())==null?void 0:t.proxy;if(s==null&&!Di())throw new Error("injectLocal must be called in setup");return s&&is.has(s)&&n in is.get(s)?is.get(s)[n]:yt(...e)},ho=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const hf=Object.prototype.toString,pf=e=>hf.call(e)==="[object Object]",wt=()=>{},Dr=gf();function gf(){var e,t;return ho&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Ys(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const po=e=>e();function mf(e,t={}){let n,s,r=wt;const i=c=>{clearTimeout(c),r(),r=wt};let o;return c=>{const u=le(e),f=le(t.maxWait);return n&&i(n),u<=0||f!==void 0&&f<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((h,y)=>{r=t.rejectOnCancel?y:h,o=c,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,h(o())},f)),n=setTimeout(()=>{s&&i(s),s=null,h(c())},u)})}}function yf(...e){let t=0,n,s=!0,r=wt,i,o,l,c,u;!de(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:u=!1}=e[0]:[o,l=!0,c=!0,u=!1]=e;const f=()=>{n&&(clearTimeout(n),n=void 0,r(),r=wt)};return y=>{const b=le(o),x=Date.now()-t,v=()=>i=y();return f(),b<=0?(t=Date.now(),v()):(x>b&&(c||!s)?(t=Date.now(),v()):l&&(i=new Promise((j,L)=>{r=u?L:j,n=setTimeout(()=>{t=Date.now(),s=!0,j(v()),f()},Math.max(0,b-x))})),!c&&!n&&(n=setTimeout(()=>s=!0,b)),s=!1,i)}}function bf(e=po){const t=ue(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Fn(t),pause:n,resume:s,eventFilter:r}}function $r(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function _f(e){return nn()}function os(e){return Array.isArray(e)?e:[e]}function go(...e){if(e.length!==1)return yl(...e);const t=e[0];return typeof t=="function"?Fn(pl(()=>({get:t,set:wt}))):ue(t)}function vf(e,t=200,n={}){return Ys(mf(t,n),e)}function wf(e,t=200,n=!1,s=!0,r=!1){return Ys(yf(t,n,s,r),e)}function Sf(e,t,n={}){const{eventFilter:s=po,...r}=n;return Le(e,Ys(s,t),r)}function xf(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=bf(s);return{stop:Sf(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function kn(e,t=!0,n){_f()?Lt(e,n):t?e():Hn(e)}function Ef(e,t,n){return Le(e,t,{...n,immediate:!0})}const Ge=ho?window:void 0;function zs(e){var t;const n=le(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Xe(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},s=(l,c,u,f)=>(l.addEventListener(c,u,f),()=>l.removeEventListener(c,u,f)),r=ie(()=>{const l=os(le(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),i=Ef(()=>{var l,c;return[(c=(l=r.value)==null?void 0:l.map(u=>zs(u)))!=null?c:[Ge].filter(u=>u!=null),os(le(r.value?e[1]:e[0])),os(Us(r.value?e[2]:e[1])),le(r.value?e[3]:e[2])]},([l,c,u,f])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(u!=null&&u.length))return;const h=pf(f)?{...f}:f;t.push(...l.flatMap(y=>c.flatMap(b=>u.map(x=>s(y,b,x,h)))))},{flush:"post"}),o=()=>{i(),n()};return ao(n),o}function Tf(){const e=ue(!1),t=nn();return t&&Lt(()=>{e.value=!0},t),e}function Cf(e){const t=Tf();return ie(()=>(t.value,!!e()))}function Af(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Pu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Ge,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Af(t);return Xe(r,i,f=>{f.repeat&&le(l)||c(f)&&n(f)},o)}const Rf=Symbol("vueuse-ssr-width");function Of(){const e=Di()?df(Rf,null):null;return typeof e=="number"?e:void 0}function mo(e,t={}){const{window:n=Ge,ssrWidth:s=Of()}=t,r=Cf(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=ue(typeof s=="number"),o=ks(),l=ue(!1),c=u=>{l.value=u.matches};return zi(()=>{if(i.value){i.value=!r.value;const u=le(e).split(",");l.value=u.some(f=>{const h=f.includes("not all"),y=f.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),b=f.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let x=!!(y||b);return y&&x&&(x=s>=$r(y[1])),b&&x&&(x=s<=$r(b[1])),h?!x:x});return}r.value&&(o.value=n.matchMedia(le(e)),l.value=o.value.matches)}),Xe(o,"change",c,{passive:!0}),ie(()=>l.value)}const hn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},pn="__vueuse_ssr_handlers__",Pf=Mf();function Mf(){return pn in hn||(hn[pn]=hn[pn]||{}),hn[pn]}function yo(e,t){return Pf[e]||t}function bo(e){return mo("(prefers-color-scheme: dark)",e)}function If(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Lf={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},jr="vueuse-storage";function Nf(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:h=Ge,eventFilter:y,onError:b=A=>{console.error(A)},initOnMounted:x}=s,v=(f?ks:ue)(typeof t=="function"?t():t),j=ie(()=>le(e));if(!n)try{n=yo("getDefaultStorage",()=>{var A;return(A=Ge)==null?void 0:A.localStorage})()}catch(A){b(A)}if(!n)return v;const L=le(t),D=If(L),p=(r=s.serializer)!=null?r:Lf[D],{pause:g,resume:M}=xf(v,()=>O(v.value),{flush:i,deep:o,eventFilter:y});Le(j,()=>C(),{flush:i}),h&&l&&kn(()=>{n instanceof Storage?Xe(h,"storage",C,{passive:!0}):Xe(h,jr,I),x&&C()}),x||C();function U(A,_){if(h){const F={key:j.value,oldValue:A,newValue:_,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",F):new CustomEvent(jr,{detail:F}))}}function O(A){try{const _=n.getItem(j.value);if(A==null)U(_,null),n.removeItem(j.value);else{const F=p.write(A);_!==F&&(n.setItem(j.value,F),U(_,F))}}catch(_){b(_)}}function W(A){const _=A?A.newValue:n.getItem(j.value);if(_==null)return c&&L!=null&&n.setItem(j.value,p.write(L)),L;if(!A&&u){const F=p.read(_);return typeof u=="function"?u(F,L):D==="object"&&!Array.isArray(F)?{...L,...F}:F}else return typeof _!="string"?_:p.read(_)}function C(A){if(!(A&&A.storageArea!==n)){if(A&&A.key==null){v.value=L;return}if(!(A&&A.key!==j.value)){g();try{(A==null?void 0:A.newValue)!==p.write(v.value)&&(v.value=W(A))}catch(_){b(_)}finally{A?Hn(M):M()}}}}function I(A){C(A.detail)}return v}const Ff="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Hf(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Ge,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},y=bo({window:r}),b=ie(()=>y.value?"dark":"light"),x=c||(o==null?go(s):Nf(o,s,i,{window:r,listenToStorageChanges:l})),v=ie(()=>x.value==="auto"?b.value:x.value),j=yo("updateHTMLAttrs",(g,M,U)=>{const O=typeof g=="string"?r==null?void 0:r.document.querySelector(g):zs(g);if(!O)return;const W=new Set,C=new Set;let I=null;if(M==="class"){const _=U.split(/\s/g);Object.values(h).flatMap(F=>(F||"").split(/\s/g)).filter(Boolean).forEach(F=>{_.includes(F)?W.add(F):C.add(F)})}else I={key:M,value:U};if(W.size===0&&C.size===0&&I===null)return;let A;f&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode(Ff)),r.document.head.appendChild(A));for(const _ of W)O.classList.add(_);for(const _ of C)O.classList.remove(_);I&&O.setAttribute(I.key,I.value),f&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function L(g){var M;j(t,n,(M=h[g])!=null?M:g)}function D(g){e.onChanged?e.onChanged(g,L):L(g)}Le(v,D,{flush:"post",immediate:!0}),kn(()=>D(v.value));const p=ie({get(){return u?x.value:v.value},set(g){x.value=g}});return Object.assign(p,{store:x,system:b,state:v})}function Df(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Hf({...e,onChanged:(o,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,o==="dark",l,o):l(o)},modes:{dark:t,light:n}}),r=ie(()=>s.system.value);return ie({get(){return s.value==="dark"},set(o){const l=o?"dark":"light";r.value===l?s.value="auto":s.value=l}})}function ls(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const Vr=1;function $f(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=wt,onScroll:i=wt,offset:o={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:u=Ge,onError:f=O=>{console.error(O)}}=t,h=ue(0),y=ue(0),b=ie({get(){return h.value},set(O){v(O,void 0)}}),x=ie({get(){return y.value},set(O){v(void 0,O)}});function v(O,W){var C,I,A,_;if(!u)return;const F=le(e);if(!F)return;(A=F instanceof Document?u.document.body:F)==null||A.scrollTo({top:(C=le(W))!=null?C:x.value,left:(I=le(O))!=null?I:b.value,behavior:le(c)});const Y=((_=F==null?void 0:F.document)==null?void 0:_.documentElement)||(F==null?void 0:F.documentElement)||F;b!=null&&(h.value=Y.scrollLeft),x!=null&&(y.value=Y.scrollTop)}const j=ue(!1),L=Mt({left:!0,right:!1,top:!0,bottom:!1}),D=Mt({left:!1,right:!1,top:!1,bottom:!1}),p=O=>{j.value&&(j.value=!1,D.left=!1,D.right=!1,D.top=!1,D.bottom=!1,r(O))},g=vf(p,n+s),M=O=>{var W;if(!u)return;const C=((W=O==null?void 0:O.document)==null?void 0:W.documentElement)||(O==null?void 0:O.documentElement)||zs(O),{display:I,flexDirection:A,direction:_}=getComputedStyle(C),F=_==="rtl"?-1:1,Y=C.scrollLeft;D.left=Yh.value;const re=Y*F<=(o.left||0),V=Y*F+C.clientWidth>=C.scrollWidth-(o.right||0)-Vr;I==="flex"&&A==="row-reverse"?(L.left=V,L.right=re):(L.left=re,L.right=V),h.value=Y;let X=C.scrollTop;O===u.document&&!X&&(X=u.document.body.scrollTop),D.top=Xy.value;const $=X<=(o.top||0),fe=X+C.clientHeight>=C.scrollHeight-(o.bottom||0)-Vr;I==="flex"&&A==="column-reverse"?(L.top=fe,L.bottom=$):(L.top=$,L.bottom=fe),y.value=X},U=O=>{var W;if(!u)return;const C=(W=O.target.documentElement)!=null?W:O.target;M(C),j.value=!0,g(O),i(O)};return Xe(e,"scroll",n?wf(U,n,!0,!1):U,l),kn(()=>{try{const O=le(e);if(!O)return;M(O)}catch(O){f(O)}}),Xe(e,"scrollend",p,l),{x:b,y:x,isScrolling:j,arrivedState:L,directions:D,measure(){const O=le(e);u&&O&&M(O)}}}function _o(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const cs=new WeakMap;function Mu(e,t=!1){const n=ue(t);let s=null,r="";Le(go(e),l=>{const c=ls(le(l));if(c){const u=c;if(cs.get(u)||cs.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(r=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ls(le(e));!l||n.value||(Dr&&(s=Xe(l,"touchmove",c=>{jf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ls(le(e));!l||!n.value||(Dr&&(s==null||s()),l.style.overflow=r,cs.delete(l),n.value=!1)};return ao(o),ie({get(){return n.value},set(l){l?i():o()}})}function Iu(e={}){const{window:t=Ge,...n}=e;return $f(t,n)}function Lu(e={}){const{window:t=Ge,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=ue(n),c=ue(s),u=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:h,height:y,scale:b}=t.visualViewport;l.value=Math.round(h*b),c.value=Math.round(y*b)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};u(),kn(u);const f={passive:!0};if(Xe("resize",u,f),t&&o==="visual"&&t.visualViewport&&Xe(t.visualViewport,"resize",u,f),r){const h=mo("(orientation: portrait)");Le(h,()=>u())}return{width:l,height:c}}const fs={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var us={};const vo=/^(?:[a-z]+:|\/\/)/i,Vf="vitepress-theme-appearance",kf=/#.*$/,Uf=/[?#].*$/,Wf=/(?:(^|\/)index)?\.(?:md|html)$/,me=typeof document<"u",wo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Bf(e,t,n=!1){if(t===void 0)return!1;if(e=kr(`/${e}`),n)return new RegExp(t).test(e);if(kr(t)!==e)return!1;const s=t.match(kf);return s?(me?location.hash:"")===s[0]:!0}function kr(e){return decodeURI(e).replace(Uf,"").replace(Wf,"$1")}function Kf(e){return vo.test(e)}function qf(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Kf(n)&&Bf(t,`/${n}/`,!0))||"root"}function Gf(e,t){var s,r,i,o,l,c,u;const n=qf(e,t);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:xo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function So(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=Xf(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function Xf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Yf(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 xo(e,t){return[...e.filter(n=>!Yf(t,n)),...t]}const zf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Jf=/^[a-z]:/i;function Ur(e){const t=Jf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(zf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const as=new Set;function Qf(e){if(as.size===0){const n=typeof process=="object"&&(us==null?void 0:us.VITE_EXTRA_EXTENSIONS)||(fs==null?void 0:fs.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>as.add(s))}const t=e.split(".").pop();return t==null||!as.has(t.toLowerCase())}const Zf=Symbol(),_t=ks(af);function Nu(e){const t=ie(()=>Gf(_t.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?ue(!0):n==="force-auto"?bo():n?Df({storageKey:Vf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):ue(!1),r=ue(me?location.hash:"");return me&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Le(()=>e.data,()=>{r.value=me?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>So(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function eu(){const e=yt(Zf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function tu(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Wr(e){return vo.test(e)||!e.startsWith("/")?e:tu(_t.value.base,e)}function nu(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),me){const n="/";t=Ur(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=`./${Ur(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let wn=[];function Fu(e){wn.push(e),$n(()=>{wn=wn.filter(t=>t!==e)})}function su(){let e=_t.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Br(e,n);else if(Array.isArray(e))for(const s of e){const r=Br(s,n);if(r){t=r;break}}return t}function Br(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const ru=Symbol(),Eo="http://a.com",iu=()=>({path:"/",component:null,data:wo});function Hu(e,t){const n=Mt(iu()),s={route:n,go:r};async function r(l=me?location.href:"/"){var c,u;l=ds(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(me&&l!==ds(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((u=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:u(l)))}let i=null;async function o(l,c=0,u=!1){var y,b;if(await((y=s.onBeforePageLoad)==null?void 0:y.call(s,l))===!1)return;const f=new URL(l,Eo),h=i=f.pathname;try{let x=await e(h);if(!x)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:v,__pageData:j}=x;if(!v)throw new Error(`Invalid route component: ${v}`);await((b=s.onAfterPageLoad)==null?void 0:b.call(s,l)),n.path=me?h:Wr(h),n.component=bn(v),n.data=bn(j),me&&Hn(()=>{let L=_t.value.base+j.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!_t.value.cleanUrls&&!L.endsWith("/")&&(L+=".html"),L!==f.pathname&&(f.pathname=L,l=L+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let D=null;try{D=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(p){console.warn(p)}if(D){Kr(D,f.hash);return}}window.scrollTo(0,c)})}}catch(x){if(!/fetch|Page not found/.test(x.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(x),!u)try{const v=await fetch(_t.value.base+"hashmap.json");window.__VP_HASH_MAP__=await v.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=me?h:Wr(h),n.component=t?bn(t):null;const v=me?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...wo,relativePath:v}}}}return me&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:f,origin:h,pathname:y,hash:b,search:x}=new URL(u,c.baseURI),v=new URL(location.href);h===v.origin&&Qf(y)&&(l.preventDefault(),y===v.pathname&&x===v.search?(b!==v.hash&&(history.pushState({},"",f),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:v.href,newURL:f}))),b?Kr(c,b,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(f))},{capture:!0}),window.addEventListener("popstate",async l=>{var u;if(l.state===null)return;const c=ds(location.href);await o(c,l.state&&l.state.scrollPosition||0),await((u=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:u(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function ou(){const e=yt(ru);if(!e)throw new Error("useRouter() is called without provider.");return e}function To(){return ou().route}function Kr(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 r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-su()+i;requestAnimationFrame(r)}}function ds(e){const t=new URL(e,Eo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),_t.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const gn=()=>wn.forEach(e=>e()),Du=Bs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=To(),{frontmatter:n,site:s}=eu();return Le(n,gn,{deep:!0,flush:"post"}),()=>As(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?As(t.component,{onVnodeMounted:gn,onVnodeUpdated:gn,onVnodeUnmounted:gn}):"404 Page Not Found"])}}),$u=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},lu="modulepreload",cu=function(e){return"/"+e},qr={},ju=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=cu(c),c in qr)return;qr[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const h=document.createElement("link");if(h.rel=u?"stylesheet":lu,u||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),u)return new Promise((y,b)=>{h.addEventListener("load",y),h.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},Vu=Bs({setup(e,{slots:t}){const n=ue(!1);return Lt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function ku(){me&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Uu(){if(me){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),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),fu(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function fu(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 Wu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=hs(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(hs);s.forEach((l,c)=>{const u=o.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};zi(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=So(o,i);u!==document.title&&(document.title=u);const f=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):hs(["meta",{name:"description",content:f}]),r(xo(o.head,au(c)))})}function hs([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function uu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function au(e){return e.filter(t=>!uu(t))}const ps=new Set,Co=()=>document.createElement("link"),du=e=>{const t=Co();t.rel="prefetch",t.href=e,document.head.appendChild(t)},hu=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let mn;const pu=me&&(mn=Co())&&mn.relList&&mn.relList.supports&&mn.relList.supports("prefetch")?du:hu;function Bu(){if(!me||!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(!ps.has(c)){ps.add(c);const u=nu(c);u&&pu(u)}}})}),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):ps.add(l))})})};Lt(s);const r=To();Le(()=>r.path,s),$n(()=>{n&&n.disconnect()})}export{Oi as $,su as A,mu as B,bu as C,ks as D,Fu as E,xe as F,ce as G,yu as H,vo as I,To as J,Sc as K,yt as L,Lu as M,Ls as N,Pu as O,Hn as P,Iu as Q,me as R,Fn as S,Cu as T,gu as U,ju as V,Mu as W,tc as X,Ru as Y,vu as Z,$u as _,io as a,Au as a0,wu as a1,Wu as a2,ru as a3,Nu as a4,Zf as a5,Du as a6,Vu as a7,_t as a8,Ou as a9,Hu as aa,nu as ab,Bu as ac,Uu as ad,ku as ae,As as af,Eu as ag,ou as ah,Ts as b,xu as c,Bs as d,Tu as e,Qf as f,Wr as g,ie as h,Kf as i,ro as j,Us as k,Bf as l,mo as m,Ns as n,Es as o,ue as p,Le as q,_u as r,zi as s,Uo as t,eu as u,Lt as v,Cl as w,$n as x,Su as y,kl as z}; diff --git a/assets/chunks/theme.C5eTVCmd.js b/assets/chunks/theme.C5eTVCmd.js new file mode 100644 index 0000000..ffba754 --- /dev/null +++ b/assets/chunks/theme.C5eTVCmd.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPAlgoliaSearchBox.XYDV-sQ7.js","assets/chunks/framework.CB8iguzh.js"])))=>i.map(i=>d[i]); +import{d as m,o as a,c,r as u,n as I,a as z,t as M,b as k,w as v,e as h,T as ce,_ as b,u as Ae,i as He,f as Be,g as de,h as g,j as d,k as r,l as K,m as re,p as w,q as D,s as Y,v as j,x as Q,y as fe,z as Ee,A as Fe,B as W,F as A,C as H,D as ge,E as Z,G as _,H as E,I as $e,J as x,K as U,L as ee,M as De,N as ye,O as Oe,P as Pe,Q as Le,R as te,S as Ge,U as Ue,V as je,W as Ve,X as Se,Y as ze,Z as Ke,$ as We,a0 as qe,a1 as Re}from"./framework.CB8iguzh.js";const Je=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:I(["VPBadge",e.type])},[u(e.$slots,"default",{},()=>[z(M(e.text),1)])],2))}}),Xe={key:0,class:"VPBackdrop"},Ye=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),k(ce,{name:"fade"},{default:v(()=>[e.show?(a(),c("div",Xe)):h("",!0)]),_:1}))}}),Qe=b(Ye,[["__scopeId","data-v-c79a1216"]]),V=Ae;function Ze(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function ie(o){return o.startsWith("/")?o:`/${o}`}function pe(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(He(o)||o.startsWith("#")||!n.startsWith("http")||!Be(e))return o;const{site:i}=V(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return de(l)}function R({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=V(),l=g(()=>{var p,$;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:g(()=>Object.entries(e.value.locales).flatMap(([p,$])=>l.value.label===$.label?[]:{text:$.label,link:xe($.link||(p==="root"?"/":`/${p}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function xe(o,e,t,s){return e?o.replace(/\/$/,"")+ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},st={class:"quote"},ot={class:"action"},at=["href","aria-label"],rt=m({__name:"NotFound",setup(o){const{theme:e}=V(),{currentLang:t}=R();return(s,n)=>{var i,l,f,p,$;return a(),c("div",et,[d("p",tt,M(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),d("h1",nt,M(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=d("div",{class:"divider"},null,-1)),d("blockquote",st,M(((f=r(e).notFound)==null?void 0:f.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",ot,[d("a",{class:"link",href:r(de)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},M((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,at)])])}}}),it=b(rt,[["__scopeId","data-v-d6be1790"]]);function Te(o,e){if(Array.isArray(o))return J(o);if(o==null)return[];e=ie(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ie(n))),s=t?o[t]:[];return Array.isArray(s)?J(s):J(s.items,s.base)}function lt(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function ut(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function le(o,e){return Array.isArray(e)?e.some(t=>le(o,t)):K(o,e.link)?!0:e.items?le(o,e.items):!1}function J(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=J(s.items,n)),s})}function O(){const{frontmatter:o,page:e,theme:t}=V(),s=re("(min-width: 960px)"),n=w(!1),i=g(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Te(C,N):[]}),l=w(i.value);D(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const f=g(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),p=g(()=>$?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),$=g(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),S=g(()=>f.value&&s.value),y=g(()=>f.value?lt(l.value):[]);function P(){n.value=!0}function T(){n.value=!1}function L(){n.value?T():P()}return{isOpen:n,sidebar:l,sidebarGroups:y,hasSidebar:f,hasAside:$,leftAside:p,isSidebarEnabled:S,open:P,close:T,toggle:L}}function ct(o,e){let t;Y(()=>{t=o.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",s)}),Q(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function dt(o){const{page:e,hash:t}=V(),s=w(!1),n=g(()=>o.value.collapsed!=null),i=g(()=>!!o.value.link),l=w(!1),f=()=>{l.value=K(e.value.relativePath,o.value.link)};D([e,o,t],f),j(f);const p=g(()=>l.value?!0:o.value.items?le(e.value.relativePath,o.value.items):!1),$=g(()=>!!(o.value.items&&o.value.items.length));Y(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||p.value)&&(s.value=!1)});function S(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:p,hasChildren:$,toggle:S}}function ft(){const{hasSidebar:o}=O(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const pt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ue=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function ve(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:vt(t),link:"#"+t.id,level:s}});return ht(e,o)}function vt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(pt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function ht(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return kt(o,s,n)}function mt(o,e){const{isAsideEnabled:t}=ft(),s=Ze(i,100);let n=null;j(()=>{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ee(()=>{l(location.hash)}),Q(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const f=window.scrollY,p=window.innerHeight,$=document.body.offsetHeight,S=Math.abs(f+p-$)<1,y=ue.map(({element:T,link:L})=>({link:L,top:_t(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,L)=>T.top-L.top);if(!y.length){l(null);return}if(f<1){l(null);return}if(S){l(y[y.length-1].link);return}let P=null;for(const{link:T,top:L}of y){if(L>f+Fe()+4)break;P=T}l(P)}function l(f){n&&n.classList.remove("active"),f==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const p=n;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function _t(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}function kt(o,e,t){ue.length=0;const s=[],n=[];return o.forEach(i=>{const l={...i,children:[]};let f=n[n.length-1];for(;f&&f.level>=l.level;)n.pop(),f=n[n.length-1];if(l.element.classList.contains("ignore-header")||f&&"shouldIgnore"in f){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const n=W("VPDocOutlineItem",!0);return a(),c("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(A,null,H(t.headers,({children:i,link:l,title:f})=>(a(),c("li",null,[d("a",{class:"outline-link",href:l,onClick:e,title:f},M(f),9,bt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),we=b(gt,[["__scopeId","data-v-b933a997"]]),$t={class:"content"},yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Pt=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),s=ge([]);Z(()=>{s.value=ve(e.value.outline??t.value.outline)});const n=w(),i=w();return mt(n,i),(l,f)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[d("div",$t,[d("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),d("div",yt,M(r(Ne)(r(t))),1),_(we,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Lt=b(Pt,[["__scopeId","data-v-a5bbad30"]]),Vt={class:"VPDocAsideCarbonAds"},St=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",Vt,[_(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Tt={class:"VPDocAside"},Nt=m({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,s)=>(a(),c("div",Tt,[u(t.$slots,"aside-top",{},void 0,!0),u(t.$slots,"aside-outline-before",{},void 0,!0),_(Lt),u(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=d("div",{class:"spacer"},null,-1)),u(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(St,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),u(t.$slots,"aside-ads-after",{},void 0,!0),u(t.$slots,"aside-bottom",{},void 0,!0)]))}}),wt=b(Nt,[["__scopeId","data-v-3f215769"]]);function It(){const{theme:o,page:e}=V();return g(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Mt(){const{page:o,theme:e,frontmatter:t}=V();return g(()=>{var $,S,y,P,T,L,C,N;const s=Te(e.value.sidebar,o.value.relativePath),n=ut(s),i=Ct(n,B=>B.link.replace(/[?#].*$/,"")),l=i.findIndex(B=>K(o.value.relativePath,B.link)),f=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((S=e.value.docFooter)==null?void 0:S.next)===!1&&!t.value.next||t.value.next===!1;return{prev:f?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=i[l-1])==null?void 0:y.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=i[l-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((L=i[l+1])==null?void 0:L.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ct(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.tag??(e.href?"a":"span")),s=g(()=>e.href&&$e.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(pe)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:v(()=>[u(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),At={class:"VPLastUpdated"},Ht=["datetime"],Bt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=V(),n=g(()=>new Date(t.value.lastUpdated)),i=g(()=>n.value.toISOString()),l=w("");return j(()=>{Y(()=>{var f,p,$;l.value=new Intl.DateTimeFormat((p=(f=e.value.lastUpdated)==null?void 0:f.formatOptions)!=null&&p.forceLocale?s.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(f,p)=>{var $;return a(),c("p",At,[z(M((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:i.value},M(l.value),9,Ht)])}}}),Et=b(Bt,[["__scopeId","data-v-e98dd255"]]),Ft={key:0,class:"VPDocFooter"},Dt={key:0,class:"edit-info"},Ot={key:0,class:"edit-link"},Gt={key:1,class:"last-updated"},Ut={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},jt={class:"pager"},zt=["innerHTML"],Kt=["innerHTML"],Wt={class:"pager"},qt=["innerHTML"],Rt=["innerHTML"],Jt=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=V(),n=It(),i=Mt(),l=g(()=>e.value.editLink&&s.value.editLink!==!1),f=g(()=>t.value.lastUpdated),p=g(()=>l.value||f.value||i.value.prev||i.value.next);return($,S)=>{var y,P,T,L;return p.value?(a(),c("footer",Ft,[u($.$slots,"doc-footer-before",{},void 0,!0),l.value||f.value?(a(),c("div",Dt,[l.value?(a(),c("div",Ot,[_(F,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:v(()=>[S[0]||(S[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),z(" "+M(r(n).text),1)]),_:1},8,["href"])])):h("",!0),f.value?(a(),c("div",Gt,[_(Et)])):h("",!0)])):h("",!0),(y=r(i).prev)!=null&&y.link||(P=r(i).next)!=null&&P.link?(a(),c("nav",Ut,[S[1]||(S[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",jt,[(T=r(i).prev)!=null&&T.link?(a(),k(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:v(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,zt),d("span",{class:"title",innerHTML:r(i).prev.text},null,8,Kt)]}),_:1},8,["href"])):h("",!0)]),d("div",Wt,[(L=r(i).next)!=null&&L.link?(a(),k(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:v(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,qt),d("span",{class:"title",innerHTML:r(i).next.text},null,8,Rt)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),Xt=b(Jt,[["__scopeId","data-v-e257564d"]]),Yt={class:"container"},Qt={class:"aside-container"},Zt={class:"aside-content"},xt={class:"content"},en={class:"content-container"},tn={class:"main"},nn=m({__name:"VPDoc",setup(o){const{theme:e}=V(),t=x(),{hasSidebar:s,hasAside:n,leftAside:i}=O(),l=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,p)=>{const $=W("Content");return a(),c("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[u(f.$slots,"doc-top",{},void 0,!0),d("div",Yt,[r(n)?(a(),c("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[p[0]||(p[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Qt,[d("div",Zt,[_(wt,null,{"aside-top":v(()=>[u(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),d("div",xt,[d("div",en,[u(f.$slots,"doc-before",{},void 0,!0),d("main",tn,[_($,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(Xt,null,{"doc-footer-before":v(()=>[u(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(f.$slots,"doc-after",{},void 0,!0)])])]),u(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),sn=b(nn,[["__scopeId","data-v-39a288b8"]]),on=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.href&&$e.test(e.href)),s=g(()=>e.tag||(e.href?"a":"button"));return(n,i)=>(a(),k(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?r(pe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[z(M(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),an=b(on,[["__scopeId","data-v-fa7799d5"]]),rn=["src","alt"],ln=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),c(A,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",U({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,rn)):(a(),c(A,{key:1},[_(s,U({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(s,U({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),X=b(ln,[["__scopeId","data-v-8426fc1a"]]),un={class:"container"},cn={class:"main"},dn={class:"heading"},fn=["innerHTML"],pn=["innerHTML"],vn=["innerHTML"],hn={key:0,class:"actions"},mn={key:0,class:"image"},_n={class:"image-container"},kn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=ee("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:I(["VPHero",{"has-image":t.image||r(e)}])},[d("div",un,[d("div",cn,[u(t.$slots,"home-hero-info-before",{},void 0,!0),u(t.$slots,"home-hero-info",{},()=>[d("h1",dn,[t.name?(a(),c("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,fn)):h("",!0),t.text?(a(),c("span",{key:1,innerHTML:t.text,class:"text"},null,8,pn)):h("",!0)]),t.tagline?(a(),c("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,vn)):h("",!0)],!0),u(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",hn,[(a(!0),c(A,null,H(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[_(an,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),u(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",mn,[d("div",_n,[s[0]||(s[0]=d("div",{class:"image-bg"},null,-1)),u(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),bn=b(kn,[["__scopeId","data-v-4f9c455b"]]),gn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,s)=>r(e).hero?(a(),k(bn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":v(()=>[u(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[u(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[u(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[u(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[u(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),$n={class:"box"},yn={key:0,class:"icon"},Pn=["innerHTML"],Ln=["innerHTML"],Vn=["innerHTML"],Sn={key:4,class:"link-text"},Tn={class:"link-text-value"},Nn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),k(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[d("article",$n,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",yn,[_(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Pn)):h("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Ln),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Vn)):h("",!0),e.linkText?(a(),c("div",Sn,[d("p",Tn,[z(M(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),wn=b(Nn,[["__scopeId","data-v-a3976bdc"]]),In={key:0,class:"VPFeatures"},Mn={class:"container"},Cn={class:"items"},An=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=g(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",In,[d("div",Mn,[d("div",Cn,[(a(!0),c(A,null,H(s.features,i=>(a(),c("div",{key:i.title,class:I(["item",[t.value]])},[_(wn,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Hn=b(An,[["__scopeId","data-v-a6181336"]]),Bn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,s)=>r(e).features?(a(),k(Hn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),En=m({__name:"VPHomeContent",setup(o){const{width:e}=De({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:ye(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[u(t.$slots,"default",{},void 0,!0)],4))}}),Fn=b(En,[["__scopeId","data-v-8e2d4988"]]),Dn=m({__name:"VPHome",setup(o){const{frontmatter:e,theme:t}=V();return(s,n)=>{const i=W("Content");return a(),c("div",{class:I(["VPHome",{"external-link-icon-enabled":r(t).externalLinkIcon}])},[u(s.$slots,"home-hero-before",{},void 0,!0),_(gn,null,{"home-hero-info-before":v(()=>[u(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[u(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[u(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[u(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(s.$slots,"home-hero-after",{},void 0,!0),u(s.$slots,"home-features-before",{},void 0,!0),_(Bn),u(s.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(Fn,{key:0},{default:v(()=>[_(i)]),_:1})):(a(),k(i,{key:1}))],2)}}}),On=b(Dn,[["__scopeId","data-v-8b561e3d"]]),Gn={},Un={class:"VPPage"};function jn(o,e){const t=W("Content");return a(),c("div",Un,[u(o.$slots,"page-top"),_(t),u(o.$slots,"page-bottom")])}const zn=b(Gn,[["render",jn]]),Kn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=O();return(n,i)=>(a(),c("div",{class:I(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?u(n.$slots,"not-found",{key:0},()=>[_(it)],!0):r(t).layout==="page"?(a(),k(zn,{key:1},{"page-top":v(()=>[u(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(On,{key:2},{"home-hero-before":v(()=>[u(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[u(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[u(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[u(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[u(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(E(r(t).layout),{key:3})):(a(),k(sn,{key:4},{"doc-top":v(()=>[u(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[u(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[u(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[u(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[u(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Wn=b(Kn,[["__scopeId","data-v-1428d186"]]),qn={class:"container"},Rn=["innerHTML"],Jn=["innerHTML"],Xn=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=O();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:I(["VPFooter",{"has-sidebar":r(s)}])},[d("div",qn,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,Rn)):h("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,Jn)):h("",!0)])],2)):h("",!0)}}),Yn=b(Xn,[["__scopeId","data-v-e315a0ad"]]);function Qn(){const{theme:o,frontmatter:e}=V(),t=ge([]),s=g(()=>t.value.length>0);return Z(()=>{t.value=ve(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const Zn={class:"menu-text"},xn={class:"header"},es={class:"outline"},ts=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),s=w(!1),n=w(0),i=w(),l=w();function f(y){var P;(P=i.value)!=null&&P.contains(y.target)||(s.value=!1)}D(s,y=>{if(y){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),Oe("Escape",()=>{s.value=!1}),Z(()=>{s.value=!1});function p(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(y){y.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Pe(()=>{s.value=!1}))}function S(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:ye({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),c("button",{key:0,onClick:p,class:I({open:s.value})},[d("span",Zn,M(r(Ne)(r(t))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),c("button",{key:1,onClick:S},M(r(t).returnToTopLabel||"Return to top"),1)),_(ce,{name:"flyout"},{default:v(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",xn,[d("a",{class:"top-link",href:"#",onClick:S},M(r(t).returnToTopLabel||"Return to top"),1)]),d("div",es,[_(we,{headers:y.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),ns=b(ts,[["__scopeId","data-v-8a42e2b4"]]),ss={class:"container"},os=["aria-expanded"],as={class:"menu-text"},rs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=O(),{headers:n}=Qn(),{y:i}=Le(),l=w(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Z(()=>{n.value=ve(t.value.outline??e.value.outline)});const f=g(()=>n.value.length===0),p=g(()=>f.value&&!s.value),$=g(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:f.value,fixed:p.value}));return(S,y)=>r(t).layout!=="home"&&(!p.value||r(i)>=l.value)?(a(),c("div",{key:0,class:I($.value)},[d("div",ss,[r(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":S.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=P=>S.$emit("open-menu"))},[y[1]||(y[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",as,M(r(e).sidebarMenuLabel||"Menu"),1)],8,os)):h("",!0),_(ns,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),is=b(rs,[["__scopeId","data-v-a6f0e41e"]]);function ls(){const o=w(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=x();return D(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const us={},cs={class:"VPSwitch",type:"button",role:"switch"},ds={class:"check"},fs={key:0,class:"icon"};function ps(o,e){return a(),c("button",cs,[d("span",ds,[o.$slots.default?(a(),c("span",fs,[u(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const vs=b(us,[["render",ps],["__scopeId","data-v-1d5665e3"]]),hs=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),s=ee("toggle-appearance",()=>{e.value=!e.value}),n=w("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),k(vs,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:v(()=>l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),he=b(hs,[["__scopeId","data-v-5337faa4"]]),ms={key:0,class:"VPNavBarAppearance"},_s=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",ms,[_(he)])):h("",!0)}}),ks=b(_s,[["__scopeId","data-v-6c893767"]]),me=w();let Ie=!1,ae=0;function bs(o){const e=w(!1);if(te){!Ie&&gs(),ae++;const t=D(me,s=>{var n,i,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});Q(()=>{t(),ae--,ae||$s()})}return Ge(e)}function gs(){document.addEventListener("focusin",Me),Ie=!0,me.value=document.activeElement}function $s(){document.removeEventListener("focusin",Me)}function Me(){me.value=document.activeElement}const ys={class:"VPMenuLink"},Ps=["innerHTML"],Ls=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),c("div",ys,[_(F,{class:I({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:v(()=>[d("span",{innerHTML:t.item.text},null,8,Ps)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ne=b(Ls,[["__scopeId","data-v-35975db6"]]),Vs={class:"VPMenuGroup"},Ss={key:0,class:"title"},Ts=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Vs,[e.text?(a(),c("p",Ss,M(e.text),1)):h("",!0),(a(!0),c(A,null,H(e.items,s=>(a(),c(A,null,["link"in s?(a(),k(ne,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Ns=b(Ts,[["__scopeId","data-v-69e747b5"]]),ws={class:"VPMenu"},Is={key:0,class:"items"},Ms=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",ws,[e.items?(a(),c("div",Is,[(a(!0),c(A,null,H(e.items,s=>(a(),c(A,{key:JSON.stringify(s)},["link"in s?(a(),k(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),k(E(s.component),U({key:1,ref_for:!0},s.props),null,16)):(a(),k(Ns,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),u(e.$slots,"default",{},void 0,!0)]))}}),Cs=b(Ms,[["__scopeId","data-v-b98bc113"]]),As=["aria-expanded","aria-label"],Hs={key:0,class:"text"},Bs=["innerHTML"],Es={key:1,class:"vpi-more-horizontal icon"},Fs={class:"menu"},Ds=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=w(!1),t=w();bs({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",Hs,[n.icon?(a(),c("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,Bs)):h("",!0),i[3]||(i[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),c("span",Es))],8,As),d("div",Fs,[_(Cs,{items:n.items},{default:v(()=>[u(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),_e=b(Ds,[["__scopeId","data-v-cf11d7a2"]]),Os=["href","aria-label","innerHTML"],Gs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=w();j(async()=>{var i;await Pe();const n=(i=t.value)==null?void 0:i.children[0];n instanceof HTMLElement&&n.className.startsWith("vpi-social-")&&(getComputedStyle(n).maskImage||getComputedStyle(n).webkitMaskImage)==="none"&&n.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const s=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,i)=>(a(),c("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,Os))}}),Us=b(Gs,[["__scopeId","data-v-bd121fe5"]]),js={class:"VPSocialLinks"},zs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",js,[(a(!0),c(A,null,H(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),k(Us,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),ke=b(zs,[["__scopeId","data-v-7bc22406"]]),Ks={key:0,class:"group translations"},Ws={class:"trans-title"},qs={key:1,class:"group"},Rs={class:"item appearance"},Js={class:"label"},Xs={class:"appearance-action"},Ys={key:2,class:"group"},Qs={class:"item social-links"},Zs=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:n}=R({correspondingLink:!0}),i=g(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,f)=>i.value?(a(),k(_e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[r(s).length&&r(n).label?(a(),c("div",Ks,[d("p",Ws,M(r(n).label),1),(a(!0),c(A,null,H(r(s),p=>(a(),k(ne,{key:p.link,item:p},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",qs,[d("div",Rs,[d("p",Js,M(r(t).darkModeSwitchLabel||"Appearance"),1),d("div",Xs,[_(he)])])])):h("",!0),r(t).socialLinks?(a(),c("div",Ys,[d("div",Qs,[_(ke,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),xs=b(Zs,[["__scopeId","data-v-bb2aa2f0"]]),eo=["aria-expanded"],to=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,eo))}}),no=b(to,[["__scopeId","data-v-e5dd9c1c"]]),so=["innerHTML"],oo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),k(F,{class:I({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:v(()=>[d("span",{innerHTML:t.item.text},null,8,so)]),_:1},8,["class","href","target","rel","no-icon"]))}}),ao=b(oo,[["__scopeId","data-v-e56f3d57"]]),ro=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),s=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=g(()=>s(e.item));return(i,l)=>(a(),k(_e,{class:I({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),io={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},lo=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),c("nav",io,[s[0]||(s[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),c(A,null,H(r(e).nav,n=>(a(),c(A,{key:JSON.stringify(n)},["link"in n?(a(),k(ao,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props),null,16)):(a(),k(ro,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),uo=b(lo,[["__scopeId","data-v-dc692963"]]);function co(o){const{localeIndex:e,theme:t}=V();function s(n){var L,C,N;const i=n.split("."),l=(L=t.value.search)==null?void 0:L.options,f=l&&typeof l=="object",p=f&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,$=f&&l.translations||null;let S=p,y=$,P=o;const T=i.pop();for(const B of i){let G=null;const q=P==null?void 0:P[B];q&&(G=P=q);const se=y==null?void 0:y[B];se&&(G=y=se);const oe=S==null?void 0:S[B];oe&&(G=S=oe),q||(P=G),se||(y=G),oe||(S=G)}return(S==null?void 0:S[T])??(y==null?void 0:y[T])??(P==null?void 0:P[T])??""}return s}const fo=["aria-label"],po={class:"DocSearch-Button-Container"},vo={class:"DocSearch-Button-Placeholder"},be=m({__name:"VPNavBarSearchButton",setup(o){const t=co({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[d("span",po,[n[0]||(n[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",vo,M(r(t)("button.buttonText")),1)]),n[1]||(n[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,fo))}}),ho={class:"VPNavBarSearch"},mo={id:"local-search"},_o={key:1,id:"docsearch"},ko=m({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=Ue(()=>je(()=>import("./VPAlgoliaSearchBox.XYDV-sQ7.js"),__vite__mapDeps([0,1]))),{theme:s}=V(),n=w(!1),i=w(!1),l=()=>{const P="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{var C;const L=document.createElement("link");L.id=P,L.rel="preconnect",L.href=`https://${(((C=s.value.search)==null?void 0:C.options)??s.value.algolia).appId}-dsn.algolia.net`,L.crossOrigin="",document.head.appendChild(L)})};j(()=>{l();const P=L=>{(L.key.toLowerCase()==="k"&&(L.metaKey||L.ctrlKey)||!$(L)&&L.key==="/")&&(L.preventDefault(),f(),T())},T=()=>{window.removeEventListener("keydown",P)};window.addEventListener("keydown",P),Q(T)});function f(){n.value||(n.value=!0,setTimeout(p,16))}function p(){const P=new Event("keydown");P.key="k",P.metaKey=!0,window.dispatchEvent(P),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||p()},16)}function $(P){const T=P.target,L=T.tagName;return T.isContentEditable||L==="INPUT"||L==="SELECT"||L==="TEXTAREA"}const S=w(!1),y="algolia";return(P,T)=>{var L;return a(),c("div",ho,[r(y)==="local"?(a(),c(A,{key:0},[S.value?(a(),k(r(e),{key:0,onClose:T[0]||(T[0]=C=>S.value=!1)})):h("",!0),d("div",mo,[_(be,{onClick:T[1]||(T[1]=C=>S.value=!0)})])],64)):r(y)==="algolia"?(a(),c(A,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((L=r(s).search)==null?void 0:L.options)??r(s).algolia,onVnodeBeforeMount:T[2]||(T[2]=C=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),c("div",_o,[_(be,{onClick:f})]))],64)):h("",!0)])}}}),bo=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),go=b(bo,[["__scopeId","data-v-0394ad82"]]),$o=["href","rel","target"],yo=["innerHTML"],Po={key:2},Lo=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:s}=O(),{currentLang:n}=R(),i=g(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),l=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),f=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,$)=>(a(),c("div",{class:I(["VPNavBarTitle",{"has-sidebar":r(s)}])},[d("a",{class:"title",href:i.value??r(pe)(r(n).link),rel:l.value,target:f.value},[u(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),c("span",{key:1,innerHTML:r(t).siteTitle},null,8,yo)):r(t).siteTitle===void 0?(a(),c("span",Po,M(r(e).title),1)):h("",!0),u(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,$o)],2))}}),Vo=b(Lo,[["__scopeId","data-v-1168a8e4"]]),So={class:"items"},To={class:"title"},No=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:s}=R({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),k(_e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:v(()=>[d("div",So,[d("p",To,M(r(s).label),1),(a(!0),c(A,null,H(r(t),l=>(a(),k(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),wo=b(No,[["__scopeId","data-v-88af2de4"]]),Io={class:"wrapper"},Mo={class:"container"},Co={class:"title"},Ao={class:"content"},Ho={class:"content-body"},Bo=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=Le(),{hasSidebar:s}=O(),{frontmatter:n}=V(),i=w({});return fe(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,f)=>(a(),c("div",{class:I(["VPNavBar",i.value])},[d("div",Io,[d("div",Mo,[d("div",Co,[_(Vo,null,{"nav-bar-title-before":v(()=>[u(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Ao,[d("div",Ho,[u(l.$slots,"nav-bar-content-before",{},void 0,!0),_(ko,{class:"search"}),_(uo,{class:"menu"}),_(wo,{class:"translations"}),_(ks,{class:"appearance"}),_(go,{class:"social-links"}),_(xs,{class:"extra"}),u(l.$slots,"nav-bar-content-after",{},void 0,!0),_(no,{class:"hamburger",active:l.isScreenOpen,onClick:f[0]||(f[0]=p=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),f[1]||(f[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Eo=b(Bo,[["__scopeId","data-v-6aa21345"]]),Fo={key:0,class:"VPNavScreenAppearance"},Do={class:"text"},Oo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",Fo,[d("p",Do,M(r(t).darkModeSwitchLabel||"Appearance"),1),_(he)])):h("",!0)}}),Go=b(Oo,[["__scopeId","data-v-b44890b2"]]),Uo=["innerHTML"],jo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=ee("close-screen");return(t,s)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:v(()=>[d("span",{innerHTML:t.item.text},null,8,Uo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),zo=b(jo,[["__scopeId","data-v-df37e6dd"]]),Ko=["innerHTML"],Wo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=ee("close-screen");return(t,s)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:v(()=>[d("span",{innerHTML:t.item.text},null,8,Ko)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ce=b(Wo,[["__scopeId","data-v-3e9c20e4"]]),qo={class:"VPNavScreenMenuGroupSection"},Ro={key:0,class:"title"},Jo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",qo,[e.text?(a(),c("p",Ro,M(e.text),1)):h("",!0),(a(!0),c(A,null,H(e.items,s=>(a(),k(Ce,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Xo=b(Jo,[["__scopeId","data-v-8133b170"]]),Yo=["aria-controls","aria-expanded"],Qo=["innerHTML"],Zo=["id"],xo={key:0,class:"item"},ea={key:1,class:"item"},ta={key:2,class:"group"},na=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=w(!1),s=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),c("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:i.text},null,8,Qo),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Yo),d("div",{id:s.value,class:"items"},[(a(!0),c(A,null,H(i.items,f=>(a(),c(A,{key:JSON.stringify(f)},["link"in f?(a(),c("div",xo,[_(Ce,{item:f},null,8,["item"])])):"component"in f?(a(),c("div",ea,[(a(),k(E(f.component),U({ref_for:!0},f.props,{"screen-menu":""}),null,16))])):(a(),c("div",ta,[_(Xo,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,Zo)],2))}}),sa=b(na,[["__scopeId","data-v-b9ab8c58"]]),oa={key:0,class:"VPNavScreenMenu"},aa=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),c("nav",oa,[(a(!0),c(A,null,H(r(e).nav,n=>(a(),c(A,{key:JSON.stringify(n)},["link"in n?(a(),k(zo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(sa,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ra=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia={class:"list"},la=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=R({correspondingLink:!0}),s=w(!1);function n(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[d("button",{class:"title",onClick:n},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),z(" "+M(r(t).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",ia,[(a(!0),c(A,null,H(r(e),f=>(a(),c("li",{key:f.link,class:"item"},[_(F,{class:"link",href:f.link},{default:v(()=>[z(M(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ua=b(la,[["__scopeId","data-v-858fe1a4"]]),ca={class:"container"},da=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=w(null),t=Ve(te?document.body:null);return(s,n)=>(a(),k(ce,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:v(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",ca,[u(s.$slots,"nav-screen-content-before",{},void 0,!0),_(aa,{class:"menu"}),_(ua,{class:"translations"}),_(Go,{class:"appearance"}),_(ra,{class:"social-links"}),u(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),fa=b(da,[["__scopeId","data-v-f2779853"]]),pa={key:0,class:"VPNav"},va=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=ls(),{frontmatter:n}=V(),i=g(()=>n.value.navbar!==!1);return Se("close-screen",t),Y(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,f)=>i.value?(a(),c("header",pa,[_(Eo,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":v(()=>[u(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(fa,{open:r(e)},{"nav-screen-content-before":v(()=>[u(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ha=b(va,[["__scopeId","data-v-ae24b3ad"]]),ma=["role","tabindex"],_a={key:1,class:"items"},ka=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:f,toggle:p}=dt(g(()=>e.item)),$=g(()=>f.value?"section":"div"),S=g(()=>n.value?"a":"div"),y=g(()=>f.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=g(()=>n.value?void 0:"button"),T=g(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function L(N){"key"in N&&N.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(N,B)=>{const G=W("VPSidebarItem",!0);return a(),k(E($.value),{class:I(["VPSidebarItem",T.value])},{default:v(()=>[N.item.text?(a(),c("div",U({key:0,class:"item",role:P.value},Ke(N.item.items?{click:L,keydown:L}:{},!0),{tabindex:N.item.items&&0}),[B[1]||(B[1]=d("div",{class:"indicator"},null,-1)),N.item.link?(a(),k(F,{key:0,tag:S.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:v(()=>[(a(),k(E(y.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(E(y.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:ze(C,["enter"]),tabindex:"0"},B[0]||(B[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,ma)):h("",!0),N.item.items&&N.item.items.length?(a(),c("div",_a,[N.depth<5?(a(!0),c(A,{key:0},H(N.item.items,q=>(a(),k(G,{key:q.text,item:q,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),ba=b(ka,[["__scopeId","data-v-b3fd67f8"]]),ga=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=w(!0);let t=null;return j(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),We(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),c(A,null,H(s.items,i=>(a(),c("div",{key:i.text,class:I(["group",{"no-transition":e.value}])},[_(ba,{item:i,depth:0},null,8,["item"])],2))),128))}}),$a=b(ga,[["__scopeId","data-v-c40bc020"]]),ya={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Pa=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),s=o,n=w(null),i=Ve(te?document.body:null);D([s,n],()=>{var f;s.open?(i.value=!0,(f=n.value)==null||f.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=w(0);return D(e,()=>{l.value+=1},{deep:!0}),(f,p)=>r(t)?(a(),c("aside",{key:0,class:I(["VPSidebar",{open:f.open}]),ref_key:"navEl",ref:n,onClick:p[0]||(p[0]=qe(()=>{},["stop"]))},[p[2]||(p[2]=d("div",{class:"curtain"},null,-1)),d("nav",ya,[p[1]||(p[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),u(f.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k($a,{items:r(e),key:l.value},null,8,["items"])),u(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),La=b(Pa,[["__scopeId","data-v-319d5ca6"]]),Va=m({__name:"VPSkipLink",setup(o){const{theme:e}=V(),t=x(),s=w();D(()=>t.path,()=>s.value.focus());function n({target:i}){const l=document.getElementById(decodeURIComponent(i.hash).slice(1));if(l){const f=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",f)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",f),l.focus(),window.scrollTo(0,0)}}return(i,l)=>(a(),c(A,null,[d("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n},M(r(e).skipToContentLabel||"Skip to content"),1)],64))}}),Sa=b(Va,[["__scopeId","data-v-0b0ada53"]]),Ta=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=O(),n=x();D(()=>n.path,s),ct(e,s);const{frontmatter:i}=V(),l=Re(),f=g(()=>!!l["home-hero-image"]);return Se("hero-image-slot-exists",f),(p,$)=>{const S=W("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:I(["Layout",r(i).pageClass])},[u(p.$slots,"layout-top",{},void 0,!0),_(Sa),_(Qe,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),_(ha,null,{"nav-bar-title-before":v(()=>[u(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[u(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(is,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),_(La,{open:r(e)},{"sidebar-nav-before":v(()=>[u(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[u(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(Wn,null,{"page-top":v(()=>[u(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[u(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[u(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[u(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[u(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[u(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[u(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[u(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[u(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[u(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(Yn),u(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(S,{key:1}))}}}),Na=b(Ta,[["__scopeId","data-v-5d98c3a5"]]),Ia={Layout:Na,enhanceApp:({app:o})=>{o.component("Badge",Je)}};export{Ia as t,V as u}; diff --git a/assets/configuration.md.Bvg07Uqv.js b/assets/configuration.md.Bvg07Uqv.js new file mode 100644 index 0000000..33e5dc9 --- /dev/null +++ b/assets/configuration.md.Bvg07Uqv.js @@ -0,0 +1,550 @@ +import{_ as s,c as a,ag as e,o as n}from"./chunks/framework.CB8iguzh.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"configuration.md","filePath":"configuration.md","lastUpdated":null}'),t={name:"configuration.md"};function l(h,i,o,p,r,d){return n(),a("div",null,i[0]||(i[0]=[e(`

Configuration

This page contains information about all configuration that can be provided to the plugin.

Global settings

org_agenda_files

  • Type: string | string[]
  • Default: ''

Single or multiple paths from where the org files are being read.

Examples:

  • ~/org/*
  • {'~/Dropbox/org/**/*', '~/orgfiles/*'}

org_default_notes_file

  • Type: string
  • Default: ''

Path to a file that will be used as a default target file when refiling.

Example: ~/orgfiles/refile.org

org_todo_keywords

  • Type: string[]
  • Default: {'TODO', '|', 'DONE'}

List of unfinished ("TODO") and finished ("DONE") keywords.
| is used as a separator between the two groups.

if | is omitted, only the last entry in array is considered a "DONE" state.

To use Fast access to TODO States, set a fast access key to at least one of the entries.

For entries where a fast access key is not set, the first character of the keyword is used as the fast access key.

Examples (Without fast access):

  • {'TODO', 'NEXT', '|', 'DONE'}
  • {'TODO', 'WAITING', '|', 'DONE', 'DELEGATED'}

Examples (With fast access):

  • {'TODO(t)', 'NEXT(n)', '|', 'DONE(d)'}
  • {'TODO(t)', 'NEXT', '|', 'DONE'} - Same as above. Fast key is derived from first char.

NOTE: Make sure fast access keys do not overlap. If that happens, first entry in list gets it.

org_todo_repeat_to_state

  • Type: string | nil
  • Default: nil

Set an entry from org_todo_keywords to use as the "starting" state for repeatable todos.

If provided value does not exist in org_todo_keywords, first entry from that list is used.

win_split_mode

  • Type: string | function | [string, number]
  • Default: 'horizontal'

This option determines how to open agenda and capture window.

Available string values:

  • horizontal - Always split horizontally
  • vertical - Always split vertically
  • auto - Determine between horizontal and vertical split depending on the current window size
  • float - Open in float window that has width of 70% of the screen centered
  • {'float', 0.9} - Open in float window and provide custom scale (in this case it's 90% of screen size), must be value between 0 and 1

If none of the options above suit your needs, there are 2 other ways to customize this:

  1. Provide a custom command string (see :help <mods>). Few examples:

    • Always open in tab: tabnew
    • Always open vertically: vsplit
    • Always open horizontally with specific height of 20 lines: 20split
  2. Custom function

    lua
    win_split_mode = function(name)
    +  -- Make sure it's not a scratch buffer by passing false as 2nd argument
    +  local bufnr = vim.api.nvim_create_buf(false, false)
    +  --- Setting buffer name is required
    +  vim.api.nvim_buf_set_name(bufnr, name)
    +
    +  local fill = 0.8
    +  local width = math.floor((vim.o.columns * fill))
    +  local height = math.floor((vim.o.lines * fill))
    +  local row = math.floor((((vim.o.lines - height) / 2) - 1))
    +  local col = math.floor(((vim.o.columns - width) / 2))
    +
    +  vim.api.nvim_open_win(bufnr, true, {
    +    relative = "editor",
    +    width = width,
    +    height = height,
    +    row = row,
    +    col = col,
    +    style = "minimal",
    +    border = "rounded"
    +  })
    +end

win_border

  • Type: string | string[]
  • Default: 'single'

Border style for floating windows. Available options:

  • none - No border (default)
  • single - A single line box
  • double - A double line box
  • rounded - Like "single", but with rounded corners ("╭" etc.)
  • solid - Adds padding by a single whitespace cell
  • shadow - A drop shadow effect by blending with the background
  • {'╔', '═' ,'╗', '║', '╝', '═', '╚', '║' } - Specify border characters in a clock-wise fashion
  • {'/', '-', '\\\\', '|' } - If less than eight chars the chars will start repeating

See :help nvim_open_win()

Applies to:

  • always - calendar pop-up, help pop-up, notification pop-up
  • win_split_mode is set to float - agenda window , capture window

org_startup_folded

  • Type: string
  • Default: 'overview'

How many headings and other foldable items should be shown when an org file is opened. Available options:

  • overview - Only show top level elements (default)
  • content - Only show the first two levels
  • showeverything - Show all elements
  • inherit - Use the fold level set in Neovim's global foldlevel option

org_todo_keyword_faces

  • Type: table<string, string>
  • Default: {}

Custom colors for todo keywords. Available options:

  • foreground - :foreground hex/colorname. Examples: :foreground #FF0000, :foreground blue
  • background - :background hex/colorname. Examples: :background #FF0000, :background blue
  • weight - :weight bold
  • underline - :underline on
  • italic - :slant italic

Full configuration example with additional todo keywords and their colors:

lua
require('orgmode').setup({
+  org_todo_keywords = {'TODO', 'WAITING', '|', 'DONE', 'DELEGATED'},
+  org_todo_keyword_faces = {
+    WAITING = ':foreground blue :weight bold',
+    DELEGATED = ':background #FFFFFF :slant italic :underline on',
+    TODO = ':background #000000 :foreground red', -- overrides builtin color for \`TODO\` keyword
+  }
+})

org_archive_location

  • Type: string
  • Default: '%s_archive::'

Destination file for archiving. %s indicates the current file. :: is used as a separator for archiving to headline which is currently not supported. This means that if you do a refile from a file ~/my-orgs/todos.org, your task will be archived in ~/my-orgs/todos.org_archive.

Example value: '~/my-orgs/default-archive-file.org::'

📝 NOTE: This value can be overridden per file basis with a org special keyword #+ARCHIVE.

org_hide_leading_stars

  • Type: boolean
  • Default: false

Hide leading stars for headings. Example:

Disabled (default):

org
* TODO First item
+** TODO Second Item
+*** TODO Third item

Enabled:

org
* TODO First item
+ * TODO Second Item
+  * TODO Third item

📝 NOTE: Stars are hidden by applying highlight group that masks them with color that's same as background color. If this highlight group does not suit you, you can apply different highlight group to it:

lua
vim.cmd[[autocmd ColorScheme * hi link @org.leading.stars MyCustomHlGroup]]

To set specific characters instead of using asterisk, check org-bullets.nvim plugin plugin.

org_hide_emphasis_markers

  • Type: boolean
  • Default: false

Conceal bold/italic/underline/code/verbatim markers.

Ensure your :h conceallevel is set properly in order for this to function.

org_ellipsis

  • Type: string
  • Default: '...'

Marker used to indicate a folded headline.

org_log_done

  • Type: string|false
  • Default: time

Possible values:

  • time - adds CLOSED date when marking headline as done
  • note - adds CLOSED date as above, and prompts for closing note via capture window. Confirm note with org_note_finalize (Default <C-c>), or ignore providing note via org_note_kill (Default <Leader>ok)
  • false - Disable any logging

org_log_repeat

  • Type: string|false
  • Default: time

Possible values:

  • time - adds LAST_REPEAT date to properties when marking headline with a repeater date as done
  • note - adds LAST_REPEAT date as above, and prompts for closing note via capture window. Confirm note with org_note_finalize (Default <C-c>), or ignore providing note via org_note_kill (Default <Leader>ok)
  • false - Disable logging the LAST_REPEAT date

org_log_into_drawer

  • Type: string|nil
  • Default: nil

Log TODO state changes into a drawer with the given name. The recommended value is LOGBOOK. If nil, log into the section body.

  • Type: string|nil
  • Default: nil

📝 NOTE: This option is experimental

Possible values:

  • native - Includes whole latex syntax file into the org syntax. It can potentially cause some highlighting issues and slowness.
  • entities - Highlight latex only in these situations (see Orgmode latex fragments):
    • between \\begin and \\end delimiters
    • between $ and $ delimiters - example: $a^2=b$
    • between $$ and $$ delimiters - example: $$ a=+\\sqrt{2} $$
    • between \\[ and \\] delimiters - example: \\[ a=-\\sqrt{2} \\]
    • between \\( and \\) delimiters - example: \\( b=2 \\)

org_startup_indented

  • Type: boolean
  • Default: false

Possible values:

  • true - Uses Virtual indents to align content visually. The indents are only visual, they are not saved to the file.
  • false - Do not add any Virtual indentation.

You can toggle Virtual indents on the fly by executing command :Org indent_mode when in a org buffer. This additionally sets the buffer variable vim.b.org_indent_mode to true or false, depending on the current state. Value of this buffer variable is then used to determine behavior of few options below.

org_adapt_indentation

  • Type: boolean
  • Default: true

Possible values:

  • true - Use hard indents for content under headlines. Files will save with indents relative to headlines.
  • false - Do not add any hard indents. Files will save without indentation relative to headlines.

org_indent_mode_turns_off_org_adapt_indentation

  • Type: boolean
  • Default: true

Possible values:

org_indent_mode_turns_on_hiding_stars

  • Type: boolean
  • Default: true

Possible values:

org_src_window_setup

  • Type: string | function
  • Default: 'top 16new'

If the value is a string, it will be run directly as input to :h vim.cmd, otherwise if the value is a function it will be called. Both values have the responsibility of opening a buffer (within a window) to show the special edit buffer. The content of the buffer will be set automatically, so this option only needs to handle opening an empty buffer.

org_edit_src_content_indentation

  • Type: number
  • Default: 0

The indent value for content within SRC block types beyond the existing indent of the block itself. Only applied when exiting from an org_edit_special action on a SRC block.

org_edit_src_filetype_map

  • Type: table<string, string>
  • Default: {}

This filetype map associates the language name from an Org source block with the corresponding Vim filetype, which is then applied to the temporary buffer.

org_custom_exports

  • Type: table
  • Default: {}

Add custom export options to the export prompt. Structure:

example
[shortcut:string] = {
+  [label:string] = 'Label in export prompt',
+  [action:function] = function(exporter)
+    return exporter(command:table, target:string, on_success?:function, on_error?:function)
+  end
+}

Breakdown:

  • shortcut - single char that will be used to select the export. Make sure it doesn't conflict with existing options
  • action - function that provides exporter function for generating the exports
  • exporter - function that calls the command provided via job
    • command - table (array like) that contains command how to generate the export
    • target - target file name that will be generated
    • on_success? - function that is triggered when export succeeds (command exit status is 0). Provides table parameter with command output. Optional, defaults to prompt to open target file.
    • on_error? - function that is triggered when export fails (command exit status is not 0). Provides table parameter with command output. Optional, defaults to printing output as error.

For example, lets add option to export to rtf format via pandoc:

lua
require('orgmode').setup({
+  org_custom_exports = {
+    f = {
+      label = 'Export to RTF format',
+      action = function(exporter)
+        local current_file = vim.api.nvim_buf_get_name(0)
+        local target = vim.fn.fnamemodify(current_file, ':p:r')..'.rtf'
+        local command = {'pandoc', current_file, '-o', target}
+        local on_success = function(output)
+          print('Success!')
+          vim.api.nvim_echo({{ table.concat(output, '\\n') }}, true, {})
+        end
+        local on_error = function(err)
+          print('Error!')
+          vim.api.nvim_echo({{ table.concat(err, '\\n'), 'ErrorMsg' }}, true, {})
+        end
+        return exporter(command , target, on_success, on_error)
+      end
+    }
+  }
+})

org_time_stamp_rounding_minutes

  • Type: number
  • Default: 5

Number of minutes to increase/decrease when using org_timestamp_up/org_timestamp_down

org_cycle_separator_lines

  • Type number
  • Default: 2

Minimum number of empty lines needed at the end of the headline to show a single empty line when headline is folded.

For example, given this structure:

org
* One empty space headline
+  Content
+
+* Two empty space headline
+  Content
+
+
+* Three empty space headline
+  Content
+
+
+
+* Last headline
+  Content

When folded, it will appear like this:

org
* One empty space headline ...
+* Two empty space headline ...
+
+* Three empty space headline ...
+
+* Last headline ...

When value is 0, all empty lines are folded together with headline.

Cannot be negative.

org_blank_before_new_entry

  • Type: table<string, boolean>
  • Default: { heading = true, plain_list_item = false }

Determine if blank line should be prepended when:

  • Adding heading via org_meta_return and org_insert_* mappings
  • Adding a list item via org_meta_return

org_id_uuid_program

  • Type: string
  • Default: uuidgen

External program used to generate uuid's for id module

org_id_ts_format

  • Type: string
  • Default: %Y%m%d%H%M%S

Format of the id generated when org_id_method is set to ts.

org_id_method

  • Type: 'uuid' | 'ts' | 'org'
  • Default: uuid

What method to use to generate ids via org id module.

org_id_prefix

  • Type: string | nil
  • Default: nil

Prefix added to the generated id when org_id_method is set to org.

  • Type: boolean
  • Default: false

If true, generate ID with the Org ID module and append it to the headline as property. More info on org_store_link

org_use_property_inheritance

  • Type: boolean | string | string[]
  • Default: false

Determine whether properties of one headline are inherited by sub-headlines.

  • false - properties only pertain to the file or headline that defines them
  • true - properties of a headlines also pertain to all its sub-headlines
  • string[] - only the properties named in the given list are inherited
  • string - only properties matching the given regex are inherited

Note that for a select few properties, the inheritance behavior is hard-coded within their special applications. See Property Inheritance for details.

org_babel_default_header_args

  • Type: table<string, string>
  • Default: { [':tangle'] = 'no', [':noweb'] = no }

Default header args for extracting source code. See Extract source code (tangle) for more details.

calendar_week_start_day

  • Type: number
  • Default: 1

Available options:

  • 0 - start week on Sunday
  • 1 - start week on Monday

Determine on which day the week will start in calendar modal (ex: changing the date under cursor)

emacs_config

  • Type: table
  • Default: { executable_path = 'emacs', config_path=nil }

Set configuration for your emacs. This is useful for having the emacs export properly pickup your emacs config and plugins. If config_path is not provided, exporter tries to find a configuration file from these locations:

  1. ~/.config/emacs/init.el
  2. ~/.emacs.d/init.el
  3. ~/.emacs.el

If there is no configuration found, it will still process the export.

If it finds a configuration and export attempt fails because of the configuration issue, there will be a prompt to attempt the same export without the configuration file.

Agenda settings

org_deadline_warning_days

  • Type: number
  • Default: 14

Number of days during which deadline becomes visible in today's agenda. Example: If Today is 2021-06-10, and we have these tasks:

  • Task 1 has a deadline date 2021-06-15

  • Task 2 has a deadline date 2021-06-30

  • Task 1 is visible in today's agenda

  • Task 2 is not visible in today's agenda until 2021-06-16

org_agenda_span

  • Type: string|number
  • Default: 'week'

possible string values: day, week, month, year Default time span shown when agenda is opened.

org_agenda_start_on_weekday

  • Type: number
  • Default: 1

From which day in week (ISO weekday, 1 is Monday) to show the agenda. Applies only to week and number span. If set to false, starts from today

org_agenda_start_day

  • Type: string
  • Default: nil

example values: +2d, -1d offset to apply to the agenda start date. Example: If org_agenda_start_on_weekday is false, and org_agenda_start_day is -2d, agenda will always show current week from today - 2 days

org_agenda_custom_commands

  • Type: table<string, OrgAgendaCustomCommand>
  • Default: {}

Define custom agenda views that are available through the org_agenda mapping. It is possible to combine multiple agenda types into single view. Available options for each agenda type are explained down below the example:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/org/**/*'},
+  org_agenda_custom_commands = {
+    -- "c" is the shortcut that will be used in the prompt
+    c = {
+      description = 'Combined view', -- Description shown in the prompt for the shortcut
+      types = {
+        {
+          type = 'tags_todo', -- Type can be agenda | tags | tags_todo
+          match = '+PRIORITY="A"', --Same as providing a "Match:" for tags view <leader>oa + m, See: https://orgmode.org/manual/Matching-tags-and-properties.html
+          org_agenda_overriding_header = 'High priority todos',
+          org_agenda_todo_ignore_deadlines = 'far', -- Ignore all deadlines that are too far in future (over org_deadline_warning_days). Possible values: all | near | far | past | future
+        },
+        {
+          type = 'agenda',
+          org_agenda_overriding_header = 'My daily agenda',
+          org_agenda_span = 'day' -- can be any value as org_agenda_span
+        },
+        {
+          type = 'tags',
+          match = 'WORK', --Same as providing a "Match:" for tags view <leader>oa + m, See: https://orgmode.org/manual/Matching-tags-and-properties.html
+          org_agenda_overriding_header = 'My work todos',
+          org_agenda_todo_ignore_scheduled = 'all', -- Ignore all headlines that are scheduled. Possible values: past | future | all
+        },
+        {
+          type = 'agenda',
+          org_agenda_overriding_header = 'Whole week overview',
+          org_agenda_span = 'week', -- 'week' is default, so it's not necessary here, just an example
+          org_agenda_start_on_weekday = 1, -- Start on Monday
+          org_agenda_remove_tags = true -- Do not show tags only for this view
+        },
+      }
+    },
+    p = {
+      description = 'Personal agenda',
+      types = {
+        {
+          type = 'tags_todo',
+          org_agenda_overriding_header = 'My personal todos',
+          org_agenda_category_filter_preset = 'todos', -- Show only headlines from \`todos\` category. Same value providad as when pressing \`/\` in the Agenda view
+          org_agenda_sorting_strategy = {'todo-state-up', 'priority-down'} -- See all options available on org_agenda_sorting_strategy
+        },
+        {
+          type = 'agenda',
+          org_agenda_overriding_header = 'Personal projects agenda',
+          org_agenda_files = {'~/my-projects/**/*'}, -- Can define files outside of the default org_agenda_files
+        },
+        {
+          type = 'tags',
+          org_agenda_overriding_header = 'Personal projects notes',
+          org_agenda_files = {'~/my-projects/**/*'},
+          org_agenda_tag_filter_preset = 'NOTES-REFACTOR' -- Show only headlines with NOTES tag that does not have a REFACTOR tag. Same value providad as when pressing \`/\` in the Agenda view
+        },
+      }
+    }
+  }
+})

These arguments are shared between all of the agenda types:

  • org_agenda_overriding_header (string) - Override the header of the agenda view
  • org_agenda_files (string | string[]) - Set custom files to be loaded into this view. In same format as org_agenda_files
  • org_agenda_tag_filter_preset string - Custom tags filter for the view. Same format as org_agenda_files, but applies only for tags.
  • org_agenda_category_filter_preset string - Custom category filter for the view. Same format as org_agenda_files, but applies only for categories.
  • org_agenda_sorting_strategy string[] - List of sorting functions. See org_agenda_sorting_strategy
  • org_agenda_remove_tags boolean - Remove tags from the view. Default: false

agenda type arguments:

  • org_agenda_span string|number - Set custom span for the view. In same format as org_agenda_span
  • org_agenda_start_on_weekday number - Set custom start day for the view. In same format as org_agenda_start_on_weekday
  • org_agenda_start_day string - Set custom start day offset for the view. In same format as org_agenda_start_day

tags and tags_todo type arguments:

  • org_agenda_todo_ignore_scheduled('past' | 'future' | 'all' | nil') - Do not show headlines that have scheduled task according to the value. Default: nil
  • org_agenda_todo_ignore_deadlines('near' | 'far' | 'all' | 'past' | 'future' | nil') - Do not show headlines that have deadline task according to the value. Default: nil

org_agenda_hide_empty_blocks

  • Type: boolean
  • Default: false

Should custom agenda commands be hidden if they have no entries to show. Does not work for agenda type since it shows days.

org_agenda_sorting_strategy

  • Type:

table<'agenda' | 'todo' | 'tags', OrgAgendaSortingStrategy[]>

  • Default:

{ agenda = {'time-up', 'priority-down', 'category-keep'}, todo = {'priority-down', 'category-keep'}, tags = {'priority-down', 'category-keep'}} List of sorting strategies to apply to a given view. Available strategies:

  • time-up - Sort entries by time of day. Applicable only in agenda view
  • time-down - Opposite of time-up
  • priority-down - Sort by priority, from highest to lowest
  • priority-up - Sort by priority, from lowest to highest
  • tag-up - Sort by sorted tags string, ascending
  • tag-down - Sort by sorted tags string, descending
  • todo-state-up - Sort by todo keyword by position (example: 'TODO, PROGRESS, DONE' has a sort value of 1, 2 and 3), ascending
  • todo-state-down - Sort by todo keyword, descending
  • clocked-up - Show clocked in headlines first
  • clocked-down - Show clocked in headlines last
  • category-up - Sort by category name, ascending
  • category-down - Sort by category name, descending
  • category-keep - Keep default category sorting, as it appears in org-agenda-files

org_agenda_block_separator

  • Type: string
  • Default: -

Separator used to separate multiple agenda views generated by org_agenda_custom_commands. To change the highlight, override @org.agenda.separator hl group.

org_agenda_remove_tags

  • Type: boolean
  • Default: false

Should tags be hidden from all agenda views.

org_agenda_time_grid

  • Type: { type: ('daily', 'weekly', 'require-timed', 'remove-match', 'remove-range-match')[], times: number[], time_separator: string, time_label: string }

  • Default:

    lua
    {
    +  type = { 'daily', 'today', 'require-timed' },
    +  times = { 800, 1000, 1200, 1400, 1600, 1800, 2000 },
    +  time_separator = '┄┄┄┄┄',
    +  time_label = '┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄'
    +}

Settings for the time grid visible in agenda. To disable showing the time grid altogether, set org_agenda_use_time_grid to false.

  • type: List of options where all have to apply to show the grid
    • daily - Show grid in daily agenda (1 day view)
    • weekly - Show grid in any agenda type
    • today - Show grid only for today
    • require-timed - Show grid only if day has any entries with time specification
    • remove-match - Hide grid entries that overlap with the existing time slot taken by an agenda item
    • remove-range-match - Hide grid entries that overlap with the existing time range taken by an agenda item
  • times: List of times (in 24h format) to show on the grid. It should be integer value, example 1030 represents 10:30
  • time_separator: Value that is showed after the grid time as a separator
  • time_label: Value that is showed after the time_separator to fill in the place that is usually for the agenda item title

To customize the label for the current time, check org_agenda_current_time_string

org_agenda_use_time_grid

  • Type: boolean
  • Default: true

Show time grid in agenda. See org_agenda_time_grid for configuration options.

org_agenda_current_time_string

  • Type: string
  • Default: <- now -----------------------------------------------

Label value for the current time in the agenda time grid. See org_agenda_time_grid for time grid configuration or org_agenda_use_time_grid to disable the grid.

org_agenda_show_future_repeats

  • Type: boolean | number | 'next'
  • Default: true

How many future repeated tasks to show in agenda. Possible values:

  • true - Show all future repeats (default)
  • false - Do not show future repeats
  • number - Show only given number of future repeats
  • 'next' - Show only the next repeat

org_capture_templates

  • Type: table<string, table>
  • Default:

{ t = { description = 'Task', template = '* TODO %?\\n %u' } } Templates for capture/refile prompt. Variables:

  • %f: Prints the file of the buffer capture was called from
  • %F: Like %f but inserts the full path
  • %n: Inserts the current $USER
  • %t: Prints current date (Example: <2021-06-10 Thu>)
  • %^t: Prompt for current date (Example: <2021-06-10 Thu>)
  • %^{Name}t: Prompt for current date for given Name (visible in calendar title) (Example: <2021-06-10 Thu>)
  • %T: Prints current date and time (Example: <2021-06-10 Thu 12:30>)
  • %^T: Prompt for current date and time (Example: <2021-06-10 Thu 12:30>)
  • %^{Name}T: Prompt for current date and time for given Name (visible in calendar title) (Example: <2021-06-10 Thu 12:30>)
  • %u: Prints current date in inactive format (Example: [2021-06-10 Thu])
  • %^u: Prompt for current date in inactive format (Example: [2021-06-10 Thu])
  • %^{Name}u: Prompt for current date in inactive format for given Name (visible in calendar title) (Example: [2021-06-10 Thu])
  • %U: Prints current date and time in inactive format (Example: [2021-06-10 Thu 12:30])
  • %^U: Prompt for current date and time in inactive format (Example: [2021-06-10 Thu 12:30])
  • %^{Name}U: Prompt for current date and time in inactive format for given Name (visible in calendar title) (Example: [2021-06-10 Thu 12:30])
  • %a: File and line number from where capture was initiated (Example: [[file:/home/user/projects/myfile.txt +2]])
  • %<FORMAT>: Insert current date/time formatted according to lua date format (Example: %<%Y-%m-%d %A> produces '2021-07-02 Friday')
  • %x: Insert content of the clipboard via the "+" register (see :help clipboard)
  • %?: Default cursor position when template is opened
  • %^{PROMPT|DEFAULT|COMPLETION...}: Prompt for input, if completion is provided an :h inputlist will be used
  • %(EXP): Runs the given lua code and inserts the result. NOTE: this will internally pass the content to the lua load() function. So the body inside %() should be the body of a function that returns a string.

Templates have the following fields:

  • description (string) — description of the template that is displayed in the template selection menu
  • template (string|string[]) — body of the template that will be used when creating capture
  • target (string?) — name of the file to which the capture content will be added. If the target is not specified, the content will be added to the org_default_notes_file file
  • headline (string?) — title of the headline after which the capture content will be added. If no headline is specified, the content will be appended to the end of the file
  • datetree (boolean | { time_prompt?: boolean, reversed?: boolean, tree_type: 'day' | 'month' | 'week' | 'custom' }) Create a date tree with current day in the target file and put the capture content there.
    • true - Create ascending datetree (newer dates go to end) with the current date
    • { time_prompt = true, reversed?: boolean } open up a date picker to select a date before opening up a capture buffer
    • { reversed: true } add entries in reversed order (newer dates comes first)
    • { tree_type: 'day' | 'month' | 'week' | 'custom' } Which date tree type to use:
      • day Create year -> month -> day structure, and refile headlines in the day headline

      • month Create year -> month structure, and refile headlines in the month headline

      • week Create year -> week number structure, and refile headlines in the week number headline

      • custom (Advanced) - Create custom datetree with own date formats. This requires adding tree property in the datetree opts. Example with year and month tree:

        lua
        datetree = {
        +  tree_type = 'custom',
        +  tree = {
        +    {
        +      format = '%Y',
        +      pattern = '^(%d%d%d%d)$',
        +      order = { 1 }
        +    },
        +    {
        +      format = '%Y-%m',
        +      pattern = '^(%d%d%d%d)%-(%d%d)$',
        +      order = { 1, 2 }
        +    }
        +  }
        +}

        Check this line in source for builtin tree types and detailed explanation how to add own tree.

  • regexp (string) Search for specific line in the target file via regex (same as searching through file from command), and append the content after that line. For example, if you have line appendhere in target file, put this option to ^appendhere$ to add headlines after that line
  • properties (table?):
    • empty_lines (table|number?) if the value is a number, then empty lines are added before and after the content. If the value is a table, then the following fields are expected:
      • before (integer?) add empty lines to the beginning of the content
      • after (integer?) add empty lines to the end of the content

Example:

lua
{ T = {
+  description = 'Todo',
+  template = '* TODO %?\\n %u',
+  target = '~/org/todo.org'
+} }

Journal example:

lua
{
+  j = {
+    description = 'Journal',
+    template = '\\n*** %<%Y-%m-%d> %<%A>\\n**** %U\\n\\n%?',
+    target = '~/sync/org/journal.org'
+  },
+}

Journal example with dynamic target, i.e. a separate file per month:

lua
{
+  J = {
+    description = 'Journal',
+    template = '\\n*** %<%Y-%m-%d> %<%A>\\n**** %U\\n\\n%?',
+    target = '~/sync/org/journal/%<%Y-%m>.org'
+  },
+}

Nested key example:

lua
{
+  e =  'Event',
+  er = {
+    description = 'recurring',
+    template = '** %?\\n %T',
+    target = '~/org/calendar.org',
+    headline = 'recurring'
+  },
+  eo = {
+    description = 'one-time',
+    template = '** %?\\n %T',
+    target = '~/org/calendar.org',
+    headline = 'one-time'
+  }
+}
+-- or
+{
+  e = {
+    description = 'Event',
+    subtemplates = {
+      r = {
+        description = 'recurring',
+        template = '** %?\\n %T',
+        target = '~/org/calendar.org',
+        headline = 'recurring'
+      },
+      o = {
+        description = 'one-time',
+        template = '** %?\\n %T',
+        target = '~/org/calendar.org',
+        headline = 'one-time'
+      },
+    },
+  },
+}

Lua expression example:

lua
{
+  j = {
+    description = 'Journal',
+    template = '* %(return vim.fn.getreg "w")',
+    -- get the content of register "w"
+    target = '~/sync/org/journal.org'
+  },
+}

org_agenda_min_height

  • Type: number
  • Default: 16

Indicates the minimum height that the agenda window will occupy.

org_priority_highest

  • Type: string|number
  • Default: A

Indicates highest priority for a task in the agenda view. Example:

org
* TODO [#A] This task has the highest priority

org_priority_default

  • Type: string|number
  • Default: B

Indicates normal priority for a task in the agenda view. This is the default priority for all tasks if other priority is not applied Example:

org
* TODO [#B] This task has the normal priority
+* TODO And this one has the same priority

org_priority_lowest

  • Type: string|number
  • Default: C

Indicates lowest priority for a task in the agenda view. Example:

org
* TODO [#B] This task has the normal priority
+* TODO And this one has the same priority as above one
+* TODO [#C] I'm lowest in priority

org_agenda_skip_scheduled_if_done

  • Type: boolean
  • Default: false

Hide scheduled entries from agenda if they are in a "DONE" state.

org_agenda_skip_deadline_if_done

  • Type: boolean
  • Default: false

Hide deadline entries from agenda if they are in a "DONE" state.

org_agenda_text_search_extra_files

  • Type: ('agenda-archives')[]
  • Default: {}

Additional files to search from agenda search prompt. Currently it accepts only a single value: agenda-archives. Example value: {'agenda-archives'}

Calendar settings

Adjust behavior of the calendar modal (ex: changing the date under cursor).

calendar.round_min_with_hours

  • Type: boolean
  • Default: true

Should minutes be rounded, when the hour is changed. It behaves more fluently when changing the hours, especially when scheduling from the current time (which can be something odd). If set to false, the minutes are unchanged while changing the hours.

calendar.min_big_step

  • Type: number
  • Default: 15

The step size for changing the minutes while the cursor is on the first digit.

calendar.min_small_step

The step size for changing the minutes while the cursor is on the second digit.

Tags settings

org_tags_column

  • Type: number
  • Default: 80

The column to which tags should be indented in a headline. If this number is positive, it specifies the column. If it is negative, it means that the tags should be flushright to that column. For example, -80 works well for a normal 80 character screen. When 0, place tags directly after headline text, with only one space in between.

org_use_tag_inheritance

  • Type: boolean
  • Default: true

When set to true, tags are inherited from parents for purposes of searching. Which means that if you have this structure:

org
* TODO My top task :MYTAG:
+** TODO MY child task :CHILDTAG:
+*** TODO Nested task

First headline has tag MYTAG Second headline has tags MYTAG and CHILDTAG Third headline has tags MYTAG and CHILDTAG. When disabled, headlines have only tags that are directly applied to them.

org_tags_exclude_from_inheritance

  • Type: string[]
  • Default: {}

List of tags that are excluded from inheritance. Using the example above, setting this variable to {'MYTAG'}, second and third headline would have only CHILDTAG, where MYTAG would not be inherited.

Mappings

Mappings try to mimic some of the Orgmode mappings, but since Orgmode uses CTRL + c as a modifier most of the time, we have to take a different route. When possible, instead of CTRL + C, prefix <Leader>o is used. This is customizable via the mappings.prefix setting.

To disable all mappings, just pass disable_all = true to mappings settings:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    disable_all = true
+  }
+})

To disable a specific mapping, set it's value to false:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      org_agenda = false,
+      org_capture = 'gC'
+    },
+  }
+})

To change a key mapping's lhs but not its desc, provide a string or a table:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      -- providing a string
+      org_agenda = '<D-a>',
+      -- providing a table
+      org_capture = { '<D-c>' }
+    },
+  }
+})

To change a key mapping's lhs and its desc, provide a table:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+       org_capture = { '<D-c>', desc = 'Open Capture Prompt' }
+    }
+  }
+})

(The desc value is displayed in tools like WhichKey.)

You can find the configuration file that holds all default mappings here.

NOTE: All mappings are normal mode mappings (nnoremap) with exception of org_return

Use Enter in insert mode to add list items/checkboxes/todos

By default, adding list items/checkboxes/todos is done with org_meta_return which is a normal mode mapping. If you want to have an insert mode mapping there are two options:

  1. If your terminal supports it, map a key like Shift + Enter to the meta return mapping (Recommended):
lua
vim.api.nvim_create_autocmd('FileType', {
+  pattern = 'org',
+  callback = function()
+    vim.keymap.set('i', '<S-CR>', '<cmd>lua require("orgmode").action("org_mappings.meta_return")<CR>', {
+      silent = true,
+      buffer = true,
+    })
+  end,
+})
  1. If you want to use only enter, enable org_return_uses_meta_return option:
lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    org_return_uses_meta_return = true
+  }
+})

This will trigger org_meta_return if there is no content after the cursor position (either at the end of line or has just trailing spaces). Just note that this option always tries to use meta_return, which also adds new headlines automatically if you are on the headline line, which can give undesired results.

Global mappings

There are only 2 global mappings that are accessible from everywhere.

org_agenda

  • Mapped to: <Leader>oa

Opens up agenda prompt.

org_capture

  • Mapped to: <Leader>oc

Opens up capture prompt.

These live under mappings.global and can be overridden like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      org_agenda = 'gA',
+      org_capture = 'gC'
+    }
+  }
+})

If you want to use multiple mappings for same thing, pass array of mappings:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      org_agenda = {'gA', '<Leader>oa'},
+      org_capture = {'gC', '<Leader>oc'}
+    }
+  }
+})

Agenda mappings

Mappings used in agenda view window.

org_agenda_later

  • Mapped to: f

Go to next agenda span.

org_agenda_earlier

  • Mapped to: b

Go to previous agenda span.

org_agenda_goto_today

  • Mapped to: .

Go to span with for today.

org_agenda_day_view

  • Mapped to: vd

Show agenda day view.

org_agenda_week_view

  • Mapped to: vw

Show agenda week view.

org_agenda_month_view

  • Mapped to: vm

Show agenda month view.

org_agenda_year_view

  • Mapped to: vy

Show agenda year view.

org_agenda_quit

  • Mapped to: q

Close agenda.

org_agenda_switch_to

  • Mapped to: <CR>

Open selected agenda item in the same buffer.

org_agenda_goto

  • Mapped to: {'<TAB>'}

Open selected agenda item in split window.

org_agenda_goto_date

  • Mapped to: J

Open calendar that allows selecting date to jump to.

org_agenda_redo

  • Mapped to: r

Reload all org files and refresh current agenda view.

org_agenda_todo

  • Mapped to: t

Change TODO state of an item in both agenda and original Org file.

org_agenda_clock_in

  • Mapped to: I

Clock in item under cursor. See Clocking for more details.

org_agenda_clock_out

  • Mapped to: O

Clock out currently active clock item. See Clocking for more details.

org_agenda_clock_cancel

  • Mapped to: X

Cancel clock on currently active clock item. See Clocking for more details.

org_agenda_clock_goto

  • Mapped to: <Leader>oxj

Jump to currently clocked in headline. See Clocking for more details.

org_agenda_clockreport_mode

  • Mapped to: R

Show clock report at the end of the agenda for current agenda time range See Clocking for more details.

org_agenda_priority

  • Mapped to: <Leader>o,

Choose the priority of a headline item.

org_agenda_priority_up

  • Mapped to: +

Increase the priority of a headline item.

org_agenda_priority_down

  • Mapped to: -

Decrease the priority of a headline item.

org_agenda_archive

  • Mapped to: <Leader>o$

Archive headline item to archive location.

org_agenda_toggle_archive_tag

  • Mapped to: <Leader>oA

Toggle "ARCHIVE" tag of a headline item.

org_agenda_set_tags

  • Mapped to: <Leader>ot

Set tags on current headline item.

org_agenda_deadline

  • Mapped to: <Leader>oid

Insert/Update deadline date on current headline item.

org_agenda_schedule

  • Mapped to: <Leader>ois

Insert/Update scheduled date on current headline item.

org_agenda_refile

  • Mapped to: <Leader>or

Refile current headline to a destination org-file. Same as org_refile but from agenda view.

org_agenda_add_note

  • Mapped to: <Leader>ona

Add note to the current headline

org_agenda_filter

  • Mapped to: /

Open prompt that allows filtering current agenda view by category, tags and title (vim regex, see :help vim.regex()) Example:

Having todos.org file with headlines that have tags mytag or myothertag, and some of them have check in content, this search: todos+mytag/check/ Returns all headlines that are in todos.org file, that have mytag tag, and have check in headline title. Note that regex is case sensitive by default. Use vim regex flag \\c to make it case insensitive. See :help vim.regex() and :help /magic. Pressing <TAB> in filter prompt autocompletes categories and tags.

org_agenda_preview

org_agenda_show_help

  • Mapped to: g?

Show help popup with mappings

These mappings live under mappings.agenda, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    agenda = {
+      org_agenda_later = '>',
+      org_agenda_earlier = '<',
+      org_agenda_goto_today = {'.', 'T'}
+    }
+  }
+})

Capture mappings

Mappings used in capture window.

org_capture_finalize

  • Mapped to: <C-c>

Save current capture content to org_default_notes_file and close capture window.

org_capture_refile

  • Mapped to: <Leader>or

Refile capture content to specific destination.

org_capture_kill

  • Mapped to: <Leader>ok

Close capture window without saving anything.

org_capture_show_help

  • Mapped to: g?

Show help popup with mappings.

These mappings live under mappings.capture, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    capture = {
+      org_capture_finalize = '<Leader>w',
+      org_capture_refile = 'R',
+      org_capture_kill = 'Q'
+    }
+  }
+})

Note mappings

Mappings used in closing note window.

org_note_finalize

  • Mapped to: <C-c>

Save note window content as closing note for a headline. Ignores first comment (if exists).

org_note_kill

  • Mapped to: <Leader>ok

Close note window without saving anything.

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    note = {
+      org_note_finalize = '<Leader>w',
+      org_note_kill = 'Q'
+    }
+  }
+})

Org mappings

Mappings for org files.

org_refile

  • Mapped to: <Leader>or

Refile current headline, including its subtree, to a destination org-file. This file must be one of the files specified for the org_agenda_files setting. A target headline in the destination file can be specified with destination.org/<headline>. If there are multiple headlines with the same name in the destination file, the first occurence will be used.

org_timestamp_up

  • Mapped to: <C-a>

Increase date part under under cursor. Accepts count: (Example: 5<C-a>) | in examples references cursor position.

  • Year - Example date: <202|1-10-01 Fri 10:30> becomes <202|2-10-01 Sat 10:30>
  • Month - Example date: <2021-1|0-01 Fri 10:30> becomes <2022-1|1-01 Mon 10:30>
  • Day - Example date: <2021-10-0|1 Fri 10:30> becomes <2022-10-0|2 Sat 10:30>. Same thing happens when cursor is on day name.
  • Hour - Example date: <2021-10-01 Fri 1|0:30> becomes <2022-10-02 Sat 1|1:30>.
  • Minute - Example date: <2021-10-01 Fri 10:3|0> becomes <2022-10-02 Sat 11:3|5>. See org_time_stamp_rounding_minutes for steps configuration.
  • Repeater/Delay range (h->d->w->m->y) - Example date: <2021-10-01 Fri 10:30 +1|w> becomes <2021-10-01 Fri 10:30 +1|m>
  • Active/Inactive state - (< to [ and vice versa) - Example date: |<2021-10-01 Fri 10:30> becomes |[2021-10-01 Fri 10:30]

org_timestamp_down

  • Mapped to: <C-x>

Decrease date part under under cursor. Same as org_timestamp_up, just opposite direction.

org_timestamp_up_day

  • Mapped to: <S-UP>

Increase date under cursor by 1 or "count" day(s) (Example count: 5<S-UP>).

org_timestamp_down_day

  • Mapped to: <S-DOWN>

Decrease date under cursor by 1 or "count" day(s) (Example count: 5<S-UP>).

org_change_date

  • Mapped to: cid

Change date under cursor. Opens calendar to select new date.

org_toggle_timestamp_type

  • Mapped to: <Leader>od!

Switches the timestamp under the cursor between inactive and active.

org_priority

  • Mapped to: <Leader>o,

Choose the priority of a headline item.

org_priority_up

  • Mapped to: ciR

Increase the priority of a headline item.

org_priority_down

  • Mapped to: cir

Decrease the priority of a headline item.

org_todo

  • Mapped to: cit

Cycle todo keyword forward on current headline or open fast access to TODO states prompt (see org_todo_keywords) if it's enabled.

org_todo_prev

  • Mapped to: ciT

Cycle todo keyword backward on current headline.

org_toggle_checkbox

  • Mapped to: <C-Space>

Toggle current line checkbox state.

org_toggle_heading

  • Mapped to: <Leader>o*

Toggle current line to headline and vice versa. Checkboxes will turn into TODO headlines.

  • Mapped to: <Leader>oli

Insert a hyperlink at cursor position. When the cursor is on a hyperlink, edit that hyperlink. In visual mode, uses selected text as link description. If there are any links stored with org_store_link, pressing <TAB> to autocomplete the input will show list of all stored links to select. Links generated with ID are properly expanded to valid links after selection.

  • Mapped to: <Leader>ols

Generate a link to the closest headline. If org_id_link_to_org_use_id is true, it appends the ID property to the headline, and generates link with that id to be inserted via org_insert_link. When org_id_link_to_org_use_id is false, it generates the standard file::*headline link (example: file:/path/to/my/todos.org::*My headline)

org_open_at_point

  • Mapped to: <Leader>oo

Open hyperlink or date under cursor. When date is under the cursor, open the agenda for that day.

org_edit_special

  • Mapped to: <Leader>o'

Open a source block for editing in a temporary buffer of the associated filetype. This is useful for editing text with language servers attached, etc. When the buffer is closed, the text of the underlying source block in the original Org file is updated. 📝 NOTE: if the Org file that the source block comes from is edited before the special edit buffer is closed, the edits will not be applied. The special edit buffer contents can be recovered from :messages output

org_add_note

  • Mapped to: <Leader>ona

Add note to the current headline.

org_cycle

  • Mapped to: <TAB>

Cycle folding for current headline.

org_global_cycle

  • Mapped to: <S-TAB>

Cycle global folding.

org_archive_subtree

  • Mapped to: <Leader>o$

Archive current headline to archive location.

org_set_tags_command

  • Mapped to: <Leader>ot

Set tags on current headline.

org_toggle_archive_tag

  • Mapped to: <Leader>oA

Toggle "ARCHIVE" tag on current headline.

org_do_promote

  • Mapped to: <<

Promote headline.

org_do_demote

  • Mapped to: >>

Demote headline.

org_promote_subtree

  • Mapped to: <s

Promote subtree.

org_demote_subtree

  • Mapped to: >s

Demote subtree.

org_meta_return

  • Mapped to: <Leader><CR>

Add headline, list item or checkbox below, depending on current line.

org_insert_heading_respect_content

  • Mapped to: <Leader>oih

Add headline after current headline + it's content with same level.

org_insert_todo_heading

  • Mapped to: <Leader>oiT

Add TODO headline right after the current headline.

org_insert_todo_heading_respect_content

  • Mapped to: <Leader>oit

Add TODO headliner after current headline + it's content.

org_move_subtree_up

  • Mapped to: <Leader>oK

Move current headline + it's content up by one headline.

org_move_subtree_down

  • Mapped to: <Leader>oJ

Move current headline + it's content down by one headline.

org_export

  • Mapped to: <Leader>oe

Open export options. NOTE: Exports are handled via emacs and pandoc. This means that emacs and/or pandoc must be in $PATH. See org_custom_exports if you want to add your own export options.

org_next_visible_heading

  • Mapped to: }

Go to next heading (any level).

org_previous_visible_heading

  • Mapped to: {

Go to previous heading (any level).

org_forward_heading_same_level

  • Mapped to: ]]

Go to next heading on same level. Doesn't go outside of parent.

org_backward_heading_same_level

  • Mapped to: [[

Go to previous heading on same level. Doesn't go outside of parent.

outline_up_heading

  • Mapped to: g{

Go to parent heading.

org_deadline

  • Mapped to: <Leader>oid

Insert/Update deadline date.

org_schedule

  • Mapped to: <Leader>ois

Insert/Update scheduled date.

org_time_stamp

  • Mapped to: <Leader>oi.

Insert/Update date under cursor.

org_time_stamp_inactive

  • Mapped to: <Leader>oi!

Insert/Update inactive date under cursor.

org_clock_in

  • Mapped to: <Leader>oxi

Clock in headline under cursor. See Clocking for more details.

org_clock_out

  • Mapped to: <Leader>oxo

Clock out headline under cursor. See Clocking for more details.

org_clock_cancel

  • Mapped to: <Leader>oxq

Cancel currently active clock on current headline. See Clocking for more details.

org_clock_goto

  • Mapped to: <Leader>oxj

Jump to currently clocked in headline. See Clocking for more details.

org_set_effort

  • Mapped to: <Leader>oxe

Set effort estimate property on for current headline. See Clocking for more details.

org_babel_tangle

  • Mapped to: <leader>obt

Tangle current file. See Extract source code (tangle) for more details.

org_show_help

  • Mapped to: g?

Show help popup with mappings

These mappings live under mappings.org, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    org = {
+      org_timestamp_up = '+',
+      org_timestamp_down = '-'
+    }
+  }
+})

Edit Src

Mappings applied when editing a SRC block content via org_edit_special.

org_edit_src_abort

  • Mapped to: <Leader>ok

Abort changes made to temporary buffer created from the content of a SRC block, see above.

org_edit_src_save

  • Mapped to: <Leader>ow

Apply changes from the special buffer to the source Org buffer.

org_edit_src_save_exit

  • Mapped to: <Leader>'

Apply changes from the special buffer to the source Org buffer and close the edit special window.

org_edit_src_show_help

  • Mapped to: g?

Show help within the temporary buffer used to edit the content of a SRC block.

Text objects

Operator mappings for org files. Example: Pressing vir select everything from current heading and all child. inner means that it doesn't select the stars, where around selects inner + stars. See this issue comment for visual preview.

📝 NOTE: Some mappings can clash with other plugin mappings, like gitsigns.nvim which also has ih operator mapping.

inner_heading

  • Mapped to: ih

Select inner heading with content.

around_heading

  • Mapped to: ah

Select around heading with content.

inner_subtree

  • Mapped to: ir

Select whole inner subtree.

around_subtree

  • Mapped to: ar

Select around whole subtree.

inner_heading_from_root

  • Mapped to: Oh (big letter o)

select everything from first level heading to the current heading.

around_heading_from_root

  • Mapped to: OH (big letter o)

select around everything from first level heading to the current heading.

inner_subtree_from_root

  • Mapped to: Or (big letter o)

select everything from first level subtree to the current subtree.

around_subtree_from_root

  • Mapped to: OR (big letter o)

select around everything from first level subtree to the current subtree.

These mappings live under mappings.text_objects, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    text_objects = {
+      inner_heading = 'ic',
+    }
+  }
+})

markup text objects*

Mappings to select inner/outer markup entries. For example, having This is *bold*, and if cursor is in middle of *bold*, doing ci* changes only inner text, and doing ca* changes outer text. These are supported: *, _, /, +, ~, = These cannot be changed.

Dot repeat

To make all mappings dot repeatable, install vim-repeat plugin.

Features

Autocompletion

By default, omnifunc is provided in org files that autocompletes these types:

  • Tags
  • Todo keywords
  • Common drawer properties and values (:PROPERTIES:, :CATEGORY:, :END:, etc.)
  • Planning keywords (DEADLINE, SCHEDULED, CLOSED)
  • Orgfile special keywords (#+TITLE, #+BEGIN_SRC, #+ARCHIVE, etc.)
  • Hyperlinks (* - headlines, # - headlines with CUSTOM_ID property, headlines matching title)

Autocompletion is context aware, which means that for example tags autocompletion will kick in only when cursor is at the end of headline. Example (| marks the cursor):

org
** TODO Some task :|

Or todo keywords only at the beginning of the headline:

org
*** |

Or hyperlinks after double square bracket:

org
Some content [[|

To use an autocompletion plugin, check Completion plugins

Clocking

There is partial support for Clocking work time.

Supported actions:

Clock in

Org file mapping: =<leader>oxi=
Agenda view mapping: I=\\\\ Start the clock by adding or updating the =:LOGBOOK: drawer. Note that this clocks out any currently active clock.
Also, agenda/todo/search view highlights item that is clocked in.

Clock out

Org file mapping: =<leader>oxo=
Agenda view mapping: O=\\\\ Clock out the entry and update the =:LOGBOOK: drawer, and also add a total tracked time.
Note that in agenda view pressing O anywhere clocks the currently active entry, while in org file cursor must be in the headline subtree.

Clock cancel

Org file mapping: =<leader>oxq=
Agenda view mapping: =X=
Cancel the currently active clock. This just removes the entry added by clock in from :LOGBOOK: drawer.
Note that in agenda view pressing X anywhere cancels clock on the currently active entry, while in org file cursor must be in the headline subtree.

Clock goto

Org file mapping: <leader>oxj Agenda view mapping: <leader>oxj Jump to currently clocked in headline in the current window.

Set effort
  • Org file mapping: <leader>oxe
  • Agenda view mapping: <leader>oxe

Add/Update an Effort estimate property for the current headline.

Clock report table

Agenda view mapping: R

Show the clocking report for the current agenda time range. Headlines from table can be jumped to via <TAB>/<CR> (underlined). Note that this is visible only in Agenda view, since it's the only view that have a time range. Todo/Search views are not supported.

Automatic updates of totals

When updating closed logbook dates that have a total at the right (example: ==> 1:05), updating any of the dates via org_timestamp_up/org_timestamp_down automatically recalculates this value.

Recalculating totals

Org file mapping: gq (Note: This is Vim's built in mapping that calls formatexpr, see :help gq)

If you changed any of the dates in closed logbook entry, and want to recalculate the total, select the line and press gq, or if you want to do it in normal mode, just do gqgq.

Statusline function

Function: v:lua.orgmode.statusline()

Show the currently clocked in headline (if any), with total clocked time / effort estimate (if set).

vim
set statusline=%{v:lua.orgmode.statusline()}

Formatting

Formatting is done via gq mapping, which uses formatexpr under the hood (see :help formatexpr for more info). For example, to re-format whole document, you can do gggqG. gg goes to first line in current file, gq starts the format motion, and G goes to last line in file to make it format the whole thing. To format a single line, do gqgq, or to format selection, select the lines you want to format and just do gq.

Currently, these things are formatted:

  • Tags are aligned according to the org_tags_column setting
  • Tables are formatted (see Tables for more info)
  • Clock entries total time is recalculated (see Recalculating totals in Clocking section)

The format for links is either [[LINK]] or [[LINK][DESCRIPTION]]. If a description is provided, the actual link is concealed in favor of the description.

Hyperlink types supported:

  • URL (http://, https://)
  • File (starts with file:. Example: file:/home/user/.config/nvim/init.lua) Optionally, target can be specified:
    • Headline - It needs to start with * (Example: file:/home/user/org/file.org::*Specific Headline)
    • Custom id - It needs to start with # (Example: file:/home/user/org/file.org::#my-custom-id)
    • Line number - It needs to be a number (Example: file:/home/user/org/file.org::235)
  • Headline title target within the same file (starts with *) (Example: *Specific headline)
  • Headline with CUSTOM_ID property within the same file (starts with #) (Example: #my-custom-id)
  • Fallback: If file path, opens the file, otherwise, tries to find the headline title in the current file.
  • Your own custom type (see below)

To add your own custom hyperlink type, provide a custom handler to hyperlinks.sources setting. Each handler needs to have a get_name() method that returns a name for the handler. Additionally, follow(link) and autocomplete(link) optional methods are available to open the link and provide the autocompletion. Here's an example of adding a custom "ping" hyperlink type that opens the terminal and pings the provided URL and provides some autocompletion with few predefined URLs:

lua
local LinkPingType = {}
+
+---Unique name for the handler. MUST NOT be one of these: "http", "id", "line_number", "custom_id", "headline"
+---This method is required
+---@return string
+function LinkPingType:get_name()
+  return 'ping'
+end
+
+---This method is in charge of "executing" the link. For "http" links, it would open the browser, for example.
+---In this example, it will open the terminal and ping the value of the link.
+---The value of the link is passed as an argument.
+---For example, if you have a link [[ping:google.com][ping_google]], doing an \`org_open_at_point\` (<leader>oo by default)
+---anywhere within the square brackets, will call this method with \`ping:google.com\` as an argument.
+---It's on this method to figure out what to do with the value.
+---If this method returns \`true\`, it means that the link was successfully followed.
+---If it returns \`false\`, it means that this handler cannot handle the link, and it will continue to the next source.
+---This method is optional.
+---@param link string - The current value of the link, for example: "ping:google.com"
+---@return boolean - When true, link was handled, when false, continue to the next source
+function LinkPingType:follow(link)
+  if not vim.startswith(link, 'ping:') then
+    return false
+  end
+  -- Get the part after the \`ping:\` part
+  local url = link:sub(6)
+  -- Open terminal in vertical split and ping the URL
+  vim.cmd('vsplit | term ping ' .. url)
+  return true
+end
+
+---This is an optional method that will provide autocompletion for your link type.
+---This method needs to pre-filter the list of possible completions based on the current value of the link.
+---For example, if this source has \`ping:google.com\` and \`ping:github.com\` as possible completions,
+---And the current value of the link is \`ping:go\`, this method should return \`{'ping:google.com'}\`.
+---This method is optional.
+---@param link string - The current value of the link, for example: "ping:go"
+---@return string[]
+function LinkPingType:autocomplete(link)
+  local items = {
+    'ping:google.com',
+    'ping:github.com'
+  }
+  return vim.tbl_filter(function(item) return vim.startswith(item, link) end, items)
+end
+
+require('orgmode').setup({
+  hyperlinks = {
+    sources = {
+      LinkPingType,
+      -- Simpler types can be inlined like this:
+      {
+        get_name = function() return 'my_custom_type' end,
+        follow = function(self, link) print('Following link:', link) return true end,
+        autocomplete = function(self, link) return {'my_custom_type:my_custom_link'} end
+      }
+    }
+  }
+})

Notifications

There is an experimental support for agenda tasks notifications. Related issue #49.

Linux/MacOS has support for notifications via:

  • System notification app (notify-send/terminal-notifier) (See below for setup)
  • As part of Neovim running instance in floating window

Windows support only notifications in running Neovim instance. Any help on this topic is appreciated.

Default configuration (detailed description below):

lua
require('orgmode').setup({
+  notifications = {
+    enabled = false,
+    cron_enabled = true,
+    repeater_reminder_time = false,
+    deadline_warning_reminder_time = false,
+    reminder_time = 10,
+    deadline_reminder = true,
+    scheduled_reminder = true,
+    notifier = function(tasks)
+      local result = {}
+      for _, task in ipairs(tasks) do
+        require('orgmode.utils').concat(result, {
+          string.format('# %s (%s)', task.category, task.humanized_duration),
+          string.format('%s %s %s', string.rep('*', task.level), task.todo, task.title),
+          string.format('%s: <%s>', task.type, task.time:to_string())
+        })
+      end
+
+      if not vim.tbl_isempty(result) then
+        require('orgmode.notifications.notification_popup'):new({ content = result })
+      end
+
+      -- Example: if you use Snacks, you can do something like this (THis is not implemented)
+      Snacks.notifier.notify(table.concat(result, '\\n'), vim.log.levels.INFO, {
+        title = 'Orgmode',
+        ft = 'org'
+      })
+    end,
+    cron_notifier = function(tasks)
+      for _, task in ipairs(tasks) do
+        local title = string.format('%s (%s)', task.category, task.humanized_duration)
+        local subtitle = string.format('%s %s %s', string.rep('*', task.level), task.todo, task.title)
+        local date = string.format('%s: %s', task.type, task.time:to_string())
+
+        -- Linux
+        if vim.fn.executable('notify-send') == 1 then
+          vim.system({
+            'notify-send',
+            '--icon=/path/to/orgmode/assets/nvim-orgmode-small.png',
+            '--app-name=orgmode',
+            title,
+            string.format('%s\\n%s', subtitle, date),
+          })
+        end
+
+        -- MacOS
+        if vim.fn.executable('terminal-notifier') == 1 then
+          vim.system({ 'terminal-notifier', '-title', title, '-subtitle', subtitle, '-message', date })
+        end
+      end
+    end
+  },
+})

Options description:

  • enabled

    • Type: boolean
    • Default: false

    Enable notifications inside Neovim. Not needed for cron notifications.

  • cron_enabled

    • Type: boolean
    • Default: true

    Enable notifications via cron. Requires additional setup, see Cron section.

  • repeater_reminder_time (boolean|number|number[]) -

    • Type: boolean|number|number[]
    • Default: false

    Number of minutes before the repeater time to send notifications. For example, if now is 2021-07-15 15:30, and there's a todo item with date <2021-07-01 15:30 +1w>, notification will be sent if value of this setting is 0. If this configuration has a value of {1, 5, 10}, this means that notification will be sent on 2021-07-15 15:20, 2021-07-15 15:25 and 2021-07-15 15:29. false means disabled (default).

  • deadline_warning_reminder_time

    • Type: boolean|number|number[]
    • Default: 0

    Number of minutes before the warning time to send notifications. For example, if now is 2021-07-15 12:30, and there's a todo item with date <2021-07-15 18:30 -6h>, notification will be sent. If this configuration has a value of {1, 5, 10}, this means that notification will be sent on 2021-07-15 12:20, 2021-07-15 12:25 and 2021-07-15 12:29. 0 (Default) means that it will send notification only on exact warning time

  • reminder_time

    • Type: boolean|number|number[]
    • Default: 10

    Number of minutes before the time to send notifications. For example, if now is 2021-07-15 12:30, and there's a todo item with date <2021-07-15 12:40>, notification will be sent. If this configuration has a value of {1, 5, 10}, this means that notification will be sent on 2021-07-15 12:20, 2021-07-15 12:25 and 2021-07-15 12:29. This reminder also applies to both repeater and warning time if the time is matching. So with the example above, both 2021-07-15 12:20 +1w and 2021-07-15 12:20 -3h will trigger notification. will trigger notification. 10 (default) means that it will send notification 10 minutes before the time.

  • deadline_reminder

    • Type: boolean
    • Default: true

    Should notifications be sent for DEADLINE dates.

  • scheduled_reminder

    • Type: boolean
    • Default: true

    Should notifications be sent for SCHEDULED dates.

  • notifier

    • Type: fun(tasks: table[])
    • Default: nil

    Function for sending notification inside Neovim. Accepts array of tasks (see below) and shows floating window with notifications.

  • cron_notifier

    • Type: fun(tasks: table[])
    • Default: nil

    Function for sending notification via cron. Accepts array of tasks (see below) and triggers external program to send notifications.

*Tasks

Notifier functions accepts tasks parameter which is an array of this type:

lua
{
+  file = string, -- (Path to org file containing this task. Example: /home/myhome/orgfiles/todos.org)
+  todo = string, -- (Todo keyword on the task. Example value: TODO)
+  title = string, -- (Content of the headline without the todo keyword and tag. Example: Submit papers)
+  level = number, -- (Headline level (number of asterisks). Example: 1)
+  category = string, -- (file name where this task lives. With example file above, this would be: todos),
+  priority = string, -- (priority on the task. Example: A)
+  tags = string[], -- (array of tags applied to the headline. Example: {'WORK', 'OFFICE'})
+  original_time = Date, -- (Date object (see [Date object](lua/orgmode/objects/date.lua) for details) containing original time of the task (with adjustments and everything))
+  time = Date, -- (Date object (see [Date object](lua/orgmode/objects/date.lua) for details) time that matched the reminder configuration (with applied adjustments))
+  reminder_type = string, -- (Type of the date that matched reminder settings. Can be one of these: repeater, warning or time),
+  minutes = number, -- (Number of minutes before the task)
+  humanized_duration = string, -- (Humanized duration until the task. Examples: in 10 min., in 5 hr, in 3 hr and 10 min.)
+  type = string, -- (Date type. Can be one of these: DEADLINE or SCHEDULED),
+  range = table -- (Start and end line of the headline subtree. Example: { start_line = 2, end_line = 5 })
+}

Cron

In order to trigger notifications via cron, job needs to be added to the crontab. This is currently possible only on Linux and MacOS, since I don't know how would this be done on Windows. Any help on this topic is appreciated. This works by starting the headless Neovim instance, running one off function inside orgmode, and quitting the Neovim.

First try to see if you can run this command:

example
nvim --headless -c 'lua require("orgmode").cron()'

If it exits without errors, you are ready!

Here's maximum simplified Linux example (Tested on Manjaro/Arch/Ubuntu), but least optimized:

Run this to open crontab:

example
crontab -e

Then add this (Ensure path to nvim is correct):

crontab
** * * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/local/bin/nvim --headless -c 'lua require("orgmode").cron()'

More optimized version would be to create a lua file that has only necessary plugins loaded:

lua
-- ~/.config/nvim/lua/partials/org_cron.lua
+
+-- If you are using lazy.vim do this:
+local orgmode = vim.fn.stdpath('data') .. '/lazy/orgmode'
+vim.opt.runtimepath:append(orgmode)
+-- If you are using Packer or any other package manager that uses built-in package manager, do this:
+vim.cmd('packadd orgmode')
+
+-- Run the orgmode cron
+require('orgmode').cron({
+  org_agenda_files = '~/orgmode/*',
+  org_default_notes_file = '~/orgmode/notes.org',
+  notifications = {
+    reminder_time = {0, 5, 10},
+  },
+})

And update cron job to this:

crontab
** * * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/local/bin/nvim -u NONE --noplugin --headless -c 'lua require("partials.org_cron")'

This option is most optimized because it doesn't load plugins and your init.vim For MacOS, things should be very similar, but I wasn't able to test it. Any help on this is appreciated.

Tables

Tables can be formatted via built in formatexpr (see :help gq)

For example, having this content:

org
* TODO My headline
+  DEADLINE: <2022-05-22 Sun>
+
+  |Header 1|Header 2
+  |-
+  | col 1| col 2|

And going to line 4 and pressing gqgq, it will format it to this:

org
* TODO My headline
+  DEADLINE: <2022-05-22 Sun>
+
+  | Header 1 | Header 2 |
+  |----------+----------|
+  | col 1    | col 2    |

Part of Advanced search functionality is implemented.

To leverage advanced search, open up agenda prompt (default <Leader>oa), and select m or =M=(todos only) option.

What is supported:

  • Operators: |, &, + and - (examples: COMPUTER+URGENT, COMPUTER|URGENT, +COMPUTER-URGENT, COMPUTER|WORK+EMAIL)
  • Search by property with basic arithmetic operators (<, <=, =, >=, >=, <>) (examples: CATEGORY="mycategory", CUSTOM_ID=my_custom_id, AGE<10, ITEMS>=5)
  • Search by todo keyword (example: COMPUTER+URGENT/TODO|NEXT)

Few examples:

  • Search all with tag COMPUTER or WORK and EMAIL: COMPUTER|WORK+EMAIL. And always have precedence over or. Workaround to use first or is to write it like this: COMPUTER+EMAIL|WORK+EMAIL
  • Search all with keyword TODO, tag URGENT and property AGE bigger than 10: URGENT+AGE>10/TODO
  • Search all with keyword DONE or DELEGATED, tag COMPUTER and property AGE not equal to 10: COMPUTER+AGE<>10/DONE|DELEGATED
  • Search all without keyword DONE, tag URGENT but without tag COMPUTER and property CATEGORY equal to mywork: URGENT-COMPUTER+CATEGORY=mywork/-DONE

Extract source code (tangle)

There is basic support for extracting source code with tangle and noweb. (Orgmode link: Extracting source code) These options are supported:

  1. Setting header-args on multiple levels:
    1. Configuration (org_babel_default_header_args)

    2. File level property (#+property: header-args :tangle yes)

    3. Headline level property

      org
      * Headline
      +  :PROPERTIES:
      +  :header-args: :tangle yes
      +  :END:
    4. Block level argument #+begin_src lua :tangle yes

  2. Tangling all blocks with these options:
    1. :tangle no - Do not tangle
    2. :tangle yes - Tangle to same filename as current org file, with different extension (If org file is ~/org/todo.org and block is #+block_src lua, tangles to /org/todo.lua)
    3. :tangle path - Tangle to given filename. It can be absolute (:tangle /path/to/file.ext) or relative to current file (either :tangle ./file.ext or :tangle file.ext)
  3. Basic :noweb syntax (See Noweb Reference Syntax):
    1. :noweb no - Do not expand any references
    2. :noweb yes - Expand references via #+name directive on block. See example below.
    3. :noweb tangle - Same as :noweb yes

Example: Having this file in ~/org/todos.org

Block below will pick up reference from the 2nd block name

#+begin_src lua :tangle yes :noweb yes <<headline2block>>print('Headline 1') #+end_src

#+name: headline2block #+begin_src lua :tangle yesprint('Headline 2') #+end_src #+end_src

Running org_babel_tangle will create file ~/org/todos.lua with this content:

#+begin_src lua print('Headline 2') print('Headline 1') == print('Headline 2') #+end_src

To extract blocks to specific file, you can set file level property with default path, and maybe exclude 2nd block to not be repeated:

#+property: header-args :tangle ./my_tangled_file.lua

#+begin_src lua :noweb yes <<headline2block>> print('Headline 1')#+end_src

Here we disable tangling, so only first block will give results with the noweb #+name: headline2block #+begin_src lua :tangle noprint('Headline 2') #+end_src

Running org_babel_tangle will create file ~/org/my_tangled_file.lua with this content:

#+begin_src lua print('Headline 2') print('Headline 1')#+end_src

User interface

Colors

Most of the highlight groups are linked to treesitter highlights where applicable (see :h treesitter-highlight).

The following highlight groups are used:

  • @org.headline.level1: Headline at level 1 - linked to Title
  • @org.headline.level2: Headline at level 2 - linked to Constant
  • @org.headline.level3: Headline at level 3 - linked to Identifier
  • @org.headline.level4: Headline at level 4 - linked to Statement
  • @org.headline.level5: Headline at level 5 - linked to PreProc
  • @org.headline.level6: Headline at level 6 - linked to Type
  • @org.headline.level7: Headline at level 7 - linked to Special
  • @org.headline.level8: Headline at level 8 - linked to String
  • @org.priority.highest: Highest priority marker - linked to @comment.error
  • @org.priority.high: High priority marker - Not linked to anything, defaults to normal text
  • @org.priority.default: Default priority marker - Not linked to anything, defaults to normal text
  • @org.priority.low: Lowest priority marker - Not linked to anything, defaults to normal text
  • @org.priority.lowest: Lowest priority marker - Not linked to anything, defaults to normal text
  • @org.timestamp.active: An active timestamp - linked to @keyword
  • @org.timestamp.inactive: An inactive timestamp - linked to @comment
  • @org.keyword.todo: TODO keywords color - Parsed from Error (see note below)
  • @org.keyword.done: DONE keywords color - Parsed from DiffAdd (see note below)
  • @org.bullet: A normal bullet under a header item - linked to @markup.list
  • @org.properties: Property drawer start/end delimiters - linked to @property
  • @org.drawer: Drawer start/end delimiters - linked to @property
  • @org.tag: A tag for a headline item, shown on the righthand side like :foo: - linked to @tag.attribute
  • @org.plan: SCHEDULED, DEADLINE, CLOSED, etc. keywords - linked to Constant
  • @org.block: A begin/end block (example: #begin_src) - linked to @comment
  • @org.inline_block: A src_lang block (example: print('foo') ) - linked to @comment
  • @org.comment: A comment block - linked to @comment
  • @org.latex_env: LaTeX block - linked to @markup.environment
  • @org.directive: Blocks starting with #+ - linked to @comment
  • @org.checkbox: The default checkbox highlight, including square brackets - linked to @markup.list.unchecked
  • @org.checkbox.halfchecked: A checkbox status (marker between []) checked with [-] - linked to @markup.list.unchecked
  • @org.checkbox.checked: A checkbox status (marker between []) checked with either [x] or [X] - linked to @markup.list.checked
  • @org.bold: bold text - linked to @markup.strong,
  • @org.bold.delimiter: bold text delimiter * - linked to @markup.strong,
  • @org.italic: italic text - linked to @markup.italic,
  • @org.italic.delimiter: italic text delimiter / - linked to @markup.italic,
  • @org.strikethrough: strikethrough text - linked to @markup.strikethrough,
  • @org.strikethrough.delimiter: strikethrough text delimiter + - linked to @markup.strikethrough,
  • @org.underline: underline text - linked to @markup.underline,
  • @org.underline.delimiter: underline text delimiter _ - linked to @markup.underline,
  • @org.code: code text - linked to @markup.raw,
  • @org.code.delimiter: code text delimiter ~ - linked to @markup.raw,
  • @org.verbatim: verbatim text - linked to @markup.raw,
  • @org.verbatim.delimiter: verbatim text delimiter = - linked to @markup.raw,
  • @org.hyperlink: link without description (example: [[file:/this/is/link]]) - linked to @markup.link,
  • @org.hyperlink.url: Url part of the link with description (example: [[file:/this/is/url][description]]) - linked to @markup.link.url,
  • @org.hyperlink.desc: Description part of the link with description (example: [[file:/path/to/file][description]]) - linked to @markup.link.label,
  • @org.latex: Inline latex - linked to @markup.math,
  • @org.table.delimiter - | and - delimiters in tables - linked to @punctuation.special,
  • @org.table.heading - Table headings - linked to @markup.heading,
  • @org.edit_src - The highlight for the source content in an Org buffer while it is being edited in an edit special buffer - linked to Visual,
  • @org.agenda.deadline: A item deadline in the agenda view - Parsed from Error (see note below)
  • @org.agenda.scheduled: A scheduled item in the agenda view - Parsed from DiffAdd (see note below)
  • @org.agenda.scheduled_past: A item past its scheduled date in the agenda view - Parsed from WarningMsg (see note below)
  • @org.agenda.time_grid: Time grid line - Parsed from WarningMsg (see note below)
  • @org.agenda.day: Highlight for all days in Agenda view - linked to Statement
  • @org.agenda.today: Highlight for today in Agenda view - linked to @org.bold
  • @org.agenda.weekend: Highlight for weekend days in Agenda view - linked to @org.bold

📝 NOTE: Colors used for todo keywords and agenda states (deadline, schedule ok, schedule warning) are parsed from the current colorscheme from several highlight groups (Error, WarningMsg, DiffAdd, etc.).

Overriding colors

All colors can be overridden by either setting new values or linking to another highlight group:

lua
vim.api.nvim_create_autocmd('ColorScheme', {
+  pattern = '*',
+  callback = function()
+    -- Define own colors
+    vim.api.nvim_set_hl(0, '@org.agenda.deadline', { fg = '#FFAAAA' })
+    vim.api.nvim_set_hl(0, '@org.agenda.scheduled', { fg = '#AAFFAA' })
+    -- Link to another highlight group
+    vim.api.nvim_set_hl(0, '@org.agenda.scheduled_past', { link = 'Statement' })
+  end
+})

For adding/changing TODO keyword colors see org-todo-keyword-faces

The menu is used when selecting further actions in agenda, capture and export. Here is an example of the menu you see when opening agenda:

example
Press key for an agenda command
+-------------------------------
+a Agenda for current week or day
+t List of all TODO entries
+m Match a TAGS/PROP/TODO query
+M Like m, but only for TODO entries
+s Search for keywords
+q Quit

Users have the option to change the appearance of this menu. To do this, you need to add a handler in the UI configuration section:

lua
require("orgmode").setup({
+  ui = {
+    menu = {
+      handler = function(data)
+        -- your handler here, for example:
+        local options = {}
+        local options_by_label = {}
+
+        for _, item in ipairs(data.items) do
+          -- Only MenuOption has \`key\`
+          -- Also we don't need \`Quit\` option because we can close the menu with ESC
+          if item.key and item.label:lower() ~= "quit" then
+            table.insert(options, item.label)
+            options_by_label[item.label] = item
+          end
+        end
+
+        local handler = function(choice)
+          if not choice then
+            return
+          end
+
+          local option = options_by_label[choice]
+          if option.action then
+            option.action()
+          end
+        end
+
+        vim.ui.select(options, {
+          propmt = data.propmt,
+        }, handler)
+      end,
+    },
+  },
+})

When the menu is called, the handler receives a table data with the following fields as input:

  • title (string) - menu title
  • items (table) - array containing MenuItem (see below)
  • prompt (string) - prompt text used to prompt a keystroke

Each menu item MenuItem is one of two types: MenuOption and MenuSeparator.

MenuOption is a table containing the following fields:

  • label (string) - description of the action
  • key (string) - key that will be processed when the keys are pressed in the menu
  • action (function optional) - handler that will be called when the key is pressed in the menu.

MenuSeparator is a table containing the following fields:

  • icon (string optional) - character used as separator. The default character is -
  • length (number optional) - number of repetitions of the separator character. The default length is 80

In order for the menu to work as expected, the handler must call action from MenuItem.

Folds

In Neovim 0.10.3+, folds are colored with the same highlight as when they are expanded. This is enabled by default to be in line with how Emacs work.

To use the old way of highlighting folds with Folded highlight group, add this to config:

lua
require('orgmode').setup({
+  ui = {
+    folds = {
+      colored = false
+    }
+  }
+})

Input

By default, Vim's built-in input() function is used for input prompts. To use Neovim's vim.ui.input() function, add this to config:

lua
require('orgmode').setup({
+  ui = {
+    input = {
+      use_vim_ui = true
+    }
+  }
+})

📝 NOTE: If you are using a plugin for vim.ui.input, make sure it supports autocompletion for better experience. snacks.nvim input module supports autocompletion.

Agenda

Use this section to customize the styling of the Agenda preview floating window (See org_agenda_preview mapping). To see available options for the preview window, check :help vim.lsp.util.open_floating_preview.Opts. Here's an example how to configure it:

lua
require('orgmode').setup({
+  ui = {
+    agenda = {
+      preview_window = {
+        wrap = false, -- This option is set by default
+        border = 'single'
+      }
+    }
+  }
+})

📝 NOTE: This preview should be used only as read only view of the headline and it's content. Modifying the file from the preview window is not supported.

`,789)]))}const g=s(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/configuration.md.Bvg07Uqv.lean.js b/assets/configuration.md.Bvg07Uqv.lean.js new file mode 100644 index 0000000..09d610f --- /dev/null +++ b/assets/configuration.md.Bvg07Uqv.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,ag as e,o as n}from"./chunks/framework.CB8iguzh.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"configuration.md","filePath":"configuration.md","lastUpdated":null}'),t={name:"configuration.md"};function l(h,i,o,p,r,d){return n(),a("div",null,i[0]||(i[0]=[e("",789)]))}const g=s(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/contributing.md.C1oiFVnw.js b/assets/contributing.md.C1oiFVnw.js new file mode 100644 index 0000000..bbd141c --- /dev/null +++ b/assets/contributing.md.C1oiFVnw.js @@ -0,0 +1 @@ +import{_ as a,c as t,ag as o,o as r}from"./chunks/framework.CB8iguzh.js";const u=JSON.parse('{"title":"Contributing Guide","description":"","frontmatter":{},"headers":[],"relativePath":"contributing.md","filePath":"contributing.md","lastUpdated":null}'),i={name:"contributing.md"};function n(s,e,l,d,c,h){return r(),t("div",null,e[0]||(e[0]=[o('

Contributing Guide

Thanks for wanting to help out with nvim-orgmode, we appreciate the effort!

Reporting Bugs/Features

📣 Please always make a quick search in our issue-tracker before reporting anything. If the bug/feature has already been reported, continue the conversation on the existing issue.

We distinguish between core (part of orgmode) and non-core features. The former will be prioritized. Bugs get the highest priority.

If you're reporting a core feature, please be sure to provide a link that describes it. There are several places where features could be documented, have a look at these resources. The more info you provide the better!

Documentation

If you spot something missing in our docs, don't hesitate making a PR. The wiki can be edited freely.

Development

Philosophy

We try to mimic the behavior of Emacs Orgmode as closely as possible. Variable names follow the same naming convention as in Emacs Orgmode, except that they are in snake_case instead of kebab-case.

Example: org-agenda-files in Emacs is org_agenda_files in nvim-orgmode.

Local dev

Requirements:

To set up local development, run make setup_dev. This will add a pre-commit hook that will auto format all files before committing them. You can always manually format all files with make format command

Code

If you prefer working on an issue that has been reported, please leave a comment voicing your interest.

Please document any new code you add with emmylua annotations. Feel free to add annotations/docs to any existing functions integral to your PR that are missing them.

Tests

To run tests run make test in the nvim-orgmode directory:

example
make test

To run a specific test you can set a FILE environment variable to a specific spec you want to test. Example:

example
make test FILE=./tests/plenary/api/api_spec.lua

📝 NOTE: Tests are currently not working on Windows. Test run will only verify if tree-sitter grammar can be installed, and exit with a success message.

Parser

Parsing is done via builtin treesitter parser and the tree-sitter-org grammar.

Commits

Ensure that you follow the Conventional Commits specification (e.g., feat: add new feature, fix: correct bug, docs: update documentation).

',30)]))}const m=a(i,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/contributing.md.C1oiFVnw.lean.js b/assets/contributing.md.C1oiFVnw.lean.js new file mode 100644 index 0000000..53c5f91 --- /dev/null +++ b/assets/contributing.md.C1oiFVnw.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,ag as o,o as r}from"./chunks/framework.CB8iguzh.js";const u=JSON.parse('{"title":"Contributing Guide","description":"","frontmatter":{},"headers":[],"relativePath":"contributing.md","filePath":"contributing.md","lastUpdated":null}'),i={name:"contributing.md"};function n(s,e,l,d,c,h){return r(),t("div",null,e[0]||(e[0]=[o("",30)]))}const m=a(i,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/index.md.CheBSf2V.js b/assets/index.md.CheBSf2V.js new file mode 100644 index 0000000..ab622b4 --- /dev/null +++ b/assets/index.md.CheBSf2V.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,ag as t,o as s}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Nvim Orgmode","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),o={name:"index.md"};function n(r,e,l,d,h,p){return s(),i("div",null,e[0]||(e[0]=[t(`

Nvim Orgmode

Nvim orgmode is a clone of Emacs Orgmode for Neovim 0.11.0+. It aims to be a feature-complete implementation of Orgmode features in Neovim.

Online version of this documentation is available at https://nvim-orgmode.github.io.

To view this documentation offline in Neovim, run :Org help. More info in Globals and commands section.

Quick start

  • Install with lazy.nvim:

    lua
    {
    +  'nvim-orgmode/orgmode',
    +  event = 'VeryLazy',
    +  config = function()
    +    -- Setup orgmode
    +    require('orgmode').setup({
    +      org_agenda_files = '~/orgfiles/**/*',
    +      org_default_notes_file = '~/orgfiles/refile.org',
    +    })
    +  end,
    +}
  • Capture your first note with <leader>oc

  • Open up the prompt for agenda with <leader>oa

For more details about the installation and usage, check Installation page.

To see all configuration options, check Configuration page.

Getting started with orgmode

To get a basic idea how Orgmode works, check our hands-on tutorial.

You can also check this screencast from @dhruvasagar that demonstrates how the similar Orgmode clone vim-dotoo works.

https://www.youtube.com/watch?v=nsv33iOnH34

API docs

Nvim-orgmode exposes a Lua API that can be used to interact with the orgmode. To view it, check orgmode_api.txt or do :h OrgApi in Neovim.

Globals and commands

There are 2 additional ways to interact with Orgmode:

  1. Through the :Org command
  2. Through Org Lua global variable

List of available actions:

  • :Org help - Open this documentation in new tab, set working directory to the docs folder for the tab to allow browsing
  • :Org helpgrep - Open search agenda view that allows searching through the documentation
  • :Org agenda {type?} - Open agenda view by the shortcut, for example :Org agenda M will open tags_todo view. When type is omitted, it opens up Agenda view.
  • :Org capture {type?} - Open capture template by the shortcut, for example :Org capture t. When type is omitted, it opens up Capture prompt.
  • :Org install_treesitter_grammar - Install the treesitter grammar for Orgmode. If installed, prompt to reinstall. Grammar is installed automatically on first run, but this is useful in case when there are issues with the grammar.
  • :Org store_link - Store link to the headline under cursor. Works in both agenda and org files.
  • :Org indent_mode - Toggle virtual indent mode in the current buffer. See osg_startup_indented for additional info.

All of the commands above can be executed through the global Lua Org variable. Examples:

  • Org.help()
  • Org.helpgrep()
  • Org.install_treesitter_grammar()
  • Org.store_link()
  • Org.indent_mode()
  • Org.agenda() - Opens agenda prompt
  • Org.agenda.m() - Opens tags view
  • Org.capture() - Opens capture prompt
  • Org.capture.t() - Opens capture template for t shortcut
`,21)]))}const k=a(o,[["render",n]]);export{g as __pageData,k as default}; diff --git a/assets/index.md.CheBSf2V.lean.js b/assets/index.md.CheBSf2V.lean.js new file mode 100644 index 0000000..bd3f275 --- /dev/null +++ b/assets/index.md.CheBSf2V.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,ag as t,o as s}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Nvim Orgmode","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),o={name:"index.md"};function n(r,e,l,d,h,p){return s(),i("div",null,e[0]||(e[0]=[t("",21)]))}const k=a(o,[["render",n]]);export{g as __pageData,k as default}; diff --git a/assets/installation.md.Bh1GqFmB.js b/assets/installation.md.Bh1GqFmB.js new file mode 100644 index 0000000..e18c641 --- /dev/null +++ b/assets/installation.md.Bh1GqFmB.js @@ -0,0 +1,34 @@ +import{_ as i,c as a,ag as n,o as l}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation.md","filePath":"installation.md","lastUpdated":null}'),t={name:"installation.md"};function h(e,s,p,k,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Installation

Installation methods

Orgmode can be installed with any package manager. Here are few examples:

  1. lazy.nvim (Recommended)

    lua
    return {
    +  'nvim-orgmode/orgmode',
    +  event = 'VeryLazy',
    +  config = function()
    +    require('orgmode').setup({
    +      org_agenda_files = '~/orgfiles/**/*',
    +      org_default_notes_file = '~/orgfiles/refile.org',
    +    })
    +  end,
    +}
  2. pckr.nvim

    lua
    require('pckr').add({
    +  {
    +   'nvim-orgmode/orgmode',
    +     config = function()
    +       require('orgmode').setup({
    +         org_agenda_files = '~/orgfiles/**/*',
    +         org_default_notes_file = '~/orgfiles/refile.org',
    +       })
    +     end
    +  }
    +})
  3. vim-plug

    vim
    Plug 'nvim-orgmode/orgmode'
    +
    +lua << EOF
    +require('orgmode').setup({
    +  org_agenda_files = '~/orgfiles/**/*',
    +  org_default_notes_file = '~/orgfiles/refile.org',
    +})
    +EOF
  4. dein.vim

    vim
    call dein#add('nvim-orgmode/orgmode')
    +
    + lua << EOF
    + require('orgmode').setup({
    +   org_agenda_files = '~/orgfiles/**/*',
    +   org_default_notes_file = '~/orgfiles/refile.org',
    + })
    + EOF
`,6)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/installation.md.Bh1GqFmB.lean.js b/assets/installation.md.Bh1GqFmB.lean.js new file mode 100644 index 0000000..1bc79b4 --- /dev/null +++ b/assets/installation.md.Bh1GqFmB.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,ag as n,o as l}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation.md","filePath":"installation.md","lastUpdated":null}'),t={name:"installation.md"};function h(e,s,p,k,r,E){return l(),a("div",null,s[0]||(s[0]=[n("",6)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 0000000..b6b603d Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 0000000..def40a4 Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 0000000..e070c3d Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 0000000..a3c16ca Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 0000000..2210a89 Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 0000000..790d62d Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 0000000..1eec077 Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 0000000..2cfe615 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 0000000..e3886dd Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 0000000..36d6748 Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 0000000..2bed1e8 Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 0000000..9a8d1e2 Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 0000000..07d3c53 Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 0000000..57bdc22 Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/assets/plugins.md.Du11dEkP.js b/assets/plugins.md.Du11dEkP.js new file mode 100644 index 0000000..219a870 --- /dev/null +++ b/assets/plugins.md.Du11dEkP.js @@ -0,0 +1,76 @@ +import{_ as i,c as a,ag as n,o as e}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"plugins.md","filePath":"plugins.md","lastUpdated":null}'),l={name:"plugins.md"};function h(t,s,p,k,r,E){return e(),a("div",null,s[0]||(s[0]=[n(`

Plugins

📝 NOTE: If you create a plugin for orgmode, make sure to tag it with orgmode-nvim on github and submit an issue/PR to add it to this list.

Orgmode supports various plugins to extend its functionality or make it more pretty and user friendly:

Extend orgmode

org-super-agenda.nvim

Link: org-super-agenda.nvim

This is the port of Emacs org-super-agenda.

org-roam.nvim

Link: org-roam.nvim

This is the port of Emacs org-roam.

sniprun

Link: sniprun

Plugin for code block evaluation.

telescope-orgmode.nvim

Link: telescope-orgmode.nvimTelescope extension for orgmode that adds fuzzy finding of orgmode files, headlines, etc.

Completion plugins

blink.cmp

Link: blink.cmp

Add the orgmode provider and enable it for org filetype.

lua
require('blink.cmp').setup({
+  sources = {
+    per_filetype = {
+      org = {'orgmode'}
+    },
+    providers = {
+      orgmode = {
+        name = 'Orgmode',
+        module = 'orgmode.org.autocompletion.blink',
+        fallbacks = { 'buffer' },
+      },
+    },
+  },
+})

nvim-cmp

Link: nvim-cmp

Add the orgmode source to nvim-cmp sources list.

lua
require('cmp').setup({
+  sources = {
+    { name = 'orgmode' }
+  }
+})

RLDX.nvim

Link: RLDX.nvim

  1. Add RLDX.nvim plugin to Neovim.
  2. Add the cmp_rolodex source to nvim-cmp sources list.
lua
require('cmp').setup({
+  sources = {
+    { name = 'cmp_rolodex' }
+  }
+})

Aestehtics

org-bullets.nvim

Link: org-bullets.nvim Port of Emacs org-bullets.

Run after the orgmode setup.

lua
-- Your orgmode setup
+require('orgmode').setup()
+
+--Setup org-bullets
+require('org-bullets').setup()

headlines.nvim

Link: headlines.nvim

Plugin that adds some additional highlights to headlines.

lua
-- Your orgmode setup
+require('orgmode').setup()
+
+--Setup headlines.nvim
+require("headlines").setup()

org-modern.nvim

Link: org-modern.nvim

Modern looking agenda prompt menu.

lua
local Menu = require("org-modern.menu")
+
+require("orgmode").setup({
+  ui = {
+    menu = {
+      handler = function(data)
+        Menu:new():open(data)
+      end,
+    },
+  },
+})

Other

To view all plugins that are tagged for nvim-orgmode, visit orgmode-nvim github tag.

📝 NOTE: If you create a plugin for orgmode, make sure to tag it with orgmode-nvim on github and submit an issue/PR to add it to this list.

Example configuration

Example configuration with few of these plugins using lazy.nvim:

lua
{
+  'nvim-orgmode/orgmode',
+  dependencies = {
+    'nvim-telescope/telescope.nvim',
+    'nvim-orgmode/telescope-orgmode.nvim',
+    'nvim-orgmode/org-bullets.nvim',
+    'Saghen/blink.cmp'
+  },
+  event = 'VeryLazy',
+  config = function()
+    require('orgmode').setup({
+      org_agenda_files = '~/orgfiles/**/*',
+      org_default_notes_file = '~/orgfiles/refile.org',
+    })
+    require('org-bullets').setup()
+    require('blink.cmp').setup({
+      sources = {
+        per_filetype = {
+          org = {'orgmode'}
+        },
+        providers = {
+          orgmode = {
+            name = 'Orgmode',
+            module = 'orgmode.org.autocompletion.blink',
+            fallbacks = { 'buffer' },
+          },
+        },
+      },
+    })
+
+    require('telescope').setup()
+    require('telescope').load_extension('orgmode')
+    vim.keymap.set('n', '<leader>r', require('telescope').extensions.orgmode.refile_heading)
+    vim.keymap.set('n', '<leader>fh', require('telescope').extensions.orgmode.search_headings)
+    vim.keymap.set('n', '<leader>li', require('telescope').extensions.orgmode.insert_link)
+  end,
+}
`,48)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/plugins.md.Du11dEkP.lean.js b/assets/plugins.md.Du11dEkP.lean.js new file mode 100644 index 0000000..07fb1c0 --- /dev/null +++ b/assets/plugins.md.Du11dEkP.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,ag as n,o as e}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"plugins.md","filePath":"plugins.md","lastUpdated":null}'),l={name:"plugins.md"};function h(t,s,p,k,r,E){return e(),a("div",null,s[0]||(s[0]=[n("",48)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/style.DFTx90Kk.css b/assets/style.DFTx90Kk.css new file mode 100644 index 0000000..d8b392b --- /dev/null +++ b/assets/style.DFTx90Kk.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.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;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.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;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: #3c3c43;--vp-c-text-2: #67676c;--vp-c-text-3: #929295}.dark{--vp-c-text-1: #dfdfd6;--vp-c-text-2: #98989f;--vp-c-text-3: #6a6a71}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}: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-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--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);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content: "Copiado"}:lang(fa){--vp-code-copy-copied-text-content: "کپی شد"}:lang(ko){--vp-code-copy-copied-text-content: "복사됨"}:lang(ru){--vp-code-copy-copied-text-content: "Скопировано"}:lang(zh){--vp-code-copy-copied-text-content: "已复制"}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-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}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-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-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}: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}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}: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-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}: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-1);--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-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,: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);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}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.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.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-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 a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-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 a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.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 a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-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 a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.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;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.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:fixed;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:2px;border-radius:2px;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-],.vp-block{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,.vp-block.active{display:block}.vp-block{padding:20px 24px}.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 h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.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;text-decoration:none;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;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.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{background-color:var(--vp-c-bg);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 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);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{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-],.vp-block{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;transform:translate(calc(-100% - 1px));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;padding:0 10px;width:fit-content;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:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);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(:is(.no-icon,svg a,:has(img,svg))):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:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{content:"";color:currentColor}.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:0 0 4px!important;text-align:center;letter-spacing:1px!important;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-default-soft)}.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{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{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-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;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-e98dd255]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-e98dd255]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{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-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{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-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-fa7799d5]{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-fa7799d5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa7799d5]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa7799d5]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa7799d5]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa7799d5]: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-fa7799d5]: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-fa7799d5]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa7799d5]: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-fa7799d5]: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-fa7799d5]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa7799d5]: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-fa7799d5]: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-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-4f9c455b]{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-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-4f9c455b]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-4f9c455b]{flex-direction:row}}.main[data-v-4f9c455b]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-4f9c455b]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-4f9c455b]{text-align:left}}@media (min-width: 960px){.main[data-v-4f9c455b]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-4f9c455b]{max-width:592px}}.heading[data-v-4f9c455b]{display:flex;flex-direction:column}.name[data-v-4f9c455b],.text[data-v-4f9c455b]{width:fit-content;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-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0 auto}.name[data-v-4f9c455b]{color:var(--vp-home-hero-name-color)}.clip[data-v-4f9c455b]{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-4f9c455b],.text[data-v-4f9c455b]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0}}.tagline[data-v-4f9c455b]{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-4f9c455b]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-4f9c455b]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-4f9c455b]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0}}.actions[data-v-4f9c455b]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:center}@media (min-width: 640px){.actions[data-v-4f9c455b]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:flex-start}}.action[data-v-4f9c455b]{flex-shrink:0;padding:6px}.image[data-v-4f9c455b]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-4f9c455b]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-4f9c455b]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-4f9c455b]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-4f9c455b]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-4f9c455b]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-4f9c455b]{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-4f9c455b]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-4f9c455b]{width:320px;height:320px}}[data-v-4f9c455b] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-4f9c455b] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-4f9c455b] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{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-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{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-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-8b561e3d]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-8b561e3d]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{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-e315a0ad]{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-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{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-8a42e2b4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-8a42e2b4]{color:var(--vp-c-text-1)}.icon[data-v-8a42e2b4]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{font-size:14px}.icon[data-v-8a42e2b4]{font-size:16px}}.open>.icon[data-v-8a42e2b4]{transform:rotate(90deg)}.items[data-v-8a42e2b4]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-8a42e2b4]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-8a42e2b4]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-8a42e2b4]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-8a42e2b4]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-8a42e2b4]{transition:all .2s ease-out}.flyout-leave-active[data-v-8a42e2b4]{transition:all .15s ease-in}.flyout-enter-from[data-v-8a42e2b4],.flyout-leave-to[data-v-8a42e2b4]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);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-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{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-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{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!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{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!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-35975db6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-35975db6]{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-35975db6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-35975db6]{color:var(--vp-c-brand-1)}.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-b98bc113]{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-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .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-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-cf11d7a2]{position:relative}.VPFlyout[data-v-cf11d7a2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-cf11d7a2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-cf11d7a2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-cf11d7a2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-cf11d7a2]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-cf11d7a2]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-cf11d7a2],.button[aria-expanded=true]+.menu[data-v-cf11d7a2]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-cf11d7a2]{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-cf11d7a2]{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-cf11d7a2]{margin-right:0;font-size:16px}.text-icon[data-v-cf11d7a2]{margin-left:4px;font-size:14px}.icon[data-v-cf11d7a2]{font-size:20px;transition:fill .25s}.menu[data-v-cf11d7a2]{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-bd121fe5]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-bd121fe5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-bd121fe5]>svg,.VPSocialLink[data-v-bd121fe5]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{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-e56f3d57]{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-e56f3d57],.VPNavBarMenuLink[data-v-e56f3d57]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.8.2 | 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-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 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-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--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:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@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:#0003;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-Tree,.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] 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:#0003;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:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@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}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--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-background: transparent;--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 [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--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-Key--pressed{transform:none;box-shadow:none}.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-1);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:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.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-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.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-1168a8e4]{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-1168a8e4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1168a8e4]{border-bottom-color:var(--vp-c-divider)}}[data-v-1168a8e4] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-6aa21345]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-6aa21345]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{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-6aa21345],.container>.content[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{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-6aa21345]{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-6aa21345]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{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-6aa21345]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-6aa21345]{column-gap:.5rem}}.menu+.translations[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before,.appearance+.social-links[data-v-6aa21345]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{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-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-df37e6dd]{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-df37e6dd]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]{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-3e9c20e4]:hover{color:var(--vp-c-brand-1)}.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-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{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-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-f2779853]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));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 .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-f2779853],.menu+.appearance[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.menu+.social-links[data-v-f2779853]{margin-top:16px}.appearance+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{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-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b3fd67f8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b3fd67f8]{padding-bottom:10px}.item[data-v-b3fd67f8]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b3fd67f8]{cursor:pointer}.indicator[data-v-b3fd67f8]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b3fd67f8]{background-color:var(--vp-c-brand-1)}.link[data-v-b3fd67f8]{display:flex;align-items:center;flex-grow:1}.text[data-v-b3fd67f8]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b3fd67f8]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b3fd67f8],.VPSidebarItem.level-2 .text[data-v-b3fd67f8],.VPSidebarItem.level-3 .text[data-v-b3fd67f8],.VPSidebarItem.level-4 .text[data-v-b3fd67f8],.VPSidebarItem.level-5 .text[data-v-b3fd67f8]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b3fd67f8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.caret[data-v-b3fd67f8]{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-b3fd67f8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b3fd67f8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b3fd67f8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b3fd67f8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b3fd67f8],.VPSidebarItem.level-2 .items[data-v-b3fd67f8],.VPSidebarItem.level-3 .items[data-v-b3fd67f8],.VPSidebarItem.level-4 .items[data-v-b3fd67f8],.VPSidebarItem.level-5 .items[data-v-b3fd67f8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b3fd67f8]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{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-319d5ca6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-319d5ca6]{padding-top:var(--vp-nav-height);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-319d5ca6]{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-319d5ca6]{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-319d5ca6]{outline:0}.VPSkipLink[data-v-0b0ada53]{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-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0b0ada53]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0b0ada53]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{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-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{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-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.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}.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}} diff --git a/assets/troubleshoot.md.C2gpd73j.js b/assets/troubleshoot.md.C2gpd73j.js new file mode 100644 index 0000000..aefc4eb --- /dev/null +++ b/assets/troubleshoot.md.C2gpd73j.js @@ -0,0 +1 @@ +import{_ as i,c as a,ag as s,o as t}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshoot.md","filePath":"troubleshoot.md","lastUpdated":null}'),n={name:"troubleshoot.md"};function r(o,e,l,h,p,d){return t(),a("div",null,e[0]||(e[0]=[s('

Troubleshooting

💡 TIP: Run :checkhealth orgmode to check if Orgmode is correctly installed and configured.

Indentation is not working

Make sure you are not overriding indentexpr in Org buffers with nvim-treesitter indentation

I get treesitter/query.lua errors when opening agenda/capture prompt or org files

Tree-sitter parser might not be installed. Try running :Org install_treesitter_grammar to reinstall it.

I get .../orgmode/parser/org.so is not a valid Win32 application on Windows

This issue can happen due to wrong C compiler being used for building the parser. By default, first one available from this list is chosen: cc, gcc, clang, cl, zig If you want to use a specific parser, you can override the compilers list before calling the setup() like this:

lua
require('orgmode.utils.treesitter.install').compilers = { 'clang' }\nrequire('orgmode').setup()

After that, restart Neovim and run :Org install_treesitter_grammar to reinstall the parser.

nvim-treesitter mentions the similar issue as part of their Windows troubleshooting section.

Dates are not in English

Dates are generated with Lua native date support, and it reads your current locale when creating them.


To use different locale you can add this to your init.lua:

lua
vim.cmd('language en_US.utf8')

Just make sure you have en_US locale installed on your system. To see what you have available on the system you can start the command :language and press <TAB> to autocomplete possible options.

Chinese characters are not displayed correctly in agenda

In case you use chinese characters in your Neovim, and characters appear as encoded, try setting the language to zh_CN.UTF-8 with the same command as above:

lua
vim.cmd('language zh_CN.utf8')

See related issue: https://github.com/nvim-orgmode/orgmode/issues/879

Links are concealed with Vim's conceal feature (see :help conceal). To enable concealing, add this to your init.lua:

lua
vim.opt.conceallevel = 2\nvim.opt.concealcursor = 'nc'

Jumping to file path is not working for paths with forward slash

If you are using Windows, paths are by default written with backslashes. To use forward slashes, you must enable shellslash option (see :help shellslash).

lua
vim.opt.shellslash = true

More info on issue #281

',28)]))}const k=i(n,[["render",r]]);export{g as __pageData,k as default}; diff --git a/assets/troubleshoot.md.C2gpd73j.lean.js b/assets/troubleshoot.md.C2gpd73j.lean.js new file mode 100644 index 0000000..31be9cc --- /dev/null +++ b/assets/troubleshoot.md.C2gpd73j.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,ag as s,o as t}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshoot.md","filePath":"troubleshoot.md","lastUpdated":null}'),n={name:"troubleshoot.md"};function r(o,e,l,h,p,d){return t(),a("div",null,e[0]||(e[0]=[s("",28)]))}const k=i(n,[["render",r]]);export{g as __pageData,k as default}; diff --git a/assets/tutorial.md.Dp6yyLGk.js b/assets/tutorial.md.Dp6yyLGk.js new file mode 100644 index 0000000..5fea848 --- /dev/null +++ b/assets/tutorial.md.Dp6yyLGk.js @@ -0,0 +1,49 @@ +import{_ as a,c as s,ag as i,o as t}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Overview","description":"","frontmatter":{},"headers":[],"relativePath":"tutorial.md","filePath":"tutorial.md","lastUpdated":null}'),n={name:"tutorial.md"};function o(l,e,r,h,p,d){return t(),s("div",null,e[0]||(e[0]=[i(`

Overview

Org-mode is a flexible note-taking system that was originally created for Emacs. It has gained wide-spread acclaim (this file itself is an Org-mode file, which is supported by GitHub wikis) and was eventually ported to Neovim.

  1. File Syntax
  2. Basic Customization
  3. Agenda
  4. Captures
  5. Archiving
  6. Exporting
  7. Further Resources

To get the hang of it, we will create an org file in which we will keep all the repositories we want to check out in the future. First, let's create an empty file called repos.org.

File Syntax

Org files often start with meta-information for the title and the author:

#+title: Repositories
+#+author: <Your Name>
+

These directives are not necessary but may give others (including you in the future!) a gist what this file is about. There are many more directives detailed at [TODO: add this to the docs]

To create a list of repositories, we start a new line with a dash, followed by the repo name we'd like to remember:

- Org Bullets
+

Congratulations, you created your first list! 🎉 From here, you can easily add new list items by pressing <Leader><Enter>, the so-called org meta return. It has different effects, depending on the current position of the cursor. If it's on a list item, it will add another one. We will discuss other uses later on. [TODO: actually do that]

- Org Bullets
+- vim-table-mode
+

Our list is already functional, but it's only scratching the surface of what Org-mode can do. Let's look at how org files are structured using headings.

Headings

Any line starting with one or more asterisks (*) but without any preceding whitespace is a heading (also called headline). Let's change our list items to 1st-level headings by replacing the dashes with asterisks:

* Org Bullets
+* Vim table-mode
+

The number of asterisks denotes the level of the heading: the more asterisks, the deeper the level. That is how we achieve nested structures in our org files.

* Org Bullets
+** Synopsis
+* Vim table-mode
+

The content within a heading can be free form text, include links, be a list, or any combination thereof. Let's add a short description:

* Org Bullets
+** Synopsis
+   This plugin is a clone of org-bullets. It replaces the asterisks in org
+   syntax with unicode characters.
+* Vim table-mode
+

The full syntax for a headline is

STARS KEYWORD PRIORITY TITLE TAGS
+*     TODO    [#A]     foo   :bar:baz:
+
  • KEYWORD, if present, turns the heading into a TODO item. By default this can be TODO or DONE (see the Customization section to change this).
  • PRIORITY sets a priority level to be used in the Agenda.
  • TITLE is the main body of the heading.
  • TAGS is a colon surrounded and delimited list of tags used in searching in the Agenda.

Headings (usually with a KEYWORD) can also have deadlines, and/or be scheduled with timestamps (e.g. <2022-12-31>) [TODO: explain the difference between deadlines and scheduled headings]. Thus we could enhance our list of repos like so:

org
* org-bullets.nvim                                                      :org:
+** Synopsis
+   This plugin is a clone of org-bullets. It replaces the asterisks in org
+   syntax with unicode characters.
+* vim-table-mode                                                        :org:
+** TODO Synopsis
+   SCHEDULED: <YYYY-MM-DD>
+* plenary                                                               :lua:
+** TODO [#A] Synopsis
+   DEADLINE: <YYYY-MM-DD>

One final aspect of the org file syntax are links. Links are of the form [[link][description]], where link can be a

  • URL (http://, https://)
  • path to a file (file:/path/to/org/file)
  • target (any text surrounded by << and >>). If the target is in a different file the format is ‘file:~/path/to/org/file.org::My Target’
  • headline within the same file
  • headline with a custom id (#your-custom-id)

In order to easily go to the repositories we found online, let's link to their actual website:

org
* [[https://github.com/akinsho/org-bullets.nvim][org-bullets.nvim]]     :org:
+** Synopsis
+   This plugin is a clone of org-bullets. It replaces the asterisks in org
+   syntax with unicode characters.
+* [[https://github.com/dhruvasagar/vim-table-mode][vim-table-mode]]     :org:
+** TODO Synopsis
+   SCHEDULED: <YYYY-MM-DD>
+* [[https://github.com/nvim-lua/plenary.nvim][plenary]]                 :lua:
+** TODO [#A] Synopsis
+   DEADLINE: <YYYY-MM-DD>

Basic Customization

A first customization of orgmode would look like:

lua
-- init.lua
+local org = require('orgmode')
+
+org.setup_ts_grammar()
+org.setup({
+  org_agenda_files = {'~/path/to/agenda/file/*.org'},
+  org_default_notes_file = '~/path/to/default/capture/file.org',
+})

with all customization options going in the org.setup({}).

All available options are detailed here, including setting new keybindings.

Agenda

The org agenda is used to get an overview of all your different org files. Pressing <Leader>oa gives you an overview of the various specialized views into the agenda that are available. From each view you can press g? to see all the available key mappings. The most important ones are:

  • t => change the TODO state of a heading
  • <Enter> => open heading in current (agenda-)window
  • <TAB> => open heading in another window

Captures

To quickly save thoughts, ideas or other things that come up regularly in your day without interrupting your current task, Org-mode offers you so-called captures. They can conveniently opened in any Vim buffer with <Leader>oc. Here we are presented with a list of availabe capture templates.

To aid us in our endeavour of saving interesting repos, let's create a custom capture that saves us from manually adding them to the repos.org file. We add the following in our call to org.setup():

lua
org_capture_templates = {
+  r = {
+      description = "Repo",
+      template = "* [[%x][%(return string.match('%x', '([^/]+)$'))]]%?",
+      target = "~/org/repos.org",
+  }
+}

After restarting Vim you should be able to select the Repo capture-template with r when you initiate a capture. If you have the link to the repo in you clipboard, it will be inserted into the link correctly. See the docs about the possible ways to configure your templates.

Archiving

When we no longer need certain parts of our org files, they can be archived. Let's say we are done with checking out the org-bullets repo, so we archive it by pressing <Leader>o$ while on the heading. This will also archive any child headings. The default location for archived headings is <name-of-current-org-file>.org_archive, which can be changed with the org_archive_location option.

Exporting

In case you want to preview, you can export your .org file to e.g., html with pandoc, see the docs.

Further Resources

Org-mode is has many more features than the tiny subset outlined here. Have a look around the official manual if you are interested in any particular topic. But please keep in mind, that this is a work-in-progress port for Neovim and not the original source for Emacs Org-mode. If you find any features you would like to see here, feel free to open an issue or (even better) get your hands dirty and create a pull request 😉

`,49)]))}const u=a(n,[["render",o]]);export{g as __pageData,u as default}; diff --git a/assets/tutorial.md.Dp6yyLGk.lean.js b/assets/tutorial.md.Dp6yyLGk.lean.js new file mode 100644 index 0000000..b1ce58a --- /dev/null +++ b/assets/tutorial.md.Dp6yyLGk.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,ag as i,o as t}from"./chunks/framework.CB8iguzh.js";const g=JSON.parse('{"title":"Overview","description":"","frontmatter":{},"headers":[],"relativePath":"tutorial.md","filePath":"tutorial.md","lastUpdated":null}'),n={name:"tutorial.md"};function o(l,e,r,h,p,d){return t(),s("div",null,e[0]||(e[0]=[i("",49)]))}const u=a(n,[["render",o]]);export{g as __pageData,u as default}; diff --git a/changelog.html b/changelog.html new file mode 100644 index 0000000..19e1a43 --- /dev/null +++ b/changelog.html @@ -0,0 +1,33 @@ + + + + + + Changelog | Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Changelog

0.7.2 (2025-12-03)

Breaking changes

  • agenda: Add time grid (#1038) (d59c7b2)

Features

  • latex: Add support for inline math (#1059) (e4e48b5)
  • treesitter: Compile parser using tree-sitter if available (#1062) (c1005a0)
  • files: Use TS string parser for non-nightly versions (#1060) (b525c77)
  • agenda: Add `org-agenda-show-future-repeats` (1f41121)
  • agenda: use todo hl group for range grid (b7bcb90)
  • agenda: Add option to hide custom agenda views that are empty (090965e)
  • agenda: Show grid without times for remove-range-match (9bfba3d)
  • allow to define multiple todo keyword sequences (#974) (1531650)
  • agenda: Add remove-range-match option for time grid (a3ce79c)
  • agenda: Highlight links and dates using extmarks (f4dde88)
  • agenda: Allow opening links from agenda headlines (de701e8)

Bug fixes

  • notifications: ignore repeater dates that are same as original date (03863e9)
  • files: Disable swapfile for buffers loaded in background (638b2b4)
  • highlighter: return early if buffer is detached during async parse (f37b31b)
  • agenda: Do not exclude grid end time in agenda (0bde64c)
  • files: Disable modeline when loading buffers (5f6eb90)
  • agenda: Reload agenda when headline range is updated (46cd1df)
  • files: Add default value for file lines (266888a)
  • files: remove string tree-sitter parser (#1041) (63ace3c)
  • windows: handle Windows file paths correctly in refile (#1042) (03777ca)
  • stars: Ignore stars node that end on column 0 (4775d1a)
  • formatting: Prevent infinite loop on formatting closed folds (b6907d5)
  • datetree: Use current date and time as default value for datetree (ad5d652)
  • autocompletion: Fix insert link autocompletion (a49d5d4)

0.7.1 (2025-09-06)

Breaking changes

  • version: Drop support for Neovim < 0.11.0 (7987478)

Bug fixes

  • windows: do not escape slashes in filename (780c9e4)

0.7.0 (2025-09-05)

Breaking changes

  • treesitter: Use async parsing for custom highlighter (#1029) (0ab72ad)
  • version: Drop support for Neovim < 0.10.3 (cca7515)

Features

  • autocomplete: Fuzzy match autocompletion (#1024) (b924cbb)
  • edit_src: Add `org_edit_src_filetype_map` for custom src block filetypes. (#1002) (7ffb34c)
  • agenda: Add mapping to preview headline in agenda with "K" (8291ba6)
  • clock: Clock out headline when it's marked as done (8121c22)

Bug fixes

  • capture: Allow multiple capture buffers (#1031) (c058767)
  • avoid E490 when using `move_subtree_up` and `move_subtree_down` (#1013) (52dcef1)
  • Escape special regex chars in buffer lookup (#1022) (e16452b)
  • treesitter: Use io to read file on initial load (ffa4d80)
  • files: Use full match when finding bufnr for filename (94886d6)
  • files: Fallback to seconds check if file modification status (25b3ee8)
  • todo state in notifications (#1005) (f88734b)
  • remote_edit: Disable swapfile in temporary edit window (b6d14eb)
  • calendar: Rerender time when switching to time picker (57c3899)
  • $ and 0 motions for calendar view (#987) (12680a3)
  • calendar: Fallback to current date if selected date is not a valid number (3c8319f)
  • promises: Do not report keyboard interrupt as unhandled rejection (38e61df)
  • refile: Remove leading slash when refiling to destination (95d7047)
  • capture: Correctly trim common root with multiple roots defined (f67d771)
  • disable spell-check in URLs (#980) (8ff03c7)
  • prevent blink.cmp from removing directive prefix (#978) (c720d9c)
  • treesitter: Skip version check when parser is not managed by nvim-orgmode (23c719a)

0.6.0 (2025-05-11)

Breaking changes

  • links: allow granular highlighting of links (#965) (b371b9e)

Features

  • search: add ability to search on LEVEL (#959) (08873bf)
  • todos: support file-specific todo definitions (#956) (689f20a)
  • validator: use new vim.validator structure for neovim 0.11 (2929054)

Bug fixes

  • treesitter: Allow tree-sitter grammar installation outside of orgmode folder (#979) (b22523c)
  • indent an item's content when entering a new line from normal mode (#950) (15d66ea)
  • images: manually load images with snacks in ftplugin (27ab1cf)
  • images: add svg to list of supported image types (#968) (59593cf)
  • checkbox: Go to correct location after adding new checkbox list item (e66a641)
  • global: require at least one argument for Org command (83df5bf)
  • handle empty :Org arguments. (#952) (6df9314)

0.5.3 (2025-03-26)

Breaking changes

  • indent: Add `Org indent_mode` command in favor of toggling `vim.b.org_indent_mode` (#932) (5368c0b)

Features

  • luarocks: remove dependency on tree-sitter-orgmode (7684799)
  • image: match latex code tag for math preview (#945) (3f8114e)
  • images: add support for rendering latex math expressions (#935) (0ebe2e3)
  • support headline's cookie from TODOs (#926) (abf8890)
  • global: Add store_link command to Org global (98776eb)
  • support updating a headline's cookie from multiple lists (#925) (22094c4)
  • babel: add directory creation support with :mkdirp header argument (#928) (fb9580c)

Bug fixes

  • meta_return on a link item (#943) (b42236a)
  • statistics cookie: count only TODO headlines (#938) (5d7c03a)
  • links: Allow storing links from agenda with org_use_id enabled (2c95512)
  • template: Use env variable USERNAME in Windows (#931) (8b4555b)

0.5.2 (2025-03-07)

Bug fixes

  • calendar: fix custom date input (2aa966f)
  • windows: normalize parser path (de15ddf)
  • agenda: respect start on weekday from custom agenda command (bad7aaa)

0.5.1 (2025-03-05)

Features

  • ts: install parser if not installed in correct location (dca37ff)
  • health: report any conflicting parsers (52ff9cf)

Bug fixes

  • agenda: make spans work like emacs (#915) (88c71f3)
  • ts: correctly highlight table headings (#914) (4a405fb)
  • links: allow any value after http protocol (e5b800e)

0.5.0 (2025-03-02)

Breaking changes

  • ts: add link and timestamp tree-sitter captures (#912) (aaa327a)

Features

  • links: Open non-editable links with vim.ui.open (2eebc98)

Bug fixes

  • treesitter: remove unnecessary git checkout on tree-sitter install (998035a)
  • refile: allow slash to be omitted when refiling to file (585190e)

0.4.32 (2025-02-23)

Features

  • treesitter: track installed tree-sitter parser version (54aeadb)

Bug fixes

  • nightly: fix checkbox issues with nightly (#908) (62366c7)

0.4.31 (2025-02-20)

Bug fixes

  • images: Ignore image link matches that does not have valid extension (e4a89b8)

0.4.3 (2025-02-20)

Features

  • images: add support for image previewing with Snacks (#907) (80ca17e)
  • health: Add healthcheck (a802d2e)
  • files: add methods for tag addition/removal/toggling (#894) (09c1595)
  • utils: add optional flag to `utils.writefile()` for exclusive writes (#893) (500004f)
  • hyperlinks: add ability to add custom hyperlink sources (#892) (356ff3f)
  • tests: add tests for `utils.fs` and `utils.current_file_path()` (#890) (3583fac)
  • properties: add option `org_use_property_inheritance` (#880) (48f32e6)

Bug fixes

  • ui: allow built-in completions in orgmode.ui.input (#903) (af90f8f)

0.4.2 (2025-02-01)

Features

  • Add support for footnotes (#874) (4f62b7f)

Bug fixes

  • remove double ts parsing (b587545)
  • refile: remove unnecessary escaping for refile autocompletion (d56c691)
  • archive: Set correct archive category on archived headline (63d2cbb)
  • calendar: default to current time when switching to time input (c68a87c)

0.4.1 (2025-01-28)

Features

  • api: Add get_headline_at_cursor to Agenda api (2c806ca)
  • input: Add async input (#871) (377c295)
  • links: Add support for visual mode for insert link (0ef840a)
  • folds: Add org_cycle_separator_lines (ab87a9b)
  • markup: Allow markup in link descriptions (f7c669a)

Bug fixes

  • note: Fix capturing note (e65a661)
  • filter: Fix or matching for todos in tags match filter (429409b)
  • agenda: Do not jump cursor to first line (271a6fa)

0.4.0 (2025-01-24)

Features

  • notifications: Show icon in cron notify-send notification (1881ac9)
  • globals: Add install_treesitter_grammar to global command (0939e49)

Bug fixes

  • indents: Trigger reindent when closing block or drawers (e385fcf)
  • checkboxes: Do not uncheck current line checkbox on new entry (f18a66b)

0.3.9 (2025-01-21)

Breaking changes

  • agenda: rewrite agenda rendering and fix filters (#848) (8667167)

Features

  • Rename search arguments to agenda views (6d23709)
  • api: Add match_query and header to agenda api (ed49550)
  • agenda: Add custom agenda commands (#850) (e6ae773)
  • edit_src: Add mapping to write and close special edit buffer (c9027f9)
  • api: Add more options for agenda (7e815f0)
  • api: Add todo_ignore opts for tags and tags_todo views (91f5a9e)
  • api: Add open_by_key function for agenda (1afac86)
  • docs: Add orgmode docs (#864) (9801148)
  • Add global `:Org` command and global `Org` lua variable (b2285be)
  • globals: Add Org.capture global helper (3b120ea)
  • globals: Rename `open` to `agenda`, add default prompt for `agenda` and `capture` (940b067)
  • indent: Add filetype indentation in src blocks (7092f81)
  • Publish event when heading is toggled with <prefix>* (8b92e84)

Bug fixes

  • indent: Default block indent to 0 (738de39)
  • autocompletion: correctly autocomplete non-absolute paths (7f975b1)
  • filters: Fix parsing dates in tags filter (43361ba)
  • dates: Check if date is without a time when doing comparison (fccccd4)
  • sort: Sort associative tables alphabetically where necessary (1e97173)
  • agenda: Use custom header for tags and tags_todo agenda if provided (9a3f009)
  • windows: Correctly read file with any fileformat (b1922c6)
  • agenda: use only available filters for matching (4dcba70)
  • agenda: Pass global agenda filter to custom commands (d62fd3c)
  • filter: Fix tags agenda view matcher to allow -tags at start (95cecdd)
  • filter: Exclude & in property match (e3e8204)
  • input: stop action when input prompt is canceled (86ed523)
  • links: Unfold when jumping to headline (51ed95f)
  • tags: Allow non-ascii chars in tags (122c534)
  • filter: Use start of day for relative date matching (f25f96d)
  • syntax: Enable vim syntax hl if latex highlights are enabled (ebbf28c)
  • input: Do not set completion function if not provided (3ba6db7)
  • mappings: Correctly fall back to previously defined <CR> mapping (6566b69)
  • filters: Use start of day for dates in match filter (c889000)
  • tags: Do not sort tags in tags change prompt (42a4ccf)
  • agenda: Get last line from buffer for separator (e0ba9dc)

0.3.8 (2025-01-06)

Breaking changes

  • version: Drop support for Neovim < v0.10.0 (e5562a0)

Features

  • archive: set outline path when archiving (#746) (dfcb945)
  • priority: improve priority cycling (#817) (1657948)
  • refile: improve ux by matching files more fuzzily (#815) (625f060)
  • completion: Add blink.cmp source (73f3263)
  • log-state: align with the emacs orgmode format (#837) (f8c0fd3)

Bug fixes

  • calendar: Re-center once Neovim is resized (8ead368)
  • fix autocomplete for tags search prompt (#812) (a38f5c4)
  • nightly: Toggle headline checkbox cookie (c654095)
  • completion: Do not complete plan types on headline line (8b1dfcd)
  • virtual indent: handle invalid buffer gracefully (#825) (1d8c9b9)
  • refile: Autocomplete nested paths (#835) (956897b)
  • float: Set filetype for capture window (94894f3)
  • buffer: Disable tmp flag on buffer after edit (6c39469)
  • formatexpr: Correctly fallback to internal formatexpr (3f37829)
  • retain direct tags even if they are excluded from inheritance (#839) (92e8b51)
  • help: ignore disabled mappings (#840) (4c2528a)
  • template: expandable variables in lua expr (#841) (db7f044)
  • mininit: Ensure minimal init works on 0.11 (12d2324)
  • mininit: Ensure minimal init works on 0.11 (bf65774)
  • tests: Move validator version check outside (2e45a6a)

0.3.7 (2024-09-24)

Bug fixes

  • calendar: Do not modify time when switching months (ac6e02a)

0.3.61 (2024-09-23)

Bug fixes

  • loader: Fix typo in persisting loaded file (08d763d)

0.3.6 (2024-09-23)

Breaking changes

  • links: Use refactor links structure (#803) (c5940d3)

Features

  • links: Add unused refactored links structure (#802) (c6bdb07)
  • Setting filetype to org will treat file as an org file (a006c93)
  • dev: Add persist option to load_file method (2a10172)
  • dev: Update add_to_paths to behave as load_file with persist option (fd95708)

Bug fixes

  • nightly: Fix compatibility with Neovim nightly (e3500ad)
  • loader: Load files concurrently with a limit to avoid "too many open files" errors (1692af5)

0.3.5 (2024-08-22)

Breaking changes

  • closing note: Use different title per closing note type (f874118)
  • Drop official support for v0.9.4 (2ce9a8d)
  • injections: Do not use vim.filetype.match for injections (7ee1f13)

Features

  • injection: Add some languages to TS injection blocks (d2fde79)
  • support org_toggle_timestamp_type (#651) (82af22f)
  • api: Allow to insert links through API (#731) (36c76c2)
  • enhance calendar widget with time picker (#650) (7af6cbd)
  • Add support for org log repeat (#738) (b26b1f2)
  • Bump minimum version to 0.9.4 (ac9a6e0)
  • folds: Add option to use old folds highlights (c69245e)
  • support cursor keys for calendar navigation (#767) (a84a748)
  • core: enhance org-insert-link, add completion for `~/` prefix. (#749) (47c3d92)
  • highlights: Add hlgroups for priority high and low (c8877c7)
  • allow configuring keymap descriptions (#789) (5169ac3)
  • hyperlinks: Add OSC 8 hyperlink support to links (eb7a110)
  • hyperlinks: Add OSC 8 hyperlink support (0683da9)
  • luarocks: Add dev version to luarocks (4616941)

Bug fixes

  • ts: Fix TS injections on mac os (4bbe8ea)
  • deprecated: Update deprecated tbl_islist call (dbcff9e)
  • archive: Properly archive headlines with level > 1 (2c82236)
  • archive: Set archive properties on correct headline (2bc0072)
  • date: persist all attributes passed by options (#735) (46c839b)
  • calendar: Exit time mode when switching month (52f85be)
  • perf: Memoize few headline methods (772c7c6)
  • links: insert id link properly (#742) (8e319bf)
  • calendar: Properly go to previous/next year (c9bf6d8)
  • calendar: fix bug with empty date (#744) (3e4dbeb)
  • listitems: Handle text edits order on Neovim nightly (ab5183c)
  • fix file type detection in `org-edit-special` on macOS. (#757) (d7d0fc5)
  • injection: Default to lower filetype if not detected (225eba8)
  • nightly: Remove reversing of lsp edits (328ef85)
  • tests: Fix tests that causes false negative results (de02a0c)
  • highlights: Highlight table hr line separately (e365b85)
  • explicitly pass treesitter language to `get_node()` (#795) (56c8246)
  • dates: Fix parsing dates from headlines (d0baf31)
  • Enter: Return early if mapping callback returns nil (16cf859)
  • ci: Inherit secrets in reusable workflows (1dd91cc)
+ + + + \ No newline at end of file diff --git a/configuration.html b/configuration.html new file mode 100644 index 0000000..667889b --- /dev/null +++ b/configuration.html @@ -0,0 +1,582 @@ + + + + + + Configuration | Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Configuration

This page contains information about all configuration that can be provided to the plugin.

Global settings

org_agenda_files

  • Type: string | string[]
  • Default: ''

Single or multiple paths from where the org files are being read.

Examples:

  • ~/org/*
  • {'~/Dropbox/org/**/*', '~/orgfiles/*'}

org_default_notes_file

  • Type: string
  • Default: ''

Path to a file that will be used as a default target file when refiling.

Example: ~/orgfiles/refile.org

org_todo_keywords

  • Type: string[]
  • Default: {'TODO', '|', 'DONE'}

List of unfinished ("TODO") and finished ("DONE") keywords.
| is used as a separator between the two groups.

if | is omitted, only the last entry in array is considered a "DONE" state.

To use Fast access to TODO States, set a fast access key to at least one of the entries.

For entries where a fast access key is not set, the first character of the keyword is used as the fast access key.

Examples (Without fast access):

  • {'TODO', 'NEXT', '|', 'DONE'}
  • {'TODO', 'WAITING', '|', 'DONE', 'DELEGATED'}

Examples (With fast access):

  • {'TODO(t)', 'NEXT(n)', '|', 'DONE(d)'}
  • {'TODO(t)', 'NEXT', '|', 'DONE'} - Same as above. Fast key is derived from first char.

NOTE: Make sure fast access keys do not overlap. If that happens, first entry in list gets it.

org_todo_repeat_to_state

  • Type: string | nil
  • Default: nil

Set an entry from org_todo_keywords to use as the "starting" state for repeatable todos.

If provided value does not exist in org_todo_keywords, first entry from that list is used.

win_split_mode

  • Type: string | function | [string, number]
  • Default: 'horizontal'

This option determines how to open agenda and capture window.

Available string values:

  • horizontal - Always split horizontally
  • vertical - Always split vertically
  • auto - Determine between horizontal and vertical split depending on the current window size
  • float - Open in float window that has width of 70% of the screen centered
  • {'float', 0.9} - Open in float window and provide custom scale (in this case it's 90% of screen size), must be value between 0 and 1

If none of the options above suit your needs, there are 2 other ways to customize this:

  1. Provide a custom command string (see :help <mods>). Few examples:

    • Always open in tab: tabnew
    • Always open vertically: vsplit
    • Always open horizontally with specific height of 20 lines: 20split
  2. Custom function

    lua
    win_split_mode = function(name)
    +  -- Make sure it's not a scratch buffer by passing false as 2nd argument
    +  local bufnr = vim.api.nvim_create_buf(false, false)
    +  --- Setting buffer name is required
    +  vim.api.nvim_buf_set_name(bufnr, name)
    +
    +  local fill = 0.8
    +  local width = math.floor((vim.o.columns * fill))
    +  local height = math.floor((vim.o.lines * fill))
    +  local row = math.floor((((vim.o.lines - height) / 2) - 1))
    +  local col = math.floor(((vim.o.columns - width) / 2))
    +
    +  vim.api.nvim_open_win(bufnr, true, {
    +    relative = "editor",
    +    width = width,
    +    height = height,
    +    row = row,
    +    col = col,
    +    style = "minimal",
    +    border = "rounded"
    +  })
    +end

win_border

  • Type: string | string[]
  • Default: 'single'

Border style for floating windows. Available options:

  • none - No border (default)
  • single - A single line box
  • double - A double line box
  • rounded - Like "single", but with rounded corners ("╭" etc.)
  • solid - Adds padding by a single whitespace cell
  • shadow - A drop shadow effect by blending with the background
  • {'╔', '═' ,'╗', '║', '╝', '═', '╚', '║' } - Specify border characters in a clock-wise fashion
  • {'/', '-', '\\', '|' } - If less than eight chars the chars will start repeating

See :help nvim_open_win()

Applies to:

  • always - calendar pop-up, help pop-up, notification pop-up
  • win_split_mode is set to float - agenda window , capture window

org_startup_folded

  • Type: string
  • Default: 'overview'

How many headings and other foldable items should be shown when an org file is opened. Available options:

  • overview - Only show top level elements (default)
  • content - Only show the first two levels
  • showeverything - Show all elements
  • inherit - Use the fold level set in Neovim's global foldlevel option

org_todo_keyword_faces

  • Type: table<string, string>
  • Default: {}

Custom colors for todo keywords. Available options:

  • foreground - :foreground hex/colorname. Examples: :foreground #FF0000, :foreground blue
  • background - :background hex/colorname. Examples: :background #FF0000, :background blue
  • weight - :weight bold
  • underline - :underline on
  • italic - :slant italic

Full configuration example with additional todo keywords and their colors:

lua
require('orgmode').setup({
+  org_todo_keywords = {'TODO', 'WAITING', '|', 'DONE', 'DELEGATED'},
+  org_todo_keyword_faces = {
+    WAITING = ':foreground blue :weight bold',
+    DELEGATED = ':background #FFFFFF :slant italic :underline on',
+    TODO = ':background #000000 :foreground red', -- overrides builtin color for `TODO` keyword
+  }
+})

org_archive_location

  • Type: string
  • Default: '%s_archive::'

Destination file for archiving. %s indicates the current file. :: is used as a separator for archiving to headline which is currently not supported. This means that if you do a refile from a file ~/my-orgs/todos.org, your task will be archived in ~/my-orgs/todos.org_archive.

Example value: '~/my-orgs/default-archive-file.org::'

📝 NOTE: This value can be overridden per file basis with a org special keyword #+ARCHIVE.

org_hide_leading_stars

  • Type: boolean
  • Default: false

Hide leading stars for headings. Example:

Disabled (default):

org
* TODO First item
+** TODO Second Item
+*** TODO Third item

Enabled:

org
* TODO First item
+ * TODO Second Item
+  * TODO Third item

📝 NOTE: Stars are hidden by applying highlight group that masks them with color that's same as background color. If this highlight group does not suit you, you can apply different highlight group to it:

lua
vim.cmd[[autocmd ColorScheme * hi link @org.leading.stars MyCustomHlGroup]]

To set specific characters instead of using asterisk, check org-bullets.nvim plugin plugin.

org_hide_emphasis_markers

  • Type: boolean
  • Default: false

Conceal bold/italic/underline/code/verbatim markers.

Ensure your :h conceallevel is set properly in order for this to function.

org_ellipsis

  • Type: string
  • Default: '...'

Marker used to indicate a folded headline.

org_log_done

  • Type: string|false
  • Default: time

Possible values:

  • time - adds CLOSED date when marking headline as done
  • note - adds CLOSED date as above, and prompts for closing note via capture window. Confirm note with org_note_finalize (Default <C-c>), or ignore providing note via org_note_kill (Default <Leader>ok)
  • false - Disable any logging

org_log_repeat

  • Type: string|false
  • Default: time

Possible values:

  • time - adds LAST_REPEAT date to properties when marking headline with a repeater date as done
  • note - adds LAST_REPEAT date as above, and prompts for closing note via capture window. Confirm note with org_note_finalize (Default <C-c>), or ignore providing note via org_note_kill (Default <Leader>ok)
  • false - Disable logging the LAST_REPEAT date

org_log_into_drawer

  • Type: string|nil
  • Default: nil

Log TODO state changes into a drawer with the given name. The recommended value is LOGBOOK. If nil, log into the section body.

  • Type: string|nil
  • Default: nil

📝 NOTE: This option is experimental

Possible values:

  • native - Includes whole latex syntax file into the org syntax. It can potentially cause some highlighting issues and slowness.
  • entities - Highlight latex only in these situations (see Orgmode latex fragments):
    • between \begin and \end delimiters
    • between $ and $ delimiters - example: $a^2=b$
    • between $$ and $$ delimiters - example: $$ a=+\sqrt{2} $$
    • between \[ and \] delimiters - example: \[ a=-\sqrt{2} \]
    • between \( and \) delimiters - example: \( b=2 \)

org_startup_indented

  • Type: boolean
  • Default: false

Possible values:

  • true - Uses Virtual indents to align content visually. The indents are only visual, they are not saved to the file.
  • false - Do not add any Virtual indentation.

You can toggle Virtual indents on the fly by executing command :Org indent_mode when in a org buffer. This additionally sets the buffer variable vim.b.org_indent_mode to true or false, depending on the current state. Value of this buffer variable is then used to determine behavior of few options below.

org_adapt_indentation

  • Type: boolean
  • Default: true

Possible values:

  • true - Use hard indents for content under headlines. Files will save with indents relative to headlines.
  • false - Do not add any hard indents. Files will save without indentation relative to headlines.

org_indent_mode_turns_off_org_adapt_indentation

  • Type: boolean
  • Default: true

Possible values:

org_indent_mode_turns_on_hiding_stars

  • Type: boolean
  • Default: true

Possible values:

org_src_window_setup

  • Type: string | function
  • Default: 'top 16new'

If the value is a string, it will be run directly as input to :h vim.cmd, otherwise if the value is a function it will be called. Both values have the responsibility of opening a buffer (within a window) to show the special edit buffer. The content of the buffer will be set automatically, so this option only needs to handle opening an empty buffer.

org_edit_src_content_indentation

  • Type: number
  • Default: 0

The indent value for content within SRC block types beyond the existing indent of the block itself. Only applied when exiting from an org_edit_special action on a SRC block.

org_edit_src_filetype_map

  • Type: table<string, string>
  • Default: {}

This filetype map associates the language name from an Org source block with the corresponding Vim filetype, which is then applied to the temporary buffer.

org_custom_exports

  • Type: table
  • Default: {}

Add custom export options to the export prompt. Structure:

example
[shortcut:string] = {
+  [label:string] = 'Label in export prompt',
+  [action:function] = function(exporter)
+    return exporter(command:table, target:string, on_success?:function, on_error?:function)
+  end
+}

Breakdown:

  • shortcut - single char that will be used to select the export. Make sure it doesn't conflict with existing options
  • action - function that provides exporter function for generating the exports
  • exporter - function that calls the command provided via job
    • command - table (array like) that contains command how to generate the export
    • target - target file name that will be generated
    • on_success? - function that is triggered when export succeeds (command exit status is 0). Provides table parameter with command output. Optional, defaults to prompt to open target file.
    • on_error? - function that is triggered when export fails (command exit status is not 0). Provides table parameter with command output. Optional, defaults to printing output as error.

For example, lets add option to export to rtf format via pandoc:

lua
require('orgmode').setup({
+  org_custom_exports = {
+    f = {
+      label = 'Export to RTF format',
+      action = function(exporter)
+        local current_file = vim.api.nvim_buf_get_name(0)
+        local target = vim.fn.fnamemodify(current_file, ':p:r')..'.rtf'
+        local command = {'pandoc', current_file, '-o', target}
+        local on_success = function(output)
+          print('Success!')
+          vim.api.nvim_echo({{ table.concat(output, '\n') }}, true, {})
+        end
+        local on_error = function(err)
+          print('Error!')
+          vim.api.nvim_echo({{ table.concat(err, '\n'), 'ErrorMsg' }}, true, {})
+        end
+        return exporter(command , target, on_success, on_error)
+      end
+    }
+  }
+})

org_time_stamp_rounding_minutes

  • Type: number
  • Default: 5

Number of minutes to increase/decrease when using org_timestamp_up/org_timestamp_down

org_cycle_separator_lines

  • Type number
  • Default: 2

Minimum number of empty lines needed at the end of the headline to show a single empty line when headline is folded.

For example, given this structure:

org
* One empty space headline
+  Content
+
+* Two empty space headline
+  Content
+
+
+* Three empty space headline
+  Content
+
+
+
+* Last headline
+  Content

When folded, it will appear like this:

org
* One empty space headline ...
+* Two empty space headline ...
+
+* Three empty space headline ...
+
+* Last headline ...

When value is 0, all empty lines are folded together with headline.

Cannot be negative.

org_blank_before_new_entry

  • Type: table<string, boolean>
  • Default: { heading = true, plain_list_item = false }

Determine if blank line should be prepended when:

  • Adding heading via org_meta_return and org_insert_* mappings
  • Adding a list item via org_meta_return

org_id_uuid_program

  • Type: string
  • Default: uuidgen

External program used to generate uuid's for id module

org_id_ts_format

  • Type: string
  • Default: %Y%m%d%H%M%S

Format of the id generated when org_id_method is set to ts.

org_id_method

  • Type: 'uuid' | 'ts' | 'org'
  • Default: uuid

What method to use to generate ids via org id module.

org_id_prefix

  • Type: string | nil
  • Default: nil

Prefix added to the generated id when org_id_method is set to org.

  • Type: boolean
  • Default: false

If true, generate ID with the Org ID module and append it to the headline as property. More info on org_store_link

org_use_property_inheritance

  • Type: boolean | string | string[]
  • Default: false

Determine whether properties of one headline are inherited by sub-headlines.

  • false - properties only pertain to the file or headline that defines them
  • true - properties of a headlines also pertain to all its sub-headlines
  • string[] - only the properties named in the given list are inherited
  • string - only properties matching the given regex are inherited

Note that for a select few properties, the inheritance behavior is hard-coded within their special applications. See Property Inheritance for details.

org_babel_default_header_args

  • Type: table<string, string>
  • Default: { [':tangle'] = 'no', [':noweb'] = no }

Default header args for extracting source code. See Extract source code (tangle) for more details.

calendar_week_start_day

  • Type: number
  • Default: 1

Available options:

  • 0 - start week on Sunday
  • 1 - start week on Monday

Determine on which day the week will start in calendar modal (ex: changing the date under cursor)

emacs_config

  • Type: table
  • Default: { executable_path = 'emacs', config_path=nil }

Set configuration for your emacs. This is useful for having the emacs export properly pickup your emacs config and plugins. If config_path is not provided, exporter tries to find a configuration file from these locations:

  1. ~/.config/emacs/init.el
  2. ~/.emacs.d/init.el
  3. ~/.emacs.el

If there is no configuration found, it will still process the export.

If it finds a configuration and export attempt fails because of the configuration issue, there will be a prompt to attempt the same export without the configuration file.

Agenda settings

org_deadline_warning_days

  • Type: number
  • Default: 14

Number of days during which deadline becomes visible in today's agenda. Example: If Today is 2021-06-10, and we have these tasks:

  • Task 1 has a deadline date 2021-06-15

  • Task 2 has a deadline date 2021-06-30

  • Task 1 is visible in today's agenda

  • Task 2 is not visible in today's agenda until 2021-06-16

org_agenda_span

  • Type: string|number
  • Default: 'week'

possible string values: day, week, month, year Default time span shown when agenda is opened.

org_agenda_start_on_weekday

  • Type: number
  • Default: 1

From which day in week (ISO weekday, 1 is Monday) to show the agenda. Applies only to week and number span. If set to false, starts from today

org_agenda_start_day

  • Type: string
  • Default: nil

example values: +2d, -1d offset to apply to the agenda start date. Example: If org_agenda_start_on_weekday is false, and org_agenda_start_day is -2d, agenda will always show current week from today - 2 days

org_agenda_custom_commands

  • Type: table<string, OrgAgendaCustomCommand>
  • Default: {}

Define custom agenda views that are available through the org_agenda mapping. It is possible to combine multiple agenda types into single view. Available options for each agenda type are explained down below the example:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/org/**/*'},
+  org_agenda_custom_commands = {
+    -- "c" is the shortcut that will be used in the prompt
+    c = {
+      description = 'Combined view', -- Description shown in the prompt for the shortcut
+      types = {
+        {
+          type = 'tags_todo', -- Type can be agenda | tags | tags_todo
+          match = '+PRIORITY="A"', --Same as providing a "Match:" for tags view <leader>oa + m, See: https://orgmode.org/manual/Matching-tags-and-properties.html
+          org_agenda_overriding_header = 'High priority todos',
+          org_agenda_todo_ignore_deadlines = 'far', -- Ignore all deadlines that are too far in future (over org_deadline_warning_days). Possible values: all | near | far | past | future
+        },
+        {
+          type = 'agenda',
+          org_agenda_overriding_header = 'My daily agenda',
+          org_agenda_span = 'day' -- can be any value as org_agenda_span
+        },
+        {
+          type = 'tags',
+          match = 'WORK', --Same as providing a "Match:" for tags view <leader>oa + m, See: https://orgmode.org/manual/Matching-tags-and-properties.html
+          org_agenda_overriding_header = 'My work todos',
+          org_agenda_todo_ignore_scheduled = 'all', -- Ignore all headlines that are scheduled. Possible values: past | future | all
+        },
+        {
+          type = 'agenda',
+          org_agenda_overriding_header = 'Whole week overview',
+          org_agenda_span = 'week', -- 'week' is default, so it's not necessary here, just an example
+          org_agenda_start_on_weekday = 1, -- Start on Monday
+          org_agenda_remove_tags = true -- Do not show tags only for this view
+        },
+      }
+    },
+    p = {
+      description = 'Personal agenda',
+      types = {
+        {
+          type = 'tags_todo',
+          org_agenda_overriding_header = 'My personal todos',
+          org_agenda_category_filter_preset = 'todos', -- Show only headlines from `todos` category. Same value providad as when pressing `/` in the Agenda view
+          org_agenda_sorting_strategy = {'todo-state-up', 'priority-down'} -- See all options available on org_agenda_sorting_strategy
+        },
+        {
+          type = 'agenda',
+          org_agenda_overriding_header = 'Personal projects agenda',
+          org_agenda_files = {'~/my-projects/**/*'}, -- Can define files outside of the default org_agenda_files
+        },
+        {
+          type = 'tags',
+          org_agenda_overriding_header = 'Personal projects notes',
+          org_agenda_files = {'~/my-projects/**/*'},
+          org_agenda_tag_filter_preset = 'NOTES-REFACTOR' -- Show only headlines with NOTES tag that does not have a REFACTOR tag. Same value providad as when pressing `/` in the Agenda view
+        },
+      }
+    }
+  }
+})

These arguments are shared between all of the agenda types:

  • org_agenda_overriding_header (string) - Override the header of the agenda view
  • org_agenda_files (string | string[]) - Set custom files to be loaded into this view. In same format as org_agenda_files
  • org_agenda_tag_filter_preset string - Custom tags filter for the view. Same format as org_agenda_files, but applies only for tags.
  • org_agenda_category_filter_preset string - Custom category filter for the view. Same format as org_agenda_files, but applies only for categories.
  • org_agenda_sorting_strategy string[] - List of sorting functions. See org_agenda_sorting_strategy
  • org_agenda_remove_tags boolean - Remove tags from the view. Default: false

agenda type arguments:

  • org_agenda_span string|number - Set custom span for the view. In same format as org_agenda_span
  • org_agenda_start_on_weekday number - Set custom start day for the view. In same format as org_agenda_start_on_weekday
  • org_agenda_start_day string - Set custom start day offset for the view. In same format as org_agenda_start_day

tags and tags_todo type arguments:

  • org_agenda_todo_ignore_scheduled('past' | 'future' | 'all' | nil') - Do not show headlines that have scheduled task according to the value. Default: nil
  • org_agenda_todo_ignore_deadlines('near' | 'far' | 'all' | 'past' | 'future' | nil') - Do not show headlines that have deadline task according to the value. Default: nil

org_agenda_hide_empty_blocks

  • Type: boolean
  • Default: false

Should custom agenda commands be hidden if they have no entries to show. Does not work for agenda type since it shows days.

org_agenda_sorting_strategy

  • Type:

table<'agenda' | 'todo' | 'tags', OrgAgendaSortingStrategy[]>

  • Default:

{ agenda = {'time-up', 'priority-down', 'category-keep'}, todo = {'priority-down', 'category-keep'}, tags = {'priority-down', 'category-keep'}} List of sorting strategies to apply to a given view. Available strategies:

  • time-up - Sort entries by time of day. Applicable only in agenda view
  • time-down - Opposite of time-up
  • priority-down - Sort by priority, from highest to lowest
  • priority-up - Sort by priority, from lowest to highest
  • tag-up - Sort by sorted tags string, ascending
  • tag-down - Sort by sorted tags string, descending
  • todo-state-up - Sort by todo keyword by position (example: 'TODO, PROGRESS, DONE' has a sort value of 1, 2 and 3), ascending
  • todo-state-down - Sort by todo keyword, descending
  • clocked-up - Show clocked in headlines first
  • clocked-down - Show clocked in headlines last
  • category-up - Sort by category name, ascending
  • category-down - Sort by category name, descending
  • category-keep - Keep default category sorting, as it appears in org-agenda-files

org_agenda_block_separator

  • Type: string
  • Default: -

Separator used to separate multiple agenda views generated by org_agenda_custom_commands. To change the highlight, override @org.agenda.separator hl group.

org_agenda_remove_tags

  • Type: boolean
  • Default: false

Should tags be hidden from all agenda views.

org_agenda_time_grid

  • Type: { type: ('daily', 'weekly', 'require-timed', 'remove-match', 'remove-range-match')[], times: number[], time_separator: string, time_label: string }

  • Default:

    lua
    {
    +  type = { 'daily', 'today', 'require-timed' },
    +  times = { 800, 1000, 1200, 1400, 1600, 1800, 2000 },
    +  time_separator = '┄┄┄┄┄',
    +  time_label = '┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄'
    +}

Settings for the time grid visible in agenda. To disable showing the time grid altogether, set org_agenda_use_time_grid to false.

  • type: List of options where all have to apply to show the grid
    • daily - Show grid in daily agenda (1 day view)
    • weekly - Show grid in any agenda type
    • today - Show grid only for today
    • require-timed - Show grid only if day has any entries with time specification
    • remove-match - Hide grid entries that overlap with the existing time slot taken by an agenda item
    • remove-range-match - Hide grid entries that overlap with the existing time range taken by an agenda item
  • times: List of times (in 24h format) to show on the grid. It should be integer value, example 1030 represents 10:30
  • time_separator: Value that is showed after the grid time as a separator
  • time_label: Value that is showed after the time_separator to fill in the place that is usually for the agenda item title

To customize the label for the current time, check org_agenda_current_time_string

org_agenda_use_time_grid

  • Type: boolean
  • Default: true

Show time grid in agenda. See org_agenda_time_grid for configuration options.

org_agenda_current_time_string

  • Type: string
  • Default: <- now -----------------------------------------------

Label value for the current time in the agenda time grid. See org_agenda_time_grid for time grid configuration or org_agenda_use_time_grid to disable the grid.

org_agenda_show_future_repeats

  • Type: boolean | number | 'next'
  • Default: true

How many future repeated tasks to show in agenda. Possible values:

  • true - Show all future repeats (default)
  • false - Do not show future repeats
  • number - Show only given number of future repeats
  • 'next' - Show only the next repeat

org_capture_templates

  • Type: table<string, table>
  • Default:

{ t = { description = 'Task', template = '* TODO %?\n %u' } } Templates for capture/refile prompt. Variables:

  • %f: Prints the file of the buffer capture was called from
  • %F: Like %f but inserts the full path
  • %n: Inserts the current $USER
  • %t: Prints current date (Example: <2021-06-10 Thu>)
  • %^t: Prompt for current date (Example: <2021-06-10 Thu>)
  • %^{Name}t: Prompt for current date for given Name (visible in calendar title) (Example: <2021-06-10 Thu>)
  • %T: Prints current date and time (Example: <2021-06-10 Thu 12:30>)
  • %^T: Prompt for current date and time (Example: <2021-06-10 Thu 12:30>)
  • %^{Name}T: Prompt for current date and time for given Name (visible in calendar title) (Example: <2021-06-10 Thu 12:30>)
  • %u: Prints current date in inactive format (Example: [2021-06-10 Thu])
  • %^u: Prompt for current date in inactive format (Example: [2021-06-10 Thu])
  • %^{Name}u: Prompt for current date in inactive format for given Name (visible in calendar title) (Example: [2021-06-10 Thu])
  • %U: Prints current date and time in inactive format (Example: [2021-06-10 Thu 12:30])
  • %^U: Prompt for current date and time in inactive format (Example: [2021-06-10 Thu 12:30])
  • %^{Name}U: Prompt for current date and time in inactive format for given Name (visible in calendar title) (Example: [2021-06-10 Thu 12:30])
  • %a: File and line number from where capture was initiated (Example: [[file:/home/user/projects/myfile.txt +2]])
  • %<FORMAT>: Insert current date/time formatted according to lua date format (Example: %<%Y-%m-%d %A> produces '2021-07-02 Friday')
  • %x: Insert content of the clipboard via the "+" register (see :help clipboard)
  • %?: Default cursor position when template is opened
  • %^{PROMPT|DEFAULT|COMPLETION...}: Prompt for input, if completion is provided an :h inputlist will be used
  • %(EXP): Runs the given lua code and inserts the result. NOTE: this will internally pass the content to the lua load() function. So the body inside %() should be the body of a function that returns a string.

Templates have the following fields:

  • description (string) — description of the template that is displayed in the template selection menu
  • template (string|string[]) — body of the template that will be used when creating capture
  • target (string?) — name of the file to which the capture content will be added. If the target is not specified, the content will be added to the org_default_notes_file file
  • headline (string?) — title of the headline after which the capture content will be added. If no headline is specified, the content will be appended to the end of the file
  • datetree (boolean | { time_prompt?: boolean, reversed?: boolean, tree_type: 'day' | 'month' | 'week' | 'custom' }) Create a date tree with current day in the target file and put the capture content there.
    • true - Create ascending datetree (newer dates go to end) with the current date
    • { time_prompt = true, reversed?: boolean } open up a date picker to select a date before opening up a capture buffer
    • { reversed: true } add entries in reversed order (newer dates comes first)
    • { tree_type: 'day' | 'month' | 'week' | 'custom' } Which date tree type to use:
      • day Create year -> month -> day structure, and refile headlines in the day headline

      • month Create year -> month structure, and refile headlines in the month headline

      • week Create year -> week number structure, and refile headlines in the week number headline

      • custom (Advanced) - Create custom datetree with own date formats. This requires adding tree property in the datetree opts. Example with year and month tree:

        lua
        datetree = {
        +  tree_type = 'custom',
        +  tree = {
        +    {
        +      format = '%Y',
        +      pattern = '^(%d%d%d%d)$',
        +      order = { 1 }
        +    },
        +    {
        +      format = '%Y-%m',
        +      pattern = '^(%d%d%d%d)%-(%d%d)$',
        +      order = { 1, 2 }
        +    }
        +  }
        +}

        Check this line in source for builtin tree types and detailed explanation how to add own tree.

  • regexp (string) Search for specific line in the target file via regex (same as searching through file from command), and append the content after that line. For example, if you have line appendhere in target file, put this option to ^appendhere$ to add headlines after that line
  • properties (table?):
    • empty_lines (table|number?) if the value is a number, then empty lines are added before and after the content. If the value is a table, then the following fields are expected:
      • before (integer?) add empty lines to the beginning of the content
      • after (integer?) add empty lines to the end of the content

Example:

lua
{ T = {
+  description = 'Todo',
+  template = '* TODO %?\n %u',
+  target = '~/org/todo.org'
+} }

Journal example:

lua
{
+  j = {
+    description = 'Journal',
+    template = '\n*** %<%Y-%m-%d> %<%A>\n**** %U\n\n%?',
+    target = '~/sync/org/journal.org'
+  },
+}

Journal example with dynamic target, i.e. a separate file per month:

lua
{
+  J = {
+    description = 'Journal',
+    template = '\n*** %<%Y-%m-%d> %<%A>\n**** %U\n\n%?',
+    target = '~/sync/org/journal/%<%Y-%m>.org'
+  },
+}

Nested key example:

lua
{
+  e =  'Event',
+  er = {
+    description = 'recurring',
+    template = '** %?\n %T',
+    target = '~/org/calendar.org',
+    headline = 'recurring'
+  },
+  eo = {
+    description = 'one-time',
+    template = '** %?\n %T',
+    target = '~/org/calendar.org',
+    headline = 'one-time'
+  }
+}
+-- or
+{
+  e = {
+    description = 'Event',
+    subtemplates = {
+      r = {
+        description = 'recurring',
+        template = '** %?\n %T',
+        target = '~/org/calendar.org',
+        headline = 'recurring'
+      },
+      o = {
+        description = 'one-time',
+        template = '** %?\n %T',
+        target = '~/org/calendar.org',
+        headline = 'one-time'
+      },
+    },
+  },
+}

Lua expression example:

lua
{
+  j = {
+    description = 'Journal',
+    template = '* %(return vim.fn.getreg "w")',
+    -- get the content of register "w"
+    target = '~/sync/org/journal.org'
+  },
+}

org_agenda_min_height

  • Type: number
  • Default: 16

Indicates the minimum height that the agenda window will occupy.

org_priority_highest

  • Type: string|number
  • Default: A

Indicates highest priority for a task in the agenda view. Example:

org
* TODO [#A] This task has the highest priority

org_priority_default

  • Type: string|number
  • Default: B

Indicates normal priority for a task in the agenda view. This is the default priority for all tasks if other priority is not applied Example:

org
* TODO [#B] This task has the normal priority
+* TODO And this one has the same priority

org_priority_lowest

  • Type: string|number
  • Default: C

Indicates lowest priority for a task in the agenda view. Example:

org
* TODO [#B] This task has the normal priority
+* TODO And this one has the same priority as above one
+* TODO [#C] I'm lowest in priority

org_agenda_skip_scheduled_if_done

  • Type: boolean
  • Default: false

Hide scheduled entries from agenda if they are in a "DONE" state.

org_agenda_skip_deadline_if_done

  • Type: boolean
  • Default: false

Hide deadline entries from agenda if they are in a "DONE" state.

org_agenda_text_search_extra_files

  • Type: ('agenda-archives')[]
  • Default: {}

Additional files to search from agenda search prompt. Currently it accepts only a single value: agenda-archives. Example value: {'agenda-archives'}

Calendar settings

Adjust behavior of the calendar modal (ex: changing the date under cursor).

calendar.round_min_with_hours

  • Type: boolean
  • Default: true

Should minutes be rounded, when the hour is changed. It behaves more fluently when changing the hours, especially when scheduling from the current time (which can be something odd). If set to false, the minutes are unchanged while changing the hours.

calendar.min_big_step

  • Type: number
  • Default: 15

The step size for changing the minutes while the cursor is on the first digit.

calendar.min_small_step

The step size for changing the minutes while the cursor is on the second digit.

Tags settings

org_tags_column

  • Type: number
  • Default: 80

The column to which tags should be indented in a headline. If this number is positive, it specifies the column. If it is negative, it means that the tags should be flushright to that column. For example, -80 works well for a normal 80 character screen. When 0, place tags directly after headline text, with only one space in between.

org_use_tag_inheritance

  • Type: boolean
  • Default: true

When set to true, tags are inherited from parents for purposes of searching. Which means that if you have this structure:

org
* TODO My top task :MYTAG:
+** TODO MY child task :CHILDTAG:
+*** TODO Nested task

First headline has tag MYTAG Second headline has tags MYTAG and CHILDTAG Third headline has tags MYTAG and CHILDTAG. When disabled, headlines have only tags that are directly applied to them.

org_tags_exclude_from_inheritance

  • Type: string[]
  • Default: {}

List of tags that are excluded from inheritance. Using the example above, setting this variable to {'MYTAG'}, second and third headline would have only CHILDTAG, where MYTAG would not be inherited.

Mappings

Mappings try to mimic some of the Orgmode mappings, but since Orgmode uses CTRL + c as a modifier most of the time, we have to take a different route. When possible, instead of CTRL + C, prefix <Leader>o is used. This is customizable via the mappings.prefix setting.

To disable all mappings, just pass disable_all = true to mappings settings:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    disable_all = true
+  }
+})

To disable a specific mapping, set it's value to false:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      org_agenda = false,
+      org_capture = 'gC'
+    },
+  }
+})

To change a key mapping's lhs but not its desc, provide a string or a table:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      -- providing a string
+      org_agenda = '<D-a>',
+      -- providing a table
+      org_capture = { '<D-c>' }
+    },
+  }
+})

To change a key mapping's lhs and its desc, provide a table:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+       org_capture = { '<D-c>', desc = 'Open Capture Prompt' }
+    }
+  }
+})

(The desc value is displayed in tools like WhichKey.)

You can find the configuration file that holds all default mappings here.

NOTE: All mappings are normal mode mappings (nnoremap) with exception of org_return

Use Enter in insert mode to add list items/checkboxes/todos

By default, adding list items/checkboxes/todos is done with org_meta_return which is a normal mode mapping. If you want to have an insert mode mapping there are two options:

  1. If your terminal supports it, map a key like Shift + Enter to the meta return mapping (Recommended):
lua
vim.api.nvim_create_autocmd('FileType', {
+  pattern = 'org',
+  callback = function()
+    vim.keymap.set('i', '<S-CR>', '<cmd>lua require("orgmode").action("org_mappings.meta_return")<CR>', {
+      silent = true,
+      buffer = true,
+    })
+  end,
+})
  1. If you want to use only enter, enable org_return_uses_meta_return option:
lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    org_return_uses_meta_return = true
+  }
+})

This will trigger org_meta_return if there is no content after the cursor position (either at the end of line or has just trailing spaces). Just note that this option always tries to use meta_return, which also adds new headlines automatically if you are on the headline line, which can give undesired results.

Global mappings

There are only 2 global mappings that are accessible from everywhere.

org_agenda

  • Mapped to: <Leader>oa

Opens up agenda prompt.

org_capture

  • Mapped to: <Leader>oc

Opens up capture prompt.

These live under mappings.global and can be overridden like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      org_agenda = 'gA',
+      org_capture = 'gC'
+    }
+  }
+})

If you want to use multiple mappings for same thing, pass array of mappings:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    global = {
+      org_agenda = {'gA', '<Leader>oa'},
+      org_capture = {'gC', '<Leader>oc'}
+    }
+  }
+})

Agenda mappings

Mappings used in agenda view window.

org_agenda_later

  • Mapped to: f

Go to next agenda span.

org_agenda_earlier

  • Mapped to: b

Go to previous agenda span.

org_agenda_goto_today

  • Mapped to: .

Go to span with for today.

org_agenda_day_view

  • Mapped to: vd

Show agenda day view.

org_agenda_week_view

  • Mapped to: vw

Show agenda week view.

org_agenda_month_view

  • Mapped to: vm

Show agenda month view.

org_agenda_year_view

  • Mapped to: vy

Show agenda year view.

org_agenda_quit

  • Mapped to: q

Close agenda.

org_agenda_switch_to

  • Mapped to: <CR>

Open selected agenda item in the same buffer.

org_agenda_goto

  • Mapped to: {'<TAB>'}

Open selected agenda item in split window.

org_agenda_goto_date

  • Mapped to: J

Open calendar that allows selecting date to jump to.

org_agenda_redo

  • Mapped to: r

Reload all org files and refresh current agenda view.

org_agenda_todo

  • Mapped to: t

Change TODO state of an item in both agenda and original Org file.

org_agenda_clock_in

  • Mapped to: I

Clock in item under cursor. See Clocking for more details.

org_agenda_clock_out

  • Mapped to: O

Clock out currently active clock item. See Clocking for more details.

org_agenda_clock_cancel

  • Mapped to: X

Cancel clock on currently active clock item. See Clocking for more details.

org_agenda_clock_goto

  • Mapped to: <Leader>oxj

Jump to currently clocked in headline. See Clocking for more details.

org_agenda_clockreport_mode

  • Mapped to: R

Show clock report at the end of the agenda for current agenda time range See Clocking for more details.

org_agenda_priority

  • Mapped to: <Leader>o,

Choose the priority of a headline item.

org_agenda_priority_up

  • Mapped to: +

Increase the priority of a headline item.

org_agenda_priority_down

  • Mapped to: -

Decrease the priority of a headline item.

org_agenda_archive

  • Mapped to: <Leader>o$

Archive headline item to archive location.

org_agenda_toggle_archive_tag

  • Mapped to: <Leader>oA

Toggle "ARCHIVE" tag of a headline item.

org_agenda_set_tags

  • Mapped to: <Leader>ot

Set tags on current headline item.

org_agenda_deadline

  • Mapped to: <Leader>oid

Insert/Update deadline date on current headline item.

org_agenda_schedule

  • Mapped to: <Leader>ois

Insert/Update scheduled date on current headline item.

org_agenda_refile

  • Mapped to: <Leader>or

Refile current headline to a destination org-file. Same as org_refile but from agenda view.

org_agenda_add_note

  • Mapped to: <Leader>ona

Add note to the current headline

org_agenda_filter

  • Mapped to: /

Open prompt that allows filtering current agenda view by category, tags and title (vim regex, see :help vim.regex()) Example:

Having todos.org file with headlines that have tags mytag or myothertag, and some of them have check in content, this search: todos+mytag/check/ Returns all headlines that are in todos.org file, that have mytag tag, and have check in headline title. Note that regex is case sensitive by default. Use vim regex flag \c to make it case insensitive. See :help vim.regex() and :help /magic. Pressing <TAB> in filter prompt autocompletes categories and tags.

org_agenda_preview

org_agenda_show_help

  • Mapped to: g?

Show help popup with mappings

These mappings live under mappings.agenda, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    agenda = {
+      org_agenda_later = '>',
+      org_agenda_earlier = '<',
+      org_agenda_goto_today = {'.', 'T'}
+    }
+  }
+})

Capture mappings

Mappings used in capture window.

org_capture_finalize

  • Mapped to: <C-c>

Save current capture content to org_default_notes_file and close capture window.

org_capture_refile

  • Mapped to: <Leader>or

Refile capture content to specific destination.

org_capture_kill

  • Mapped to: <Leader>ok

Close capture window without saving anything.

org_capture_show_help

  • Mapped to: g?

Show help popup with mappings.

These mappings live under mappings.capture, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    capture = {
+      org_capture_finalize = '<Leader>w',
+      org_capture_refile = 'R',
+      org_capture_kill = 'Q'
+    }
+  }
+})

Note mappings

Mappings used in closing note window.

org_note_finalize

  • Mapped to: <C-c>

Save note window content as closing note for a headline. Ignores first comment (if exists).

org_note_kill

  • Mapped to: <Leader>ok

Close note window without saving anything.

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    note = {
+      org_note_finalize = '<Leader>w',
+      org_note_kill = 'Q'
+    }
+  }
+})

Org mappings

Mappings for org files.

org_refile

  • Mapped to: <Leader>or

Refile current headline, including its subtree, to a destination org-file. This file must be one of the files specified for the org_agenda_files setting. A target headline in the destination file can be specified with destination.org/<headline>. If there are multiple headlines with the same name in the destination file, the first occurence will be used.

org_timestamp_up

  • Mapped to: <C-a>

Increase date part under under cursor. Accepts count: (Example: 5<C-a>) | in examples references cursor position.

  • Year - Example date: <202|1-10-01 Fri 10:30> becomes <202|2-10-01 Sat 10:30>
  • Month - Example date: <2021-1|0-01 Fri 10:30> becomes <2022-1|1-01 Mon 10:30>
  • Day - Example date: <2021-10-0|1 Fri 10:30> becomes <2022-10-0|2 Sat 10:30>. Same thing happens when cursor is on day name.
  • Hour - Example date: <2021-10-01 Fri 1|0:30> becomes <2022-10-02 Sat 1|1:30>.
  • Minute - Example date: <2021-10-01 Fri 10:3|0> becomes <2022-10-02 Sat 11:3|5>. See org_time_stamp_rounding_minutes for steps configuration.
  • Repeater/Delay range (h->d->w->m->y) - Example date: <2021-10-01 Fri 10:30 +1|w> becomes <2021-10-01 Fri 10:30 +1|m>
  • Active/Inactive state - (< to [ and vice versa) - Example date: |<2021-10-01 Fri 10:30> becomes |[2021-10-01 Fri 10:30]

org_timestamp_down

  • Mapped to: <C-x>

Decrease date part under under cursor. Same as org_timestamp_up, just opposite direction.

org_timestamp_up_day

  • Mapped to: <S-UP>

Increase date under cursor by 1 or "count" day(s) (Example count: 5<S-UP>).

org_timestamp_down_day

  • Mapped to: <S-DOWN>

Decrease date under cursor by 1 or "count" day(s) (Example count: 5<S-UP>).

org_change_date

  • Mapped to: cid

Change date under cursor. Opens calendar to select new date.

org_toggle_timestamp_type

  • Mapped to: <Leader>od!

Switches the timestamp under the cursor between inactive and active.

org_priority

  • Mapped to: <Leader>o,

Choose the priority of a headline item.

org_priority_up

  • Mapped to: ciR

Increase the priority of a headline item.

org_priority_down

  • Mapped to: cir

Decrease the priority of a headline item.

org_todo

  • Mapped to: cit

Cycle todo keyword forward on current headline or open fast access to TODO states prompt (see org_todo_keywords) if it's enabled.

org_todo_prev

  • Mapped to: ciT

Cycle todo keyword backward on current headline.

org_toggle_checkbox

  • Mapped to: <C-Space>

Toggle current line checkbox state.

org_toggle_heading

  • Mapped to: <Leader>o*

Toggle current line to headline and vice versa. Checkboxes will turn into TODO headlines.

  • Mapped to: <Leader>oli

Insert a hyperlink at cursor position. When the cursor is on a hyperlink, edit that hyperlink. In visual mode, uses selected text as link description. If there are any links stored with org_store_link, pressing <TAB> to autocomplete the input will show list of all stored links to select. Links generated with ID are properly expanded to valid links after selection.

  • Mapped to: <Leader>ols

Generate a link to the closest headline. If org_id_link_to_org_use_id is true, it appends the ID property to the headline, and generates link with that id to be inserted via org_insert_link. When org_id_link_to_org_use_id is false, it generates the standard file::*headline link (example: file:/path/to/my/todos.org::*My headline)

org_open_at_point

  • Mapped to: <Leader>oo

Open hyperlink or date under cursor. When date is under the cursor, open the agenda for that day.

org_edit_special

  • Mapped to: <Leader>o'

Open a source block for editing in a temporary buffer of the associated filetype. This is useful for editing text with language servers attached, etc. When the buffer is closed, the text of the underlying source block in the original Org file is updated. 📝 NOTE: if the Org file that the source block comes from is edited before the special edit buffer is closed, the edits will not be applied. The special edit buffer contents can be recovered from :messages output

org_add_note

  • Mapped to: <Leader>ona

Add note to the current headline.

org_cycle

  • Mapped to: <TAB>

Cycle folding for current headline.

org_global_cycle

  • Mapped to: <S-TAB>

Cycle global folding.

org_archive_subtree

  • Mapped to: <Leader>o$

Archive current headline to archive location.

org_set_tags_command

  • Mapped to: <Leader>ot

Set tags on current headline.

org_toggle_archive_tag

  • Mapped to: <Leader>oA

Toggle "ARCHIVE" tag on current headline.

org_do_promote

  • Mapped to: <<

Promote headline.

org_do_demote

  • Mapped to: >>

Demote headline.

org_promote_subtree

  • Mapped to: <s

Promote subtree.

org_demote_subtree

  • Mapped to: >s

Demote subtree.

org_meta_return

  • Mapped to: <Leader><CR>

Add headline, list item or checkbox below, depending on current line.

org_insert_heading_respect_content

  • Mapped to: <Leader>oih

Add headline after current headline + it's content with same level.

org_insert_todo_heading

  • Mapped to: <Leader>oiT

Add TODO headline right after the current headline.

org_insert_todo_heading_respect_content

  • Mapped to: <Leader>oit

Add TODO headliner after current headline + it's content.

org_move_subtree_up

  • Mapped to: <Leader>oK

Move current headline + it's content up by one headline.

org_move_subtree_down

  • Mapped to: <Leader>oJ

Move current headline + it's content down by one headline.

org_export

  • Mapped to: <Leader>oe

Open export options. NOTE: Exports are handled via emacs and pandoc. This means that emacs and/or pandoc must be in $PATH. See org_custom_exports if you want to add your own export options.

org_next_visible_heading

  • Mapped to: }

Go to next heading (any level).

org_previous_visible_heading

  • Mapped to: {

Go to previous heading (any level).

org_forward_heading_same_level

  • Mapped to: ]]

Go to next heading on same level. Doesn't go outside of parent.

org_backward_heading_same_level

  • Mapped to: [[

Go to previous heading on same level. Doesn't go outside of parent.

outline_up_heading

  • Mapped to: g{

Go to parent heading.

org_deadline

  • Mapped to: <Leader>oid

Insert/Update deadline date.

org_schedule

  • Mapped to: <Leader>ois

Insert/Update scheduled date.

org_time_stamp

  • Mapped to: <Leader>oi.

Insert/Update date under cursor.

org_time_stamp_inactive

  • Mapped to: <Leader>oi!

Insert/Update inactive date under cursor.

org_clock_in

  • Mapped to: <Leader>oxi

Clock in headline under cursor. See Clocking for more details.

org_clock_out

  • Mapped to: <Leader>oxo

Clock out headline under cursor. See Clocking for more details.

org_clock_cancel

  • Mapped to: <Leader>oxq

Cancel currently active clock on current headline. See Clocking for more details.

org_clock_goto

  • Mapped to: <Leader>oxj

Jump to currently clocked in headline. See Clocking for more details.

org_set_effort

  • Mapped to: <Leader>oxe

Set effort estimate property on for current headline. See Clocking for more details.

org_babel_tangle

  • Mapped to: <leader>obt

Tangle current file. See Extract source code (tangle) for more details.

org_show_help

  • Mapped to: g?

Show help popup with mappings

These mappings live under mappings.org, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    org = {
+      org_timestamp_up = '+',
+      org_timestamp_down = '-'
+    }
+  }
+})

Edit Src

Mappings applied when editing a SRC block content via org_edit_special.

org_edit_src_abort

  • Mapped to: <Leader>ok

Abort changes made to temporary buffer created from the content of a SRC block, see above.

org_edit_src_save

  • Mapped to: <Leader>ow

Apply changes from the special buffer to the source Org buffer.

org_edit_src_save_exit

  • Mapped to: <Leader>'

Apply changes from the special buffer to the source Org buffer and close the edit special window.

org_edit_src_show_help

  • Mapped to: g?

Show help within the temporary buffer used to edit the content of a SRC block.

Text objects

Operator mappings for org files. Example: Pressing vir select everything from current heading and all child. inner means that it doesn't select the stars, where around selects inner + stars. See this issue comment for visual preview.

📝 NOTE: Some mappings can clash with other plugin mappings, like gitsigns.nvim which also has ih operator mapping.

inner_heading

  • Mapped to: ih

Select inner heading with content.

around_heading

  • Mapped to: ah

Select around heading with content.

inner_subtree

  • Mapped to: ir

Select whole inner subtree.

around_subtree

  • Mapped to: ar

Select around whole subtree.

inner_heading_from_root

  • Mapped to: Oh (big letter o)

select everything from first level heading to the current heading.

around_heading_from_root

  • Mapped to: OH (big letter o)

select around everything from first level heading to the current heading.

inner_subtree_from_root

  • Mapped to: Or (big letter o)

select everything from first level subtree to the current subtree.

around_subtree_from_root

  • Mapped to: OR (big letter o)

select around everything from first level subtree to the current subtree.

These mappings live under mappings.text_objects, and can be changed like this:

lua
require('orgmode').setup({
+  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
+  org_default_notes_file = '~/Dropbox/org/refile.org',
+  mappings = {
+    text_objects = {
+      inner_heading = 'ic',
+    }
+  }
+})

markup text objects*

Mappings to select inner/outer markup entries. For example, having This is *bold*, and if cursor is in middle of *bold*, doing ci* changes only inner text, and doing ca* changes outer text. These are supported: *, _, /, +, ~, = These cannot be changed.

Dot repeat

To make all mappings dot repeatable, install vim-repeat plugin.

Features

Autocompletion

By default, omnifunc is provided in org files that autocompletes these types:

  • Tags
  • Todo keywords
  • Common drawer properties and values (:PROPERTIES:, :CATEGORY:, :END:, etc.)
  • Planning keywords (DEADLINE, SCHEDULED, CLOSED)
  • Orgfile special keywords (#+TITLE, #+BEGIN_SRC, #+ARCHIVE, etc.)
  • Hyperlinks (* - headlines, # - headlines with CUSTOM_ID property, headlines matching title)

Autocompletion is context aware, which means that for example tags autocompletion will kick in only when cursor is at the end of headline. Example (| marks the cursor):

org
** TODO Some task :|

Or todo keywords only at the beginning of the headline:

org
*** |

Or hyperlinks after double square bracket:

org
Some content [[|

To use an autocompletion plugin, check Completion plugins

Clocking

There is partial support for Clocking work time.

Supported actions:

Clock in

Org file mapping: =<leader>oxi=
Agenda view mapping: I=\\ Start the clock by adding or updating the =:LOGBOOK: drawer. Note that this clocks out any currently active clock.
Also, agenda/todo/search view highlights item that is clocked in.

Clock out

Org file mapping: =<leader>oxo=
Agenda view mapping: O=\\ Clock out the entry and update the =:LOGBOOK: drawer, and also add a total tracked time.
Note that in agenda view pressing O anywhere clocks the currently active entry, while in org file cursor must be in the headline subtree.

Clock cancel

Org file mapping: =<leader>oxq=
Agenda view mapping: =X=
Cancel the currently active clock. This just removes the entry added by clock in from :LOGBOOK: drawer.
Note that in agenda view pressing X anywhere cancels clock on the currently active entry, while in org file cursor must be in the headline subtree.

Clock goto

Org file mapping: <leader>oxj Agenda view mapping: <leader>oxj Jump to currently clocked in headline in the current window.

Set effort
  • Org file mapping: <leader>oxe
  • Agenda view mapping: <leader>oxe

Add/Update an Effort estimate property for the current headline.

Clock report table

Agenda view mapping: R

Show the clocking report for the current agenda time range. Headlines from table can be jumped to via <TAB>/<CR> (underlined). Note that this is visible only in Agenda view, since it's the only view that have a time range. Todo/Search views are not supported.

Automatic updates of totals

When updating closed logbook dates that have a total at the right (example: ==> 1:05), updating any of the dates via org_timestamp_up/org_timestamp_down automatically recalculates this value.

Recalculating totals

Org file mapping: gq (Note: This is Vim's built in mapping that calls formatexpr, see :help gq)

If you changed any of the dates in closed logbook entry, and want to recalculate the total, select the line and press gq, or if you want to do it in normal mode, just do gqgq.

Statusline function

Function: v:lua.orgmode.statusline()

Show the currently clocked in headline (if any), with total clocked time / effort estimate (if set).

vim
set statusline=%{v:lua.orgmode.statusline()}

Formatting

Formatting is done via gq mapping, which uses formatexpr under the hood (see :help formatexpr for more info). For example, to re-format whole document, you can do gggqG. gg goes to first line in current file, gq starts the format motion, and G goes to last line in file to make it format the whole thing. To format a single line, do gqgq, or to format selection, select the lines you want to format and just do gq.

Currently, these things are formatted:

  • Tags are aligned according to the org_tags_column setting
  • Tables are formatted (see Tables for more info)
  • Clock entries total time is recalculated (see Recalculating totals in Clocking section)

The format for links is either [[LINK]] or [[LINK][DESCRIPTION]]. If a description is provided, the actual link is concealed in favor of the description.

Hyperlink types supported:

  • URL (http://, https://)
  • File (starts with file:. Example: file:/home/user/.config/nvim/init.lua) Optionally, target can be specified:
    • Headline - It needs to start with * (Example: file:/home/user/org/file.org::*Specific Headline)
    • Custom id - It needs to start with # (Example: file:/home/user/org/file.org::#my-custom-id)
    • Line number - It needs to be a number (Example: file:/home/user/org/file.org::235)
  • Headline title target within the same file (starts with *) (Example: *Specific headline)
  • Headline with CUSTOM_ID property within the same file (starts with #) (Example: #my-custom-id)
  • Fallback: If file path, opens the file, otherwise, tries to find the headline title in the current file.
  • Your own custom type (see below)

To add your own custom hyperlink type, provide a custom handler to hyperlinks.sources setting. Each handler needs to have a get_name() method that returns a name for the handler. Additionally, follow(link) and autocomplete(link) optional methods are available to open the link and provide the autocompletion. Here's an example of adding a custom "ping" hyperlink type that opens the terminal and pings the provided URL and provides some autocompletion with few predefined URLs:

lua
local LinkPingType = {}
+
+---Unique name for the handler. MUST NOT be one of these: "http", "id", "line_number", "custom_id", "headline"
+---This method is required
+---@return string
+function LinkPingType:get_name()
+  return 'ping'
+end
+
+---This method is in charge of "executing" the link. For "http" links, it would open the browser, for example.
+---In this example, it will open the terminal and ping the value of the link.
+---The value of the link is passed as an argument.
+---For example, if you have a link [[ping:google.com][ping_google]], doing an `org_open_at_point` (<leader>oo by default)
+---anywhere within the square brackets, will call this method with `ping:google.com` as an argument.
+---It's on this method to figure out what to do with the value.
+---If this method returns `true`, it means that the link was successfully followed.
+---If it returns `false`, it means that this handler cannot handle the link, and it will continue to the next source.
+---This method is optional.
+---@param link string - The current value of the link, for example: "ping:google.com"
+---@return boolean - When true, link was handled, when false, continue to the next source
+function LinkPingType:follow(link)
+  if not vim.startswith(link, 'ping:') then
+    return false
+  end
+  -- Get the part after the `ping:` part
+  local url = link:sub(6)
+  -- Open terminal in vertical split and ping the URL
+  vim.cmd('vsplit | term ping ' .. url)
+  return true
+end
+
+---This is an optional method that will provide autocompletion for your link type.
+---This method needs to pre-filter the list of possible completions based on the current value of the link.
+---For example, if this source has `ping:google.com` and `ping:github.com` as possible completions,
+---And the current value of the link is `ping:go`, this method should return `{'ping:google.com'}`.
+---This method is optional.
+---@param link string - The current value of the link, for example: "ping:go"
+---@return string[]
+function LinkPingType:autocomplete(link)
+  local items = {
+    'ping:google.com',
+    'ping:github.com'
+  }
+  return vim.tbl_filter(function(item) return vim.startswith(item, link) end, items)
+end
+
+require('orgmode').setup({
+  hyperlinks = {
+    sources = {
+      LinkPingType,
+      -- Simpler types can be inlined like this:
+      {
+        get_name = function() return 'my_custom_type' end,
+        follow = function(self, link) print('Following link:', link) return true end,
+        autocomplete = function(self, link) return {'my_custom_type:my_custom_link'} end
+      }
+    }
+  }
+})

Notifications

There is an experimental support for agenda tasks notifications. Related issue #49.

Linux/MacOS has support for notifications via:

  • System notification app (notify-send/terminal-notifier) (See below for setup)
  • As part of Neovim running instance in floating window

Windows support only notifications in running Neovim instance. Any help on this topic is appreciated.

Default configuration (detailed description below):

lua
require('orgmode').setup({
+  notifications = {
+    enabled = false,
+    cron_enabled = true,
+    repeater_reminder_time = false,
+    deadline_warning_reminder_time = false,
+    reminder_time = 10,
+    deadline_reminder = true,
+    scheduled_reminder = true,
+    notifier = function(tasks)
+      local result = {}
+      for _, task in ipairs(tasks) do
+        require('orgmode.utils').concat(result, {
+          string.format('# %s (%s)', task.category, task.humanized_duration),
+          string.format('%s %s %s', string.rep('*', task.level), task.todo, task.title),
+          string.format('%s: <%s>', task.type, task.time:to_string())
+        })
+      end
+
+      if not vim.tbl_isempty(result) then
+        require('orgmode.notifications.notification_popup'):new({ content = result })
+      end
+
+      -- Example: if you use Snacks, you can do something like this (THis is not implemented)
+      Snacks.notifier.notify(table.concat(result, '\n'), vim.log.levels.INFO, {
+        title = 'Orgmode',
+        ft = 'org'
+      })
+    end,
+    cron_notifier = function(tasks)
+      for _, task in ipairs(tasks) do
+        local title = string.format('%s (%s)', task.category, task.humanized_duration)
+        local subtitle = string.format('%s %s %s', string.rep('*', task.level), task.todo, task.title)
+        local date = string.format('%s: %s', task.type, task.time:to_string())
+
+        -- Linux
+        if vim.fn.executable('notify-send') == 1 then
+          vim.system({
+            'notify-send',
+            '--icon=/path/to/orgmode/assets/nvim-orgmode-small.png',
+            '--app-name=orgmode',
+            title,
+            string.format('%s\n%s', subtitle, date),
+          })
+        end
+
+        -- MacOS
+        if vim.fn.executable('terminal-notifier') == 1 then
+          vim.system({ 'terminal-notifier', '-title', title, '-subtitle', subtitle, '-message', date })
+        end
+      end
+    end
+  },
+})

Options description:

  • enabled

    • Type: boolean
    • Default: false

    Enable notifications inside Neovim. Not needed for cron notifications.

  • cron_enabled

    • Type: boolean
    • Default: true

    Enable notifications via cron. Requires additional setup, see Cron section.

  • repeater_reminder_time (boolean|number|number[]) -

    • Type: boolean|number|number[]
    • Default: false

    Number of minutes before the repeater time to send notifications. For example, if now is 2021-07-15 15:30, and there's a todo item with date <2021-07-01 15:30 +1w>, notification will be sent if value of this setting is 0. If this configuration has a value of {1, 5, 10}, this means that notification will be sent on 2021-07-15 15:20, 2021-07-15 15:25 and 2021-07-15 15:29. false means disabled (default).

  • deadline_warning_reminder_time

    • Type: boolean|number|number[]
    • Default: 0

    Number of minutes before the warning time to send notifications. For example, if now is 2021-07-15 12:30, and there's a todo item with date <2021-07-15 18:30 -6h>, notification will be sent. If this configuration has a value of {1, 5, 10}, this means that notification will be sent on 2021-07-15 12:20, 2021-07-15 12:25 and 2021-07-15 12:29. 0 (Default) means that it will send notification only on exact warning time

  • reminder_time

    • Type: boolean|number|number[]
    • Default: 10

    Number of minutes before the time to send notifications. For example, if now is 2021-07-15 12:30, and there's a todo item with date <2021-07-15 12:40>, notification will be sent. If this configuration has a value of {1, 5, 10}, this means that notification will be sent on 2021-07-15 12:20, 2021-07-15 12:25 and 2021-07-15 12:29. This reminder also applies to both repeater and warning time if the time is matching. So with the example above, both 2021-07-15 12:20 +1w and 2021-07-15 12:20 -3h will trigger notification. will trigger notification. 10 (default) means that it will send notification 10 minutes before the time.

  • deadline_reminder

    • Type: boolean
    • Default: true

    Should notifications be sent for DEADLINE dates.

  • scheduled_reminder

    • Type: boolean
    • Default: true

    Should notifications be sent for SCHEDULED dates.

  • notifier

    • Type: fun(tasks: table[])
    • Default: nil

    Function for sending notification inside Neovim. Accepts array of tasks (see below) and shows floating window with notifications.

  • cron_notifier

    • Type: fun(tasks: table[])
    • Default: nil

    Function for sending notification via cron. Accepts array of tasks (see below) and triggers external program to send notifications.

*Tasks

Notifier functions accepts tasks parameter which is an array of this type:

lua
{
+  file = string, -- (Path to org file containing this task. Example: /home/myhome/orgfiles/todos.org)
+  todo = string, -- (Todo keyword on the task. Example value: TODO)
+  title = string, -- (Content of the headline without the todo keyword and tag. Example: Submit papers)
+  level = number, -- (Headline level (number of asterisks). Example: 1)
+  category = string, -- (file name where this task lives. With example file above, this would be: todos),
+  priority = string, -- (priority on the task. Example: A)
+  tags = string[], -- (array of tags applied to the headline. Example: {'WORK', 'OFFICE'})
+  original_time = Date, -- (Date object (see [Date object](lua/orgmode/objects/date.lua) for details) containing original time of the task (with adjustments and everything))
+  time = Date, -- (Date object (see [Date object](lua/orgmode/objects/date.lua) for details) time that matched the reminder configuration (with applied adjustments))
+  reminder_type = string, -- (Type of the date that matched reminder settings. Can be one of these: repeater, warning or time),
+  minutes = number, -- (Number of minutes before the task)
+  humanized_duration = string, -- (Humanized duration until the task. Examples: in 10 min., in 5 hr, in 3 hr and 10 min.)
+  type = string, -- (Date type. Can be one of these: DEADLINE or SCHEDULED),
+  range = table -- (Start and end line of the headline subtree. Example: { start_line = 2, end_line = 5 })
+}

Cron

In order to trigger notifications via cron, job needs to be added to the crontab. This is currently possible only on Linux and MacOS, since I don't know how would this be done on Windows. Any help on this topic is appreciated. This works by starting the headless Neovim instance, running one off function inside orgmode, and quitting the Neovim.

First try to see if you can run this command:

example
nvim --headless -c 'lua require("orgmode").cron()'

If it exits without errors, you are ready!

Here's maximum simplified Linux example (Tested on Manjaro/Arch/Ubuntu), but least optimized:

Run this to open crontab:

example
crontab -e

Then add this (Ensure path to nvim is correct):

crontab
** * * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/local/bin/nvim --headless -c 'lua require("orgmode").cron()'

More optimized version would be to create a lua file that has only necessary plugins loaded:

lua
-- ~/.config/nvim/lua/partials/org_cron.lua
+
+-- If you are using lazy.vim do this:
+local orgmode = vim.fn.stdpath('data') .. '/lazy/orgmode'
+vim.opt.runtimepath:append(orgmode)
+-- If you are using Packer or any other package manager that uses built-in package manager, do this:
+vim.cmd('packadd orgmode')
+
+-- Run the orgmode cron
+require('orgmode').cron({
+  org_agenda_files = '~/orgmode/*',
+  org_default_notes_file = '~/orgmode/notes.org',
+  notifications = {
+    reminder_time = {0, 5, 10},
+  },
+})

And update cron job to this:

crontab
** * * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/local/bin/nvim -u NONE --noplugin --headless -c 'lua require("partials.org_cron")'

This option is most optimized because it doesn't load plugins and your init.vim For MacOS, things should be very similar, but I wasn't able to test it. Any help on this is appreciated.

Tables

Tables can be formatted via built in formatexpr (see :help gq)

For example, having this content:

org
* TODO My headline
+  DEADLINE: <2022-05-22 Sun>
+
+  |Header 1|Header 2
+  |-
+  | col 1| col 2|

And going to line 4 and pressing gqgq, it will format it to this:

org
* TODO My headline
+  DEADLINE: <2022-05-22 Sun>
+
+  | Header 1 | Header 2 |
+  |----------+----------|
+  | col 1    | col 2    |

Part of Advanced search functionality is implemented.

To leverage advanced search, open up agenda prompt (default <Leader>oa), and select m or =M=(todos only) option.

What is supported:

  • Operators: |, &, + and - (examples: COMPUTER+URGENT, COMPUTER|URGENT, +COMPUTER-URGENT, COMPUTER|WORK+EMAIL)
  • Search by property with basic arithmetic operators (<, <=, =, >=, >=, <>) (examples: CATEGORY="mycategory", CUSTOM_ID=my_custom_id, AGE<10, ITEMS>=5)
  • Search by todo keyword (example: COMPUTER+URGENT/TODO|NEXT)

Few examples:

  • Search all with tag COMPUTER or WORK and EMAIL: COMPUTER|WORK+EMAIL. And always have precedence over or. Workaround to use first or is to write it like this: COMPUTER+EMAIL|WORK+EMAIL
  • Search all with keyword TODO, tag URGENT and property AGE bigger than 10: URGENT+AGE>10/TODO
  • Search all with keyword DONE or DELEGATED, tag COMPUTER and property AGE not equal to 10: COMPUTER+AGE<>10/DONE|DELEGATED
  • Search all without keyword DONE, tag URGENT but without tag COMPUTER and property CATEGORY equal to mywork: URGENT-COMPUTER+CATEGORY=mywork/-DONE

Extract source code (tangle)

There is basic support for extracting source code with tangle and noweb. (Orgmode link: Extracting source code) These options are supported:

  1. Setting header-args on multiple levels:
    1. Configuration (org_babel_default_header_args)

    2. File level property (#+property: header-args :tangle yes)

    3. Headline level property

      org
      * Headline
      +  :PROPERTIES:
      +  :header-args: :tangle yes
      +  :END:
    4. Block level argument #+begin_src lua :tangle yes

  2. Tangling all blocks with these options:
    1. :tangle no - Do not tangle
    2. :tangle yes - Tangle to same filename as current org file, with different extension (If org file is ~/org/todo.org and block is #+block_src lua, tangles to /org/todo.lua)
    3. :tangle path - Tangle to given filename. It can be absolute (:tangle /path/to/file.ext) or relative to current file (either :tangle ./file.ext or :tangle file.ext)
  3. Basic :noweb syntax (See Noweb Reference Syntax):
    1. :noweb no - Do not expand any references
    2. :noweb yes - Expand references via #+name directive on block. See example below.
    3. :noweb tangle - Same as :noweb yes

Example: Having this file in ~/org/todos.org

Block below will pick up reference from the 2nd block name

#+begin_src lua :tangle yes :noweb yes <<headline2block>>print('Headline 1') #+end_src

#+name: headline2block #+begin_src lua :tangle yesprint('Headline 2') #+end_src #+end_src

Running org_babel_tangle will create file ~/org/todos.lua with this content:

#+begin_src lua print('Headline 2') print('Headline 1') == print('Headline 2') #+end_src

To extract blocks to specific file, you can set file level property with default path, and maybe exclude 2nd block to not be repeated:

#+property: header-args :tangle ./my_tangled_file.lua

#+begin_src lua :noweb yes <<headline2block>> print('Headline 1')#+end_src

Here we disable tangling, so only first block will give results with the noweb #+name: headline2block #+begin_src lua :tangle noprint('Headline 2') #+end_src

Running org_babel_tangle will create file ~/org/my_tangled_file.lua with this content:

#+begin_src lua print('Headline 2') print('Headline 1')#+end_src

User interface

Colors

Most of the highlight groups are linked to treesitter highlights where applicable (see :h treesitter-highlight).

The following highlight groups are used:

  • @org.headline.level1: Headline at level 1 - linked to Title
  • @org.headline.level2: Headline at level 2 - linked to Constant
  • @org.headline.level3: Headline at level 3 - linked to Identifier
  • @org.headline.level4: Headline at level 4 - linked to Statement
  • @org.headline.level5: Headline at level 5 - linked to PreProc
  • @org.headline.level6: Headline at level 6 - linked to Type
  • @org.headline.level7: Headline at level 7 - linked to Special
  • @org.headline.level8: Headline at level 8 - linked to String
  • @org.priority.highest: Highest priority marker - linked to @comment.error
  • @org.priority.high: High priority marker - Not linked to anything, defaults to normal text
  • @org.priority.default: Default priority marker - Not linked to anything, defaults to normal text
  • @org.priority.low: Lowest priority marker - Not linked to anything, defaults to normal text
  • @org.priority.lowest: Lowest priority marker - Not linked to anything, defaults to normal text
  • @org.timestamp.active: An active timestamp - linked to @keyword
  • @org.timestamp.inactive: An inactive timestamp - linked to @comment
  • @org.keyword.todo: TODO keywords color - Parsed from Error (see note below)
  • @org.keyword.done: DONE keywords color - Parsed from DiffAdd (see note below)
  • @org.bullet: A normal bullet under a header item - linked to @markup.list
  • @org.properties: Property drawer start/end delimiters - linked to @property
  • @org.drawer: Drawer start/end delimiters - linked to @property
  • @org.tag: A tag for a headline item, shown on the righthand side like :foo: - linked to @tag.attribute
  • @org.plan: SCHEDULED, DEADLINE, CLOSED, etc. keywords - linked to Constant
  • @org.block: A begin/end block (example: #begin_src) - linked to @comment
  • @org.inline_block: A src_lang block (example: print('foo') ) - linked to @comment
  • @org.comment: A comment block - linked to @comment
  • @org.latex_env: LaTeX block - linked to @markup.environment
  • @org.directive: Blocks starting with #+ - linked to @comment
  • @org.checkbox: The default checkbox highlight, including square brackets - linked to @markup.list.unchecked
  • @org.checkbox.halfchecked: A checkbox status (marker between []) checked with [-] - linked to @markup.list.unchecked
  • @org.checkbox.checked: A checkbox status (marker between []) checked with either [x] or [X] - linked to @markup.list.checked
  • @org.bold: bold text - linked to @markup.strong,
  • @org.bold.delimiter: bold text delimiter * - linked to @markup.strong,
  • @org.italic: italic text - linked to @markup.italic,
  • @org.italic.delimiter: italic text delimiter / - linked to @markup.italic,
  • @org.strikethrough: strikethrough text - linked to @markup.strikethrough,
  • @org.strikethrough.delimiter: strikethrough text delimiter + - linked to @markup.strikethrough,
  • @org.underline: underline text - linked to @markup.underline,
  • @org.underline.delimiter: underline text delimiter _ - linked to @markup.underline,
  • @org.code: code text - linked to @markup.raw,
  • @org.code.delimiter: code text delimiter ~ - linked to @markup.raw,
  • @org.verbatim: verbatim text - linked to @markup.raw,
  • @org.verbatim.delimiter: verbatim text delimiter = - linked to @markup.raw,
  • @org.hyperlink: link without description (example: [[file:/this/is/link]]) - linked to @markup.link,
  • @org.hyperlink.url: Url part of the link with description (example: [[file:/this/is/url][description]]) - linked to @markup.link.url,
  • @org.hyperlink.desc: Description part of the link with description (example: [[file:/path/to/file][description]]) - linked to @markup.link.label,
  • @org.latex: Inline latex - linked to @markup.math,
  • @org.table.delimiter - | and - delimiters in tables - linked to @punctuation.special,
  • @org.table.heading - Table headings - linked to @markup.heading,
  • @org.edit_src - The highlight for the source content in an Org buffer while it is being edited in an edit special buffer - linked to Visual,
  • @org.agenda.deadline: A item deadline in the agenda view - Parsed from Error (see note below)
  • @org.agenda.scheduled: A scheduled item in the agenda view - Parsed from DiffAdd (see note below)
  • @org.agenda.scheduled_past: A item past its scheduled date in the agenda view - Parsed from WarningMsg (see note below)
  • @org.agenda.time_grid: Time grid line - Parsed from WarningMsg (see note below)
  • @org.agenda.day: Highlight for all days in Agenda view - linked to Statement
  • @org.agenda.today: Highlight for today in Agenda view - linked to @org.bold
  • @org.agenda.weekend: Highlight for weekend days in Agenda view - linked to @org.bold

📝 NOTE: Colors used for todo keywords and agenda states (deadline, schedule ok, schedule warning) are parsed from the current colorscheme from several highlight groups (Error, WarningMsg, DiffAdd, etc.).

Overriding colors

All colors can be overridden by either setting new values or linking to another highlight group:

lua
vim.api.nvim_create_autocmd('ColorScheme', {
+  pattern = '*',
+  callback = function()
+    -- Define own colors
+    vim.api.nvim_set_hl(0, '@org.agenda.deadline', { fg = '#FFAAAA' })
+    vim.api.nvim_set_hl(0, '@org.agenda.scheduled', { fg = '#AAFFAA' })
+    -- Link to another highlight group
+    vim.api.nvim_set_hl(0, '@org.agenda.scheduled_past', { link = 'Statement' })
+  end
+})

For adding/changing TODO keyword colors see org-todo-keyword-faces

The menu is used when selecting further actions in agenda, capture and export. Here is an example of the menu you see when opening agenda:

example
Press key for an agenda command
+-------------------------------
+a Agenda for current week or day
+t List of all TODO entries
+m Match a TAGS/PROP/TODO query
+M Like m, but only for TODO entries
+s Search for keywords
+q Quit

Users have the option to change the appearance of this menu. To do this, you need to add a handler in the UI configuration section:

lua
require("orgmode").setup({
+  ui = {
+    menu = {
+      handler = function(data)
+        -- your handler here, for example:
+        local options = {}
+        local options_by_label = {}
+
+        for _, item in ipairs(data.items) do
+          -- Only MenuOption has `key`
+          -- Also we don't need `Quit` option because we can close the menu with ESC
+          if item.key and item.label:lower() ~= "quit" then
+            table.insert(options, item.label)
+            options_by_label[item.label] = item
+          end
+        end
+
+        local handler = function(choice)
+          if not choice then
+            return
+          end
+
+          local option = options_by_label[choice]
+          if option.action then
+            option.action()
+          end
+        end
+
+        vim.ui.select(options, {
+          propmt = data.propmt,
+        }, handler)
+      end,
+    },
+  },
+})

When the menu is called, the handler receives a table data with the following fields as input:

  • title (string) - menu title
  • items (table) - array containing MenuItem (see below)
  • prompt (string) - prompt text used to prompt a keystroke

Each menu item MenuItem is one of two types: MenuOption and MenuSeparator.

MenuOption is a table containing the following fields:

  • label (string) - description of the action
  • key (string) - key that will be processed when the keys are pressed in the menu
  • action (function optional) - handler that will be called when the key is pressed in the menu.

MenuSeparator is a table containing the following fields:

  • icon (string optional) - character used as separator. The default character is -
  • length (number optional) - number of repetitions of the separator character. The default length is 80

In order for the menu to work as expected, the handler must call action from MenuItem.

Folds

In Neovim 0.10.3+, folds are colored with the same highlight as when they are expanded. This is enabled by default to be in line with how Emacs work.

To use the old way of highlighting folds with Folded highlight group, add this to config:

lua
require('orgmode').setup({
+  ui = {
+    folds = {
+      colored = false
+    }
+  }
+})

Input

By default, Vim's built-in input() function is used for input prompts. To use Neovim's vim.ui.input() function, add this to config:

lua
require('orgmode').setup({
+  ui = {
+    input = {
+      use_vim_ui = true
+    }
+  }
+})

📝 NOTE: If you are using a plugin for vim.ui.input, make sure it supports autocompletion for better experience. snacks.nvim input module supports autocompletion.

Agenda

Use this section to customize the styling of the Agenda preview floating window (See org_agenda_preview mapping). To see available options for the preview window, check :help vim.lsp.util.open_floating_preview.Opts. Here's an example how to configure it:

lua
require('orgmode').setup({
+  ui = {
+    agenda = {
+      preview_window = {
+        wrap = false, -- This option is set by default
+        border = 'single'
+      }
+    }
+  }
+})

📝 NOTE: This preview should be used only as read only view of the headline and it's content. Modifying the file from the preview window is not supported.

+ + + + \ No newline at end of file diff --git a/contributing.html b/contributing.html new file mode 100644 index 0000000..d220016 --- /dev/null +++ b/contributing.html @@ -0,0 +1,33 @@ + + + + + + Contributing Guide | Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Contributing Guide

Thanks for wanting to help out with nvim-orgmode, we appreciate the effort!

Reporting Bugs/Features

📣 Please always make a quick search in our issue-tracker before reporting anything. If the bug/feature has already been reported, continue the conversation on the existing issue.

We distinguish between core (part of orgmode) and non-core features. The former will be prioritized. Bugs get the highest priority.

If you're reporting a core feature, please be sure to provide a link that describes it. There are several places where features could be documented, have a look at these resources. The more info you provide the better!

Documentation

If you spot something missing in our docs, don't hesitate making a PR. The wiki can be edited freely.

Development

Philosophy

We try to mimic the behavior of Emacs Orgmode as closely as possible. Variable names follow the same naming convention as in Emacs Orgmode, except that they are in snake_case instead of kebab-case.

Example: org-agenda-files in Emacs is org_agenda_files in nvim-orgmode.

Local dev

Requirements:

To set up local development, run make setup_dev. This will add a pre-commit hook that will auto format all files before committing them. You can always manually format all files with make format command

Code

If you prefer working on an issue that has been reported, please leave a comment voicing your interest.

Please document any new code you add with emmylua annotations. Feel free to add annotations/docs to any existing functions integral to your PR that are missing them.

Tests

To run tests run make test in the nvim-orgmode directory:

example
make test

To run a specific test you can set a FILE environment variable to a specific spec you want to test. Example:

example
make test FILE=./tests/plenary/api/api_spec.lua

📝 NOTE: Tests are currently not working on Windows. Test run will only verify if tree-sitter grammar can be installed, and exit with a success message.

Parser

Parsing is done via builtin treesitter parser and the tree-sitter-org grammar.

Commits

Ensure that you follow the Conventional Commits specification (e.g., feat: add new feature, fix: correct bug, docs: update documentation).

+ + + + \ No newline at end of file diff --git a/docs/.buildinfo b/docs/.buildinfo deleted file mode 100644 index 86bc2f3..0000000 --- a/docs/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 94d52713906d860f46fc35a9a963f271 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_sources/demo.rst.txt b/docs/_sources/demo.rst.txt deleted file mode 100644 index e7e014e..0000000 --- a/docs/_sources/demo.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -Demos -========== -Agenda -******************************** - -.. raw:: html - - agenda - -Org file -******************************** - -.. raw:: html - - orgfile - -Capturing and refiling -******************************** - -.. raw:: html - - capture - -Autocompletion -******************************** - -.. raw:: html - - autocomplete - diff --git a/docs/_sources/development.rst.txt b/docs/_sources/development.rst.txt deleted file mode 100644 index 2653e85..0000000 --- a/docs/_sources/development.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -Development -======================================== - -Tests -************ - -To run tests, `plenary.nvim `_ is necessary. Once installed, run: - -.. code-block:: bash - - make test - -Documentation -************* - -Vim documentation is auto generated from `DOCS.md `_ file with `md2vim `_. - -Formatting -************ -Formatting is done via `StyLua `_. To format everything run: - -.. code-block:: bash - - make format - -Parser -************ -Parsing is done via builtin tree-sitter parser and `tree-sitter-org `_ grammar. - diff --git a/docs/_sources/features.rst.txt b/docs/_sources/features.rst.txt deleted file mode 100644 index 3bc675e..0000000 --- a/docs/_sources/features.rst.txt +++ /dev/null @@ -1,94 +0,0 @@ -Features -================================ -TL;DR -***************** -* Agenda view -* Search by tags/keyword -* Clocking time -* Repeatable dates, date and time ranges -* Capturing to default notes file/destination -* Archiving (archive file or ARCHIVE tag) -* Exporting (via ``emacs``, ``pandoc`` and custom export options) -* Notifications (experimental, see `Issue #49 `_) -* Calendar popup for easier navigation and date updates -* Various org file mappings: - - * Promote/Demote - * Change TODO state - * Change dates - * Insert/Move/Refile headlines - * Change tags - * Toggle checkbox state - -* Clocking time -* Remote editing from agenda view -* Repeatable mapping via `vim-repeat `_ - -Detailed breakdown -****************************** -* Agenda prompt: - - * Agenda view (``a``): - - * Ability to show daily(``vd``)/weekly(``vw``)/monthly(``vm``)/yearly(``vy``) agenda - * Support for various date settings: - - * DEADLINE: Warning settings - example: `<2021-06-11 Fri 11:00 -1d>` - * SCHEDULED: Delay setting - example: `<2021-06-11 Fri 11:00 -2d>` - * All dates - Repeater settings: - - * Cumulate type: `<2021-06-11 Fri 11:00 +1w>` - * Catch-up type: `<2021-06-11 Fri 11:00 ++1w>` - * Restart type: `<2021-06-11 Fri 11:00 .+1w>` - - * Time ranges - example: `<2021-06-11 Fri 11:00-12:30>` - * Date ranges - example: `<2021-06-11 Fri 11:00-12:30>--<2021-06-13 Sun 22:00>` - - * Properly lists tasks according to defined dates (DEADLINE,SCHEDULED,Plain date) - * Navigate forward (``f``)/backward(``b``) or jump to specific date (``J``) - * Go to task under cursor in current window(````) or other window(````) - * Print category from ":CATEGORY:" property if defined - - * List tasks that have "TODO" state (``t``): - * Find headlines matching tag(s) (``m``): - * Search for headlines (and it's content) for a query (``s``): - * `Advanced search `_ for tags/todo kewords/properties - * Notifications (experimental, see `Issue #49 `_) - * Clocking time - -* Capture: - - * Define custom templates - * Fast capturing to default notes file via ```` - * Capturing to specific destination ``or`` - * Abort capture with ``ok`` - -* Org files - - * Clocking time - * Refile to destination/headline: ``or`` - * Increase/Decrease date under cursor: ````/```` - * Change date under cursor via calendar popup: ``cid`` - * Change headline TODO state: forward``cit`` or backward``ciT`` - * Open hyperlink or date under cursor: ``oo`` - * Toggle checkbox: ```` - * Toggle current line to headline and vice versa: ``o*`` - * Toggle folding of current headline: ```` - * Toggle folding in whole file: ```` - * Archive headline: ``o$`` - * Add archive tag: ``oA`` - * Change tags: ``ot`` - * Promote headline: ``<<`` - * Demote headline: ``>>`` - * Promote subtree: ``s`` - * Add headline/list item/checkbox: ```` - * Insert heading after current heading and it's content: ``oih`` - * Insert TODO heading after current line: ``oiT`` - * Insert TODO heading after current heading and it's content: ``oit`` - * Move headline up: ``oK`` - * Move headline down: ``oJ`` - * Highlighted code blocks (`#+BEGIN_SRC filetype`) - * Exporting (via ``emacs``, ``pandoc`` and custom export options) - -Link to detailed documentation: `DOCS `_ diff --git a/docs/_sources/getting_started.rst.txt b/docs/_sources/getting_started.rst.txt deleted file mode 100644 index a9e9b33..0000000 --- a/docs/_sources/getting_started.rst.txt +++ /dev/null @@ -1,24 +0,0 @@ -Getting started -======================================== -This chapter will show you the basics of using orgmode to organise your tasks. - -Creating TODO items -*********************************************** - -Defining and moving TODO items between states -*********************************************** - -Adding dates to TODO items -*********************************************** - -Viewing scheduled TODO items -*********************************************** - -Adding a priority to TODO items -*********************************************** - -Capturing a TODO item -*********************************************** - -Refiling a TODO item -*********************************************** diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt deleted file mode 100644 index e5a7f57..0000000 --- a/docs/_sources/index.rst.txt +++ /dev/null @@ -1,33 +0,0 @@ -.. raw:: html - -
- org-neovim-blend -
- -Orgmode.nvim -============ - -.. raw:: html - -
- License Kofi -

-

- - -Orgmode clone written in Lua for Neovim 0.7. - - -.. toctree:: - :maxdepth: 1 - - getting_started - installation - setup - features - demo - plugins - development - roadmap - thanks - diff --git a/docs/_sources/installation.rst.txt b/docs/_sources/installation.rst.txt deleted file mode 100644 index 49cd7be..0000000 --- a/docs/_sources/installation.rst.txt +++ /dev/null @@ -1,58 +0,0 @@ -Installation -============ - -Use your favourite package manager: - -* `vim-packager `_: - - -.. code-block:: lua - - packager.add('nvim-treesitter/nvim-treesitter') - packager.add('nvim-orgmode/orgmode') - -- `packer.nvim `_ - -**Recommended** - - -.. code-block:: lua - - use {'nvim-treesitter/nvim-treesitter'} - use {'nvim-orgmode/orgmode', config = function() - require('orgmode').setup{} - end - } - -**Lazy loading (Not recommended)** - -Lazy loading via ``ft`` option works, but not completely. Global mappings are not set because plugin is not initialized on startup. -Above setup has startup time of somewhere between 1 and 3 ms, so there are no many benefits in lazy loading. -If you want to do it anyway, here's the lazy load setup: - -.. code-block:: lua - - use {'nvim-treesitter/nvim-treesitter'} - use {'nvim-orgmode/orgmode', - ft = {'org'}, - config = function() - require('orgmode').setup{} - end - } - -- `vim-plug `_ - - -.. code-block:: lua - - Plug 'nvim-treesitter/nvim-treesitter' - Plug 'nvim-orgmode/orgmode' - -- `dein `_ - - -.. code-block:: vim - - call dein#add('nvim-treesitter/nvim-treesitter') - call dein#add('nvim-orgmode/orgmode') - diff --git a/docs/_sources/plugins.rst.txt b/docs/_sources/plugins.rst.txt deleted file mode 100644 index 6b2603a..0000000 --- a/docs/_sources/plugins.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -Plugins -======================================== -* `org-bullets.nvim `_ - Show org mode bullets as UTF-8 characters -* `headlines.nvim `_ - Add few highlight options for code blocks and headlines -* `sniprun `_ - For code evaluation in blocks -* `vim-table-mode `_ - For table support - -See all available plugins on `orgmode-nvim `_ - -**If you built a plugin please add "orgmode-nvim" topic to it.** - -**NOTE**: None of the Emacs Orgmode plugins will be built into orgmode.nvim. -Anything that's a separate plugin in Emacs Orgmode should be a separate plugin in here. -Point of this plugin is to provide functionality that's built into Emacs Orgmode core, -and a good foundation for external plugins. - -If you want to build a plugin, post suggestions and improvements on `Plugins infrastructure `_ -issue. - diff --git a/docs/_sources/roadmap.rst.txt b/docs/_sources/roadmap.rst.txt deleted file mode 100644 index 5ab05da..0000000 --- a/docs/_sources/roadmap.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -Roadmap -======================================== -* [X] Support searching by properties -* [ ] Improve checkbox hierarchy -* [X] Support todo keyword faces -* [X] Support clocking work time -* [X] Improve folding -* [X] Support exporting (via existing emacs tools) -* [ ] Support archiving to specific headline -* [ ] Support tables -* [ ] Support diary format dates -* [ ] Support evaluating code blocks diff --git a/docs/_sources/setup.rst.txt b/docs/_sources/setup.rst.txt deleted file mode 100644 index 265cacb..0000000 --- a/docs/_sources/setup.rst.txt +++ /dev/null @@ -1,174 +0,0 @@ -Setup -============ - - -.. code-block:: lua - - -- init.lua - - -- Load custom tree-sitter grammar for org filetype - require('orgmode').setup_ts_grammar() - - -- Tree-sitter configuration - require'nvim-treesitter.configs'.setup { - -- If TS highlights are not enabled at all, or disabled via ``disable`` prop, highlighting will fallback to default Vim syntax highlighting - highlight = { - enable = true, - disable = {'org'}, -- Remove this to use TS highlighter for some of the highlights (Experimental) - additional_vim_regex_highlighting = {'org'}, -- Required since TS highlighter doesn't support all syntax features (conceal) - }, - ensure_installed = {'org'}, -- Or run :TSUpdate org - } - - require('orgmode').setup({ - org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'}, - org_default_notes_file = '~/Dropbox/org/refile.org', - }) - -Or if you are using ``init.vim``: - -.. code-block:: vim - - " init.vim - lua << EOF - - -- Load custom tree-sitter grammar for org filetype - require('orgmode').setup_ts_grammar() - - -- Tree-sitter configuration - require'nvim-treesitter.configs'.setup { - -- If TS highlights are not enabled at all, or disabled via `disable` prop, highlighting will fallback to default Vim syntax highlighting - highlight = { - enable = true, - disable = {'org'}, -- Remove this to use TS highlighter for some of the highlights (Experimental) - additional_vim_regex_highlighting = {'org'}, -- Required since TS highlighter doesn't support all syntax features (conceal) - }, - ensure_installed = {'org'}, -- Or run :TSUpdate org - } - - require('orgmode').setup({ - org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'}, - org_default_notes_file = '~/Dropbox/org/refile.org', - }) - EOF - -* **Open agenda prompt**: ``oa`` -* **Open capture prompt**: ``oc`` -* In any orgmode buffer press ``g?`` for help - -If you are new to Orgmode, see `Getting started `_ section in Docs. - -Completion -************ - -If you use `nvim-compe `_ and want -to enable autocompletion, add this to your compe config: - - -.. code-block:: lua - - require'compe'.setup({ - source = { - orgmode = true - } - }) - -For `nvim-cmp `_, add ``orgmode`` to list of sources: - -.. code-block:: lua - - require'cmp'.setup({ - sources = { - { name = 'orgmode' } - } - }) - -For `completion.nvim `_, just add ``omni`` mode to chain complete list and add additional keyword chars: - -.. code-block:: lua - - vim.g.completion_chain_complete_list = { - org = { - { mode = 'omni'}, - }, - } - vim.cmd[[autocmd FileType org setlocal iskeyword+=:,#,+]] - -Or just use ``omnifunc`` via ```` - -Tree-sitter info -**************** -Built in tree-sitter parser is used for parsing the org files. -Highlights are experimental and partially supported. - -Advantages of tree-sitter over built in parsing/syntax: -############################################################ -* More reliable, since parsing is done with proper parsing tool -* Better highlighting (Experimental, still requires improvements) -* Future features will be easier to implement because grammar already parses some things that were not parsed before (tables, latex, etc.) -* Allows for easier hacking (custom motions that can work with TS nodes, etc.) - -Known highlighting issues and limitations -################################################ -* Performance issues. This is generally an issue in Neovim that should be resolved before 0.6 release (`neovim Issue #14762 `_, `neovim Issue #14762 `_) -* Anything that requires concealing (`org_hide_emphasis_markers `_, links concealing) is not (yet) supported in TS highlighter -* LaTex is still highlighted through syntax file - -Improvements over Vim's syntax highlighting -################################################ -* Better highlighting of certain parts (tags, deadline/schedule/closed dates) -* `Tree-sitter highlight injections `_ through ``#BEGIN_SRC filetype`` blocks -* Headline markup highlighting (`Issue #67 `_) - -Troubleshoot -############ - -- **Folding is not working** - -Make sure you are not overriding foldexpr in Org buffers with `nvim-treesitter folding `_ - -- **Indentation is not working** - -Make sure you are not overriding indentexpr in Org buffers with `nvim-treesitter indentation `_ - -- **I get** ``treesitter/query.lua`` **errors when opening agenda/capture prompt or org files** - -Make sure you are using latest changes from `tree-sitter-org `_ grammar by running ``:TSUpdate org`` and restarting the editor. - -- **Dates are not in English** - -Dates are generated with Lua native date support, and it reads your current locale when creating them. - -To use different locale you can add this to your ``init.lua``: - -.. code-block:: lua - - vim.cmd('language en_US.utf8') - -or ``init.vim``: - - -.. code-block:: vim - - language en_US.utf8 - -Just make sure you have ``en_US`` locale installed on your system. To see what you have available on the system you can -start the command ``:language`` and press ```` to autocomplete possible options. - -- **Links are not concealed** - -Links are concealed with Vim's conceal feature (see ``:help conceal``). To enable concealing, add this to your ``init.lua``: - -.. code-block:: lua - - vim.opt.conceallevel = 2 - vim.opt.concealcursor = 'nc' - -Or if you are using ``init.vim``: - - -.. code-block:: vim - - set conceallevel=2 - set concealcursor=nc - diff --git a/docs/_sources/thanks.rst.txt b/docs/_sources/thanks.rst.txt deleted file mode 100644 index cea1727..0000000 --- a/docs/_sources/thanks.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -Thanks to -======================================== -* `@dhruvasagar `_ and his `vim-dotoo `_ plugin - that got me started using orgmode. Without him this plugin would not happen. -* `@milisims `_ for writing a tree-sitter parser for org -* `vim-orgmode `_ for some parts of the code (mostly syntax) diff --git a/docs/_static/basic.css b/docs/_static/basic.css deleted file mode 100644 index bf18350..0000000 --- a/docs/_static/basic.css +++ /dev/null @@ -1,906 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 450px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dt:after { - content: ":"; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/_static/css/badge_only.css b/docs/_static/css/badge_only.css deleted file mode 100644 index e380325..0000000 --- a/docs/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb6000..0000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e23..0000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63..0000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5..0000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.eot b/docs/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca..0000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.svg b/docs/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845..0000000 --- a/docs/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_static/css/fonts/fontawesome-webfont.ttf b/docs/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2..0000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff b/docs/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a..0000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff2 b/docs/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6..0000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff b/docs/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b..0000000 Binary files a/docs/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff2 b/docs/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d80..0000000 Binary files a/docs/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold.woff b/docs/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51..0000000 Binary files a/docs/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold.woff2 b/docs/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb19504..0000000 Binary files a/docs/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff b/docs/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc..0000000 Binary files a/docs/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff2 b/docs/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37..0000000 Binary files a/docs/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal.woff b/docs/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307f..0000000 Binary files a/docs/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal.woff2 b/docs/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf9843..0000000 Binary files a/docs/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css deleted file mode 100644 index 0d9ae7e..0000000 --- a/docs/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js deleted file mode 100644 index e1bfd70..0000000 --- a/docs/_static/doctools.js +++ /dev/null @@ -1,358 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - this.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - var url = new URL(window.location); - url.searchParams.delete('highlight'); - window.history.replaceState({}, '', url); - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar : function() { - $('input[name=q]').first().focus(); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - return; - - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON') { - if (event.altKey || event.ctrlKey || event.metaKey) - return; - - if (!event.shiftKey) { - switch (event.key) { - case 'ArrowLeft': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - break; - case 'ArrowRight': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - break; - case 'Escape': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.hideSearchWords(); - return false; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case '/': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.focusSearchBar(); - return false; - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js deleted file mode 100644 index c50c86f..0000000 --- a/docs/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.2.1', - LANGUAGE: 'None', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/docs/_static/file.png b/docs/_static/file.png deleted file mode 100644 index a858a41..0000000 Binary files a/docs/_static/file.png and /dev/null differ diff --git a/docs/_static/jquery-3.5.1.js b/docs/_static/jquery-3.5.1.js deleted file mode 100644 index 5093733..0000000 --- a/docs/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Demos

-
-

Agenda

-agenda
-
-

Org file

-orgfile
-
-

Capturing and refiling

-capture
-
-

Autocompletion

-autocomplete
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/development.html b/docs/development.html deleted file mode 100644 index 6090470..0000000 --- a/docs/development.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - Development — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Development

-
-

Tests

-

To run tests, plenary.nvim is necessary. Once installed, run:

-
make test
-
-
-
-
-

Documentation

-

Vim documentation is auto generated from DOCS.md file with md2vim.

-
-
-

Formatting

-

Formatting is done via StyLua. To format everything run:

-
make format
-
-
-
-
-

Parser

-

Parsing is done via builtin tree-sitter parser and tree-sitter-org grammar.

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/features.html b/docs/features.html deleted file mode 100644 index 752ed59..0000000 --- a/docs/features.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - Features — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Features

-
-

TL;DR

-
    -
  • Agenda view

  • -
  • Search by tags/keyword

  • -
  • Clocking time

  • -
  • Repeatable dates, date and time ranges

  • -
  • Capturing to default notes file/destination

  • -
  • Archiving (archive file or ARCHIVE tag)

  • -
  • Exporting (via emacs, pandoc and custom export options)

  • -
  • Notifications (experimental, see Issue #49)

  • -
  • Calendar popup for easier navigation and date updates

  • -
  • Various org file mappings:

    -
      -
    • Promote/Demote

    • -
    • Change TODO state

    • -
    • Change dates

    • -
    • Insert/Move/Refile headlines

    • -
    • Change tags

    • -
    • Toggle checkbox state

    • -
    -
  • -
  • Clocking time

  • -
  • Remote editing from agenda view

  • -
  • Repeatable mapping via vim-repeat

  • -
-
-
-

Detailed breakdown

-
    -
  • Agenda prompt:

    -
      -
    • Agenda view (a):

      -
        -
      • Ability to show daily(vd)/weekly(vw)/monthly(vm)/yearly(vy) agenda

      • -
      • Support for various date settings:

        -
          -
        • DEADLINE: Warning settings - example: <2021-06-11 Fri 11:00 -1d>

        • -
        • SCHEDULED: Delay setting - example: <2021-06-11 Fri 11:00 -2d>

        • -
        • All dates - Repeater settings:

          -
            -
          • Cumulate type: <2021-06-11 Fri 11:00 +1w>

          • -
          • Catch-up type: <2021-06-11 Fri 11:00 ++1w>

          • -
          • Restart type: <2021-06-11 Fri 11:00 .+1w>

          • -
          -
        • -
        • Time ranges - example: <2021-06-11 Fri 11:00-12:30>

        • -
        • Date ranges - example: <2021-06-11 Fri 11:00-12:30>–<2021-06-13 Sun 22:00>

        • -
        -
      • -
      • Properly lists tasks according to defined dates (DEADLINE,SCHEDULED,Plain date)

      • -
      • Navigate forward (f)/backward(b) or jump to specific date (J)

      • -
      • Go to task under cursor in current window(<CR>) or other window(<TAB>)

      • -
      • Print category from “:CATEGORY:” property if defined

      • -
      -
    • -
    • List tasks that have “TODO” state (t):

    • -
    • Find headlines matching tag(s) (m):

    • -
    • Search for headlines (and it’s content) for a query (s):

    • -
    • Advanced search for tags/todo kewords/properties

    • -
    • Notifications (experimental, see Issue #49)

    • -
    • Clocking time

    • -
    -
  • -
  • Capture:

    -
      -
    • Define custom templates

    • -
    • Fast capturing to default notes file via <C-c>

    • -
    • Capturing to specific destination <Leader>or

    • -
    • Abort capture with <Leader>ok

    • -
    -
  • -
  • Org files

    -
      -
    • Clocking time

    • -
    • Refile to destination/headline: <Leader>or

    • -
    • Increase/Decrease date under cursor: <C-a>/<C-x>

    • -
    • Change date under cursor via calendar popup: cid

    • -
    • Change headline TODO state: forward``cit`` or backward``ciT``

    • -
    • Open hyperlink or date under cursor: <Leader>oo

    • -
    • Toggle checkbox: <C-space>

    • -
    • Toggle current line to headline and vice versa: <Leader>o*

    • -
    • Toggle folding of current headline: <TAB>

    • -
    • Toggle folding in whole file: <S-TAB>

    • -
    • Archive headline: <Leader>o$

    • -
    • Add archive tag: <Leader>oA

    • -
    • Change tags: <Leader>ot

    • -
    • Promote headline: <<

    • -
    • Demote headline: >>

    • -
    • Promote subtree: <s

    • -
    • Demote subtree: >s

    • -
    • Add headline/list item/checkbox: <Leader><CR>

    • -
    • Insert heading after current heading and it’s content: <Leader>oih

    • -
    • Insert TODO heading after current line: <Leader>oiT

    • -
    • Insert TODO heading after current heading and it’s content: <Leader>oit

    • -
    • Move headline up: <Leader>oK

    • -
    • Move headline down: <Leader>oJ

    • -
    • Highlighted code blocks (#+BEGIN_SRC filetype)

    • -
    • Exporting (via emacs, pandoc and custom export options)

    • -
    -
  • -
-

Link to detailed documentation: DOCS

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/genindex.html b/docs/genindex.html deleted file mode 100644 index b487c4e..0000000 --- a/docs/genindex.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - Index — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • »
  • -
  • Index
  • -
  • -
  • -
-
-
-
-
- - -

Index

- -
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/getting_started.html b/docs/getting_started.html deleted file mode 100644 index a6b1c25..0000000 --- a/docs/getting_started.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - Getting started — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Getting started

-

This chapter will show you the basics of using orgmode to organise your tasks.

-
-

Creating TODO items

-
-
-

Defining and moving TODO items between states

-
-
-

Adding dates to TODO items

-
-
-

Viewing scheduled TODO items

-
-
-

Adding a priority to TODO items

-
-
-

Capturing a TODO item

-
-
-

Refiling a TODO item

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index de70175..0000000 --- a/docs/index.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - Orgmode.nvim — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
- org-neovim-blend -
-

Orgmode.nvim

-
- License Kofi -

-

Orgmode clone written in Lua for Neovim 0.7.

- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/installation.html b/docs/installation.html deleted file mode 100644 index 9c1068c..0000000 --- a/docs/installation.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - Installation — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Installation

-

Use your favourite package manager:

- -
packager.add('nvim-treesitter/nvim-treesitter')
-packager.add('nvim-orgmode/orgmode')
-
-
- -

Recommended

-
use {'nvim-treesitter/nvim-treesitter'}
-use {'nvim-orgmode/orgmode', config = function()
-        require('orgmode').setup{}
-end
-}
-
-
-

Lazy loading (Not recommended)

-

Lazy loading via ft option works, but not completely. Global mappings are not set because plugin is not initialized on startup. -Above setup has startup time of somewhere between 1 and 3 ms, so there are no many benefits in lazy loading. -If you want to do it anyway, here’s the lazy load setup:

-
use {'nvim-treesitter/nvim-treesitter'}
-use {'nvim-orgmode/orgmode',
-    ft = {'org'},
-    config = function()
-            require('orgmode').setup{}
-    end
-    }
-
-
- -
Plug 'nvim-treesitter/nvim-treesitter'
-Plug 'nvim-orgmode/orgmode'
-
-
- -
call dein#add('nvim-treesitter/nvim-treesitter')
-call dein#add('nvim-orgmode/orgmode')
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv deleted file mode 100644 index 6211396..0000000 --- a/docs/objects.inv +++ /dev/null @@ -1,6 +0,0 @@ -# Sphinx inventory version 2 -# Project: Orgmode.nvim -# Version: -# The remainder of this file is compressed using zlib. -xڅMN1 F9E.JlY#Gv3gx*z{:$_ zH'~exBgz톫}ꀆLR)a -?WՙotR_/O6`2D?-z TkLjޒpNgG34+[\27!3rk۔DP͖;3.%EmJA2.h~!XdnTFiB.E  \ No newline at end of file diff --git a/docs/plugins.html b/docs/plugins.html deleted file mode 100644 index 43e7c37..0000000 --- a/docs/plugins.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - Plugins — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Plugins

- -

See all available plugins on orgmode-nvim

-

If you built a plugin please add “orgmode-nvim” topic to it.

-

NOTE: None of the Emacs Orgmode plugins will be built into orgmode.nvim. -Anything that’s a separate plugin in Emacs Orgmode should be a separate plugin in here. -Point of this plugin is to provide functionality that’s built into Emacs Orgmode core, -and a good foundation for external plugins.

-

If you want to build a plugin, post suggestions and improvements on Plugins infrastructure -issue.

-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/roadmap.html b/docs/roadmap.html deleted file mode 100644 index 639a07c..0000000 --- a/docs/roadmap.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - Roadmap — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Roadmap

-
    -
  • [X] Support searching by properties

  • -
  • [ ] Improve checkbox hierarchy

  • -
  • [X] Support todo keyword faces

  • -
  • [X] Support clocking work time

  • -
  • [X] Improve folding

  • -
  • [X] Support exporting (via existing emacs tools)

  • -
  • [ ] Support archiving to specific headline

  • -
  • [ ] Support tables

  • -
  • [ ] Support diary format dates

  • -
  • [ ] Support evaluating code blocks

  • -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/search.html b/docs/search.html deleted file mode 100644 index 40b6e2d..0000000 --- a/docs/search.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - Search — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • »
  • -
  • Search
  • -
  • -
  • -
-
-
-
-
- - - - -
- -
- -
-
- -
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/searchindex.js b/docs/searchindex.js deleted file mode 100644 index 06ff2e9..0000000 --- a/docs/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["demo","development","features","getting_started","index","installation","plugins","roadmap","setup","thanks"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["demo.rst","development.rst","features.rst","getting_started.rst","index.rst","installation.rst","plugins.rst","roadmap.rst","setup.rst","thanks.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[4,8],"00":2,"06":2,"1":5,"11":2,"12":2,"13":2,"14762":8,"1d":2,"1w":2,"2":8,"2021":2,"22":2,"2d":2,"3":5,"30":2,"49":2,"6":8,"67":8,"7":4,"8":6,"catch":2,"char":8,"default":[2,8],"do":5,"export":[2,7],"function":[5,6],"new":8,"true":8,For:[6,8],If:[5,6,8],In:8,Not:5,Or:8,To:[1,8],abil:2,abort:2,abov:5,accord:2,add:[2,5,6,8],addit:8,additional_vim_regex_highlight:8,advanc:2,after:2,agenda:[2,8],all:[2,6,8],allow:8,alreadi:8,alt:4,an:8,ani:8,anyth:[6,8],anywai:5,ar:[5,8],archiv:[2,7],auto:1,autocmd:8,autocomplet:8,avail:[6,8],b:2,backward:2,badg:4,basic:3,becaus:[5,8],befor:8,begin_src:[2,8],benefit:5,better:8,between:5,block:[2,6,7,8],brightgreen:4,buffer:8,build:6,built:6,builtin:1,bullet:6,c:[2,8],calendar:2,call:5,can:8,captur:[2,8],categori:2,certain:8,chain:8,chang:[2,8],chapter:3,charact:6,checkbox:[2,7],cid:2,cit:2,clock:[2,7],clone:4,close:8,cmd:8,cmp:8,code:[2,6,7,9],command:8,comp:8,complet:5,completion_chain_complete_list:8,conceal:8,concealcursor:8,conceallevel:8,config:[5,8],configur:8,content:2,core:6,cr:2,creat:8,cumul:2,current:[2,8],cursor:2,custom:[2,8],daili:2,date:[2,7,8],deadlin:[2,8],decreas:2,defin:2,dein:5,delai:2,demo:4,demot:2,destin:2,develop:4,dhruvasagar:9,diari:7,differ:8,disabl:8,doc:[1,2,8],document:2,doesn:8,done:[1,8],dotoo:9,down:2,dropbox:8,easier:[2,8],edit:2,editor:8,emac:[2,6,7],en_u:8,enabl:8,end:5,english:8,ensure_instal:8,eof:8,error:8,etc:8,evalu:[6,7],everyth:1,exampl:2,exist:7,experiment:[2,8],extern:6,f:2,face:7,fallback:8,fast:2,favourit:5,featur:[4,8],few:6,file:[1,2,8],filetyp:[2,8],find:2,flat:4,fold:[2,7,8],foldexpr:8,format:7,forward:2,foundat:6,fri:2,from:[1,2,8],ft:5,futur:8,g:8,gener:[1,8],get:[4,8],global:5,go:2,good:6,got:9,grammar:[1,8],ha:5,hack:8,happen:9,have:[2,8],head:2,headlin:[2,6,7,8],help:8,here:[5,6],hi:9,hierarchi:7,highlight:[2,6],him:9,http:4,hyperlink:2,i:8,img:4,implement:8,improv:[6,7],increas:2,indent:8,indentexpr:8,infrastructur:6,init:8,initi:5,inject:8,insert:2,instal:[1,4,8],io:4,iskeyword:8,issu:[2,6],item:2,j:2,jump:2,just:8,keword:2,keyword:[2,7,8],languag:8,latest:8,latex:8,lazi:5,leader:[2,8],licens:4,line:2,link:[2,8],list:[2,8],load:[5,8],local:8,lua:[4,8],m:2,make:[1,8],manag:5,mani:5,map:[2,5],markup:8,match:2,md2vim:1,md:1,me:9,milisim:9,mit:4,mode:[6,8],monthli:2,more:8,mostli:9,motion:8,move:2,ms:5,my:8,name:8,nativ:8,navig:2,nc:8,necessari:1,neovim:[4,8],node:8,none:6,note:[2,6],notif:2,nvim:[1,5,6,8],o:[2,8],oa:[2,8],oc:8,oih:2,oit:2,oj:2,ok:2,omni:8,omnifunc:8,onc:1,oo:2,open:[2,8],opt:8,option:[2,5,6,8],org:[1,2,5,6,8,9],org_agenda_fil:8,org_default_notes_fil:8,org_hide_emphasis_mark:8,organis:3,orgmod:[3,5,6,8,9],ot:2,other:2,overrid:8,packag:5,packer:5,pandoc:2,pars:1,parser:[8,9],part:[8,9],partial:8,perform:8,plain:2,pleas:6,plenari:1,plug:5,plugin:[4,5,9],point:6,popup:2,possibl:8,post:6,press:8,print:2,promot:2,prompt:[2,8],prop:8,proper:8,properli:2,properti:[2,7],provid:6,queri:[2,8],rang:2,read:8,recommend:5,refil:[2,8],releas:8,reliabl:8,remot:2,remov:8,repeat:2,requir:[5,8],resolv:8,restart:[2,8],roadmap:4,run:[1,8],s:[2,5,6],schedul:[2,8],search:[2,7],section:8,see:[2,6,8],separ:6,set:[2,5,8],setloc:8,setup:[4,5],setup_ts_grammar:8,shield:4,should:[6,8],show:[2,3,6],sinc:8,sitter:[1,9],sniprun:6,so:5,some:[8,9],somewher:5,sourc:8,space:2,specif:[2,7],squar:4,src:4,start:[4,8,9],startup:5,state:2,still:8,style:4,stylua:1,subtre:2,suggest:6,sun:2,support:[2,6,7,8],sure:8,syntax:9,system:8,t:[2,8],tab:[2,8],tabl:[6,7,8],tag:[2,8],task:[2,3],templat:2,thank:4,them:8,thi:[3,6,8,9],thing:8,through:8,time:[2,5,7],todo:[2,7],toggl:2,tool:[7,8],topic:6,tree:[1,9],treesitt:[5,8],ts:8,tsupdat:8,type:2,under:2,up:2,updat:2,us:[3,5,8,9],utf8:8,utf:6,variou:2,vd:2,versa:2,via:[1,2,5,7,8],vice:2,view:2,vim:[1,2,5,6,9],vm:2,vw:2,vy:2,want:[5,6,8],warn:2,weekli:2,were:8,what:8,when:8,whole:2,window:2,without:9,work:[5,7,8],would:9,write:9,written:4,x:[2,7,8],yearli:2,yet:8,you:[3,5,6,8],your:[3,5,8]},titles:["Demos","Development","Features","Getting started","Orgmode.nvim","Installation","Plugins","Roadmap","Setup","Thanks to"],titleterms:{ad:3,advantag:8,agenda:0,autocomplet:0,between:3,breakdown:2,built:8,captur:[0,3],complet:8,creat:3,date:3,defin:3,demo:0,detail:2,develop:1,document:1,dr:2,featur:2,file:0,format:1,get:3,highlight:8,improv:8,info:8,instal:5,issu:8,item:3,known:8,limit:8,move:3,nvim:4,org:0,orgmod:4,over:8,pars:8,parser:1,plugin:6,prioriti:3,refil:[0,3],roadmap:7,s:8,schedul:3,setup:8,sitter:8,start:3,state:3,syntax:8,test:1,thank:9,tl:2,todo:3,tree:8,troubleshoot:8,view:3,vim:8}}) \ No newline at end of file diff --git a/docs/setup.html b/docs/setup.html deleted file mode 100644 index 723bfa2..0000000 --- a/docs/setup.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - Setup — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Setup

-
-- init.lua
-
--- Load custom tree-sitter grammar for org filetype
-require('orgmode').setup_ts_grammar()
-
--- Tree-sitter configuration
-require'nvim-treesitter.configs'.setup {
-  -- If TS highlights are not enabled at all, or disabled via ``disable`` prop, highlighting will fallback to default Vim syntax highlighting
-  highlight = {
-    enable = true,
-    disable = {'org'}, -- Remove this to use TS highlighter for some of the highlights (Experimental)
-    additional_vim_regex_highlighting = {'org'}, -- Required since TS highlighter doesn't support all syntax features (conceal)
-  },
-  ensure_installed = {'org'}, -- Or run :TSUpdate org
-}
-
-require('orgmode').setup({
-  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
-  org_default_notes_file = '~/Dropbox/org/refile.org',
-})
-
-
-

Or if you are using init.vim:

-
" init.vim
-lua << EOF
-
--- Load custom tree-sitter grammar for org filetype
-require('orgmode').setup_ts_grammar()
-
--- Tree-sitter configuration
-require'nvim-treesitter.configs'.setup {
-  -- If TS highlights are not enabled at all, or disabled via `disable` prop, highlighting will fallback to default Vim syntax highlighting
-  highlight = {
-    enable = true,
-    disable = {'org'}, -- Remove this to use TS highlighter for some of the highlights (Experimental)
-    additional_vim_regex_highlighting = {'org'}, -- Required since TS highlighter doesn't support all syntax features (conceal)
-  },
-  ensure_installed = {'org'}, -- Or run :TSUpdate org
-}
-
-require('orgmode').setup({
-  org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
-  org_default_notes_file = '~/Dropbox/org/refile.org',
-})
-EOF
-
-
-
    -
  • Open agenda prompt: <Leader>oa

  • -
  • Open capture prompt: <Leader>oc

  • -
  • In any orgmode buffer press g? for help

  • -
-

If you are new to Orgmode, see Getting started section in Docs.

-
-

Completion

-

If you use nvim-compe and want -to enable autocompletion, add this to your compe config:

-
require'compe'.setup({
-  source = {
-    orgmode = true
-  }
-})
-
-
-

For nvim-cmp, add orgmode to list of sources:

-
require'cmp'.setup({
-  sources = {
-    { name = 'orgmode' }
-  }
-})
-
-
-

For completion.nvim, just add omni mode to chain complete list and add additional keyword chars:

-
vim.g.completion_chain_complete_list = {
-  org = {
-    { mode = 'omni'},
-  },
-}
-vim.cmd[[autocmd FileType org setlocal iskeyword+=:,#,+]]
-
-
-

Or just use omnifunc via <C-x><C-o>

-
-
-

Tree-sitter info

-

Built in tree-sitter parser is used for parsing the org files. -Highlights are experimental and partially supported.

-
-

Advantages of tree-sitter over built in parsing/syntax:

-
    -
  • More reliable, since parsing is done with proper parsing tool

  • -
  • Better highlighting (Experimental, still requires improvements)

  • -
  • Future features will be easier to implement because grammar already parses some things that were not parsed before (tables, latex, etc.)

  • -
  • Allows for easier hacking (custom motions that can work with TS nodes, etc.)

  • -
-
-
-

Known highlighting issues and limitations

-
    -
  • Performance issues. This is generally an issue in Neovim that should be resolved before 0.6 release (neovim Issue #14762, neovim Issue #14762)

  • -
  • Anything that requires concealing (org_hide_emphasis_markers, links concealing) is not (yet) supported in TS highlighter

  • -
  • LaTex is still highlighted through syntax file

  • -
-
-
-

Improvements over Vim’s syntax highlighting

- -
-
-

Troubleshoot

-
    -
  • Folding is not working

  • -
-

Make sure you are not overriding foldexpr in Org buffers with nvim-treesitter folding

-
    -
  • Indentation is not working

  • -
-

Make sure you are not overriding indentexpr in Org buffers with nvim-treesitter indentation

-
    -
  • I get treesitter/query.lua errors when opening agenda/capture prompt or org files

  • -
-

Make sure you are using latest changes from tree-sitter-org grammar by running :TSUpdate org and restarting the editor.

-
    -
  • Dates are not in English

  • -
-

Dates are generated with Lua native date support, and it reads your current locale when creating them.

-

To use different locale you can add this to your init.lua:

-
vim.cmd('language en_US.utf8')
-
-
-

or init.vim:

-
language en_US.utf8
-
-
-

Just make sure you have en_US locale installed on your system. To see what you have available on the system you can -start the command :language and press <TAB> to autocomplete possible options.

-
    -
  • Links are not concealed

  • -
-

Links are concealed with Vim’s conceal feature (see :help conceal). To enable concealing, add this to your init.lua:

-
vim.opt.conceallevel = 2
-vim.opt.concealcursor = 'nc'
-
-
-

Or if you are using init.vim:

-
set conceallevel=2
-set concealcursor=nc
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/thanks.html b/docs/thanks.html deleted file mode 100644 index 1fdaa7a..0000000 --- a/docs/thanks.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - Thanks to — Orgmode.nvim 0.2.1 documentation - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Thanks to

-
    -
  • @dhruvasagar and his vim-dotoo plugin -that got me started using orgmode. Without him this plugin would not happen.

  • -
  • @milisims for writing a tree-sitter parser for org

  • -
  • vim-orgmode for some parts of the code (mostly syntax)

  • -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs_rst/Makefile b/docs_rst/Makefile deleted file mode 100644 index d4bb2cb..0000000 --- a/docs_rst/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs_rst/conf.py b/docs_rst/conf.py deleted file mode 100644 index 38b9a31..0000000 --- a/docs_rst/conf.py +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- - -project = 'Orgmode.nvim' -copyright = '2022, nvim-orgmode' -author = 'nvim-orgmode' - -# The full version, including alpha/beta/rc tags -release = '0.2.1' - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx_rtd_theme', - 'sphinx.ext.githubpages', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'sphinx_rtd_theme' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] diff --git a/docs_rst/conf.py.orig b/docs_rst/conf.py.orig deleted file mode 100644 index 91bcdbe..0000000 --- a/docs_rst/conf.py.orig +++ /dev/null @@ -1,55 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- - -project = 'NVim Orgmode' -copyright = '2022, nvim-orgmode' -author = 'nvim-orgmode' - -# The full version, including alpha/beta/rc tags -release = '0.2.1' - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'alabaster' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] \ No newline at end of file diff --git a/docs_rst/demo.rst b/docs_rst/demo.rst deleted file mode 100644 index e7e014e..0000000 --- a/docs_rst/demo.rst +++ /dev/null @@ -1,30 +0,0 @@ -Demos -========== -Agenda -******************************** - -.. raw:: html - - agenda - -Org file -******************************** - -.. raw:: html - - orgfile - -Capturing and refiling -******************************** - -.. raw:: html - - capture - -Autocompletion -******************************** - -.. raw:: html - - autocomplete - diff --git a/docs_rst/development.rst b/docs_rst/development.rst deleted file mode 100644 index 2653e85..0000000 --- a/docs_rst/development.rst +++ /dev/null @@ -1,29 +0,0 @@ -Development -======================================== - -Tests -************ - -To run tests, `plenary.nvim `_ is necessary. Once installed, run: - -.. code-block:: bash - - make test - -Documentation -************* - -Vim documentation is auto generated from `DOCS.md `_ file with `md2vim `_. - -Formatting -************ -Formatting is done via `StyLua `_. To format everything run: - -.. code-block:: bash - - make format - -Parser -************ -Parsing is done via builtin tree-sitter parser and `tree-sitter-org `_ grammar. - diff --git a/docs_rst/features.rst b/docs_rst/features.rst deleted file mode 100644 index 3bc675e..0000000 --- a/docs_rst/features.rst +++ /dev/null @@ -1,94 +0,0 @@ -Features -================================ -TL;DR -***************** -* Agenda view -* Search by tags/keyword -* Clocking time -* Repeatable dates, date and time ranges -* Capturing to default notes file/destination -* Archiving (archive file or ARCHIVE tag) -* Exporting (via ``emacs``, ``pandoc`` and custom export options) -* Notifications (experimental, see `Issue #49 `_) -* Calendar popup for easier navigation and date updates -* Various org file mappings: - - * Promote/Demote - * Change TODO state - * Change dates - * Insert/Move/Refile headlines - * Change tags - * Toggle checkbox state - -* Clocking time -* Remote editing from agenda view -* Repeatable mapping via `vim-repeat `_ - -Detailed breakdown -****************************** -* Agenda prompt: - - * Agenda view (``a``): - - * Ability to show daily(``vd``)/weekly(``vw``)/monthly(``vm``)/yearly(``vy``) agenda - * Support for various date settings: - - * DEADLINE: Warning settings - example: `<2021-06-11 Fri 11:00 -1d>` - * SCHEDULED: Delay setting - example: `<2021-06-11 Fri 11:00 -2d>` - * All dates - Repeater settings: - - * Cumulate type: `<2021-06-11 Fri 11:00 +1w>` - * Catch-up type: `<2021-06-11 Fri 11:00 ++1w>` - * Restart type: `<2021-06-11 Fri 11:00 .+1w>` - - * Time ranges - example: `<2021-06-11 Fri 11:00-12:30>` - * Date ranges - example: `<2021-06-11 Fri 11:00-12:30>--<2021-06-13 Sun 22:00>` - - * Properly lists tasks according to defined dates (DEADLINE,SCHEDULED,Plain date) - * Navigate forward (``f``)/backward(``b``) or jump to specific date (``J``) - * Go to task under cursor in current window(````) or other window(````) - * Print category from ":CATEGORY:" property if defined - - * List tasks that have "TODO" state (``t``): - * Find headlines matching tag(s) (``m``): - * Search for headlines (and it's content) for a query (``s``): - * `Advanced search `_ for tags/todo kewords/properties - * Notifications (experimental, see `Issue #49 `_) - * Clocking time - -* Capture: - - * Define custom templates - * Fast capturing to default notes file via ```` - * Capturing to specific destination ``or`` - * Abort capture with ``ok`` - -* Org files - - * Clocking time - * Refile to destination/headline: ``or`` - * Increase/Decrease date under cursor: ````/```` - * Change date under cursor via calendar popup: ``cid`` - * Change headline TODO state: forward``cit`` or backward``ciT`` - * Open hyperlink or date under cursor: ``oo`` - * Toggle checkbox: ```` - * Toggle current line to headline and vice versa: ``o*`` - * Toggle folding of current headline: ```` - * Toggle folding in whole file: ```` - * Archive headline: ``o$`` - * Add archive tag: ``oA`` - * Change tags: ``ot`` - * Promote headline: ``<<`` - * Demote headline: ``>>`` - * Promote subtree: ``s`` - * Add headline/list item/checkbox: ```` - * Insert heading after current heading and it's content: ``oih`` - * Insert TODO heading after current line: ``oiT`` - * Insert TODO heading after current heading and it's content: ``oit`` - * Move headline up: ``oK`` - * Move headline down: ``oJ`` - * Highlighted code blocks (`#+BEGIN_SRC filetype`) - * Exporting (via ``emacs``, ``pandoc`` and custom export options) - -Link to detailed documentation: `DOCS `_ diff --git a/docs_rst/getting_started.rst b/docs_rst/getting_started.rst deleted file mode 100644 index a9e9b33..0000000 --- a/docs_rst/getting_started.rst +++ /dev/null @@ -1,24 +0,0 @@ -Getting started -======================================== -This chapter will show you the basics of using orgmode to organise your tasks. - -Creating TODO items -*********************************************** - -Defining and moving TODO items between states -*********************************************** - -Adding dates to TODO items -*********************************************** - -Viewing scheduled TODO items -*********************************************** - -Adding a priority to TODO items -*********************************************** - -Capturing a TODO item -*********************************************** - -Refiling a TODO item -*********************************************** diff --git a/docs_rst/index.rst b/docs_rst/index.rst deleted file mode 100644 index e5a7f57..0000000 --- a/docs_rst/index.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. raw:: html - -
- org-neovim-blend -
- -Orgmode.nvim -============ - -.. raw:: html - -
- License Kofi -

-

- - -Orgmode clone written in Lua for Neovim 0.7. - - -.. toctree:: - :maxdepth: 1 - - getting_started - installation - setup - features - demo - plugins - development - roadmap - thanks - diff --git a/docs_rst/installation.rst b/docs_rst/installation.rst deleted file mode 100644 index 49cd7be..0000000 --- a/docs_rst/installation.rst +++ /dev/null @@ -1,58 +0,0 @@ -Installation -============ - -Use your favourite package manager: - -* `vim-packager `_: - - -.. code-block:: lua - - packager.add('nvim-treesitter/nvim-treesitter') - packager.add('nvim-orgmode/orgmode') - -- `packer.nvim `_ - -**Recommended** - - -.. code-block:: lua - - use {'nvim-treesitter/nvim-treesitter'} - use {'nvim-orgmode/orgmode', config = function() - require('orgmode').setup{} - end - } - -**Lazy loading (Not recommended)** - -Lazy loading via ``ft`` option works, but not completely. Global mappings are not set because plugin is not initialized on startup. -Above setup has startup time of somewhere between 1 and 3 ms, so there are no many benefits in lazy loading. -If you want to do it anyway, here's the lazy load setup: - -.. code-block:: lua - - use {'nvim-treesitter/nvim-treesitter'} - use {'nvim-orgmode/orgmode', - ft = {'org'}, - config = function() - require('orgmode').setup{} - end - } - -- `vim-plug `_ - - -.. code-block:: lua - - Plug 'nvim-treesitter/nvim-treesitter' - Plug 'nvim-orgmode/orgmode' - -- `dein `_ - - -.. code-block:: vim - - call dein#add('nvim-treesitter/nvim-treesitter') - call dein#add('nvim-orgmode/orgmode') - diff --git a/docs_rst/make.bat b/docs_rst/make.bat deleted file mode 100644 index 32bb245..0000000 --- a/docs_rst/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "" goto help - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs_rst/plugins.rst b/docs_rst/plugins.rst deleted file mode 100644 index 6b2603a..0000000 --- a/docs_rst/plugins.rst +++ /dev/null @@ -1,19 +0,0 @@ -Plugins -======================================== -* `org-bullets.nvim `_ - Show org mode bullets as UTF-8 characters -* `headlines.nvim `_ - Add few highlight options for code blocks and headlines -* `sniprun `_ - For code evaluation in blocks -* `vim-table-mode `_ - For table support - -See all available plugins on `orgmode-nvim `_ - -**If you built a plugin please add "orgmode-nvim" topic to it.** - -**NOTE**: None of the Emacs Orgmode plugins will be built into orgmode.nvim. -Anything that's a separate plugin in Emacs Orgmode should be a separate plugin in here. -Point of this plugin is to provide functionality that's built into Emacs Orgmode core, -and a good foundation for external plugins. - -If you want to build a plugin, post suggestions and improvements on `Plugins infrastructure `_ -issue. - diff --git a/docs_rst/roadmap.rst b/docs_rst/roadmap.rst deleted file mode 100644 index 5ab05da..0000000 --- a/docs_rst/roadmap.rst +++ /dev/null @@ -1,12 +0,0 @@ -Roadmap -======================================== -* [X] Support searching by properties -* [ ] Improve checkbox hierarchy -* [X] Support todo keyword faces -* [X] Support clocking work time -* [X] Improve folding -* [X] Support exporting (via existing emacs tools) -* [ ] Support archiving to specific headline -* [ ] Support tables -* [ ] Support diary format dates -* [ ] Support evaluating code blocks diff --git a/docs_rst/setup.rst b/docs_rst/setup.rst deleted file mode 100644 index 265cacb..0000000 --- a/docs_rst/setup.rst +++ /dev/null @@ -1,174 +0,0 @@ -Setup -============ - - -.. code-block:: lua - - -- init.lua - - -- Load custom tree-sitter grammar for org filetype - require('orgmode').setup_ts_grammar() - - -- Tree-sitter configuration - require'nvim-treesitter.configs'.setup { - -- If TS highlights are not enabled at all, or disabled via ``disable`` prop, highlighting will fallback to default Vim syntax highlighting - highlight = { - enable = true, - disable = {'org'}, -- Remove this to use TS highlighter for some of the highlights (Experimental) - additional_vim_regex_highlighting = {'org'}, -- Required since TS highlighter doesn't support all syntax features (conceal) - }, - ensure_installed = {'org'}, -- Or run :TSUpdate org - } - - require('orgmode').setup({ - org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'}, - org_default_notes_file = '~/Dropbox/org/refile.org', - }) - -Or if you are using ``init.vim``: - -.. code-block:: vim - - " init.vim - lua << EOF - - -- Load custom tree-sitter grammar for org filetype - require('orgmode').setup_ts_grammar() - - -- Tree-sitter configuration - require'nvim-treesitter.configs'.setup { - -- If TS highlights are not enabled at all, or disabled via `disable` prop, highlighting will fallback to default Vim syntax highlighting - highlight = { - enable = true, - disable = {'org'}, -- Remove this to use TS highlighter for some of the highlights (Experimental) - additional_vim_regex_highlighting = {'org'}, -- Required since TS highlighter doesn't support all syntax features (conceal) - }, - ensure_installed = {'org'}, -- Or run :TSUpdate org - } - - require('orgmode').setup({ - org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'}, - org_default_notes_file = '~/Dropbox/org/refile.org', - }) - EOF - -* **Open agenda prompt**: ``oa`` -* **Open capture prompt**: ``oc`` -* In any orgmode buffer press ``g?`` for help - -If you are new to Orgmode, see `Getting started `_ section in Docs. - -Completion -************ - -If you use `nvim-compe `_ and want -to enable autocompletion, add this to your compe config: - - -.. code-block:: lua - - require'compe'.setup({ - source = { - orgmode = true - } - }) - -For `nvim-cmp `_, add ``orgmode`` to list of sources: - -.. code-block:: lua - - require'cmp'.setup({ - sources = { - { name = 'orgmode' } - } - }) - -For `completion.nvim `_, just add ``omni`` mode to chain complete list and add additional keyword chars: - -.. code-block:: lua - - vim.g.completion_chain_complete_list = { - org = { - { mode = 'omni'}, - }, - } - vim.cmd[[autocmd FileType org setlocal iskeyword+=:,#,+]] - -Or just use ``omnifunc`` via ```` - -Tree-sitter info -**************** -Built in tree-sitter parser is used for parsing the org files. -Highlights are experimental and partially supported. - -Advantages of tree-sitter over built in parsing/syntax: -############################################################ -* More reliable, since parsing is done with proper parsing tool -* Better highlighting (Experimental, still requires improvements) -* Future features will be easier to implement because grammar already parses some things that were not parsed before (tables, latex, etc.) -* Allows for easier hacking (custom motions that can work with TS nodes, etc.) - -Known highlighting issues and limitations -################################################ -* Performance issues. This is generally an issue in Neovim that should be resolved before 0.6 release (`neovim Issue #14762 `_, `neovim Issue #14762 `_) -* Anything that requires concealing (`org_hide_emphasis_markers `_, links concealing) is not (yet) supported in TS highlighter -* LaTex is still highlighted through syntax file - -Improvements over Vim's syntax highlighting -################################################ -* Better highlighting of certain parts (tags, deadline/schedule/closed dates) -* `Tree-sitter highlight injections `_ through ``#BEGIN_SRC filetype`` blocks -* Headline markup highlighting (`Issue #67 `_) - -Troubleshoot -############ - -- **Folding is not working** - -Make sure you are not overriding foldexpr in Org buffers with `nvim-treesitter folding `_ - -- **Indentation is not working** - -Make sure you are not overriding indentexpr in Org buffers with `nvim-treesitter indentation `_ - -- **I get** ``treesitter/query.lua`` **errors when opening agenda/capture prompt or org files** - -Make sure you are using latest changes from `tree-sitter-org `_ grammar by running ``:TSUpdate org`` and restarting the editor. - -- **Dates are not in English** - -Dates are generated with Lua native date support, and it reads your current locale when creating them. - -To use different locale you can add this to your ``init.lua``: - -.. code-block:: lua - - vim.cmd('language en_US.utf8') - -or ``init.vim``: - - -.. code-block:: vim - - language en_US.utf8 - -Just make sure you have ``en_US`` locale installed on your system. To see what you have available on the system you can -start the command ``:language`` and press ```` to autocomplete possible options. - -- **Links are not concealed** - -Links are concealed with Vim's conceal feature (see ``:help conceal``). To enable concealing, add this to your ``init.lua``: - -.. code-block:: lua - - vim.opt.conceallevel = 2 - vim.opt.concealcursor = 'nc' - -Or if you are using ``init.vim``: - - -.. code-block:: vim - - set conceallevel=2 - set concealcursor=nc - diff --git a/docs_rst/thanks.rst b/docs_rst/thanks.rst deleted file mode 100644 index cea1727..0000000 --- a/docs_rst/thanks.rst +++ /dev/null @@ -1,6 +0,0 @@ -Thanks to -======================================== -* `@dhruvasagar `_ and his `vim-dotoo `_ plugin - that got me started using orgmode. Without him this plugin would not happen. -* `@milisims `_ for writing a tree-sitter parser for org -* `vim-orgmode `_ for some parts of the code (mostly syntax) diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..781e073 Binary files /dev/null and b/favicon.ico differ diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 0000000..d383ae9 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"changelog.md":"rKswCPZz","configuration.md":"Bvg07Uqv","contributing.md":"C1oiFVnw","index.md":"CheBSf2V","installation.md":"Bh1GqFmB","plugins.md":"Du11dEkP","troubleshoot.md":"C2gpd73j","tutorial.md":"Dp6yyLGk"} diff --git a/index.html b/index.html new file mode 100644 index 0000000..94523bb --- /dev/null +++ b/index.html @@ -0,0 +1,43 @@ + + + + + + Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Nvim Orgmode

Nvim orgmode is a clone of Emacs Orgmode for Neovim 0.11.0+. It aims to be a feature-complete implementation of Orgmode features in Neovim.

Online version of this documentation is available at https://nvim-orgmode.github.io.

To view this documentation offline in Neovim, run :Org help. More info in Globals and commands section.

Quick start

  • Install with lazy.nvim:

    lua
    {
    +  'nvim-orgmode/orgmode',
    +  event = 'VeryLazy',
    +  config = function()
    +    -- Setup orgmode
    +    require('orgmode').setup({
    +      org_agenda_files = '~/orgfiles/**/*',
    +      org_default_notes_file = '~/orgfiles/refile.org',
    +    })
    +  end,
    +}
  • Capture your first note with <leader>oc

  • Open up the prompt for agenda with <leader>oa

For more details about the installation and usage, check Installation page.

To see all configuration options, check Configuration page.

Getting started with orgmode

To get a basic idea how Orgmode works, check our hands-on tutorial.

You can also check this screencast from @dhruvasagar that demonstrates how the similar Orgmode clone vim-dotoo works.

https://www.youtube.com/watch?v=nsv33iOnH34

API docs

Nvim-orgmode exposes a Lua API that can be used to interact with the orgmode. To view it, check orgmode_api.txt or do :h OrgApi in Neovim.

Globals and commands

There are 2 additional ways to interact with Orgmode:

  1. Through the :Org command
  2. Through Org Lua global variable

List of available actions:

  • :Org help - Open this documentation in new tab, set working directory to the docs folder for the tab to allow browsing
  • :Org helpgrep - Open search agenda view that allows searching through the documentation
  • :Org agenda {type?} - Open agenda view by the shortcut, for example :Org agenda M will open tags_todo view. When type is omitted, it opens up Agenda view.
  • :Org capture {type?} - Open capture template by the shortcut, for example :Org capture t. When type is omitted, it opens up Capture prompt.
  • :Org install_treesitter_grammar - Install the treesitter grammar for Orgmode. If installed, prompt to reinstall. Grammar is installed automatically on first run, but this is useful in case when there are issues with the grammar.
  • :Org store_link - Store link to the headline under cursor. Works in both agenda and org files.
  • :Org indent_mode - Toggle virtual indent mode in the current buffer. See osg_startup_indented for additional info.

All of the commands above can be executed through the global Lua Org variable. Examples:

  • Org.help()
  • Org.helpgrep()
  • Org.install_treesitter_grammar()
  • Org.store_link()
  • Org.indent_mode()
  • Org.agenda() - Opens agenda prompt
  • Org.agenda.m() - Opens tags view
  • Org.capture() - Opens capture prompt
  • Org.capture.t() - Opens capture template for t shortcut
+ + + + \ No newline at end of file diff --git a/installation.html b/installation.html new file mode 100644 index 0000000..085116f --- /dev/null +++ b/installation.html @@ -0,0 +1,66 @@ + + + + + + Installation | Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Installation

Installation methods

Orgmode can be installed with any package manager. Here are few examples:

  1. lazy.nvim (Recommended)

    lua
    return {
    +  'nvim-orgmode/orgmode',
    +  event = 'VeryLazy',
    +  config = function()
    +    require('orgmode').setup({
    +      org_agenda_files = '~/orgfiles/**/*',
    +      org_default_notes_file = '~/orgfiles/refile.org',
    +    })
    +  end,
    +}
  2. pckr.nvim

    lua
    require('pckr').add({
    +  {
    +   'nvim-orgmode/orgmode',
    +     config = function()
    +       require('orgmode').setup({
    +         org_agenda_files = '~/orgfiles/**/*',
    +         org_default_notes_file = '~/orgfiles/refile.org',
    +       })
    +     end
    +  }
    +})
  3. vim-plug

    vim
    Plug 'nvim-orgmode/orgmode'
    +
    +lua << EOF
    +require('orgmode').setup({
    +  org_agenda_files = '~/orgfiles/**/*',
    +  org_default_notes_file = '~/orgfiles/refile.org',
    +})
    +EOF
  4. dein.vim

    vim
    call dein#add('nvim-orgmode/orgmode')
    +
    + lua << EOF
    + require('orgmode').setup({
    +   org_agenda_files = '~/orgfiles/**/*',
    +   org_default_notes_file = '~/orgfiles/refile.org',
    + })
    + EOF
+ + + + \ No newline at end of file diff --git a/nvim-orgmode.svg b/nvim-orgmode.svg new file mode 100644 index 0000000..0594317 --- /dev/null +++ b/nvim-orgmode.svg @@ -0,0 +1,122 @@ + + + neovim-mark@2x + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + + neovim-mark@2x + + + + diff --git a/plugins.html b/plugins.html new file mode 100644 index 0000000..495173b --- /dev/null +++ b/plugins.html @@ -0,0 +1,108 @@ + + + + + + Plugins | Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Plugins

📝 NOTE: If you create a plugin for orgmode, make sure to tag it with orgmode-nvim on github and submit an issue/PR to add it to this list.

Orgmode supports various plugins to extend its functionality or make it more pretty and user friendly:

Extend orgmode

org-super-agenda.nvim

Link: org-super-agenda.nvim

This is the port of Emacs org-super-agenda.

org-roam.nvim

Link: org-roam.nvim

This is the port of Emacs org-roam.

sniprun

Link: sniprun

Plugin for code block evaluation.

telescope-orgmode.nvim

Link: telescope-orgmode.nvimTelescope extension for orgmode that adds fuzzy finding of orgmode files, headlines, etc.

Completion plugins

blink.cmp

Link: blink.cmp

Add the orgmode provider and enable it for org filetype.

lua
require('blink.cmp').setup({
+  sources = {
+    per_filetype = {
+      org = {'orgmode'}
+    },
+    providers = {
+      orgmode = {
+        name = 'Orgmode',
+        module = 'orgmode.org.autocompletion.blink',
+        fallbacks = { 'buffer' },
+      },
+    },
+  },
+})

nvim-cmp

Link: nvim-cmp

Add the orgmode source to nvim-cmp sources list.

lua
require('cmp').setup({
+  sources = {
+    { name = 'orgmode' }
+  }
+})

RLDX.nvim

Link: RLDX.nvim

  1. Add RLDX.nvim plugin to Neovim.
  2. Add the cmp_rolodex source to nvim-cmp sources list.
lua
require('cmp').setup({
+  sources = {
+    { name = 'cmp_rolodex' }
+  }
+})

Aestehtics

org-bullets.nvim

Link: org-bullets.nvim Port of Emacs org-bullets.

Run after the orgmode setup.

lua
-- Your orgmode setup
+require('orgmode').setup()
+
+--Setup org-bullets
+require('org-bullets').setup()

headlines.nvim

Link: headlines.nvim

Plugin that adds some additional highlights to headlines.

lua
-- Your orgmode setup
+require('orgmode').setup()
+
+--Setup headlines.nvim
+require("headlines").setup()

org-modern.nvim

Link: org-modern.nvim

Modern looking agenda prompt menu.

lua
local Menu = require("org-modern.menu")
+
+require("orgmode").setup({
+  ui = {
+    menu = {
+      handler = function(data)
+        Menu:new():open(data)
+      end,
+    },
+  },
+})

Other

To view all plugins that are tagged for nvim-orgmode, visit orgmode-nvim github tag.

📝 NOTE: If you create a plugin for orgmode, make sure to tag it with orgmode-nvim on github and submit an issue/PR to add it to this list.

Example configuration

Example configuration with few of these plugins using lazy.nvim:

lua
{
+  'nvim-orgmode/orgmode',
+  dependencies = {
+    'nvim-telescope/telescope.nvim',
+    'nvim-orgmode/telescope-orgmode.nvim',
+    'nvim-orgmode/org-bullets.nvim',
+    'Saghen/blink.cmp'
+  },
+  event = 'VeryLazy',
+  config = function()
+    require('orgmode').setup({
+      org_agenda_files = '~/orgfiles/**/*',
+      org_default_notes_file = '~/orgfiles/refile.org',
+    })
+    require('org-bullets').setup()
+    require('blink.cmp').setup({
+      sources = {
+        per_filetype = {
+          org = {'orgmode'}
+        },
+        providers = {
+          orgmode = {
+            name = 'Orgmode',
+            module = 'orgmode.org.autocompletion.blink',
+            fallbacks = { 'buffer' },
+          },
+        },
+      },
+    })
+
+    require('telescope').setup()
+    require('telescope').load_extension('orgmode')
+    vim.keymap.set('n', '<leader>r', require('telescope').extensions.orgmode.refile_heading)
+    vim.keymap.set('n', '<leader>fh', require('telescope').extensions.orgmode.search_headings)
+    vim.keymap.set('n', '<leader>li', require('telescope').extensions.orgmode.insert_link)
+  end,
+}
+ + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..202dc09 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://nvim-orgmode.github.io/changeloghttps://nvim-orgmode.github.io/configurationhttps://nvim-orgmode.github.io/contributinghttps://nvim-orgmode.github.io/https://nvim-orgmode.github.io/installationhttps://nvim-orgmode.github.io/pluginshttps://nvim-orgmode.github.io/troubleshoothttps://nvim-orgmode.github.io/tutorial \ No newline at end of file diff --git a/troubleshoot.html b/troubleshoot.html new file mode 100644 index 0000000..9a29e10 --- /dev/null +++ b/troubleshoot.html @@ -0,0 +1,35 @@ + + + + + + Troubleshooting | Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Troubleshooting

💡 TIP: Run :checkhealth orgmode to check if Orgmode is correctly installed and configured.

Indentation is not working

Make sure you are not overriding indentexpr in Org buffers with nvim-treesitter indentation

I get treesitter/query.lua errors when opening agenda/capture prompt or org files

Tree-sitter parser might not be installed. Try running :Org install_treesitter_grammar to reinstall it.

I get .../orgmode/parser/org.so is not a valid Win32 application on Windows

This issue can happen due to wrong C compiler being used for building the parser. By default, first one available from this list is chosen: cc, gcc, clang, cl, zig If you want to use a specific parser, you can override the compilers list before calling the setup() like this:

lua
require('orgmode.utils.treesitter.install').compilers = { 'clang' }
+require('orgmode').setup()

After that, restart Neovim and run :Org install_treesitter_grammar to reinstall the parser.

nvim-treesitter mentions the similar issue as part of their Windows troubleshooting section.

Dates are not in English

Dates are generated with Lua native date support, and it reads your current locale when creating them.


To use different locale you can add this to your init.lua:

lua
vim.cmd('language en_US.utf8')

Just make sure you have en_US locale installed on your system. To see what you have available on the system you can start the command :language and press <TAB> to autocomplete possible options.

Chinese characters are not displayed correctly in agenda

In case you use chinese characters in your Neovim, and characters appear as encoded, try setting the language to zh_CN.UTF-8 with the same command as above:

lua
vim.cmd('language zh_CN.utf8')

See related issue: https://github.com/nvim-orgmode/orgmode/issues/879

Links are concealed with Vim's conceal feature (see :help conceal). To enable concealing, add this to your init.lua:

lua
vim.opt.conceallevel = 2
+vim.opt.concealcursor = 'nc'

Jumping to file path is not working for paths with forward slash

If you are using Windows, paths are by default written with backslashes. To use forward slashes, you must enable shellslash option (see :help shellslash).

lua
vim.opt.shellslash = true

More info on issue #281

+ + + + \ No newline at end of file diff --git a/tutorial.html b/tutorial.html new file mode 100644 index 0000000..68eba2e --- /dev/null +++ b/tutorial.html @@ -0,0 +1,81 @@ + + + + + + Overview | Nvim Orgmode + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Overview

Org-mode is a flexible note-taking system that was originally created for Emacs. It has gained wide-spread acclaim (this file itself is an Org-mode file, which is supported by GitHub wikis) and was eventually ported to Neovim.

  1. File Syntax
  2. Basic Customization
  3. Agenda
  4. Captures
  5. Archiving
  6. Exporting
  7. Further Resources

To get the hang of it, we will create an org file in which we will keep all the repositories we want to check out in the future. First, let's create an empty file called repos.org.

File Syntax

Org files often start with meta-information for the title and the author:

#+title: Repositories
+#+author: <Your Name>
+

These directives are not necessary but may give others (including you in the future!) a gist what this file is about. There are many more directives detailed at [TODO: add this to the docs]

To create a list of repositories, we start a new line with a dash, followed by the repo name we'd like to remember:

- Org Bullets
+

Congratulations, you created your first list! 🎉 From here, you can easily add new list items by pressing <Leader><Enter>, the so-called org meta return. It has different effects, depending on the current position of the cursor. If it's on a list item, it will add another one. We will discuss other uses later on. [TODO: actually do that]

- Org Bullets
+- vim-table-mode
+

Our list is already functional, but it's only scratching the surface of what Org-mode can do. Let's look at how org files are structured using headings.

Headings

Any line starting with one or more asterisks (*) but without any preceding whitespace is a heading (also called headline). Let's change our list items to 1st-level headings by replacing the dashes with asterisks:

* Org Bullets
+* Vim table-mode
+

The number of asterisks denotes the level of the heading: the more asterisks, the deeper the level. That is how we achieve nested structures in our org files.

* Org Bullets
+** Synopsis
+* Vim table-mode
+

The content within a heading can be free form text, include links, be a list, or any combination thereof. Let's add a short description:

* Org Bullets
+** Synopsis
+   This plugin is a clone of org-bullets. It replaces the asterisks in org
+   syntax with unicode characters.
+* Vim table-mode
+

The full syntax for a headline is

STARS KEYWORD PRIORITY TITLE TAGS
+*     TODO    [#A]     foo   :bar:baz:
+
  • KEYWORD, if present, turns the heading into a TODO item. By default this can be TODO or DONE (see the Customization section to change this).
  • PRIORITY sets a priority level to be used in the Agenda.
  • TITLE is the main body of the heading.
  • TAGS is a colon surrounded and delimited list of tags used in searching in the Agenda.

Headings (usually with a KEYWORD) can also have deadlines, and/or be scheduled with timestamps (e.g. <2022-12-31>) [TODO: explain the difference between deadlines and scheduled headings]. Thus we could enhance our list of repos like so:

org
* org-bullets.nvim                                                      :org:
+** Synopsis
+   This plugin is a clone of org-bullets. It replaces the asterisks in org
+   syntax with unicode characters.
+* vim-table-mode                                                        :org:
+** TODO Synopsis
+   SCHEDULED: <YYYY-MM-DD>
+* plenary                                                               :lua:
+** TODO [#A] Synopsis
+   DEADLINE: <YYYY-MM-DD>

One final aspect of the org file syntax are links. Links are of the form [[link][description]], where link can be a

  • URL (http://, https://)
  • path to a file (file:/path/to/org/file)
  • target (any text surrounded by << and >>). If the target is in a different file the format is ‘file:~/path/to/org/file.org::My Target’
  • headline within the same file
  • headline with a custom id (#your-custom-id)

In order to easily go to the repositories we found online, let's link to their actual website:

org
* [[https://github.com/akinsho/org-bullets.nvim][org-bullets.nvim]]     :org:
+** Synopsis
+   This plugin is a clone of org-bullets. It replaces the asterisks in org
+   syntax with unicode characters.
+* [[https://github.com/dhruvasagar/vim-table-mode][vim-table-mode]]     :org:
+** TODO Synopsis
+   SCHEDULED: <YYYY-MM-DD>
+* [[https://github.com/nvim-lua/plenary.nvim][plenary]]                 :lua:
+** TODO [#A] Synopsis
+   DEADLINE: <YYYY-MM-DD>

Basic Customization

A first customization of orgmode would look like:

lua
-- init.lua
+local org = require('orgmode')
+
+org.setup_ts_grammar()
+org.setup({
+  org_agenda_files = {'~/path/to/agenda/file/*.org'},
+  org_default_notes_file = '~/path/to/default/capture/file.org',
+})

with all customization options going in the org.setup({}).

All available options are detailed here, including setting new keybindings.

Agenda

The org agenda is used to get an overview of all your different org files. Pressing <Leader>oa gives you an overview of the various specialized views into the agenda that are available. From each view you can press g? to see all the available key mappings. The most important ones are:

  • t => change the TODO state of a heading
  • <Enter> => open heading in current (agenda-)window
  • <TAB> => open heading in another window

Captures

To quickly save thoughts, ideas or other things that come up regularly in your day without interrupting your current task, Org-mode offers you so-called captures. They can conveniently opened in any Vim buffer with <Leader>oc. Here we are presented with a list of availabe capture templates.

To aid us in our endeavour of saving interesting repos, let's create a custom capture that saves us from manually adding them to the repos.org file. We add the following in our call to org.setup():

lua
org_capture_templates = {
+  r = {
+      description = "Repo",
+      template = "* [[%x][%(return string.match('%x', '([^/]+)$'))]]%?",
+      target = "~/org/repos.org",
+  }
+}

After restarting Vim you should be able to select the Repo capture-template with r when you initiate a capture. If you have the link to the repo in you clipboard, it will be inserted into the link correctly. See the docs about the possible ways to configure your templates.

Archiving

When we no longer need certain parts of our org files, they can be archived. Let's say we are done with checking out the org-bullets repo, so we archive it by pressing <Leader>o$ while on the heading. This will also archive any child headings. The default location for archived headings is <name-of-current-org-file>.org_archive, which can be changed with the org_archive_location option.

Exporting

In case you want to preview, you can export your .org file to e.g., html with pandoc, see the docs.

Further Resources

Org-mode is has many more features than the tiny subset outlined here. Have a look around the official manual if you are interested in any particular topic. But please keep in mind, that this is a work-in-progress port for Neovim and not the original source for Emacs Org-mode. If you find any features you would like to see here, feel free to open an issue or (even better) get your hands dirty and create a pull request 😉

+ + + + \ No newline at end of file diff --git a/vp-icons.css b/vp-icons.css new file mode 100644 index 0000000..ddc5bd8 --- /dev/null +++ b/vp-icons.css @@ -0,0 +1 @@ +.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")} \ No newline at end of file