diff --git a/about.html b/about.html index fadbf404..f8ae731b 100644 --- a/about.html +++ b/about.html @@ -14,7 +14,7 @@

About Us

MarkBind is a project based in National University of Singapore, School of Computing, and is funded by an education grant from NUS Center for Development of Teaching and Learning.

You can email us at markbind at comp.nus.edu.sg

Interested in contributing to MarkBind? Visit the MarkBind project on GitHub.

Contributors ✨

Mentors:

Dev Team:

Thanks goes to these wonderful people (emoji key):


Past Members:

+

About Us

MarkBind is a project based in National University of Singapore, School of Computing, and is funded by an education grant from NUS Center for Development of Teaching and Learning.

You can email us at markbind at comp.nus.edu.sg

Interested in contributing to MarkBind? Visit the MarkBind project on GitHub.

Contributors ✨

Mentors:

Dev Team:

Thanks goes to these wonderful people (emoji key):


Past Members:

diff --git a/about.page-vue-render.js b/about.page-vue-render.js index 87dfd0ec..a98b0419 100644 --- a/about.page-vue-render.js +++ b/about.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{staticClass:"display-3",attrs:{"id":"about-us"}},[_c('span',[_c('strong',[_v("About Us")])]),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#about-us","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_c('span',{staticClass:"lead"},[_v("MarkBind is a project "),_c('strong',[_v("based in "),_c('a',{attrs:{"href":"http://www.comp.nus.edu.sg/"}},[_v("National University of Singapore, School of Computing")])]),_v(", and is funded by an education grant from "),_c('a',{attrs:{"href":"https://nus.edu.sg/cdtl"}},[_v("NUS Center for Development of Teaching and Learning")]),_v(".")])]),_v(" "),_c('p',[_c('span',{staticClass:"glyphicon glyphicon-send",attrs:{"aria-hidden":"true"}}),_v(" You can "),_c('strong',[_v("email us")]),_v(" at "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("markbind")]),_v(" at "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("comp.nus.edu.sg")])]),_v(" "),_c('p',[_c('span',{staticClass:"glyphicon glyphicon-console",attrs:{"aria-hidden":"true"}}),_v(" Interested in "),_c('strong',[_v("contributing to MarkBind")]),_v("? Visit the "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind"}},[_v("MarkBind project on GitHub")]),_v(".")]),_v(" "),_c('h2',{attrs:{"id":"contributors"}},[_v("Contributors ✨"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#contributors","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_c('strong',[_v("Mentors")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_c('a',{attrs:{"href":"https://www.comp.nus.edu.sg/~damithch/"}},[_c('strong',[_v("Damith C. Rajapakse")])]),_v(": "),_c('em',[_v("Project Mentor")]),_v(" since Aug 2016")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/ang-zeyu"}},[_c('strong',[_v("Ang Ze Yu")])]),_v(": "),_c('em',[_v("Project Mentor")]),_v(" since Jun 2022, "),_c('em',[_v("Team Lead")]),_v(" for Sep 2020 - May 2022")])]),_v(" "),_c('p',[_c('strong',[_v("Dev Team")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_c('a',{attrs:{"href":"https://www.github.com/jonahtanjz"}},[_c('strong',[_v("Jonah Tan Jun Zi")])]),_v(": "),_c('strong',[_c('em',[_v("Team Lead")])]),_v(" since Jun 2022, "),_c('em',[_v("Member")]),_v(" for Jan 2021 - May 2022")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/ryoarmanda"}},[_c('strong',[_v("Ryo Chandra Putra Aramanda")])]),_v(": "),_c('strong',[_c('em',[_v("Team Lead")])]),_v(" since Jun 2022, "),_c('em',[_v("Member")]),_v(" for Aug 2020 - May 2022")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/raysonkoh"}},[_c('strong',[_v("Koh Rayson")])]),_v(": "),_c('em',[_v("Senior Dev")]),_v(" since Apr 2021, "),_c('em',[_v("Member")]),_v(" since Jan 2021")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/wxwxwxwx9"}},[_c('strong',[_v("Ong Wei Xiang")])]),_v(": "),_c('em',[_v("Senior Dev")]),_v(" since Apr 2021, "),_c('em',[_v("Member")]),_v(" since Aug 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/kaixin-hc"}},[_c('strong',[_v("Hannah Chia Kai Xin")])]),_v(": "),_c('em',[_v("Senior Dev")]),_v(" since Apr 2022, "),_c('em',[_v("Member")]),_v(" since Jan 2022")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/jovyntls"}},[_c('strong',[_v("Jovyn Tan Li Shyan")])]),_v(": "),_c('em',[_v("Senior Dev")]),_v(" since Apr 2022, "),_c('em',[_v("Member")]),_v(" since Jan 2022")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/tlylt"}},[_c('strong',[_v("Liu Yongliang")])]),_v(": "),_c('em',[_v("Senior Dev")]),_v(" since Apr 2022, "),_c('em',[_v("Member")]),_v(" since Aug 2021")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/ong6"}},[_c('strong',[_v("Ong Jun Xiong")])]),_v(": "),_c('em',[_v("Senior Dev")]),_v(" since Apr 2022, "),_c('em',[_v("Member")]),_v(" since Aug 2021")])]),_v(" "),_c('p',[_v("Thanks goes to these wonderful people ("),_c('a',{attrs:{"href":"https://allcontributors.org/docs/en/emoji-key"}},[_v("emoji key")]),_v("):")]),_v(" "),_c('div',{staticClass:"table-responsive"},[_c('table',[_c('tbody',[_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://www.yamgent.com/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/3168908?v=4?s=100","width":"100px;","alt":"Tan Wang Leng"}}),_c('br'),_c('sub',[_c('b',[_v("Tan Wang Leng")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=yamgent","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/ang-zeyu"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/3306138?v=4?s=100","width":"100px;","alt":"Ang Ze Yu"}}),_c('br'),_c('sub',[_c('b',[_v("Ang Ze Yu")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=ang-zeyu","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"#projectManagement-ang-zeyu","title":"Project Management"}},[_v("📆")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/Gisonrg"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/4332224?v=4?s=100","width":"100px;","alt":"Jason Jiang"}}),_c('br'),_c('sub',[_c('b',[_v("Jason Jiang")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Gisonrg","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/Chng-Zhi-Xuan"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/31084833?v=4?s=100","width":"100px;","alt":"Chng Zhi Xuan"}}),_c('br'),_c('sub',[_c('b',[_v("Chng Zhi Xuan")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Chng-Zhi-Xuan","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://linkedin.com/in/aaronlah/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/14091939?v=4?s=100","width":"100px;","alt":"Aaron Chong"}}),_c('br'),_c('sub',[_c('b',[_v("Aaron Chong")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=acjh","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/jamos-tay"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/19278089?v=4?s=100","width":"100px;","alt":"Jamos Tay"}}),_c('br'),_c('sub',[_c('b',[_v("Jamos Tay")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=jamos-tay","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://nicholaschuayunzhi.github.io/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/22221132?v=4?s=100","width":"100px;","alt":"Nicholas Chua"}}),_c('br'),_c('sub',[_c('b',[_v("Nicholas Chua")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=nicholaschuayunzhi","title":"Code"}},[_v("💻")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://www.beyondthesprawl.com/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/1782590?v=4?s=100","width":"100px;","alt":"Tan Zhen Yong"}}),_c('br'),_c('sub',[_c('b',[_v("Tan Zhen Yong")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Xenonym","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/rachx"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/16644412?v=4?s=100","width":"100px;","alt":"Rachael Sim"}}),_c('br'),_c('sub',[_c('b',[_v("Rachael Sim")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=rachx","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/wxwxwxwx9"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/37920115?v=4?s=100","width":"100px;","alt":"Ong Wei Xiang"}}),_c('br'),_c('sub',[_c('b',[_v("Ong Wei Xiang")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=wxwxwxwx9","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/danielbrzn"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/251231?v=4?s=100","width":"100px;","alt":"Daniel Berzin Chua"}}),_c('br'),_c('sub',[_c('b',[_v("Daniel Berzin Chua")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=danielbrzn","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/openorclose"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/3646725?v=4?s=100","width":"100px;","alt":"Daryl Tan"}}),_c('br'),_c('sub',[_c('b',[_v("Daryl Tan")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=openorclose","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"http://www.comp.nus.edu.sg/~damithch"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/1673303?v=4?s=100","width":"100px;","alt":"Damith C. Rajapakse"}}),_c('br'),_c('sub',[_c('b',[_v("Damith C. Rajapakse")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=damithc","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"#mentoring-damithc","title":"Mentoring"}},[_v("🧑‍🏫")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/jonahtanjz"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/47470981?v=4?s=100","width":"100px;","alt":"Jonah Tan"}}),_c('br'),_c('sub',[_c('b',[_v("Jonah Tan")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=jonahtanjz","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/pulls?q=is%3Apr+reviewed-by%3Ajonahtanjz","title":"Reviewed Pull Requests"}},[_v("👀")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/nusjzx"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/24241939?v=4?s=100","width":"100px;","alt":"nusjzx"}}),_c('br'),_c('sub',[_c('b',[_v("nusjzx")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=nusjzx","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/alyip98"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/2277141?v=4?s=100","width":"100px;","alt":"Alfred Yip"}}),_c('br'),_c('sub',[_c('b',[_v("Alfred Yip")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=alyip98","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/ryoarmanda"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/24468110?v=4?s=100","width":"100px;","alt":"Ryo Armanda"}}),_c('br'),_c('sub',[_c('b',[_v("Ryo Armanda")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=ryoarmanda","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/pulls?q=is%3Apr+reviewed-by%3Aryoarmanda","title":"Reviewed Pull Requests"}},[_v("👀")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/le0tan"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/28982486?v=4?s=100","width":"100px;","alt":"Tan Yuanhong"}}),_c('br'),_c('sub',[_c('b',[_v("Tan Yuanhong")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=le0tan","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://sijie123.com/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/631938?v=4?s=100","width":"100px;","alt":"Si Jie"}}),_c('br'),_c('sub',[_c('b',[_v("Si Jie")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=sijie123","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/yash-chowdhary"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/21968718?v=4?s=100","width":"100px;","alt":"Yash Chowdhary"}}),_c('br'),_c('sub',[_c('b',[_v("Yash Chowdhary")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=yash-chowdhary","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://www.linkedin.com/in/luyangkenneth/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/9073504?v=4?s=100","width":"100px;","alt":"Kenneth Lu"}}),_c('br'),_c('sub',[_c('b',[_v("Kenneth Lu")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=luyangkenneth","title":"Code"}},[_v("💻")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://raysonkoh.com/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/16506539?v=4?s=100","width":"100px;","alt":"Rayson Koh"}}),_c('br'),_c('sub',[_c('b',[_v("Rayson Koh")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=raysonkoh","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/crphang"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/4986717?v=4?s=100","width":"100px;","alt":"Phang Chun Rong"}}),_c('br'),_c('sub',[_c('b',[_v("Phang Chun Rong")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=crphang","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/nbriannl"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/27397021?v=4?s=100","width":"100px;","alt":"nbriannl"}}),_c('br'),_c('sub',[_c('b',[_v("nbriannl")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=nbriannl","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/Tejas2805"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/35946746?v=4?s=100","width":"100px;","alt":"Tejas Bhuwania"}}),_c('br'),_c('sub',[_c('b',[_v("Tejas Bhuwania")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Tejas2805","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/marvinchin"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/17447681?v=4?s=100","width":"100px;","alt":"Marvin Chin"}}),_c('br'),_c('sub',[_c('b',[_v("Marvin Chin")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=marvinchin","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/amad-person"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/22164211?v=4?s=100","width":"100px;","alt":"Aadyaa Maddi"}}),_c('br'),_c('sub',[_c('b',[_v("Aadyaa Maddi")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=amad-person","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://kendrickang.github.io/me/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/38814428?v=4?s=100","width":"100px;","alt":"Kendrick Ang"}}),_c('br'),_c('sub',[_c('b',[_v("Kendrick Ang")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=KendrickAng","title":"Code"}},[_v("💻")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/dvrylc"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/6095637?v=4?s=100","width":"100px;","alt":"Daryl Chan"}}),_c('br'),_c('sub',[_c('b',[_v("Daryl Chan")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=dvrylc","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://tlylt.github.io/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/41845017?v=4?s=100","width":"100px;","alt":"Liu YongLiang"}}),_c('br'),_c('sub',[_c('b',[_v("Liu YongLiang")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=tlylt","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=tlylt","title":"Documentation"}},[_v("📖")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/pulls?q=is%3Apr+reviewed-by%3Atlylt","title":"Reviewed Pull Requests"}},[_v("👀")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://madanalogy.dev/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/42177597?v=4?s=100","width":"100px;","alt":"Ahmed Bahajjaj"}}),_c('br'),_c('sub',[_c('b',[_v("Ahmed Bahajjaj")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=madanalogy","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://www.zhongjun.me/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/27919917?v=4?s=100","width":"100px;","alt":"Hsu Zhong Jun"}}),_c('br'),_c('sub',[_c('b',[_v("Hsu Zhong Jun")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=dcshzj","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/kimberlyohq"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/60393696?v=4?s=100","width":"100px;","alt":"Kimberly"}}),_c('br'),_c('sub',[_c('b',[_v("Kimberly")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=kimberlyohq","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/hcwong"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/28432397?v=4?s=100","width":"100px;","alt":"Joshua Wong"}}),_c('br'),_c('sub',[_c('b',[_v("Joshua Wong")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=hcwong","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://weasyl.com/~parclytaxel"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/54175463?v=4?s=100","width":"100px;","alt":"Jeremy Tan Jie Rui"}}),_c('br'),_c('sub',[_c('b',[_v("Jeremy Tan Jie Rui")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Parcly-Taxel","title":"Code"}},[_v("💻")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/anubh-v"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/35621759?v=4?s=100","width":"100px;","alt":"Anubhav"}}),_c('br'),_c('sub',[_c('b',[_v("Anubhav")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=anubh-v","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/bchenghi"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/57175876?v=4?s=100","width":"100px;","alt":"Boh Cheng Hin"}}),_c('br'),_c('sub',[_c('b',[_v("Boh Cheng Hin")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=bchenghi","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://www.tawatawashi.com/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/7100187?v=4?s=100","width":"100px;","alt":"Hiroki Nishino"}}),_c('br'),_c('sub',[_c('b',[_v("Hiroki Nishino")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=tawAsh1","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/ong6"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/19247856?v=4?s=100","width":"100px;","alt":"Junx"}}),_c('br'),_c('sub',[_c('b',[_v("Junx")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=ong6","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=ong6","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://jyl123.github.io/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/24690889?v=4?s=100","width":"100px;","alt":"Li JiaYao"}}),_c('br'),_c('sub',[_c('b',[_v("Li JiaYao")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=JYL123","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://morninglit.github.io/Portfolio2/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/57279935?v=4?s=100","width":"100px;","alt":"Ambrose Liew"}}),_c('br'),_c('sub',[_c('b',[_v("Ambrose Liew")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=MorningLit","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/pr4aveen"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/2839596?v=4?s=100","width":"100px;","alt":"Praveen"}}),_c('br'),_c('sub',[_c('b',[_v("Praveen")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=pr4aveen","title":"Code"}},[_v("💻")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/riyadh-h"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/69278589?v=4?s=100","width":"100px;","alt":"Riyadh H. Alzahrani"}}),_c('br'),_c('sub',[_c('b',[_v("Riyadh H. Alzahrani")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=riyadh-h","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/samuelfangjw"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/60355570?v=4?s=100","width":"100px;","alt":"Samuel Fang"}}),_c('br'),_c('sub',[_c('b',[_v("Samuel Fang")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=samuelfangjw","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/thomastanck"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/829070?v=4?s=100","width":"100px;","alt":"Thomas Tan"}}),_c('br'),_c('sub',[_c('b',[_v("Thomas Tan")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=thomastanck","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/vig42"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/42461145?v=4?s=100","width":"100px;","alt":"Vighnesh Iyer"}}),_c('br'),_c('sub',[_c('b',[_v("Vighnesh Iyer")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=vig42","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://resumednh.netlify.app/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/53283766?v=4?s=100","width":"100px;","alt":"dao ngoc hieu"}}),_c('br'),_c('sub',[_c('b',[_v("dao ngoc hieu")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=daongochieu2810","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://bandism.net/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/22633385?v=4?s=100","width":"100px;","alt":"Ikko Ashimine"}}),_c('br'),_c('sub',[_c('b',[_v("Ikko Ashimine")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=eltociear","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"http://www.jovyntan.com"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/61113575?v=4?s=100","width":"100px;","alt":"Jovyn Tan"}}),_c('br'),_c('sub',[_c('b',[_v("Jovyn Tan")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=jovyntls","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=jovyntls","title":"Documentation"}},[_v("📖")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/kaixin-hc"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/59471320?v=4?s=100","width":"100px;","alt":"Hannah"}}),_c('br'),_c('sub',[_c('b',[_v("Hannah")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=kaixin-hc","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=kaixin-hc","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/NaincyKumariKnoldus"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/87004609?v=4?s=100","width":"100px;","alt":"NaincyKumariKnoldus"}}),_c('br'),_c('sub',[_c('b',[_v("NaincyKumariKnoldus")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=NaincyKumariKnoldus","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/elroygohjy"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/77185324?v=4?s=100","width":"100px;","alt":"Elroy Goh"}}),_c('br'),_c('sub',[_c('b',[_v("Elroy Goh")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=elroygohjy","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/EltonGohJH"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/75515229?v=4?s=100","width":"100px;","alt":"Elton Goh"}}),_c('br'),_c('sub',[_c('b',[_v("Elton Goh")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=EltonGohJH","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/benluiwj"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/67570985?v=4?s=100","width":"100px;","alt":"benluiwj"}}),_c('br'),_c('sub',[_c('b',[_v("benluiwj")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=benluiwj","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=benluiwj","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/weiquu"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/48304907?v=4?s=100","width":"100px;","alt":"weiquu"}}),_c('br'),_c('sub',[_c('b',[_v("weiquu")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=weiquu","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=weiquu","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/eeliana"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/62977276?v=4?s=100","width":"100px;","alt":"eeliana"}}),_c('br'),_c('sub',[_c('b',[_v("eeliana")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=eeliana","title":"Documentation"}},[_v("📖")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://www.linkedin.com/in/dominiclimkj/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/46486515?v=4?s=100","width":"100px;","alt":"Dominic Lim"}}),_c('br'),_c('sub',[_c('b',[_v("Dominic Lim")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=domlimm","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=domlimm","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/petermonky"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/39848410?v=4?s=100","width":"100px;","alt":"peter"}}),_c('br'),_c('sub',[_c('b',[_v("peter")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=petermonky","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/calvintanwj"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/61271749?v=4?s=100","width":"100px;","alt":"Calvin Tan"}}),_c('br'),_c('sub',[_c('b',[_v("Calvin Tan")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=calvintanwj","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/itsyme"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/71922282?v=4?s=100","width":"100px;","alt":"david"}}),_c('br'),_c('sub',[_c('b',[_v("david")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=itsyme","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=itsyme","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://www.linkedin.com/in/david-limantara/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/67327422?v=4?s=100","width":"100px;","alt":"David"}}),_c('br'),_c('sub',[_c('b',[_v("David")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=xSaints19x","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/charandeepsinghb"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/110289710?v=4?s=100","width":"100px;","alt":"charandeepsinghb"}}),_c('br'),_c('sub',[_c('b',[_v("charandeepsinghb")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=charandeepsinghb","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=charandeepsinghb","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/c00kie123"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/112937454?v=4?s=100","width":"100px;","alt":"Jia Yu"}}),_c('br'),_c('sub',[_c('b',[_v("Jia Yu")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=c00kie123","title":"Documentation"}},[_v("📖")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/lhw-1"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/25716529?v=4?s=100","width":"100px;","alt":"Lee Hyung Woon / 이형운"}}),_c('br'),_c('sub',[_c('b',[_v("Lee Hyung Woon / 이형운")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=lhw-1","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/yucheng11122017"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/77204346?v=4?s=100","width":"100px;","alt":"Chan Yu Cheng"}}),_c('br'),_c('sub',[_c('b',[_v("Chan Yu Cheng")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=yucheng11122017","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/Yvad60"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/54445417?v=4?s=100","width":"100px;","alt":"Ivad Yves HABIMANA"}}),_c('br'),_c('sub',[_c('b',[_v("Ivad Yves HABIMANA")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Yvad60","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/bibhu107"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/23478853?v=4?s=100","width":"100px;","alt":"Bibhu"}}),_c('br'),_c('sub',[_c('b',[_v("Bibhu")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=bibhu107","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/WillCWX"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/55905659?v=4?s=100","width":"100px;","alt":"WillCWX"}}),_c('br'),_c('sub',[_c('b',[_v("WillCWX")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=WillCWX","title":"Documentation"}},[_v("📖")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=WillCWX","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"http://esswhyy.github.io"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/39799639?v=4?s=100","width":"100px;","alt":"Sven Tang"}}),_c('br'),_c('sub',[_c('b',[_v("Sven Tang")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=EssWhyy","title":"Documentation"}},[_v("📖")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=EssWhyy","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"http://www.lesterong.com"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/84223259?v=4?s=100","width":"100px;","alt":"lesterong"}}),_c('br'),_c('sub',[_c('b',[_v("lesterong")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=lesterong","title":"Code"}},[_v("💻")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/SPWwj"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/30100720?v=4?s=100","width":"100px;","alt":"SPWwj"}}),_c('br'),_c('sub',[_c('b',[_v("SPWwj")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=SPWwj","title":"Documentation"}},[_v("📖")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=SPWwj","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://jmestxr.github.io/my-portfolio/"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/87931905?v=4?s=100","width":"100px;","alt":"James"}}),_c('br'),_c('sub',[_c('b',[_v("James")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=jmestxr","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=jmestxr","title":"Documentation"}},[_v("📖")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/zlimez"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/39835365?v=4?s=100","width":"100px;","alt":"Nisemono"}}),_c('br'),_c('sub',[_c('b',[_v("Nisemono")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=zlimez","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/jingting1412"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/105090139?v=4?s=100","width":"100px;","alt":"jingting1412"}}),_c('br'),_c('sub',[_c('b',[_v("jingting1412")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=jingting1412","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"http://tim-siu.github.io"}},[_v("\" Xu\">"),_c('br'),_c('sub',[_c('b',[_v("Shuyao \"Tim\" Xu")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Tim-Siu","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/KevinEyo1"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/105847348?v=4?s=100","width":"100px;","alt":"Kevin Eyo"}}),_c('br'),_c('sub',[_c('b',[_v("Kevin Eyo")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=KevinEyo1","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/luminousleek"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/68138671?v=4?s=100","width":"100px;","alt":"Lee Xiong Jie, Isaac"}}),_c('br'),_c('sub',[_c('b',[_v("Lee Xiong Jie, Isaac")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=luminousleek","title":"Code"}},[_v("💻")])])]),_v(" "),_c('tr',[_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/LamJiuFong"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/122192553?v=4?s=100","width":"100px;","alt":"Lam Jiu Fong"}}),_c('br'),_c('sub',[_c('b',[_v("Lam Jiu Fong")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=LamJiuFong","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/yiwen101"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/121547057?v=4?s=100","width":"100px;","alt":"Wang Yiwen"}}),_c('br'),_c('sub',[_c('b',[_v("Wang Yiwen")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=yiwen101","title":"Documentation"}},[_v("📖")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=yiwen101","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"https://github.com/Ashleeey1224"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/105656080?v=4?s=100","width":"100px;","alt":"Ashleeey1224"}}),_c('br'),_c('sub',[_c('b',[_v("Ashleeey1224")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=Ashleeey1224","title":"Code"}},[_v("💻")])]),_v(" "),_c('td',{attrs:{"align":"center","valign":"top","width":"14.28%"}},[_c('a',{attrs:{"href":"http://www.linkedin.com/in/gerteck"}},[_c('img',{attrs:{"src":"https://avatars.githubusercontent.com/u/111064611?v=4?s=100","width":"100px;","alt":"Ger Teck"}}),_c('br'),_c('sub',[_c('b',[_v("Ger Teck")])])]),_c('br'),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=gerteck","title":"Code"}},[_v("💻")]),_v(" "),_c('a',{attrs:{"href":"https://github.com/MarkBind/markbind/commits?author=gerteck","title":"Documentation"}},[_v("📖")])])])])])]),_v(" "),_c('hr'),_v(" "),_c('p',[_c('strong',[_c('span',{staticClass:"dimmed"},[_v("Past Members:")])])]),_v(" "),_c('ul',[_c('li',[_c('a',{attrs:{"href":"https://github.com/acjh"}},[_c('strong',[_v("Aaron Chong Jun Hao")])]),_v(": "),_c('em',[_v("Project Mentor")]),_v(" for Jul 2018 - Dec 2020, "),_c('em',[_v("Team Lead")]),_v(" for Aug 2017 - Jun 2018")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/madanalogy"}},[_c('strong',[_v("Ahmed Bahajjaj")])]),_v(": "),_c('em',[_v("Contributor")]),_v(" for Jan-April 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/Chng-Zhi-Xuan"}},[_c('strong',[_v("Chng Zhi Xuan")])]),_v(": "),_c('em',[_v("Member")]),_v(" for May 2018 - Jul 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/nicholaschuayunzhi"}},[_c('strong',[_v("Chua Yun Zhi Nicholas")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan 2018 - May 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/danielbrzn"}},[_c('strong',[_v("Daniel Berzin Chua Yuan Siang")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan 2018 - Aug 2018")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/dvrylc"}},[_c('strong',[_v("Daryl Chan")])]),_v(": "),_c('em',[_v("Contributor")]),_v(" for Jan-April 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/openorclose"}},[_c('strong',[_v("Daryl Tan")])]),_v(": "),_c('em',[_v("Member")]),_v(" for May 2019 - May 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/jamos-tay"}},[_c('strong',[_v("Jamos Tay")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Aug 2018 - Apr 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/Parcly-Taxel"}},[_c('strong',[_v("Jeremy Tan Jie Rui")])]),_v(": "),_c('em',[_v("Contributor")]),_v(" for Jan-April 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/nusjzx"}},[_c('strong',[_v("Jia Zhixin")])]),_v(": "),_c('em',[_v("Member")]),_v(" for May 2018 - Aug 2018")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/Gisonrg"}},[_c('strong',[_v("Jiang Sheng")])]),_v(": "),_c('em',[_v("Founding Member")]),_v(" and "),_c('em',[_v("Team Lead")]),_v(" for Aug 2016 - Jul 2017")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/hcwong"}},[_c('strong',[_v("Joshua Wong")])]),_v(": "),_c('em',[_v("Contributor")]),_v(" for Jan-April 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/kimberlyohq"}},[_c('strong',[_v("Kimberly Ong Ong Hui Qin")])]),_v(": "),_c('em',[_v("Contributor")]),_v(" for Jun-Jul 2021")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/nbriannl"}},[_c('strong',[_v("Labayna Neil Brian Narido")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan - Apr 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/marvinchin"}},[_c('strong',[_v("Marvin Chin Kun Song")])]),_v(": "),_c('em',[_v("Project Lead")]),_v(" for Jan - Aug 2020, "),_c('em',[_v("Member")]),_v(" for Jan 2019 - Aug 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/sijie123"}},[_c('strong',[_v("Lin Si Jie")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan - Aug 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/luyangkenneth"}},[_c('strong',[_v("Lu Yang Kenneth")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan - Aug 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/amad-person"}},[_c('strong',[_v("Maddi Aadyaa")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan - Aug 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/crphang"}},[_c('strong',[_v("Phang Chun Rong")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Aug 2019 - Jun 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/rachx"}},[_c('strong',[_v("Rachael Sim Hwee Ling")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan - Dec 2018")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/Xenonym"}},[_c('strong',[_v("Tan Zhen Yong")])]),_v(": "),_c('em',[_v("Member")]),_v(" for Jan - Aug 2019")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://github.com/yamgent"}},[_c('strong',[_v("Tan Wang Leng")])]),_v(": "),_c('em',[_v("Team Lead")]),_v(" for Jul 2018 - Apr 2019, "),_c('em',[_v("Member")]),_v(" for May 2018 - Jun 2018")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/Tejas2805"}},[_c('strong',[_v("Tejas Bhuwania")])]),_v(": "),_c('em',[_v("Contributor")]),_v(" for Jan - April 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/le0tan"}},[_c('strong',[_v("Tan Yuanhong")])]),_v(": "),_c('em',[_v("Member")]),_v(": Jan 2020 - Apr 2021")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/yash-chowdhary"}},[_c('strong',[_v("Yash Chowdhary")])]),_v(": "),_c('em',[_v("Member")]),_v(" Jan - Apr 2020")]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.github.com/alyip98"}},[_c('strong',[_v("Yip Seng Yeun")])]),_v(": "),_c('em',[_v("Member")]),_v(" May 2019 - Apr 2020")])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/bootcamp/contributeToDocs.html b/devGuide/bootcamp/contributeToDocs.html index a0555cac..d4fac354 100644 --- a/devGuide/bootcamp/contributeToDocs.html +++ b/devGuide/bootcamp/contributeToDocs.html @@ -26,14 +26,14 @@

Contribute to Documentation

Contribute to Documentation

Making contributions to MarkBind is not limited to code. You can also contribute to our documentation by fixing typos, improving the clarity of our explanations, or adding new content.

TLDR

Reviewing MarkBind Documentation

Assuming that you have completed the Explore MarkBind as a user task, you should have a working local MarkBind setup.

To review the documentation and make changes to it locally, you can:

  1. Open the MarkBind repository in your favorite code editor.
  2. Change directory to docs by running cd docs.
  3. Serve the documentation in development mode with markbind serve -d.
  4. Review both the user guide and the developer guide.

You may want to check if there are any open issues tagged with the a-Documentation label. These issues are usually related to documentation and may be a good place to start contributing for real!

Checkpoint

Ensure that you can serve the MarkBind documentation site in development mode. You should be able to browse the site at http://localhost:8080.

+

Contribute to Documentation

Contribute to Documentation

Making contributions to MarkBind is not limited to code. You can also contribute to our documentation by fixing typos, improving the clarity of our explanations, or adding new content.

TLDR

  • Reviewing MarkBind documentation
  • Make modifications to the documentation
  • Make a pull request & verify the PR preview

Reviewing MarkBind Documentation

Assuming that you have completed the Explore MarkBind as a user task, you should have a working local MarkBind setup.

To review the documentation and make changes to it locally, you can:

  1. Open the MarkBind repository in your favorite code editor.
  2. Change directory to docs by running cd docs.
  3. Serve the documentation in development mode with markbind serve -d.
  4. Review both the user guide and the developer guide.

You may want to check if there are any open issues tagged with the a-Documentation label. These issues are usually related to documentation and may be a good place to start contributing for real!

Checkpoint

Ensure that you can serve the MarkBind documentation site in development mode. You should be able to browse the site at http://localhost:8080.

If port 8080 is in use, another port will be chosen. Refer to the console output for the exact URL address. -
  • Browse the user guide to ensure that the content is rendered correctly.
  • Browse the developer guide to ensure that the content is rendered correctly.

Make Modifications to the Documentation

In the following steps, we will be fixing a hypothetical typo. You do not need to commit the changes or raise a PR, but understand the context and follow the steps to get a feel for the process.

Let's suppose we want to change the use of "Pop-Up" in our user guide to "Popup" (i.e. remove the hyphen).

These are the typical motivations for making documentation changes:

  • Fixing typos, grammar, or spelling mistakes when reading the documentation, which may not be code-related.
  • Keeping the documentation up-to-date with the latest changes in MarkBind, which may be code-related.
  • Improving the clarity of the documentation, which may or may not be code-related.

Before making any changes, go through the following steps:

  1. Check that the issue has been resolved in the latest master branch docs.
  2. Check that the issue has been raised, and if not, raise an issue. -
    1. For trivial changes (like this one), you may skip this step.
    2. This step is important for more significant changes, as it allows the developer to propose changes and get feedback from the MarkBind team.

If the issue has been triaged and is ready to be worked on, we can proceed to make the changes. Since this is a trivial (and assuming correct) change, we will not be raising an issue and will proceed to make the changes directly.

  1. Check out a new branch from the latest master branch.
  2. Open the docs/userGuide/components/popups.md file.
  3. Replace Pop-Up/pop-up with Popup/popup in the file.
  4. Update the layout in docs/_markbind/layouts/userGuide.md to modify the site navigation item under Using Components from Pop-Ups to Popups.
  5. Search for Pop-Up/pop-up in the docs directory to ensure that there are no other occurrences of the word. Else, replace them as well.

Checkpoint

Check that the following are true:

  • The rendered site navigation item under Using Components in the user guide is now Popups
  • The word Pop-Up/pop-up has been replaced with Popup/popup in the rendered page.

Make a Pull Request & Verify the PR Preview

Once you have made the changes, commit them and push them to your forked repository. +

  • Browse the user guide to ensure that the content is rendered correctly.
  • Browse the developer guide to ensure that the content is rendered correctly.

Make Modifications to the Documentation

In the following steps, we will be fixing a hypothetical typo. You do not need to commit the changes or raise a PR, but understand the context and follow the steps to get a feel for the process.

Let's suppose we want to change the use of "Pop-Up" in our user guide to "Popup" (i.e. remove the hyphen).

These are the typical motivations for making documentation changes:

  • Fixing typos, grammar, or spelling mistakes when reading the documentation, which may not be code-related.
  • Keeping the documentation up-to-date with the latest changes in MarkBind, which may be code-related.
  • Improving the clarity of the documentation, which may or may not be code-related.

Before making any changes, go through the following steps:

  1. Check that the issue has been resolved in the latest master branch docs.
  2. Check that the issue has been raised, and if not, raise an issue. +
    1. For trivial changes (like this one), you may skip this step.
    2. This step is important for more significant changes, as it allows the developer to propose changes and get feedback from the MarkBind team.

If the issue has been triaged and is ready to be worked on, we can proceed to make the changes. Since this is a trivial (and assuming correct) change, we will not be raising an issue and will proceed to make the changes directly.

  1. Check out a new branch from the latest master branch.
  2. Open the docs/userGuide/components/popups.md file.
  3. Replace Pop-Up/pop-up with Popup/popup in the file.
  4. Update the layout in docs/_markbind/layouts/userGuide.md to modify the site navigation item under Using Components from Pop-Ups to Popups.
  5. Search for Pop-Up/pop-up in the docs directory to ensure that there are no other occurrences of the word. Else, replace them as well.

Checkpoint

Check that the following are true:

  • The rendered site navigation item under Using Components in the user guide is now Popups
  • The word Pop-Up/pop-up has been replaced with Popup/popup in the rendered page.

Make a Pull Request & Verify the PR Preview

Once you have made the changes, commit them and push them to your forked repository. Now, you can make a pull request targeting the master branch of the MarkBind repository.

  1. Fill in the pull request template.
  2. Wait for the CI checks to pass.
    1. For first-time contributors, you may need to wait for the MarkBind team to approve your PR before the CI checks can run.
  3. Verify that the PR preview is working. -
    1. The PR preview is generated by netlify/markbind-master/deploy-preview.
    2. You can find the link to the PR preview in the checks section of the PR. PR Checks Section
    3. Open the link to the PR preview and ensure that your changes are reflected in the rendered site
  4. Follow up with PR reviews and make changes as requested.

Since this is a hypothetical change, you do not need to raise a PR. You can refer to PR #1924 for an example.

Checkpoint

For actual documentation changes, check that the following are true:

  • The PR template has been filled in
  • The PR preview is working

Summary

In this task, you have learned how to make documentation changes to MarkBind!

While documentation changes are not as exciting as code changes, they are still important. In particular, our documentation is generated by MarkBind itself, utilizing the same features that we are documenting. This means that our documentation is a great place to discover and analyze how MarkBind is used!

Here are some additional tasks for you to try out:

When you are ready, move on to learn how to squash some bugs!

Explore MarkBind as a User

Fix a Bug


+
  1. The PR preview is generated by netlify/markbind-master/deploy-preview.
  2. You can find the link to the PR preview in the checks section of the PR. PR Checks Section
  3. Open the link to the PR preview and ensure that your changes are reflected in the rendered site
  • Follow up with PR reviews and make changes as requested.
  • Since this is a hypothetical change, you do not need to raise a PR. You can refer to PR #1924 for an example.

    Checkpoint

    For actual documentation changes, check that the following are true:

    • The PR template has been filled in
    • The PR preview is working

    Summary

    In this task, you have learned how to make documentation changes to MarkBind!

    While documentation changes are not as exciting as code changes, they are still important. In particular, our documentation is generated by MarkBind itself, utilizing the same features that we are documenting. This means that our documentation is a great place to discover and analyze how MarkBind is used!

    Here are some additional tasks for you to try out:

    When you are ready, move on to learn how to squash some bugs!

    Explore MarkBind as a User

    Fix a Bug


    diff --git a/devGuide/bootcamp/contributeToDocs.page-vue-render.js b/devGuide/bootcamp/contributeToDocs.page-vue-render.js index ae2b5f48..f1e23f14 100644 --- a/devGuide/bootcamp/contributeToDocs.page-vue-render.js +++ b/devGuide/bootcamp/contributeToDocs.page-vue-render.js @@ -65,6 +65,6 @@ with(this){return _c('ul',{staticClass:"contains-task-list"},[_c('li',{staticCla with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/exploreMarkBind.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Explore MarkBind as a User")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/fixABug.html"}},[_c('span',[_c('span',[_v("Fix a Bug")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/bootcamp/exploreMarkBind.html b/devGuide/bootcamp/exploreMarkBind.html index 70a99bc6..d9a00de9 100644 --- a/devGuide/bootcamp/exploreMarkBind.html +++ b/devGuide/bootcamp/exploreMarkBind.html @@ -26,9 +26,9 @@

    Explore MarkBind as a User

    Explore MarkBind as a User

    Getting to know MarkBind as a user will help you understand what MarkBind offers and how it can be used to create static websites. This will also help you understand the different components and syntax available in MarkBind, which will be useful when you want to debug issues or create similar features in the future.

    TLDR

    Setup the master branch of MarkBind

    As mentioned in our user guide, we can either install MarkBind via npm or create a new MarkBind site with npx.

    In this bootcamp, we want to set up the master branch MarkBind so that we can test out any changes we make to the codebase on our local machine.

    You can also switch between the master branch MarkBind and check out other branches if you are working on multiple issues. This is also useful when you want to test out a PR submitted by another developer.

    Checkpoint

    After setting up MarkBind, try running from the root directory of your MarkBind repository:

    • markbind -v to check that you have the correct version of MarkBind installed
    • cd docs && markbind serve -d to check that you can serve the MarkBind documentation site in development mode

    If you can browse the MarkBind documentation site that should have automatically been up in your browser at http://localhost:8080, you have successfully set up MarkBind!

    +

    Explore MarkBind as a User

    Explore MarkBind as a User

    Getting to know MarkBind as a user will help you understand what MarkBind offers and how it can be used to create static websites. This will also help you understand the different components and syntax available in MarkBind, which will be useful when you want to debug issues or create similar features in the future.

    TLDR

    • Setup the master branch MarkBind
    • Create a MarkBind site
    • Create content with MarkBind
    • Modify site structure and configuration
    • Deploy your MarkBind site

    Setup the master branch of MarkBind

    As mentioned in our user guide, we can either install MarkBind via npm or create a new MarkBind site with npx.

    In this bootcamp, we want to set up the master branch MarkBind so that we can test out any changes we make to the codebase on our local machine.

    You can also switch between the master branch MarkBind and check out other branches if you are working on multiple issues. This is also useful when you want to test out a PR submitted by another developer.

    Checkpoint

    After setting up MarkBind, try running from the root directory of your MarkBind repository:

    • markbind -v to check that you have the correct version of MarkBind installed
    • cd docs && markbind serve -d to check that you can serve the MarkBind documentation site in development mode

    If you can browse the MarkBind documentation site that should have automatically been up in your browser at http://localhost:8080, you have successfully set up MarkBind!

    If port 8080 is in use, another port will be chosen. Refer to the console output for the exact URL address. -

    Create a MarkBind site

    With MarkBind installed, we can now create a new MarkBind site.

    We recommend that you set up a new repository for this MarkBind site so that you can push your site to GitHub pages later. This MarkBind site can be used to test out any changes you make to the codebase.

    As an example, let's create a test site together!

    You can refer to the example repository here for the code and here for the deployed site if you get stuck.

    1. Create a new folder called at a location outside of the MarkBind source code directory.
    2. Go to the folder and run markbind init to create a new MarkBind site with the default template.
    3. Initialize a new git repository in the folder by running git init. You can also create a new public repository on GitHub first and clone it to your local machine.

    You should see the following output:

    $ markbind init
    +

    Create a MarkBind site

    With MarkBind installed, we can now create a new MarkBind site.

    We recommend that you set up a new repository for this MarkBind site so that you can push your site to GitHub pages later. This MarkBind site can be used to test out any changes you make to the codebase.

    As an example, let's create a test site together!

    You can refer to the example repository here for the code and here for the deployed site if you get stuck.

    1. Create a new folder called at a location outside of the MarkBind source code directory.
    2. Go to the folder and run markbind init to create a new MarkBind site with the default template.
    3. Initialize a new git repository in the folder by running git init. You can also create a new public repository on GitHub first and clone it to your local machine.

    You should see the following output:

    $ markbind init
       __  __                  _      ____    _               _
      |  \/  |   __ _   _ __  | | __ | __ )  (_)  _ __     __| |
      | |\/| |  / _` | | '__| | |/ / |  _ \  | | | '_ \   / _` |
    @@ -53,9 +53,9 @@
     
     
         
    -    

    Checkpoint

    After setting up the MarkBind test site, try running the following common operations from the root directory of your test site:

    • Build the site by running markbind build
    • Serve the site by running markbind serve
    • Serve the site in development mode by running markbind serve -d

    You now have the test site up and running!

    Create Content with MarkBind

    MarkBind contains a range of additional syntax on top of Markdown. It also comes with a set of components that can be used to create content.

    Two essential sections of the user guide to get started with are:

    The generated MarkBind site from the above step also includes a few sample usage in the index.md file.

    Now, let's try editing the index.md file to add some content of our own!

    1. Open the index.md file in your mb-dev-xxx folder.
    2. Replace the wording Landing Page Title with MarkBind Developer Test Site.
    3. Modify or add some content utilizing one or more of the following syntaxes: +

      Checkpoint

      After setting up the MarkBind test site, try running the following common operations from the root directory of your test site:

      • Build the site by running markbind build
      • Serve the site by running markbind serve
      • Serve the site in development mode by running markbind serve -d

      You now have the test site up and running!

      Create Content with MarkBind

      MarkBind contains a range of additional syntax on top of Markdown. It also comes with a set of components that can be used to create content.

      Two essential sections of the user guide to get started with are:

      The generated MarkBind site from the above step also includes a few sample usage in the index.md file.

      Now, let's try editing the index.md file to add some content of our own!

      1. Open the index.md file in your mb-dev-xxx folder.
      2. Replace the wording Landing Page Title with MarkBind Developer Test Site.
      3. Modify or add some content utilizing one or more of the following syntaxes:
      4. Modify or add some content utilizing one or more of the following components: -

      Checkpoint

      With live preview, you should be able to see the changes you have made to the site after saving. Check that the following are true:

      • Serve the site by running markbind serve -d
      • Make changes to the index.md file and save
      • See the changes reflected in the live preview, with the correct rendering of the syntax and components

      You now have created content with MarkBind!

      Modify Site Structure and Configuration

      There are a few ways to modify the site's (as well as the page's) structure and configuration. We will cover the following:

      Let's continue with the test site we created earlier and modify the index.md file via frontmatter.

      1. Open the index.md file in your mb-dev-xxx folder.
      2. Change the pageNavTitle in the frontmatter from Topics to Index Page.
      3. Change the pageNav in the frontmatter from 4 to 5.

      Checkpoint

      Ensure that you are still serving the site with markbind serve -d. Check that the following are true:

      • The rendered page navigation title is changed to Index Page
      • The rendered page navigation content now shows H5 headings as well

      Screenshot before the changes:

      Page navigation title and content before changes

      Screenshot after the changes:

      Page navigation title and content after changes

      Another commonly adjusted structure is the layout of the site (especially, the site's top header and the left-hand-side navigation).

      1. Open the _markbind/layouts/default.md file in your mb-dev-xxx folder.
      2. Change Your Logo to MarkBind Developer Test Site.
      3. Change Home :house: to My Test Playground :computer:.

      Checkpoint

      Ensure that you are still serving the site with markbind serve -d. Check that the following are true:

      • The rendered page logo in the header is changed to MarkBind Developer Test Site
      • The rendered site navigation title is changed to My Test Playground 💻

      Screenshot after the changes:

      Logo and Nav changes

      Lastly, let's modify the site configuration to change the site title and more.

      The site.json file is autogenerated and located in the root directory of the site. Refer to the User Guide - site.json section for more details.

      1. Open the site.json file in your mb-dev-xxx folder.
      2. Change "titlePrefix": "", to "titlePrefix": "mb-dev-xxx",.
      3. Under pages, add "title": "Home".

      Checkpoint

      Ensure that you are still serving the site with markbind serve -d. Check that the following are true:

      • The page title in the browser tab is changed to mb-dev-xxx - Home

      Screenshot after the changes:

      Page title changes

      You now have modified some of the commonly adjusted site structure and configuration!

      Deploy your MarkBind site

      MarkBind sites can be easily deployed with CLI commands or via CI. Let's try deploying our site via GitHub Actions.

      1. Open the site.json file in your mb-dev-xxx folder.
      2. Change "baseUrl": "", to "baseUrl": "/mb-dev-xxx", (Note the leading / and that the value is the same as your GitHub repository name).
      3. Create a .github/workflows/deploy.yml file with the following content mentioned in the GitHub Actions guide. +

      Checkpoint

      With live preview, you should be able to see the changes you have made to the site after saving. Check that the following are true:

      • Serve the site by running markbind serve -d
      • Make changes to the index.md file and save
      • See the changes reflected in the live preview, with the correct rendering of the syntax and components

      You now have created content with MarkBind!

      Modify Site Structure and Configuration

      There are a few ways to modify the site's (as well as the page's) structure and configuration. We will cover the following:

      Let's continue with the test site we created earlier and modify the index.md file via frontmatter.

      1. Open the index.md file in your mb-dev-xxx folder.
      2. Change the pageNavTitle in the frontmatter from Topics to Index Page.
      3. Change the pageNav in the frontmatter from 4 to 5.

      Checkpoint

      Ensure that you are still serving the site with markbind serve -d. Check that the following are true:

      • The rendered page navigation title is changed to Index Page
      • The rendered page navigation content now shows H5 headings as well

      Screenshot before the changes:

      Page navigation title and content before changes

      Screenshot after the changes:

      Page navigation title and content after changes

      Another commonly adjusted structure is the layout of the site (especially, the site's top header and the left-hand-side navigation).

      1. Open the _markbind/layouts/default.md file in your mb-dev-xxx folder.
      2. Change Your Logo to MarkBind Developer Test Site.
      3. Change Home :house: to My Test Playground :computer:.

      Checkpoint

      Ensure that you are still serving the site with markbind serve -d. Check that the following are true:

      • The rendered page logo in the header is changed to MarkBind Developer Test Site
      • The rendered site navigation title is changed to My Test Playground 💻

      Screenshot after the changes:

      Logo and Nav changes

      Lastly, let's modify the site configuration to change the site title and more.

      The site.json file is autogenerated and located in the root directory of the site. Refer to the User Guide - site.json section for more details.

      1. Open the site.json file in your mb-dev-xxx folder.
      2. Change "titlePrefix": "", to "titlePrefix": "mb-dev-xxx",.
      3. Under pages, add "title": "Home".

      Checkpoint

      Ensure that you are still serving the site with markbind serve -d. Check that the following are true:

      • The page title in the browser tab is changed to mb-dev-xxx - Home

      Screenshot after the changes:

      Page title changes

      You now have modified some of the commonly adjusted site structure and configuration!

      Deploy your MarkBind site

      MarkBind sites can be easily deployed with CLI commands or via CI. Let's try deploying our site via GitHub Actions.

      1. Open the site.json file in your mb-dev-xxx folder.
      2. Change "baseUrl": "", to "baseUrl": "/mb-dev-xxx", (Note the leading / and that the value is the same as your GitHub repository name).
      3. Create a .github/workflows/deploy.yml file with the following content mentioned in the GitHub Actions guide.
        1. Note that you should change branches: master to branches: main if you are using the main branch.

      MarkBind Action

      Loading...

      1. Ensure that you have added your remote GitHub repository to your local repository with the following command (replace xxx with your GitHub username):
        git remote add origin https://github.com/xxx/mb-dev-xxx.git
        @@ -95,7 +95,7 @@
         
             
             
      2. Update your GitHub repository setting for deploying to GitHub Pages. -
        1. Navigate to the Settings > Pages section on GitHub for that repository and set the source to Deploy from a branch and the branch to gh-pages and /(root).

      Checkpoint

      Check that the following are true:

      • The triggered GitHub action runs are successful
      • The site is deployed and available at https://<username>.github.io/mb-dev-xxx/ (after a few seconds to a few minutes)

      Congratulations! 🎉🎉🎉 You have deployed your MarkBind site!

      Summary

      In the first part of this bootcamp, we experimented with MarkBind as a user. We have set up the master branch of MarkBind and created a new MarkBind site. We have also created content with MarkBind components/syntax and deployed our site.

      Here are some additional tasks for you to try out:

      Take a break now ☕️ and we will continue with the second part of the bootcamp!


      +
      1. Navigate to the Settings > Pages section on GitHub for that repository and set the source to Deploy from a branch and the branch to gh-pages and /(root).

    Checkpoint

    Check that the following are true:

    • The triggered GitHub action runs are successful
    • The site is deployed and available at https://<username>.github.io/mb-dev-xxx/ (after a few seconds to a few minutes)

    Congratulations! 🎉🎉🎉 You have deployed your MarkBind site!

    Summary

    In the first part of this bootcamp, we experimented with MarkBind as a user. We have set up the master branch of MarkBind and created a new MarkBind site. We have also created content with MarkBind components/syntax and deployed our site.

    Here are some additional tasks for you to try out:

    Take a break now ☕️ and we will continue with the second part of the bootcamp!


    diff --git a/devGuide/bootcamp/exploreMarkBind.page-vue-render.js b/devGuide/bootcamp/exploreMarkBind.page-vue-render.js index 05237330..cf3a6a44 100644 --- a/devGuide/bootcamp/exploreMarkBind.page-vue-render.js +++ b/devGuide/bootcamp/exploreMarkBind.page-vue-render.js @@ -98,6 +98,6 @@ with(this){return _c('ul',{staticClass:"contains-task-list"},[_c('li',{staticCla with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/intro.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Onboarding Bootcamp")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/contributeToDocs.html"}},[_c('span',[_c('span',[_v("Contribute to Documentation")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/bootcamp/fixABug.html b/devGuide/bootcamp/fixABug.html index acd1263f..b9486235 100644 --- a/devGuide/bootcamp/fixABug.html +++ b/devGuide/bootcamp/fixABug.html @@ -44,8 +44,8 @@ -

    Now, let's use the test site generated in Explore MarkBind as a User to experiment with the bug.

    1. Read the steps to reproduce the bug in the bug report.
    2. Copy the markdown content from the bug report into the contents/topic1.md file in the test site.
    3. Run markbind serve -d to serve the test site.
    4. View the topic1 page in the browser, and observe the browser console output.

    Checkpoint

    Check that the following are true:

    • The console output contains the error message TypeError: Cannot read property null (reading 'classList')

    In some cases, we will need to create a new test site to reproduce the bug. For example, -if the bug is related to the MarkBind CLI and the site generation process.

    Make Experimental Changes

    Now that we have reproduced the bug, we can start tinkering with the code to fix it. This is the part that varies the most from bug to bug, as the bug may be related to different parts of the codebase. With our current setup, we can make changes to the codebase, serve the test site, and observe if the bug is fixed.

    When editing files that are written in TypeScript, you will also need to run npm run build:backend in the root directory to compile these files.

    For the given example, the required changes can be found here. In gist, changes +

    Now, let's use the test site generated in Explore MarkBind as a User to experiment with the bug.

    1. Read the steps to reproduce the bug in the bug report.
    2. Copy the markdown content from the bug report into the contents/topic1.md file in the test site.
    3. Run markbind serve -d to serve the test site.
    4. View the topic1 page in the browser, and observe the browser console output.

    Checkpoint

    Check that the following are true:

    • The console output contains the error message TypeError: Cannot read property null (reading 'classList')

    In some cases, we will need to create a new test site to reproduce the bug. For example, +if the bug is related to the MarkBind CLI and the site generation process.

    Make Experimental Changes

    Now that we have reproduced the bug, we can start tinkering with the code to fix it. This is the part that varies the most from bug to bug, as the bug may be related to different parts of the codebase. With our current setup, we can make changes to the codebase, serve the test site, and observe if the bug is fixed.

    When editing files that are written in TypeScript, you will also need to run npm run build:backend in the root directory to compile these files.

    For the given example, the required changes can be found here. In gist, changes are made to packages/core/src/Page/index.js and packages/core/src/Page/page.njk to redefine how hasPageNavHeadings is computed and used.

    Let's check out the commit that contains the fix:

    git checkout 83a3c275732fa4127315b3730f791db5b2f29cb1 
     

    Now that we have applied the code logic changes, let's see if the bug is fixed.

    1. Run markbind serve -d to serve the test site again.
    2. View the topic1 page in the browser, and observe the browser console output.

    Checkpoint

    Check that the following are true:

    • The console output no longer contains the error message TypeError: Cannot read property null (reading 'classList')

    Add tests

    Now that we know exactly what the bug is and how to fix it, we can add a test to ensure that the bug does not reappear in the future.

    We can also aim to be test-driven, where we write the test first, and then write the code to make the test pass.

    In this case, we will add a functional test to capture the bug. The required changes can be found here.

    The general steps are:

    1. Create a new page in the functional test suite in packages/cli/test/functional/test_site/ if necessary. +

      Now that we have applied the code logic changes, let's see if the bug is fixed.

      1. Run markbind serve -d to serve the test site again.
      2. View the topic1 page in the browser, and observe the browser console output.

      Checkpoint

      Check that the following are true:

      • The console output no longer contains the error message TypeError: Cannot read property null (reading 'classList')

      Add tests

      Now that we know exactly what the bug is and how to fix it, we can add a test to ensure that the bug does not reappear in the future.

      We can also aim to be test-driven, where we write the test first, and then write the code to make the test pass.

      In this case, we will add a functional test to capture the bug. The required changes can be found here.

      The general steps are:

      1. Create a new page in the functional test suite in packages/cli/test/functional/test_site/ if necessary.
        1. In this case, we will add a new page testPageNavTarget.md.
      2. Add content to the page that reproduces the bug.
      3. Update the site.json file to include the new page.
        1. This specifies the page source and gives it a title.

      Let's check out the commit that contains the test:

      git checkout c9368a35f8e2eb35ca71cabbe7e455fe05771215
       
      -

      Now that we have added the test, the test will necessarily fail. This is because the expected output is not yet updated to reflect the changes made to the functional test suite.

      Checkpoint

      Check that the following are true:

      • Run npm run test in the root directory to run the entire test suite.
      • See that the test fails.

      At last, we need to update the expected output via npm run updatetest and commit the changes. You can see the committed changes here. The generated files may not be easy to read, but you should check that the generated content is reasonable (e.g. does not modify unrelated files).

      Let's check out the commit that contains the updated expected output:

      git checkout b64b632d359d41d9ca662fe15f1de665760becbf
      +    

      Now that we have added the test, the test will necessarily fail. This is because the expected output is not yet updated to reflect the changes made to the functional test suite.

      Checkpoint

      Check that the following are true:

      • Run npm run test in the root directory to run the entire test suite.
      • See that the test fails.

      At last, we need to update the expected output via npm run updatetest and commit the changes. You can see the committed changes here. The generated files may not be easy to read, but you should check that the generated content is reasonable (e.g. does not modify unrelated files).

      Let's check out the commit that contains the updated expected output:

      git checkout b64b632d359d41d9ca662fe15f1de665760becbf
       

      Checkpoint

      Check that the following are true:

      • Run npm run test in the root directory to run the entire test suite.
      • See that the test passes

      Update Documentation

      If the bug is related to a feature that is documented, we should update the documentation to reflect the changes. This is especially important if the bug fix changes the behavior of the feature.

      In this case, we will not need to update the documentation.

      Create PR & Follow up with the Reviews

      Now that we have completed our changes, we can create a PR to merge the changes into the master branch.

      Similar to Contribute to Documentation, we will need to:

      1. Fill in the pull request template.
      2. Wait for the CI checks to pass. +

      Checkpoint

      Check that the following are true:

      • Run npm run test in the root directory to run the entire test suite.
      • See that the test passes

      Update Documentation

      If the bug is related to a feature that is documented, we should update the documentation to reflect the changes. This is especially important if the bug fix changes the behavior of the feature.

      In this case, we will not need to update the documentation.

      Create PR & Follow up with the Reviews

      Now that we have completed our changes, we can create a PR to merge the changes into the master branch.

      Similar to Contribute to Documentation, we will need to:

      1. Fill in the pull request template.
      2. Wait for the CI checks to pass.
        1. For first-time contributors, you may need to wait for the MarkBind team to approve your PR before the CI checks can run.
      3. Verify that the PR preview is working. -
        1. The PR preview is generated by netlify/markbind-master/deploy-preview.
        2. You can find the link to the PR preview in the checks section of the PR. PR Checks Section
        3. Open the link to the PR preview and ensure that your changes are reflected in the rendered site
      4. Follow up with PR reviews and make changes as requested.

      For changes that involve code logic, some discussion may be required to determine the best way to fix the bug. Hence, it may be helpful to get feedback early either by creating a draft PR or by discussing the approach in the issue thread.

      Summary

      In this task, you have learned how to deal with a bug report. While the example bug report is simple, the steps are generally the same for more complex bug reports.

      Here are some additional tasks for you to try out:

      When you are ready, move on to learn how to implement a new feature!


      +
      1. The PR preview is generated by netlify/markbind-master/deploy-preview.
      2. You can find the link to the PR preview in the checks section of the PR. PR Checks Section
      3. Open the link to the PR preview and ensure that your changes are reflected in the rendered site
    2. Follow up with PR reviews and make changes as requested.

    For changes that involve code logic, some discussion may be required to determine the best way to fix the bug. Hence, it may be helpful to get feedback early either by creating a draft PR or by discussing the approach in the issue thread.

    Summary

    In this task, you have learned how to deal with a bug report. While the example bug report is simple, the steps are generally the same for more complex bug reports.

    Here are some additional tasks for you to try out:

    When you are ready, move on to learn how to implement a new feature!


    diff --git a/devGuide/bootcamp/fixABug.page-vue-render.js b/devGuide/bootcamp/fixABug.page-vue-render.js index ec29f956..ca399fb4 100644 --- a/devGuide/bootcamp/fixABug.page-vue-render.js +++ b/devGuide/bootcamp/fixABug.page-vue-render.js @@ -89,6 +89,6 @@ with(this){return _c('ul',{staticClass:"contains-task-list"},[_c('li',{staticCla with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/contributeToDocs.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Contribute to Documentation")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/implementAFeature.html"}},[_c('span',[_c('span',[_v("Implement a New Feature")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/bootcamp/implementAFeature.html b/devGuide/bootcamp/implementAFeature.html index f4e2c82d..d3daceb9 100644 --- a/devGuide/bootcamp/implementAFeature.html +++ b/devGuide/bootcamp/implementAFeature.html @@ -26,13 +26,13 @@

    Implement a New Feature

    Implement a New Feature

    Creating a new feature makes MarkBind more useful and powerful. This section will guide you through the process of implementing a new feature.

    TLDR

    • Feature proposal
    • Design & iterate
    • Add tests & update documentation
    • Create PR & Follow up with the reviews

    Feature Proposal

    Creating a new feature starts with a feature proposal. This can come from you, or from a user who has requested a new feature in the issue tracker. At this stage, the feature proposal should be discussed extensively to ensure that the feature is well-defined and that it is something that MarkBind should support. There are also enhancements to existing features that can be proposed (see here) and worked on.

    In this part, we will be mentioning a few completed PRs as examples of how a feature was implemented. You can use them as a reference to get a better idea of how a feature is implemented.

    Issue #983 is an example where a proposed feature was worked on in PR #985 but later closed due to a potential lack of user value.

    Design & Iterate

    When there is consensus on the feature proposal, we can start designing the feature. This involves understanding how MarkBind works and how a feature can be implemented. In the broadest sense:

    • Additional Markdown-like syntax can be added by tapping into markdown-it which does Markdown parsing and rendering. +

    Implement a New Feature

    Implement a New Feature

    Creating a new feature makes MarkBind more useful and powerful. This section will guide you through the process of implementing a new feature.

    TLDR

    • Feature proposal
    • Design & iterate
    • Add tests & update documentation
    • Create PR & Follow up with the reviews

    Feature Proposal

    Creating a new feature starts with a feature proposal. This can come from you, or from a user who has requested a new feature in the issue tracker. At this stage, the feature proposal should be discussed extensively to ensure that the feature is well-defined and that it is something that MarkBind should support. There are also enhancements to existing features that can be proposed (see here) and worked on.

    In this part, we will be mentioning a few completed PRs as examples of how a feature was implemented. You can use them as a reference to get a better idea of how a feature is implemented.

    Issue #983 is an example where a proposed feature was worked on in PR #985 but later closed due to a potential lack of user value.

    Design & Iterate

    When there is consensus on the feature proposal, we can start designing the feature. This involves understanding how MarkBind works and how a feature can be implemented. In the broadest sense:

    Add Tests & Update Documentation

    (Same as what we mentioned in the previous task)

    By this time, you should have a good idea about how tests and documentation are written. Where possible, unit tests should also be added to ensure that the feature works as expected. Utilizing the new feature in our documentation is also encouraged so that we can get a better idea of how the feature can be used.

    When adding intra-site links, use tags to differentiate between the deployment environment when appropriate, as mentioned in Adding Intra-Site Links to Documentation!

    Create PR & Follow up with the Reviews

    (Same as what we mentioned in the previous task)

    1. Fill in the pull request template.
    2. Wait for the CI checks to pass. +
    3. Add Tests & Update Documentation

      (Same as what we mentioned in the previous task)

      By this time, you should have a good idea about how tests and documentation are written. Where possible, unit tests should also be added to ensure that the feature works as expected. Utilizing the new feature in our documentation is also encouraged so that we can get a better idea of how the feature can be used.

      When adding intra-site links, use tags to differentiate between the deployment environment when appropriate, as mentioned in Adding Intra-Site Links to Documentation!

      Create PR & Follow up with the Reviews

      (Same as what we mentioned in the previous task)

      1. Fill in the pull request template.
      2. Wait for the CI checks to pass.
        1. For first-time contributors, you may need to wait for the MarkBind team to approve your PR before the CI checks can run.
      3. Verify that the PR preview is working. -
        1. The PR preview is generated by netlify/markbind-master/deploy-preview.
        2. You can find the link to the PR preview in the checks section of the PR. PR Checks Section
        3. Open the link to the PR preview and ensure that your changes are reflected in the rendered site
      4. Follow up with PR reviews and make changes as requested.

      For features, it is also crucial to get early feedback on implementation details. This is because some considerations may need to be exercised when introducing new user-facing syntax. Another problem is that the implementation may not be the most appropriate or straightforward one, sometimes due to how existing code is structured.

      Issue #1475 is an example where the work in PR #1988 involved changing the implementation midway.

      Summary

      In this part, we have reviewed the steps to implement a new feature. Working on a new feature can be a daunting task, but it is also very rewarding to own a feature from start to finish.

      Here are some additional tasks for you to try out:

      • Look through the mentioned PRs and try to understand how the features were implemented.
      • Look through the issue tracker and see if there are any features that you would like to work on.

      And...that's it!🚀🚀🚀

      You have completed the bootcamp! Take a well-deserved rest and we look forward to your contributions!


    +
    1. The PR preview is generated by netlify/markbind-master/deploy-preview.
    2. You can find the link to the PR preview in the checks section of the PR. PR Checks Section
    3. Open the link to the PR preview and ensure that your changes are reflected in the rendered site
  • Follow up with PR reviews and make changes as requested.
  • For features, it is also crucial to get early feedback on implementation details. This is because some considerations may need to be exercised when introducing new user-facing syntax. Another problem is that the implementation may not be the most appropriate or straightforward one, sometimes due to how existing code is structured.

    Issue #1475 is an example where the work in PR #1988 involved changing the implementation midway.

    Summary

    In this part, we have reviewed the steps to implement a new feature. Working on a new feature can be a daunting task, but it is also very rewarding to own a feature from start to finish.

    Here are some additional tasks for you to try out:

    • Look through the mentioned PRs and try to understand how the features were implemented.
    • Look through the issue tracker and see if there are any features that you would like to work on.

    And...that's it!🚀🚀🚀

    You have completed the bootcamp! Take a well-deserved rest and we look forward to your contributions!


    diff --git a/devGuide/bootcamp/implementAFeature.page-vue-render.js b/devGuide/bootcamp/implementAFeature.page-vue-render.js index c4d03765..2b030e67 100644 --- a/devGuide/bootcamp/implementAFeature.page-vue-render.js +++ b/devGuide/bootcamp/implementAFeature.page-vue-render.js @@ -56,6 +56,6 @@ with(this){return _c('ul',{staticClass:"contains-task-list"},[_c('li',{staticCla with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/fixABug.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Fix a Bug")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/settingUp.html"}},[_c('span',[_c('span',[_v("Setting up")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/bootcamp/intro.html b/devGuide/bootcamp/intro.html index c2ddfba5..70c2dfe4 100644 --- a/devGuide/bootcamp/intro.html +++ b/devGuide/bootcamp/intro.html @@ -27,7 +27,7 @@

    Onboarding Bootcamp

    Onboarding Bootcamp

    New developers are often confused about how to get started in brown-field projects. This onboarding bootcamp is created to ramp up developer familiarity with the MarkBind codebase and get you started with contributing (in a variety of ways) to MarkBind.

    In the following pages, we will go through a series of tasks and you are encouraged to follow along to walk through some of the typical development workflows. When in doubt, you can always refer to the rest of the developer guide for more information.

    Structure

    Each Task will include a "TLDR" section that summarizes the key objectives. This is intended for developers who wish to attempt the task on their own. The rest of the page will include a step-by-step guide and checkpoints -to help you complete the task.

    Summary of Tasks

    1. Explore MarkBind as a user
    2. Contribute to our documentation
    3. Fix a bug
    4. Implement a new feature

    Maintainers' Note

    This onboarding bootcamp is intended for developers who are keen to make more than just one contribution to the project. It is particularly well-suited for onboarding NUS Independent Work Module (CP3108A and CP3108B) and Thematic Systems Project (CS3281 aka Software Engineering in Live Projects) students, but may also be useful to any external developers who wish to dive deeper into the codebase. While we encourage all new developers to go through this process, it is optional and developers are welcome to jump straight into making contributions if they prefer.

    The maintenance of this onboarding bootcamp document does require effort. If you encounter any issues as the materials become outdated or have suggestions, we highly encourage you to submit an issue or make a pull request to update the materials. This will help us keep the onboarding process up-to-date and effective for future developers.


    +to help you complete the task.

    Summary of Tasks

    1. Explore MarkBind as a user
    2. Contribute to our documentation
    3. Fix a bug
    4. Implement a new feature

    Maintainers' Note

    This onboarding bootcamp is intended for developers who are keen to make more than just one contribution to the project. It is particularly well-suited for onboarding NUS Independent Work Module (CP3108A and CP3108B) and Thematic Systems Project (CS3281 aka Software Engineering in Live Projects) students, but may also be useful to any external developers who wish to dive deeper into the codebase. While we encourage all new developers to go through this process, it is optional and developers are welcome to jump straight into making contributions if they prefer.

    The maintenance of this onboarding bootcamp document does require effort. If you encounter any issues as the materials become outdated or have suggestions, we highly encourage you to submit an issue or make a pull request to update the materials. This will help us keep the onboarding process up-to-date and effective for future developers.


    diff --git a/devGuide/bootcamp/intro.page-vue-render.js b/devGuide/bootcamp/intro.page-vue-render.js index aef32f6d..b9952155 100644 --- a/devGuide/bootcamp/intro.page-vue-render.js +++ b/devGuide/bootcamp/intro.page-vue-render.js @@ -35,6 +35,6 @@ with(this){return _c('p',[_v("The maintenance of this onboarding bootcamp docume with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/devGuide.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Contributing")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/exploreMarkBind.html"}},[_c('span',[_c('span',[_v("Explore MarkBind as a User")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/design/architecture.html b/devGuide/design/architecture.html index ef48dd1f..8502aff9 100644 --- a/devGuide/design/architecture.html +++ b/devGuide/design/architecture.html @@ -26,9 +26,9 @@

    Architecture

    Architecture

    This page provides an overview of the MarkBind's architecture.

    MarkBind Architecture Diagram

    The above diagram shows the key classes and in MarkBind. You may note the following from these:

    Key classes

    The 3 key classes representing different types of content are as follows:

    1. Page — a page, as specified by the user in their various site configuration glob or src properties. These are directly managed by the Site instance.
    2. Layout — a single layout file, as contained in the _markbind/layouts folder, collectively managed by LayoutManager.

    Note that Layout instances do not generate any output files directly, but rather, they store intermediate processing results to be used in a Page.

    1. External — source files referenced in a Page, Layout or even another External that result in a output file. These output files are loaded dynamically and on-demand in the browser. These instances are managed by a single ExternalManager instance.

    For example, the file referenced by a <panel src="xx.md"> generates a separate xx._include_.html, which is requested and loaded only when the panel is expanded.

    Content processing flow

    Every Page, Layout and External follows the same overall content processing flow, that is:

    Nunjucks Markdown Html

    Note that generation of Externals (e.g. <panel src="...">) do not fall within the content processing flow where they are referenced. -These are only flagged for generation, and then processed by ExternalManager after, in another similar content processing flow within an External instance.

    Rationale

    This simple three stage flow provides a simple, predictable content processing flow for the user, and removes several other development concerns:

    1. As the templating language of choice, Nunjucks is always processed first, allowing its templating capabilities to be used to the full extent. -Its syntax is also the most compatible and independent of the other stages.

    2. Secondly, Markdown is rendered before HTML, which produces more HTML. This also allows core Markdown features (e.g. code blocks) and Markdown plugins with eccentric syntaxes to be used without having to patch the HTML parser.

    3. Having processed possibly conflicting Nunjucks and Markdown syntax, HTML is then processed last.


    +

    Architecture

    Architecture

    This page provides an overview of the MarkBind's architecture.

    MarkBind Architecture Diagram

    The above diagram shows the key classes and in MarkBind. You may note the following from these:

    Key classes

    The 3 key classes representing different types of content are as follows:

    1. Page — a page, as specified by the user in their various site configuration glob or src properties. These are directly managed by the Site instance.
    2. Layout — a single layout file, as contained in the _markbind/layouts folder, collectively managed by LayoutManager.

    Note that Layout instances do not generate any output files directly, but rather, they store intermediate processing results to be used in a Page.

    1. External — source files referenced in a Page, Layout or even another External that result in a output file. These output files are loaded dynamically and on-demand in the browser. These instances are managed by a single ExternalManager instance.

    For example, the file referenced by a <panel src="xx.md"> generates a separate xx._include_.html, which is requested and loaded only when the panel is expanded.

    Content processing flow

    Every Page, Layout and External follows the same overall content processing flow, that is:

    Nunjucks Markdown Html

    Note that generation of Externals (e.g. <panel src="...">) do not fall within the content processing flow where they are referenced. +These are only flagged for generation, and then processed by ExternalManager after, in another similar content processing flow within an External instance.

    Rationale

    This simple three stage flow provides a simple, predictable content processing flow for the user, and removes several other development concerns:

    1. As the templating language of choice, Nunjucks is always processed first, allowing its templating capabilities to be used to the full extent. +Its syntax is also the most compatible and independent of the other stages.

    2. Secondly, Markdown is rendered before HTML, which produces more HTML. This also allows core Markdown features (e.g. code blocks) and Markdown plugins with eccentric syntaxes to be used without having to patch the HTML parser.

    3. Having processed possibly conflicting Nunjucks and Markdown syntax, HTML is then processed last.


    diff --git a/devGuide/design/architecture.page-vue-render.js b/devGuide/design/architecture.page-vue-render.js index da36bfa9..67d21d1e 100644 --- a/devGuide/design/architecture.page-vue-render.js +++ b/devGuide/design/architecture.page-vue-render.js @@ -41,6 +41,6 @@ with(this){return _c('ol',[_c('li',[_c('p',[_v("As the templating language of ch with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/design/projectStructure.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Project Structure")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/design/serverSideRendering.html"}},[_c('span',[_c('span',[_v("Server Side Rendering")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/design/projectStructure.html b/devGuide/design/projectStructure.html index fd902e7e..bb1f4032 100644 --- a/devGuide/design/projectStructure.html +++ b/devGuide/design/projectStructure.html @@ -26,7 +26,7 @@

    Project Structure

    Project Structure

    This page gives you an overview of the MarkBind's internal project structure.

    Packages

    The MarkBind project is developed in a (MarkBind/markbind) of 4 packages:

    • The core library, which parses and processes MarkBind's various syntaxes, resides in the packages/core/ directory.

    • The command-line interface (CLI) application, which accepts commands from users and then uses the core library to parse and generate web pages, resides in the packages/cli/ directory.

    • The core web library, which contains a generated web bundle from various setup scripts and the UI components library, resides in packages/core-web/.

    • The UI components library, which MarkBind authors can use to create content with complex and interactive structure, resides in the packages/vue-components/ directory.

      Stack used: Node.js, Vue.js

    MarkBind core library

    The core library mainly houses:

    • Functions and libraries used to parse and process MarkBind into usable output are stored in src. The architecture described in Architecture is contained here. A brief rundown of what it includes:

      • Various key functionalities in processing MarkBind syntax into valid HTML output, stored in html. The other part of the content processing flow is found in variables, which manages site variables and facilitates the Nunjucks calls.

      • Page files generate a single page of the site, and are managed by the Site instance. Site uses the Page model's interface to generate pages, and performs various other utility-like functions related to site generation such as copying of external assets into the output folder.

      • Layout holds the files relating to the layout of the site and are managed by LayoutManager. Similarly, External files, which are separate output files to be loaded dynamically and on-demand, are managed by a ExternalManager instance.

      • Various libraries (contained in lib) and plugins (in plugins) are also stored here. Some external libraries have also been amended to suit MarkBind's purpose – see patches.

    • MarkBind's templates, used in the markbind init command.

    • Unit Tests (though there are more unit tests and functional tests in the cli library)

    The key external libraries used are:

    • markdown-it, which does the Markdown parsing and rendering. There are also several customized markdown-it plugins used in MarkBind, which are located inside the src/lib/markdown-it/ directory.

      • Several markdown-it plugins are installed to enhance the existing Markdown syntax. They can be found in src/package.json. Some of them are patched in the src/lib/markdown-it/patches/ directory to fit MarkBind's needs.

      • Additionally, there are some markdown-it plugins in the src/lib/markdown-it/plugins/ directory (either forked, modified or written to enhance existing functionalities).

    • htmlparser2, a speedy and forgiving HTML parser which exposes a DOM-like object structure to work on. To comply with the markdown spec, and our custom requirements, src/patches/htmlparser2.js patches various behaviours of this library.

    • cheerio, which is a node.js equivalent of jQuery. Cheerio uses htmlparser2 to parse the HTML as well, hence our patches propagate here.

    • Nunjucks, which is a JavaScript templating engine. Nunjucks is used to support our variable system to help with reusing small bits of code in multiple places. The package is patched and stored in src/patches/nunjucks to make it compatible with other MarkBind syntax processing steps.

    MarkBind CLI

    The CLI application uses and further builds on the interface exposed by the core library's Site model to provide functionalities for the author, such as markbind serve which initiates a live reload workflow.

    The key external libraries used are:

    • commander.js, which is a node.js CLI framework.

    • live-server, which is a simple web server for local development and preview of a MarkBind site. The package is patched and stored in src/lib/live-server with our custom fine tuning.

    MarkBind core-web library

    This package houses the various frontend assets used in the core package.

    Some external assets included are Vue.js, Bootstrap bundles, and FontAwesome bundles.

    Internal bundles are also present, generated from setup scripts, custom stylesheets and the UI components library.

    UI components library

    This package consists of a mix of Bootstrap and proprietary components rewritten in Vue.js based on our needs for educational websites.

    We forked it from the original yuche/vue-strap repo into the MarkBind/vue-strap repo, and then later merged it into the main MarkBind/markbind repo.

    The key dependencies used are:

    • Vue.js (required ^v2.x.x, test with v2.6.14).

    • Bootstrap CSS (required 5.x.x, test with 5.1.3). MarkBind's Vue components doesn't depend on a very precise version of Bootstrap.

    Some custom components and directives are also added for MarkBind's use.


    • MarkBind components newly created or revamped since moving

      • Modal.vue (built on Vue Final Modal)

      • Question.vue

      • QOption.vue

      • Quiz.vue

      • Popover.vue (built on floating-vue's Menu component)

      • Tooltip.vue (built on floating-vue's Tooltip component)

      • Trigger.vue (built on vue-final-modal's $vfm API and Floating Vue's Menus and Tooltips)

    • MarkBind components ported from MarkBind/vue-strap

      • Pic.vue

      • Retriever.vue

      • Searchbar.vue

      • SearchbarPageItem.vue

      • Thumbnail.vue

      • Box.vue

    • Custom directives ported from MarkBind/vue-strap

      • Closeable.js

      • Float.js

    • VueStrap components modified for use in MarkBind

      • Dropdown.vue

      • Navbar.vue

      • NestedPanel.vue

      • MinimalPanel.vue

      • Tab.vue

      • TabGroup.vue

      • Tabset.vue


    +

    Project Structure

    Project Structure

    This page gives you an overview of the MarkBind's internal project structure.

    Packages

    The MarkBind project is developed in a (MarkBind/markbind) of 4 packages:

    • The core library, which parses and processes MarkBind's various syntaxes, resides in the packages/core/ directory.

    • The command-line interface (CLI) application, which accepts commands from users and then uses the core library to parse and generate web pages, resides in the packages/cli/ directory.

    • The core web library, which contains a generated web bundle from various setup scripts and the UI components library, resides in packages/core-web/.

    • The UI components library, which MarkBind authors can use to create content with complex and interactive structure, resides in the packages/vue-components/ directory.

      Stack used: Node.js, Vue.js

    MarkBind core library

    The core library mainly houses:

    • Functions and libraries used to parse and process MarkBind into usable output are stored in src. The architecture described in Architecture is contained here. A brief rundown of what it includes:

      • Various key functionalities in processing MarkBind syntax into valid HTML output, stored in html. The other part of the content processing flow is found in variables, which manages site variables and facilitates the Nunjucks calls.

      • Page files generate a single page of the site, and are managed by the Site instance. Site uses the Page model's interface to generate pages, and performs various other utility-like functions related to site generation such as copying of external assets into the output folder.

      • Layout holds the files relating to the layout of the site and are managed by LayoutManager. Similarly, External files, which are separate output files to be loaded dynamically and on-demand, are managed by a ExternalManager instance.

      • Various libraries (contained in lib) and plugins (in plugins) are also stored here. Some external libraries have also been amended to suit MarkBind's purpose – see patches.

    • MarkBind's templates, used in the markbind init command.

    • Unit Tests (though there are more unit tests and functional tests in the cli library)

    The key external libraries used are:

    • markdown-it, which does the Markdown parsing and rendering. There are also several customized markdown-it plugins used in MarkBind, which are located inside the src/lib/markdown-it/ directory.

      • Several markdown-it plugins are installed to enhance the existing Markdown syntax. They can be found in src/package.json. Some of them are patched in the src/lib/markdown-it/patches/ directory to fit MarkBind's needs.

      • Additionally, there are some markdown-it plugins in the src/lib/markdown-it/plugins/ directory (either forked, modified or written to enhance existing functionalities).

    • htmlparser2, a speedy and forgiving HTML parser which exposes a DOM-like object structure to work on. To comply with the markdown spec, and our custom requirements, src/patches/htmlparser2.js patches various behaviours of this library.

    • cheerio, which is a node.js equivalent of jQuery. Cheerio uses htmlparser2 to parse the HTML as well, hence our patches propagate here.

    • Nunjucks, which is a JavaScript templating engine. Nunjucks is used to support our variable system to help with reusing small bits of code in multiple places. The package is patched and stored in src/patches/nunjucks to make it compatible with other MarkBind syntax processing steps.

    MarkBind CLI

    The CLI application uses and further builds on the interface exposed by the core library's Site model to provide functionalities for the author, such as markbind serve which initiates a live reload workflow.

    The key external libraries used are:

    • commander.js, which is a node.js CLI framework.

    • live-server, which is a simple web server for local development and preview of a MarkBind site. The package is patched and stored in src/lib/live-server with our custom fine tuning.

    MarkBind core-web library

    This package houses the various frontend assets used in the core package.

    Some external assets included are Vue.js, Bootstrap bundles, and FontAwesome bundles.

    Internal bundles are also present, generated from setup scripts, custom stylesheets and the UI components library.

    UI components library

    This package consists of a mix of Bootstrap and proprietary components rewritten in Vue.js based on our needs for educational websites.

    We forked it from the original yuche/vue-strap repo into the MarkBind/vue-strap repo, and then later merged it into the main MarkBind/markbind repo.

    The key dependencies used are:

    • Vue.js (required ^v2.x.x, test with v2.6.14).

    • Bootstrap CSS (required 5.x.x, test with 5.1.3). MarkBind's Vue components doesn't depend on a very precise version of Bootstrap.

    Some custom components and directives are also added for MarkBind's use.


    • MarkBind components newly created or revamped since moving

      • Modal.vue (built on Vue Final Modal)

      • Question.vue

      • QOption.vue

      • Quiz.vue

      • Popover.vue (built on floating-vue's Menu component)

      • Tooltip.vue (built on floating-vue's Tooltip component)

      • Trigger.vue (built on vue-final-modal's $vfm API and Floating Vue's Menus and Tooltips)

    • MarkBind components ported from MarkBind/vue-strap

      • Pic.vue

      • Retriever.vue

      • Searchbar.vue

      • SearchbarPageItem.vue

      • Thumbnail.vue

      • Box.vue

    • Custom directives ported from MarkBind/vue-strap

      • Closeable.js

      • Float.js

    • VueStrap components modified for use in MarkBind

      • Dropdown.vue

      • Navbar.vue

      • NestedPanel.vue

      • MinimalPanel.vue

      • Tab.vue

      • TabGroup.vue

      • Tabset.vue


    diff --git a/devGuide/design/projectStructure.page-vue-render.js b/devGuide/design/projectStructure.page-vue-render.js index 05cffee9..a08e1139 100644 --- a/devGuide/design/projectStructure.page-vue-render.js +++ b/devGuide/design/projectStructure.page-vue-render.js @@ -71,6 +71,6 @@ with(this){return _c('ul',[_c('li',[_c('p',[_c('strong',[_v("MarkBind components with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/migratingToTypeScript.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Migrating to TypeScript")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/design/architecture.html"}},[_c('span',[_c('span',[_v("Architecture")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/design/serverSideRendering.html b/devGuide/design/serverSideRendering.html index d4e948f5..eac5e04f 100644 --- a/devGuide/design/serverSideRendering.html +++ b/devGuide/design/serverSideRendering.html @@ -26,9 +26,9 @@

    Server Side Rendering

    Server Side Rendering

    MarkBind uses Server-side Rendering (SSR) for its pages.

    To ensure SSR works properly, there are certain rules that developers should adhere to.

    This page will describe SSR in general and elaborate on the caveats that developers should take note of when contributing to MarkBind.

    Pre-requisite Knowledge

    To deal with SSR, it is important to first have a good understanding of two things:

    1. Vue
    2. MarkBind's Packages

    Understanding Vue

    Here is a short list of questions to check your understanding of Vue:

    • What is a Vue instance?
    • What does it mean to compile Vue?
    • What are render functions?
    • Are there any differences between compiling Vue on client-side versus server-side?
    • What is the difference between compiling and rendering?
    Useful Resources to understand Vue better

    If there are any doubts regarding the questions above, here are some good resources to refer to:

    Understanding MarkBind's Packages

    There are four packages in MarkBind's codebase:

    1. cli
    2. core
    3. core-web
    4. vue-components

    You may refer to MarkBind's project structure to get a better understanding of how the packages work together.

    What is Server-side Rendering and Why?

    In MarkBind's context, SSR refers to the generation of proper HTML strings from Vue components on the server (core library) instead of shifting that responsibility to the client-side (browser).

    The main motivation that we had for introducing SSR into MarkBind is to enhance user experience by resolving the unsightly issue of Flash-of-Unstyled-Content (FOUC), which occurs due to our reliance on Client-side Rendering (CSR).

    Client-side Hydration

    SSR and Client-side Hydration are 2 concepts that go hand-in-hand. Essentially, once we produce the static HTML via SSR and send it over to the client-side, Vue on the client-side will execute what is known as Client-side Hydration on the static HTML.

    During the hydration process, Vue essentially compares your SSR HTML markup against the virtual DOM generated by the render function on the client-side. If any difference is found, meaning that the application that we have on the client-side (the virtual DOM tree) differs from the SSR HTML mark-up that we send to the client, Vue will reject the SSR HTML output, bail Client-side Hydration, and execute full CSR.

    This is known as "Hydration Issue" and it is one of the main challenges you will face with SSR in MarkBind.

    Using production build

    In production build, Vue does not perform hydration check. Any errors resulting from hydration will trigger full CSR without warning. MarkBind uses the development build by default when you serve it in development mode (-d option).

    Penalties of Hydration Issue

    When hydration fails, on top of the wasted time and effort in executing SSR, we will also incur the additional time penalty of executing Client-side Hydration (where CSR will follow afterwards).

    Fortunately, even if we face hydration issues and execute full CSR, the FOUC problem will still be resolved nonetheless. The reason for this is because the SSR HTML markup should resemble the CSR HTML markup to a large extent.

    Supposedly, hydration issues typically occurs due to minor differences between client-side rendered virtual DOM tree and the server-rendered content. Of course, this is assuming that we are adhering to the concept of "universal application" as much as possible, which will be explained in the following section.

    Avoiding Hydration Issue

    Conceptually, to prevent hydration issue, what we should always strive to achieve is a "universal application".

    It is not difficult to achieve a "universal application" per-se because we merely have to ensure two things:

    1. the initial state is the same between client-side and server-side.
    2. after compiling and rendering the Vue page application, the SSR HTML mark-up is not modified.

    Beyond achieving a "universal application", note that the HTML specifications should also be adhered to.

    Some common mistakes are as such:

    • Having block-level elements within <p> tag
    • Having unknown HTML elements within our Vue application during compilation/rendering (though this can be easily resolved by adding v-pre to the unknown element, so that Vue will ignore that element during compilation).

    If you are unsure what elements are allowed within other elements, or what constitutes invalid HTML in general, a good resource to reference would be the MDN Web Docs.

    +

    Server Side Rendering

    Server Side Rendering

    MarkBind uses Server-side Rendering (SSR) for its pages.

    To ensure SSR works properly, there are certain rules that developers should adhere to.

    This page will describe SSR in general and elaborate on the caveats that developers should take note of when contributing to MarkBind.

    Pre-requisite Knowledge

    To deal with SSR, it is important to first have a good understanding of two things:

    1. Vue
    2. MarkBind's Packages

    Understanding Vue

    Here is a short list of questions to check your understanding of Vue:

    • What is a Vue instance?
    • What does it mean to compile Vue?
    • What are render functions?
    • Are there any differences between compiling Vue on client-side versus server-side?
    • What is the difference between compiling and rendering?
    Useful Resources to understand Vue better

    If there are any doubts regarding the questions above, here are some good resources to refer to:

    Understanding MarkBind's Packages

    There are four packages in MarkBind's codebase:

    1. cli
    2. core
    3. core-web
    4. vue-components

    You may refer to MarkBind's project structure to get a better understanding of how the packages work together.

    What is Server-side Rendering and Why?

    In MarkBind's context, SSR refers to the generation of proper HTML strings from Vue components on the server (core library) instead of shifting that responsibility to the client-side (browser).

    The main motivation that we had for introducing SSR into MarkBind is to enhance user experience by resolving the unsightly issue of Flash-of-Unstyled-Content (FOUC), which occurs due to our reliance on Client-side Rendering (CSR).

    Client-side Hydration

    SSR and Client-side Hydration are 2 concepts that go hand-in-hand. Essentially, once we produce the static HTML via SSR and send it over to the client-side, Vue on the client-side will execute what is known as Client-side Hydration on the static HTML.

    During the hydration process, Vue essentially compares your SSR HTML markup against the virtual DOM generated by the render function on the client-side. If any difference is found, meaning that the application that we have on the client-side (the virtual DOM tree) differs from the SSR HTML mark-up that we send to the client, Vue will reject the SSR HTML output, bail Client-side Hydration, and execute full CSR.

    This is known as "Hydration Issue" and it is one of the main challenges you will face with SSR in MarkBind.

    Using production build

    In production build, Vue does not perform hydration check. Any errors resulting from hydration will trigger full CSR without warning. MarkBind uses the development build by default when you serve it in development mode (-d option).

    Penalties of Hydration Issue

    When hydration fails, on top of the wasted time and effort in executing SSR, we will also incur the additional time penalty of executing Client-side Hydration (where CSR will follow afterwards).

    Fortunately, even if we face hydration issues and execute full CSR, the FOUC problem will still be resolved nonetheless. The reason for this is because the SSR HTML markup should resemble the CSR HTML markup to a large extent.

    Supposedly, hydration issues typically occurs due to minor differences between client-side rendered virtual DOM tree and the server-rendered content. Of course, this is assuming that we are adhering to the concept of "universal application" as much as possible, which will be explained in the following section.

    Avoiding Hydration Issue

    Conceptually, to prevent hydration issue, what we should always strive to achieve is a "universal application".

    It is not difficult to achieve a "universal application" per-se because we merely have to ensure two things:

    1. the initial state is the same between client-side and server-side.
    2. after compiling and rendering the Vue page application, the SSR HTML mark-up is not modified.

    Beyond achieving a "universal application", note that the HTML specifications should also be adhered to.

    Some common mistakes are as such:

    • Having block-level elements within <p> tag
    • Having unknown HTML elements within our Vue application during compilation/rendering (though this can be easily resolved by adding v-pre to the unknown element, so that Vue will ignore that element during compilation).

    If you are unsure what elements are allowed within other elements, or what constitutes invalid HTML in general, a good resource to reference would be the MDN Web Docs.

    Modern browsers have robust inbuilt mechanisms to auto-correct common causes of hydration. Therefore, to avoid high false positive rate, Markbind has a minimalist rule-based validation against violations. The code for this is located in `core/src/utils/htmlValidationUtils.ts`. -

    Please help extend it when violations that cause hydration on browsers are spotted.

    Note that the list only included the common causes of hydration issue that MarkBind developers have ran into. There may be other causes of hydration issue that are not listed here (although unlikely).


    +

    Please help extend it when violations that cause hydration on browsers are spotted.

    Note that the list only included the common causes of hydration issue that MarkBind developers have ran into. There may be other causes of hydration issue that are not listed here (although unlikely).


    diff --git a/devGuide/design/serverSideRendering.page-vue-render.js b/devGuide/design/serverSideRendering.page-vue-render.js index dd86e5a6..e5cc3886 100644 --- a/devGuide/design/serverSideRendering.page-vue-render.js +++ b/devGuide/design/serverSideRendering.page-vue-render.js @@ -56,6 +56,6 @@ with(this){return _c('ul',[_c('li',[_v("Having block-level elements within "),_c with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/design/architecture.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Architecture")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/overview.html"}},[_c('span',[_c('span',[_v("GitHub Actions: Overview")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/devGuide.html b/devGuide/devGuide.html index 31112e2e..9f064f2d 100644 --- a/devGuide/devGuide.html +++ b/devGuide/devGuide.html @@ -26,7 +26,7 @@

    Contributing

    Developer guide

    Contributing

    Thank you for your interest in contributing! We're glad you want to help. We welcome PRs, especially from students.

    First, do take note of our code of conduct (from SE-EDU). Reporting bugs or submitting feature suggestions in our issue tracker can help too.

    Second, ensure you have a basic knowledge of the following:

    • JavaScript (ES6)
    • Node.js
    • HTML & CSS
    • Markdown
    • Command-line environment

    Third, ensure you have spent time with MarkBind and familiar with the content of the user guide. It's important to know the product well before you start contributing code.

    Now, follow these steps to get started on contributing:

    1. Set up the project in your computer (see the Setting up page)
    2. Learn our workflow (see the Workflow page)
    3. (Optional) Go through our onboarding bootcamp (see the Onboarding Bootcamp page)
    4. Submit PRs as per the workflow. If you encounter any problems, post in our issue tracker.
    5. (Optional) Add yourself to the contributors list! (Bug reported? PR merged? If you haven't done so already, add yourself to our list of contributors!)

    We look forward to your PR. Happy coding!


    +

    Contributing

    Developer guide

    Contributing

    Thank you for your interest in contributing! We're glad you want to help. We welcome PRs, especially from students.

    First, do take note of our code of conduct (from SE-EDU). Reporting bugs or submitting feature suggestions in our issue tracker can help too.

    Second, ensure you have a basic knowledge of the following:

    • JavaScript (ES6)
    • Node.js
    • HTML & CSS
    • Markdown
    • Command-line environment

    Third, ensure you have spent time with MarkBind and familiar with the content of the user guide. It's important to know the product well before you start contributing code.

    Now, follow these steps to get started on contributing:

    1. Set up the project in your computer (see the Setting up page)
    2. Learn our workflow (see the Workflow page)
    3. (Optional) Go through our onboarding bootcamp (see the Onboarding Bootcamp page)
    4. Submit PRs as per the workflow. If you encounter any problems, post in our issue tracker.
    5. (Optional) Add yourself to the contributors list! (Bug reported? PR merged? If you haven't done so already, add yourself to our list of contributors!)

    We look forward to your PR. Happy coding!


    diff --git a/devGuide/devGuide.page-vue-render.js b/devGuide/devGuide.page-vue-render.js index bca16254..0e28ebd2 100644 --- a/devGuide/devGuide.page-vue-render.js +++ b/devGuide/devGuide.page-vue-render.js @@ -41,6 +41,6 @@ with(this){return _c('p',[_c('strong',[_v("We look forward to your PR. Happy cod with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/intro.html"}},[_c('span',[_c('span',[_v("Onboarding Bootcamp")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/development/migratingNodeJs.html b/devGuide/development/migratingNodeJs.html index 1696f77e..a8a47047 100644 --- a/devGuide/development/migratingNodeJs.html +++ b/devGuide/development/migratingNodeJs.html @@ -28,7 +28,7 @@ ››  

    Migrating Node.js

    Migrating Node.js

    Node.js versions have to upgraded periodically before the version being used reaches its end of life. This page outlines the steps of migrating to a higher version of Node.js.

    Preparation

    Choosing Node.js version

    Before upgrading the Node.js version, it is important to decide which version to upgrade to. -Broadly speaking, migrate only to even-numbered Node.js releases as only even-numbered versions will be provided with Long-Term Support.

    Read more about Node.js release lines here.

    The npm version will be upgraded automatically accordingly to the Node.js version since it is downloaded alongside Node.js. Hence, do check that this upgrade does not cause any issues.

    +Broadly speaking, migrate only to even-numbered Node.js releases as only even-numbered versions will be provided with Long-Term Support.

    Read more about Node.js release lines here.

    The npm version will be upgraded automatically accordingly to the Node.js version since it is downloaded alongside Node.js. Hence, do check that this upgrade does not cause any issues.

    If a different version of npm is needed this can be overridden. This will be explained further below.

    Setup

    Install to help switch between different node versions. Switch to use the Node.js version that you are migrating to.

    Migration steps

    1. Refactor any deprecated syntax @@ -37,14 +37,14 @@
      • Set up the development environment by running through the steps in Setting Up to ensure there are no problems
    2. Update GitHubActions
    3. Check deployment to Netlify/other platforms +
    4. Check deployment to Netlify/other platforms
      • Deployment to Netlify -
        • Follow steps in Deploying to Netlify but change the NODE_VERSION value accordingly. Check there are no issues with deployment and deployed site is as expected.

        • MarkBind has two repos init-minimal-netlify and init-typical-netlify which allows deployment to Netlify by using a config file. Update the config file netlify.toml with the correct Node.js version and check that deployment using button in README works as expected.

          If a different npm version is needed

          To specify the npm version add an environment variable NPM_VERSION with the correct version number.

      • Deployment to Github pages +
        • Follow steps in Deploying to Netlify but change the NODE_VERSION value accordingly. Check there are no issues with deployment and deployed site is as expected.

        • MarkBind has two repos init-minimal-netlify and init-typical-netlify which allows deployment to Netlify by using a config file. Update the config file netlify.toml with the correct Node.js version and check that deployment using button in README works as expected.

          If a different npm version is needed

          To specify the npm version add an environment variable NPM_VERSION with the correct version number.

      • Deployment to Github pages
        • Using the markbind deploy command
        • Using CI platforms -
          • Follow steps in Using CI Platforms but update the config files for the various CI Platforms to use the correct Node.js version. Try deploying and ensure there are no problems with deployment.

            If a different npm version is needed

            +
            • Follow steps in Using CI Platforms but update the config files for the various CI Platforms to use the correct Node.js version. Try deploying and ensure there are no problems with deployment.

              If a different npm version is needed

              Install the correct npm version before running npm commands.
      • Update documentation -
      • Update neftlify.toml
        • The neftlify.toml file in the markbind repo's root directory is used to deploy our documentation site to Netlify. Update the NODE_VERSION value to the new Node.js version.

    +
  • Update neftlify.toml
    • The neftlify.toml file in the markbind repo's root directory is used to deploy our documentation site to Netlify. Update the NODE_VERSION value to the new Node.js version.

  • diff --git a/devGuide/development/migratingNodeJs.page-vue-render.js b/devGuide/development/migratingNodeJs.page-vue-render.js index e7c63df6..fc6285db 100644 --- a/devGuide/development/migratingNodeJs.page-vue-render.js +++ b/devGuide/development/migratingNodeJs.page-vue-render.js @@ -59,6 +59,6 @@ with(this){return _c('li',[_v("Update "),_c('code',{pre:true,attrs:{"class":"hlj with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/writingPlugins.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Writing Plugins")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/design/projectStructure.html"}},[_c('span',[_c('span',[_v("Project Structure")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/development/migratingToTypeScript.html b/devGuide/development/migratingToTypeScript.html index e4cf1dca..93e55b91 100644 --- a/devGuide/development/migratingToTypeScript.html +++ b/devGuide/development/migratingToTypeScript.html @@ -26,7 +26,7 @@

    Migrating to TypeScript

    Migrating to TypeScript

    In order to improve the quality and security of our backend code, we are introducing TypeScript to our codebase to leverage the type-checking system. This page outlines the steps of migrating existing files into TypeScript.

    Migration Steps

    The TypeScript migration process is a little different than normal development work, as maintainers would not follow the normal procedure of creating a squash commit. Instead, they will do a rebase and merge, and therefore migration developers will need to structure the commits in a particular way.

    We have decided on structuring the commits as two commits: a "Rename" commit and an "Adapt" commit. If you need further context on the approach, feel free to read the Explanation Notes section below.

    Step 1: Preparation

    1. If running, stop automatic compilation on change/save. More on this at Editing backend features section in the Workflow page.

    2. Install typings of external dependencies relevant to the files, if there's any that hasn't been installed yet.

      Generally, external modules have their typings published as another module named @types/<lib-name> (e.g. @types/jest) or bundled alongside their implementation. You can check which is the case here. Check for @types/<lib-name> first, then check for <lib-name> itself if not found.

      If the dependency has its typings:

      • Bundled alongside their implementation, you don't need to do anything else.

      • In a @types/<lib-name> module, install it as a development dependency for the core package by navigating to packages/core and running npm i -D @types/<lib-name>.

        After installing all necessary typings, delete the generated packages/core/package-lock.json, navigate back to the root directory, and run npm run setup.

        It's recommended to try to match the @types/<lib-name> version with the associated module. In general, try to match the major and minor version as closely as possible.

    3. Stash the changes (packages/core/package.json and root package-lock.json). +

    Migrating to TypeScript

    Migrating to TypeScript

    In order to improve the quality and security of our backend code, we are introducing TypeScript to our codebase to leverage the type-checking system. This page outlines the steps of migrating existing files into TypeScript.

    Migration Steps

    The TypeScript migration process is a little different than normal development work, as maintainers would not follow the normal procedure of creating a squash commit. Instead, they will do a rebase and merge, and therefore migration developers will need to structure the commits in a particular way.

    We have decided on structuring the commits as two commits: a "Rename" commit and an "Adapt" commit. If you need further context on the approach, feel free to read the Explanation Notes section below.

    Step 1: Preparation

    1. If running, stop automatic compilation on change/save. More on this at Editing backend features section in the Workflow page.

    2. Install typings of external dependencies relevant to the files, if there's any that hasn't been installed yet.

      Generally, external modules have their typings published as another module named @types/<lib-name> (e.g. @types/jest) or bundled alongside their implementation. You can check which is the case here. Check for @types/<lib-name> first, then check for <lib-name> itself if not found.

      If the dependency has its typings:

      • Bundled alongside their implementation, you don't need to do anything else.

      • In a @types/<lib-name> module, install it as a development dependency for the core package by navigating to packages/core and running npm i -D @types/<lib-name>.

        After installing all necessary typings, delete the generated packages/core/package-lock.json, navigate back to the root directory, and run npm run setup.

        It's recommended to try to match the @types/<lib-name> version with the associated module. In general, try to match the major and minor version as closely as possible.

    3. Stash the changes (packages/core/package.json and root package-lock.json).
      This will be added back during the "Adapt" commit later.

    Step 2: "Rename" Commit

    1. Add the paths of the .js files to .gitignore and .eslintignore.
      @@ -34,11 +34,11 @@
      Ensure the renamed files are regarded by Git as renamed and not added.

    2. Commit the staged changes with the message Rename <file-or-folder> to TypeScript.
      -For example: Rename core/src/html to TypeScript.

      Any of the MarkBind-specific git hooks that have been installed during the setup process will automatically build the backend. If you encounter any compilation errors while committing and/or pushing the "Rename" commit due to git hooks, skip the hooks using the --no-verify flag. -For example: git commit --no-verify -m "Rename core/src/html to TypeScript".

    Step 3: "Adapt" Commit

    1. Start automatic compilation on change/save. More on this at Editing backend features section in the Workflow page.

    2. Change the CommonJS module import/export syntax to TypeScript's equivalent syntax (use ES6 syntax only if possible).

      A common error in newly renamed files comes from the way modules are imported/exported. Those statements can be converted according to the Import/Export Syntax Reference section below. The steps are as follows:

      1. Start by changing the import/export statements into TypeScript equivalent syntax. Be careful with imports as you have to match them with the export syntax that the modules use, be it TypeScript equivalent or ES6.

      2. Check whether it is possible to change the export to use ES6 syntax. As mentioned in the syntax reference, ES6 should not be used if the module only exports a single thing. Change to ES6 syntax only if possible, otherwise keep with TypeScript equivalent syntax.

      3. You might have to adjust how the files are imported by other TypeScript (.ts) files. If you are changing the export to the TypeScript equivalent syntax, then it must be imported the same way as well. The same goes for the ES6 syntax.

    3. Adapt the files fully to TypeScript.

      The errors from TypeScript and typescript-eslint can guide you on what to fix. Only fix what is necessary and be careful with accidentally modifying any code functionality. Avoid using any as best as you can.

      If you happen to encounter type errors related to using names (of constant, properties, members, etc.) from another MarkBind import that is still in JavaScript (.js), you can try to infer simple types in your file first as a "stand-in" of the more robust types when that internal dependency is eventually migrated.

      On the flip side of the above situation, once you have developed a robust type for your own file, adjust how other TypeScript (.ts) files type names referenced from your files as applicable. Some type declarations might need to be made stricter, or can be removed if it's not necessary anymore, and so on. This will ensure that the files will be incrementally stricter.

    4. Make sure everything is in order by running npm run test in the root directory.

      The core package tests can directly run on the .ts files (powered by ts-jest), and the cli package tests uses the compiled files from core. Therefore, passing the cli tests means that it is very likely the compiled files work as expected.

    5. Stage the adapted files and the typings from Step 1 for commit. Verify the changes before committing.

    6. Commit the changes with the message Adapt <file-or-folder> to TypeScript. +For example: Rename core/src/html to TypeScript.

      Any of the MarkBind-specific git hooks that have been installed during the setup process will automatically build the backend. If you encounter any compilation errors while committing and/or pushing the "Rename" commit due to git hooks, skip the hooks using the --no-verify flag. +For example: git commit --no-verify -m "Rename core/src/html to TypeScript".

    Step 3: "Adapt" Commit

    1. Start automatic compilation on change/save. More on this at Editing backend features section in the Workflow page.

    2. Change the CommonJS module import/export syntax to TypeScript's equivalent syntax (use ES6 syntax only if possible).

      A common error in newly renamed files comes from the way modules are imported/exported. Those statements can be converted according to the Import/Export Syntax Reference section below. The steps are as follows:

      1. Start by changing the import/export statements into TypeScript equivalent syntax. Be careful with imports as you have to match them with the export syntax that the modules use, be it TypeScript equivalent or ES6.

      2. Check whether it is possible to change the export to use ES6 syntax. As mentioned in the syntax reference, ES6 should not be used if the module only exports a single thing. Change to ES6 syntax only if possible, otherwise keep with TypeScript equivalent syntax.

      3. You might have to adjust how the files are imported by other TypeScript (.ts) files. If you are changing the export to the TypeScript equivalent syntax, then it must be imported the same way as well. The same goes for the ES6 syntax.

    3. Adapt the files fully to TypeScript.

      The errors from TypeScript and typescript-eslint can guide you on what to fix. Only fix what is necessary and be careful with accidentally modifying any code functionality. Avoid using any as best as you can.

      If you happen to encounter type errors related to using names (of constant, properties, members, etc.) from another MarkBind import that is still in JavaScript (.js), you can try to infer simple types in your file first as a "stand-in" of the more robust types when that internal dependency is eventually migrated.

      On the flip side of the above situation, once you have developed a robust type for your own file, adjust how other TypeScript (.ts) files type names referenced from your files as applicable. Some type declarations might need to be made stricter, or can be removed if it's not necessary anymore, and so on. This will ensure that the files will be incrementally stricter.

    4. Make sure everything is in order by running npm run test in the root directory.

      The core package tests can directly run on the .ts files (powered by ts-jest), and the cli package tests uses the compiled files from core. Therefore, passing the cli tests means that it is very likely the compiled files work as expected.

    5. Stage the adapted files and the typings from Step 1 for commit. Verify the changes before committing.

    6. Commit the changes with the message Adapt <file-or-folder> to TypeScript.
      For example, Adapt core/src/html to TypeScript.

    You are now ready to create a pull request for the changes to the repository.

    (Optional) Step 4: Changing the commit

    While refactoring you may encounter scenarios where you might have to amend your code after a commit. There are 2 common scenarios which we will cover.

    Scenario 1: You have 2 commits and want to add on to the second commit.


    Scenario 2: You have more than 2 commits and want to make it into 2 commits.



    Example of Migrated Works

    You can see these pull requests to observe the finished migration works:

    Import/Export Syntax Reference

    Here is the reference on changing the import/export statements from CommonJS syntax into those that TypeScript support: TypeScript equivalent syntax, and ES6 syntax.

    The TypeScript equivalent syntax is designed to compile to the exact same code as CommonJS. You can read more about this syntax in the official documentation.

    The ES6 syntax is the newer JavaScript syntax that TypeScript recommends, but in certain cases it does not compile to the exact same code as CommonJS. We simplify the concepts here for illustration, refer to the StackOverflow post here for more details.

    In the tables below, a "thing" is defined as a JavaScript construct that can be exported, such as constants, functions, classes, etc. In ES6 syntax, a "thing" can also be TypeScript constructs like types, interfaces, enums, etc.

    Exports

    What to Export CommonJS TypeScript equivalent ES6
    One thing only module.exports = x export = x export default x  ^
    Object of one/more things module.exports = { x, y, z } export = { x, y, z } export { x, y, z }

    ^: For compatibility, do not use export default during migration. It is compiled differently and does not play well with dependants that are still in .js, unless some clunky modifications are made in the .js files (refer to the StackOverflow post previously linked).

    Imports from a module that exports one thing only

    What to Import CommonJS TypeScript equivalent ES6
    Exported thing const x = require(a) import x = require(a)  ^ import x from a  ^

    ^: You can only use TypeScript equivalent syntax when the exported module is also in the TypeScript equivalent syntax. The same goes for the ES6 syntax.

    Imports from a module that exports an object of one/more things

    What to Import CommonJS TypeScript equivalent ES6
    Entire object const w = require(a) import w = require(a) import * as w from a
    Selected things const { x } = require(a) N/A  ^ import { x } from a

    ^: While not equivalent on the compile-level, this can be achieved by importing the entire object then destructuring the object.

    Explanation Notes

    Why do we need to separate "Rename" and "Adapt" commits

    We want to keep the file history intact throughout this migration, meaning that we should still be able to see the change history of the .ts files even from the time when they were still in .js.

    When we rename files, we have to keep the Git similarity index between the old file and the new file above a certain threshold (50%) to keep the history, or else it will be regarded as a different file with its own history.

    Combining the two steps into one - that is, adapting files immediately after renaming - will lower the similarity index, therefore making it possible for the files, especially small ones or those that need a lot of changes when adapting, to hit below the similarity threshold and lose their history.

    The solution to this is to make the rename and adapt commits separate, in order for Git to recognize first that the file has changed into .ts, and so the changes are compared not against the old .js file, but to the renamed .ts file instead.

    Why do we need a rebase and merge commit

    Even if the migration developer has kept the history intact through the separate "Rename" and "Adapt" commits, this is only intact at their working branch. At the end of the day, the totality of the changes in the working branch is compared against the target branch, in which the same consideration would apply.

    If we do the usual squash commit, the changes from the two commits are combined into a new commit and only that commit will be pushed into the target branch. The original two commits are omitted, therefore the history of the working branch that we have tried to keep intact is stripped away. This results in a linear history, as if the changes in the working branch were made -after the latest changes in the target branch.


    +after the latest changes in the target branch.


    diff --git a/devGuide/development/migratingToTypeScript.page-vue-render.js b/devGuide/development/migratingToTypeScript.page-vue-render.js index 7ebea7aa..c459b1c7 100644 --- a/devGuide/development/migratingToTypeScript.page-vue-render.js +++ b/devGuide/development/migratingToTypeScript.page-vue-render.js @@ -131,6 +131,6 @@ with(this){return _c('h3',{attrs:{"id":"why-do-we-need-a-rebase-and-merge-commit with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/writingPlugins.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Writing Plugins")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/design/projectStructure.html"}},[_c('span',[_c('span',[_v("Project Structure")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/development/settingUp.html b/devGuide/development/settingUp.html index 6f531e65..f1d12d3f 100644 --- a/devGuide/development/settingUp.html +++ b/devGuide/development/settingUp.html @@ -26,12 +26,12 @@

    Setting up

    Setting up

    This page explains how to set up your development environment to start contributing to MarkBind.

    Prerequisites

    1. Node.js ( or higher) with
      npm v8 or higher

    2. Java 8 or higher, and
      Graphviz ( or higher, installation is optional on Windows)
      (The above two are required for one of the third-party libraries used by MarkBind)

    3. Python 3 or later, and
      (Required if using python pre-commit hooks)

    4. Verify that all tools are accessible and the versions are as expected by running these commands in the console.

      • node --version
      • npm --version
      • java --version
      • dot -V (for Graphviz - optional on Windows)
      • python3 -V

    With Node LTS (v20), the python used has updated to 3.12, and you may get an error. You can solve this issue by installing setuptools or deprecating the versions used.

    We recommend the WebStorm IDE or VS Code for working with MarkBind code.

    Setting up the dev environment

    1. Fork and clone the MarkBind repo.

    2. Bind your cloned version of MarkBind to your console by navigating to the cloned packages/cli folder and running npm link

    3. Install dependencies by running +

    Setting up

    Setting up

    This page explains how to set up your development environment to start contributing to MarkBind.

    Prerequisites

    1. Node.js ( or higher) with
      npm v8 or higher

    2. Java 8 or higher, and
      Graphviz ( or higher, installation is optional on Windows)
      (The above two are required for one of the third-party libraries used by MarkBind)

    3. Python 3 or later, and
      (Required if using python pre-commit hooks)

    4. Verify that all tools are accessible and the versions are as expected by running these commands in the console.

      • node --version
      • npm --version
      • java --version
      • dot -V (for Graphviz - optional on Windows)
      • python3 -V

    With Node LTS (v20), the python used has updated to 3.12, and you may get an error. You can solve this issue by installing setuptools or deprecating the versions used.

    We recommend the WebStorm IDE or VS Code for working with MarkBind code.

    Setting up the dev environment

    1. Fork and clone the MarkBind repo.

    2. Bind your cloned version of MarkBind to your console by navigating to the cloned packages/cli folder and running npm link

    3. Install dependencies by running in the root folder of your cloned repo.

    4. Congratulations! Now you are ready to start modifying MarkBind code.

    There are a few Git hooks implemented using the pre-commit tool that runs common tasks like linting, automated tests and compiling typescript files.

    Install the hooks by running python3 ./pre-commit/pre-commit-2.20.0.pyz install in the root folder of your cloned repo.

    If you ever need to uninstall the hooks, simply run uninstall instead of install.

    Common setup questions

    1. Does MarkBind work with all operating systems?

      Yes! We support all operating systems.

    2. How does MarkBind manage dependencies?

      MarkBind uses lerna, a popular multi-package development tool, to manage its dependencies. It is essentially a high level wrapper over node and npm's functionalities.

    3. How do I move back to the released version of MarkBind?

      To go back to the released version of MarkBind, run -npm un -g markbind-cli, followed by npm i -g markbind-cli.

    4. Some of my front-end components are not working as expected when running markbind serve.

      Try running either markbind serve -d or npm run build:web to view frontend changes (especially after pulling a frontend update that someone else may have pushed). You can see more details here.


    +npm un -g markbind-cli, followed by npm i -g markbind-cli.

  • Some of my front-end components are not working as expected when running markbind serve.

    Try running either markbind serve -d or npm run build:web to view frontend changes (especially after pulling a frontend update that someone else may have pushed). You can see more details here.


  • diff --git a/devGuide/development/settingUp.page-vue-render.js b/devGuide/development/settingUp.page-vue-render.js index c09e7926..0f4c4ff4 100644 --- a/devGuide/development/settingUp.page-vue-render.js +++ b/devGuide/development/settingUp.page-vue-render.js @@ -56,6 +56,6 @@ with(this){return _c('ol',[_c('li',[_c('p',[_v("Does MarkBind work with all oper with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/bootcamp/implementAFeature.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Implement a New Feature")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/workflow.html"}},[_c('span',[_c('span',[_v("Workflow")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/development/workflow.html b/devGuide/development/workflow.html index e28e307f..82e320bf 100644 --- a/devGuide/development/workflow.html +++ b/devGuide/development/workflow.html @@ -27,15 +27,15 @@

    Workflow

    Workflow

    Our workflow is mostly based on the guidelines given at se-education.org/guides. This page points to the relevant parts of those guides and provide additional details specific to MarkBind.

    To submit a PR, follow this guide, but note the following:

    • You can start by looking through these issues marked good first issue. Don't do more than one of them though.
    • As we squash the commits when merging a PR, there is no need to follow a strict commit organization or write elaborate commit messages for each commit.
    • You can refer to the Design page to learn about the design and implementation of MarkBind.

    The sections below has more information about various stages of submitting a PR.

    Writing code

    General tips

    • Use JavaScript ES6 features if possible for better performance, e.g. Promise instead of callback.

    • Do note our style guides.

    • Do set up your IDE debugger! We provide several sample configurations for WebStorm and VS Code.

    Keeping your fork up to date

    When new PRs are merged into the master branch, your master branch will be out of sync with the main repository. One way to update your branches to branch from the latest master is as follows:

    1. Go to your fork on GitHub and click 'Sync fork' to update your remote master branch -

    2. Checkout and sync your local master (the name of your local branch that tracks the remote master) branch with git checkout master && git pull

    3. Checkout your feature branch and rebase the branch with git rebase master or merge master into the branch with git merge master

    4. Fix any merge conflicts (if applicable)

    You may want to use a tool like GitTown to speed up the process.

    Editing backend features

    Some of our backend code files in packages/core are written in TypeScript, and you will need to compile those into JavaScript for local execution with our command-line module packages/cli.

    You can run npm run build:backend in the root directory to compile the files, but in some cases, it might be tedious to manually execute the command many times. We recommend you to either:

    1. Run npm run dev in the root directory. (Recommended for TypeScript migration)

      This command starts the compiler's file watcher which will rebuild the relavant files when file changes are detected.

    2. Configure your IDE to perform automatic compilation on file change/save. (Recommended for general development)

      Refer to your IDE's guides to set this up. For instance, here are the guides for WebStorm and Visual Studio Code.

    Editing frontend features

    We update the frontend markbind.min.js and markbind.min.css bundles during release only, and not in pull requests.

    Hence, if you need to view the latest frontend changes (relating to packages/core-web or packages/vue-components), you can either:

    1. Run markbind serve -d (with any other applicable options). (recommended)
      +

    2. Checkout and sync your local master (the name of your local branch that tracks the remote master) branch with git checkout master && git pull

    3. Checkout your feature branch and rebase the branch with git rebase master or merge master into the branch with git merge master

    4. Fix any merge conflicts (if applicable)

    You may want to use a tool like GitTown to speed up the process.

    Editing backend features

    Some of our backend code files in packages/core are written in TypeScript, and you will need to compile those into JavaScript for local execution with our command-line module packages/cli.

    You can run npm run build:backend in the root directory to compile the files, but in some cases, it might be tedious to manually execute the command many times. We recommend you to either:

    1. Run npm run dev in the root directory. (Recommended for TypeScript migration)

      This command starts the compiler's file watcher which will rebuild the relavant files when file changes are detected.

    2. Configure your IDE to perform automatic compilation on file change/save. (Recommended for general development)

      Refer to your IDE's guides to set this up. For instance, here are the guides for WebStorm and Visual Studio Code.

    Editing frontend features

    We update the frontend markbind.min.js and markbind.min.css bundles during release only, and not in pull requests.

    Hence, if you need to view the latest frontend changes (relating to packages/core-web or packages/vue-components), you can either:

    1. Run markbind serve -d (with any other applicable options). (recommended)
      This adds the necessary webpack middlewares to the development server to compile the above bundles, and enables live and hot reloading for frontend source files.
    2. Run npm run build:web in the root directory, which builds the above bundles, -then run your markbind-cli command of choice.

    Testing

    Our test script does the following:

    1. Lints the code (.ts, .js, .vue) and stylesheets (.css) for any style errors using ESLint and StyleLint.
    2. Runs unit tests for all packages with Jest.
    3. Builds the test sites whose directory names are listed in packages/cli/test/functional/testSites.js.
    4. For each test site, compares the HTML files generated with the HTML files in its expected directory.

    To run the test script, use: npm run test

    If you only want to run tests for one of the packages (packages/*), simply switch into the appropriate directory and use npm run test as well!

    Updating and writing tests

    Updating unit tests

    Our unit tests perform fast, stable, and comprehensive checks on important behaviors of our classes and functions. Some existing tests can be found in the packages/cli/test/unit and packages/core/test/unit directory. Where appropriate, unit tests should be added/modified to account for any new/changed functionality.

    Updating functional tests

    Whether you are adding a new feature, updating existing features or fixing bugs, make sure to update the source test files (test sites, snapshots) to reflect the changes.

    After which, you can update the with: npm run updatetest

    You should always check that the generated output is correct before committing any changes to the test sites.

    Note that some binary files such as images (e.g. inline-output.png) or fonts (e.g. material-icons-outlined.woff) could show up -as uncommitted changes due to the way they are generated. If you are not directly modifying those files in your PR, you should discard those changes and do not commit them.

    Here are the steps to solve merge conflicts in expected test files:

    1. Ensure that your fork is synced with the upstream repository.
    2. Ensure that the master branch of your local repository is in sync with the master branch of your fork. -Pull from the fork into your local repository as needed.
    3. Checkout from your master branch to your PR branch. -
      • git checkout [BRANCH NAME]
    4. Merge your master branch into your PR branch. -
      • git merge master
    5. Accept all changes to any merge conflicts in the generated expected test files. -
      • It does not matter which changes are accepted, as they will be overridden in the following step.
    6. Once your master branch has been successfully merged into your PR branch, run npm run updatetest to generate the latest test files.
    Adding test site content

    When adding new features, you should also add new site content into an existing test site or create a new test site to demonstrate the new feature. This is to ensure that your feature can be tested by building that test site.

    To add a page to an existing test site, for this example, to test_site:

    1. Add a new test page, e.g., newTestPage.md, containing a demonstration of the new feature.

    2. Open the site.json corresponding to the test site, i.e. packages/cli/test/functional/test_site/site.json

    3. To include the new page, i.e. newTestPage.md, add it to the pages array.

      site.json
      "pages": [
      +then run your markbind-cli command of choice.

    Testing

    Our test script does the following:

    1. Lints the code (.ts, .js, .vue) and stylesheets (.css) for any style errors using ESLint and StyleLint.
    2. Runs unit tests for all packages with Jest.
    3. Builds the test sites whose directory names are listed in packages/cli/test/functional/testSites.js.
    4. For each test site, compares the HTML files generated with the HTML files in its expected directory.

    To run the test script, use: npm run test

    If you only want to run tests for one of the packages (packages/*), simply switch into the appropriate directory and use npm run test as well!

    Updating and writing tests

    Updating unit tests

    Our unit tests perform fast, stable, and comprehensive checks on important behaviors of our classes and functions. Some existing tests can be found in the packages/cli/test/unit and packages/core/test/unit directory. Where appropriate, unit tests should be added/modified to account for any new/changed functionality.

    Updating functional tests

    Whether you are adding a new feature, updating existing features or fixing bugs, make sure to update the source test files (test sites, snapshots) to reflect the changes.

    After which, you can update the with: npm run updatetest

    You should always check that the generated output is correct before committing any changes to the test sites.

    Note that some binary files such as images (e.g. inline-output.png) or fonts (e.g. material-icons-outlined.woff) could show up +as uncommitted changes due to the way they are generated. If you are not directly modifying those files in your PR, you should discard those changes and do not commit them.

    Here are the steps to solve merge conflicts in expected test files:

    1. Ensure that your fork is synced with the upstream repository.
    2. Ensure that the master branch of your local repository is in sync with the master branch of your fork. +Pull from the fork into your local repository as needed.
    3. Checkout from your master branch to your PR branch. +
      • git checkout [BRANCH NAME]
    4. Merge your master branch into your PR branch. +
      • git merge master
    5. Accept all changes to any merge conflicts in the generated expected test files. +
      • It does not matter which changes are accepted, as they will be overridden in the following step.
    6. Once your master branch has been successfully merged into your PR branch, run npm run updatetest to generate the latest test files.
    Adding test site content

    When adding new features, you should also add new site content into an existing test site or create a new test site to demonstrate the new feature. This is to ensure that your feature can be tested by building that test site.

    To add a page to an existing test site, for this example, to test_site:

    1. Add a new test page, e.g., newTestPage.md, containing a demonstration of the new feature.

    2. Open the site.json corresponding to the test site, i.e. packages/cli/test/functional/test_site/site.json

    3. To include the new page, i.e. newTestPage.md, add it to the pages array.

      site.json
      "pages": [
         {
           "src": "index.md",
           "title": "Hello World",
      @@ -70,9 +70,9 @@
       
       
           
      -
  • Update the tests using npm run updatetest.

  • If creating a new test site instead, the directory name of the new test site should be added to packages/cli/test/functional/testSites.js file.

    We do not commit the generated plantuml images in our test_site to avoid non-related file changes after npm run updatetest. -The existing list of images to be ignored is maintained in packages/cli/test/functional/testSites.js and .gitignore. -They should be updated accordingly if you are making changes to the plantuml content in our test_site.

    Adding snapshot tests for components

    When making changes to the Vue components in packages/vue-components, you should add new snapshot tests or adapt existing ones as appropriate.

    Once you're done, be sure to run the updatetest script mentioned above!

    Documenting

    In MarkBind, we use tags to differentiate between links in the developer guide referring to the user guide versus links in the user guide referring to the developer guide. Note that intra-site links within either guides need not have tags.

    MarkBind's documentation currently has 3 tags:

    • environment--combined for deploying the User Guide and Developer Guide together
    • environment--ug for deployed User Guide
    • environment--dg for deployed Developer Guide

    To ensure that correct links are created, use tags with the links to selectively filter the correct link to be rendered for the right environment. When both the User Guide and the Developer Guide are deployed together, they have access to the files from each other, allowing the relative link to work. However, when they are deployed individually, this is not the case. Using absolute links creates the same effect as the relative link without having to have access to the files from the other guide.

    Developer Guide

    LINK:

    [Link Title](/userGuide/newPage.html)
    +    
  • Update the tests using npm run updatetest.

  • If creating a new test site instead, the directory name of the new test site should be added to packages/cli/test/functional/testSites.js file.

    We do not commit the generated plantuml images in our test_site to avoid non-related file changes after npm run updatetest. +The existing list of images to be ignored is maintained in packages/cli/test/functional/testSites.js and .gitignore. +They should be updated accordingly if you are making changes to the plantuml content in our test_site.

    Adding snapshot tests for components

    When making changes to the Vue components in packages/vue-components, you should add new snapshot tests or adapt existing ones as appropriate.

    Once you're done, be sure to run the updatetest script mentioned above!

    Documenting

    In MarkBind, we use tags to differentiate between links in the developer guide referring to the user guide versus links in the user guide referring to the developer guide. Note that intra-site links within either guides need not have tags.

    MarkBind's documentation currently has 3 tags:

    • environment--combined for deploying the User Guide and Developer Guide together
    • environment--ug for deployed User Guide
    • environment--dg for deployed Developer Guide

    To ensure that correct links are created, use tags with the links to selectively filter the correct link to be rendered for the right environment. When both the User Guide and the Developer Guide are deployed together, they have access to the files from each other, allowing the relative link to work. However, when they are deployed individually, this is not the case. Using absolute links creates the same effect as the relative link without having to have access to the files from the other guide.

    Developer Guide

    LINK:

    [Link Title](/userGuide/newPage.html)
     

    Linting

    We follow our style guides. Using a linter will help check and fix some of the code style errors in your code. It will save time for both you and your code reviewer. The linting tool we use is ESLint and StyleLint. Here is a gist with an explanation of the ESLint rules chosen in markbind-cli.

    Before making a commit or pull request, you should lint your code by running the following commands from the root of your project:

    • To lint a specific file: eslint path/to/specificfile.js
    • To lint all files: npm run lint

    It is also possible to auto-fix some (not all) style errors, using npm run lintfix.

    ESLint has integrations with popular editors. They offer features such as "fix errors on save", which will make development smoother.

    Git hooks

    We have three git hooks in our project. We use pre-commit to manage our git hooks.
    -The pre-commit scripts are located in ./pre-commit/pre-commit-scripts and the config is found in ./pre-commit-config.yaml.

    To skip running the pre-commit hook or pre-push hook, you can use the --no-verify flag (e.g. git push --no-verify origin fork_branch).

    • post-checkout: When you checkout to another branch, this hook will run clean and build the backend.
    • pre-commit: This hook will run clean, build the backend, and run lintfix on all the files.
    • pre-push: This hook will run clean, build the backend, and run all the test cases.

    Dependency management

    As mentioned in the setting up page, MarkBind uses lerna to manage the dependencies of its various packages.

    To add a dependency

    Add your dependency into the appropriate package.json file inside packages/*. If this is a development dependency to be used across all packages (e.g. ESLint), add it the the root package.json.

    Then, simply rerun the npm run setup command to update the package-lock.json files.

    To delete a dependency

    The safest way is to first remove the particular dependency entry from the package.json file of the respective directory. Then, run npm run setup in the root directory to clean up the local dependencies and update the package-lock.json file.

    To update a dependency

    First, follow the instruction to delete the dependency. Then, follow the instruction to add the latest dependency back. Also, when updating dependencies, ensure that it is updated in all packages using that dependency.

    Dependency updates are not trivial, and can be the source of subtle bugs. You should always check the respective dependency changelogs before doing so!

    Points for consideration

    There are a few ways to incorporate external packages into MarkBind, each with its pros and cons. The following table shows some of the common trade-offs:

    Approach Pros Cons
    Installing
    • Ease of upgrade
    • Traceable in package.json
    • May not satisfy custom behavior
    • Become vulnerable if the source repo is no longer actively maintained
    Forking
    • Relatively easy to upgrade
    • Leverage upstream testing procedures
    • Benefit others who share the same use cases
    • May become out-of-sync with the latest version
    • Difficult to maintain it externally in the long run
    Patching
    • Quick - no need to maintain / publish more npm packages or setup release procedures etc
    • Ensure the changes propagate to other dependencies
    • Enjoy the benefits of monorepo
    • Difficult to upgrade

    As the choice is highly dependent on context and details of the implementation, below are some additional questions to ask before proceeding:

    • Is the package actively maintained?
    • How big is the package?
    • How invasive are the proposed changes?
    • Are there existing APIs/plugin system from the package (to modify default behaviors)?

    Find out more about the key external libraries used in MarkBind from the project structure section. Also, the rationales behind most existing patches are documented in their respective files, read them (and their respective PRs/issues) for more context!

    Updating PlantUML

    PlantUML is a third-party library used by MarkBind to create UML diagrams. MarkBind runs the PlantUML JAR file found in packages/core/src/plugins/default when building the site to generate the diagrams.

    To update PlantUML to a newer version:

    1. Download the JAR file from PlantUML's website.
    2. Rename the file to plantuml.jar (if required), and replace the existing JAR file located in packages/core/src/plugins/default.
    3. Check the HTML pages that contain PlantUML diagrams, i.e. /userGuide/components/imagesAndDiagrams.html.

    Updating Bootstrap and Bootswatch

    As Bootswatch is built on Bootstrap, ensure that the versions of both are in sync to avoid unexpected differences in styling behavior between default and other themes. Both are currently using version 5.1.3.


    +

    Linting

    We follow our style guides. Using a linter will help check and fix some of the code style errors in your code. It will save time for both you and your code reviewer. The linting tool we use is ESLint and StyleLint. Here is a gist with an explanation of the ESLint rules chosen in markbind-cli.

    Before making a commit or pull request, you should lint your code by running the following commands from the root of your project:

    • To lint a specific file: eslint path/to/specificfile.js
    • To lint all files: npm run lint

    It is also possible to auto-fix some (not all) style errors, using npm run lintfix.

    ESLint has integrations with popular editors. They offer features such as "fix errors on save", which will make development smoother.

    Git hooks

    We have three git hooks in our project. We use pre-commit to manage our git hooks.
    +The pre-commit scripts are located in ./pre-commit/pre-commit-scripts and the config is found in ./pre-commit-config.yaml.

    To skip running the pre-commit hook or pre-push hook, you can use the --no-verify flag (e.g. git push --no-verify origin fork_branch).

    • post-checkout: When you checkout to another branch, this hook will run clean and build the backend.
    • pre-commit: This hook will run clean, build the backend, and run lintfix on all the files.
    • pre-push: This hook will run clean, build the backend, and run all the test cases.

    Dependency management

    As mentioned in the setting up page, MarkBind uses lerna to manage the dependencies of its various packages.

    To add a dependency

    Add your dependency into the appropriate package.json file inside packages/*. If this is a development dependency to be used across all packages (e.g. ESLint), add it the the root package.json.

    Then, simply rerun the npm run setup command to update the package-lock.json files.

    To delete a dependency

    The safest way is to first remove the particular dependency entry from the package.json file of the respective directory. Then, run npm run setup in the root directory to clean up the local dependencies and update the package-lock.json file.

    To update a dependency

    First, follow the instruction to delete the dependency. Then, follow the instruction to add the latest dependency back. Also, when updating dependencies, ensure that it is updated in all packages using that dependency.

    Dependency updates are not trivial, and can be the source of subtle bugs. You should always check the respective dependency changelogs before doing so!

    Points for consideration

    There are a few ways to incorporate external packages into MarkBind, each with its pros and cons. The following table shows some of the common trade-offs:

    Approach Pros Cons
    Installing
    • Ease of upgrade
    • Traceable in package.json
    • May not satisfy custom behavior
    • Become vulnerable if the source repo is no longer actively maintained
    Forking
    • Relatively easy to upgrade
    • Leverage upstream testing procedures
    • Benefit others who share the same use cases
    • May become out-of-sync with the latest version
    • Difficult to maintain it externally in the long run
    Patching
    • Quick - no need to maintain / publish more npm packages or setup release procedures etc
    • Ensure the changes propagate to other dependencies
    • Enjoy the benefits of monorepo
    • Difficult to upgrade

    As the choice is highly dependent on context and details of the implementation, below are some additional questions to ask before proceeding:

    • Is the package actively maintained?
    • How big is the package?
    • How invasive are the proposed changes?
    • Are there existing APIs/plugin system from the package (to modify default behaviors)?

    Find out more about the key external libraries used in MarkBind from the project structure section. Also, the rationales behind most existing patches are documented in their respective files, read them (and their respective PRs/issues) for more context!

    Updating PlantUML

    PlantUML is a third-party library used by MarkBind to create UML diagrams. MarkBind runs the PlantUML JAR file found in packages/core/src/plugins/default when building the site to generate the diagrams.

    To update PlantUML to a newer version:

    1. Download the JAR file from PlantUML's website.
    2. Rename the file to plantuml.jar (if required), and replace the existing JAR file located in packages/core/src/plugins/default.
    3. Check the HTML pages that contain PlantUML diagrams, i.e. /userGuide/components/imagesAndDiagrams.html.

    Updating Bootstrap and Bootswatch

    As Bootswatch is built on Bootstrap, ensure that the versions of both are in sync to avoid unexpected differences in styling behavior between default and other themes. Both are currently using version 5.1.3.


    diff --git a/devGuide/development/workflow.page-vue-render.js b/devGuide/development/workflow.page-vue-render.js index 1dda2189..493d8226 100644 --- a/devGuide/development/workflow.page-vue-render.js +++ b/devGuide/development/workflow.page-vue-render.js @@ -236,6 +236,6 @@ with(this){return _c('h3',{attrs:{"id":"updating-bootstrap-and-bootswatch"}},[_v with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/settingUp.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Setting up")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/writingComponents.html"}},[_c('span',[_c('span',[_v("Writing Components")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/development/writingComponents.html b/devGuide/development/writingComponents.html index f7161362..5604043b 100644 --- a/devGuide/development/writingComponents.html +++ b/devGuide/development/writingComponents.html @@ -38,9 +38,9 @@ A guide on SSR for MarkBind can be found here.

    Vue-specific tips for resolving SSR issues:

    • The mount and beforeMount lifecycle hooks will only be executed on the client, not the server
    • When using v-if, ensure that it will evaluate to the same value on both the client and server
    • Take note of how the Vue component will be compiled, ensuring that the HTML is correct and aligns on both client- and server- side
    • Conditionally render data when it has been fully loaded

    Bundle size

    When creating a new component, you may need to import a package or library to support some functionality. Ideally, this should not increase MarkBind's bundle size too much. Bundlephobia may be useful to quickly look up the size of a package!

    Dependencies

    When choosing to use a third-party library or package, it should ideally be well-maintained and not have too many dependencies. -While dependencies may be inevitable, a package with dependencies on large libraries may lag behind the most recent releases of these libraries, which may become a blocker for MarkBind to migrate to these recent releases as well.

    For instance, if bootstrap-vue depends on Bootstrap and Vue, we will need to wait for bootstrap-vue to migrate to the newest versions of both Bootstrap and Vue before MarkBind can migrate to these versions of Bootstrap and Vue as well.

    Feel free to raise any concerns during the initial discussion phase for other devs to weigh in on the tradeoffs!

    Attributes and Slots

    MarkBind components may support , or both. +While dependencies may be inevitable, a package with dependencies on large libraries may lag behind the most recent releases of these libraries, which may become a blocker for MarkBind to migrate to these recent releases as well.

    For instance, if bootstrap-vue depends on Bootstrap and Vue, we will need to wait for bootstrap-vue to migrate to the newest versions of both Bootstrap and Vue before MarkBind can migrate to these versions of Bootstrap and Vue as well.

    Feel free to raise any concerns during the initial discussion phase for other devs to weigh in on the tradeoffs!

    Attributes and Slots

    MarkBind components may support , or both. Some components allow users to supply the same content as either a slot or an attribute. -If an author provides the same content as both a slot and an attribute, in most cases, the slot should override the attribute.

    MarkBind should also log a warning to inform the author of this conflict!


    +If an author provides the same content as both a slot and an attribute, in most cases, the slot should override the attribute.

    MarkBind should also log a warning to inform the author of this conflict!


    diff --git a/devGuide/development/writingComponents.page-vue-render.js b/devGuide/development/writingComponents.page-vue-render.js index 47e2f93a..37242ec0 100644 --- a/devGuide/development/writingComponents.page-vue-render.js +++ b/devGuide/development/writingComponents.page-vue-render.js @@ -104,6 +104,6 @@ with(this){return _c('h4',{attrs:{"id":"attributes-and-slots"}},[_v("Attributes with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/workflow.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Workflow")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/writingPlugins.html"}},[_c('span',[_c('span',[_v("Writing Plugins")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/development/writingPlugins.html b/devGuide/development/writingPlugins.html index 4fc12230..c15170dc 100644 --- a/devGuide/development/writingPlugins.html +++ b/devGuide/development/writingPlugins.html @@ -30,8 +30,8 @@ to the entry point.

    In most cases, this is sufficient, and more performant since this ties directly into MarkBind's HTML processing.

    However, if you need to operate on the page as a whole, or you need access to the frontmatter of the page, you may use the postRender interface instead, which operates on the HTML content after it is processed by MarkBind.

    • processNode(pluginContext, node): Called before MarkBind renders the source from Markdown to HTML.
      • pluginContext: User provided parameters for the plugin. This can be specified in the site.json.
      • node: A domhandler node object, which represents a HTML element. This object may be directly manipulated for simple operations, or operated on using cheerio.
    • postRender(pluginContext, frontmatter, content): Called after the HTML is rendered -
      • pluginContext: User provided parameters for the plugin. This can be specified in the site.json.
      • frontmatter: The frontmatter of the page being processed, in case any frontmatter data is required.
      • content: The rendered HTML.
      • Returns: the post-processed HTML string

    Note that both of these interfaces are executed independently on a page, a layout or an -.

    That is, the DOM tree being processed during processNode and the content passed into postRender will belong to either one of these types of files.

    An example of a plugin is shown below. The plugin shows two ways of appending a paragraph of text to a specific div in the Markdown files:

    // myPlugin.js
    +
    • pluginContext: User provided parameters for the plugin. This can be specified in the site.json.
    • frontmatter: The frontmatter of the page being processed, in case any frontmatter data is required.
    • content: The rendered HTML.
    • Returns: the post-processed HTML string

    Note that both of these interfaces are executed independently on a page, a layout or an +.

    That is, the DOM tree being processed during processNode and the content passed into postRender will belong to either one of these types of files.

    An example of a plugin is shown below. The plugin shows two ways of appending a paragraph of text to a specific div in the Markdown files:

    // myPlugin.js
     
     const cheerio = module.parent.require('cheerio');
     
    @@ -64,7 +64,7 @@
     
     
         
    -    

    Remember to update dg-site.json, site.json, and ug-site.json in the docs folder when updating the requirements for site.json.

    // site.json
    +    

    Remember to update dg-site.json, site.json, and ug-site.json in the docs folder when updating the requirements for site.json.

    // site.json
     
     {
       ...
    @@ -116,8 +116,8 @@
         
         

    Assets

    Plugins can implement the methods getLinks and getScripts to add additional assets to any page.

    • getLinks(pluginContext, frontmatter, content): Called to get link elements to be added to the head of the page.
      • pluginContext: User provided parameters for the plugin. This can be specified in the site.json.
      • frontmatter: The frontmatter of the page being processed, in case any frontmatter data is required.
      • content: The rendered HTML.
      • Returns: an array of strings containing link elements to be added.
    • getScripts(pluginContext, frontmatter, content): Called to get script elements to be added after the body of the page. -
      • pluginContext: User provided parameters for the plugin. This can be specified in the site.json.
      • frontmatter: The frontmatter of the page being processed, in case any frontmatter data is required.
      • content: The rendered HTML.
      • Returns: an array of strings containing script elements to be added.

    Local assets

    You can set an absolute or relative file path as the src or href attribute in your <script> or <link> tags. -MarkBind will copy these assets into the output directory and change the src or href attributes automatically!

    An example of a plugin which adds links and scripts to the page:

    // myPlugin.js
    +
    • pluginContext: User provided parameters for the plugin. This can be specified in the site.json.
    • frontmatter: The frontmatter of the page being processed, in case any frontmatter data is required.
    • content: The rendered HTML.
    • Returns: an array of strings containing script elements to be added.

    Local assets

    You can set an absolute or relative file path as the src or href attribute in your <script> or <link> tags. +MarkBind will copy these assets into the output directory and change the src or href attributes automatically!

    An example of a plugin which adds links and scripts to the page:

    // myPlugin.js
     
     module.exports = {
       getLinks: (pluginContext, frontmatter, content) => ['<link rel="STYLESHEET_LINK">'],
    @@ -174,7 +174,7 @@
     
         
         

    Tag Properties

    Tag properties are top-level properties of the tag configuration object. The following table lists what these properties are used for:

    Property Values Default Remarks
    isSpecial true or false false Allows configuring whether any tag is to be parsed "specially" like a <script> or <style> tag. This allows configuring custom tags that may contain conflicting syntax, such as the <puml> tag used for UML diagram generation.
    attributes Array of attribute configurations [] Contains the attribute configurations of the tags.

    Attribute Properties

    The following table lists what the possible properties for configuring the attributes of a tag, and what they are used for:

    Property Values Default Remarks
    name attribute name none The string name of the attribute.
    isRelative true or false false Should be true if this attribute may contain a relative link. This tells MarkBind to properly resolve such relative links when used in <include>s, by converting the link into a baseUrl preceded absolute link.
    isSourceFile true or false false Should be true if the attribute points to a source file. This allows flagging other source files to trigger page regeneration during live reload.

    Lifecycle hooks

    You may also need to maintain some plugin state during site generation, then reset this when the site or pages are regenerated.

    To do this, you may implement the beforeSiteGenerate method.

    • beforeSiteGenerate(): Called during initial site generation and subsequent regenerations during live preview. -
      • No return value is required.

    +
    • No return value is required.

    diff --git a/devGuide/development/writingPlugins.page-vue-render.js b/devGuide/development/writingPlugins.page-vue-render.js index 2200e9f3..24518145 100644 --- a/devGuide/development/writingPlugins.page-vue-render.js +++ b/devGuide/development/writingPlugins.page-vue-render.js @@ -95,6 +95,6 @@ with(this){return _c('ul',[_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inl with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/writingComponents.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Writing Components")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/development/migratingToTypeScript.html"}},[_c('span',[_c('span',[_v("Migrating to TypeScript")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/githubActions/markbindAction.html b/devGuide/githubActions/markbindAction.html index 6f5e0755..282cf646 100644 --- a/devGuide/githubActions/markbindAction.html +++ b/devGuide/githubActions/markbindAction.html @@ -30,7 +30,7 @@
    1. Create a repository.
    2. Set up MarkBind and run markbind init to populate with default content.
    3. Push your repository to GitHub.

    Modifying the action

    1. Create a new branch from master to work on your changes.
    2. Make necessary modifications to the workflow files.
    3. Update the repository's README.md to reflect the changes.

    Testing the action

    1. Include a workflow file in your to test your modified version of the action.
      • Instead of using uses: MarkBind/markbind-action@v2 in the workflow file, use uses: yourGithubName/markbind-action@yourBranch to reference the unpublished version of the action that you are currently developing. -
        • e.g. uses: tlylt/markbind-action@main
    2. Trigger the action as needed, check and validate the results in the action logs.

    You can now submit PRs to improve MarkBind's GitHub actions! 🎉

    Release Management

    Based on the GitHub Actions documentation, we are using tags for release management.

    • Create and validate a release on a release branch (such as release/v1) before creating the release tag (for example, v1.0.2).
    • Create a release using semantic versioning. For more information, see "Creating releases."
    • Move the major version tag (such as v1, v2) to point to the Git ref of the current release. For more information, see "Git basics - tagging."
    • Introduce a new major version tag (v2) for changes that will break existing workflows. For example, changing an action's inputs would be a breaking change.

    +
    • e.g. uses: tlylt/markbind-action@main
  • Trigger the action as needed, check and validate the results in the action logs.
  • You can now submit PRs to improve MarkBind's GitHub actions! 🎉

    Release Management

    Based on the GitHub Actions documentation, we are using tags for release management.

    • Create and validate a release on a release branch (such as release/v1) before creating the release tag (for example, v1.0.2).
    • Create a release using semantic versioning. For more information, see "Creating releases."
    • Move the major version tag (such as v1, v2) to point to the Git ref of the current release. For more information, see "Git basics - tagging."
    • Introduce a new major version tag (v2) for changes that will break existing workflows. For example, changing an action's inputs would be a breaking change.

    diff --git a/devGuide/githubActions/markbindAction.page-vue-render.js b/devGuide/githubActions/markbindAction.page-vue-render.js index 57b22c9a..61851117 100644 --- a/devGuide/githubActions/markbindAction.page-vue-render.js +++ b/devGuide/githubActions/markbindAction.page-vue-render.js @@ -47,6 +47,6 @@ with(this){return _c('blockquote',[_c('ul',[_c('li',[_v("Create and validate a r with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/overview.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("GitHub Actions: Overview")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/markbindReusableWorkflows.html"}},[_c('span',[_c('span',[_v("GitHub Actions: markbind-reusable-workflows")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/githubActions/markbindReusableWorkflows.html b/devGuide/githubActions/markbindReusableWorkflows.html index 00960c8b..3c1c82ec 100644 --- a/devGuide/githubActions/markbindReusableWorkflows.html +++ b/devGuide/githubActions/markbindReusableWorkflows.html @@ -26,7 +26,7 @@

    GitHub Actions: markbind-reusable-workflows

    GitHub Actions: markbind-reusable-workflows

    A list of reusable workflows that help to improve the CI/CD pipelines of MarkBind sites. It helps users to streamline their workflow by:

    • Making it easier to setup PR preview for a MarkBind site, including PRs from forks.
    • Making it easier to unpublish a PR preview site after merge/close.

    The source code is hosted alongside MarkBind/markbind-action.

    Development guide

    Refer to the development guide of markbind-action for the general approach. Take note of the following differences:

    • Understand the strength and limitations of reusable workflows.
    • Find out the details of the existing reusable workflows in its README.md.
    • As there is no need to release the reusable workflows in order for others to use, the workflows will be updated and maintained in the master branch (without doing a release).

    +

    GitHub Actions: markbind-reusable-workflows

    GitHub Actions: markbind-reusable-workflows

    A list of reusable workflows that help to improve the CI/CD pipelines of MarkBind sites. It helps users to streamline their workflow by:

    • Making it easier to setup PR preview for a MarkBind site, including PRs from forks.
    • Making it easier to unpublish a PR preview site after merge/close.

    The source code is hosted alongside MarkBind/markbind-action.

    Development guide

    Refer to the development guide of markbind-action for the general approach. Take note of the following differences:

    • Understand the strength and limitations of reusable workflows.
    • Find out the details of the existing reusable workflows in its README.md.
    • As there is no need to release the reusable workflows in order for others to use, the workflows will be updated and maintained in the master branch (without doing a release).

    diff --git a/devGuide/githubActions/markbindReusableWorkflows.page-vue-render.js b/devGuide/githubActions/markbindReusableWorkflows.page-vue-render.js index 3d331664..81ae729f 100644 --- a/devGuide/githubActions/markbindReusableWorkflows.page-vue-render.js +++ b/devGuide/githubActions/markbindReusableWorkflows.page-vue-render.js @@ -26,6 +26,6 @@ with(this){return _c('ul',[_c('li',[_v("Understand the strength and limitations with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/markbindAction.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("GitHub Actions: markbind-action")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/workflowSecurity.html"}},[_c('span',[_c('span',[_v("GitHub Actions: Workflow Security")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/githubActions/overview.html b/devGuide/githubActions/overview.html index b95fa4ec..46696c52 100644 --- a/devGuide/githubActions/overview.html +++ b/devGuide/githubActions/overview.html @@ -26,7 +26,7 @@

    GitHub Actions: Overview

    GitHub Actions: Overview

    A GitHub Action can perform a variety of tasks, including automating the build and deployment of a MarkBind site.

    Before any development, ensure you have a basic knowledge of GitHub Actions


    +

    GitHub Actions: Overview

    GitHub Actions: Overview

    A GitHub Action can perform a variety of tasks, including automating the build and deployment of a MarkBind site.

    Before any development, ensure you have a basic knowledge of GitHub Actions


    diff --git a/devGuide/githubActions/overview.page-vue-render.js b/devGuide/githubActions/overview.page-vue-render.js index e16f9fda..593c5500 100644 --- a/devGuide/githubActions/overview.page-vue-render.js +++ b/devGuide/githubActions/overview.page-vue-render.js @@ -23,6 +23,6 @@ with(this){return _c('ul',[_c('li',[_c('a',{attrs:{"href":"https://docs.github.c with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/design/serverSideRendering.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Server Side Rendering")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/markbindAction.html"}},[_c('span',[_c('span',[_v("GitHub Actions: markbind-action")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/githubActions/workflowSecurity.html b/devGuide/githubActions/workflowSecurity.html index 6db99841..5c7e365e 100644 --- a/devGuide/githubActions/workflowSecurity.html +++ b/devGuide/githubActions/workflowSecurity.html @@ -48,7 +48,7 @@ -

    permissions can be restricted at the repo, workflow or job level. Pick the most restrictive level that still allows the workflow to function.

    Environment variables, like ${{ secrets.GITHUB_TOKEN }} , should be limited by scope, and should be declared at the step level when possible.

    Security precautions when using pull_request_target event

    Read access is the most permissive access to be given for pull requests from public forked repositories to maintain security.

    Since MarkBind uses the forking workflow, workflows run on pull requests won't have write access, preventing them from doing things like adding comments or labels to pull requests.

    When a workflow is triggered by the pull_request_target event, the GITHUB_TOKEN is granted read/write repository permission, even when it is triggered from a public fork. This could lead to security vulnerabilities if not handled properly.

    This event should not be used with actions/checkout as it can give write permission and secrets access to untrusted code from the forked code. Any building step, script execution, or even action call could be used to compromise the entire repository.

    This can be fixed by adding code to ensure that the codebase being checked out, using actions/checkout, belongs to the base branch. +

    permissions can be restricted at the repo, workflow or job level. Pick the most restrictive level that still allows the workflow to function.

    Environment variables, like ${{ secrets.GITHUB_TOKEN }} , should be limited by scope, and should be declared at the step level when possible.

    Security precautions when using pull_request_target event

    Read access is the most permissive access to be given for pull requests from public forked repositories to maintain security.

    Since MarkBind uses the forking workflow, workflows run on pull requests won't have write access, preventing them from doing things like adding comments or labels to pull requests.

    When a workflow is triggered by the pull_request_target event, the GITHUB_TOKEN is granted read/write repository permission, even when it is triggered from a public fork. This could lead to security vulnerabilities if not handled properly.

    This event should not be used with actions/checkout as it can give write permission and secrets access to untrusted code from the forked code. Any building step, script execution, or even action call could be used to compromise the entire repository.

    This can be fixed by adding code to ensure that the codebase being checked out, using actions/checkout, belongs to the base branch. This can be done using:

    - uses: actions/checkout@v4
       with:
         ref: ${{ github.base_ref }}
    @@ -68,7 +68,7 @@
     
     
         
    -    

    This method triggers workflows based on the latest commit of the pull request's base branch. Workflows on the base branch aren't affected by changes on feature branches, avoiding execution of malicious code in .

    This method could be limiting since the codebase checked out, using actions/checkout, is not up to date for the pull request. This means that the codebase checked out is not the codebase that is being tested. This could lead to false positives or false negatives in the testing process.

    Another solution that allows pull_request_target to work securely with actions/checkout on the pull request branch, is to implement running workflow only on approval by trusted users. This means that the workflow is only run after a user has checked for malicious code on the feature branch manually and approves the run.

    Information about reviewing workflows can be found here.

    Untrusted input

    Directly referencing values you do not control, such as echo “${{github.event.pull_request.title}}” , can lead to security vulnerabilities since it can contain malicious code and lead to an injection attack.

    Instead use an action with arguments (recommended):

    uses: fakeaction/printtitle@v3 
    +    

    This method triggers workflows based on the latest commit of the pull request's base branch. Workflows on the base branch aren't affected by changes on feature branches, avoiding execution of malicious code in .

    This method could be limiting since the codebase checked out, using actions/checkout, is not up to date for the pull request. This means that the codebase checked out is not the codebase that is being tested. This could lead to false positives or false negatives in the testing process.

    Another solution that allows pull_request_target to work securely with actions/checkout on the pull request branch, is to implement running workflow only on approval by trusted users. This means that the workflow is only run after a user has checked for malicious code on the feature branch manually and approves the run.

    Information about reviewing workflows can be found here.

    Untrusted input

    Directly referencing values you do not control, such as echo “${{github.event.pull_request.title}}” , can lead to security vulnerabilities since it can contain malicious code and lead to an injection attack.

    Instead use an action with arguments (recommended):

    uses: fakeaction/printtitle@v3 
     with: 
       title: ${{ github.event.pull_request.title }}
     
    -

    +
    diff --git a/devGuide/githubActions/workflowSecurity.page-vue-render.js b/devGuide/githubActions/workflowSecurity.page-vue-render.js index 575d4f11..8c903f21 100644 --- a/devGuide/githubActions/workflowSecurity.page-vue-render.js +++ b/devGuide/githubActions/workflowSecurity.page-vue-render.js @@ -62,6 +62,6 @@ with(this){return _c('code',{pre:true,attrs:{"class":"hljs yaml"}},[_c('span',[_ with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/markbindReusableWorkflows.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("GitHub Actions: markbind-reusable-workflows")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/projectManagement.html"}},[_c('span',[_c('span',[_v("Project management")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/index.html b/devGuide/index.html index 11a1ed29..83f67c7c 100644 --- a/devGuide/index.html +++ b/devGuide/index.html @@ -14,7 +14,7 @@
    +
    diff --git a/devGuide/index.page-vue-render.js b/devGuide/index.page-vue-render.js index a0e97f0c..fcffaa6e 100644 --- a/devGuide/index.page-vue-render.js +++ b/devGuide/index.page-vue-render.js @@ -5,6 +5,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/projectManagement.html b/devGuide/projectManagement.html index b7ec4f62..4ba8b40f 100644 --- a/devGuide/projectManagement.html +++ b/devGuide/projectManagement.html @@ -27,15 +27,15 @@

    Project management

    Project management

    This page contains information about project management tasks. The target audience is senior developers (and above).

    Managing PRs

    For general best practices, refer to the guide Working with PRs @SE-EDU.

    Approval

    • If the PR is very simple (e.g. correcting a simple typo), one approval is sufficient for merging. Other PRs need two approvals.

    • Once the second approval is given from a senior developer (or there are >= 3 approvals given from anyone), the PR can be merged immediately.
      -If there is no second approval yet, wait for a day before merging the PR without the second approval.

      This is to allow other developers the chance to review the PR, and delay the merge if there's any significant problems. Not everyone is available all of the time, so please be patient.

    Merging

    1. Re-sync the PR branch with master to trigger the CI pipeline.

      Rationale: This is because we do not ask PR authors to rebase their PRs, but the master branch may have since been updated. It is possible for tests to pass on their branch, only to fail when integrating the changes with the master

      This is possible even if GitHub doesn't complain about any merge conflict!

    2. Merge the PR.

      • Refer to the guide Working with PRs @SE-EDU on which merge strategy to use.

        • The default strategy is to do a squash-merge.
        • Use a merge commit if +If there is no second approval yet, wait for a day before merging the PR without the second approval.

          This is to allow other developers the chance to review the PR, and delay the merge if there's any significant problems. Not everyone is available all of the time, so please be patient.

        Merging

        1. Re-sync the PR branch with master to trigger the CI pipeline.

          Rationale: This is because we do not ask PR authors to rebase their PRs, but the master branch may have since been updated. It is possible for tests to pass on their branch, only to fail when integrating the changes with the master

          This is possible even if GitHub doesn't complain about any merge conflict!

        2. Merge the PR.

          • Refer to the guide Working with PRs @SE-EDU on which merge strategy to use.

            • The default strategy is to do a squash-merge.
            • Use a merge commit if
              • the commits are well-organized, and the branch tackles only one task. This would typically be a PR tackling a substantial issue requiring multiple dependent and successive changes.
            • Use a rebase-merge if -
              • the commits are well-organized, and each commit is an independent task. This should be extremely rare as we typically advise that PRs should not have unrelated changes. An example can be found here.
          • Format for the merge/squashed commit title: PR_TITLE (#PR_NUMBER)
            Add built-in support for light themes from bootswatch (#745)

          • For non-trivial PRs, ensure that there is a sensible commit message accompanied by it. Both the title and the body should follow the Git conventions @SE-EDU.

          • Before confirming the merge, do ensure that no other PRs have been merged to master since the time you started drafting the merging commit's title and message. Otherwise, you may face a glitch where GitHub merges your PR without squashing. (Reference: MarkBind#1160)

        3. Use the r.Major/Minor/Patch label to tag the PR.

          Reason: The release manager may not review all PRs, so please add the label to highlight the version impact of the PR.

        4. Draft the release note for breaking changes.

          Reason: The release manager may not have the full details of the PR, so please work with the PR author to prepare a release note (if applicable) in the PR description.

        5. Tip: how to undo an accidental merge commit.

          • In the event of a wrong commit strategy chosen, you can undo the merge to master by: -
            1. Switch to the master branch locally.
            2. Run git reset --hard HEAD~1.
            3. Run git push --force.
            4. Create a new PR from the previous PR branch and merge the PR with the correct merge strategy.

          Note: The above should be performed with caution as force pushing rewrites the Git history, which might cause conflicts with any on-going work. You would also need write/push access to master.

        Doing a Release

        1. Make sure you have the correct permissions for MarkBind's GitHub repository and npm organization.

          • For GitHub, you need rights to push to master branch and make new releases.

            • To check if you can make a new release and push to master branch, go to the release page and check for the "Draft a new release" button. +
              • the commits are well-organized, and each commit is an independent task. This should be extremely rare as we typically advise that PRs should not have unrelated changes. An example can be found here.
          • Format for the merge/squashed commit title: PR_TITLE (#PR_NUMBER)
            Add built-in support for light themes from bootswatch (#745)

          • For non-trivial PRs, ensure that there is a sensible commit message accompanied by it. Both the title and the body should follow the Git conventions @SE-EDU.

          • Before confirming the merge, do ensure that no other PRs have been merged to master since the time you started drafting the merging commit's title and message. Otherwise, you may face a glitch where GitHub merges your PR without squashing. (Reference: MarkBind#1160)

        2. Use the r.Major/Minor/Patch label to tag the PR.

          Reason: The release manager may not review all PRs, so please add the label to highlight the version impact of the PR.

        3. Draft the release note for breaking changes.

          Reason: The release manager may not have the full details of the PR, so please work with the PR author to prepare a release note (if applicable) in the PR description.

        4. Tip: how to undo an accidental merge commit.

          • In the event of a wrong commit strategy chosen, you can undo the merge to master by: +
            1. Switch to the master branch locally.
            2. Run git reset --hard HEAD~1.
            3. Run git push --force.
            4. Create a new PR from the previous PR branch and merge the PR with the correct merge strategy.

          Note: The above should be performed with caution as force pushing rewrites the Git history, which might cause conflicts with any on-going work. You would also need write/push access to master.

        Doing a Release

        1. Make sure you have the correct permissions for MarkBind's GitHub repository and npm organization.

          • For GitHub, you need rights to push to master branch and make new releases.

            • To check if you can make a new release and push to master branch, go to the release page and check for the "Draft a new release" button. If missing, you may not have permissions for a release.
          • For npm, you need to be in the MarkBind organization.

            • To check if you are in the MarkBind organization, go to your npm profile and check if MarkBind is listed under organizations. npm profile Example of profile that has been added to Markbind organisation -
            • There should be 4 packages listed under the organization, markbind-cli, @markbind/core, @markbind/core-web and @markbind/vue_components.
            • Notably, the first three are packages that we publish every release while the last one has since become a private package consumed internally.
        2. Login to your npm account in your terminal by running npm login.

        3. Make sure to start with a "clean slate" by running npx lerna clean and then npm run setup in the root MarkBind directory.

        4. Increment the version number by running npx lerna version --no-push --exact. Which to increment (patch, minor or major) depends on what PRs are merged for the new version, which means you must know beforehand about the changes.

          • Double check that the PRs are appropriate for the new version. Review the definition of SEMVER and the impact of the PRs.
          • We will specify updated version numbers exactly to ensure that each version will consistently fetch the same versioned internal packages.
          • The end result of this command is version commit with an appropriate tag. We will make use of the generated tag and commit message later.
          • Do not push this commit to the remote repository yet.
        5. Build the core-web package bundle by executing npm run build:web in the root directory, after which you should see changes in the bundles located in packages/core-web/dist.

          Take a peek at the diff for the bundles to see if there are any strange changes.

          • If there were no changes to the files in packages/core-web or packages/vue-components since the last release of MarkBind, you may observe no changes. Simply proceed with the rest of the steps.
          • If there are font files in the diff, and you are sure that there were no changes to the font files, you may ignore & discard the changes.
          • Typically, the following files will be updated: -
            • markbind.min.js
            • markbind.min.css
            • vuecommonappfactory.min.js
            • vuecommonappfactory.min.css
        6. Rebuild the test files using npm run updatetest

          When rebuilding the expected test files, ensure that only the version number is updated for the output .html files. For example, this is correct:

          diff --git a/test/functional/test_site/expected/bugs/index.html b/test/functional/test_site/expected/bugs/index.html
          +
        7. There should be 4 packages listed under the organization, markbind-cli, @markbind/core, @markbind/core-web and @markbind/vue_components.
        8. Notably, the first three are packages that we publish every release while the last one has since become a private package consumed internally.
    3. Login to your npm account in your terminal by running npm login.

    4. Make sure to start with a "clean slate" by running npx lerna clean and then npm run setup in the root MarkBind directory.

    5. Increment the version number by running npx lerna version --no-push --exact. Which to increment (patch, minor or major) depends on what PRs are merged for the new version, which means you must know beforehand about the changes.

      • Double check that the PRs are appropriate for the new version. Review the definition of SEMVER and the impact of the PRs.
      • We will specify updated version numbers exactly to ensure that each version will consistently fetch the same versioned internal packages.
      • The end result of this command is version commit with an appropriate tag. We will make use of the generated tag and commit message later.
      • Do not push this commit to the remote repository yet.
    6. Build the core-web package bundle by executing npm run build:web in the root directory, after which you should see changes in the bundles located in packages/core-web/dist.

      Take a peek at the diff for the bundles to see if there are any strange changes.

      • If there were no changes to the files in packages/core-web or packages/vue-components since the last release of MarkBind, you may observe no changes. Simply proceed with the rest of the steps.
      • If there are font files in the diff, and you are sure that there were no changes to the font files, you may ignore & discard the changes.
      • Typically, the following files will be updated: +
        • markbind.min.js
        • markbind.min.css
        • vuecommonappfactory.min.js
        • vuecommonappfactory.min.css
    7. Rebuild the test files using npm run updatetest

      When rebuilding the expected test files, ensure that only the version number is updated for the output .html files. For example, this is correct:

      diff --git a/test/functional/test_site/expected/bugs/index.html b/test/functional/test_site/expected/bugs/index.html
       index 779f279..bb3c602 100644
       --- a/test/functional/test_site/expected/bugs/index.html
       +++ b/test/functional/test_site/expected/bugs/index.html
      @@ -64,7 +64,7 @@
       
       
           
    -

    If any other lines changed, that likely means the functional tests weren't updated in a pull request. Do revert everything done so far, and make a pull request specifically to fix that first!

  • If core-web package bundle was updated earlier: also ensure that the updated bundles are copied to each of the expected test site's folders.

    • We do this for each MarkBind release (rather than require contributors to update the bundles for each affected PR), in order to reduce unnecessary merge conflicts. It also makes it easier for the maintainers to vet the changes.
    • Typically, the bundle will be updated automatically in the expected test site's folders after running npm run updatetest in the previous step.
  • Combine the changes that you made in the last two steps with the version commit generated by lerna version. To do so, amend the version commit and version tag by doing the following — take note to change vA.B.C to the new version.

    $ git commit -a --amend --reuse-message vA.B.C
    +    

    If any other lines changed, that likely means the functional tests weren't updated in a pull request. Do revert everything done so far, and make a pull request specifically to fix that first!

  • If core-web package bundle was updated earlier: also ensure that the updated bundles are copied to each of the expected test site's folders.

    • We do this for each MarkBind release (rather than require contributors to update the bundles for each affected PR), in order to reduce unnecessary merge conflicts. It also makes it easier for the maintainers to vet the changes.
    • Typically, the bundle will be updated automatically in the expected test site's folders after running npm run updatetest in the previous step.
  • Combine the changes that you made in the last two steps with the version commit generated by lerna version. To do so, amend the version commit and version tag by doing the following — take note to change vA.B.C to the new version.

    $ git commit -a --amend --reuse-message vA.B.C
     $ git tag --force vA.B.C     # to reassign the tag to the newly amended commit
     
  • Publish by running npx lerna publish from-git. You should receive a notification by npm that the publish is successful.

  • Smoke test the new version by installing the new version (run npm i -g markbind-cli@A.B.C) and playing around with it a bit to ensure that it works.

    • If you used npm link for your project, ensure that you try the new release on another platform that doesn't use npm link, so that we can be sure the end-users can install and use the new version.
    • You can also try the new release on a project that uses MarkBind as a local dev-dependency.
  • Verify the website at markbind.org has been updated. For example, you can look at the footer of the website to see if the version number is updated.

    Note that it may take a few minutes for the website to be updated and you may need to check it in an incognito window to avoid caching.

    The deployment is automated. However, if it doesn't deploy properly for the release, do the following:

    $ npm run deploy:ug
    +    
  • Publish by running npx lerna publish from-git. You should receive a notification by npm that the publish is successful.

  • Smoke test the new version by installing the new version (run npm i -g markbind-cli@A.B.C) and playing around with it a bit to ensure that it works.

    • If you used npm link for your project, ensure that you try the new release on another platform that doesn't use npm link, so that we can be sure the end-users can install and use the new version.
    • You can also try the new release on a project that uses MarkBind as a local dev-dependency.
  • Verify the website at markbind.org has been updated. For example, you can look at the footer of the website to see if the version number is updated.

    Note that it may take a few minutes for the website to be updated and you may need to check it in an incognito window to avoid caching.

    The deployment is automated. However, if it doesn't deploy properly for the release, do the following:

    $ npm run deploy:ug
     
  • Multiple contribution types can be included at once or updated later on.
    • E.g. "@all-contributors please add tlylt for code, doc"
  • Contribution types can be updated later on.
    • E.g "@all-contributors please add tlylt for code"
    • Some time later: "@all-contributors please add tlylt for doc"
    • Result: 'tlylt' will be updated to have both icons(code and doc)
  • Managing the repository

    Projects

    As the number of issues increases, prioritising and triaging work may become more tricky even with labels. We may want to prioritise certain issues for particular version releases, or to work towards an overall vision of MarkBind. For this purpose, it may be useful to use GitHub Projects.

    Instructions:

    1. Read through the issues in the repository to understand what's in the backlog.
    2. Decide what goals the team is working towards. Examples: "Better Logging", "Necessary Updates", "User Demand", "Bugfix", and "Developer Experience".
    3. Create the GitHub project (keeping in mind how long it should take) and update the project details.
    4. Add relevant issues to the project and use it to track progress.

    Some tips / principles from current use:

    • Don't treat the project as a strict guide, only a tool to prioritise tasks and discover issues to work on. If another issue catches your fancy or an urgent fix comes up that is not on the roadmap, you can work on that instead.
    • These projects are "product roadmaps" to help teams communicate and collaborate.
    • This roadmap tracks some bigger issues that MarkBind aims to focus on.
    • The main goal is to triage issues and perhaps track progress in the repository perhaps on a yearly basis. -
      • You can triage issues into more than just "todo" - this roadmap used in 2024 into "KIV/Discussion", "Todo", and "Implementation Needed"; the latter is used for issues that are very straightforward, while the first was used for issues where the precise implementation might require some discussion or be more complex.
      • You can write project details to clarify your project organisation.
      • You can use multiple views, such as Kanban, tables, or calendar, depending on what best suits your needs.
      • You can use custom fields - this roadmap used in 2024 categorised the issues into bigger picture goals that were set earlier.

    Other Notes

    About Milestones

    Previously, we used milestones to help manage versions, adding a milestone to an issue once related PRs had been merged. However, there was confusion over the use of milestones and labels and adding a milestone was often forgotten. Hence, ultimately it was not sufficiently useful to the team.


    +
    • You can triage issues into more than just "todo" - this roadmap used in 2024 into "KIV/Discussion", "Todo", and "Implementation Needed"; the latter is used for issues that are very straightforward, while the first was used for issues where the precise implementation might require some discussion or be more complex.
    • You can write project details to clarify your project organisation.
    • You can use multiple views, such as Kanban, tables, or calendar, depending on what best suits your needs.
    • You can use custom fields - this roadmap used in 2024 categorised the issues into bigger picture goals that were set earlier.

    Other Notes

    About Milestones

    Previously, we used milestones to help manage versions, adding a milestone to an issue once related PRs had been merged. However, there was confusion over the use of milestones and labels and adding a milestone was often forgotten. Hence, ultimately it was not sufficiently useful to the team.


    diff --git a/devGuide/projectManagement.page-vue-render.js b/devGuide/projectManagement.page-vue-render.js index 45f20e6e..9f56df8e 100644 --- a/devGuide/projectManagement.page-vue-render.js +++ b/devGuide/projectManagement.page-vue-render.js @@ -179,6 +179,6 @@ with(this){return _c('h2',{attrs:{"id":"other-notes"}},[_v("Other Notes"),_c('a' with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/githubActions/workflowSecurity.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("GitHub Actions: Workflow Security")])])])])]),_v(" "),_c('p',[_c('span',{staticClass:"float-end"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/styleGuides.html"}},[_c('span',[_c('span',[_v("Appendix: Style guides")]),_v(" "),_c('span',{staticClass:"far fa-arrow-alt-circle-right",attrs:{"aria-hidden":"true"}})])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/devGuide/styleGuides.html b/devGuide/styleGuides.html index 034a0596..213d3ad0 100644 --- a/devGuide/styleGuides.html +++ b/devGuide/styleGuides.html @@ -26,7 +26,7 @@

    Appendix: Style guides

    Appendix: Style guides

    Our coding standards are mostly based on those at se-education.org/guides.


    +

    Appendix: Style guides

    Appendix: Style guides

    Our coding standards are mostly based on those at se-education.org/guides.


    diff --git a/devGuide/styleGuides.page-vue-render.js b/devGuide/styleGuides.page-vue-render.js index 120a7818..c70bdf07 100644 --- a/devGuide/styleGuides.page-vue-render.js +++ b/devGuide/styleGuides.page-vue-render.js @@ -20,6 +20,6 @@ with(this){return _c('ul',[_c('li',[_c('a',{attrs:{"href":"https://se-education. with(this){return _c('div',{staticClass:"clearfix"},[_c('p',[_c('span',{staticClass:"float-start"},[_c('a',{staticClass:"btn btn-light",attrs:{"href":"/devdocs/devGuide/projectManagement.html"}},[_c('span',[_c('span',{staticClass:"far fa-arrow-alt-circle-left",attrs:{"aria-hidden":"true"}}),_v(" "),_c('span',[_v("Project management")])])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/index.html b/index.html index c03517a4..8b9513be 100644 --- a/index.html +++ b/index.html @@ -14,9 +14,9 @@

    Developer Guide

    - If you are a user, please visit MarkBind.org instead. -

    This is the latest Developer Guide for MarkBind.

    For contributors: please access the Developer Guide here

    +

    Developer Guide

    + If you are a user, please visit MarkBind.org instead. +

    This is the latest Developer Guide for MarkBind.

    For contributors: please access the Developer Guide here

    diff --git a/index.page-vue-render.js b/index.page-vue-render.js index b26c3113..f632aa1f 100644 --- a/index.page-vue-render.js +++ b/index.page-vue-render.js @@ -11,6 +11,6 @@ with(this){return _c('h2',{attrs:{"id":"developer-guide"}},[_v("Developer Guide" with(this){return _c('p',[_v("For contributors: please access the Developer Guide "),_c('a',{attrs:{"href":"/devdocs/devGuide/index.html"}},[_v("here")])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file diff --git a/markbind/css/markbind.min.css b/markbind/css/markbind.min.css index 8a5fb38d..f3f12c49 100644 --- a/markbind/css/markbind.min.css +++ b/markbind/css/markbind.min.css @@ -1 +1 @@ -.resize-observer[data-v-8859cc6c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-8859cc6c],.resize-observer[data-v-8859cc6c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.v-popper__popper{left:0;top:0;z-index:10000}.v-popper__popper.v-popper__popper--hidden{opacity:0;pointer-events:none;transition:opacity .15s,visibility .15s;visibility:hidden}.v-popper__popper.v-popper__popper--shown{opacity:1;transition:opacity .15s;visibility:visible}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition>.v-popper__wrapper{transition:none!important}.v-popper__backdrop{display:none;height:100%;left:0;position:absolute;top:0;width:100%}.v-popper__inner{box-sizing:border-box;overflow-y:auto;position:relative}.v-popper__inner>div{max-height:inherit;max-width:inherit;position:relative;z-index:1}.v-popper__arrow-container{height:10px;position:absolute;width:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;height:0;left:0;position:absolute;top:0;width:0}.v-popper__arrow-inner{border-width:7px;visibility:hidden}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-top-width:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-left-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-right-color:transparent!important;border-right-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner{left:-2px}.v-popper--theme-dropdown .v-popper__inner{background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 30px #0000001a;color:#000}.v-popper--theme-dropdown .v-popper__arrow-inner{border-color:#fff;visibility:visible}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);border-radius:6px;color:#fff;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}.box-container[data-v-6607c59e]{border-radius:6px;padding:0}.box-header-wrapper[data-v-6607c59e]{align-items:center;border-radius:6px 6px 0 0;display:flex;flex-direction:row;padding:.4rem 1.25rem .28rem;width:100%}.box-body-wrapper[data-v-6607c59e]{display:flex;flex-direction:row;padding:.75rem 1.25rem;width:100%}.box-container.seamless>.header-and-body>.box-body-wrapper[data-v-6607c59e]{padding:.75rem .5rem}.contents[data-v-6607c59e]{min-width:0;padding:0 6px;width:100%}.box-container.seamless>.header-and-body>div.box-body-wrapper>.contents[data-v-6607c59e]{padding-left:12px}.heading[data-v-6607c59e]{background-color:hsla(0,0%,94%,.6);border-radius:0 6px;border-width:0;color:inherit;display:inline;float:right;font-weight:400;margin:-13px -27px 0 15px;padding:3px 5px 4px;width:auto}.box-body-wrapper-with-heading[data-v-6607c59e]{padding-top:.5rem}.alert-dismissible-box[data-v-6607c59e]{padding-right:4rem}.box-header[data-v-6607c59e]{font-weight:500}.icon-wrapper[data-v-6607c59e]{display:inline;margin-right:.5em;min-width:1em;text-align:center}.close-with-heading[data-v-6607c59e]{padding:1rem;position:absolute;right:0;top:0}.close-with-heading>span[data-v-6607c59e]{vertical-align:text-top}.alert-dismissible-box .btn-close[data-v-6607c59e]{padding:1rem}.contents[data-v-6607c59e]>:last-child{margin-bottom:0}.alert-default[data-v-6607c59e]{background-color:#f6f8fa;border-color:#e8ebef;color:#24292e}.alert-border-left[data-v-6607c59e]{background-color:#f9f8f8;border-left:solid;border-width:0 0 0 5px}.vertical-divider[data-v-6607c59e]{width:4px}.horizontal-divider[data-v-6607c59e]{height:3px;margin:0 auto;width:calc(100% - 2.5rem)}.no-background[data-v-6607c59e]{background:none}.no-border[data-v-6607c59e]{border:none}@media screen and (width <= 768px){.box-header-wrapper[data-v-6607c59e]{padding:.75rem .75rem .1rem}.box-body-wrapper[data-v-6607c59e]{padding:.75rem}.contents[data-v-6607c59e]{padding:0}}div.box-header>*{margin-bottom:0}.notlink[data-v-ef898034]{color:#6d757d}.breadcrumb-divider[data-v-ef898034]{--bs-breadcrumb-divider:"›"}.breadcrumb-item[data-v-ef898034]:before,.breadcrumb-marker[data-v-ef898034]{font-size:15px}.dropdown-submenu[data-v-3c82541c]{color:#212529!important;padding:0!important;position:relative}.dropdown-submenu ul.dropdown-menu[data-v-3c82541c]{margin-left:0}.btn-group>ul>.dropdown-submenu:last-child>ul[data-v-3c82541c],.dropdown>ul>.dropdown-submenu:last-child>ul[data-v-3c82541c]{margin-bottom:-.5rem}@media (width >= 768px){.submenu-toggle[data-v-3c82541c]:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;float:right;height:0;margin-top:.5em;vertical-align:.255em;width:0}}@media (width <= 767px){.dropdown-submenu>ul[data-v-3c82541c]{border-radius:0;float:none;margin:-.05rem;padding-bottom:0;position:static}.submenu-toggle[data-v-3c82541c]:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;float:right;height:0;margin-left:.255em;margin-top:.5em;vertical-align:.255em;width:0}.navbar-default .dropdown[data-v-99624572]{position:static}.navbar-default .dropdown-menu[data-v-99624572]{max-height:75vh;max-width:100%;overflow-y:auto;overscroll-behavior:contain;position:absolute}.navbar-default .dropdown-menu-end[data-v-99624572]{right:auto}}.secret[data-v-99624572]{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.btn-with-before[data-v-99624572]{padding-left:.2rem;padding-right:.4rem}.dropdown-toggle[data-v-99624572]{cursor:pointer;display:block;width:max-content}.navbar .dropdown-toggle[data-v-99624572]{text-decoration:none}.nav-link>.nav-link[data-v-99624572]{padding:0}.toggle-site-nav-button[data-v-d6ffaa8e]{cursor:pointer;height:53px;left:0;padding:15px;position:absolute;transform:rotate(0deg);transition:all .25s ease-in-out;width:52px}.toggle-site-nav-button span[data-v-d6ffaa8e]{background-color:#000;display:block;height:3px;left:15px;position:absolute;top:50%;transition:all .25s ease-in-out;width:21px}.toggle-site-nav-button>span[data-v-d6ffaa8e]:first-child{transform:translateY(-8px)}.toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(2){transform-origin:100% 50%}.toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-site-nav-button>span[data-v-d6ffaa8e]:first-child{transform:rotate(135deg)}.nav-menu-close-icon .toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(2){left:-60px;opacity:0}.nav-menu-close-icon .toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(3){transform:rotate(-135deg)}.toggle-page-nav-button[data-v-4b08b1df]{cursor:pointer;padding:15px;position:absolute;right:0;top:6px}.toggle-page-nav-button span[data-v-4b08b1df]{background-color:#000;border-radius:50%;display:block;height:5px;margin-top:2px;position:absolute;right:15px;transform:rotate(0deg);transition:all .25s ease-in-out;width:5px}.toggle-page-nav-button>span[data-v-4b08b1df]:first-child{transform:translateY(-8px)}.toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(2){transform-origin:100% 50%}.toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-page-nav-button>span[data-v-4b08b1df]:first-child{border-radius:0;height:3px;transform:rotate(135deg);width:21px}.nav-menu-close-icon .toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(2){transform:scale(0)}.nav-menu-close-icon .toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(3){border-radius:0;height:3px;transform:rotate(-135deg);width:21px}@media (width <= 767px){.navbar[data-v-7c0fd418]{padding-bottom:0;padding-left:0;padding-right:0}.navbar-left[data-v-7c0fd418]{max-width:50%;order:1;padding-left:1rem}.navbar-left [data-v-7c0fd418]{white-space:normal}.navbar-right[data-v-7c0fd418]{max-width:50%;order:1;padding:0 16px}.navbar-default[data-v-7c0fd418]{-ms-overflow-style:none;display:block;margin-top:.3125rem;order:2;overflow-x:scroll;scrollbar-width:none;width:100%}.navbar-default[data-v-7c0fd418]::-webkit-scrollbar{display:none}.navbar-default ul[data-v-7c0fd418]{flex-direction:row;margin-top:0!important;width:100%}.navbar-default>ul>[data-v-7c0fd418]{background:rgba(0,0,0,.2);flex-grow:1;padding:.3125rem .625rem}.navbar-light .navbar-default>ul>[data-v-7c0fd418]{background:rgb(0 0 0/5%)}.navbar-default>ul>.current[data-v-7c0fd418]{background:transparent}.navbar-default a[data-v-7c0fd418],[data-v-7c0fd418] .dropdown-toggle{margin:0 auto;width:max-content}[data-v-7c0fd418] .dropdown{align-items:center;display:flex}.container-fluid[data-v-7c0fd418]{padding:0}}.navbar-brand[data-v-7c0fd418]{display:inline-block}.navbar-brand>img[data-v-7c0fd418],.navbar-brand>svg[data-v-7c0fd418]{display:block}.navbar-right[data-v-7c0fd418]{padding-right:1rem}.navbar-left[data-v-7c0fd418]{align-items:center;display:flex;font-size:1.25rem;line-height:inherit;padding:.3125rem 1rem;white-space:nowrap}.navbar-fixed[data-v-7c0fd418]{position:fixed;width:100%;z-index:1000}.navbar-default[data-v-7c0fd418]{align-items:center;display:flex;flex-basis:auto;flex-grow:1}[data-v-7c0fd418] .dropdown-current{background:#007bff;color:#fff!important}.lower-navbar-container[data-v-7c0fd418]{background-color:#fff;border-bottom:1px solid #c1c1c1;height:50px;position:relative;width:100%}.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .dropdown.current>a{color:#fff}.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .dropdown.current>a{color:#000}.btn-seamless{border-color:inherit;color:inherit}.btn-seamless:hover{background-color:inherit;color:inherit}.collapse-button{float:right;font-size:10px!important;margin-left:3px;margin-top:2px;padding:3px 8px!important}.collapse-icon{transition:transform .4s ease-in-out}.collapse-icon.opened{transform:rotate(-180deg)}.card-container[data-v-c545cba4]{scroll-margin-top:var(--sticky-header-height)}.card-collapse[data-v-c545cba4]{overflow:hidden;transition:max-height .5s ease-in-out}.seamless-button[data-v-c545cba4]{border-color:inherit;color:inherit;opacity:0;transition:opacity .3s}.seamless-button[data-v-c545cba4]:hover{background-color:color-mix(in srgb,currentcolor 25%,transparent);border-color:transparent}.card-header:hover .seamless-button[data-v-c545cba4]{opacity:1}.card-peek-collapsed[data-v-c545cba4]{position:relative}.card-peek-collapsed[data-v-c545cba4]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:"";height:125px;position:absolute;width:100%}.peek-read-more[data-v-c545cba4]{opacity:.2;transition:opacity .5s;z-index:1}.peek-read-more[data-v-c545cba4]:before{bottom:10px;position:absolute;text-align:center;width:100%}.peek-read-more[data-v-c545cba4]:hover{cursor:pointer;opacity:.4}.peek-read-more-fade-enter[data-v-c545cba4],.peek-read-more-fade-leave-to[data-v-c545cba4]{opacity:0}.card-heading{width:100%}.card-seamless{background-color:inherit}.card-title{display:inline-block;font-size:1em;line-height:1.2em;margin:0;text-align:left;white-space:normal}.card-title *{margin-bottom:0!important}.caret-wrapper{float:left;width:32px}.minimal-caret-wrapper{display:inline-block;font-size:13px;margin-right:5px}.header-wrapper{display:inline-block;transition:opacity .5s;width:calc(100% - 128px)}.header-transparent{opacity:0}.button-wrapper{float:right;width:96px}.header-toggle{cursor:pointer}.expandable-card{margin-bottom:0!important;margin-top:5px}.card-collapse>hr{background-color:currentcolor;margin-top:0;opacity:.5}.card-group>.card-container>.expandable-card{margin-top:0!important}.bottom-button-wrapper{margin-bottom:13px;padding-bottom:13px}.bottom-button-wrapper>.collapse-button{margin-top:5px;opacity:.5}.bottom-button-wrapper>.collapse-button:hover{opacity:1}.close-button{margin-left:3px}.close-button,.popup-button{float:right;font-size:10px!important;margin-top:2px;padding:3px 8px!important}.morph{display:inline-block}.morph-display-wrapper{align-items:center;display:flex;margin-top:5px}.morph-display-wrapper-seamless,.morph-display-wrapper-seamless:hover{color:inherit}@media (width <= 575.98px){.header-wrapper{display:inline-block;width:calc(100% - 64px)}.button-wrapper{float:right;width:32px}.card-body{padding:.5rem}.card-collapse>hr{margin-top:.5rem}.card-header{padding:.5rem}}.card-peek-collapsed[data-v-6cec1f15]{position:relative}.card-peek-collapsed[data-v-6cec1f15]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:"";height:125px;position:absolute;width:100%}.morph-title[data-v-6cec1f15]{background-color:transparent;border-color:#000;padding:0 .3em;vertical-align:top}.morph-title[data-v-6cec1f15]:active,.morph-title[data-v-6cec1f15]:focus,.morph-title[data-v-6cec1f15]:hover{background-color:#343a40;border-color:#343a40;color:#fff}.card-collapse[data-v-6cec1f15]{overflow:hidden;transition:max-height .5s ease-in-out}.card-flex[data-v-6cec1f15]{border:0;display:flex;flex-direction:column;margin:0}.header-fade-enter[data-v-6cec1f15]{opacity:0}.header-fade-leave-active[data-v-6cec1f15]{position:absolute}.header-fade-leave-to[data-v-6cec1f15]{opacity:0!important}.card-title-inline[data-v-6cec1f15]{display:inline-block}.card-body[data-v-6cec1f15]{padding:0}.header-wrapper[data-v-6cec1f15]{background-color:#fff;display:inline-block;width:100%}.header-wrapper-bottom[data-v-6cec1f15]{order:1}.ellipses[data-v-6cec1f15]:before{bottom:3px;content:"...";font-weight:900;margin-right:4px;position:relative}.button-wrapper[data-v-6cec1f15]{border:solid hsla(0,0%,59%,.2);border-width:0 0 0 1px;display:inline-block;float:none;margin-left:2px;opacity:0;padding-left:2px;transition:opacity .5s;vertical-align:text-top;width:auto}.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;padding-left:0}.card:hover .button-wrapper[data-v-6cec1f15]{opacity:1}.header-toggle[data-v-6cec1f15]{cursor:pointer}.glyphicon[data-v-6cec1f15]{font-size:12px}.minimal-button[data-v-6cec1f15]{background-color:transparent;border:0;color:#969696;cursor:pointer;padding:0 3px}.minimal-button[data-v-6cec1f15]:active,.minimal-button[data-v-6cec1f15]:focus,.minimal-button[data-v-6cec1f15]:hover{color:#1e1e1e}.minimal-popup-button[data-v-6cec1f15]{font-size:9px;top:1px}.minimal-menu-up[data-v-6cec1f15]{font-size:13px;top:2px}.minimal-menu-down[data-v-6cec1f15]{font-size:13px;top:1px}.minimal-close-button[data-v-6cec1f15]{font-size:11px;top:0}@media (width <= 575.98px){.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;opacity:.15;padding-left:0}.button-wrapper-visible[data-v-6cec1f15]{opacity:1}}.annotate-image-wrapper{display:inline-block;position:relative;text-align:left}.annotate-image{height:auto;max-width:100%}.annotate-point{bottom:0;left:0;pointer-events:none;top:0}.annotate-point,.popover-annotation{height:100%;position:absolute;width:100%}.hover-point{border-radius:50%;border-style:solid;border-width:1px;z-index:1}.hover-label{pointer-events:none;position:absolute;text-align:center;z-index:2}.hover-wrapper{align-items:center;background:transparent;display:inline-flex;justify-content:center;z-index:0}.legend-wrapper{height:100%;position:relative}.text-header{font-size:1.1em;font-weight:500;margin-top:1em}.image-wrapper{display:inline-block;padding:4px;text-align:center}.image-caption{display:block}.quiz-container[data-v-2b2275c0]{isolation:isolate;overflow:hidden}.intro-outro-card[data-v-2b2275c0]{transition:transform .35s ease-out,opacity .35s linear}.intro-outro-card-enter-active[data-v-2b2275c0],.intro-outro-card-leave-to[data-v-2b2275c0]{opacity:0}.intro-outro-card>.card-body[data-v-2b2275c0]{align-items:center;display:flex;flex-direction:column;justify-content:center}.score[data-v-2b2275c0]{font-size:1.4rem;font-weight:700}.score-circle[data-v-2b2275c0]{stroke-dasharray:264;fill:none;stroke:rgba(132,215,255,.8);stroke-width:8;transition:stroke-dashoffset 1.5s ease-out,stroke 1.5s linear}.score-background-circle[data-v-2b2275c0]{fill:none;stroke:hsla(0,2%,89%,.5);stroke-width:8}.btn[data-v-2b2275c0]{border-radius:2em}.progress-bar-z[data-v-2b2275c0]{z-index:1}.result-icon[data-v-ae369d74]{align-items:center;border-radius:2em;border-style:solid;border-width:2px;display:inline-flex;height:2em;justify-content:center;width:2em}.question[data-v-ae369d74]{margin-bottom:1rem;transition:transform .35s ease-out,opacity .35s linear}.question-enter-active[data-v-ae369d74]{opacity:0;transform:translateY(-2%)}.question-leave-to[data-v-ae369d74]{opacity:0;transform:translateY(2%)}.q-btn[data-v-ae369d74]{border-radius:2.5em;transition:opacity .5s,transform .7s}.q-btn-enter[data-v-ae369d74]{opacity:0;transform:translateY(30px)}.q-btn-leave-to[data-v-ae369d74]{opacity:0;transform:translateX(calc(-100% - .25rem))}.q-btn-leave-active[data-v-ae369d74]{position:absolute}.card-header[data-v-ae369d74]{font-size:1.05em;font-weight:400}.answer[data-v-ae369d74]>:last-child,.card-header[data-v-ae369d74]>:last-child{margin-bottom:0}@keyframes shake-data-v-ae369d74{50%{transform:translate(-2px)}to{transform:translate(2px)}}.shake[data-v-ae369d74]{animation:shake-data-v-ae369d74 .15s;animation-iteration-count:1}textarea.form-control[data-v-ae369d74]{height:auto;margin-bottom:10px;min-height:75px}.fa-check[data-v-1074287c],.fa-times[data-v-1074287c]{font-size:1.2em}.content[data-v-1074287c] :last-child,.reason[data-v-1074287c] :last-child{margin-bottom:0}.reason[data-v-1074287c]{padding:0 .5rem}.checkbox-label[data-v-1074287c]{cursor:pointer}.form-control[data-v-1074287c]{cursor:pointer;height:auto;margin-bottom:10px}.form-control.danger>.checkbox-label[data-v-1074287c],.form-control.danger[data-v-1074287c],.form-control.success>.checkbox-label[data-v-1074287c],.form-control.success[data-v-1074287c]{cursor:default}.disabled[data-v-1074287c]{opacity:.9}.radio-svg[data-v-1074287c]{height:1em;vertical-align:text-top;width:1em}.checkbox[data-v-1074287c]{height:1em;margin-right:5px;vertical-align:middle;width:1em}.row[data-v-1074287c]{align-items:center;margin:.2rem 0 0}input.form-control[data-v-1074287c]{cursor:text;height:auto;margin-bottom:0;min-height:20px;width:50%}.blanks-keywords[data-v-1074287c],input.form-control[data-v-1074287c]:disabled{margin-bottom:.5rem}.blanks-form-control[data-v-1074287c]{border:none;cursor:default}.blanks-cross[data-v-1074287c]{margin-left:3px;margin-right:3px}.fa-hashtag[data-v-98afe086],.fa-key[data-v-98afe086]{padding-right:.2em}.mark[data-v-98afe086]{padding:0!important}.heading[data-v-98afe086]{padding:0 0 .1rem .2rem}.heading-text[data-v-98afe086]{display:inline-block;vertical-align:top;white-space:normal;width:92%;word-break:break-word}.keyword-text[data-v-98afe086]{font-size:smaller}.page-title[data-v-98afe086]{font-size:1.05rem;font-weight:700}.page-headings-separator[data-v-98afe086]{margin:.2rem 0}.dropdown[data-v-cea1a814]{display:block}.form-control[data-v-cea1a814]{max-width:25.4em;min-width:12.7em}@media screen and (width <= 878px) and (orientation:portrait){.form-control[data-v-cea1a814]{max-width:16em;min-width:8em}}@media screen and (width >= 768px) and (width <= 878px) and (orientation:landscape){.form-control[data-v-cea1a814]{max-width:18em;min-width:9em}}.table-active[data-v-cea1a814]{background-color:rgba(0,0,0,.075)}.dropdown-menu-end[data-v-cea1a814]{left:auto;right:0}.placeholder-div-hidden[data-v-cea1a814]{border-bottom:0;border-top:0;height:0;overflow:hidden;padding-bottom:0;padding-top:0;visibility:hidden}.search-dropdown-menu{max-height:30em;min-width:30em;overflow-y:scroll}.dropdown-menu>li>a{cursor:pointer}@media screen and (width <= 768px){.search-dropdown-menu{max-height:30em;min-width:90vw;overflow-y:scroll}.dropdown-menu.search-dropdown-menu{position:absolute}}.tab-pane>hr[data-v-661c1b61]{margin:0}.printable-tab-header[data-v-661c1b61],.tab-pane-hide[data-v-661c1b61]{display:none}@media print{.printable-tab-header[data-v-661c1b61]{border-bottom:1px solid #dee2e6;display:flex;margin-bottom:15px}.printable-tab-header>div[data-v-661c1b61]{margin-bottom:-2px}.printable-tab-pane[data-v-661c1b61]{display:block;padding:10px}}.nav-tabs[data-v-a785351c]{margin-bottom:15px}.printable-tab-group-header[data-v-a785351c]{display:none}@media print{.printable-tab-group[data-v-a785351c]{border:1px solid #dee2e6;border-radius:5px;margin:10px 0;padding:10px}.printable-tab-group-header[data-v-a785351c]{display:block;margin-bottom:10px;text-decoration:underline}}.nav-tabs[data-v-05434e42]{margin-bottom:15px}.tab-content[data-v-05434e42]{margin-bottom:1.5rem}@media print{.printable-tabs[data-v-05434e42]{border:1px solid #dee2e6;border-radius:5px;padding:20px}}.thumb-wrapper{display:inline-block;overflow:hidden;position:relative;text-align:center;vertical-align:middle}.thumb-circle{border-radius:50%}.thumb-image{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.site-nav-root a.current{color:#0072ec}.site-nav-list{list-style-type:none;padding-left:0}.site-nav-default-list-item{cursor:pointer;display:flex;transition:background-color .08s}.site-nav-custom-list-item,.site-nav-default-list-item{color:#454545;padding:.5rem 0 0 2.8rem}.site-nav-list-item-0{font-size:1.2em;font-weight:500;padding:.5rem 0 .5rem .8rem}.site-nav-list-item-1{font-size:1.03em;padding:.4rem 0 .4rem 1.3rem}.site-nav-list-item-2{font-size:.89em;padding:.3rem 0 .3rem 1.8rem}.site-nav-list-item-3{font-size:.76em;padding:.2rem 0 .2rem 2.4rem}.site-nav-default-list-item:hover{background-color:rgba(214,233,255,.35)}.site-nav-default-list-item a{color:#454545;display:inline-block;height:100%}.site-nav-default-list-item:hover a{color:#000;text-decoration:none}.site-nav-dropdown-btn-container{display:flex;height:1.5em;margin:0 .75rem 0 auto;place-content:center center;width:2rem}.site-nav-dropdown-btn-icon{align-self:center;border-radius:1rem;display:inline-block;height:1.5em;padding:0;text-align:center;transform:rotate(0deg);transition:.4s;vertical-align:baseline;width:1.5em}.site-nav-dropdown-btn-icon:hover{background-color:#d8e3fb}.site-nav-rotate-icon{color:#4c7ff1;transform:rotate(-180deg)}.site-nav-dropdown-container{background:transparent;max-height:0;overflow:hidden;transition:max-height .15s ease-out}.site-nav-dropdown-container-open{max-height:1000px;transition:max-height .25s ease-in}.nav-menu[data-v-1a3e7aee]{display:none;overflow-y:auto;padding:0 10px 20px;position:absolute;top:100%}.nav-menu-open[data-v-1a3e7aee]{background:#fff;clear:both;display:block!important;width:100%!important}.mb-mobile-nav[data-v-e6005420]{border:none!important;display:block!important;margin:0!important;max-width:100%!important;padding:10px!important;width:100%!important}.popover-container{max-height:50vh;max-width:276px;overflow:auto}.popover-body{font-size:.875rem}.v-popper{display:inline}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.9);font-size:.875rem;max-width:200px;padding:4px 8px;text-align:center}.modal{display:block}.modal-zoom{opacity:0;transform:scale(.1);transition:all .3s}.modal-zoom-show{opacity:1;transform:scale(1);transition:all .3s}.scroll-top-button{bottom:20px;cursor:pointer;display:none;opacity:.4;position:fixed;right:30px;transition-duration:.25s;transition-property:opacity;z-index:99}.scroll-top-button.lighten{opacity:.15}@media (hover:hover){.scroll-top-button:hover{opacity:.7}}.scroll-top-button:active{opacity:1}@media print{.hljs{background:#f8f8ff;color:#333;display:block;overflow-x:auto;padding:.5em}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs span.highlighted{background:#e6e6fa}.hljs.inline{background:#f8f8f8}.hljs.inline.no-lang{color:#e83e8c}.hljs:not(.inline){border:1px solid #c8c8c8;border:1px solid hsla(0,0%,78%,.3)}.code-block-heading{background:#f2f2ff;color:#8787a5}button.function-btn{background-color:#f8f8ff}}:root{--sticky-header-height:0}a{text-decoration:none}blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1rem}code{background:#f8f8f8;border-radius:3px;padding:.2em .4em;word-break:normal}mark code{background:#ffffffd4}pre.hljs>code{background:none}pre>code.hljs{background-clip:padding-box;border-radius:5px;counter-reset:line;width:100%}pre>code.hljs[heading]{border-top-right-radius:0}.code-block{position:relative}.code-block-heading{border-radius:6px 6px 0 0;float:right;font-size:85%;line-height:1;margin-top:5px;max-width:85%;overflow-wrap:break-word;padding:.25em .4em;text-align:right}.inline-markdown-heading{line-height:1.5}.code-block-content{clear:both;display:block}@media print{pre>code.hljs{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.hljs:not(.inline).line-numbers-print>span{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers-print>span:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.hljs span.highlighted{background:#e6e6fa!important;-webkit-print-color-adjust:exact}}kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;color:#444d56}.btn:active,.btn:focus{box-shadow:none!important;outline:none!important}code.hljs.inline{display:initial;padding:.2em .4em}.markbind-table{width:auto}.radio-list-item,.task-list-item{list-style-type:none;margin:0 0 0 -1.2em}.radio-list-item label{font-weight:inherit}.table-striped>tbody>tr:nth-of-type(2n),.table-striped>thead{background-color:#fff}header[sticky]{position:sticky;top:0;transition:transform .3s ease-in-out;width:100%;z-index:1001}header[sticky].hide-header{transform:translateY(calc(var(--sticky-header-height)*-1))}span.anchor{position:relative;top:calc(var(--sticky-header-height)*-1 - 1rem)}#app{display:flex;flex-direction:column;min-height:100vh}footer{background-color:#f5f5f5;color:dimgrey;padding:10px 0}.dimmed{color:#777}.large{font-size:125%}.small{font-size:80%}.underline{text-decoration:underline}.mkb-text-red{color:red!important}.mkb-text-green{color:green!important}.mkb-text-blue{color:blue!important}.mkb-text-cyan{color:cyan!important}.mkb-text-magenta{color:#f0f!important}.mkb-text-yellow{color:#ff0!important}.mkb-text-black{color:#000!important}.mkb-text-white{color:#fff!important}@media (width <= 767.98px){.dropdown-menu>li>a{white-space:normal}.navbar-nav .open .dropdown-menu{background-color:#fff}}li.footnote-item:target{background-color:#eee}.hljs:not(.inline)>span{display:block}.hljs:not(.inline).line-numbers>span{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers>span:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.trigger{border-bottom:1px dotted}.trigger-click{border-bottom:1px dashed;cursor:pointer}.trigger-click:focus{outline:none}pre{display:flex;position:relative}button.function-btn{border:1px solid #d7dadc;border-radius:5px;color:#a9a9a9;cursor:pointer;display:none;margin:.17rem;padding:.35rem;position:absolute;right:0;text-align:center;white-space:nowrap}button.function-btn+button.function-btn{right:36px}pre:hover>.function-btn-container>button.function-btn{display:block}.function-btn:hover{color:gray;transition:all .5s ease}.function-btn-body{align-items:center;display:flex}.function-btn svg{fill:currentcolor}code.wrap{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.octicon{height:1em;width:1em}hr{background-color:transparent;border-top:1px solid rgba(0,0,0,.1);opacity:1}hr.dotted{border-top-style:dotted;border-top-width:.1rem}hr.double{border-top-style:double;border-top-width:.2rem}hr.dashed{border-top-style:dashed;border-top-width:.1rem}hr.thick{border-top-width:.15rem}hr.thick-1{border-top-width:.25rem}hr.thick-2{border-top-width:.5rem}hr.thick-3{border-top-width:.75rem}ol,ul{padding-left:1.5rem}h1,h2,h3,h4,h5,h6{margin-bottom:1rem;scroll-margin-top:var(--sticky-header-height)}.block-embed{overflow-x:auto;position:relative;width:100%}.block-embed iframe{height:100%;left:0;position:absolute;top:0;width:100%}#mb-page-nav{padding:.8rem 12px 0}#mb-page-nav a:link,#mb-page-nav a:visited{color:#9b9b9b;text-decoration:none}#mb-page-nav a:hover{color:#000}#mb-page-nav a.active{background-color:transparent;color:#000}.page-nav-title{color:#000;display:block;padding-left:.5rem;white-space:inherit}.nested{margin-left:5%}.no-flex-wrap{flex-wrap:nowrap}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(../fonts/KaTeX_AMS-Regular.woff) format("woff"),url(../fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(../fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(../fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(../fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(../fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(../fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(../fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(../fonts/KaTeX_Main-Bold.woff) format("woff"),url(../fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(../fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(../fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(../fonts/KaTeX_Main-Italic.woff) format("woff"),url(../fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Main-Regular.woff) format("woff"),url(../fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(../fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(../fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(../fonts/KaTeX_Math-Italic.woff) format("woff"),url(../fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(../fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(../fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(../fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(../fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(../fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(../fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(../fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Script-Regular.woff) format("woff"),url(../fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size1-Regular.woff) format("woff"),url(../fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size2-Regular.woff) format("woff"),url(../fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size3-Regular.woff) format("woff"),url(../fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size4-Regular.woff) format("woff"),url(../fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(../fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.15.6"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.katex{font-size:1em!important}eq{display:inline-block}eqn{display:block}section.eqno{align-content:space-between;align-items:center;display:flex;flex-direction:row}section.eqno>eqn{margin-left:3em;width:100%}section.eqno>span{text-align:right;width:3em} \ No newline at end of file +.resize-observer[data-v-8859cc6c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-8859cc6c],.resize-observer[data-v-8859cc6c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.v-popper__popper{left:0;top:0;z-index:10000}.v-popper__popper.v-popper__popper--hidden{opacity:0;pointer-events:none;transition:opacity .15s,visibility .15s;visibility:hidden}.v-popper__popper.v-popper__popper--shown{opacity:1;transition:opacity .15s;visibility:visible}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition>.v-popper__wrapper{transition:none!important}.v-popper__backdrop{display:none;height:100%;left:0;position:absolute;top:0;width:100%}.v-popper__inner{box-sizing:border-box;overflow-y:auto;position:relative}.v-popper__inner>div{max-height:inherit;max-width:inherit;position:relative;z-index:1}.v-popper__arrow-container{height:10px;position:absolute;width:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;height:0;left:0;position:absolute;top:0;width:0}.v-popper__arrow-inner{border-width:7px;visibility:hidden}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-top-width:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-left-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-right-color:transparent!important;border-right-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner{left:-2px}.v-popper--theme-dropdown .v-popper__inner{background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 30px #0000001a;color:#000}.v-popper--theme-dropdown .v-popper__arrow-inner{border-color:#fff;visibility:visible}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);border-radius:6px;color:#fff;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}.box-container[data-v-474166ec]{border-radius:6px;padding:0}.box-header-wrapper[data-v-474166ec]{align-items:center;border-radius:6px 6px 0 0;display:flex;flex-direction:row;padding:.4rem 1.25rem .28rem;width:100%}.box-body-wrapper[data-v-474166ec]{display:flex;flex-direction:row;padding:.75rem 1.25rem;width:100%}.box-container.seamless>.header-and-body>.box-body-wrapper[data-v-474166ec]{padding:.75rem .5rem}.contents[data-v-474166ec]{min-width:0;padding:0 6px;width:100%}.box-container.seamless>.header-and-body>div.box-body-wrapper>.contents[data-v-474166ec]{padding-left:12px}.heading[data-v-474166ec]{background-color:hsla(0,0%,94%,.6);border-radius:0 6px;border-width:0;color:inherit;display:inline;float:right;font-weight:400;margin:-13px -27px 0 15px;padding:3px 5px 4px;width:auto}.box-body-wrapper-with-heading[data-v-474166ec]{padding-top:.5rem}.alert-dismissible-box[data-v-474166ec]{padding-right:4rem}.box-header[data-v-474166ec]{font-weight:500}.icon-wrapper[data-v-474166ec]{display:inline;margin-right:.5em;min-width:1em;text-align:center}.close-with-heading[data-v-474166ec]{padding:1rem;position:absolute;right:0;top:0}.close-with-heading>span[data-v-474166ec]{vertical-align:text-top}.alert-dismissible-box .btn-close[data-v-474166ec]{padding:1rem;position:absolute;right:0;top:0;z-index:2}.contents[data-v-474166ec]>:last-child{margin-bottom:0}.alert-default[data-v-474166ec]{background-color:#f6f8fa;border-color:#e8ebef;color:#24292e}.alert-border-left[data-v-474166ec]{background-color:#f9f8f8;border-left:solid;border-width:0 0 0 5px}.vertical-divider[data-v-474166ec]{width:4px}.horizontal-divider[data-v-474166ec]{height:3px;margin:0 auto;width:calc(100% - 2.5rem)}.no-background[data-v-474166ec]{background:none}.no-border[data-v-474166ec]{border:none}@media screen and (width <= 768px){.box-header-wrapper[data-v-474166ec]{padding:.75rem .75rem .1rem}.box-body-wrapper[data-v-474166ec]{padding:.75rem}.contents[data-v-474166ec]{padding:0}}div.box-header>*{margin-bottom:0}.notlink[data-v-ef898034]{color:#6d757d}.breadcrumb-divider[data-v-ef898034]{--bs-breadcrumb-divider:"›"}.breadcrumb-item[data-v-ef898034]:before,.breadcrumb-marker[data-v-ef898034]{font-size:15px}.dropdown-submenu[data-v-3c82541c]{color:#212529!important;padding:0!important;position:relative}.dropdown-submenu ul.dropdown-menu[data-v-3c82541c]{margin-left:0}.btn-group>ul>.dropdown-submenu:last-child>ul[data-v-3c82541c],.dropdown>ul>.dropdown-submenu:last-child>ul[data-v-3c82541c]{margin-bottom:-.5rem}@media (width >= 768px){.submenu-toggle[data-v-3c82541c]:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;float:right;height:0;margin-top:.5em;vertical-align:.255em;width:0}}@media (width <= 767px){.dropdown-submenu>ul[data-v-3c82541c]{border-radius:0;float:none;margin:-.05rem;padding-bottom:0;position:static}.submenu-toggle[data-v-3c82541c]:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;float:right;height:0;margin-left:.255em;margin-top:.5em;vertical-align:.255em;width:0}.navbar-default .dropdown[data-v-99624572]{position:static}.navbar-default .dropdown-menu[data-v-99624572]{max-height:75vh;max-width:100%;overflow-y:auto;overscroll-behavior:contain;position:absolute}.navbar-default .dropdown-menu-end[data-v-99624572]{right:auto}}.secret[data-v-99624572]{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.btn-with-before[data-v-99624572]{padding-left:.2rem;padding-right:.4rem}.dropdown-toggle[data-v-99624572]{cursor:pointer;display:block;width:max-content}.navbar .dropdown-toggle[data-v-99624572]{text-decoration:none}.nav-link>.nav-link[data-v-99624572]{padding:0}.toggle-site-nav-button[data-v-d6ffaa8e]{cursor:pointer;height:53px;left:0;padding:15px;position:absolute;transform:rotate(0deg);transition:all .25s ease-in-out;width:52px}.toggle-site-nav-button span[data-v-d6ffaa8e]{background-color:#000;display:block;height:3px;left:15px;position:absolute;top:50%;transition:all .25s ease-in-out;width:21px}.toggle-site-nav-button>span[data-v-d6ffaa8e]:first-child{transform:translateY(-8px)}.toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(2){transform-origin:100% 50%}.toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-site-nav-button>span[data-v-d6ffaa8e]:first-child{transform:rotate(135deg)}.nav-menu-close-icon .toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(2){left:-60px;opacity:0}.nav-menu-close-icon .toggle-site-nav-button>span[data-v-d6ffaa8e]:nth-child(3){transform:rotate(-135deg)}.toggle-page-nav-button[data-v-4b08b1df]{cursor:pointer;padding:15px;position:absolute;right:0;top:6px}.toggle-page-nav-button span[data-v-4b08b1df]{background-color:#000;border-radius:50%;display:block;height:5px;margin-top:2px;position:absolute;right:15px;transform:rotate(0deg);transition:all .25s ease-in-out;width:5px}.toggle-page-nav-button>span[data-v-4b08b1df]:first-child{transform:translateY(-8px)}.toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(2){transform-origin:100% 50%}.toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-page-nav-button>span[data-v-4b08b1df]:first-child{border-radius:0;height:3px;transform:rotate(135deg);width:21px}.nav-menu-close-icon .toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(2){transform:scale(0)}.nav-menu-close-icon .toggle-page-nav-button>span[data-v-4b08b1df]:nth-child(3){border-radius:0;height:3px;transform:rotate(-135deg);width:21px}@media (width <= 767px){.navbar[data-v-7c0fd418]{padding-bottom:0;padding-left:0;padding-right:0}.navbar-left[data-v-7c0fd418]{max-width:50%;order:1;padding-left:1rem}.navbar-left [data-v-7c0fd418]{white-space:normal}.navbar-right[data-v-7c0fd418]{max-width:50%;order:1;padding:0 16px}.navbar-default[data-v-7c0fd418]{-ms-overflow-style:none;display:block;margin-top:.3125rem;order:2;overflow-x:scroll;scrollbar-width:none;width:100%}.navbar-default[data-v-7c0fd418]::-webkit-scrollbar{display:none}.navbar-default ul[data-v-7c0fd418]{flex-direction:row;margin-top:0!important;width:100%}.navbar-default>ul>[data-v-7c0fd418]{background:rgba(0,0,0,.2);flex-grow:1;padding:.3125rem .625rem}.navbar-light .navbar-default>ul>[data-v-7c0fd418]{background:rgb(0 0 0/5%)}.navbar-default>ul>.current[data-v-7c0fd418]{background:transparent}.navbar-default a[data-v-7c0fd418],[data-v-7c0fd418] .dropdown-toggle{margin:0 auto;width:max-content}[data-v-7c0fd418] .dropdown{align-items:center;display:flex}.container-fluid[data-v-7c0fd418]{padding:0}}.navbar-brand[data-v-7c0fd418]{display:inline-block}.navbar-brand>img[data-v-7c0fd418],.navbar-brand>svg[data-v-7c0fd418]{display:block}.navbar-right[data-v-7c0fd418]{padding-right:1rem}.navbar-left[data-v-7c0fd418]{align-items:center;display:flex;font-size:1.25rem;line-height:inherit;padding:.3125rem 1rem;white-space:nowrap}.navbar-fixed[data-v-7c0fd418]{position:fixed;width:100%;z-index:1000}.navbar-default[data-v-7c0fd418]{align-items:center;display:flex;flex-basis:auto;flex-grow:1}[data-v-7c0fd418] .dropdown-current{background:#007bff;color:#fff!important}.lower-navbar-container[data-v-7c0fd418]{background-color:#fff;border-bottom:1px solid #c1c1c1;height:50px;position:relative;width:100%}.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .dropdown.current>a{color:#fff}.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .dropdown.current>a{color:#000}.btn-seamless{border-color:inherit;color:inherit}.btn-seamless:hover{background-color:inherit;color:inherit}.collapse-button{float:right;font-size:10px!important;margin-left:3px;margin-top:2px;padding:3px 8px!important}.collapse-icon{transition:transform .4s ease-in-out}.collapse-icon.opened{transform:rotate(-180deg)}.card-container[data-v-c545cba4]{scroll-margin-top:var(--sticky-header-height)}.card-collapse[data-v-c545cba4]{overflow:hidden;transition:max-height .5s ease-in-out}.seamless-button[data-v-c545cba4]{border-color:inherit;color:inherit;opacity:0;transition:opacity .3s}.seamless-button[data-v-c545cba4]:hover{background-color:color-mix(in srgb,currentcolor 25%,transparent);border-color:transparent}.card-header:hover .seamless-button[data-v-c545cba4]{opacity:1}.card-peek-collapsed[data-v-c545cba4]{position:relative}.card-peek-collapsed[data-v-c545cba4]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:"";height:125px;position:absolute;width:100%}.peek-read-more[data-v-c545cba4]{opacity:.2;transition:opacity .5s;z-index:1}.peek-read-more[data-v-c545cba4]:before{bottom:10px;position:absolute;text-align:center;width:100%}.peek-read-more[data-v-c545cba4]:hover{cursor:pointer;opacity:.4}.peek-read-more-fade-enter[data-v-c545cba4],.peek-read-more-fade-leave-to[data-v-c545cba4]{opacity:0}.card-heading{width:100%}.card-seamless{background-color:inherit}.card-title{display:inline-block;font-size:1em;line-height:1.2em;margin:0;text-align:left;white-space:normal}.card-title *{margin-bottom:0!important}.caret-wrapper{float:left;width:32px}.minimal-caret-wrapper{display:inline-block;font-size:13px;margin-right:5px}.header-wrapper{display:inline-block;transition:opacity .5s;width:calc(100% - 128px)}.header-transparent{opacity:0}.button-wrapper{float:right;width:96px}.header-toggle{cursor:pointer}.expandable-card{margin-bottom:0!important;margin-top:5px}.card-collapse>hr{background-color:currentcolor;margin-top:0;opacity:.5}.card-group>.card-container>.expandable-card{margin-top:0!important}.bottom-button-wrapper{margin-bottom:13px;padding-bottom:13px}.bottom-button-wrapper>.collapse-button{margin-top:5px;opacity:.5}.bottom-button-wrapper>.collapse-button:hover{opacity:1}.close-button{margin-left:3px}.close-button,.popup-button{float:right;font-size:10px!important;margin-top:2px;padding:3px 8px!important}.morph{display:inline-block}.morph-display-wrapper{align-items:center;display:flex;margin-top:5px}.morph-display-wrapper-seamless,.morph-display-wrapper-seamless:hover{color:inherit}@media (width <= 575.98px){.header-wrapper{display:inline-block;width:calc(100% - 64px)}.button-wrapper{float:right;width:32px}.card-body{padding:.5rem}.card-collapse>hr{margin-top:.5rem}.card-header{padding:.5rem}}.card-peek-collapsed[data-v-6cec1f15]{position:relative}.card-peek-collapsed[data-v-6cec1f15]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:"";height:125px;position:absolute;width:100%}.morph-title[data-v-6cec1f15]{background-color:transparent;border-color:#000;padding:0 .3em;vertical-align:top}.morph-title[data-v-6cec1f15]:active,.morph-title[data-v-6cec1f15]:focus,.morph-title[data-v-6cec1f15]:hover{background-color:#343a40;border-color:#343a40;color:#fff}.card-collapse[data-v-6cec1f15]{overflow:hidden;transition:max-height .5s ease-in-out}.card-flex[data-v-6cec1f15]{border:0;display:flex;flex-direction:column;margin:0}.header-fade-enter[data-v-6cec1f15]{opacity:0}.header-fade-leave-active[data-v-6cec1f15]{position:absolute}.header-fade-leave-to[data-v-6cec1f15]{opacity:0!important}.card-title-inline[data-v-6cec1f15]{display:inline-block}.card-body[data-v-6cec1f15]{padding:0}.header-wrapper[data-v-6cec1f15]{background-color:#fff;display:inline-block;width:100%}.header-wrapper-bottom[data-v-6cec1f15]{order:1}.ellipses[data-v-6cec1f15]:before{bottom:3px;content:"...";font-weight:900;margin-right:4px;position:relative}.button-wrapper[data-v-6cec1f15]{border:solid hsla(0,0%,59%,.2);border-width:0 0 0 1px;display:inline-block;float:none;margin-left:2px;opacity:0;padding-left:2px;transition:opacity .5s;vertical-align:text-top;width:auto}.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;padding-left:0}.card:hover .button-wrapper[data-v-6cec1f15]{opacity:1}.header-toggle[data-v-6cec1f15]{cursor:pointer}.glyphicon[data-v-6cec1f15]{font-size:12px}.minimal-button[data-v-6cec1f15]{background-color:transparent;border:0;color:#969696;cursor:pointer;padding:0 3px}.minimal-button[data-v-6cec1f15]:active,.minimal-button[data-v-6cec1f15]:focus,.minimal-button[data-v-6cec1f15]:hover{color:#1e1e1e}.minimal-popup-button[data-v-6cec1f15]{font-size:9px;top:1px}.minimal-menu-up[data-v-6cec1f15]{font-size:13px;top:2px}.minimal-menu-down[data-v-6cec1f15]{font-size:13px;top:1px}.minimal-close-button[data-v-6cec1f15]{font-size:11px;top:0}@media (width <= 575.98px){.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;opacity:.15;padding-left:0}.button-wrapper-visible[data-v-6cec1f15]{opacity:1}}.annotate-image-wrapper{display:inline-block;position:relative;text-align:left}.annotate-image{height:auto;max-width:100%}.annotate-point{bottom:0;left:0;pointer-events:none;top:0}.annotate-point,.popover-annotation{height:100%;position:absolute;width:100%}.hover-point{border-radius:50%;border-style:solid;border-width:1px;z-index:1}.hover-label{pointer-events:none;position:absolute;text-align:center;z-index:2}.hover-wrapper{align-items:center;background:transparent;display:inline-flex;justify-content:center;z-index:0}.legend-wrapper{height:100%;position:relative}.text-header{font-size:1.1em;font-weight:500;margin-top:1em}.image-wrapper{display:inline-block;padding:4px;text-align:center}.image-caption{display:block}.quiz-container[data-v-2b2275c0]{isolation:isolate;overflow:hidden}.intro-outro-card[data-v-2b2275c0]{transition:transform .35s ease-out,opacity .35s linear}.intro-outro-card-enter-active[data-v-2b2275c0],.intro-outro-card-leave-to[data-v-2b2275c0]{opacity:0}.intro-outro-card>.card-body[data-v-2b2275c0]{align-items:center;display:flex;flex-direction:column;justify-content:center}.score[data-v-2b2275c0]{font-size:1.4rem;font-weight:700}.score-circle[data-v-2b2275c0]{stroke-dasharray:264;fill:none;stroke:rgba(132,215,255,.8);stroke-width:8;transition:stroke-dashoffset 1.5s ease-out,stroke 1.5s linear}.score-background-circle[data-v-2b2275c0]{fill:none;stroke:hsla(0,2%,89%,.5);stroke-width:8}.btn[data-v-2b2275c0]{border-radius:2em}.progress-bar-z[data-v-2b2275c0]{z-index:1}.result-icon[data-v-ae369d74]{align-items:center;border-radius:2em;border-style:solid;border-width:2px;display:inline-flex;height:2em;justify-content:center;width:2em}.question[data-v-ae369d74]{margin-bottom:1rem;transition:transform .35s ease-out,opacity .35s linear}.question-enter-active[data-v-ae369d74]{opacity:0;transform:translateY(-2%)}.question-leave-to[data-v-ae369d74]{opacity:0;transform:translateY(2%)}.q-btn[data-v-ae369d74]{border-radius:2.5em;transition:opacity .5s,transform .7s}.q-btn-enter[data-v-ae369d74]{opacity:0;transform:translateY(30px)}.q-btn-leave-to[data-v-ae369d74]{opacity:0;transform:translateX(calc(-100% - .25rem))}.q-btn-leave-active[data-v-ae369d74]{position:absolute}.card-header[data-v-ae369d74]{font-size:1.05em;font-weight:400}.answer[data-v-ae369d74]>:last-child,.card-header[data-v-ae369d74]>:last-child{margin-bottom:0}@keyframes shake-data-v-ae369d74{50%{transform:translate(-2px)}to{transform:translate(2px)}}.shake[data-v-ae369d74]{animation:shake-data-v-ae369d74 .15s;animation-iteration-count:1}textarea.form-control[data-v-ae369d74]{height:auto;margin-bottom:10px;min-height:75px}.fa-check[data-v-1074287c],.fa-times[data-v-1074287c]{font-size:1.2em}.content[data-v-1074287c] :last-child,.reason[data-v-1074287c] :last-child{margin-bottom:0}.reason[data-v-1074287c]{padding:0 .5rem}.checkbox-label[data-v-1074287c]{cursor:pointer}.form-control[data-v-1074287c]{cursor:pointer;height:auto;margin-bottom:10px}.form-control.danger>.checkbox-label[data-v-1074287c],.form-control.danger[data-v-1074287c],.form-control.success>.checkbox-label[data-v-1074287c],.form-control.success[data-v-1074287c]{cursor:default}.disabled[data-v-1074287c]{opacity:.9}.radio-svg[data-v-1074287c]{height:1em;vertical-align:text-top;width:1em}.checkbox[data-v-1074287c]{height:1em;margin-right:5px;vertical-align:middle;width:1em}.row[data-v-1074287c]{align-items:center;margin:.2rem 0 0}input.form-control[data-v-1074287c]{cursor:text;height:auto;margin-bottom:0;min-height:20px;width:50%}.blanks-keywords[data-v-1074287c],input.form-control[data-v-1074287c]:disabled{margin-bottom:.5rem}.blanks-form-control[data-v-1074287c]{border:none;cursor:default}.blanks-cross[data-v-1074287c]{margin-left:3px;margin-right:3px}.fa-hashtag[data-v-98afe086],.fa-key[data-v-98afe086]{padding-right:.2em}.mark[data-v-98afe086]{padding:0!important}.heading[data-v-98afe086]{padding:0 0 .1rem .2rem}.heading-text[data-v-98afe086]{display:inline-block;vertical-align:top;white-space:normal;width:92%;word-break:break-word}.keyword-text[data-v-98afe086]{font-size:smaller}.page-title[data-v-98afe086]{font-size:1.05rem;font-weight:700}.page-headings-separator[data-v-98afe086]{margin:.2rem 0}.dropdown[data-v-cea1a814]{display:block}.form-control[data-v-cea1a814]{max-width:25.4em;min-width:12.7em}@media screen and (width <= 878px) and (orientation:portrait){.form-control[data-v-cea1a814]{max-width:16em;min-width:8em}}@media screen and (width >= 768px) and (width <= 878px) and (orientation:landscape){.form-control[data-v-cea1a814]{max-width:18em;min-width:9em}}.table-active[data-v-cea1a814]{background-color:rgba(0,0,0,.075)}.dropdown-menu-end[data-v-cea1a814]{left:auto;right:0}.placeholder-div-hidden[data-v-cea1a814]{border-bottom:0;border-top:0;height:0;overflow:hidden;padding-bottom:0;padding-top:0;visibility:hidden}.search-dropdown-menu{max-height:30em;min-width:30em;overflow-y:scroll}.dropdown-menu>li>a{cursor:pointer}@media screen and (width <= 768px){.search-dropdown-menu{max-height:30em;min-width:90vw;overflow-y:scroll}.dropdown-menu.search-dropdown-menu{position:absolute}}.tab-pane>hr[data-v-661c1b61]{margin:0}.printable-tab-header[data-v-661c1b61],.tab-pane-hide[data-v-661c1b61]{display:none}@media print{.printable-tab-header[data-v-661c1b61]{border-bottom:1px solid #dee2e6;display:flex;margin-bottom:15px}.printable-tab-header>div[data-v-661c1b61]{margin-bottom:-2px}.printable-tab-pane[data-v-661c1b61]{display:block;padding:10px}}.nav-tabs[data-v-a785351c]{margin-bottom:15px}.printable-tab-group-header[data-v-a785351c]{display:none}@media print{.printable-tab-group[data-v-a785351c]{border:1px solid #dee2e6;border-radius:5px;margin:10px 0;padding:10px}.printable-tab-group-header[data-v-a785351c]{display:block;margin-bottom:10px;text-decoration:underline}}.nav-tabs[data-v-05434e42]{margin-bottom:15px}.tab-content[data-v-05434e42]{margin-bottom:1.5rem}@media print{.printable-tabs[data-v-05434e42]{border:1px solid #dee2e6;border-radius:5px;padding:20px}}.thumb-wrapper{display:inline-block;overflow:hidden;position:relative;text-align:center;vertical-align:middle}.thumb-circle{border-radius:50%}.thumb-image{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.site-nav-root a.current{color:#0072ec}.site-nav-list{list-style-type:none;padding-left:0}.site-nav-default-list-item{cursor:pointer;display:flex;transition:background-color .08s}.site-nav-custom-list-item,.site-nav-default-list-item{color:#454545;padding:.5rem 0 0 2.8rem}.site-nav-list-item-0{font-size:1.2em;font-weight:500;padding:.5rem 0 .5rem .8rem}.site-nav-list-item-1{font-size:1.03em;padding:.4rem 0 .4rem 1.3rem}.site-nav-list-item-2{font-size:.89em;padding:.3rem 0 .3rem 1.8rem}.site-nav-list-item-3{font-size:.76em;padding:.2rem 0 .2rem 2.4rem}.site-nav-default-list-item:hover{background-color:rgba(214,233,255,.35)}.site-nav-default-list-item a{color:#454545;display:inline-block;height:100%}.site-nav-default-list-item:hover a{color:#000;text-decoration:none}.site-nav-dropdown-btn-container{display:flex;height:1.5em;margin:0 .75rem 0 auto;place-content:center center;width:2rem}.site-nav-dropdown-btn-icon{align-self:center;border-radius:1rem;display:inline-block;height:1.5em;padding:0;text-align:center;transform:rotate(0deg);transition:.4s;vertical-align:baseline;width:1.5em}.site-nav-dropdown-btn-icon:hover{background-color:#d8e3fb}.site-nav-rotate-icon{color:#4c7ff1;transform:rotate(-180deg)}.site-nav-dropdown-container{background:transparent;max-height:0;overflow:hidden;transition:max-height .15s ease-out}.site-nav-dropdown-container-open{max-height:1000px;transition:max-height .25s ease-in}.nav-menu[data-v-1a3e7aee]{display:none;overflow-y:auto;padding:0 10px 20px;position:absolute;top:100%}.nav-menu-open[data-v-1a3e7aee]{background:#fff;clear:both;display:block!important;width:100%!important}.mb-mobile-nav[data-v-e6005420]{border:none!important;display:block!important;margin:0!important;max-width:100%!important;padding:10px!important;width:100%!important}.popover-container{max-height:50vh;max-width:276px;overflow:auto}.popover-body{font-size:.875rem}.v-popper{display:inline}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.9);font-size:.875rem;max-width:200px;padding:4px 8px;text-align:center}.modal{display:block}.modal-zoom{opacity:0;transform:scale(.1);transition:all .3s}.modal-zoom-show{opacity:1;transform:scale(1);transition:all .3s}.scroll-top-button{bottom:20px;cursor:pointer;display:none;opacity:.4;position:fixed;right:30px;transition-duration:.25s;transition-property:opacity;z-index:99}.scroll-top-button.lighten{opacity:.15}@media (hover:hover){.scroll-top-button:hover{opacity:.7}}.scroll-top-button:active{opacity:1}@media print{.hljs{background:#f8f8ff;color:#333;display:block;overflow-x:auto;padding:.5em}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs span.highlighted{background:#e6e6fa}.hljs.inline{background:#f8f8f8}.hljs.inline.no-lang{color:#e83e8c}.hljs:not(.inline){border:1px solid #c8c8c8;border:1px solid hsla(0,0%,78%,.3)}.code-block-heading{background:#f2f2ff;color:#8787a5}button.function-btn{background-color:#f8f8ff}}:root{--sticky-header-height:0}a{text-decoration:none}blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1rem}code{background:#f8f8f8;border-radius:3px;padding:.2em .4em;word-break:normal}mark code{background:#ffffffd4}pre.hljs>code{background:none}pre>code.hljs{background-clip:padding-box;border-radius:5px;counter-reset:line;width:100%}pre>code.hljs[heading]{border-top-right-radius:0}.code-block{position:relative}.code-block-heading{border-radius:6px 6px 0 0;float:right;font-size:85%;line-height:1;margin-top:5px;max-width:85%;overflow-wrap:break-word;padding:.25em .4em;text-align:right}.inline-markdown-heading{line-height:1.5}.code-block-content{clear:both;display:block}@media print{pre>code.hljs{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.hljs:not(.inline).line-numbers-print>span{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers-print>span:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.hljs span.highlighted{background:#e6e6fa!important;-webkit-print-color-adjust:exact}}kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;color:#444d56}.btn:active,.btn:focus{box-shadow:none!important;outline:none!important}code.hljs.inline{display:initial;padding:.2em .4em}.markbind-table{width:auto}.radio-list-item,.task-list-item{list-style-type:none;margin:0 0 0 -1.2em}.radio-list-item label{font-weight:inherit}.table-striped>tbody>tr:nth-of-type(2n),.table-striped>thead{background-color:#fff}header[sticky]{position:sticky;top:0;transition:transform .3s ease-in-out;width:100%;z-index:1001}header[sticky].hide-header{transform:translateY(calc(var(--sticky-header-height)*-1))}span.anchor{position:relative;top:calc(var(--sticky-header-height)*-1 - 1rem)}#app{display:flex;flex-direction:column;min-height:100vh}footer{background-color:#f5f5f5;color:dimgrey;padding:10px 0}.dimmed{color:#777}.large{font-size:125%}.small{font-size:80%}.underline{text-decoration:underline}.mkb-text-red{color:red!important}.mkb-text-green{color:green!important}.mkb-text-blue{color:blue!important}.mkb-text-cyan{color:cyan!important}.mkb-text-magenta{color:#f0f!important}.mkb-text-yellow{color:#ff0!important}.mkb-text-black{color:#000!important}.mkb-text-white{color:#fff!important}@media (width <= 767.98px){.dropdown-menu>li>a{white-space:normal}.navbar-nav .open .dropdown-menu{background-color:#fff}}li.footnote-item:target{background-color:#eee}.hljs:not(.inline)>span{display:block}.hljs:not(.inline).line-numbers>span{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers>span:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.trigger{border-bottom:1px dotted}.trigger-click{border-bottom:1px dashed;cursor:pointer}.trigger-click:focus{outline:none}pre{display:flex;position:relative}button.function-btn{border:1px solid #d7dadc;border-radius:5px;color:#a9a9a9;cursor:pointer;display:none;margin:.17rem;padding:.35rem;position:absolute;right:0;text-align:center;white-space:nowrap}button.function-btn+button.function-btn{right:36px}pre:hover>.function-btn-container>button.function-btn{display:block}.function-btn:hover{color:gray;transition:all .5s ease}.function-btn-body{align-items:center;display:flex}.function-btn svg{fill:currentcolor}code.wrap{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.octicon{height:1em;width:1em}hr{background-color:transparent;border-top:1px solid rgba(0,0,0,.1);opacity:1}hr.dotted{border-top-style:dotted;border-top-width:.1rem}hr.double{border-top-style:double;border-top-width:.2rem}hr.dashed{border-top-style:dashed;border-top-width:.1rem}hr.thick{border-top-width:.15rem}hr.thick-1{border-top-width:.25rem}hr.thick-2{border-top-width:.5rem}hr.thick-3{border-top-width:.75rem}ol,ul{padding-left:1.5rem}h1,h2,h3,h4,h5,h6{margin-bottom:1rem;scroll-margin-top:var(--sticky-header-height)}.block-embed{overflow-x:auto;position:relative;width:100%}.block-embed iframe{height:100%;left:0;position:absolute;top:0;width:100%}#mb-page-nav{padding:.8rem 12px 0}#mb-page-nav a:link,#mb-page-nav a:visited{color:#9b9b9b;text-decoration:none}#mb-page-nav a:hover{color:#000}#mb-page-nav a.active{background-color:transparent;color:#000}.page-nav-title{color:#000;display:block;padding-left:.5rem;white-space:inherit}.nested{margin-left:5%}.no-flex-wrap{flex-wrap:nowrap}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(../fonts/KaTeX_AMS-Regular.woff) format("woff"),url(../fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(../fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(../fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(../fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(../fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(../fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(../fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(../fonts/KaTeX_Main-Bold.woff) format("woff"),url(../fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(../fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(../fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(../fonts/KaTeX_Main-Italic.woff) format("woff"),url(../fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Main-Regular.woff) format("woff"),url(../fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(../fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(../fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(../fonts/KaTeX_Math-Italic.woff) format("woff"),url(../fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(../fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(../fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(../fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(../fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(../fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(../fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(../fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Script-Regular.woff) format("woff"),url(../fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size1-Regular.woff) format("woff"),url(../fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size2-Regular.woff) format("woff"),url(../fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size3-Regular.woff) format("woff"),url(../fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Size4-Regular.woff) format("woff"),url(../fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(../fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(../fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.15.6"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.katex{font-size:1em!important}eq{display:inline-block}eqn{display:block}section.eqno{align-content:space-between;align-items:center;display:flex;flex-direction:row}section.eqno>eqn{margin-left:3em;width:100%}section.eqno>span{text-align:right;width:3em} \ No newline at end of file diff --git a/markbind/js/markbind.min.js b/markbind/js/markbind.min.js index efa7837b..c9a7f7d5 100644 --- a/markbind/js/markbind.min.js +++ b/markbind/js/markbind.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("Vue")):"function"==typeof define&&define.amd?define(["Vue"],e):"object"==typeof exports?exports.MarkBind=e(require("Vue")):t.MarkBind=e(t.Vue)}(self,t=>(()=>{var e={605:()=>{function t(){document.querySelectorAll(".".concat("page-nav-clone")).forEach((function(t){t.remove()}))}window.addEventListener("beforeprint",(function(){var e=document.querySelector("#".concat("mb-page-nav")),n=document.querySelectorAll(".".concat("page-nav-print"));e&&n.length>=1&&(t(),n.forEach((function(t){t.appendChild(function(t){var e=t.cloneNode(!0);return e.removeAttribute("id"),e.querySelectorAll("a.active").forEach((function(t){t.classList.remove("active")})),e.classList.add("page-nav-clone"),e}(e))})))})),window.addEventListener("afterprint",(function(){t()})),window.addEventListener("beforeprint",(function(){document.querySelectorAll("pre > code.hljs").forEach((function(t){Array.from(t.querySelectorAll("span")).some((function(t){return t.scrollWidth>t.clientWidth}))&&t.classList.add("line-numbers-print")}))}))},3:t=>{t.exports={bind:function(t){function e(){t.dataset.isShown="false",r.style.display="",o.style.display="none",i.style.display="none"}function n(){t.dataset.isShown="true",r.style.display="none",i.style.display=""}t.dataset.isShown="true",t.style.position="relative";var i=document.createElement("div");i.classList.add("content"),Array.from(t.children).forEach((function(t){return i.append(t)})),t.replaceChildren(),t.append(i),t.classList.add("closeable-wrapper");var o=function(){var t=document.createElement("span");return t.classList.add("closeable-button","label","label-default","hidden-print"),t.style.cssText+="display: none; position: absolute; top: 0; left: 0; cursor: pointer;background: #d9534f",t.innerHTML='',t.addEventListener("click",e),t}();t.append(o);var r=function(t){var e=document.createElement("a");return e.classList.add("closeable-show","hidden-print"),e.style.cssText+="display: none; cursor: pointer;text-decoration: underline",e.innerHTML=t,e.addEventListener("click",n),e}(t.getAttribute("alt")||"Expand Content");t.append(r),t.addEventListener("mouseover",(function(){"false"!==t.dataset.isShown&&(o.style.display="")})),t.addEventListener("mouseout",(function(){"false"!==t.dataset.isShown&&(o.style.display="none")}))}}},383:(t,e,n)=>{"use strict";var i,o=(i=n(740))&&"object"==typeof i&&"default"in i?i.default:i;function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function s(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e1&&void 0!==arguments[1]&&arguments[1],n=t.to,i=t.from;if(n&&(i||!1!==e)&&this.transports[n])if(e)this.transports[n]=[];else{var o=this.$_getTransportIndex(t);if(o>=0){var r=this.transports[n].slice(0);r.splice(o,1),this.transports[n]=r}}},registerTarget:function(t,e,n){a&&(this.trackInstances&&!n&&this.targets[t]&&console.warn("[portal-vue]: Target ".concat(t," already exists")),this.$set(this.targets,t,Object.freeze([e])))},unregisterTarget:function(t){this.$delete(this.targets,t)},registerSource:function(t,e,n){a&&(this.trackInstances&&!n&&this.sources[t]&&console.warn("[portal-vue]: source ".concat(t," already exists")),this.$set(this.sources,t,Object.freeze([e])))},unregisterSource:function(t){this.$delete(this.sources,t)},hasTarget:function(t){return!(!this.targets[t]||!this.targets[t][0])},hasSource:function(t){return!(!this.sources[t]||!this.sources[t][0])},hasContentFor:function(t){return!!this.transports[t]&&!!this.transports[t].length},$_getTransportIndex:function(t){var e=t.to,n=t.from;for(var i in this.transports[e])if(this.transports[e][i].from===n)return+i;return-1}}}))(c),p=1,f=o.extend({name:"portal",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(p++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var t=this;this.$nextTick((function(){h.registerSource(t.name,t)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){h.unregisterSource(this.name),this.clear()},watch:{to:function(t,e){e&&e!==t&&this.clear(e),this.sendUpdate()}},methods:{clear:function(t){var e={from:this.name,to:t||this.to};h.close(e)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(t){return"function"==typeof t?t(this.slotProps):t},sendUpdate:function(){var t=this.normalizeSlots();if(t){var e={from:this.name,to:this.to,passengers:s(t),order:this.order};h.open(e)}else this.clear()}},render:function(t){var e=this.$slots.default||this.$scopedSlots.default||[],n=this.tag;return e&&this.disabled?e.length<=1&&this.slim?this.normalizeOwnChildren(e)[0]:t(n,[this.normalizeOwnChildren(e)]):this.slim?t():t(n,{class:{"v-portal":!0},style:{display:"none"},key:"v-portal-placeholder"})}}),m=o.extend({name:"portalTarget",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},data:function(){return{transports:h.transports,firstRender:!0}},created:function(){var t=this;this.$nextTick((function(){h.registerTarget(t.name,t)}))},watch:{ownTransports:function(){this.$emit("change",this.children().length>0)},name:function(t,e){h.unregisterTarget(e),h.registerTarget(t,this)}},mounted:function(){var t=this;this.transition&&this.$nextTick((function(){t.firstRender=!1}))},beforeDestroy:function(){h.unregisterTarget(this.name)},computed:{ownTransports:function(){var t=this.transports[this.name]||[];return this.multiple?t:0===t.length?[]:[t[t.length-1]]},passengers:function(){return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.reduce((function(t,n){var i=n.passengers[0],o="function"==typeof i?i(e):n.passengers;return t.concat(o)}),[])}(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!==this.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var t=this.slim&&!this.transition;return t&&this.children().length>1&&console.warn("[portal-vue]: PortalTarget with `slim` option received more than one child element."),t}},render:function(t){var e=this.noWrapper(),n=this.children(),i=this.transition||this.tag;return e?n[0]:this.slim&&!i?t():t(i,{props:{tag:this.transition&&this.tag?this.tag:void 0},class:{"vue-portal-target":!0}},n)}}),v=0,g=["disabled","name","order","slim","slotProps","tag","to"],y=["multiple","transition"],w=o.extend({name:"MountingPortal",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return"mounted_"+String(v++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},created:function(){if("undefined"!=typeof document){var t=document.querySelector(this.mountTo);if(t){var e=this.$props;if(h.targets[e.name])e.bail?console.warn("[portal-vue]: Target ".concat(e.name," is already mounted.\n Aborting because 'bail: true' is set")):this.portalTarget=h.targets[e.name];else{var n=e.append;if(n){var i="string"==typeof n?n:"DIV",o=document.createElement(i);t.appendChild(o),t=o}var r=l(this.$props,y);r.slim=this.targetSlim,r.tag=this.targetTag,r.slotProps=this.targetSlotProps,r.name=this.to,this.portalTarget=new m({el:t,parent:this.$parent||this,propsData:r})}}else console.error("[portal-vue]: Mount Point '".concat(this.mountTo,"' not found in document"))}},beforeDestroy:function(){var t=this.portalTarget;if(this.append){var e=t.$el;e.parentNode.removeChild(e)}t.$destroy()},render:function(t){if(!this.portalTarget)return console.warn("[portal-vue] Target wasn't mounted"),t();if(!this.$scopedSlots.manual){var e=l(this.$props,g);return t(f,{props:e,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var n=this.$scopedSlots.manual({to:this.to});return Array.isArray(n)&&(n=n[0]),n||t()}});e.h_=f,e.YC=m},740:e=>{"use strict";e.exports=t}},n={};function i(t){var o=n[t];if(void 0!==o)return o.exports;var r=n[t]={exports:{}};return e[t](r,r.exports,i),r.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var o={};return(()=>{"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(e){var n=function(e,n){if("object"!==t(e)||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var o=i.call(e,n||"default");if("object"!==t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"===t(n)?n:String(n)}function n(t,n,i){return(n=e(n))in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i,t}function r(t){return t.split("-")[0]}function s(t){return t.split("-")[1]}function a(t){return["top","bottom"].includes(r(t))?"x":"y"}function l(t){return"y"===t?"height":"width"}function c(t){let{reference:e,floating:n,placement:i}=t;const o=e.x+e.width/2-n.width/2,c=e.y+e.height/2-n.height/2;let u;switch(r(i)){case"top":u={x:o,y:e.y-n.height};break;case"bottom":u={x:o,y:e.y+e.height};break;case"right":u={x:e.x+e.width,y:c};break;case"left":u={x:e.x-n.width,y:c};break;default:u={x:e.x,y:e.y}}const d=a(i),h=l(d);switch(s(i)){case"start":u[d]=u[d]-(e[h]/2-n[h]/2);break;case"end":u[d]=u[d]+(e[h]/2-n[h]/2)}return u}i.d(o,{default:()=>Mo});function u(t){return"number"!=typeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}function d(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function h(t,e){void 0===e&&(e={});const{x:n,y:i,platform:o,rects:r,elements:s,strategy:a}=t,{boundary:l="clippingParents",rootBoundary:c="viewport",elementContext:h="floating",altBoundary:p=!1,padding:f=0}=e,m=u(f),v=s[p?"floating"===h?"reference":"floating":h],g=await o.getClippingClientRect({element:await o.isElement(v)?v:v.contextElement||await o.getDocumentElement({element:s.floating}),boundary:l,rootBoundary:c}),y=d(await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:"floating"===h?{...r.floating,x:n,y:i}:r.reference,offsetParent:await o.getOffsetParent({element:s.floating}),strategy:a}));return{top:g.top-y.top+m.top,bottom:y.bottom-g.bottom+m.bottom,left:g.left-y.left+m.left,right:y.right-g.right+m.right}}const p=Math.min,f=Math.max;function m(t,e,n){return f(t,p(e,n))}const v={left:"right",right:"left",bottom:"top",top:"bottom"};function g(t){return t.replace(/left|right|bottom|top/g,t=>v[t])}function y(t,e){const n="start"===s(t),i=a(t),o=l(i);let r="x"===i?n?"right":"left":n?"bottom":"top";return e.reference[o]>e.floating[o]&&(r=g(r)),{main:r,cross:g(r)}}const w={start:"end",end:"start"};function b(t){return t.replace(/start|end/g,t=>w[t])}const _=["top","right","bottom","left"],S=_.reduce((t,e)=>t.concat(e,e+"-start",e+"-end"),[]);const x=function(t){return void 0===t&&(t={}),{name:"autoPlacement",options:t,async fn(e){var n,i,o,a,l,c;const{x:u,y:d,rects:p,middlewareData:f,placement:m}=e,{alignment:v=null,allowedPlacements:g=S,autoAlignment:w=!0,..._}=t;if(null!=(n=f.autoPlacement)&&n.skip)return{};const x=function(t,e,n){return(t?[...n.filter(e=>s(e)===t),...n.filter(e=>s(e)!==t)]:n.filter(t=>r(t)===t)).filter(n=>!t||(s(n)===t||!!e&&b(n)!==n))}(v,w,g),C=await h(e,_),$=null!=(i=null==(o=f.autoPlacement)?void 0:o.index)?i:0,k=x[$],{main:T,cross:E}=y(k,p);if(m!==k)return{x:u,y:d,reset:{placement:x[0]}};const O=[C[r(k)],C[T],C[E]],B=[...null!=(a=null==(l=f.autoPlacement)?void 0:l.overflows)?a:[],{placement:k,overflows:O}],P=x[$+1];if(P)return{data:{index:$+1,overflows:B},reset:{placement:P}};const L=B.slice().sort((t,e)=>t.overflows[0]-e.overflows[0]),N=null==(c=L.find(t=>{let{overflows:e}=t;return e.every(t=>t<=0)}))?void 0:c.placement;return{data:{skip:!0},reset:{placement:null!=N?N:L[0].placement}}}}};const C=function(t){return void 0===t&&(t={}),{name:"flip",options:t,async fn(e){var n,i;const{placement:o,middlewareData:s,rects:a,initialPlacement:l}=e;if(null!=(n=s.flip)&&n.skip)return{};const{mainAxis:c=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:p="bestFit",flipAlignment:f=!0,...m}=t,v=r(o),w=[l,...d||(v===l||!f?[g(l)]:function(t){const e=g(t);return[b(t),e,b(e)]}(l))],_=await h(e,m),S=[];let x=(null==(i=s.flip)?void 0:i.overflows)||[];if(c&&S.push(_[v]),u){const{main:t,cross:e}=y(o,a);S.push(_[t],_[e])}if(x=[...x,{placement:o,overflows:S}],!S.every(t=>t<=0)){var C,$;const t=(null!=(C=null==($=s.flip)?void 0:$.index)?C:0)+1,e=w[t];if(e)return{data:{index:t,overflows:x},reset:{placement:e}};let n="bottom";switch(p){case"bestFit":{var k;const t=null==(k=x.slice().sort((t,e)=>t.overflows.filter(t=>t>0).reduce((t,e)=>t+e,0)-e.overflows.filter(t=>t>0).reduce((t,e)=>t+e,0))[0])?void 0:k.placement;t&&(n=t);break}case"initialPlacement":n=l}return{data:{skip:!0},reset:{placement:n}}}return{}}}};const $=function(t){return void 0===t&&(t=0),{name:"offset",options:t,fn(e){const{x:n,y:i,placement:o,rects:s}=e,l=function(t){let{placement:e,rects:n,value:i}=t;const o=r(e),s=["left","top"].includes(o)?-1:1,l="function"==typeof i?i({...n,placement:e}):i,{mainAxis:c,crossAxis:u}="number"==typeof l?{mainAxis:l,crossAxis:0}:{mainAxis:0,crossAxis:0,...l};return"x"===a(o)?{x:u,y:c*s}:{x:c*s,y:u}}({placement:o,rects:s,value:t});return{x:n+l.x,y:i+l.y,data:l}}}};function k(t){return"x"===t?"y":"x"}function T(t){return"[object Window]"===(null==t?void 0:t.toString())}function E(t){if(null==t)return window;if(!T(t)){const e=t.ownerDocument;return e&&e.defaultView||window}return t}function O(t){return E(t).getComputedStyle(t)}function B(t){return T(t)?"":t?(t.nodeName||"").toLowerCase():""}function P(t){return t instanceof E(t).HTMLElement}function L(t){return t instanceof E(t).Element}function N(t){return t instanceof E(t).ShadowRoot||t instanceof ShadowRoot}function A(t){const{overflow:e,overflowX:n,overflowY:i}=O(t);return/auto|scroll|overlay|hidden/.test(e+i+n)}function z(t){return["table","td","th"].includes(B(t))}function M(t){const e=navigator.userAgent.toLowerCase().includes("firefox"),n=O(t);return"none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||["transform","perspective"].includes(n.willChange)||e&&"filter"===n.willChange||e&&!!n.filter&&"none"!==n.filter}const H=Math.min,D=Math.max,R=Math.round;function j(t,e){void 0===e&&(e=!1);const n=t.getBoundingClientRect();let i=1,o=1;return e&&P(t)&&(i=t.offsetWidth>0&&R(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&R(n.height)/t.offsetHeight||1),{width:n.width/i,height:n.height/o,top:n.top/o,right:n.right/i,bottom:n.bottom/o,left:n.left/i,x:n.left/i,y:n.top/o}}function I(t){return(e=t,(e instanceof E(e).Node?t.ownerDocument:t.document)||window.document).documentElement;var e}function q(t){return T(t)?{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}:{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function W(t){return j(I(t)).left+q(t).scrollLeft}function F(t,e,n){const i=P(e),o=I(e),r=j(t,i&&function(t){const e=j(t);return R(e.width)!==t.offsetWidth||R(e.height)!==t.offsetHeight}(e));let s={scrollLeft:0,scrollTop:0};const a={x:0,y:0};if(i||!i&&"fixed"!==n)if(("body"!==B(e)||A(o))&&(s=q(e)),P(e)){const t=j(e,!0);a.x=t.x+e.clientLeft,a.y=t.y+e.clientTop}else o&&(a.x=W(o));return{x:r.left+s.scrollLeft-a.x,y:r.top+s.scrollTop-a.y,width:r.width,height:r.height}}function V(t){return"html"===B(t)?t:t.assignedSlot||t.parentNode||(N(t)?t.host:null)||I(t)}function U(t){return P(t)&&"fixed"!==getComputedStyle(t).position?t.offsetParent:null}function Q(t){const e=E(t);let n=U(t);for(;n&&z(n)&&"static"===getComputedStyle(n).position;)n=U(n);return n&&("html"===B(n)||"body"===B(n)&&"static"===getComputedStyle(n).position&&!M(n))?e:n||function(t){let e=V(t);for(;P(e)&&!["html","body"].includes(B(e));){if(M(e))return e;e=e.parentNode}return null}(t)||e}function X(t){return{width:t.offsetWidth,height:t.offsetHeight}}function Y(t,e){var n;void 0===e&&(e=[]);const i=function t(e){return["html","body","#document"].includes(B(e))?e.ownerDocument.body:P(e)&&A(e)?e:t(V(e))}(t),o=i===(null==(n=t.ownerDocument)?void 0:n.body),r=E(i),s=o?[r].concat(r.visualViewport||[],A(i)?i:[]):i,a=e.concat(s);return o?a:a.concat(Y(V(s)))}function G(t,e){return"viewport"===e?d(function(t){const e=E(t),n=I(t),i=e.visualViewport;let o=n.clientWidth,r=n.clientHeight,s=0,a=0;return i&&(o=i.width,r=i.height,Math.abs(e.innerWidth/i.scale-i.width)<.01&&(s=i.offsetLeft,a=i.offsetTop)),{width:o,height:r,x:s,y:a}}(t)):L(e)?function(t){const e=j(t),n=e.top+t.clientTop,i=e.left+t.clientLeft;return{top:n,left:i,x:i,y:n,right:i+t.clientWidth,bottom:n+t.clientHeight,width:t.clientWidth,height:t.clientHeight}}(e):d(function(t){var e;const n=I(t),i=q(t),o=null==(e=t.ownerDocument)?void 0:e.body,r=D(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=D(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0);let a=-i.scrollLeft+W(t);const l=-i.scrollTop;return"rtl"===O(o||n).direction&&(a+=D(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(I(t)))}function K(t){const e=Y(V(t)),n=["absolute","fixed"].includes(O(t).position)&&P(t)?Q(t):t;return L(n)?e.filter(t=>L(t)&&function(t,e){const n=null==e.getRootNode?void 0:e.getRootNode();if(t.contains(e))return!0;if(n&&N(n)){let n=e;do{if(n&&t===n)return!0;n=n.parentNode||n.host}while(n)}return!1}(t,n)&&"body"!==B(t)):[]}const Z={getElementRects:t=>{let{reference:e,floating:n,strategy:i}=t;return{reference:F(e,Q(n),i),floating:{...X(n),x:0,y:0}}},convertOffsetParentRelativeRectToViewportRelativeRect:t=>function(t){let{rect:e,offsetParent:n,strategy:i}=t;const o=P(n),r=I(n);if(n===r)return e;let s={scrollLeft:0,scrollTop:0};const a={x:0,y:0};if((o||!o&&"fixed"!==i)&&(("body"!==B(n)||A(r))&&(s=q(n)),P(n))){const t=j(n,!0);a.x=t.x+n.clientLeft,a.y=t.y+n.clientTop}return{...e,x:e.x-s.scrollLeft+a.x,y:e.y-s.scrollTop+a.y}}(t),getOffsetParent:t=>{let{element:e}=t;return Q(e)},isElement:t=>L(t),getDocumentElement:t=>{let{element:e}=t;return I(e)},getClippingClientRect:t=>function(t){let{element:e,boundary:n,rootBoundary:i}=t;const o=[..."clippingParents"===n?K(e):[].concat(n),i],r=o[0],s=o.reduce((t,n)=>{const i=G(e,n);return t.top=D(i.top,t.top),t.right=H(i.right,t.right),t.bottom=H(i.bottom,t.bottom),t.left=D(i.left,t.left),t},G(e,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}(t),getDimensions:t=>{let{element:e}=t;return X(e)},getClientRects:t=>{let{element:e}=t;return e.getClientRects()}},J=(t,e,n)=>(async(t,e,n)=>{const{placement:i="bottom",strategy:o="absolute",middleware:r=[],platform:s}=n;let a=await s.getElementRects({reference:t,floating:e,strategy:o}),{x:l,y:u}=c({...a,placement:i}),d=i,h={};for(let n=0;ne in t?nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ct=(t,e)=>{for(var n in e||(e={}))st.call(e,n)&<(t,n,e[n]);if(rt)for(var n of rt(e))at.call(e,n)&<(t,n,e[n]);return t},ut=(t,e)=>it(t,ot(e));const dt={disabled:!1,distance:5,skidding:0,container:"body",boundary:void 0,instantMove:!1,disposeTimeout:5e3,popperTriggers:[],strategy:"absolute",preventOverflow:!0,flip:!0,shift:!0,overflowPadding:0,arrowPadding:0,arrowOverflow:!0,themes:{tooltip:{placement:"top",triggers:["hover","focus","touch"],hideTriggers:t=>[...t,"click"],delay:{show:200,hide:0},handleResize:!1,html:!1,loadingContent:"..."},dropdown:{placement:"bottom",triggers:["click"],delay:0,handleResize:!0,autoHide:!0},menu:{$extend:"dropdown",triggers:["hover","focus"],popperTriggers:["hover","focus"],delay:{show:0,hide:400}}}};function ht(t,e){let n,i=dt.themes[t]||{};do{n=i[e],void 0===n?i.$extend?i=dt.themes[i.$extend]||{}:(i=null,n=dt[e]):i=null}while(i);return n}let pt=!1;if("undefined"!=typeof window){pt=!1;try{const t=Object.defineProperty({},"passive",{get(){pt=!0}});window.addEventListener("test",null,t)}catch(t){}}let ft=!1;"undefined"!=typeof window&&"undefined"!=typeof navigator&&(ft=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream);const mt=["auto","top","bottom","left","right"].reduce((t,e)=>t.concat([e,e+"-start",e+"-end"]),[]),vt={hover:"mouseenter",focus:"focus",click:"click",touch:"touchstart"},gt={hover:"mouseleave",focus:"blur",click:"click",touch:"touchend"};function yt(){return new Promise(t=>requestAnimationFrame(()=>{requestAnimationFrame(t)}))}const wt=[];let bt=null,_t=function(){};function St(t){return function(){return ht(this.$props.theme,t)}}"undefined"!=typeof window&&(_t=window.Element);const xt="__floating-vue__popper";var Ct=()=>({name:"VPopper",props:{theme:{type:String,required:!0},targetNodes:{type:Function,required:!0},referenceNode:{type:Function,required:!0},popperNode:{type:Function,required:!0},shown:{type:Boolean,default:!1},showGroup:{type:String,default:null},ariaId:{default:null},disabled:{type:Boolean,default:St("disabled")},positioningDisabled:{type:Boolean,default:St("positioningDisabled")},placement:{type:String,default:St("placement"),validator:t=>mt.includes(t)},delay:{type:[String,Number,Object],default:St("delay")},distance:{type:[Number,String],default:St("distance")},skidding:{type:[Number,String],default:St("skidding")},triggers:{type:Array,default:St("triggers")},showTriggers:{type:[Array,Function],default:St("showTriggers")},hideTriggers:{type:[Array,Function],default:St("hideTriggers")},popperTriggers:{type:Array,default:St("popperTriggers")},popperShowTriggers:{type:[Array,Function],default:St("popperShowTriggers")},popperHideTriggers:{type:[Array,Function],default:St("popperHideTriggers")},container:{type:[String,Object,_t,Boolean],default:St("container")},boundary:{type:[String,_t],default:St("boundary")},strategy:{type:String,validator:t=>["absolute","fixed"].includes(t),default:St("strategy")},autoHide:{type:Boolean,default:St("autoHide")},handleResize:{type:Boolean,default:St("handleResize")},instantMove:{type:Boolean,default:St("instantMove")},eagerMount:{type:Boolean,default:St("eagerMount")},popperClass:{type:[String,Array,Object],default:St("popperClass")},computeTransformOrigin:{type:Boolean,default:St("computeTransformOrigin")},autoMinSize:{type:Boolean,default:St("autoMinSize")},autoSize:{type:[Boolean,String],default:St("autoSize")},autoMaxSize:{type:Boolean,default:St("autoMaxSize")},autoBoundaryMaxSize:{type:Boolean,default:St("autoBoundaryMaxSize")},preventOverflow:{type:Boolean,default:St("preventOverflow")},overflowPadding:{type:[Number,String],default:St("overflowPadding")},arrowPadding:{type:[Number,String],default:St("arrowPadding")},arrowOverflow:{type:Boolean,default:St("arrowOverflow")},flip:{type:Boolean,default:St("flip")},shift:{type:Boolean,default:St("shift")},shiftCrossAxis:{type:Boolean,default:St("shiftCrossAxis")}},provide(){return{[xt]:{parentPopper:this}}},inject:{[xt]:{default:null}},data(){return{isShown:!1,isMounted:!1,skipTransition:!1,classes:{showFrom:!1,showTo:!1,hideFrom:!1,hideTo:!0},result:{x:0,y:0,placement:"",strategy:this.strategy,arrow:{x:0,y:0,centerOffset:0},transformOrigin:null},shownChildren:new Set}},computed:{popperId(){return null!=this.ariaId?this.ariaId:this.randomId},shouldMountContent(){return this.eagerMount||this.isMounted},slotData(){return{popperId:this.popperId,isShown:this.isShown,shouldMountContent:this.shouldMountContent,skipTransition:this.skipTransition,autoHide:this.autoHide,show:this.show,hide:this.hide,handleResize:this.handleResize,onResize:this.onResize,classes:ut(ct({},this.classes),{popperClass:this.popperClass}),result:this.positioningDisabled?null:this.result}},parentPopper(){var t;return null==(t=this[xt])?void 0:t.parentPopper}},watch:ct(ct({shown:"$_autoShowHide",disabled(t){t?this.dispose():this.init()},async container(){this.isShown&&(this.$_ensureTeleport(),await this.$_computePosition())}},["triggers","positioningDisabled"].reduce((t,e)=>(t[e]="$_refreshListeners",t),{})),["placement","distance","skidding","boundary","strategy","overflowPadding","arrowPadding","preventOverflow","shift","shiftCrossAxis","flip"].reduce((t,e)=>(t[e]="$_computePosition",t),{})),created(){this.$_isDisposed=!0,this.randomId="popper_"+[Math.random(),Date.now()].map(t=>t.toString(36).substring(2,10)).join("_"),this.autoMinSize&&console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize="min"` instead.'),this.autoMaxSize&&console.warn("[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.")},mounted(){this.init(),this.$_detachPopperNode()},activated(){this.$_autoShowHide()},deactivated(){this.hide()},beforeDestroy(){this.dispose()},methods:{show({event:t=null,skipDelay:e=!1,force:n=!1}={}){var i,o;(null==(i=this.parentPopper)?void 0:i.lockedChild)&&this.parentPopper.lockedChild!==this||(this.$_pendingHide=!1,!n&&this.disabled||((null==(o=this.parentPopper)?void 0:o.lockedChild)===this&&(this.parentPopper.lockedChild=null),this.$_scheduleShow(t,e),this.$emit("show"),this.$_showFrameLocked=!0,requestAnimationFrame(()=>{this.$_showFrameLocked=!1})),this.$emit("update:shown",!0))},hide({event:t=null,skipDelay:e=!1}={}){var n;this.$_hideInProgress||(this.shownChildren.size>0?this.$_pendingHide=!0:this.$_isAimingPopper()?this.parentPopper&&(this.parentPopper.lockedChild=this,clearTimeout(this.parentPopper.lockedChildTimer),this.parentPopper.lockedChildTimer=setTimeout(()=>{this.parentPopper.lockedChild===this&&(this.parentPopper.lockedChild.hide({skipDelay:e}),this.parentPopper.lockedChild=null)},1e3)):((null==(n=this.parentPopper)?void 0:n.lockedChild)===this&&(this.parentPopper.lockedChild=null),this.$_pendingHide=!1,this.$_scheduleHide(t,e),this.$emit("hide"),this.$emit("update:shown",!1)))},init(){this.$_isDisposed&&(this.$_isDisposed=!1,this.isMounted=!1,this.$_events=[],this.$_preventShow=!1,this.$_referenceNode=this.referenceNode(),this.$_targetNodes=this.targetNodes().filter(t=>t.nodeType===t.ELEMENT_NODE),this.$_popperNode=this.popperNode(),this.$_innerNode=this.$_popperNode.querySelector(".v-popper__inner"),this.$_arrowNode=this.$_popperNode.querySelector(".v-popper__arrow-container"),this.$_swapTargetAttrs("title","data-original-title"),this.$_detachPopperNode(),this.triggers.length&&this.$_addEventListeners(),this.shown&&this.show())},dispose(){this.$_isDisposed||(this.$_isDisposed=!0,this.$_removeEventListeners(),this.hide({skipDelay:!0}),this.$_detachPopperNode(),this.isMounted=!1,this.isShown=!1,this.$_updateParentShownChildren(!1),this.$_swapTargetAttrs("data-original-title","title"),this.$emit("dispose"))},async onResize(){this.isShown&&(await this.$_computePosition(),this.$emit("resize"))},async $_computePosition(){var t;if(this.$_isDisposed||this.positioningDisabled)return;const e={strategy:this.strategy,middleware:[]};(this.distance||this.skidding)&&e.middleware.push($({mainAxis:this.distance,crossAxis:this.skidding}));const n=this.placement.startsWith("auto");if(n?e.middleware.push(x({alignment:null!=(t=this.placement.split("-")[1])?t:""})):e.placement=this.placement,this.preventOverflow&&(this.shift&&e.middleware.push(function(t){return void 0===t&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:i,placement:o}=e,{mainAxis:s=!0,crossAxis:l=!1,limiter:c={fn:t=>{let{x:e,y:n}=t;return{x:e,y:n}}},...u}=t,d={x:n,y:i},p=await h(e,u),f=a(r(o)),v=k(f);let g=d[f],y=d[v];if(s){const t="y"===f?"bottom":"right";g=m(g+p["y"===f?"top":"left"],g,g-p[t])}if(l){const t="y"===v?"bottom":"right";y=m(y+p["y"===v?"top":"left"],y,y-p[t])}const w=c.fn({...e,[f]:g,[v]:y});return{...w,data:{x:w.x-n,y:w.y-i}}}}}({padding:this.overflowPadding,boundary:this.boundary,crossAxis:this.shiftCrossAxis})),!n&&this.flip&&e.middleware.push(C({padding:this.overflowPadding,boundary:this.boundary}))),e.middleware.push((t=>({name:"arrow",options:t,async fn(e){const{element:n,padding:i=0}=null!=t?t:{},{x:o,y:s,placement:c,rects:d,platform:h}=e;if(null==n)return{};const p=u(i),f={x:o,y:s},v=a(r(c)),g=l(v),y=await h.getDimensions({element:n}),w="y"===v?"top":"left",b="y"===v?"bottom":"right",_=d.reference[g]+d.reference[v]-f[v]-d.floating[g],S=f[v]-d.reference[v],x=await h.getOffsetParent({element:n}),C=x?"y"===v?x.clientHeight||0:x.clientWidth||0:0,$=_/2-S/2,k=p[w],T=C-y[g]-p[b],E=C/2-y[g]/2+$,O=m(k,E,T);return{data:{[v]:O,centerOffset:E-O}}}}))({element:this.$_arrowNode,padding:this.arrowPadding})),this.arrowOverflow&&e.middleware.push({name:"arrowOverflow",fn:({placement:t,rects:e,middlewareData:n})=>{let i;const{centerOffset:o}=n.arrow;return i=t.startsWith("top")||t.startsWith("bottom")?Math.abs(o)>e.reference.width/2:Math.abs(o)>e.reference.height/2,{data:{overflow:i}}}}),this.autoMinSize||this.autoSize){const t=this.autoSize?this.autoSize:this.autoMinSize?"min":null;e.middleware.push({name:"autoSize",fn:({rects:e,placement:n,middlewareData:i})=>{var o;if(null==(o=i.autoSize)?void 0:o.skip)return{};let r,s;return n.startsWith("top")||n.startsWith("bottom")?r=e.reference.width:s=e.reference.height,this.$_innerNode.style["min"===t?"minWidth":"max"===t?"maxWidth":"width"]=null!=r?r+"px":null,this.$_innerNode.style["min"===t?"minHeight":"max"===t?"maxHeight":"height"]=null!=s?s+"px":null,{data:{skip:!0},reset:{rects:!0}}}})}(this.autoMaxSize||this.autoBoundaryMaxSize)&&(this.$_innerNode.style.maxWidth=null,this.$_innerNode.style.maxHeight=null,e.middleware.push(function(t){return void 0===t&&(t={}),{name:"size",options:t,async fn(e){var n;const{placement:i,rects:o,middlewareData:a}=e,{apply:l,...c}=t;if(null!=(n=a.size)&&n.skip)return{};const u=await h(e,c),d=r(i),p="end"===s(i);let m,v;"top"===d||"bottom"===d?(m=d,v=p?"left":"right"):(v=d,m=p?"top":"bottom");const g=f(u.left,0),y=f(u.right,0),w=f(u.top,0),b=f(u.bottom,0),_={height:o.floating.height-(["left","right"].includes(i)?2*(0!==w||0!==b?w+b:f(u.top,u.bottom)):u[m]),width:o.floating.width-(["top","bottom"].includes(i)?2*(0!==g||0!==y?g+y:f(u.left,u.right)):u[v])};return null==l||l({..._,...o}),{data:{skip:!0},reset:{rects:!0}}}}}({boundary:this.boundary,padding:this.overflowPadding,apply:({width:t,height:e})=>{this.$_innerNode.style.maxWidth=null!=t?t+"px":null,this.$_innerNode.style.maxHeight=null!=e?e+"px":null}})));const i=await J(this.$_referenceNode,this.$_popperNode,e);Object.assign(this.result,{x:i.x,y:i.y,placement:i.placement,strategy:i.strategy,arrow:ct(ct({},i.middlewareData.arrow),i.middlewareData.arrowOverflow)})},$_scheduleShow(t=null,e=!1){if(this.$_updateParentShownChildren(!0),this.$_hideInProgress=!1,clearTimeout(this.$_scheduleTimer),bt&&this.instantMove&&bt.instantMove&&bt!==this.parentPopper)return bt.$_applyHide(!0),void this.$_applyShow(!0);e?this.$_applyShow():this.$_scheduleTimer=setTimeout(this.$_applyShow.bind(this),this.$_computeDelay("show"))},$_scheduleHide(t=null,e=!1){this.shownChildren.size>0?this.$_pendingHide=!0:(this.$_updateParentShownChildren(!1),this.$_hideInProgress=!0,clearTimeout(this.$_scheduleTimer),this.isShown&&(bt=this),e?this.$_applyHide():this.$_scheduleTimer=setTimeout(this.$_applyHide.bind(this),this.$_computeDelay("hide")))},$_computeDelay(t){const e=this.delay;return parseInt(e&&e[t]||e||0)},async $_applyShow(t=!1){clearTimeout(this.$_disposeTimer),clearTimeout(this.$_scheduleTimer),this.skipTransition=t,this.isShown||(this.$_ensureTeleport(),await yt(),await this.$_computePosition(),await this.$_applyShowEffect(),this.positioningDisabled||this.$_registerEventListeners([...Y(this.$_referenceNode),...Y(this.$_popperNode)],"scroll",()=>{this.$_computePosition()}))},async $_applyShowEffect(){if(this.$_hideInProgress)return;if(this.computeTransformOrigin){const t=this.$_referenceNode.getBoundingClientRect(),e=this.$_popperNode.querySelector(".v-popper__wrapper"),n=e.parentNode.getBoundingClientRect(),i=t.x+t.width/2-(n.left+e.offsetLeft),o=t.y+t.height/2-(n.top+e.offsetTop);this.result.transformOrigin=`${i}px ${o}px`}this.isShown=!0,this.$_applyAttrsToTarget({"aria-describedby":this.popperId,"data-popper-shown":""});const t=this.showGroup;if(t){let e;for(let n=0;n0)return this.$_pendingHide=!0,void(this.$_hideInProgress=!1);if(clearTimeout(this.$_scheduleTimer),!this.isShown)return;this.skipTransition=t,function(t,e){const n=t.indexOf(e);-1!==n&&t.splice(n,1)}(wt,this),bt===this&&(bt=null),this.isShown=!1,this.$_applyAttrsToTarget({"aria-describedby":void 0,"data-popper-shown":void 0}),clearTimeout(this.$_disposeTimer);const e=ht(this.theme,"disposeTimeout");null!==e&&(this.$_disposeTimer=setTimeout(()=>{this.$_popperNode&&(this.$_detachPopperNode(),this.isMounted=!1)},e)),this.$_removeEventListeners("scroll"),this.$emit("apply-hide"),this.classes.showFrom=!1,this.classes.showTo=!1,this.classes.hideFrom=!0,this.classes.hideTo=!1,await yt(),this.classes.hideFrom=!1,this.classes.hideTo=!0},$_autoShowHide(){this.shown?this.show():this.hide()},$_ensureTeleport(){if(this.$_isDisposed)return;let t=this.container;if("string"==typeof t?t=window.document.querySelector(t):!1===t&&(t=this.$_targetNodes[0].parentNode),!t)throw new Error("No container for popover: "+this.container);t.appendChild(this.$_popperNode),this.isMounted=!0},$_addEventListeners(){const t=t=>{this.isShown&&!this.$_hideInProgress||(t.usedByTooltip=!0,!this.$_preventShow&&this.show({event:t}))};this.$_registerTriggerListeners(this.$_targetNodes,vt,this.triggers,this.showTriggers,t),this.$_registerTriggerListeners([this.$_popperNode],vt,this.popperTriggers,this.popperShowTriggers,t);const e=t=>{t.usedByTooltip||this.hide({event:t})};this.$_registerTriggerListeners(this.$_targetNodes,gt,this.triggers,this.hideTriggers,e),this.$_registerTriggerListeners([this.$_popperNode],gt,this.popperTriggers,this.popperHideTriggers,e)},$_registerEventListeners(t,e,n){this.$_events.push({targetNodes:t,eventType:e,handler:n}),t.forEach(t=>t.addEventListener(e,n,pt?{passive:!0}:void 0))},$_registerTriggerListeners(t,e,n,i,o){let r=n;null!=i&&(r="function"==typeof i?i(r):i),r.forEach(n=>{const i=e[n];i&&this.$_registerEventListeners(t,i,o)})},$_removeEventListeners(t){const e=[];this.$_events.forEach(n=>{const{targetNodes:i,eventType:o,handler:r}=n;t&&t!==o?e.push(n):i.forEach(t=>t.removeEventListener(o,r))}),this.$_events=e},$_refreshListeners(){this.$_isDisposed||(this.$_removeEventListeners(),this.$_addEventListeners())},$_handleGlobalClose(t,e=!1){this.$_showFrameLocked||(this.hide({event:t}),t.closePopover?this.$emit("close-directive"):this.$emit("auto-hide"),e&&(this.$_preventShow=!0,setTimeout(()=>{this.$_preventShow=!1},300)))},$_detachPopperNode(){this.$_popperNode.parentNode&&this.$_popperNode.parentNode.removeChild(this.$_popperNode)},$_swapTargetAttrs(t,e){for(const n of this.$_targetNodes){const i=n.getAttribute(t);i&&(n.removeAttribute(t),n.setAttribute(e,i))}},$_applyAttrsToTarget(t){for(const e of this.$_targetNodes)for(const n in t){const i=t[n];null==i?e.removeAttribute(n):e.setAttribute(n,i)}},$_updateParentShownChildren(t){let e=this.parentPopper;for(;e;)t?e.shownChildren.add(this.randomId):(e.shownChildren.delete(this.randomId),e.$_pendingHide&&e.hide()),e=e.parentPopper},$_isAimingPopper(){const t=this.$el.getBoundingClientRect();if(Pt>=t.left&&Pt<=t.right&&Lt>=t.top&&Lt<=t.bottom){const t=this.$_popperNode.getBoundingClientRect(),e=Pt-Ot,n=Lt-Bt,i=t.left+t.width/2-Ot+(t.top+t.height/2)-Bt+t.width+t.height,o=Ot+e*i,r=Bt+n*i;return Nt(Ot,Bt,o,r,t.left,t.top,t.left,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.top,t.right,t.top)||Nt(Ot,Bt,o,r,t.right,t.top,t.right,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.bottom,t.right,t.bottom)}return!1}},render(){return this.$scopedSlots.default(this.slotData)[0]}});function $t(t){for(let e=0;e=0;i--){const o=wt[i];try{const i=o.$_containsGlobalTarget=Tt(o,t);o.$_pendingHide=!1,requestAnimationFrame(()=>{if(o.$_pendingHide=!1,!n[o.randomId]&&Et(o,i,t)){if(o.$_handleGlobalClose(t,e),!t.closeAllPopover&&t.closePopover&&i){let t=o.parentPopper;for(;t;)n[t.randomId]=!0,t=t.parentPopper;return}let r=o.parentPopper;for(;r&&Et(r,r.$_containsGlobalTarget,t);)r.$_handleGlobalClose(t,e),r=r.parentPopper}})}catch(t){}}}function Tt(t,e){const n=t.popperNode();return t.$_mouseDownContains||n.contains(e.target)}function Et(t,e,n){return n.closeAllPopover||n.closePopover&&e||t.autoHide&&!e}"undefined"!=typeof document&&"undefined"!=typeof window&&(ft?(document.addEventListener("touchstart",$t,!pt||{passive:!0,capture:!0}),document.addEventListener("touchend",(function(t){kt(t,!0)}),!pt||{passive:!0,capture:!0})):(window.addEventListener("mousedown",$t,!0),window.addEventListener("click",(function(t){kt(t)}),!0)),window.addEventListener("resize",(function(t){for(let e=0;e=0&&l<=1&&c>=0&&c<=1}var At;function zt(){zt.init||(zt.init=!0,At=-1!==function(){var t=window.navigator.userAgent,e=t.indexOf("MSIE ");if(e>0)return parseInt(t.substring(e+5,t.indexOf(".",e)),10);if(t.indexOf("Trident/")>0){var n=t.indexOf("rv:");return parseInt(t.substring(n+3,t.indexOf(".",n)),10)}var i=t.indexOf("Edge/");return i>0?parseInt(t.substring(i+5,t.indexOf(".",i)),10):-1}())}function Mt(t,e,n,i,o,r,s,a,l,c){"boolean"!=typeof s&&(l=a,a=s,s=!1);var u,d="function"==typeof n?n.options:n;if(t&&t.render&&(d.render=t.render,d.staticRenderFns=t.staticRenderFns,d._compiled=!0,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(u=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,l(t)),t&&t._registeredComponents&&t._registeredComponents.add(r)},d._ssrRegister=u):e&&(u=s?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h=d.render;d.render=function(t,e){return u.call(e),h(t,e)}}else{var p=d.beforeCreate;d.beforeCreate=p?[].concat(p,u):[u]}return n}"undefined"!=typeof window&&window.addEventListener("mousemove",t=>{Ot=Pt,Bt=Lt,Pt=t.clientX,Lt=t.clientY},pt?{passive:!0}:void 0);var Ht={name:"ResizeObserver",props:{emitOnMount:{type:Boolean,default:!1},ignoreWidth:{type:Boolean,default:!1},ignoreHeight:{type:Boolean,default:!1}},mounted:function(){var t=this;zt(),this.$nextTick((function(){t._w=t.$el.offsetWidth,t._h=t.$el.offsetHeight,t.emitOnMount&&t.emitSize()}));var e=document.createElement("object");this._resizeObject=e,e.setAttribute("aria-hidden","true"),e.setAttribute("tabindex",-1),e.onload=this.addResizeHandlers,e.type="text/html",At&&this.$el.appendChild(e),e.data="about:blank",At||this.$el.appendChild(e)},beforeDestroy:function(){this.removeResizeHandlers()},methods:{compareAndNotify:function(){(!this.ignoreWidth&&this._w!==this.$el.offsetWidth||!this.ignoreHeight&&this._h!==this.$el.offsetHeight)&&(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.emitSize())},emitSize:function(){this.$emit("notify",{width:this._w,height:this._h})},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject&&this._resizeObject.onload&&(!At&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),this.$el.removeChild(this._resizeObject),this._resizeObject.onload=null,this._resizeObject=null)}}},Dt=function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"resize-observer",attrs:{tabindex:"-1"}})};Dt._withStripped=!0;var Rt=Mt({render:Dt,staticRenderFns:[]},void 0,Ht,"data-v-8859cc6c",!1,void 0,!1,void 0,void 0,void 0);var jt={version:"1.0.1",install:function(t){t.component("resize-observer",Rt),t.component("ResizeObserver",Rt)}},It=null;"undefined"!=typeof window?It=window.Vue:void 0!==i.g&&(It=i.g.Vue),It&&It.use(jt);var qt={computed:{themeClass(){return function(t){const e=[t];let n=dt.themes[t]||{};do{n.$extend&&!n.$resetCss?(e.push(n.$extend),n=dt.themes[n.$extend]||{}):n=null}while(n);return e.map(t=>"v-popper--theme-"+t)}(this.theme)}}},Wt={name:"VPopperContent",components:{ResizeObserver:Rt},mixins:[qt],props:{popperId:String,theme:String,shown:Boolean,mounted:Boolean,skipTransition:Boolean,autoHide:Boolean,handleResize:Boolean,classes:Object,result:Object},methods:{toPx:t=>null==t||isNaN(t)?null:t+"px"}};function Ft(t,e,n,i,o,r,s,a){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),s?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},c._ssrRegister=l):o&&(l=a?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}const Vt={};var Ut=Ft(Wt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{ref:"popover",staticClass:"v-popper__popper",class:[t.themeClass,t.classes.popperClass,{"v-popper__popper--shown":t.shown,"v-popper__popper--hidden":!t.shown,"v-popper__popper--show-from":t.classes.showFrom,"v-popper__popper--show-to":t.classes.showTo,"v-popper__popper--hide-from":t.classes.hideFrom,"v-popper__popper--hide-to":t.classes.hideTo,"v-popper__popper--skip-transition":t.skipTransition,"v-popper__popper--arrow-overflow":t.result&&t.result.arrow.overflow,"v-popper__popper--no-positioning":!t.result}],style:t.result?{position:t.result.strategy,transform:"translate3d("+Math.round(t.result.x)+"px,"+Math.round(t.result.y)+"px,0)"}:void 0,attrs:{id:t.popperId,"aria-hidden":t.shown?"false":"true",tabindex:t.autoHide?0:void 0,"data-popper-placement":t.result?t.result.placement:void 0},on:{keyup:function(e){if(!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"]))return null;t.autoHide&&t.$emit("hide")}}},[n("div",{staticClass:"v-popper__backdrop",on:{click:function(e){t.autoHide&&t.$emit("hide")}}}),n("div",{staticClass:"v-popper__wrapper",style:t.result?{transformOrigin:t.result.transformOrigin}:void 0},[n("div",{ref:"inner",staticClass:"v-popper__inner"},[t.mounted?[n("div",[t._t("default")],2),t.handleResize?n("ResizeObserver",{on:{notify:function(e){return t.$emit("resize",e)}}}):t._e()]:t._e()],2),n("div",{ref:"arrow",staticClass:"v-popper__arrow-container",style:t.result?{left:t.toPx(t.result.arrow.x),top:t.toPx(t.result.arrow.y)}:void 0},[n("div",{staticClass:"v-popper__arrow-outer"}),n("div",{staticClass:"v-popper__arrow-inner"})])])])}),[],!1,Qt,null,null,null);function Qt(t){for(let t in Vt)this[t]=Vt[t]}var Xt=function(){return Ut.exports}(),Yt={methods:{show(...t){return this.$refs.popper.show(...t)},hide(...t){return this.$refs.popper.hide(...t)},dispose(...t){return this.$refs.popper.dispose(...t)},onResize(...t){return this.$refs.popper.onResize(...t)}}},Gt={name:"VPopperWrapper",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt,qt],inheritAttrs:!1,props:{theme:{type:String,default(){return this.$options.vPopperTheme}}},methods:{getTargetNodes(){return Array.from(this.$refs.reference.children).filter(t=>t!==this.$refs.popperContent.$el)}}};const Kt={};var Zt=Ft(Gt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Popper",t._g(t._b({ref:"popper",attrs:{theme:t.theme,"target-nodes":t.getTargetNodes,"reference-node":function(){return t.$refs.reference},"popper-node":function(){return t.$refs.popperContent.$el}},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.popperId,o=e.isShown,r=e.shouldMountContent,s=e.skipTransition,a=e.autoHide,l=e.show,c=e.hide,u=e.handleResize,d=e.onResize,h=e.classes,p=e.result;return[n("div",{ref:"reference",staticClass:"v-popper",class:[t.themeClass,{"v-popper--shown":o}]},[t._t("default",null,{shown:o,show:l,hide:c}),n("PopperContent",{ref:"popperContent",attrs:{"popper-id":i,theme:t.theme,shown:o,mounted:r,"skip-transition":s,"auto-hide":a,"handle-resize":u,classes:h,result:p},on:{hide:c,resize:d}},[t._t("popper",null,{shown:o,hide:c})],2)],2)]}}],null,!0)},"Popper",t.$attrs,!1),t.$listeners))}),[],!1,Jt,null,null,null);function Jt(t){for(let t in Kt)this[t]=Kt[t]}var te=function(){return Zt.exports}(),ee=ut(ct({},te),{name:"VDropdown",vPopperTheme:"dropdown"});const ne={};var ie=Ft(ee,void 0,void 0,!1,oe,null,null,null);function oe(t){for(let t in ne)this[t]=ne[t]}var re=function(){return ie.exports}(),se=ut(ct({},te),{name:"VMenu",vPopperTheme:"menu"});const ae={};var le=Ft(se,void 0,void 0,!1,ce,null,null,null);function ce(t){for(let t in ae)this[t]=ae[t]}var ue=function(){return le.exports}(),de=ut(ct({},te),{name:"VTooltip",vPopperTheme:"tooltip"});const he={};var pe=Ft(de,void 0,void 0,!1,fe,null,null,null);function fe(t){for(let t in he)this[t]=he[t]}var me=function(){return pe.exports}(),ve={name:"VTooltipDirective",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt],inheritAttrs:!1,props:{theme:{type:String,default:"tooltip"},html:{type:Boolean,default(){return ht(this.theme,"html")}},content:{type:[String,Number,Function],default:null},loadingContent:{type:String,default(){return ht(this.theme,"loadingContent")}}},data:()=>({asyncContent:null}),computed:{isContentAsync(){return"function"==typeof this.content},loading(){return this.isContentAsync&&null==this.asyncContent},finalContent(){return this.isContentAsync?this.loading?this.loadingContent:this.asyncContent:this.content}},watch:{content:{handler(){this.fetchContent(!0)},immediate:!0},async finalContent(t){await this.$nextTick(),this.$refs.popper.onResize()}},created(){this.$_fetchId=0},methods:{fetchContent(t){if("function"==typeof this.content&&this.$_isShown&&(t||!this.$_loading&&null==this.asyncContent)){this.asyncContent=null,this.$_loading=!0;const t=++this.$_fetchId,e=this.content(this);e.then?e.then(e=>this.onResult(t,e)):this.onResult(t,e)}},onResult(t,e){t===this.$_fetchId&&(this.$_loading=!1,this.asyncContent=e)},onShow(){this.$_isShown=!0,this.fetchContent()},onHide(){this.$_isShown=!1}}};const ge={};var ye=Ft(ve,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Popper",t._g(t._b({ref:"popper",attrs:{theme:t.theme,"popper-node":function(){return t.$refs.popperContent.$el}},on:{"apply-show":t.onShow,"apply-hide":t.onHide},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.popperId,o=e.isShown,r=e.shouldMountContent,s=e.skipTransition,a=e.autoHide,l=e.hide,c=e.handleResize,u=e.onResize,d=e.classes,h=e.result;return[n("PopperContent",{ref:"popperContent",class:{"v-popper--tooltip-loading":t.loading},attrs:{"popper-id":i,theme:t.theme,shown:o,mounted:r,"skip-transition":s,"auto-hide":a,"handle-resize":c,classes:d,result:h},on:{hide:l,resize:u}},[t.html?n("div",{domProps:{innerHTML:t._s(t.finalContent)}}):n("div",{domProps:{textContent:t._s(t.finalContent)}})])]}}])},"Popper",t.$attrs,!1),t.$listeners))}),[],!1,we,null,null,null);function we(t){for(let t in ge)this[t]=ge[t]}var be=function(){return ye.exports}();function _e(t,e,n){let i;const o=typeof e;return i="string"===o?{content:e}:e&&"object"===o?e:{content:!1},i.placement=function(t,e){let n=t.placement;if(!n&&e)for(const t of mt)e[t]&&(n=t);return n||(n=ht(t.theme||"tooltip","placement")),n}(i,n),i.targetNodes=()=>[t],i.referenceNode=()=>t,i}function Se(t,e,n){const i=_e(t,e,n),o=t.$_popper=new(et())({mixins:[Yt],data:()=>({options:i}),render(t){const e=this.options,{theme:n,html:i,content:o,loadingContent:r}=e,s=((t,e)=>{var n={};for(var i in t)st.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&rt)for(var i of rt(t))e.indexOf(i)<0&&at.call(t,i)&&(n[i]=t[i]);return n})(e,["theme","html","content","loadingContent"]);return t(be,{props:{theme:n,html:i,content:o,loadingContent:r},attrs:s,ref:"popper"})},devtools:{hide:!0}}),r=document.createElement("div");return document.body.appendChild(r),o.$mount(r),t.classList&&t.classList.add("v-popper--has-tooltip"),o}function xe(t){t.$_popper&&(t.$_popper.$destroy(),delete t.$_popper,delete t.$_popperOldShown),t.classList&&t.classList.remove("v-popper--has-tooltip")}function Ce(t,{value:e,oldValue:n,modifiers:i}){const o=_e(t,e,i);if(!o.content||ht(o.theme||"tooltip","disabled"))xe(t);else{let n;t.$_popper?(n=t.$_popper,n.options=o):n=Se(t,e,i),void 0!==e.shown&&e.shown!==t.$_popperOldShown&&(t.$_popperOldShown=e.shown,e.shown?n.show():n.hide())}}var $e={bind:Ce,update:Ce,unbind(t){xe(t)}};function ke(t){t.addEventListener("click",Ee),t.addEventListener("touchstart",Oe,!!pt&&{passive:!0})}function Te(t){t.removeEventListener("click",Ee),t.removeEventListener("touchstart",Oe),t.removeEventListener("touchend",Be),t.removeEventListener("touchcancel",Pe)}function Ee(t){const e=t.currentTarget;t.closePopover=!e.$_vclosepopover_touch,t.closeAllPopover=e.$_closePopoverModifiers&&!!e.$_closePopoverModifiers.all}function Oe(t){if(1===t.changedTouches.length){const e=t.currentTarget;e.$_vclosepopover_touch=!0;const n=t.changedTouches[0];e.$_vclosepopover_touchPoint=n,e.addEventListener("touchend",Be),e.addEventListener("touchcancel",Pe)}}function Be(t){const e=t.currentTarget;if(e.$_vclosepopover_touch=!1,1===t.changedTouches.length){const n=t.changedTouches[0],i=e.$_vclosepopover_touchPoint;t.closePopover=Math.abs(n.screenY-i.screenY)<20&&Math.abs(n.screenX-i.screenX)<20,t.closeAllPopover=e.$_closePopoverModifiers&&!!e.$_closePopoverModifiers.all}}function Pe(t){t.currentTarget.$_vclosepopover_touch=!1}var Le={bind(t,{value:e,modifiers:n}){t.$_closePopoverModifiers=n,(void 0===e||e)&&ke(t)},update(t,{value:e,oldValue:n,modifiers:i}){t.$_closePopoverModifiers=i,e!==n&&(void 0===e||e?ke(t):Te(t))},unbind(t){Te(t)}};const Ne=re,Ae=me;const ze={version:"1.0.0-beta.14",install:function(t,e={}){t.$_vTooltipInstalled||(t.$_vTooltipInstalled=!0,function t(e,n){for(const i in n)Object.prototype.hasOwnProperty.call(n,i)&&("object"==typeof n[i]&&e[i]?t(e[i],n[i]):e[i]=n[i])}(dt,e),t.directive("tooltip",$e),t.directive("close-popper",Le),t.component("v-tooltip",me),t.component("VTooltip",me),t.component("v-dropdown",re),t.component("VDropdown",re),t.component("v-menu",ue),t.component("VMenu",ue))},options:dt};let Me=null;"undefined"!=typeof window?Me=window.Vue:void 0!==i.g&&(Me=i.g.Vue),Me&&Me.use(ze);var He=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["alert box-container",t.containerStyle(),t.addClass,{"d-flex":t.seamlessHeaderBool()}],style:t.customStyle()},[t.seamlessHeaderBool()?n("div",{staticClass:"d-flex"},[t.iconBool()?n("div",{class:["icon-wrapper",t.iconStyle()],style:t.customIconColorStyle()},[t._t("icon",(function(){return[n("i",{class:["fas",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(" "),n("div",{staticClass:"vertical-divider",class:t.getBootstrapAlertStyle(),attrs:{"aria-hidden":"true"}})]):t._e(),t._v(" "),n("div",{staticClass:"header-and-body"},[t.headerBool()?n("div",{class:["box-header-wrapper",{"alert-dismissible-box":t.dismissible}]},[t.iconBool()&&!t.seamlessHeaderBool()?n("div",{class:["icon-wrapper",t.iconStyle()],style:t.customIconColorStyle()},[t._t("icon",(function(){return[n("i",{class:["fas",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(" "),n("div",{staticClass:"box-header"},[t._t("header")],2),t._v(" "),t.dismissible?n("button",{staticClass:"btn-close close-with-heading",attrs:{type:"button","data-bs-dismiss":"alert","aria-label":"Close"}}):t._e()]):t._e(),t._v(" "),n("div",{class:["box-body-wrapper",{"alert-dismissible-box":t.dismissible&&!t.headerBool(),"box-body-wrapper-with-heading":t.headerBool()}]},[t.iconBool()&&!t.headerBool()?n("div",{class:["icon-wrapper",t.iconStyle()],style:t.customIconColorStyle()},[t._t("icon",(function(){return[n("i",{class:["fas",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(" "),t.seamlessNoHeaderBool()?n("div",{staticClass:"vertical-divider",class:t.getBootstrapAlertStyle(),attrs:{"aria-hidden":"true"}}):t._e(),t._v(" "),n("div",{staticClass:"contents",style:t.customColorStyle()},[t._t("default")],2),t._v(" "),t.dismissible&&!t.headerBool()?n("button",{staticClass:"btn-close",attrs:{type:"button","data-bs-dismiss":"alert","aria-label":"Close"}}):t._e()])])])};He._withStripped=!0;var De=function(t){return"string"==typeof t?""===t||"true"===t||"false"!==t&&"null"!==t&&"undefined"!==t&&t:t};function Re(t){return"string"==typeof t?""===t||"true"===t||"false"!==t&&"null"!==t&&"undefined"!==t&&t:t}function je(t){return"number"==typeof t?t:null==t||isNaN(Number(t))?null:Number(t)}function Ie(t){var e=t.split("#"),n="";return e.length>1&&(n=e[1]),n}function qe(t,e,n,i,o,r,s,a){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),s?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},c._ssrRegister=l):o&&(l=a?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}const We=qe({props:{dismissible:{type:Boolean,default:!1},backgroundColor:{type:String,default:null},borderColor:{type:String,default:null},borderLeftColor:{type:String,default:null},color:{type:String,default:null},icon:{type:String,default:null},iconSize:{type:String,default:null},iconColor:{type:String,default:null},type:{type:String,default:""},addClass:{type:String,default:""},light:{type:Boolean,default:!1},seamless:{type:Boolean,default:!1},noIcon:{type:Boolean,default:!1},noBackground:{type:Boolean,default:!1},noBorder:{type:Boolean,default:!1},theme:{type:String,default:""}},computed:{bootStrapStyle:function(){return function(t,e){var n,i,o=["warning","info","definition","success","danger","tip","important","wrong"].includes(t)?t:"",r=["primary","secondary","success","danger","warning","info","light","dark"].includes(e)?e:"";if(r)n=r;else switch(o){case"warning":n="warning";break;case"info":n="info";break;case"definition":n="primary";break;case"success":case"tip":n="success";break;case"important":case"wrong":n="danger";break;default:n="default"}switch(o){case"wrong":i="fa-times";break;case"warning":i="fa-exclamation";break;case"info":i="fa-info";break;case"success":i="fa-check";break;case"important":i="fa-flag";break;case"tip":i="fa-lightbulb";break;case"definition":i="fa-atlas";break;default:i=""}return{style:n,icon:i}}(this.type,this.theme)}},methods:{isSeamless:function(){return!this.light&&this.seamless},seamlessNoHeaderBool:function(){return this.isSeamless()&&!this.headerBool()},seamlessHeaderBool:function(){return this.isSeamless()&&this.headerBool()},headerBool:function(){return!!this.$scopedSlots.header},iconBool:function(){var t=!!this.$scopedSlots.icon;return!this.noIcon&&this.type||t},containerStyle:function(){var t;return t=this.light?"".concat(this.getBootstrapBorderStyle()," alert-border-left"):this.seamless?"seamless":this.getBootstrapAlertStyle(),this.noBackground&&(t+=" no-background"),this.noBorder&&(t+=" no-border"),t},customStyle:function(){var t={};return this.backgroundColor&&(t.backgroundColor=this.backgroundColor,t.borderColor=this.backgroundColor),this.borderColor&&(t.border="1px solid ".concat(this.borderColor)),this.borderLeftColor&&(t.borderLeft="5px solid ".concat(this.borderLeftColor)),t},customColorStyle:function(){return this.color?{color:this.color}:{}},iconStyle:function(){var t="";return this.iconSize&&(t+="fa-".concat(this.iconSize)),(this.light||this.seamless)&&(t+=" ".concat(this.getBootstrapTextStyle())),t},customIconColorStyle:function(){return this.iconColor?{color:"".concat(this.iconColor,"!important")}:{}},getBootstrapAlertStyle:function(){return"alert-".concat(this.bootStrapStyle.style)},getBootstrapTextStyle:function(){return"text-".concat(this.bootStrapStyle.style)},getBootstrapBorderStyle:function(){return"border-".concat(this.bootStrapStyle.style)},getFontAwesomeIconStyle:function(){return this.bootStrapStyle.icon}}},He,[],!1,null,"6607c59e",null).exports;var Fe=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("nav",{staticClass:"breadcrumb-divider",attrs:{"aria-label":"breadcrumb"}},[n("ol",{staticClass:"breadcrumb"},[n("li",{staticClass:"notlink breadcrumb-marker"},[t._v("\n ››  \n ")]),t._v(" "),t._l(t.items,(function(e,i){return n("li",{key:i,class:["breadcrumb-item",{notlink:null===e.link}],attrs:{"aria-current":{page:t.isLast(i,t.items.length)}}},[null===e.link?n("a",[t._v("\n "+t._s(e.title)+"\n ")]):n("a",{attrs:{href:e.link}},[t._v("\n "+t._s(e.title)+"\n ")])])}))],2)])])};Fe._withStripped=!0;const Ve=qe({data:function(){return{items:[]}},methods:{isLast:function(t,e){return t===e-1}},mounted:function(){var t=Array.from(document.querySelectorAll("ul")).find((function(t){return t.classList.contains("site-nav-list-root")}));if(t){var e=t.querySelector(".current");if(e){this.items.unshift({title:e.textContent,link:null});for(var n=e.parentElement;n!==t;){if("ul"===n.tagName.toLowerCase()){var i=n.parentElement.querySelector("div"),o=i.querySelector("a[href]");null===o?this.items.unshift({title:i.textContent,link:null}):this.items.unshift({title:o.textContent,link:o.getAttribute("href")})}n=n.parentElement}}}}},Fe,[],!1,null,"ef898034",null).exports;var Ue=i(3),Qe=i.n(Ue),Xe=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isLi?n("li",{ref:"dropdown",class:[{disabled:t.disabledBool},"dropdown",t.addClass]},[t._t("button",(function(){return[n("a",{staticClass:"dropdown-toggle nav-link",class:{disabled:t.disabledBool},attrs:{role:"button","data-bs-toggle":"dropdown"}},[t._t("header"),t._v(" "),n("span",[t._v(t._s(t.tabGroupHeader))])],2)]})),t._v(" "),t._t("dropdown-menu",(function(){return[n("ul",{staticClass:"dropdown-menu",class:[{show:t.show},{"dropdown-menu-end":t.menuAlignRight}]},[t._t("default")],2)]}))],2):t.isSubmenu?n("submenu",{ref:"submenu",scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)}):n("div",{ref:"dropdown",class:[{disabled:t.disabledBool},"btn-group",t.addClass]},[t._t("before"),t._v(" "),t._t("button",(function(){return[n("button",{staticClass:"btn dropdown-toggle",class:[t.btnType,t.btnWithBefore,{"dropdown-toggle-split":t.hasBefore}],attrs:{type:"button",disabled:t.disabledBool,"data-bs-reference":"parent","data-bs-toggle":"dropdown"}},[t._t("header")],2)]})),t._v(" "),t._t("dropdown-menu",(function(){return[n("ul",{staticClass:"dropdown-menu",class:[{show:t.show},{"dropdown-menu-end":t.menuAlignRight}]},[t._t("default")],2)]}))],2)};Xe._withStripped=!0;var Ye=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("li",{ref:"submenu",class:[t.addClass,"dropdown-submenu",{dropend:t.dropright,dropstart:t.dropleft}]},[t._t("button",(function(){return[n("a",{staticClass:"dropdown-item submenu-toggle",class:{disabled:t.disabled},attrs:{role:"button","data-bs-toggle":"dropdown"}},[t._t("header")],2)]})),t._v(" "),t._t("dropdown-menu",(function(){return[n("ul",{staticClass:"dropdown-menu"},[t._t("default")],2)]}))],2)};function Ge(t,n){for(var i=0;i1&&void 0!==arguments[1])||arguments[1];return this&&this.length&&t?(this.each((function(e){tn.push({el:e,callback:t})})),Ke||(Ke=function(t){tn.forEach((function(e){e.el&&(e.el.contains(t.target)||e.el===t.target||e.callback.call(e.el,t,e.el))}))},document.addEventListener("click",Ke,!1),e&&document.addEventListener("touchstart",Ke,!1)),this):this}},{key:"offBlur",value:function(t){return this.each((function(e){tn=tn.filter((function(n){return!(n&&n.el===e&&(!t||n.callback===t))&&e}))})),this}}])&&Ge(e.prototype,n),i&&Ge(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}(),an=sn.prototype;function ln(t,e){var n=[];return Ze.forEach.call(t,(function(i){if(nn(i))~n.indexOf(i)||n.push(i);else if(on(i))for(var o in i)n.push(i[o]);else if(null!==i)return t.get=an.get,t.set=an.set,t.call=an.call,t.owner=e,t})),hn(n,e)}Object.getOwnPropertyNames(Ze).forEach((function(t){"join"!==t&&"copyWithin"!==t&&"fill"!==t&&void 0===an[t]&&(an[t]=Ze[t])})),window&&window.Symbol&&Symbol.iterator&&(an[Symbol.iterator]=an.values=Ze[Symbol.iterator]);var cn=document&&document.createElement("div");function un(t){var e=this;an[t]||(cn[t]instanceof Function?an[t]=function(){for(var n=[],i=!0,o=arguments.length,r=new Array(o),s=0;sn))},preventOverflow:function(t){t.removeAttribute("style");var e=0,n=(window.innerWidth,window.innerHeight),i=t.getBoundingClientRect();if(void 0!==i){var o=i.y,r=(i.x,i.x,t.offsetWidth,i.y+t.offsetHeight);r>n?t.setAttribute("style","bottom: auto; top: ".concat(-(r-n),"px;")):owindow.innerWidth)e.setAttribute("style","left: 0px;");else{var i=e.parentNode.getBoundingClientRect(),o=i.left+e.offsetWidth-window.innerWidth,r=o<0?i.left:i.left-o;e.setAttribute("style","left: ".concat(r,"px;"))}}const vn=qe({props:{addClass:{type:String,default:""},disabled:{type:[Boolean,String],default:!1}},data:function(){return{show:!1,dropright:!0,dropleft:!1}},inject:{isParentNavbar:{default:!1}},computed:{disabledBool:function(){return Re(this.disabled)}},methods:{hideSubmenu:function(){this.show=!1,pn(this.$refs.submenu).find("ul.dropdown-menu").each((function(t){return t.classList.toggle("show",!1)})),this.alignMenuRight()},showSubmenu:function(){var t=this;this.show=!0,pn(this.$refs.submenu).findChildren("ul").each((function(e){e.classList.toggle("show",!0),window.innerWidth<768&&t.isParentNavbar?mn(e):(fn.isRightAlign(e)?t.alignMenuRight():t.alignMenuLeft(),fn.preventOverflow(e))}))},alignMenuRight:function(){this.dropright=!0,this.dropleft=!1},alignMenuLeft:function(){this.dropright=!1,this.dropleft=!0}},mounted:function(){var t=this,e=pn(this.$refs.submenu);this.show&&this.showSubmenu(),e.onBlur((function(){t.hideSubmenu()}),!1),e.findChildren("a,button").on("click",(function(e){return e.preventDefault(),e.stopPropagation(),t.disabledBool||(t.show?t.hideSubmenu():t.showSubmenu()),!1})),e.findChildren("a,button").on("mouseover",(function(n){if(n.preventDefault(),window.innerWidth>767){if(e.findChildren("ul.show").length>0||t.disabledBool)return!1;n.currentTarget.click(),t.$parent.$parent.$children.forEach((function(e){e.$el===t.$el?e.$refs.submenu.showSubmenu():e.$refs.submenu.hideSubmenu()}))}return!1}))},beforeDestroy:function(){var t=pn(this.$refs.submenu);t.offBlur(),t.findChildren("a,button").off(),t.findChildren("ul").off()}},Ye,[],!1,null,"3c82541c",null).exports;const gn=qe({components:{Submenu:vn},props:{disabled:{type:[Boolean,String],default:!1},type:{type:String,default:"light"},tabGroupHeader:{type:String,default:""},menuAlignRight:{type:Boolean,default:!1},addClass:{type:String,default:""}},provide:{hasParentDropdown:!0},inject:{hasParentDropdown:{default:void 0},isParentNavbar:{default:!1}},data:function(){return{show:!1}},computed:{btnType:function(){return"btn-".concat(this.type)},disabledBool:function(){return Re(this.disabled)},isLi:function(){return this.$parent._navbar||this.$parent.menu||this.$parent._tabset},isSubmenu:function(){return this.hasParentDropdown},menu:function(){return!this.$parent||this.$parent.navbar},submenu:function(){return this.$parent&&(this.$parent.menu||this.$parent.submenu)},slots:function(){return this.$scopedSlots.default},hasBefore:function(){return!!this.$scopedSlots.before},btnWithBefore:function(){return this.hasBefore?"btn-with-before":""}},methods:{blur:function(){var t=this;this.unblur(),this._hide=setTimeout((function(){t._hide=null,t.hideDropdownMenu()}),100)},unblur:function(){this._hide&&(clearTimeout(this._hide),this._hide=null)},hideDropdownMenu:function(){var t=this;this.show=!1,pn(this.$refs.dropdown).findChildren("ul").each((function(e){e.classList.toggle("show",!1),window.innerWidth<768&&t.isParentNavbar&&e.style.removeProperty("left")}))},showDropdownMenu:function(){var t=this;this.show=!0,pn(this.$refs.dropdown).findChildren("ul").each((function(e){e.classList.toggle("show",!0),window.innerWidth<768&&t.isParentNavbar&&mn(e)}))}},mounted:function(){var t=this,e=pn(this.$refs.dropdown);this.$slots.button&&e.findChildren(".dropdown-toggle").forEach((function(t){return t.setAttribute("data-bs-toggle","dropdown")})),this.show&&this.showDropdownMenu(),e.onBlur((function(){t.hideDropdownMenu()}),!1),e.findChildren("a,button.dropdown-toggle").on("click",(function(e){return e.preventDefault(),t.disabledBool||(t.show?t.hideDropdownMenu():t.showDropdownMenu()),!1})),e.findChildren("ul").on("click","li>a",(function(e){e.target.classList.contains("submenu-toggle")||t.hideDropdownMenu()}))},beforeDestroy:function(){var t=pn(this.$refs.dropdown);t.offBlur(),t.findChildren("a,button").off(),t.findChildren("ul").off()}},Xe,[],!1,null,"99624572",null).exports;var yn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("nav",{ref:"navbar",class:["navbar","navbar-expand-md","d-print-none",t.themeOptions,t.addClass,t.fixedOptions]},[n("div",{staticClass:"container-fluid"},[n("div",{staticClass:"navbar-left"},[t._t("brand")],2),t._v(" "),n("div",{ref:"navbarDefault",staticClass:"navbar-default"},[n("ul",{staticClass:"navbar-nav me-auto mt-2 mt-lg-0"},[t._t("default")],2)]),t._v(" "),t.slots.right?n("ul",{staticClass:"navbar-nav navbar-right"},[t._t("right")],2):t._e()])]),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.isLowerNavbarShowing,expression:"isLowerNavbarShowing"}],ref:"lowerNavbar",staticClass:"lower-navbar-container"},[t._t("lower-navbar",(function(){return[n("site-nav-button"),t._v(" "),n("page-nav-button")]}))],2)])};function wn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n0?this.isLowerNavbarShowing=!0:this.isLowerNavbarShowing=!1}},created:function(){this._navbar=!0},mounted:function(){var t=this,e=pn('.dropdown>[data-bs-toggle="dropdown"]',this.$el).parent();e.on("click",".dropdown-toggle",(function(t){t.preventDefault(),e.each((function(e){e.contains(t.target)&&e.classList.toggle("open")}))})).on("click",".dropdown-menu>li>a",(function(t){e.each((function(e){e.contains(t.target)&&e.classList.remove("open")}))})).onBlur((function(t){e.each((function(e){e.contains(t.target)||e.classList.remove("open")}))})),this.highlightLink(window.location.href);var n=pn(this.$refs.navbarDefault).find(".current")[0];n&&window.innerWidth<768&&n.offsetLeft+n.offsetWidth>window.innerWidth&&(this.$refs.navbarDefault.scrollLeft=n.offsetLeft+n.offsetWidth-window.innerWidth),this.toggleLowerNavbar(),pn(window).on("resize",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).on("wheel",(function(e){window.innerWidth<768&&!function(t){for(var e=0;e0},srcWithoutFragment:function(){return this.src.split("#")[0]},shouldShowHeader:function(){return!this.localExpanded||!this.expandHeaderless},shouldShowPeek:function(){return this.peek&&!this.localExpanded},collapsedPanelHeight:function(){return this.peek?125:0}},data:function(){return{localExpanded:!1,localMinimized:!1,wasRetrieverLoaded:!1,isRetrieverLoadDone:!this.src,fragment:""}},methods:{toggle:function(t){var e=this;this.wasRetrieverLoaded?(this.localExpanded?(t&&(this.$refs.panel.style.maxHeight="".concat(this.$refs.panel.scrollHeight,"px")),requestAnimationFrame((function(){if(e.$el.getBoundingClientRect().top<0){var n,i=document.querySelector("header[sticky]");if(null==i)n=0;else{var o=window.getComputedStyle(i,null);n=i.clientHeight-parseFloat(o.paddingTop)-parseFloat(o.paddingBottom)||0}window.scrollTo({top:window.scrollY+e.$el.getBoundingClientRect().top-n-3,left:0,behavior:t?"smooth":"instant"})}e.$refs.panel.style.maxHeight="".concat(e.collapsedPanelHeight,"px")}))):(this.$refs.panel.style.transition="max-height 0.5s ease-in-out",this.$refs.panel.style.maxHeight="".concat(this.$refs.panel.scrollHeight,"px")),this.localExpanded=!this.localExpanded):this.open()},close:function(){this.localMinimized=!0,this.localExpanded=!1},open:function(){var t=this;this.localMinimized=!1,this.$nextTick((function(){t.initPanel(),t.localExpanded=!0,t.wasRetrieverLoaded=!0,t.$nextTick((function(){t.$refs.panel.style.maxHeight="".concat(t.$refs.panel.scrollHeight,"px")}))}))},openPopup:function(){window.open(this.popupUrl)},retrieverUpdateMaxHeight:function(){this.isRetrieverLoadDone=!0,this.localExpanded&&(this.expandedBool?this.$refs.panel.style.maxHeight="none":this.$refs.panel.style.maxHeight="".concat(this.$refs.panel.scrollHeight,"px"))},initPanel:function(){var t=this;this.$refs.panel.addEventListener("transitionend",(function(e){t.localExpanded&&t.isRetrieverLoadDone&&e.target===t.$refs.panel&&(t.$refs.panel.style.maxHeight="none")})),this.localExpanded?this.$refs.panel.style.maxHeight="none":this.$refs.panel.style.maxHeight="".concat(this.collapsedPanelHeight,"px")}},created:function(){if(this.src){var t=Ie(this.src);t&&(this.fragment=t)}var e=!this.expandableBool&&"false"!==this.expanded;this.localExpanded=e||this.expandedBool,null===this.localExpanded&&(this.localExpanded=!1),this.wasRetrieverLoaded=this.localExpanded||this.peek,this.localMinimized=this.minimizedBool},mounted:function(){this.localMinimized||this.initPanel()}};var Pn=function(){var t=this.$createElement,e=this._self._c||t;return e("button",{class:["collapse-button","btn",this.isSeamless?"btn-seamless":this.isLightBg?"btn-outline-secondary":"btn-outline-light"],attrs:{type:"button"}},[e("span",{class:["collapse-icon","glyphicon","glyphicon-menu-down",{opened:this.isOpenBool}],attrs:{"aria-hidden":"true"}})])};Pn._withStripped=!0;const Ln=qe({props:{isOpen:{type:[Boolean,String],default:!1},isLightBg:{type:Boolean,default:!0},isSeamless:{type:Boolean,default:!1}},computed:{isOpenBool:function(){return Re(this.isOpen)}}},Pn,[],!1,null,null,null).exports;var Nn=function(){var t=this.$createElement;return(this._self._c||t)("div",[this._v("\n Loading...\n")])};function An(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}Nn._withStripped=!0;const zn=qe({props:{src:{type:String,default:null},fragment:{type:String,default:null},delay:{type:[Boolean,String],default:!1},hasFetched:{type:Boolean,default:!1}},data:function(){return{hasFetchedCopy:this.hasFetched}},computed:{delayBool:function(){return Re(this.delay)},hash:function(){return Ie(this.src)||this.fragment},srcWithoutHash:function(){return this.src.split("#")[0]}},methods:{fetch:function(t){function e(){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(){var t=this;this.srcWithoutHash&&(this.hasFetchedCopy||fetch(this.srcWithoutHash).then((function(t){return t.text()})).then((function(e){var i=e;if(t.hash){var o=document.implementation.createHTMLDocument("");o.body.innerHTML=i,o.querySelectorAll("svg > script").forEach((function(t){return t.remove()})),i=o.querySelector("#".concat(t.hash)).innerHTML}if(t.hasFetchedCopy=!0,void 0===i&&t.hash)t.$el.innerHTML="Error: Failed to retrieve page fragment:"+" ".concat(t.srcWithoutHash,"#").concat(t.hash);else{var r=function(t){for(var e=1;e\n".concat(i,"\n"),data:function(){return r}}))).$mount(t.$el),t.$emit("src-loaded")}})).catch((function(e){console.error(e),t.$el.innerHTML="Error: Failed to retrieve content from source: "+"".concat(t.srcWithoutHash,""),t.$emit("src-loaded")})))}))},mounted:function(){this.$nextTick((function(){this.srcWithoutHash||(this.$el.innerHTML=""),this.delayBool||this.fetch()}))}},Nn,[],!1,null,null,null).exports;const Mn=qe({mixins:[Bn],components:{panelSwitch:Ln,retriever:zn},computed:{showCaret:function(){return this.isSeamless&&this.expandableBool},isSeamless:function(){return"seamless"===this.type},btnType:function(){return"light"===this.type?"btn-outline-secondary":this.isSeamless?"":"btn-outline-".concat(this.type||"secondary")},borderType:function(){return this.isSeamless?"border-0":this.type?"light"===this.type?"":"border-".concat(this.type):""},cardType:function(){return this.isSeamless?"bg-transparent":"bg-".concat(this.type||"light")},isLightBg:function(){return"bg-light"===this.cardType||"bg-warning"===this.cardType}}},On,[],!1,null,"c545cba4",null).exports;var Hn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.localMinimized?n("span",{ref:"cardContainer",class:["card-container",t.addClass]},[t.hasId?n("span",{staticClass:"anchor",attrs:{id:t.panelId}}):t._e(),t._v(" "),n("span",{staticClass:"morph"},[n("button",{staticClass:"morph-display-wrapper btn card-title morph-title",on:{click:function(e){return t.minimalOpen()}}},[t.noMinimizedSwitch?t._e():n("div",{class:["glyphicon","glyphicon-chevron-right"]}),t._v(" "),t._t("_alt",(function(){return[n("span",{staticClass:"card-title"},[t._t("header")],2)]}))],2)])]):n("div",{ref:"cardContainer",class:["card-container",t.addClass]},[t.hasId?n("span",{staticClass:"anchor",attrs:{id:t.panelId}}):t._e(),t._v(" "),n("div",{staticClass:"card card-flex"},[n("div",{class:["header-wrapper",{"header-wrapper-bottom":t.isHeaderAtBottom,"header-toggle":t.isExpandableCard}],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard&&t.minimalToggle()}}},[n("transition",{attrs:{name:"header-fade"}},[n("span",{directives:[{name:"show",rawName:"v-show",value:!t.isHeaderAtBottom,expression:"!isHeaderAtBottom"}],ref:"headerWrapper",class:["card-title",{ellipses:!t.hasHeaderBool}]},[n("span",{staticClass:"card-title-inline"},[t._t("header")],2),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.showDownSwitch,expression:"showDownSwitch"}],staticClass:"minimal-button glyphicon glyphicon-menu-down minimal-menu-down",attrs:{"aria-hidden":"true"}})])]),t._v(" "),n("div",{class:["button-wrapper",{"button-wrapper-expanded":t.isHeaderAtBottom}]},[t._t("button",(function(){return[n("button",{directives:[{name:"show",rawName:"v-show",value:!t.noCloseBool,expression:"!noCloseBool"}],staticClass:"minimal-button",attrs:{type:"button"},on:{click:function(e){return e.stopPropagation(),t.minimalClose()}}},[n("span",{staticClass:"glyphicon glyphicon-remove minimal-close-button",attrs:{"aria-hidden":"true"}})]),t._v(" "),n("button",{directives:[{name:"show",rawName:"v-show",value:null!==t.popupUrl,expression:"popupUrl !== null"}],staticClass:"minimal-button",attrs:{type:"button"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n("span",{staticClass:"glyphicon glyphicon-new-window minimal-popup-button",attrs:{"aria-hidden":"true"}})]),t._v(" "),n("button",{directives:[{name:"show",rawName:"v-show",value:t.isHeaderAtBottom&&t.isExpandableCard&&t.bottomSwitchBool,expression:"isHeaderAtBottom && isExpandableCard && bottomSwitchBool"}],staticClass:"minimal-button",attrs:{type:"button"}},[n("span",{staticClass:"glyphicon glyphicon-menu-up minimal-menu-up",attrs:{"aria-hidden":"true"}})])]}))],2)],1),t._v(" "),n("div",{ref:"panel",staticClass:"card-collapse",class:{"card-peek-collapsed":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n("div",{staticClass:"card-body"},[t._t("default"),t._v(" "),t.hasSrc?n("retriever",{ref:"retriever",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{"src-loaded":t.retrieverUpdateMaxHeight}}):t._e()],2):t._e()])])])};Hn._withStripped=!0;var Dn=qe({mixins:[Bn],components:{retriever:zn},data:function(){return{isHeaderAtBottom:!1}},computed:{showDownSwitch:function(){return this.hasHeaderBool&&this.isExpandableCard&&!this.noSwitchBool}},methods:{minimalToggle:function(){var t=this;if(this.localExpanded){this.$refs.panel.addEventListener("transitionend",(function e(n){n.target===t.$refs.panel&&(t.isHeaderAtBottom=!1,t.$refs.panel.removeEventListener("transitionend",e))}))}else this.isHeaderAtBottom=!0;this.toggle(!0)},minimalOpen:function(){this.open(),this.isHeaderAtBottom=!0},minimalClose:function(){this.close(),this.isHeaderAtBottom=!1}},created:function(){this.isHeaderAtBottom=this.localExpanded}},Hn,[],!1,null,"6cec1f15",null);const Rn=qe({components:{nestedPanel:Mn,minimalPanel:Dn.exports},props:{panelId:{type:String,default:null},type:{type:String,default:null}},computed:{isMinimal:function(){return"minimal"===this.type}}},En,[],!1,null,null,null).exports;var jn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["annotate-image-wrapper",t.addClass]},[n("img",{ref:"pic",staticClass:"annotate-image",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{"~load":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(" "),n("div",{staticStyle:{top:"0",left:"0",height:"0"}},[t._t("default")],2)])};jn._withStripped=!0;const In=qe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:""},width:{type:String,default:""},lazy:{type:Boolean,default:!1},addClass:{type:String,default:""}},computed:{hasWidth:function(){return""!==this.width},hasHeight:function(){return""!==this.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?"lazy":"eager"}},data:function(){return{widthFromHeight:"",heightFromWidth:""}},methods:{computeWidthAndHeight:function(){var t=this.$refs.pic,e=t.naturalHeight,n=t.naturalWidth/e;this.hasWidth?this.heightFromWidth=Math.round(je(this.width)/n).toString():this.hasHeight&&(this.widthFromHeight=Math.round(je(this.height)*n).toString(),this.heightFromWidth=this.height)}},provide:function(){return{width:this.width,height:this.height,src:this.src}}},jn,[],!1,null,null,null).exports;var qn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t.hasBottomText&&t.hasLabel?n("div",{staticClass:"legend-wrapper"},[n("div",{staticClass:"text-header"},[t._v("\n "+t._s(t.computedBottomHeader)+"\n ")]),t._v(" "),t.hasContent?n("div",[t._t("content")],2):t._e()]):t._e(),t._v(" "),n("div",{staticClass:"annotate-point"},[t.isMounted?n("div",{staticClass:"popover-annotation"},[n("div",{style:t.pointPosition},[t.isMounted?n("v-popover",{attrs:{placement:t.placement,delay:0,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,distance:t.computeDistance,disabled:!t.hasPopover,skidding:t.computeSkidding,"arrow-padding":t.computeArrowPadding,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[t.hasContent||t.hasHeader?n("div",{staticClass:"popover-container"},[t.hasHeader?n("h3",{staticClass:"popover-header"},[t._t("header")],2):t._e(),t._v(" "),t.hasContent?n("div",{staticClass:"popover-body"},[t._t("content")],2):t._e()]):t._e()]},proxy:!0}],null,!0)},[n("div",{staticClass:"hover-wrapper"},[t._t("default",(function(){return[n("button",{staticClass:"hover-point",style:t.pointStyle})]})),t._v(" "),n("div",{staticClass:"hover-label",style:t.labelStyle},[t._t("label")],2)],2)]):t._e()],1)]):t._e()])])};qn._withStripped=!0;const Wn=qe({props:{content:{type:String,default:""},header:{type:String,default:""},placement:{type:String,default:"top"},x:{type:String,default:null},y:{type:String,default:null},color:{type:String,default:"green"},textColor:{type:String,default:"black"},fontSize:{type:String,default:"14"},opacity:{type:String,default:"0.3"},size:{type:String,default:"40"},label:{type:String,default:""},legend:{type:String,default:"popover"},trigger:{type:String,default:"click"}},data:function(){return{targetEl:{},isMounted:!1,width:this.width,height:this.height,src:this.src}},inject:["width","height","src"],computed:{pointPosition:function(){var t=this;this.computeImage((function(){t.width=t.parentEl.offsetWidth,t.height=t.parentEl.offsetHeight}));var e=100*(this.toDecimal(this.x)-this.size/2/this.width),n=100*(this.toDecimal(this.y)-this.size/2/this.height);return{left:"".concat(e,"%"),top:"".concat(n,"%"),position:"absolute",pointerEvents:"all"}},pointStyle:function(){var t=this.hasPopover?"pointer":"default";return{backgroundColor:this.color,opacity:this.opacity,width:"".concat(this.size,"px"),height:"".concat(this.size,"px"),cursor:t}},labelStyle:function(){return{fontSize:"".concat(Math.min(this.fontSize,this.size),"px"),color:this.textColor}},triggers:function(){return this.trigger.split(" ")},computeDistance:function(){return"top"===this.placement?je(this.size*(2/3)):je(this.size/10)},computeSkidding:function(){return"left"===this.placement||"right"===this.placement?-je(this.size/4):0},computeArrowPadding:function(){return"left"===this.placement||"right"===this.placement?je(this.size/2):0},hasHeader:function(){return!!this.$scopedSlots.header},hasContent:function(){return!!this.$scopedSlots.content},hasWidth:function(){return""!==this.width},hasHeight:function(){return""!==this.height},hasLabel:function(){return!!this.$scopedSlots.label},hasBottomText:function(){return"bottom"===this.legend||"both"===this.legend},hasPopover:function(){return(this.hasContent||this.hasHeader)&&("popover"===this.legend||"both"===this.legend)},computedBottomHeader:function(){return""!==this.label&&""===this.header?this.label:""===this.label&&""!==this.header?this.header:"".concat(this.label,": ").concat(this.header)}},methods:{computeImage:function(t){var e=new Image;e.onload=function(){t()},e.src=this.src},toDecimal:function(t){return parseFloat(t)/100}},mounted:function(){this.targetEl=this.$el,this.isMounted=!0,this.parentEl=this.$el.parentElement.parentElement.querySelector(".annotate-image")}},qn,[],!1,null,null,null).exports;var Fn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:["image-wrapper",t.addClass]},[n("img",{ref:"pic",staticClass:"img-fluid rounded",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{"~load":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(" "),n("span",{staticClass:"image-caption"},[t._t("default")],2)])};Fn._withStripped=!0;const Vn=qe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:""},width:{type:String,default:""},lazy:{type:Boolean,default:!1},addClass:{type:String,default:""}},computed:{hasWidth:function(){return""!==this.width},hasHeight:function(){return""!==this.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?"lazy":"eager"}},data:function(){return{widthFromHeight:"",heightFromWidth:""}},methods:{computeWidthAndHeight:function(){var t=this.$refs.pic,e=t.naturalHeight,n=t.naturalWidth/e;this.hasWidth?this.heightFromWidth=Math.round(je(this.width)/n).toString():this.hasHeight&&(this.widthFromHeight=Math.round(je(this.height)*n).toString(),this.heightFromWidth=this.height)}}},Fn,[],!1,null,null,null).exports;var Un=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["quiz-container",t.addClass]},[n("transition",{attrs:{name:"intro-outro-card"},on:{"after-leave":t.showFirstQuestion}},[3===t.state?n("div",{staticClass:"card intro-outro-card"},[n("div",{staticClass:"card-body"},[t._t("intro",(function(){return[n("h4",[t._v("\n Click start to begin\n ")])]})),t._v(" "),n("h5",[t._v(t._s(t.questions.length)+" questions")]),t._v(" "),n("hr"),t._v(" "),n("button",{staticClass:"btn btn-primary d-inline-block",attrs:{type:"button"},on:{click:t.begin}},[t._v("\n Start\n ")])],2)]):t._e()]),t._v(" "),n("transition",{attrs:{name:"intro-outro-card"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:4===t.state,expression:"state === 4"}],staticClass:"progress intro-outro-card",staticStyle:{height:"1px"}},[n("div",{staticClass:"progress-bar progress-bar-z",style:{width:t.currentQuestion/t.questions.length*100+"%"},attrs:{role:"progressbar","aria-valuemin":"0","aria-valuemax":t.questions.length,"aria-valuenow":t.currentQuestion}})])]),t._v(" "),t._t("default"),t._v(" "),n("transition",{attrs:{name:"intro-outro-card"},on:{"after-enter":t.setScoreCircleStyles,"after-leave":t.showFirstQuestion}},[5===t.state?n("div",{staticClass:"card intro-outro-card"},[n("div",{staticClass:"card-body"},[n("h4",{staticClass:"mb-3"},[t._v("\n "+t._s(t.scoreText)+"\n ")]),t._v(" "),n("svg",{attrs:{viewBox:"0 0 100 100",width:"120px",height:"120px"}},[n("circle",{staticClass:"score-background-circle",attrs:{cx:"50",cy:"50",r:"42"}}),t._v(" "),n("circle",{ref:"score",staticClass:"score-circle",attrs:{cx:"50",cy:"50",r:"42",transform:"rotate(-90, 50, 50)","stroke-dashoffset":"264"}}),t._v(" "),n("text",{staticClass:"score",attrs:{x:"22",y:"57",textLength:"56"}},[t._v(t._s(t.score)+" / "+t._s(t.questions.length))])]),t._v(" "),n("hr"),t._v(" "),n("button",{staticClass:"btn btn-outline-primary",attrs:{type:"button"},on:{click:t.begin}},[t._v("\n Retry\n ")])])]):t._e()])],2)};Un._withStripped=!0;const Qn=qe({name:"Quiz",props:{addClass:{type:String,default:null}},data:function(){return{currentQuestion:0,questions:[],score:0,state:3}},provide:function(){return{questions:this.questions,gotoNextQuestion:this.gotoNextQuestion,showNextQuestion:this.showNextQuestion}},computed:{scoreText:function(){return this.score/this.questions.length>.5?"Well done!":"Try again?"}},methods:{gotoNextQuestion:function(){this.questions[this.currentQuestion-1].hide(),this.currentQuestion+=1},showNextQuestion:function(){this.currentQuestion<=this.questions.length?this.questions[this.currentQuestion-1].show():this.complete()},begin:function(){this.currentQuestion=1,this.score=0,this.state=4},showFirstQuestion:function(){this.questions.length&&this.questions[0].show()},reset:function(){this.questions.forEach((function(t){return t.reset()}))},complete:function(){this.score=this.questions.filter((function(t){return 2===t.qState.state})).length,this.state=5,this.reset()},setScoreCircleStyles:function(){var t=this.score/this.questions.length;this.$refs.score.style.strokeDashoffset=264*(1-t),this.$refs.score.style.stroke="#51c2f8"}}},Un,[],!1,null,"2b2275c0",null).exports;var Xn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{name:t.questions?"question":null},on:{"after-leave":t.showNextQuestion}},[t.active?n("div",{class:["card","question",t.shakeClass,t.addClass]},[t.$scopedSlots.header?n("div",{staticClass:"card-header alert-light border-bottom border-light text-dark"},[t._t("header")],2):t._e(),t._v(" "),n("div",{staticClass:"card-body"},[t._t("default"),t._v(" "),t.isTextQuestion()?n("div",{staticClass:"mb-2"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.textareaText,expression:"textareaText"}],staticClass:"form-control",attrs:{disabled:t.qState.answered},domProps:{value:t.textareaText},on:{input:function(e){e.target.composing||(t.textareaText=e.target.value)}}}),t._v(" "),t.qState.answered?n("div",[n("hr"),t._v(" "),t.keywordsSplitTrimmed().length?n("strong",[t._v("\n Keywords: \n "),t._l(t.keywordsSplitTrimmed(),(function(e){return n("span",{key:e,staticClass:"badge rounded-pill bg-light text-dark fw-normal"},[t._v("\n "+t._s(e)+"\n ")])}))],2):t._e()]):t._e()]):t._e(),t._v(" "),t.qState.answered&&t.isTextQuestion()?n("div",{staticClass:"answer"},[t._t("answer")],2):t._e(),t._v(" "),t.showHint?n("box",{staticClass:"mb-0 mt-3",attrs:{type:"tip"}},[t._t("hint")],2):t._e()],2),t._v(" "),t.showCardFooter?n("div",{staticClass:"card-footer alert-light border-top border-light text-dark"},[1===t.qState.state?n("i",{staticClass:"fa fa-times text-danger border-danger result-icon"}):2===t.qState.state?n("i",{staticClass:"fa fa-check text-success border-success result-icon"}):t._e(),t._v(" "),n("transition-group",{staticClass:"float-end",attrs:{name:"q-btn",tag:"div"}},[t.$scopedSlots.hint&&!t.showHint?n("button",{key:"hint",staticClass:"btn btn-success q-btn ms-1",attrs:{type:"button"},on:{click:function(e){t.showHint=!0}}},[t._v("\n Hint\n ")]):t._e(),t._v(" "),0!==t.qState.state||t.isTextWithoutKeywords()&&!t.$scopedSlots.answer?t._e():n("button",{key:"check",staticClass:"btn btn-primary q-btn ms-1",attrs:{type:"button"},on:{click:function(e){return t.checkAnswer(!!t.questions)}}},[t._v("\n Check\n ")]),t._v(" "),0!==t.qState.state&&t.questions?n("button",{key:"active",staticClass:"btn btn-primary q-btn ms-1",attrs:{type:"button"},on:{"~click":function(e){return t.gotoNextQuestion.apply(null,arguments)}}},[t._v("\n Next\n ")]):t._e(),t._v(" "),t.retryState?n("button",{key:"show",staticClass:"btn btn-info q-btn ms-1",attrs:{type:"button"},on:{click:function(e){return t.checkAnswer(!0)}}},[t._v("\n Show\n ")]):t._e(),t._v(" "),t.retryState?n("button",{key:"retry",staticClass:"btn btn-primary q-btn ms-1",attrs:{type:"button"},on:{click:function(e){return t.checkAnswer(!1)}}},[t._v("\n Retry\n ")]):t._e()])],1):t._e()]):t._e()])};Xn._withStripped=!0;function Yn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Gn(t){for(var e=1;e=this.threshold?this.markAsCorrect():this.markAsWrong(t)},checkTextAnswer:function(t){for(var e=this.textareaText.toLowerCase(),n=this.keywordsSplitTrimmed(),i=0,o=0;o=this.threshold?this.markAsCorrect():this.markAsWrong(t)},checkAnswer:function(t){"mcq"===this.type?this.checkMcqAnswer(t):"checkbox"===this.type?this.checkCheckboxAnswer(t):"blanks"===this.type?this.checkBlanksAnswer(t):this.isTextQuestion()?this.checkTextAnswer(t):this.markAsCorrect()}}},Xn,[],!1,null,"ae369d74",null).exports;var Zn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return"mcq"===t.qOptionType?n("div",{class:["form-control",t.hintClass],on:{click:t.toggleRadioOn,mouseover:function(e){t.hover=!0},mouseleave:function(e){t.hover=!1}}},[n("div",{class:["row",{disabled:t.qState.answered}]},[n("div",{staticClass:"col-auto p-0"},[n("svg",{staticClass:"radio-svg",attrs:{viewBox:"0 0 100 100"}},[n("circle",{attrs:{cx:"50",cy:"50",r:"47",fill:"none",stroke:"black","stroke-width":"4"}}),t._v(" "),n("circle",{directives:[{name:"show",rawName:"v-show",value:t.selected,expression:"selected"}],attrs:{cx:"50",cy:"50",r:"25",fill:"dodgerblue"}})])]),t._v(" "),n("div",{staticClass:"col content"},[t._t("default")],2),t._v(" "),n("div",{staticClass:"col-1"},[t.qState.answered?n("div",[t.correct?n("i",{staticClass:"fa fa-check text-success",class:{"align-bottom":t.$scopedSlots.reason}}):n("i",{staticClass:"fa fa-times text-danger",class:{"align-bottom":t.$scopedSlots.reason}})]):t._e()])]),t._v(" "),t.qState.answered&&t.$scopedSlots.reason?n("div",[n("hr"),t._v(" "),n("div",{staticClass:"reason"},[t._t("reason")],2)]):t._e()]):"checkbox"===t.qOptionType?n("div",{class:["form-control",t.hintClass],on:{click:t.toggleCheckbox,mouseover:function(e){t.hover=!0},mouseleave:function(e){t.hover=!1}}},[n("label",{class:["row","checkbox-label","m-0",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.selected,expression:"selected"}],staticClass:"checkbox",attrs:{disabled:t.qState.answered,type:"checkbox",onclick:"event.stopPropagation()"},domProps:{checked:Array.isArray(t.selected)?t._i(t.selected,null)>-1:t.selected},on:{change:function(e){var n=t.selected,i=e.target,o=!!i.checked;if(Array.isArray(n)){var r=t._i(n,null);i.checked?r<0&&(t.selected=n.concat([null])):r>-1&&(t.selected=n.slice(0,r).concat(n.slice(r+1)))}else t.selected=o}}}),t._v(" "),n("div",{staticClass:"col content"},[t._t("default")],2),t._v(" "),n("div",{staticClass:"col-auto"},[t.qState.answered?n("div",[t.correct?n("i",{staticClass:"fa fa-check text-success",class:{"align-bottom":t.$scopedSlots.reason}}):n("i",{staticClass:"fa fa-times text-danger",class:{"align-bottom":t.$scopedSlots.reason}})]):t._e()])]),t._v(" "),t.qState.answered&&t.$scopedSlots.reason?n("div",[n("hr"),t._v(" "),n("div",{staticClass:"reason"},[t._t("reason")],2)]):t._e()]):"blanks"===t.qOptionType?n("div",{class:["form-control","blanks-form-control",t.hintClass]},[n("label",{class:["row","m-0",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.inputText,expression:"inputText"}],staticClass:"form-control",attrs:{disabled:t.qState.answered},domProps:{value:t.inputText},on:{input:function(e){e.target.composing||(t.inputText=e.target.value)}}}),t._v(" "),n("div",{staticClass:"col-auto"},[t.qState.answered?n("div",[t.ansIsCorrect?n("i",{staticClass:"fa fa-check text-success"}):n("i",{staticClass:"fa fa-times text-danger blanks-cross"})]):t._e(),t._v(" "),t.isIntermediateResult()?n("div",[t.ansIsCorrect?n("i",{staticClass:"fa fa-check text-success"}):n("i",{staticClass:"fa fa-times text-danger blanks-cross"})]):t._e()]),t._v(" "),t.qState.answered?n("div",{staticClass:"col-auto blanks-keywords"},[t.keywordsSplitTrimmed().length?n("strong",[t._v("\n Keywords: \n "),t._l(t.keywordsSplitTrimmed(),(function(e){return n("span",{key:e,staticClass:"badge rounded-pill bg-light text-dark fw-normal"},[t._v("\n "+t._s(e)+"\n ")])}))],2):n("strong",[t._v("No answer checking keywords provided")])]):t._e()]),t._v(" "),t.qState.answered&&t.$scopedSlots.reason?n("div",[n("div",{staticClass:"reason blanks-reason"},[t._t("reason")],2)]):t._e()]):t._e()};Zn._withStripped=!0;const Jn=qe({name:"McqOption",props:{correct:{type:Boolean,default:!1},keywords:{type:String,default:""}},data:function(){return{selected:!1,hover:!1,inputText:"",ansIsCorrect:!1}},inject:{answers:{default:void 0},qOptionType:{default:void 0},qState:{default:void 0},noIntermediateResult:{default:void 0}},computed:{hintClass:function(){return this.qState.answered?this.correct?"success":"danger":this.selected||this.hover?"alert-light text-dark border border-secondary":""},answeredCorrectly:function(){return this.correct&&this.selected||!this.correct&&!this.selected}},methods:{checkAnswer:function(){var t=!1,e=this.inputText.toLowerCase().trim(),n=this.keywords.toLowerCase().split(",").filter((function(t){return""!==t.trim()}));this.keywords.length||(t=!0);for(var i=0;i=0;r-=1)o="".concat(o.slice(0,i[r].start),"")+"".concat(o.slice(i[r].start,i[r].end),"")+"".concat(o.slice(i[r].end));return o}}},ni,[],!1,null,"98afe086",null).exports;const oi=qe({created:function(){this.items=this.primitiveData},props:{data:{type:Array,default:function(){return[]}},limit:{type:Number,default:8},async:{type:String,default:""},keyProp:{type:String,default:null},onHit:{type:Function,default:function(t){this.reset(),this.value=t}},placeholder:{type:String,default:"Search"},delay:{type:Number,default:200},menuAlignRight:{type:Boolean,default:!1},algolia:{type:Boolean,default:!1}},data:function(){return{value:"",showDropdown:!1,noResults:!0,current:0,items:[]}},computed:{primitiveData:function(){function t(t,e){var n=t.join(" ");return e.reduce((function(t,e){var i=n.match(e);return t+(i?i.length:0)}),0)}if(this.value.length<2||!this.data)return[];var e=[],n=this.value.split(" ").filter((function(t){return""!==t})).map((function(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})).map((function(t){return new RegExp(t,"ig")}));return this.data.forEach((function(i){var o=i.headings,r=i.src,s=i.title,a=i.headingKeywords,l=i.frontmatterKeywords||"",c=s||r.substring(0,r.lastIndexOf(".")),u=t([c,l].concat(_n(Object.values(o)),_n(Object.values(a))),n);if(u>0){var d=[];Object.entries(o).forEach((function(e,i){var o=ei(e,2),s=o[0],u=o[1],h=n.some((function(t){return t.test(u)})),p=a[s]&&a[s].some((function(t){return n.some((function(e){return e.test(t)}))}));if(h||p){var f=t([u].concat(_n(a[s]||[])),n);(0!==i||u!==c||l.length)&&d.push({heading:{id:s,text:u},keywords:a[s],src:r,totalMatches:f})}})),d.sort((function(t,e){return e.totalMatches-t.totalMatches})),e.push({headings:d,keywords:l,src:r,title:c,totalMatches:u})}})),e.sort((function(t,e){return e.totalMatches-t.totalMatches})).flatMap((function(t){return t.headings?[t].concat(_n(t.headings)):t}))},dropdownMenuClasses:function(){return["dropdown-menu","search-dropdown-menu",{show:this.showDropdown},{"d-none":!this.showDropdown},{"dropdown-menu-end":this.menuAlignRight}]}},methods:{update:function(){return this.value?(this.data&&(this.items=this.primitiveData,this.showDropdown=this.items.length>0),this.async&&this.query(),!0):(this.reset(),!1)},query:function(t,e){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100;function o(t){return/^[0-9]+$/.test(t)?Number(t)||1:null}return function(){for(var r=this,s=arguments.length,a=new Array(s),l=0;l0&&(this.current-=1,this.scrollListView())},scrollListView:function(){var t=this.$refs.dropdown,e=t.children[this.current],n=t.scrollTop,i=n+t.clientHeight,o=e.offsetTop+e.offsetHeight;e.offsetTopi&&(t.scrollTop=o-t.clientHeight)}},components:{searchbarPageItem:ii}},ti,[],!1,null,"cea1a814",null).exports;var ri=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"tab-pane active printable-tab-pane",class:{"tab-pane-hide":!this.show},attrs:{role:"tabpanel"}},[e("div",{staticClass:"nav-tabs printable-tab-header"},[e("div",{ref:"header",staticClass:"nav-link active"},[this._t("header")],2)]),this._v(" "),this._t("default"),this._v(" "),e("hr")],2)};ri._withStripped=!0;const si=qe({props:{header:{type:String,default:""},disabled:{type:[Boolean,String],default:!1}},computed:{headerRendered:function(){return this.$refs.header.innerHTML},active:function(){return this._tabset.show===this},index:function(){return this._tabset.tabs.indexOf(this)},show:function(){return this._tabset&&this._tabset.show===this},disabledBool:function(){return Re(this.disabled)}},created:function(){this._ingroup=this.$parent&&this.$parent._tabgroup;for(var t=this;t&&!0!==t._tabset&&t.$parent;)t=t.$parent;t._tabset?(t.tabs.push(this),this._ingroup?~t.headers.indexOf(this.$parent)||t.headers.push(this.$parent):t.headers.push(this),this._tabset=t):this._tabset={},this._ingroup&&this.$parent.tabs.push(this)},beforeDestroy:function(){if(this._tabset.activeNumber===this.index&&(this._tabset.activeNumber=0),this._ingroup){var t=this.$parent.tabs.indexOf(this);this.$parent.tabs.splice(t,1)}this._tabset.tabs.splice(this.index,1)}},ri,[],!1,null,"661c1b61",null).exports;var ai=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"printable-tab-group"},[e("div",{ref:"header",staticClass:"printable-tab-group-header"},[this._t("header")],2),this._v(" "),this._t("default")],2)};ai._withStripped=!0;const li=qe({props:{disabled:{type:[Boolean,String],default:!1},header:{type:String,default:""}},data:function(){return{tabs:[],show:!1}},computed:{active:function(){return~this.tabs.indexOf(this._tabset.show)},headerRendered:function(){return this.$refs.header.innerHTML},disabledBool:function(){return De(this.disabled)}},created:function(){this._tabgroup=!0;for(var t=this.$parent&&!0===this.$parent._tabset?this.$parent:{};t&&!t._tabset&&t.$parent;)t=t.$parent;t._tabset?this._tabset=t:(this._tabset={},this.show=!0)},methods:{blur:function(){this.show=!1},toggle:function(){this.show=!this.show}}},ai,[],!1,null,"a785351c",null).exports;var ci=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:[t.addClass,"printable-tabs"]},[n("ul",{staticClass:"nav nav-tabs d-print-none",class:t.getNavStyleClass,attrs:{role:"tablist"}},[t._l(t.headers,(function(e,i){return[e._tabgroup?n("dropdown",{key:i,staticClass:"nav-item",class:{active:e.active},attrs:{"tab-group-header":e.headerRendered,disabled:e.disabled}},t._l(e.tabs,(function(e,i){return n("li",{key:i},[n("a",{staticClass:"nav-link",class:{disabled:e.disabled},attrs:{href:"#"},domProps:{innerHTML:t._s(e.headerRendered)},on:{click:function(n){return n.preventDefault(),t.select(e)}}})])})),0):n("li",{key:i,staticClass:"nav-item",on:{click:function(n){return n.preventDefault(),t.select(e)}}},[n("a",{staticClass:"nav-link",class:{active:e.active,disabled:e.disabledBool},attrs:{href:"#"}},[n("span",{domProps:{innerHTML:t._s(e.headerRendered)}})])])]}))],2),t._v(" "),n("div",{ref:"tab-content",staticClass:"tab-content"},[t._t("default")],2)])};ci._withStripped=!0;const ui=qe({components:{dropdown:gn},props:{navStyle:{type:String,default:"tabs"},active:{type:String,default:"0"},addClass:{type:String,default:""}},data:function(){return{show:null,headers:[],activeNumber:je(this.active),tabs:[]}},created:function(){this._tabset=!0},computed:{getNavStyleClass:function(){return"nav-".concat(this.navStyle)}},watch:{activeNumber:function(t){this.show=this.tabs[t]}},mounted:function(){this.show=this.tabs[this.activeNumber]},methods:{select:function(t){t.disabled||(this.activeNumber=t.index)}}},ci,[],!1,null,"05434e42",null).exports;var di=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:["thumb-wrapper",{"thumb-circle":t.circle},t.addClass],style:[t.getBorder,t.getFontSize,t.getFontColor,t.getBgColor]},[t.hasSrc?n("img",{ref:"pic",staticClass:"thumb-image",attrs:{src:t.src,width:t.computedWidth,height:t.computedHeight,alt:t.alt},on:{"~load":function(e){return t.computeImgSize.apply(null,arguments)}}}):t._e(),t._v(" "),t._t("default")],2)};di._withStripped=!0;const hi=qe({props:{circle:{type:Boolean,default:!1},addClass:{type:String,default:""},alt:{type:String,default:""},background:{type:String,default:""},border:{type:String,default:""},fontColor:{type:String,default:""},fontSize:{type:String,default:""},size:{type:String,default:""},src:{type:String,default:null},text:{type:String,default:""}},computed:{getBorder:function(){return""===this.border?{}:{border:this.border}},getFontSize:function(){var t=this.imageSize/2,e=this.fontSize;return{"font-size":"".concat(void 0===e||""===e?t:e,"px")}},getFontColor:function(){return""===this.fontColor?{}:{color:this.fontColor}},getBgColor:function(){return""===this.background?{}:{background:this.background}},hasSrc:function(){return void 0!==this.src&&""!==this.src},imageSize:function(){return this.size||100}},data:function(){return{computedWidth:"",computedHeight:""}},mounted:function(){var t=this.$el;t.style.width="".concat(this.imageSize,"px"),t.style.height="".concat(this.imageSize,"px"),t.style.lineHeight="".concat(this.imageSize,"px")},methods:{computeImgSize:function(){var t=this.$refs.pic,e=t.naturalHeight,n=t.naturalWidth,i=Math.min(e,n),o=this.imageSize/i;this.computedWidth=n*o,this.computedHeight=e*o}}},di,[],!1,null,null,null).exports;var pi=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:"click"===t.trigger?"trigger-click":"trigger",attrs:{tabindex:"0"},on:t._d({},[t.triggerEventType,function(e){return e.stopPropagation(),t.toggle()}])},["popover"===t.popoverOrTooltipType?n("v-popover",{attrs:{"auto-hide":!t.isInput,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,placement:t.placement,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[n("div",{staticClass:"popover-container"},[n("portal-target",{attrs:{name:"popover:"+t.target}})],1)]},proxy:!0}],null,!1,1583262462)},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):"tooltip"===t.popoverOrTooltipType?n("v-tooltip",{attrs:{"auto-hide":!t.isInput,placement:t.placement,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[n("portal-target",{attrs:{name:"tooltip:"+t.target}})]},proxy:!0}])},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):n("span",[t._t("default")],2)],1)};pi._withStripped=!0;var fi=i(383);function mi(t){return(mi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function vi(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,i=new Array(e);n1),Mi=[],Hi=!1,Di=0,Ri=-1,ji=function(t){return Mi.some((function(){return function(t,e){var n=!1;return function(t){for(var e=[];t;){if(e.push(t),t.classList.contains("vfm"))return e;t=t.parentElement}return e}(t).forEach((function(t){(function(t){if(!t||t.nodeType!==Node.ELEMENT_NODE)return!1;var e=window.getComputedStyle(t);return["auto","scroll"].includes(e.overflowY)&&t.scrollHeight>t.clientHeight})(t)&&function(t,e){return!(0===t.scrollTop&&e<0||t.scrollTop+t.clientHeight+e>=t.scrollHeight&&e>0)}(t,e)&&(n=!0)})),n}(t,-Di)}))},Ii=function(t){var e=t||window.event;return!!ji(e.target)||e.touches.length>1||(e.preventDefault&&e.preventDefault(),!1)},qi=function(t){t?(Mi=Mi.filter((function(e){return e.targetElement!==t})),zi?(t.ontouchstart=null,t.ontouchmove=null,Hi&&0===Mi.length&&(document.removeEventListener("touchmove",Ii,Bi?{passive:!1}:void 0),Hi=!1)):Mi.length||(void 0!==Ni&&(document.body.style.paddingRight=Ni,Ni=void 0),void 0!==Li&&(document.body.style.overflow=Li,Li=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},Wi=function(){},Fi="enter",Vi="entering",Ui="leave",Qi="leavng",Xi={type:[String,Object,Array],default:""},Yi={type:[Object,Array],default:function(){return{}}},Gi={t:"ns-resize",tr:"nesw-resize",r:"ew-resize",br:"nwse-resize",b:"ns-resize",bl:"nesw-resize",l:"ew-resize",tl:"nwse-resize"},Ki={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:Xi,overlayClass:Xi,contentClass:Xi,styles:Yi,overlayStyle:Yi,contentStyle:Yi,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var e=mi(t);return"boolean"===e||"string"===e||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:""},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return["t","tr","r","br","b","bl","l","tl"]},validator:function(t){return["t","tr","r","br","b","bl","l","tl"].filter((function(e){return-1!==t.indexOf(e)})).length===t.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:Wi,rejectToggle:Wi,state:null,lastMousedownEl:null}},computed:{isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===Ui)&&this.modalTransitionState===Ui},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return wi({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},bindContentStyle:function(){var t=[this.dragResizeStyle];return Array.isArray(this.contentStyle)?t.push.apply(t,bi(this.contentStyle)):t.push(this.contentStyle),t},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:wi({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:wi({},this.overlayTransition)}},watch:{value:function(t){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!t){if(this.emitEvent("before-close",!0))return void this.rejectToggle("hide");this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(t){this.value&&!t&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(t){t&&(this.visible=!1)},drag:function(t){this.visible&&(t?this.addDragDown():this.removeDragDown())},resize:function(t){this.visible&&(t?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(t){t||(this.dragResizeStyle={})}},mounted:function(){this.api.modals.push(this),this.$focusTrap=new xi,this.mounted()},beforeDestroy:function(){var t,e=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&qi(this.$refs.vfmContainer),null==this||null===(t=this.$el)||void 0===t||t.remove();var n=this.api.modals.findIndex((function(t){return t===e}));this.api.modals.splice(n,1)},methods:{mounted:function(){var t=this;if(this.value){if(this.emitEvent("before-open",!1))return void this.rejectToggle("show");var e=this.getAttachElement();if(e||!1===this.attach){!1!==this.attach&&e.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(e){return e===t}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(e){return e!==t})).forEach((function(t,n){t.getAttachElement()===e&&(t.modalStackIndex=n,t.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){t.startTransitionEnter()}))}else!1!==e&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var t=this,e=this.api.openedModals.findIndex((function(e){return e===t}));if(-1!==e&&this.api.openedModals.splice(e,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.drag&&this.removeDragDown(),this.resize&&this.removeResizeDown(),this.state=null,this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var t=this;this.value&&this.$nextTick((function(){t.lockScroll?function(t,e){if(t){if(!Mi.some((function(e){return e.targetElement===t}))){var n={targetElement:t,options:e||{}};Mi=[].concat(bi(Mi),[n]),zi?(t.ontouchstart=function(t){1===t.targetTouches.length&&(Ri=t.targetTouches[0].clientY)},t.ontouchmove=function(e){1===e.targetTouches.length&&function(t,e){Di=t.targetTouches[0].clientY-Ri,!ji(t.target)&&(e&&0===e.scrollTop&&Di>0||function(t){return!!t&&t.scrollHeight-t.scrollTop<=t.clientHeight}(e)&&Di<0?Ii(t):t.stopPropagation())}(e,t)},Hi||(document.addEventListener("touchmove",Ii,Bi?{passive:!1}:void 0),Hi=!0)):function(t){if(void 0===Ni){var e=!!t&&!0===t.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(e&&n>0){var i=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);Ni=document.body.style.paddingRight,document.body.style.paddingRight="".concat(i+n,"px")}}void 0===Li&&(Li=document.body.style.overflow,document.body.style.overflow="hidden")}(e)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")}(t.$refs.vfmContainer,{reserveScrollBarGap:!0}):qi(t.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=Vi},afterOverlayEnter:function(){this.overlayTransitionState=Fi},beforeOverlayLeave:function(){this.overlayTransitionState=Qi},afterOverlayLeave:function(){this.overlayTransitionState=Ui},beforeModalEnter:function(){this.modalTransitionState=Vi},afterModalEnter:function(){this.modalTransitionState=Fi,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.drag&&this.addDragDown(),this.resize&&this.addResizeDown(),this.$emit("opened",this.createModalEvent({type:"opened"})),this.resolveToggle("show")},beforeModalLeave:function(){this.modalTransitionState=Qi,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=Ui,this.modalStackIndex=null,this.lockScroll&&qi(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle={});var t=!1,e=this.createModalEvent({type:"closed",stop:function(){t=!0}});this.$emit("closed",e),this.resolveToggle("hide"),t||(this.params={})},onMousedown:function(t){this.lastMousedownEl=null==t?void 0:t.target},onMouseupContainer:function(){this.lastMousedownEl===this.$refs.vfmContainer&&"resize:move"!==this.state&&(this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1))},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return wi({ref:this},t)},emitEvent:function(t,e){var n=!1,i=this.createModalEvent({type:t,stop:function(){n=!0}});return this.$emit(t,i),!!n&&(this.stopEvent=!0,this.$emit("input",e),!0)},emitState:function(t,e,n){this.state="".concat(e,":").concat(n),this.$emit(this.state,t)},toggle:function(t,e){var n=arguments,i=this;return new Promise((function(o,r){i.resolveToggle=function(t){o(t),i.resolveToggle=Wi},i.rejectToggle=function(t){r(t),i.rejectToggle=Wi};var s="boolean"==typeof t?t:!i.value;s&&2===n.length&&(i.params=e),i.$emit("input",s)}))},pointerDown:function(t){var e=this;t.stopPropagation();var n,i="resize",o="drag",r=this.$refs,s=r.vfmContainer,a=r.vfmContent,l=t.target.getAttribute("direction");if(l)n=i;else{if(!function(t,e,n){return""===n||bi(e.querySelectorAll(n)).includes(t.target)}(t,a,this.dragSelector))return;n=o}this.emitState(t,n,"start");var c,u,d,h,p=Ci(t),f=s.getBoundingClientRect(),m=a.getBoundingClientRect(),v="absolute"===window.getComputedStyle(a).position,g=ki(this.dragResizeStyle.top),y=ki(this.dragResizeStyle.left),w=function(){if(e.fitParent){var t={absolute:function(){return{minTop:0,minLeft:0,maxTop:f.height-m.height,maxLeft:f.width-m.width}},relative:function(){return{minTop:g+f.top-m.top,minLeft:y+f.left-m.left,maxTop:g+f.bottom-m.bottom,maxLeft:y+f.right-m.right}}};return v?t.absolute():t.relative()}return{}}(),b=n===i&&(c=document.body,u="cursor",d=Gi[l],h=c.style[u],c.style[u]=d,function(){c.style[u]=h}),_=function(t){t.stopPropagation(),e.emitState(t,n,"move");var r,s,a=Ci(t),c={x:a.x-p.x,y:a.y-p.y};n===i&&(c=e.getResizeOffset(l,c,f,m,v)),v?(r=m.top-f.top+c.y,s=m.left-f.left+c.x):(r=g+c.y,s=y+c.x),n===o&&e.fitParent&&(r=$i(w.minTop,r,w.maxTop),s=$i(w.minLeft,s,w.maxLeft));var u=wi(wi(wi({position:"relative",top:r+"px",left:s+"px",margin:"unset",touchAction:"none"},v&&{position:"absolute",transform:"unset",width:m.width+"px",height:m.height+"px"}),c.width&&{width:c.width+"px"}),c.height&&{height:c.height+"px"});e.dragResizeStyle=wi(wi({},e.dragResizeStyle),u)};Ei("move",document,_),Ei("up",document,(function t(o){o.stopPropagation(),n===i&&b&&b(),setTimeout((function(){e.emitState(o,n,"end")})),Oi("move",document,_),Oi("up",document,t)}))},addDragDown:function(){Ei("down",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction="none"},removeDragDown:function(){Oi("down",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var t=this;this.visibility.resize=!0,this.$nextTick((function(){Ei("down",t.$refs.vfmResize,t.pointerDown)}))},removeResizeDown:function(){Oi("down",this.$refs.vfmResize,this.pointerDown),this.visibility.resize=!1},getResizeOffset:function(t,e,n,i,o){var r=this,s=function(t,e,o,s){var a,l=i[e],c=n[t]-i[t],u=(a=e).charAt(0).toUpperCase()+a.slice(1);return{axis:o,edgeName:e,min:s?c:-l,max:s?l:c,minEdge:r["min".concat(u)],maxEdge:r["max".concat(u)],getEdge:function(t){return i[e]-t*(s?1:-1)},getOffsetAxis:function(t,n){var o=i[e]-t;return n?s?o:0:(s?1:-1)*o/2}}},a={t:["top","height","y",!0],b:["bottom","height","y",!1],l:["left","width","x",!0],r:["right","width","x",!1]},l={x:0,y:0};return t.split("").forEach((function(t){var n=s.apply(void 0,bi(a[t]));l=wi(wi({},l),function(t){var n,i=e[t.axis];i=r.fitParent?$i(t.min,i,t.max):i;var s=$i(t.minEdge,t.getEdge(i),t.maxEdge);return i=t.getOffsetAxis(s,o),gi(n={},t.edgeName,s),gi(n,t.axis,i),n}(n))})),l}}},Zi=function(t,e,n,i,o,r,s,a,l,c){"boolean"!=typeof s&&(l=a,a=s,s=!1);var u,d="function"==typeof n?n.options:n;if(t&&t.render&&(d.render=t.render,d.staticRenderFns=t.staticRenderFns,d._compiled=!0,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(u=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,l(t)),t&&t._registeredComponents&&t._registeredComponents.add(r)},d._ssrRegister=u):e&&(u=s?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h=d.render;d.render=function(t,e){return u.call(e),h(t,e)}}else{var p=d.beforeCreate;d.beforeCreate=p?[].concat(p,u):[u]}return n},Ji="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase()),to={},eo=Zi({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.ssr||t.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!t.ssr||t.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===t.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":t.preventClick}],style:t.bindStyle,on:{keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"])?null:t.onEsc.apply(null,arguments)}}},[n("transition",t._b({ref:"vfmOverlayTransition",on:{"before-enter":t.beforeOverlayEnter,"after-enter":t.afterOverlayEnter,"before-leave":t.beforeOverlayLeave,"after-leave":t.afterOverlayLeave}},"transition",t.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!t.hideOverlay&&t.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:t.overlayClass,style:t.overlayStyle})]),t._v(" "),n("transition",t._b({ref:"vfmTransition",on:{"before-enter":t.beforeModalEnter,"after-enter":t.afterModalEnter,"before-leave":t.beforeModalLeave,"after-leave":t.afterModalLeave}},"transition",t.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:t.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:t.classes,style:t.styles,attrs:{"aria-expanded":t.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{mouseup:function(e){return e.target!==e.currentTarget?null:t.onMouseupContainer.apply(null,arguments)},mousedown:function(e){return e.target!==e.currentTarget?null:t.onMousedown.apply(null,arguments)}}},[n("div",{ref:"vfmContent",staticClass:"vfm__content",class:[t.contentClass,{"vfm--prevent-auto":t.preventClick}],style:t.bindContentStyle,on:{mousedown:function(e){return t.onMousedown(null)}}},[t._t("default",null,{params:t.params,close:function(){return t.$emit("input",!1)}}),t._v(" "),t.visibility.resize&&t.visibility.modal?n("div",{ref:"vfmResize",staticClass:"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none"},t._l(t.resizeDirections,(function(t){return n("div",{key:t,staticClass:"vfm--absolute vfm--prevent-auto",class:"vfm--resize-"+t,attrs:{direction:t}})})),0):t._e()],2)])])],1):t._e()},staticRenderFns:[]},(function(t){t&&t("data-v-1cd72822_0",{source:".vfm--fixed[data-v-1cd72822]{position:fixed}.vfm--absolute[data-v-1cd72822]{position:absolute}.vfm--inset[data-v-1cd72822]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-1cd72822]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-1cd72822]{pointer-events:none}.vfm--prevent-auto[data-v-1cd72822]{pointer-events:auto}.vfm--outline-none[data-v-1cd72822]:focus{outline:0}.vfm-enter-active[data-v-1cd72822],.vfm-leave-active[data-v-1cd72822]{transition:opacity .2s}.vfm-enter[data-v-1cd72822],.vfm-leave-to[data-v-1cd72822]{opacity:0}.vfm--touch-none[data-v-1cd72822]{touch-action:none}.vfm--select-none[data-v-1cd72822]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-1cd72822],.vfm--resize-br[data-v-1cd72822],.vfm--resize-tl[data-v-1cd72822],.vfm--resize-tr[data-v-1cd72822]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-1cd72822]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-1cd72822]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-1cd72822]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-1cd72822]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-1cd72822]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-1cd72822]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-1cd72822]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-1cd72822]{top:-6px;left:-6px;cursor:nwse-resize}",map:void 0,media:void 0})}),Ki,"data-v-1cd72822",!1,void 0,!1,(function(t){return function(t,e){return function(t,e){var n=Ji?e.media||"default":t,i=to[n]||(to[n]={ids:new Set,styles:[]});if(!i.ids.has(t)){i.ids.add(t);var o=e.source;if(e.map&&(o+="\n/*# sourceURL="+e.map.sources[0]+" */",o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(e.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",e.media&&i.element.setAttribute("media",e.media),void 0===Ai&&(Ai=document.head||document.getElementsByTagName("head")[0]),Ai.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(o),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var r=i.ids.size-1,s=document.createTextNode(o),a=i.element.childNodes;a[r]&&i.element.removeChild(a[r]),a.length?i.element.insertBefore(s,a[r]):i.element.appendChild(s)}}}(t,e)}}),void 0,void 0),no=Zi({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"modals-container"},t._l(t.api.dynamicModals,(function(e,i){return n(e.component,t._g(t._b({key:e.id,tag:"component",on:{closed:function(e){return t.slice(i)},"before-open":function(n){return t.beforeOpen(n,e,i)},opened:e.opened},scopedSlots:t._u([t._l(e.slots,(function(e,i){return{key:i,fn:function(){return[t.isString(e)?n("div",{key:i,domProps:{innerHTML:t._s(e)}}):n(e.component,t._g(t._b({key:i,tag:"component"},"component",e.bind,!1),e.on))]},proxy:!0}}))],null,!0),model:{value:e.value,callback:function(n){t.$set(e,"value",n)},expression:"modal.value"}},"component",e.bind,!1),e.on))})),1)},staticRenderFns:[]},void 0,{props:{},methods:{slice:function(t){this.api.dynamicModals.splice(t,1)},beforeOpen:function(t,e,n){var i=this;t.ref.params=e.params,this.$nextTick((function(){e.value||(i.slice(n),e.reject("show"))}))},isString:function(t){return"string"==typeof t}}},void 0,!1,void 0,!1,void 0,void 0,void 0);function io(t,e){var n=wi(wi({},t),{},{props:wi({},t.props)});return Object.assign(n.props,{api:{type:Object,default:function(){return e}}}),n}var oo=0,ro=function(){var t,e,n=(e=null,et().observable({show:function(t){for(var n=this,i=arguments.length,o=new Array(i>1?i-1:0),r=1;r1?e-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{},n=0===oo?so:ro(),i=n.$vfm,o=n.VueFinalModal,r=n.ModalsContainer;oo+=1;var s=e.key||"$vfm",a=e.componentName||"VueFinalModal",l=e.dynamicContainerName||"ModalsContainer";t.prototype[s]=i,t.component(a,o),t.component(l,r)}),uo=function(t){return{install:function(e,n){var i=Object.assign({},t,n);co(e,i)}}};uo.install=co;const ho=qe({name:"Trigger",components:{PortalTarget:fi.YC},props:{for:{type:String,default:""},trigger:{type:String,default:"hover focus"},placement:{type:String,default:"top"}},data:function(){return{popoverOrTooltipType:void 0,isInput:!1}},methods:{toggle:function(){this.for&&ao.show(this.for)}},computed:{triggerEventType:function(){return"click"===this.trigger||"focus"===this.trigger?this.trigger:"mouseenter"},triggers:function(){return this.trigger.split(" ")},target:function(){return this.for}},mounted:function(){if(this.isInput=this.$slots.default&&this.$slots.default.some((function(t){return"input"===t.tag})),this.for&&void 0===this.popoverOrTooltipType){var t=document.getElementById(this.for);if(!t)return;this.popoverOrTooltipType=t.dataset.mbComponentType}}},pi,[],!1,null,null,null).exports;var po=function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"site-nav-root"},[this._t("default")],2)};po._withStripped=!0;const fo=qe({name:"SiteNav",mounted:function(){var t=this,e=Sn(new URL(window.location.href).pathname);this.$el.querySelectorAll("a[href]").forEach((function(n){var i=Sn(n.getAttribute("href"));if(e===i){n.classList.add("current");for(var o=n.parentElement;o&&o!==t.$el;)"ul"===o.tagName.toLowerCase()&&o.classList.contains("site-nav-dropdown-container")&&o.classList.add("site-nav-dropdown-container-open"),o=o.parentElement}}))}},po,[],!1,null,null,null).exports;var mo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("span",{class:[{"nav-menu-close-icon":t.show}],on:{click:function(e){return t.toggleNavMenu(void 0)}}},[t._t("navMenuIcon")],2),t._v(" "),n("div",{ref:"navMenuContainer",class:["nav-menu",{"nav-menu-open":t.show}],style:t.navbarHeight,on:{click:t.toggleNavMenu}},[n("portal-target",{attrs:{name:t.portalName,multiple:""}})],1)])};mo._withStripped=!0;var vo={};const go=qe({components:{PortalTarget:fi.YC},props:{type:{type:String,default:null},portalName:{type:String,default:null}},inject:{toggleLowerNavbar:{default:void 0}},data:function(){return{show:!1,navbarHeight:""}},methods:{toggleNavMenu:function(t){var e,n=this;t&&"a"===t.target.tagName.toLowerCase()||!t&&this.show?(document.body.style.removeProperty("overflow"),this.show=!1):(vo[e="closeOverlay"]&&vo[e].forEach((function(t){return t()})),document.body.style.overflow="hidden",this.show=!0,this.$nextTick((function(){var t=n.$refs.navMenuContainer,e=window.innerHeight-t.getBoundingClientRect().top;n.navbarHeight="height: ".concat(e,"px")})))}},mounted:function(){var t,e,n=this;this.toggleLowerNavbar&&this.toggleLowerNavbar(),e=function(){n.show=!1},vo[t="closeOverlay"]||(vo[t]=[]),vo[t].push(e)}},mo,[],!1,null,"1a3e7aee",null).exports;var yo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(t.tagName,t._b({tag:"component"},"component",t.$attrs,!1),[t._t("default"),t._v(" "),t.enablePortal?n("portal",{attrs:{to:t.to}},[n(t.tagName,t._b({tag:"component",class:[t.$vnode.data.staticClass||"","mb-mobile-nav"],style:t.$vnode.data.staticStyle},"component",t.$attrs,!1),[t._t("default")],2)],1):t._e()],2)};yo._withStripped=!0;const wo=qe({name:"OverlaySource",components:{Portal:fi.h_},props:{to:{type:String,default:void 0},tagName:{type:String,default:void 0}},data:function(){return{enablePortal:!1}},mounted:function(){this.enablePortal=!0}},yo,[],!1,null,"e6005420",null).exports;var bo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:"click"===t.trigger?"trigger-click":"trigger",attrs:{"data-mb-component-type":"popover",tabindex:"0"}},[t.targetEl.id?n("portal",{attrs:{to:"popover:"+t.targetEl.id}},[t.hasHeader?n("h3",{staticClass:"popover-header"},[t._t("header")],2):t._e(),t._v(" "),n("div",{staticClass:"popover-body"},[t._t("content")],2)]):t._e(),t.isMounted?n("v-popover",{attrs:{"auto-hide":!t.isInput,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,placement:t.placement,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[n("div",{staticClass:"popover-container"},[t.hasHeader?n("h3",{staticClass:"popover-header"},[t._t("header")],2):t._e(),t._v(" "),n("div",{staticClass:"popover-body"},[t._t("content")],2)])]},proxy:!0}],null,!0)},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):t._e()],1)};bo._withStripped=!0;const _o=qe({name:"Popover",components:{Portal:fi.h_},props:{trigger:{type:String,default:"hover focus"},placement:{type:String,default:"top"}},data:function(){return{targetEl:{},isMounted:!1}},computed:{triggers:function(){return this.trigger.split(" ")},hasHeader:function(){return!!this.$slots.header}},mounted:function(){this.targetEl=this.$el,this.isInput=this.$slots.default&&this.$slots.default.some((function(t){return"input"===t.tag})),this.isMounted=!0}},bo,[],!1,null,null,null).exports;var So=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:"click"===t.trigger?"trigger-click":"trigger",attrs:{"data-mb-component-type":"tooltip",tabindex:"0"}},[t.targetEl.id?n("portal",{attrs:{to:"tooltip:"+t.targetEl.id}},[t._t("content")],2):t._e(),t.isMounted?n("v-tooltip",{attrs:{"auto-hide":!t.isInput,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,placement:t.placement,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[t._t("content")]},proxy:!0}],null,!0)},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):t._e()],1)};So._withStripped=!0;const xo=qe({name:"Tooltip",components:{Portal:fi.h_},props:{trigger:{type:String,default:"hover focus"},placement:{type:String,default:"top"}},data:function(){return{targetEl:{},isInput:!1,isMounted:!1}},computed:{triggers:function(){return this.trigger.split(" ")}},mounted:function(){this.targetEl=this.$el,this.isInput=this.$slots.default&&this.$slots.default.some((function(t){return"input"===t.tag})),this.isMounted=!0}},So,[],!1,null,null,null).exports;var Co=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isMounted?n("vue-final-modal",{attrs:{ssr:"",name:t.id,classes:["modal"],"content-class":["modal-dialog","modal-dialog-scrollable",t.optionalModalSize,t.optionalCentering],"overlay-transition":"none",transition:t.effectClass,"click-to-close":"false"!==t.backdrop,"esc-to-close":"","z-index-base":"2000"},model:{value:t.show,callback:function(e){t.show=e},expression:"show"}},[n("div",{staticClass:"modal-content"},[t.hasHeader?n("div",{staticClass:"modal-header"},[n("h5",{staticClass:"modal-title"},[t._t("header")],2),t._v(" "),n("button",{staticClass:"btn-close",attrs:{type:"button","aria-label":"Close"},on:{click:function(e){return t.close()}}})]):t._e(),t._v(" "),n("div",{staticClass:"modal-body"},[t._t("default")],2),t._v(" "),t.hasFooter||t.hasOk?n("div",{staticClass:"modal-footer"},[t.hasFooter?t._t("footer"):n("button",{staticClass:"btn btn-primary",on:{click:function(e){return t.close()}}},[t._v("\n "+t._s(t.okText)+"\n ")])],2):t._e()])]):t._e()};Co._withStripped=!0;const $o=qe({name:"Modal",components:{VueFinalModal:lo},data:function(){return{show:!1,isMounted:!1,zoomEffect:{"enter-class":"modal-zoom","enter-to-class":"modal-zoom-show","leave-to-class":"modal-zoom","leave-class":"modal-zoom-show"}}},props:{okText:{type:String,default:""},effect:{type:String,default:"zoom"},id:{type:String,default:""},small:{type:Boolean,default:!1},large:{type:Boolean,default:!1},center:{type:Boolean,default:!1},backdrop:{type:String,default:""}},computed:{hasHeader:function(){return!!this.$slots.header},hasFooter:function(){return!!this.$slots.footer},hasOk:function(){return""!==this.okText},optionalModalSize:function(){return this.small||this.large?this.small?"modal-sm":"modal-lg":""},optionalCentering:function(){return this.center?"modal-dialog-centered":""},effectClass:function(){return"zoom"===this.effect?this.zoomEffect:"vfm"}},methods:{close:function(){this.show=!1}},mounted:function(){this.isMounted=!0}},Co,[],!1,null,null,null).exports;var ko=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["scroll-top-button",t.getIconSize(),"d-print-none",{lighten:t.$data.isLighten}],style:t.iconStyle(),attrs:{"aria-hidden":"true"},on:{click:function(e){return t.handleScrollTop()}}},[t._t("icon",(function(){return[n("i",{class:["fas fa-arrow-circle-up"]})]}))],2)};ko._withStripped=!0;var To={box:We,breadcrumb:Ve,dropdown:gn,navbar:Tn,panel:Rn,annotate:In,aPoint:Wn,pic:Vn,quiz:Qn,question:Kn,qOption:Jn,retriever:zn,searchbar:oi,tab:si,tabGroup:li,tabs:ui,thumbnail:hi,trigger:ho,siteNav:fo,submenu:vn,siteNavButton:Cn,pageNavButton:kn,overlay:go,overlaySource:wo,popover:_o,tooltip:xo,modal:$o,VPopover:Ne,VTooltip:Ae,scrollTopButton:qe({name:"ScrollTopButton",props:{icon:{type:String,default:null},iconSize:{type:String,default:"lg"},iconColor:{type:String,default:null},bottom:{type:String,default:null},right:{type:String,default:null}},data:function(){return{isVisible:!1,isLighten:!1,timers:{showOrHideButtonTimer:0,lightenButtonTimer:0}}},methods:{initScrollTopButton:function(){window.addEventListener("scroll",this.promptScrollTopButton)},destroyScrollTopButton:function(){window.removeEventListener("scroll",this.promptScrollTopButton)},promptScrollTopButton:function(){this.resetScrollTopButton(),this.showOrHideScrollTopButton()},resetScrollTopButton:function(){clearTimeout(this.timers.showOrHideButtonTimer),clearTimeout(this.timers.lightenButtonTimer),this.isLighten=!1},showOrHideScrollTopButton:function(){var t=this;this.timers.showOrHideButtonTimer=setTimeout((function(){document.body.scrollTop>20||document.documentElement.scrollTop>20?(t.isVisible=!0,t.lightenScrollTopButton()):t.isVisible=!1}),100)},lightenScrollTopButton:function(){var t=this;this.timers.lightenButtonTimer=setTimeout((function(){t.isLighten||(t.isLighten=!0)}),1e3)},iconStyle:function(){var t={};return t.display=this.isVisible?"block":"none",this.iconColor&&(t.color=this.iconColor),t.bottom=this.bottom?this.bottom:"2%",t.right=this.right?this.right:"2%",t.position="fixed",t},handleScrollTop:function(){document.body.scrollIntoView({block:"start",behavior:"smooth"})},getIconSize:function(){return this.iconSize?"fa-".concat(this.iconSize):""}},mounted:function(){this.initScrollTopButton()},beforeDestroy:function(){this.destroyScrollTopButton()}},ko,[],!1,null,null,null).exports},Eo={closeable:Qe()};const Oo={MarkBindVue:{plugin:{install:function(t){Object.keys(Eo).forEach((function(e){t.directive(e,Eo[e])})),Object.keys(To).forEach((function(e){t.component(e,To[e])}))}},components:To,directives:Eo},appFactory:function(){return{data:function(){return{searchData:[]}},methods:{searchCallback:function(t){var e="".concat(baseUrl,"/").concat(t.src.replace(/.md$/,".html")),n=t.heading?"#".concat(t.heading.id):"";window.location="".concat(e).concat(n)}}}}};i(605);function Bo(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Po(t){for(var e=1;e767&&n&&l()})).observe(t);var i,o=0,r=window.location.hash,s=function(){if(!(window.innerWidth>767)){if(r!==window.location.hash)return r=window.location.hash,void l();r=window.location.hash;var i=window.pageYOffset;if(!(window.innerHeight+i>=document.body.offsetHeight)){if(i>o){t.style.position="static";var s=t.getBoundingClientRect().top+e;if(t.style.position="sticky",s>0)return;n=!0,t.style.overflow="hidden",t.classList.add("hide-header")}else l();o=i}}};window.addEventListener("scroll",(function(){i&&clearTimeout(i),i=setTimeout(s,20)}))}function a(){var e=window.getComputedStyle(t,null);return t.clientHeight-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom)}function l(){n=!1,t.classList.remove("hide-header")}}function zo(){document.querySelectorAll("script[style-bypass-vue-compilation]").forEach((function(t){var e=document.createElement("style");e.innerHTML=t.innerHTML,t.parentNode.replaceChild(e,t)})),Ao()}Vue.use(Lo.plugin),window.onload=function(){if(window.location.hash){var t=document.getElementById(window.location.hash.slice(1));t&&t.scrollIntoView({behavior:"smooth",block:"start",inline:"nearest"})}},window.handleSiteNavClick=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(e){var n=t.getElementsByTagName("a");if(n.length)return void(window.location.href=n[0].href)}var i=t.nextElementSibling,o=t.lastElementChild.lastElementChild;i.classList.toggle("site-nav-dropdown-container-open"),o.classList.toggle("site-nav-rotate-icon")};const Mo={setup:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo()}})).$mount("#app",!0)},setupWithSearch:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo(),function(t){fetch("".concat(baseUrl,"/siteData.json")).then((function(t){return t.json()})).then((function(e){t.searchData=e.pages}))}(this)}})).$mount("#app",!0)}}})(),o=o.default})()); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("Vue")):"function"==typeof define&&define.amd?define(["Vue"],e):"object"==typeof exports?exports.MarkBind=e(require("Vue")):t.MarkBind=e(t.Vue)}(self,t=>(()=>{var e={605:()=>{function t(){document.querySelectorAll(".".concat("page-nav-clone")).forEach((function(t){t.remove()}))}window.addEventListener("beforeprint",(function(){var e=document.querySelector("#".concat("mb-page-nav")),n=document.querySelectorAll(".".concat("page-nav-print"));e&&n.length>=1&&(t(),n.forEach((function(t){t.appendChild(function(t){var e=t.cloneNode(!0);return e.removeAttribute("id"),e.querySelectorAll("a.active").forEach((function(t){t.classList.remove("active")})),e.classList.add("page-nav-clone"),e}(e))})))})),window.addEventListener("afterprint",(function(){t()})),window.addEventListener("beforeprint",(function(){document.querySelectorAll("pre > code.hljs").forEach((function(t){Array.from(t.querySelectorAll("span")).some((function(t){return t.scrollWidth>t.clientWidth}))&&t.classList.add("line-numbers-print")}))}))},3:t=>{t.exports={bind:function(t){function e(){t.dataset.isShown="false",r.style.display="",o.style.display="none",i.style.display="none"}function n(){t.dataset.isShown="true",r.style.display="none",i.style.display=""}t.dataset.isShown="true",t.style.position="relative";var i=document.createElement("div");i.classList.add("content"),Array.from(t.children).forEach((function(t){return i.append(t)})),t.replaceChildren(),t.append(i),t.classList.add("closeable-wrapper");var o=function(){var t=document.createElement("span");return t.classList.add("closeable-button","label","label-default","hidden-print"),t.style.cssText+="display: none; position: absolute; top: 0; left: 0; cursor: pointer;background: #d9534f",t.innerHTML='',t.addEventListener("click",e),t}();t.append(o);var r=function(t){var e=document.createElement("a");return e.classList.add("closeable-show","hidden-print"),e.style.cssText+="display: none; cursor: pointer;text-decoration: underline",e.innerHTML=t,e.addEventListener("click",n),e}(t.getAttribute("alt")||"Expand Content");t.append(r),t.addEventListener("mouseover",(function(){"false"!==t.dataset.isShown&&(o.style.display="")})),t.addEventListener("mouseout",(function(){"false"!==t.dataset.isShown&&(o.style.display="none")}))}}},383:(t,e,n)=>{"use strict";var i,o=(i=n(740))&&"object"==typeof i&&"default"in i?i.default:i;function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function s(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e1&&void 0!==arguments[1]&&arguments[1],n=t.to,i=t.from;if(n&&(i||!1!==e)&&this.transports[n])if(e)this.transports[n]=[];else{var o=this.$_getTransportIndex(t);if(o>=0){var r=this.transports[n].slice(0);r.splice(o,1),this.transports[n]=r}}},registerTarget:function(t,e,n){a&&(this.trackInstances&&!n&&this.targets[t]&&console.warn("[portal-vue]: Target ".concat(t," already exists")),this.$set(this.targets,t,Object.freeze([e])))},unregisterTarget:function(t){this.$delete(this.targets,t)},registerSource:function(t,e,n){a&&(this.trackInstances&&!n&&this.sources[t]&&console.warn("[portal-vue]: source ".concat(t," already exists")),this.$set(this.sources,t,Object.freeze([e])))},unregisterSource:function(t){this.$delete(this.sources,t)},hasTarget:function(t){return!(!this.targets[t]||!this.targets[t][0])},hasSource:function(t){return!(!this.sources[t]||!this.sources[t][0])},hasContentFor:function(t){return!!this.transports[t]&&!!this.transports[t].length},$_getTransportIndex:function(t){var e=t.to,n=t.from;for(var i in this.transports[e])if(this.transports[e][i].from===n)return+i;return-1}}}))(c),p=1,f=o.extend({name:"portal",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(p++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var t=this;this.$nextTick((function(){h.registerSource(t.name,t)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){h.unregisterSource(this.name),this.clear()},watch:{to:function(t,e){e&&e!==t&&this.clear(e),this.sendUpdate()}},methods:{clear:function(t){var e={from:this.name,to:t||this.to};h.close(e)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(t){return"function"==typeof t?t(this.slotProps):t},sendUpdate:function(){var t=this.normalizeSlots();if(t){var e={from:this.name,to:this.to,passengers:s(t),order:this.order};h.open(e)}else this.clear()}},render:function(t){var e=this.$slots.default||this.$scopedSlots.default||[],n=this.tag;return e&&this.disabled?e.length<=1&&this.slim?this.normalizeOwnChildren(e)[0]:t(n,[this.normalizeOwnChildren(e)]):this.slim?t():t(n,{class:{"v-portal":!0},style:{display:"none"},key:"v-portal-placeholder"})}}),m=o.extend({name:"portalTarget",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},data:function(){return{transports:h.transports,firstRender:!0}},created:function(){var t=this;this.$nextTick((function(){h.registerTarget(t.name,t)}))},watch:{ownTransports:function(){this.$emit("change",this.children().length>0)},name:function(t,e){h.unregisterTarget(e),h.registerTarget(t,this)}},mounted:function(){var t=this;this.transition&&this.$nextTick((function(){t.firstRender=!1}))},beforeDestroy:function(){h.unregisterTarget(this.name)},computed:{ownTransports:function(){var t=this.transports[this.name]||[];return this.multiple?t:0===t.length?[]:[t[t.length-1]]},passengers:function(){return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.reduce((function(t,n){var i=n.passengers[0],o="function"==typeof i?i(e):n.passengers;return t.concat(o)}),[])}(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!==this.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var t=this.slim&&!this.transition;return t&&this.children().length>1&&console.warn("[portal-vue]: PortalTarget with `slim` option received more than one child element."),t}},render:function(t){var e=this.noWrapper(),n=this.children(),i=this.transition||this.tag;return e?n[0]:this.slim&&!i?t():t(i,{props:{tag:this.transition&&this.tag?this.tag:void 0},class:{"vue-portal-target":!0}},n)}}),v=0,g=["disabled","name","order","slim","slotProps","tag","to"],y=["multiple","transition"],w=o.extend({name:"MountingPortal",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return"mounted_"+String(v++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},created:function(){if("undefined"!=typeof document){var t=document.querySelector(this.mountTo);if(t){var e=this.$props;if(h.targets[e.name])e.bail?console.warn("[portal-vue]: Target ".concat(e.name," is already mounted.\n Aborting because 'bail: true' is set")):this.portalTarget=h.targets[e.name];else{var n=e.append;if(n){var i="string"==typeof n?n:"DIV",o=document.createElement(i);t.appendChild(o),t=o}var r=l(this.$props,y);r.slim=this.targetSlim,r.tag=this.targetTag,r.slotProps=this.targetSlotProps,r.name=this.to,this.portalTarget=new m({el:t,parent:this.$parent||this,propsData:r})}}else console.error("[portal-vue]: Mount Point '".concat(this.mountTo,"' not found in document"))}},beforeDestroy:function(){var t=this.portalTarget;if(this.append){var e=t.$el;e.parentNode.removeChild(e)}t.$destroy()},render:function(t){if(!this.portalTarget)return console.warn("[portal-vue] Target wasn't mounted"),t();if(!this.$scopedSlots.manual){var e=l(this.$props,g);return t(f,{props:e,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var n=this.$scopedSlots.manual({to:this.to});return Array.isArray(n)&&(n=n[0]),n||t()}});e.h_=f,e.YC=m},740:e=>{"use strict";e.exports=t}},n={};function i(t){var o=n[t];if(void 0!==o)return o.exports;var r=n[t]={exports:{}};return e[t](r,r.exports,i),r.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var o={};return(()=>{"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(e){var n=function(e,n){if("object"!==t(e)||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var o=i.call(e,n||"default");if("object"!==t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"===t(n)?n:String(n)}function n(t,n,i){return(n=e(n))in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i,t}function r(t){return t.split("-")[0]}function s(t){return t.split("-")[1]}function a(t){return["top","bottom"].includes(r(t))?"x":"y"}function l(t){return"y"===t?"height":"width"}function c(t){let{reference:e,floating:n,placement:i}=t;const o=e.x+e.width/2-n.width/2,c=e.y+e.height/2-n.height/2;let u;switch(r(i)){case"top":u={x:o,y:e.y-n.height};break;case"bottom":u={x:o,y:e.y+e.height};break;case"right":u={x:e.x+e.width,y:c};break;case"left":u={x:e.x-n.width,y:c};break;default:u={x:e.x,y:e.y}}const d=a(i),h=l(d);switch(s(i)){case"start":u[d]=u[d]-(e[h]/2-n[h]/2);break;case"end":u[d]=u[d]+(e[h]/2-n[h]/2)}return u}i.d(o,{default:()=>Mo});function u(t){return"number"!=typeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}function d(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function h(t,e){void 0===e&&(e={});const{x:n,y:i,platform:o,rects:r,elements:s,strategy:a}=t,{boundary:l="clippingParents",rootBoundary:c="viewport",elementContext:h="floating",altBoundary:p=!1,padding:f=0}=e,m=u(f),v=s[p?"floating"===h?"reference":"floating":h],g=await o.getClippingClientRect({element:await o.isElement(v)?v:v.contextElement||await o.getDocumentElement({element:s.floating}),boundary:l,rootBoundary:c}),y=d(await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:"floating"===h?{...r.floating,x:n,y:i}:r.reference,offsetParent:await o.getOffsetParent({element:s.floating}),strategy:a}));return{top:g.top-y.top+m.top,bottom:y.bottom-g.bottom+m.bottom,left:g.left-y.left+m.left,right:y.right-g.right+m.right}}const p=Math.min,f=Math.max;function m(t,e,n){return f(t,p(e,n))}const v={left:"right",right:"left",bottom:"top",top:"bottom"};function g(t){return t.replace(/left|right|bottom|top/g,t=>v[t])}function y(t,e){const n="start"===s(t),i=a(t),o=l(i);let r="x"===i?n?"right":"left":n?"bottom":"top";return e.reference[o]>e.floating[o]&&(r=g(r)),{main:r,cross:g(r)}}const w={start:"end",end:"start"};function b(t){return t.replace(/start|end/g,t=>w[t])}const _=["top","right","bottom","left"],S=_.reduce((t,e)=>t.concat(e,e+"-start",e+"-end"),[]);const x=function(t){return void 0===t&&(t={}),{name:"autoPlacement",options:t,async fn(e){var n,i,o,a,l,c;const{x:u,y:d,rects:p,middlewareData:f,placement:m}=e,{alignment:v=null,allowedPlacements:g=S,autoAlignment:w=!0,..._}=t;if(null!=(n=f.autoPlacement)&&n.skip)return{};const x=function(t,e,n){return(t?[...n.filter(e=>s(e)===t),...n.filter(e=>s(e)!==t)]:n.filter(t=>r(t)===t)).filter(n=>!t||(s(n)===t||!!e&&b(n)!==n))}(v,w,g),C=await h(e,_),$=null!=(i=null==(o=f.autoPlacement)?void 0:o.index)?i:0,k=x[$],{main:T,cross:E}=y(k,p);if(m!==k)return{x:u,y:d,reset:{placement:x[0]}};const O=[C[r(k)],C[T],C[E]],B=[...null!=(a=null==(l=f.autoPlacement)?void 0:l.overflows)?a:[],{placement:k,overflows:O}],P=x[$+1];if(P)return{data:{index:$+1,overflows:B},reset:{placement:P}};const L=B.slice().sort((t,e)=>t.overflows[0]-e.overflows[0]),N=null==(c=L.find(t=>{let{overflows:e}=t;return e.every(t=>t<=0)}))?void 0:c.placement;return{data:{skip:!0},reset:{placement:null!=N?N:L[0].placement}}}}};const C=function(t){return void 0===t&&(t={}),{name:"flip",options:t,async fn(e){var n,i;const{placement:o,middlewareData:s,rects:a,initialPlacement:l}=e;if(null!=(n=s.flip)&&n.skip)return{};const{mainAxis:c=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:p="bestFit",flipAlignment:f=!0,...m}=t,v=r(o),w=[l,...d||(v===l||!f?[g(l)]:function(t){const e=g(t);return[b(t),e,b(e)]}(l))],_=await h(e,m),S=[];let x=(null==(i=s.flip)?void 0:i.overflows)||[];if(c&&S.push(_[v]),u){const{main:t,cross:e}=y(o,a);S.push(_[t],_[e])}if(x=[...x,{placement:o,overflows:S}],!S.every(t=>t<=0)){var C,$;const t=(null!=(C=null==($=s.flip)?void 0:$.index)?C:0)+1,e=w[t];if(e)return{data:{index:t,overflows:x},reset:{placement:e}};let n="bottom";switch(p){case"bestFit":{var k;const t=null==(k=x.slice().sort((t,e)=>t.overflows.filter(t=>t>0).reduce((t,e)=>t+e,0)-e.overflows.filter(t=>t>0).reduce((t,e)=>t+e,0))[0])?void 0:k.placement;t&&(n=t);break}case"initialPlacement":n=l}return{data:{skip:!0},reset:{placement:n}}}return{}}}};const $=function(t){return void 0===t&&(t=0),{name:"offset",options:t,fn(e){const{x:n,y:i,placement:o,rects:s}=e,l=function(t){let{placement:e,rects:n,value:i}=t;const o=r(e),s=["left","top"].includes(o)?-1:1,l="function"==typeof i?i({...n,placement:e}):i,{mainAxis:c,crossAxis:u}="number"==typeof l?{mainAxis:l,crossAxis:0}:{mainAxis:0,crossAxis:0,...l};return"x"===a(o)?{x:u,y:c*s}:{x:c*s,y:u}}({placement:o,rects:s,value:t});return{x:n+l.x,y:i+l.y,data:l}}}};function k(t){return"x"===t?"y":"x"}function T(t){return"[object Window]"===(null==t?void 0:t.toString())}function E(t){if(null==t)return window;if(!T(t)){const e=t.ownerDocument;return e&&e.defaultView||window}return t}function O(t){return E(t).getComputedStyle(t)}function B(t){return T(t)?"":t?(t.nodeName||"").toLowerCase():""}function P(t){return t instanceof E(t).HTMLElement}function L(t){return t instanceof E(t).Element}function N(t){return t instanceof E(t).ShadowRoot||t instanceof ShadowRoot}function A(t){const{overflow:e,overflowX:n,overflowY:i}=O(t);return/auto|scroll|overlay|hidden/.test(e+i+n)}function z(t){return["table","td","th"].includes(B(t))}function M(t){const e=navigator.userAgent.toLowerCase().includes("firefox"),n=O(t);return"none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||["transform","perspective"].includes(n.willChange)||e&&"filter"===n.willChange||e&&!!n.filter&&"none"!==n.filter}const H=Math.min,D=Math.max,R=Math.round;function j(t,e){void 0===e&&(e=!1);const n=t.getBoundingClientRect();let i=1,o=1;return e&&P(t)&&(i=t.offsetWidth>0&&R(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&R(n.height)/t.offsetHeight||1),{width:n.width/i,height:n.height/o,top:n.top/o,right:n.right/i,bottom:n.bottom/o,left:n.left/i,x:n.left/i,y:n.top/o}}function I(t){return(e=t,(e instanceof E(e).Node?t.ownerDocument:t.document)||window.document).documentElement;var e}function q(t){return T(t)?{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}:{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function W(t){return j(I(t)).left+q(t).scrollLeft}function F(t,e,n){const i=P(e),o=I(e),r=j(t,i&&function(t){const e=j(t);return R(e.width)!==t.offsetWidth||R(e.height)!==t.offsetHeight}(e));let s={scrollLeft:0,scrollTop:0};const a={x:0,y:0};if(i||!i&&"fixed"!==n)if(("body"!==B(e)||A(o))&&(s=q(e)),P(e)){const t=j(e,!0);a.x=t.x+e.clientLeft,a.y=t.y+e.clientTop}else o&&(a.x=W(o));return{x:r.left+s.scrollLeft-a.x,y:r.top+s.scrollTop-a.y,width:r.width,height:r.height}}function V(t){return"html"===B(t)?t:t.assignedSlot||t.parentNode||(N(t)?t.host:null)||I(t)}function U(t){return P(t)&&"fixed"!==getComputedStyle(t).position?t.offsetParent:null}function Q(t){const e=E(t);let n=U(t);for(;n&&z(n)&&"static"===getComputedStyle(n).position;)n=U(n);return n&&("html"===B(n)||"body"===B(n)&&"static"===getComputedStyle(n).position&&!M(n))?e:n||function(t){let e=V(t);for(;P(e)&&!["html","body"].includes(B(e));){if(M(e))return e;e=e.parentNode}return null}(t)||e}function X(t){return{width:t.offsetWidth,height:t.offsetHeight}}function Y(t,e){var n;void 0===e&&(e=[]);const i=function t(e){return["html","body","#document"].includes(B(e))?e.ownerDocument.body:P(e)&&A(e)?e:t(V(e))}(t),o=i===(null==(n=t.ownerDocument)?void 0:n.body),r=E(i),s=o?[r].concat(r.visualViewport||[],A(i)?i:[]):i,a=e.concat(s);return o?a:a.concat(Y(V(s)))}function G(t,e){return"viewport"===e?d(function(t){const e=E(t),n=I(t),i=e.visualViewport;let o=n.clientWidth,r=n.clientHeight,s=0,a=0;return i&&(o=i.width,r=i.height,Math.abs(e.innerWidth/i.scale-i.width)<.01&&(s=i.offsetLeft,a=i.offsetTop)),{width:o,height:r,x:s,y:a}}(t)):L(e)?function(t){const e=j(t),n=e.top+t.clientTop,i=e.left+t.clientLeft;return{top:n,left:i,x:i,y:n,right:i+t.clientWidth,bottom:n+t.clientHeight,width:t.clientWidth,height:t.clientHeight}}(e):d(function(t){var e;const n=I(t),i=q(t),o=null==(e=t.ownerDocument)?void 0:e.body,r=D(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=D(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0);let a=-i.scrollLeft+W(t);const l=-i.scrollTop;return"rtl"===O(o||n).direction&&(a+=D(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(I(t)))}function K(t){const e=Y(V(t)),n=["absolute","fixed"].includes(O(t).position)&&P(t)?Q(t):t;return L(n)?e.filter(t=>L(t)&&function(t,e){const n=null==e.getRootNode?void 0:e.getRootNode();if(t.contains(e))return!0;if(n&&N(n)){let n=e;do{if(n&&t===n)return!0;n=n.parentNode||n.host}while(n)}return!1}(t,n)&&"body"!==B(t)):[]}const Z={getElementRects:t=>{let{reference:e,floating:n,strategy:i}=t;return{reference:F(e,Q(n),i),floating:{...X(n),x:0,y:0}}},convertOffsetParentRelativeRectToViewportRelativeRect:t=>function(t){let{rect:e,offsetParent:n,strategy:i}=t;const o=P(n),r=I(n);if(n===r)return e;let s={scrollLeft:0,scrollTop:0};const a={x:0,y:0};if((o||!o&&"fixed"!==i)&&(("body"!==B(n)||A(r))&&(s=q(n)),P(n))){const t=j(n,!0);a.x=t.x+n.clientLeft,a.y=t.y+n.clientTop}return{...e,x:e.x-s.scrollLeft+a.x,y:e.y-s.scrollTop+a.y}}(t),getOffsetParent:t=>{let{element:e}=t;return Q(e)},isElement:t=>L(t),getDocumentElement:t=>{let{element:e}=t;return I(e)},getClippingClientRect:t=>function(t){let{element:e,boundary:n,rootBoundary:i}=t;const o=[..."clippingParents"===n?K(e):[].concat(n),i],r=o[0],s=o.reduce((t,n)=>{const i=G(e,n);return t.top=D(i.top,t.top),t.right=H(i.right,t.right),t.bottom=H(i.bottom,t.bottom),t.left=D(i.left,t.left),t},G(e,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}(t),getDimensions:t=>{let{element:e}=t;return X(e)},getClientRects:t=>{let{element:e}=t;return e.getClientRects()}},J=(t,e,n)=>(async(t,e,n)=>{const{placement:i="bottom",strategy:o="absolute",middleware:r=[],platform:s}=n;let a=await s.getElementRects({reference:t,floating:e,strategy:o}),{x:l,y:u}=c({...a,placement:i}),d=i,h={};for(let n=0;ne in t?nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ct=(t,e)=>{for(var n in e||(e={}))st.call(e,n)&<(t,n,e[n]);if(rt)for(var n of rt(e))at.call(e,n)&<(t,n,e[n]);return t},ut=(t,e)=>it(t,ot(e));const dt={disabled:!1,distance:5,skidding:0,container:"body",boundary:void 0,instantMove:!1,disposeTimeout:5e3,popperTriggers:[],strategy:"absolute",preventOverflow:!0,flip:!0,shift:!0,overflowPadding:0,arrowPadding:0,arrowOverflow:!0,themes:{tooltip:{placement:"top",triggers:["hover","focus","touch"],hideTriggers:t=>[...t,"click"],delay:{show:200,hide:0},handleResize:!1,html:!1,loadingContent:"..."},dropdown:{placement:"bottom",triggers:["click"],delay:0,handleResize:!0,autoHide:!0},menu:{$extend:"dropdown",triggers:["hover","focus"],popperTriggers:["hover","focus"],delay:{show:0,hide:400}}}};function ht(t,e){let n,i=dt.themes[t]||{};do{n=i[e],void 0===n?i.$extend?i=dt.themes[i.$extend]||{}:(i=null,n=dt[e]):i=null}while(i);return n}let pt=!1;if("undefined"!=typeof window){pt=!1;try{const t=Object.defineProperty({},"passive",{get(){pt=!0}});window.addEventListener("test",null,t)}catch(t){}}let ft=!1;"undefined"!=typeof window&&"undefined"!=typeof navigator&&(ft=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream);const mt=["auto","top","bottom","left","right"].reduce((t,e)=>t.concat([e,e+"-start",e+"-end"]),[]),vt={hover:"mouseenter",focus:"focus",click:"click",touch:"touchstart"},gt={hover:"mouseleave",focus:"blur",click:"click",touch:"touchend"};function yt(){return new Promise(t=>requestAnimationFrame(()=>{requestAnimationFrame(t)}))}const wt=[];let bt=null,_t=function(){};function St(t){return function(){return ht(this.$props.theme,t)}}"undefined"!=typeof window&&(_t=window.Element);const xt="__floating-vue__popper";var Ct=()=>({name:"VPopper",props:{theme:{type:String,required:!0},targetNodes:{type:Function,required:!0},referenceNode:{type:Function,required:!0},popperNode:{type:Function,required:!0},shown:{type:Boolean,default:!1},showGroup:{type:String,default:null},ariaId:{default:null},disabled:{type:Boolean,default:St("disabled")},positioningDisabled:{type:Boolean,default:St("positioningDisabled")},placement:{type:String,default:St("placement"),validator:t=>mt.includes(t)},delay:{type:[String,Number,Object],default:St("delay")},distance:{type:[Number,String],default:St("distance")},skidding:{type:[Number,String],default:St("skidding")},triggers:{type:Array,default:St("triggers")},showTriggers:{type:[Array,Function],default:St("showTriggers")},hideTriggers:{type:[Array,Function],default:St("hideTriggers")},popperTriggers:{type:Array,default:St("popperTriggers")},popperShowTriggers:{type:[Array,Function],default:St("popperShowTriggers")},popperHideTriggers:{type:[Array,Function],default:St("popperHideTriggers")},container:{type:[String,Object,_t,Boolean],default:St("container")},boundary:{type:[String,_t],default:St("boundary")},strategy:{type:String,validator:t=>["absolute","fixed"].includes(t),default:St("strategy")},autoHide:{type:Boolean,default:St("autoHide")},handleResize:{type:Boolean,default:St("handleResize")},instantMove:{type:Boolean,default:St("instantMove")},eagerMount:{type:Boolean,default:St("eagerMount")},popperClass:{type:[String,Array,Object],default:St("popperClass")},computeTransformOrigin:{type:Boolean,default:St("computeTransformOrigin")},autoMinSize:{type:Boolean,default:St("autoMinSize")},autoSize:{type:[Boolean,String],default:St("autoSize")},autoMaxSize:{type:Boolean,default:St("autoMaxSize")},autoBoundaryMaxSize:{type:Boolean,default:St("autoBoundaryMaxSize")},preventOverflow:{type:Boolean,default:St("preventOverflow")},overflowPadding:{type:[Number,String],default:St("overflowPadding")},arrowPadding:{type:[Number,String],default:St("arrowPadding")},arrowOverflow:{type:Boolean,default:St("arrowOverflow")},flip:{type:Boolean,default:St("flip")},shift:{type:Boolean,default:St("shift")},shiftCrossAxis:{type:Boolean,default:St("shiftCrossAxis")}},provide(){return{[xt]:{parentPopper:this}}},inject:{[xt]:{default:null}},data(){return{isShown:!1,isMounted:!1,skipTransition:!1,classes:{showFrom:!1,showTo:!1,hideFrom:!1,hideTo:!0},result:{x:0,y:0,placement:"",strategy:this.strategy,arrow:{x:0,y:0,centerOffset:0},transformOrigin:null},shownChildren:new Set}},computed:{popperId(){return null!=this.ariaId?this.ariaId:this.randomId},shouldMountContent(){return this.eagerMount||this.isMounted},slotData(){return{popperId:this.popperId,isShown:this.isShown,shouldMountContent:this.shouldMountContent,skipTransition:this.skipTransition,autoHide:this.autoHide,show:this.show,hide:this.hide,handleResize:this.handleResize,onResize:this.onResize,classes:ut(ct({},this.classes),{popperClass:this.popperClass}),result:this.positioningDisabled?null:this.result}},parentPopper(){var t;return null==(t=this[xt])?void 0:t.parentPopper}},watch:ct(ct({shown:"$_autoShowHide",disabled(t){t?this.dispose():this.init()},async container(){this.isShown&&(this.$_ensureTeleport(),await this.$_computePosition())}},["triggers","positioningDisabled"].reduce((t,e)=>(t[e]="$_refreshListeners",t),{})),["placement","distance","skidding","boundary","strategy","overflowPadding","arrowPadding","preventOverflow","shift","shiftCrossAxis","flip"].reduce((t,e)=>(t[e]="$_computePosition",t),{})),created(){this.$_isDisposed=!0,this.randomId="popper_"+[Math.random(),Date.now()].map(t=>t.toString(36).substring(2,10)).join("_"),this.autoMinSize&&console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize="min"` instead.'),this.autoMaxSize&&console.warn("[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.")},mounted(){this.init(),this.$_detachPopperNode()},activated(){this.$_autoShowHide()},deactivated(){this.hide()},beforeDestroy(){this.dispose()},methods:{show({event:t=null,skipDelay:e=!1,force:n=!1}={}){var i,o;(null==(i=this.parentPopper)?void 0:i.lockedChild)&&this.parentPopper.lockedChild!==this||(this.$_pendingHide=!1,!n&&this.disabled||((null==(o=this.parentPopper)?void 0:o.lockedChild)===this&&(this.parentPopper.lockedChild=null),this.$_scheduleShow(t,e),this.$emit("show"),this.$_showFrameLocked=!0,requestAnimationFrame(()=>{this.$_showFrameLocked=!1})),this.$emit("update:shown",!0))},hide({event:t=null,skipDelay:e=!1}={}){var n;this.$_hideInProgress||(this.shownChildren.size>0?this.$_pendingHide=!0:this.$_isAimingPopper()?this.parentPopper&&(this.parentPopper.lockedChild=this,clearTimeout(this.parentPopper.lockedChildTimer),this.parentPopper.lockedChildTimer=setTimeout(()=>{this.parentPopper.lockedChild===this&&(this.parentPopper.lockedChild.hide({skipDelay:e}),this.parentPopper.lockedChild=null)},1e3)):((null==(n=this.parentPopper)?void 0:n.lockedChild)===this&&(this.parentPopper.lockedChild=null),this.$_pendingHide=!1,this.$_scheduleHide(t,e),this.$emit("hide"),this.$emit("update:shown",!1)))},init(){this.$_isDisposed&&(this.$_isDisposed=!1,this.isMounted=!1,this.$_events=[],this.$_preventShow=!1,this.$_referenceNode=this.referenceNode(),this.$_targetNodes=this.targetNodes().filter(t=>t.nodeType===t.ELEMENT_NODE),this.$_popperNode=this.popperNode(),this.$_innerNode=this.$_popperNode.querySelector(".v-popper__inner"),this.$_arrowNode=this.$_popperNode.querySelector(".v-popper__arrow-container"),this.$_swapTargetAttrs("title","data-original-title"),this.$_detachPopperNode(),this.triggers.length&&this.$_addEventListeners(),this.shown&&this.show())},dispose(){this.$_isDisposed||(this.$_isDisposed=!0,this.$_removeEventListeners(),this.hide({skipDelay:!0}),this.$_detachPopperNode(),this.isMounted=!1,this.isShown=!1,this.$_updateParentShownChildren(!1),this.$_swapTargetAttrs("data-original-title","title"),this.$emit("dispose"))},async onResize(){this.isShown&&(await this.$_computePosition(),this.$emit("resize"))},async $_computePosition(){var t;if(this.$_isDisposed||this.positioningDisabled)return;const e={strategy:this.strategy,middleware:[]};(this.distance||this.skidding)&&e.middleware.push($({mainAxis:this.distance,crossAxis:this.skidding}));const n=this.placement.startsWith("auto");if(n?e.middleware.push(x({alignment:null!=(t=this.placement.split("-")[1])?t:""})):e.placement=this.placement,this.preventOverflow&&(this.shift&&e.middleware.push(function(t){return void 0===t&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:i,placement:o}=e,{mainAxis:s=!0,crossAxis:l=!1,limiter:c={fn:t=>{let{x:e,y:n}=t;return{x:e,y:n}}},...u}=t,d={x:n,y:i},p=await h(e,u),f=a(r(o)),v=k(f);let g=d[f],y=d[v];if(s){const t="y"===f?"bottom":"right";g=m(g+p["y"===f?"top":"left"],g,g-p[t])}if(l){const t="y"===v?"bottom":"right";y=m(y+p["y"===v?"top":"left"],y,y-p[t])}const w=c.fn({...e,[f]:g,[v]:y});return{...w,data:{x:w.x-n,y:w.y-i}}}}}({padding:this.overflowPadding,boundary:this.boundary,crossAxis:this.shiftCrossAxis})),!n&&this.flip&&e.middleware.push(C({padding:this.overflowPadding,boundary:this.boundary}))),e.middleware.push((t=>({name:"arrow",options:t,async fn(e){const{element:n,padding:i=0}=null!=t?t:{},{x:o,y:s,placement:c,rects:d,platform:h}=e;if(null==n)return{};const p=u(i),f={x:o,y:s},v=a(r(c)),g=l(v),y=await h.getDimensions({element:n}),w="y"===v?"top":"left",b="y"===v?"bottom":"right",_=d.reference[g]+d.reference[v]-f[v]-d.floating[g],S=f[v]-d.reference[v],x=await h.getOffsetParent({element:n}),C=x?"y"===v?x.clientHeight||0:x.clientWidth||0:0,$=_/2-S/2,k=p[w],T=C-y[g]-p[b],E=C/2-y[g]/2+$,O=m(k,E,T);return{data:{[v]:O,centerOffset:E-O}}}}))({element:this.$_arrowNode,padding:this.arrowPadding})),this.arrowOverflow&&e.middleware.push({name:"arrowOverflow",fn:({placement:t,rects:e,middlewareData:n})=>{let i;const{centerOffset:o}=n.arrow;return i=t.startsWith("top")||t.startsWith("bottom")?Math.abs(o)>e.reference.width/2:Math.abs(o)>e.reference.height/2,{data:{overflow:i}}}}),this.autoMinSize||this.autoSize){const t=this.autoSize?this.autoSize:this.autoMinSize?"min":null;e.middleware.push({name:"autoSize",fn:({rects:e,placement:n,middlewareData:i})=>{var o;if(null==(o=i.autoSize)?void 0:o.skip)return{};let r,s;return n.startsWith("top")||n.startsWith("bottom")?r=e.reference.width:s=e.reference.height,this.$_innerNode.style["min"===t?"minWidth":"max"===t?"maxWidth":"width"]=null!=r?r+"px":null,this.$_innerNode.style["min"===t?"minHeight":"max"===t?"maxHeight":"height"]=null!=s?s+"px":null,{data:{skip:!0},reset:{rects:!0}}}})}(this.autoMaxSize||this.autoBoundaryMaxSize)&&(this.$_innerNode.style.maxWidth=null,this.$_innerNode.style.maxHeight=null,e.middleware.push(function(t){return void 0===t&&(t={}),{name:"size",options:t,async fn(e){var n;const{placement:i,rects:o,middlewareData:a}=e,{apply:l,...c}=t;if(null!=(n=a.size)&&n.skip)return{};const u=await h(e,c),d=r(i),p="end"===s(i);let m,v;"top"===d||"bottom"===d?(m=d,v=p?"left":"right"):(v=d,m=p?"top":"bottom");const g=f(u.left,0),y=f(u.right,0),w=f(u.top,0),b=f(u.bottom,0),_={height:o.floating.height-(["left","right"].includes(i)?2*(0!==w||0!==b?w+b:f(u.top,u.bottom)):u[m]),width:o.floating.width-(["top","bottom"].includes(i)?2*(0!==g||0!==y?g+y:f(u.left,u.right)):u[v])};return null==l||l({..._,...o}),{data:{skip:!0},reset:{rects:!0}}}}}({boundary:this.boundary,padding:this.overflowPadding,apply:({width:t,height:e})=>{this.$_innerNode.style.maxWidth=null!=t?t+"px":null,this.$_innerNode.style.maxHeight=null!=e?e+"px":null}})));const i=await J(this.$_referenceNode,this.$_popperNode,e);Object.assign(this.result,{x:i.x,y:i.y,placement:i.placement,strategy:i.strategy,arrow:ct(ct({},i.middlewareData.arrow),i.middlewareData.arrowOverflow)})},$_scheduleShow(t=null,e=!1){if(this.$_updateParentShownChildren(!0),this.$_hideInProgress=!1,clearTimeout(this.$_scheduleTimer),bt&&this.instantMove&&bt.instantMove&&bt!==this.parentPopper)return bt.$_applyHide(!0),void this.$_applyShow(!0);e?this.$_applyShow():this.$_scheduleTimer=setTimeout(this.$_applyShow.bind(this),this.$_computeDelay("show"))},$_scheduleHide(t=null,e=!1){this.shownChildren.size>0?this.$_pendingHide=!0:(this.$_updateParentShownChildren(!1),this.$_hideInProgress=!0,clearTimeout(this.$_scheduleTimer),this.isShown&&(bt=this),e?this.$_applyHide():this.$_scheduleTimer=setTimeout(this.$_applyHide.bind(this),this.$_computeDelay("hide")))},$_computeDelay(t){const e=this.delay;return parseInt(e&&e[t]||e||0)},async $_applyShow(t=!1){clearTimeout(this.$_disposeTimer),clearTimeout(this.$_scheduleTimer),this.skipTransition=t,this.isShown||(this.$_ensureTeleport(),await yt(),await this.$_computePosition(),await this.$_applyShowEffect(),this.positioningDisabled||this.$_registerEventListeners([...Y(this.$_referenceNode),...Y(this.$_popperNode)],"scroll",()=>{this.$_computePosition()}))},async $_applyShowEffect(){if(this.$_hideInProgress)return;if(this.computeTransformOrigin){const t=this.$_referenceNode.getBoundingClientRect(),e=this.$_popperNode.querySelector(".v-popper__wrapper"),n=e.parentNode.getBoundingClientRect(),i=t.x+t.width/2-(n.left+e.offsetLeft),o=t.y+t.height/2-(n.top+e.offsetTop);this.result.transformOrigin=`${i}px ${o}px`}this.isShown=!0,this.$_applyAttrsToTarget({"aria-describedby":this.popperId,"data-popper-shown":""});const t=this.showGroup;if(t){let e;for(let n=0;n0)return this.$_pendingHide=!0,void(this.$_hideInProgress=!1);if(clearTimeout(this.$_scheduleTimer),!this.isShown)return;this.skipTransition=t,function(t,e){const n=t.indexOf(e);-1!==n&&t.splice(n,1)}(wt,this),bt===this&&(bt=null),this.isShown=!1,this.$_applyAttrsToTarget({"aria-describedby":void 0,"data-popper-shown":void 0}),clearTimeout(this.$_disposeTimer);const e=ht(this.theme,"disposeTimeout");null!==e&&(this.$_disposeTimer=setTimeout(()=>{this.$_popperNode&&(this.$_detachPopperNode(),this.isMounted=!1)},e)),this.$_removeEventListeners("scroll"),this.$emit("apply-hide"),this.classes.showFrom=!1,this.classes.showTo=!1,this.classes.hideFrom=!0,this.classes.hideTo=!1,await yt(),this.classes.hideFrom=!1,this.classes.hideTo=!0},$_autoShowHide(){this.shown?this.show():this.hide()},$_ensureTeleport(){if(this.$_isDisposed)return;let t=this.container;if("string"==typeof t?t=window.document.querySelector(t):!1===t&&(t=this.$_targetNodes[0].parentNode),!t)throw new Error("No container for popover: "+this.container);t.appendChild(this.$_popperNode),this.isMounted=!0},$_addEventListeners(){const t=t=>{this.isShown&&!this.$_hideInProgress||(t.usedByTooltip=!0,!this.$_preventShow&&this.show({event:t}))};this.$_registerTriggerListeners(this.$_targetNodes,vt,this.triggers,this.showTriggers,t),this.$_registerTriggerListeners([this.$_popperNode],vt,this.popperTriggers,this.popperShowTriggers,t);const e=t=>{t.usedByTooltip||this.hide({event:t})};this.$_registerTriggerListeners(this.$_targetNodes,gt,this.triggers,this.hideTriggers,e),this.$_registerTriggerListeners([this.$_popperNode],gt,this.popperTriggers,this.popperHideTriggers,e)},$_registerEventListeners(t,e,n){this.$_events.push({targetNodes:t,eventType:e,handler:n}),t.forEach(t=>t.addEventListener(e,n,pt?{passive:!0}:void 0))},$_registerTriggerListeners(t,e,n,i,o){let r=n;null!=i&&(r="function"==typeof i?i(r):i),r.forEach(n=>{const i=e[n];i&&this.$_registerEventListeners(t,i,o)})},$_removeEventListeners(t){const e=[];this.$_events.forEach(n=>{const{targetNodes:i,eventType:o,handler:r}=n;t&&t!==o?e.push(n):i.forEach(t=>t.removeEventListener(o,r))}),this.$_events=e},$_refreshListeners(){this.$_isDisposed||(this.$_removeEventListeners(),this.$_addEventListeners())},$_handleGlobalClose(t,e=!1){this.$_showFrameLocked||(this.hide({event:t}),t.closePopover?this.$emit("close-directive"):this.$emit("auto-hide"),e&&(this.$_preventShow=!0,setTimeout(()=>{this.$_preventShow=!1},300)))},$_detachPopperNode(){this.$_popperNode.parentNode&&this.$_popperNode.parentNode.removeChild(this.$_popperNode)},$_swapTargetAttrs(t,e){for(const n of this.$_targetNodes){const i=n.getAttribute(t);i&&(n.removeAttribute(t),n.setAttribute(e,i))}},$_applyAttrsToTarget(t){for(const e of this.$_targetNodes)for(const n in t){const i=t[n];null==i?e.removeAttribute(n):e.setAttribute(n,i)}},$_updateParentShownChildren(t){let e=this.parentPopper;for(;e;)t?e.shownChildren.add(this.randomId):(e.shownChildren.delete(this.randomId),e.$_pendingHide&&e.hide()),e=e.parentPopper},$_isAimingPopper(){const t=this.$el.getBoundingClientRect();if(Pt>=t.left&&Pt<=t.right&&Lt>=t.top&&Lt<=t.bottom){const t=this.$_popperNode.getBoundingClientRect(),e=Pt-Ot,n=Lt-Bt,i=t.left+t.width/2-Ot+(t.top+t.height/2)-Bt+t.width+t.height,o=Ot+e*i,r=Bt+n*i;return Nt(Ot,Bt,o,r,t.left,t.top,t.left,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.top,t.right,t.top)||Nt(Ot,Bt,o,r,t.right,t.top,t.right,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.bottom,t.right,t.bottom)}return!1}},render(){return this.$scopedSlots.default(this.slotData)[0]}});function $t(t){for(let e=0;e=0;i--){const o=wt[i];try{const i=o.$_containsGlobalTarget=Tt(o,t);o.$_pendingHide=!1,requestAnimationFrame(()=>{if(o.$_pendingHide=!1,!n[o.randomId]&&Et(o,i,t)){if(o.$_handleGlobalClose(t,e),!t.closeAllPopover&&t.closePopover&&i){let t=o.parentPopper;for(;t;)n[t.randomId]=!0,t=t.parentPopper;return}let r=o.parentPopper;for(;r&&Et(r,r.$_containsGlobalTarget,t);)r.$_handleGlobalClose(t,e),r=r.parentPopper}})}catch(t){}}}function Tt(t,e){const n=t.popperNode();return t.$_mouseDownContains||n.contains(e.target)}function Et(t,e,n){return n.closeAllPopover||n.closePopover&&e||t.autoHide&&!e}"undefined"!=typeof document&&"undefined"!=typeof window&&(ft?(document.addEventListener("touchstart",$t,!pt||{passive:!0,capture:!0}),document.addEventListener("touchend",(function(t){kt(t,!0)}),!pt||{passive:!0,capture:!0})):(window.addEventListener("mousedown",$t,!0),window.addEventListener("click",(function(t){kt(t)}),!0)),window.addEventListener("resize",(function(t){for(let e=0;e=0&&l<=1&&c>=0&&c<=1}var At;function zt(){zt.init||(zt.init=!0,At=-1!==function(){var t=window.navigator.userAgent,e=t.indexOf("MSIE ");if(e>0)return parseInt(t.substring(e+5,t.indexOf(".",e)),10);if(t.indexOf("Trident/")>0){var n=t.indexOf("rv:");return parseInt(t.substring(n+3,t.indexOf(".",n)),10)}var i=t.indexOf("Edge/");return i>0?parseInt(t.substring(i+5,t.indexOf(".",i)),10):-1}())}function Mt(t,e,n,i,o,r,s,a,l,c){"boolean"!=typeof s&&(l=a,a=s,s=!1);var u,d="function"==typeof n?n.options:n;if(t&&t.render&&(d.render=t.render,d.staticRenderFns=t.staticRenderFns,d._compiled=!0,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(u=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,l(t)),t&&t._registeredComponents&&t._registeredComponents.add(r)},d._ssrRegister=u):e&&(u=s?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h=d.render;d.render=function(t,e){return u.call(e),h(t,e)}}else{var p=d.beforeCreate;d.beforeCreate=p?[].concat(p,u):[u]}return n}"undefined"!=typeof window&&window.addEventListener("mousemove",t=>{Ot=Pt,Bt=Lt,Pt=t.clientX,Lt=t.clientY},pt?{passive:!0}:void 0);var Ht={name:"ResizeObserver",props:{emitOnMount:{type:Boolean,default:!1},ignoreWidth:{type:Boolean,default:!1},ignoreHeight:{type:Boolean,default:!1}},mounted:function(){var t=this;zt(),this.$nextTick((function(){t._w=t.$el.offsetWidth,t._h=t.$el.offsetHeight,t.emitOnMount&&t.emitSize()}));var e=document.createElement("object");this._resizeObject=e,e.setAttribute("aria-hidden","true"),e.setAttribute("tabindex",-1),e.onload=this.addResizeHandlers,e.type="text/html",At&&this.$el.appendChild(e),e.data="about:blank",At||this.$el.appendChild(e)},beforeDestroy:function(){this.removeResizeHandlers()},methods:{compareAndNotify:function(){(!this.ignoreWidth&&this._w!==this.$el.offsetWidth||!this.ignoreHeight&&this._h!==this.$el.offsetHeight)&&(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.emitSize())},emitSize:function(){this.$emit("notify",{width:this._w,height:this._h})},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject&&this._resizeObject.onload&&(!At&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),this.$el.removeChild(this._resizeObject),this._resizeObject.onload=null,this._resizeObject=null)}}},Dt=function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"resize-observer",attrs:{tabindex:"-1"}})};Dt._withStripped=!0;var Rt=Mt({render:Dt,staticRenderFns:[]},void 0,Ht,"data-v-8859cc6c",!1,void 0,!1,void 0,void 0,void 0);var jt={version:"1.0.1",install:function(t){t.component("resize-observer",Rt),t.component("ResizeObserver",Rt)}},It=null;"undefined"!=typeof window?It=window.Vue:void 0!==i.g&&(It=i.g.Vue),It&&It.use(jt);var qt={computed:{themeClass(){return function(t){const e=[t];let n=dt.themes[t]||{};do{n.$extend&&!n.$resetCss?(e.push(n.$extend),n=dt.themes[n.$extend]||{}):n=null}while(n);return e.map(t=>"v-popper--theme-"+t)}(this.theme)}}},Wt={name:"VPopperContent",components:{ResizeObserver:Rt},mixins:[qt],props:{popperId:String,theme:String,shown:Boolean,mounted:Boolean,skipTransition:Boolean,autoHide:Boolean,handleResize:Boolean,classes:Object,result:Object},methods:{toPx:t=>null==t||isNaN(t)?null:t+"px"}};function Ft(t,e,n,i,o,r,s,a){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),s?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},c._ssrRegister=l):o&&(l=a?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}const Vt={};var Ut=Ft(Wt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{ref:"popover",staticClass:"v-popper__popper",class:[t.themeClass,t.classes.popperClass,{"v-popper__popper--shown":t.shown,"v-popper__popper--hidden":!t.shown,"v-popper__popper--show-from":t.classes.showFrom,"v-popper__popper--show-to":t.classes.showTo,"v-popper__popper--hide-from":t.classes.hideFrom,"v-popper__popper--hide-to":t.classes.hideTo,"v-popper__popper--skip-transition":t.skipTransition,"v-popper__popper--arrow-overflow":t.result&&t.result.arrow.overflow,"v-popper__popper--no-positioning":!t.result}],style:t.result?{position:t.result.strategy,transform:"translate3d("+Math.round(t.result.x)+"px,"+Math.round(t.result.y)+"px,0)"}:void 0,attrs:{id:t.popperId,"aria-hidden":t.shown?"false":"true",tabindex:t.autoHide?0:void 0,"data-popper-placement":t.result?t.result.placement:void 0},on:{keyup:function(e){if(!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"]))return null;t.autoHide&&t.$emit("hide")}}},[n("div",{staticClass:"v-popper__backdrop",on:{click:function(e){t.autoHide&&t.$emit("hide")}}}),n("div",{staticClass:"v-popper__wrapper",style:t.result?{transformOrigin:t.result.transformOrigin}:void 0},[n("div",{ref:"inner",staticClass:"v-popper__inner"},[t.mounted?[n("div",[t._t("default")],2),t.handleResize?n("ResizeObserver",{on:{notify:function(e){return t.$emit("resize",e)}}}):t._e()]:t._e()],2),n("div",{ref:"arrow",staticClass:"v-popper__arrow-container",style:t.result?{left:t.toPx(t.result.arrow.x),top:t.toPx(t.result.arrow.y)}:void 0},[n("div",{staticClass:"v-popper__arrow-outer"}),n("div",{staticClass:"v-popper__arrow-inner"})])])])}),[],!1,Qt,null,null,null);function Qt(t){for(let t in Vt)this[t]=Vt[t]}var Xt=function(){return Ut.exports}(),Yt={methods:{show(...t){return this.$refs.popper.show(...t)},hide(...t){return this.$refs.popper.hide(...t)},dispose(...t){return this.$refs.popper.dispose(...t)},onResize(...t){return this.$refs.popper.onResize(...t)}}},Gt={name:"VPopperWrapper",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt,qt],inheritAttrs:!1,props:{theme:{type:String,default(){return this.$options.vPopperTheme}}},methods:{getTargetNodes(){return Array.from(this.$refs.reference.children).filter(t=>t!==this.$refs.popperContent.$el)}}};const Kt={};var Zt=Ft(Gt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Popper",t._g(t._b({ref:"popper",attrs:{theme:t.theme,"target-nodes":t.getTargetNodes,"reference-node":function(){return t.$refs.reference},"popper-node":function(){return t.$refs.popperContent.$el}},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.popperId,o=e.isShown,r=e.shouldMountContent,s=e.skipTransition,a=e.autoHide,l=e.show,c=e.hide,u=e.handleResize,d=e.onResize,h=e.classes,p=e.result;return[n("div",{ref:"reference",staticClass:"v-popper",class:[t.themeClass,{"v-popper--shown":o}]},[t._t("default",null,{shown:o,show:l,hide:c}),n("PopperContent",{ref:"popperContent",attrs:{"popper-id":i,theme:t.theme,shown:o,mounted:r,"skip-transition":s,"auto-hide":a,"handle-resize":u,classes:h,result:p},on:{hide:c,resize:d}},[t._t("popper",null,{shown:o,hide:c})],2)],2)]}}],null,!0)},"Popper",t.$attrs,!1),t.$listeners))}),[],!1,Jt,null,null,null);function Jt(t){for(let t in Kt)this[t]=Kt[t]}var te=function(){return Zt.exports}(),ee=ut(ct({},te),{name:"VDropdown",vPopperTheme:"dropdown"});const ne={};var ie=Ft(ee,void 0,void 0,!1,oe,null,null,null);function oe(t){for(let t in ne)this[t]=ne[t]}var re=function(){return ie.exports}(),se=ut(ct({},te),{name:"VMenu",vPopperTheme:"menu"});const ae={};var le=Ft(se,void 0,void 0,!1,ce,null,null,null);function ce(t){for(let t in ae)this[t]=ae[t]}var ue=function(){return le.exports}(),de=ut(ct({},te),{name:"VTooltip",vPopperTheme:"tooltip"});const he={};var pe=Ft(de,void 0,void 0,!1,fe,null,null,null);function fe(t){for(let t in he)this[t]=he[t]}var me=function(){return pe.exports}(),ve={name:"VTooltipDirective",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt],inheritAttrs:!1,props:{theme:{type:String,default:"tooltip"},html:{type:Boolean,default(){return ht(this.theme,"html")}},content:{type:[String,Number,Function],default:null},loadingContent:{type:String,default(){return ht(this.theme,"loadingContent")}}},data:()=>({asyncContent:null}),computed:{isContentAsync(){return"function"==typeof this.content},loading(){return this.isContentAsync&&null==this.asyncContent},finalContent(){return this.isContentAsync?this.loading?this.loadingContent:this.asyncContent:this.content}},watch:{content:{handler(){this.fetchContent(!0)},immediate:!0},async finalContent(t){await this.$nextTick(),this.$refs.popper.onResize()}},created(){this.$_fetchId=0},methods:{fetchContent(t){if("function"==typeof this.content&&this.$_isShown&&(t||!this.$_loading&&null==this.asyncContent)){this.asyncContent=null,this.$_loading=!0;const t=++this.$_fetchId,e=this.content(this);e.then?e.then(e=>this.onResult(t,e)):this.onResult(t,e)}},onResult(t,e){t===this.$_fetchId&&(this.$_loading=!1,this.asyncContent=e)},onShow(){this.$_isShown=!0,this.fetchContent()},onHide(){this.$_isShown=!1}}};const ge={};var ye=Ft(ve,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Popper",t._g(t._b({ref:"popper",attrs:{theme:t.theme,"popper-node":function(){return t.$refs.popperContent.$el}},on:{"apply-show":t.onShow,"apply-hide":t.onHide},scopedSlots:t._u([{key:"default",fn:function(e){var i=e.popperId,o=e.isShown,r=e.shouldMountContent,s=e.skipTransition,a=e.autoHide,l=e.hide,c=e.handleResize,u=e.onResize,d=e.classes,h=e.result;return[n("PopperContent",{ref:"popperContent",class:{"v-popper--tooltip-loading":t.loading},attrs:{"popper-id":i,theme:t.theme,shown:o,mounted:r,"skip-transition":s,"auto-hide":a,"handle-resize":c,classes:d,result:h},on:{hide:l,resize:u}},[t.html?n("div",{domProps:{innerHTML:t._s(t.finalContent)}}):n("div",{domProps:{textContent:t._s(t.finalContent)}})])]}}])},"Popper",t.$attrs,!1),t.$listeners))}),[],!1,we,null,null,null);function we(t){for(let t in ge)this[t]=ge[t]}var be=function(){return ye.exports}();function _e(t,e,n){let i;const o=typeof e;return i="string"===o?{content:e}:e&&"object"===o?e:{content:!1},i.placement=function(t,e){let n=t.placement;if(!n&&e)for(const t of mt)e[t]&&(n=t);return n||(n=ht(t.theme||"tooltip","placement")),n}(i,n),i.targetNodes=()=>[t],i.referenceNode=()=>t,i}function Se(t,e,n){const i=_e(t,e,n),o=t.$_popper=new(et())({mixins:[Yt],data:()=>({options:i}),render(t){const e=this.options,{theme:n,html:i,content:o,loadingContent:r}=e,s=((t,e)=>{var n={};for(var i in t)st.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&rt)for(var i of rt(t))e.indexOf(i)<0&&at.call(t,i)&&(n[i]=t[i]);return n})(e,["theme","html","content","loadingContent"]);return t(be,{props:{theme:n,html:i,content:o,loadingContent:r},attrs:s,ref:"popper"})},devtools:{hide:!0}}),r=document.createElement("div");return document.body.appendChild(r),o.$mount(r),t.classList&&t.classList.add("v-popper--has-tooltip"),o}function xe(t){t.$_popper&&(t.$_popper.$destroy(),delete t.$_popper,delete t.$_popperOldShown),t.classList&&t.classList.remove("v-popper--has-tooltip")}function Ce(t,{value:e,oldValue:n,modifiers:i}){const o=_e(t,e,i);if(!o.content||ht(o.theme||"tooltip","disabled"))xe(t);else{let n;t.$_popper?(n=t.$_popper,n.options=o):n=Se(t,e,i),void 0!==e.shown&&e.shown!==t.$_popperOldShown&&(t.$_popperOldShown=e.shown,e.shown?n.show():n.hide())}}var $e={bind:Ce,update:Ce,unbind(t){xe(t)}};function ke(t){t.addEventListener("click",Ee),t.addEventListener("touchstart",Oe,!!pt&&{passive:!0})}function Te(t){t.removeEventListener("click",Ee),t.removeEventListener("touchstart",Oe),t.removeEventListener("touchend",Be),t.removeEventListener("touchcancel",Pe)}function Ee(t){const e=t.currentTarget;t.closePopover=!e.$_vclosepopover_touch,t.closeAllPopover=e.$_closePopoverModifiers&&!!e.$_closePopoverModifiers.all}function Oe(t){if(1===t.changedTouches.length){const e=t.currentTarget;e.$_vclosepopover_touch=!0;const n=t.changedTouches[0];e.$_vclosepopover_touchPoint=n,e.addEventListener("touchend",Be),e.addEventListener("touchcancel",Pe)}}function Be(t){const e=t.currentTarget;if(e.$_vclosepopover_touch=!1,1===t.changedTouches.length){const n=t.changedTouches[0],i=e.$_vclosepopover_touchPoint;t.closePopover=Math.abs(n.screenY-i.screenY)<20&&Math.abs(n.screenX-i.screenX)<20,t.closeAllPopover=e.$_closePopoverModifiers&&!!e.$_closePopoverModifiers.all}}function Pe(t){t.currentTarget.$_vclosepopover_touch=!1}var Le={bind(t,{value:e,modifiers:n}){t.$_closePopoverModifiers=n,(void 0===e||e)&&ke(t)},update(t,{value:e,oldValue:n,modifiers:i}){t.$_closePopoverModifiers=i,e!==n&&(void 0===e||e?ke(t):Te(t))},unbind(t){Te(t)}};const Ne=re,Ae=me;const ze={version:"1.0.0-beta.14",install:function(t,e={}){t.$_vTooltipInstalled||(t.$_vTooltipInstalled=!0,function t(e,n){for(const i in n)Object.prototype.hasOwnProperty.call(n,i)&&("object"==typeof n[i]&&e[i]?t(e[i],n[i]):e[i]=n[i])}(dt,e),t.directive("tooltip",$e),t.directive("close-popper",Le),t.component("v-tooltip",me),t.component("VTooltip",me),t.component("v-dropdown",re),t.component("VDropdown",re),t.component("v-menu",ue),t.component("VMenu",ue))},options:dt};let Me=null;"undefined"!=typeof window?Me=window.Vue:void 0!==i.g&&(Me=i.g.Vue),Me&&Me.use(ze);var He=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["alert box-container",t.containerStyle(),t.addClass,{"d-flex":t.seamlessHeaderBool()}],style:t.customStyle()},[t.seamlessHeaderBool()?n("div",{staticClass:"d-flex"},[t.iconBool()?n("div",{class:["icon-wrapper",t.iconStyle()],style:t.customIconColorStyle()},[t._t("icon",(function(){return[n("i",{class:["fas",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(" "),n("div",{staticClass:"vertical-divider",class:t.getBootstrapAlertStyle(),attrs:{"aria-hidden":"true"}})]):t._e(),t._v(" "),n("div",{staticClass:"header-and-body"},[t.headerBool()?n("div",{class:["box-header-wrapper",{"alert-dismissible-box":t.dismissible}]},[t.iconBool()&&!t.seamlessHeaderBool()?n("div",{class:["icon-wrapper",t.iconStyle()],style:t.customIconColorStyle()},[t._t("icon",(function(){return[n("i",{class:["fas",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(" "),n("div",{staticClass:"box-header"},[t._t("header")],2),t._v(" "),t.dismissible?n("button",{staticClass:"btn-close close-with-heading",attrs:{type:"button","data-bs-dismiss":"alert","aria-label":"Close"}}):t._e()]):t._e(),t._v(" "),n("div",{class:["box-body-wrapper",{"alert-dismissible-box":t.dismissible&&!t.headerBool(),"box-body-wrapper-with-heading":t.headerBool()}]},[t.iconBool()&&!t.headerBool()?n("div",{class:["icon-wrapper",t.iconStyle()],style:t.customIconColorStyle()},[t._t("icon",(function(){return[n("i",{class:["fas",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(" "),t.seamlessNoHeaderBool()?n("div",{staticClass:"vertical-divider",class:t.getBootstrapAlertStyle(),attrs:{"aria-hidden":"true"}}):t._e(),t._v(" "),n("div",{staticClass:"contents",style:t.customColorStyle()},[t._t("default")],2),t._v(" "),t.dismissible&&!t.headerBool()?n("button",{staticClass:"btn-close",attrs:{type:"button","data-bs-dismiss":"alert","aria-label":"Close"}}):t._e()])])])};He._withStripped=!0;var De=function(t){return"string"==typeof t?""===t||"true"===t||"false"!==t&&"null"!==t&&"undefined"!==t&&t:t};function Re(t){return"string"==typeof t?""===t||"true"===t||"false"!==t&&"null"!==t&&"undefined"!==t&&t:t}function je(t){return"number"==typeof t?t:null==t||isNaN(Number(t))?null:Number(t)}function Ie(t){var e=t.split("#"),n="";return e.length>1&&(n=e[1]),n}function qe(t,e,n,i,o,r,s,a){var l,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),s?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},c._ssrRegister=l):o&&(l=a?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(t,e){return l.call(e),u(t,e)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:t,options:c}}const We=qe({props:{dismissible:{type:Boolean,default:!1},backgroundColor:{type:String,default:null},borderColor:{type:String,default:null},borderLeftColor:{type:String,default:null},color:{type:String,default:null},icon:{type:String,default:null},iconSize:{type:String,default:null},iconColor:{type:String,default:null},type:{type:String,default:""},addClass:{type:String,default:""},light:{type:Boolean,default:!1},seamless:{type:Boolean,default:!1},noIcon:{type:Boolean,default:!1},noBackground:{type:Boolean,default:!1},noBorder:{type:Boolean,default:!1},theme:{type:String,default:""}},computed:{bootStrapStyle:function(){return function(t,e){var n,i,o=["warning","info","definition","success","danger","tip","important","wrong"].includes(t)?t:"",r=["primary","secondary","success","danger","warning","info","light","dark"].includes(e)?e:"";if(r)n=r;else switch(o){case"warning":n="warning";break;case"info":n="info";break;case"definition":n="primary";break;case"success":case"tip":n="success";break;case"important":case"wrong":n="danger";break;default:n="default"}switch(o){case"wrong":i="fa-times";break;case"warning":i="fa-exclamation";break;case"info":i="fa-info";break;case"success":i="fa-check";break;case"important":i="fa-flag";break;case"tip":i="fa-lightbulb";break;case"definition":i="fa-atlas";break;default:i=""}return{style:n,icon:i}}(this.type,this.theme)}},methods:{isSeamless:function(){return!this.light&&this.seamless},seamlessNoHeaderBool:function(){return this.isSeamless()&&!this.headerBool()},seamlessHeaderBool:function(){return this.isSeamless()&&this.headerBool()},headerBool:function(){return!!this.$scopedSlots.header},iconBool:function(){var t=!!this.$scopedSlots.icon;return!this.noIcon&&this.type||t},containerStyle:function(){var t;return t=this.light?"".concat(this.getBootstrapBorderStyle()," alert-border-left"):this.seamless?"seamless":this.getBootstrapAlertStyle(),this.noBackground&&(t+=" no-background"),this.noBorder&&(t+=" no-border"),t},customStyle:function(){var t={};return this.backgroundColor&&(t.backgroundColor=this.backgroundColor,t.borderColor=this.backgroundColor),this.borderColor&&(t.border="1px solid ".concat(this.borderColor)),this.borderLeftColor&&(t.borderLeft="5px solid ".concat(this.borderLeftColor)),t},customColorStyle:function(){return this.color?{color:this.color}:{}},iconStyle:function(){var t="";return this.iconSize&&(t+="fa-".concat(this.iconSize)),(this.light||this.seamless)&&(t+=" ".concat(this.getBootstrapTextStyle())),t},customIconColorStyle:function(){return this.iconColor?{color:"".concat(this.iconColor,"!important")}:{}},getBootstrapAlertStyle:function(){return"alert-".concat(this.bootStrapStyle.style)},getBootstrapTextStyle:function(){return"text-".concat(this.bootStrapStyle.style)},getBootstrapBorderStyle:function(){return"border-".concat(this.bootStrapStyle.style)},getFontAwesomeIconStyle:function(){return this.bootStrapStyle.icon}}},He,[],!1,null,"474166ec",null).exports;var Fe=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("nav",{staticClass:"breadcrumb-divider",attrs:{"aria-label":"breadcrumb"}},[n("ol",{staticClass:"breadcrumb"},[n("li",{staticClass:"notlink breadcrumb-marker"},[t._v("\n ››  \n ")]),t._v(" "),t._l(t.items,(function(e,i){return n("li",{key:i,class:["breadcrumb-item",{notlink:null===e.link}],attrs:{"aria-current":{page:t.isLast(i,t.items.length)}}},[null===e.link?n("a",[t._v("\n "+t._s(e.title)+"\n ")]):n("a",{attrs:{href:e.link}},[t._v("\n "+t._s(e.title)+"\n ")])])}))],2)])])};Fe._withStripped=!0;const Ve=qe({data:function(){return{items:[]}},methods:{isLast:function(t,e){return t===e-1}},mounted:function(){var t=Array.from(document.querySelectorAll("ul")).find((function(t){return t.classList.contains("site-nav-list-root")}));if(t){var e=t.querySelector(".current");if(e){this.items.unshift({title:e.textContent,link:null});for(var n=e.parentElement;n!==t;){if("ul"===n.tagName.toLowerCase()){var i=n.parentElement.querySelector("div"),o=i.querySelector("a[href]");null===o?this.items.unshift({title:i.textContent,link:null}):this.items.unshift({title:o.textContent,link:o.getAttribute("href")})}n=n.parentElement}}}}},Fe,[],!1,null,"ef898034",null).exports;var Ue=i(3),Qe=i.n(Ue),Xe=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isLi?n("li",{ref:"dropdown",class:[{disabled:t.disabledBool},"dropdown",t.addClass]},[t._t("button",(function(){return[n("a",{staticClass:"dropdown-toggle nav-link",class:{disabled:t.disabledBool},attrs:{role:"button","data-bs-toggle":"dropdown"}},[t._t("header"),t._v(" "),n("span",[t._v(t._s(t.tabGroupHeader))])],2)]})),t._v(" "),t._t("dropdown-menu",(function(){return[n("ul",{staticClass:"dropdown-menu",class:[{show:t.show},{"dropdown-menu-end":t.menuAlignRight}]},[t._t("default")],2)]}))],2):t.isSubmenu?n("submenu",{ref:"submenu",scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)}):n("div",{ref:"dropdown",class:[{disabled:t.disabledBool},"btn-group",t.addClass]},[t._t("before"),t._v(" "),t._t("button",(function(){return[n("button",{staticClass:"btn dropdown-toggle",class:[t.btnType,t.btnWithBefore,{"dropdown-toggle-split":t.hasBefore}],attrs:{type:"button",disabled:t.disabledBool,"data-bs-reference":"parent","data-bs-toggle":"dropdown"}},[t._t("header")],2)]})),t._v(" "),t._t("dropdown-menu",(function(){return[n("ul",{staticClass:"dropdown-menu",class:[{show:t.show},{"dropdown-menu-end":t.menuAlignRight}]},[t._t("default")],2)]}))],2)};Xe._withStripped=!0;var Ye=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("li",{ref:"submenu",class:[t.addClass,"dropdown-submenu",{dropend:t.dropright,dropstart:t.dropleft}]},[t._t("button",(function(){return[n("a",{staticClass:"dropdown-item submenu-toggle",class:{disabled:t.disabled},attrs:{role:"button","data-bs-toggle":"dropdown"}},[t._t("header")],2)]})),t._v(" "),t._t("dropdown-menu",(function(){return[n("ul",{staticClass:"dropdown-menu"},[t._t("default")],2)]}))],2)};function Ge(t,n){for(var i=0;i1&&void 0!==arguments[1])||arguments[1];return this&&this.length&&t?(this.each((function(e){tn.push({el:e,callback:t})})),Ke||(Ke=function(t){tn.forEach((function(e){e.el&&(e.el.contains(t.target)||e.el===t.target||e.callback.call(e.el,t,e.el))}))},document.addEventListener("click",Ke,!1),e&&document.addEventListener("touchstart",Ke,!1)),this):this}},{key:"offBlur",value:function(t){return this.each((function(e){tn=tn.filter((function(n){return!(n&&n.el===e&&(!t||n.callback===t))&&e}))})),this}}])&&Ge(e.prototype,n),i&&Ge(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}(),an=sn.prototype;function ln(t,e){var n=[];return Ze.forEach.call(t,(function(i){if(nn(i))~n.indexOf(i)||n.push(i);else if(on(i))for(var o in i)n.push(i[o]);else if(null!==i)return t.get=an.get,t.set=an.set,t.call=an.call,t.owner=e,t})),hn(n,e)}Object.getOwnPropertyNames(Ze).forEach((function(t){"join"!==t&&"copyWithin"!==t&&"fill"!==t&&void 0===an[t]&&(an[t]=Ze[t])})),window&&window.Symbol&&Symbol.iterator&&(an[Symbol.iterator]=an.values=Ze[Symbol.iterator]);var cn=document&&document.createElement("div");function un(t){var e=this;an[t]||(cn[t]instanceof Function?an[t]=function(){for(var n=[],i=!0,o=arguments.length,r=new Array(o),s=0;sn))},preventOverflow:function(t){t.removeAttribute("style");var e=0,n=(window.innerWidth,window.innerHeight),i=t.getBoundingClientRect();if(void 0!==i){var o=i.y,r=(i.x,i.x,t.offsetWidth,i.y+t.offsetHeight);r>n?t.setAttribute("style","bottom: auto; top: ".concat(-(r-n),"px;")):owindow.innerWidth)e.setAttribute("style","left: 0px;");else{var i=e.parentNode.getBoundingClientRect(),o=i.left+e.offsetWidth-window.innerWidth,r=o<0?i.left:i.left-o;e.setAttribute("style","left: ".concat(r,"px;"))}}const vn=qe({props:{addClass:{type:String,default:""},disabled:{type:[Boolean,String],default:!1}},data:function(){return{show:!1,dropright:!0,dropleft:!1}},inject:{isParentNavbar:{default:!1}},computed:{disabledBool:function(){return Re(this.disabled)}},methods:{hideSubmenu:function(){this.show=!1,pn(this.$refs.submenu).find("ul.dropdown-menu").each((function(t){return t.classList.toggle("show",!1)})),this.alignMenuRight()},showSubmenu:function(){var t=this;this.show=!0,pn(this.$refs.submenu).findChildren("ul").each((function(e){e.classList.toggle("show",!0),window.innerWidth<768&&t.isParentNavbar?mn(e):(fn.isRightAlign(e)?t.alignMenuRight():t.alignMenuLeft(),fn.preventOverflow(e))}))},alignMenuRight:function(){this.dropright=!0,this.dropleft=!1},alignMenuLeft:function(){this.dropright=!1,this.dropleft=!0}},mounted:function(){var t=this,e=pn(this.$refs.submenu);this.show&&this.showSubmenu(),e.onBlur((function(){t.hideSubmenu()}),!1),e.findChildren("a,button").on("click",(function(e){return e.preventDefault(),e.stopPropagation(),t.disabledBool||(t.show?t.hideSubmenu():t.showSubmenu()),!1})),e.findChildren("a,button").on("mouseover",(function(n){if(n.preventDefault(),window.innerWidth>767){if(e.findChildren("ul.show").length>0||t.disabledBool)return!1;n.currentTarget.click(),t.$parent.$parent.$children.forEach((function(e){e.$el===t.$el?e.$refs.submenu.showSubmenu():e.$refs.submenu.hideSubmenu()}))}return!1}))},beforeDestroy:function(){var t=pn(this.$refs.submenu);t.offBlur(),t.findChildren("a,button").off(),t.findChildren("ul").off()}},Ye,[],!1,null,"3c82541c",null).exports;const gn=qe({components:{Submenu:vn},props:{disabled:{type:[Boolean,String],default:!1},type:{type:String,default:"light"},tabGroupHeader:{type:String,default:""},menuAlignRight:{type:Boolean,default:!1},addClass:{type:String,default:""}},provide:{hasParentDropdown:!0},inject:{hasParentDropdown:{default:void 0},isParentNavbar:{default:!1}},data:function(){return{show:!1}},computed:{btnType:function(){return"btn-".concat(this.type)},disabledBool:function(){return Re(this.disabled)},isLi:function(){return this.$parent._navbar||this.$parent.menu||this.$parent._tabset},isSubmenu:function(){return this.hasParentDropdown},menu:function(){return!this.$parent||this.$parent.navbar},submenu:function(){return this.$parent&&(this.$parent.menu||this.$parent.submenu)},slots:function(){return this.$scopedSlots.default},hasBefore:function(){return!!this.$scopedSlots.before},btnWithBefore:function(){return this.hasBefore?"btn-with-before":""}},methods:{blur:function(){var t=this;this.unblur(),this._hide=setTimeout((function(){t._hide=null,t.hideDropdownMenu()}),100)},unblur:function(){this._hide&&(clearTimeout(this._hide),this._hide=null)},hideDropdownMenu:function(){var t=this;this.show=!1,pn(this.$refs.dropdown).findChildren("ul").each((function(e){e.classList.toggle("show",!1),window.innerWidth<768&&t.isParentNavbar&&e.style.removeProperty("left")}))},showDropdownMenu:function(){var t=this;this.show=!0,pn(this.$refs.dropdown).findChildren("ul").each((function(e){e.classList.toggle("show",!0),window.innerWidth<768&&t.isParentNavbar&&mn(e)}))}},mounted:function(){var t=this,e=pn(this.$refs.dropdown);this.$slots.button&&e.findChildren(".dropdown-toggle").forEach((function(t){return t.setAttribute("data-bs-toggle","dropdown")})),this.show&&this.showDropdownMenu(),e.onBlur((function(){t.hideDropdownMenu()}),!1),e.findChildren("a,button.dropdown-toggle").on("click",(function(e){return e.preventDefault(),t.disabledBool||(t.show?t.hideDropdownMenu():t.showDropdownMenu()),!1})),e.findChildren("ul").on("click","li>a",(function(e){e.target.classList.contains("submenu-toggle")||t.hideDropdownMenu()}))},beforeDestroy:function(){var t=pn(this.$refs.dropdown);t.offBlur(),t.findChildren("a,button").off(),t.findChildren("ul").off()}},Xe,[],!1,null,"99624572",null).exports;var yn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("nav",{ref:"navbar",class:["navbar","navbar-expand-md","d-print-none",t.themeOptions,t.addClass,t.fixedOptions]},[n("div",{staticClass:"container-fluid"},[n("div",{staticClass:"navbar-left"},[t._t("brand")],2),t._v(" "),n("div",{ref:"navbarDefault",staticClass:"navbar-default"},[n("ul",{staticClass:"navbar-nav me-auto mt-2 mt-lg-0"},[t._t("default")],2)]),t._v(" "),t.slots.right?n("ul",{staticClass:"navbar-nav navbar-right"},[t._t("right")],2):t._e()])]),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.isLowerNavbarShowing,expression:"isLowerNavbarShowing"}],ref:"lowerNavbar",staticClass:"lower-navbar-container"},[t._t("lower-navbar",(function(){return[n("site-nav-button"),t._v(" "),n("page-nav-button")]}))],2)])};function wn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n0?this.isLowerNavbarShowing=!0:this.isLowerNavbarShowing=!1}},created:function(){this._navbar=!0},mounted:function(){var t=this,e=pn('.dropdown>[data-bs-toggle="dropdown"]',this.$el).parent();e.on("click",".dropdown-toggle",(function(t){t.preventDefault(),e.each((function(e){e.contains(t.target)&&e.classList.toggle("open")}))})).on("click",".dropdown-menu>li>a",(function(t){e.each((function(e){e.contains(t.target)&&e.classList.remove("open")}))})).onBlur((function(t){e.each((function(e){e.contains(t.target)||e.classList.remove("open")}))})),this.highlightLink(window.location.href);var n=pn(this.$refs.navbarDefault).find(".current")[0];n&&window.innerWidth<768&&n.offsetLeft+n.offsetWidth>window.innerWidth&&(this.$refs.navbarDefault.scrollLeft=n.offsetLeft+n.offsetWidth-window.innerWidth),this.toggleLowerNavbar(),pn(window).on("resize",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).on("wheel",(function(e){window.innerWidth<768&&!function(t){for(var e=0;e0},srcWithoutFragment:function(){return this.src.split("#")[0]},shouldShowHeader:function(){return!this.localExpanded||!this.expandHeaderless},shouldShowPeek:function(){return this.peek&&!this.localExpanded},collapsedPanelHeight:function(){return this.peek?125:0}},data:function(){return{localExpanded:!1,localMinimized:!1,wasRetrieverLoaded:!1,isRetrieverLoadDone:!this.src,fragment:""}},methods:{toggle:function(t){var e=this;this.wasRetrieverLoaded?(this.localExpanded?(t&&(this.$refs.panel.style.maxHeight="".concat(this.$refs.panel.scrollHeight,"px")),requestAnimationFrame((function(){if(e.$el.getBoundingClientRect().top<0){var n,i=document.querySelector("header[sticky]");if(null==i)n=0;else{var o=window.getComputedStyle(i,null);n=i.clientHeight-parseFloat(o.paddingTop)-parseFloat(o.paddingBottom)||0}window.scrollTo({top:window.scrollY+e.$el.getBoundingClientRect().top-n-3,left:0,behavior:t?"smooth":"instant"})}e.$refs.panel.style.maxHeight="".concat(e.collapsedPanelHeight,"px")}))):(this.$refs.panel.style.transition="max-height 0.5s ease-in-out",this.$refs.panel.style.maxHeight="".concat(this.$refs.panel.scrollHeight,"px")),this.localExpanded=!this.localExpanded):this.open()},close:function(){this.localMinimized=!0,this.localExpanded=!1},open:function(){var t=this;this.localMinimized=!1,this.$nextTick((function(){t.initPanel(),t.localExpanded=!0,t.wasRetrieverLoaded=!0,t.$nextTick((function(){t.$refs.panel.style.maxHeight="".concat(t.$refs.panel.scrollHeight,"px")}))}))},openPopup:function(){window.open(this.popupUrl)},retrieverUpdateMaxHeight:function(){this.isRetrieverLoadDone=!0,this.localExpanded&&(this.expandedBool?this.$refs.panel.style.maxHeight="none":this.$refs.panel.style.maxHeight="".concat(this.$refs.panel.scrollHeight,"px"))},initPanel:function(){var t=this;this.$refs.panel.addEventListener("transitionend",(function(e){t.localExpanded&&t.isRetrieverLoadDone&&e.target===t.$refs.panel&&(t.$refs.panel.style.maxHeight="none")})),this.localExpanded?this.$refs.panel.style.maxHeight="none":this.$refs.panel.style.maxHeight="".concat(this.collapsedPanelHeight,"px")}},created:function(){if(this.src){var t=Ie(this.src);t&&(this.fragment=t)}var e=!this.expandableBool&&"false"!==this.expanded;this.localExpanded=e||this.expandedBool,null===this.localExpanded&&(this.localExpanded=!1),this.wasRetrieverLoaded=this.localExpanded||this.peek,this.localMinimized=this.minimizedBool},mounted:function(){this.localMinimized||this.initPanel()}};var Pn=function(){var t=this.$createElement,e=this._self._c||t;return e("button",{class:["collapse-button","btn",this.isSeamless?"btn-seamless":this.isLightBg?"btn-outline-secondary":"btn-outline-light"],attrs:{type:"button"}},[e("span",{class:["collapse-icon","glyphicon","glyphicon-menu-down",{opened:this.isOpenBool}],attrs:{"aria-hidden":"true"}})])};Pn._withStripped=!0;const Ln=qe({props:{isOpen:{type:[Boolean,String],default:!1},isLightBg:{type:Boolean,default:!0},isSeamless:{type:Boolean,default:!1}},computed:{isOpenBool:function(){return Re(this.isOpen)}}},Pn,[],!1,null,null,null).exports;var Nn=function(){var t=this.$createElement;return(this._self._c||t)("div",[this._v("\n Loading...\n")])};function An(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}Nn._withStripped=!0;const zn=qe({props:{src:{type:String,default:null},fragment:{type:String,default:null},delay:{type:[Boolean,String],default:!1},hasFetched:{type:Boolean,default:!1}},data:function(){return{hasFetchedCopy:this.hasFetched}},computed:{delayBool:function(){return Re(this.delay)},hash:function(){return Ie(this.src)||this.fragment},srcWithoutHash:function(){return this.src.split("#")[0]}},methods:{fetch:function(t){function e(){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(){var t=this;this.srcWithoutHash&&(this.hasFetchedCopy||fetch(this.srcWithoutHash).then((function(t){return t.text()})).then((function(e){var i=e;if(t.hash){var o=document.implementation.createHTMLDocument("");o.body.innerHTML=i,o.querySelectorAll("svg > script").forEach((function(t){return t.remove()})),i=o.querySelector("#".concat(t.hash)).innerHTML}if(t.hasFetchedCopy=!0,void 0===i&&t.hash)t.$el.innerHTML="Error: Failed to retrieve page fragment:"+" ".concat(t.srcWithoutHash,"#").concat(t.hash);else{var r=function(t){for(var e=1;e\n".concat(i,"\n"),data:function(){return r}}))).$mount(t.$el),t.$emit("src-loaded")}})).catch((function(e){console.error(e),t.$el.innerHTML="Error: Failed to retrieve content from source: "+"".concat(t.srcWithoutHash,""),t.$emit("src-loaded")})))}))},mounted:function(){this.$nextTick((function(){this.srcWithoutHash||(this.$el.innerHTML=""),this.delayBool||this.fetch()}))}},Nn,[],!1,null,null,null).exports;const Mn=qe({mixins:[Bn],components:{panelSwitch:Ln,retriever:zn},computed:{showCaret:function(){return this.isSeamless&&this.expandableBool},isSeamless:function(){return"seamless"===this.type},btnType:function(){return"light"===this.type?"btn-outline-secondary":this.isSeamless?"":"btn-outline-".concat(this.type||"secondary")},borderType:function(){return this.isSeamless?"border-0":this.type?"light"===this.type?"":"border-".concat(this.type):""},cardType:function(){return this.isSeamless?"bg-transparent":"bg-".concat(this.type||"light")},isLightBg:function(){return"bg-light"===this.cardType||"bg-warning"===this.cardType}}},On,[],!1,null,"c545cba4",null).exports;var Hn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.localMinimized?n("span",{ref:"cardContainer",class:["card-container",t.addClass]},[t.hasId?n("span",{staticClass:"anchor",attrs:{id:t.panelId}}):t._e(),t._v(" "),n("span",{staticClass:"morph"},[n("button",{staticClass:"morph-display-wrapper btn card-title morph-title",on:{click:function(e){return t.minimalOpen()}}},[t.noMinimizedSwitch?t._e():n("div",{class:["glyphicon","glyphicon-chevron-right"]}),t._v(" "),t._t("_alt",(function(){return[n("span",{staticClass:"card-title"},[t._t("header")],2)]}))],2)])]):n("div",{ref:"cardContainer",class:["card-container",t.addClass]},[t.hasId?n("span",{staticClass:"anchor",attrs:{id:t.panelId}}):t._e(),t._v(" "),n("div",{staticClass:"card card-flex"},[n("div",{class:["header-wrapper",{"header-wrapper-bottom":t.isHeaderAtBottom,"header-toggle":t.isExpandableCard}],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard&&t.minimalToggle()}}},[n("transition",{attrs:{name:"header-fade"}},[n("span",{directives:[{name:"show",rawName:"v-show",value:!t.isHeaderAtBottom,expression:"!isHeaderAtBottom"}],ref:"headerWrapper",class:["card-title",{ellipses:!t.hasHeaderBool}]},[n("span",{staticClass:"card-title-inline"},[t._t("header")],2),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.showDownSwitch,expression:"showDownSwitch"}],staticClass:"minimal-button glyphicon glyphicon-menu-down minimal-menu-down",attrs:{"aria-hidden":"true"}})])]),t._v(" "),n("div",{class:["button-wrapper",{"button-wrapper-expanded":t.isHeaderAtBottom}]},[t._t("button",(function(){return[n("button",{directives:[{name:"show",rawName:"v-show",value:!t.noCloseBool,expression:"!noCloseBool"}],staticClass:"minimal-button",attrs:{type:"button"},on:{click:function(e){return e.stopPropagation(),t.minimalClose()}}},[n("span",{staticClass:"glyphicon glyphicon-remove minimal-close-button",attrs:{"aria-hidden":"true"}})]),t._v(" "),n("button",{directives:[{name:"show",rawName:"v-show",value:null!==t.popupUrl,expression:"popupUrl !== null"}],staticClass:"minimal-button",attrs:{type:"button"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n("span",{staticClass:"glyphicon glyphicon-new-window minimal-popup-button",attrs:{"aria-hidden":"true"}})]),t._v(" "),n("button",{directives:[{name:"show",rawName:"v-show",value:t.isHeaderAtBottom&&t.isExpandableCard&&t.bottomSwitchBool,expression:"isHeaderAtBottom && isExpandableCard && bottomSwitchBool"}],staticClass:"minimal-button",attrs:{type:"button"}},[n("span",{staticClass:"glyphicon glyphicon-menu-up minimal-menu-up",attrs:{"aria-hidden":"true"}})])]}))],2)],1),t._v(" "),n("div",{ref:"panel",staticClass:"card-collapse",class:{"card-peek-collapsed":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n("div",{staticClass:"card-body"},[t._t("default"),t._v(" "),t.hasSrc?n("retriever",{ref:"retriever",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{"src-loaded":t.retrieverUpdateMaxHeight}}):t._e()],2):t._e()])])])};Hn._withStripped=!0;var Dn=qe({mixins:[Bn],components:{retriever:zn},data:function(){return{isHeaderAtBottom:!1}},computed:{showDownSwitch:function(){return this.hasHeaderBool&&this.isExpandableCard&&!this.noSwitchBool}},methods:{minimalToggle:function(){var t=this;if(this.localExpanded){this.$refs.panel.addEventListener("transitionend",(function e(n){n.target===t.$refs.panel&&(t.isHeaderAtBottom=!1,t.$refs.panel.removeEventListener("transitionend",e))}))}else this.isHeaderAtBottom=!0;this.toggle(!0)},minimalOpen:function(){this.open(),this.isHeaderAtBottom=!0},minimalClose:function(){this.close(),this.isHeaderAtBottom=!1}},created:function(){this.isHeaderAtBottom=this.localExpanded}},Hn,[],!1,null,"6cec1f15",null);const Rn=qe({components:{nestedPanel:Mn,minimalPanel:Dn.exports},props:{panelId:{type:String,default:null},type:{type:String,default:null}},computed:{isMinimal:function(){return"minimal"===this.type}}},En,[],!1,null,null,null).exports;var jn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["annotate-image-wrapper",t.addClass]},[n("img",{ref:"pic",staticClass:"annotate-image",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{"~load":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(" "),n("div",{staticStyle:{top:"0",left:"0",height:"0"}},[t._t("default")],2)])};jn._withStripped=!0;const In=qe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:""},width:{type:String,default:""},lazy:{type:Boolean,default:!1},addClass:{type:String,default:""}},computed:{hasWidth:function(){return""!==this.width},hasHeight:function(){return""!==this.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?"lazy":"eager"}},data:function(){return{widthFromHeight:"",heightFromWidth:""}},methods:{computeWidthAndHeight:function(){var t=this.$refs.pic,e=t.naturalHeight,n=t.naturalWidth/e;this.hasWidth?this.heightFromWidth=Math.round(je(this.width)/n).toString():this.hasHeight&&(this.widthFromHeight=Math.round(je(this.height)*n).toString(),this.heightFromWidth=this.height)}},provide:function(){return{width:this.width,height:this.height,src:this.src}}},jn,[],!1,null,null,null).exports;var qn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t.hasBottomText&&t.hasLabel?n("div",{staticClass:"legend-wrapper"},[n("div",{staticClass:"text-header"},[t._v("\n "+t._s(t.computedBottomHeader)+"\n ")]),t._v(" "),t.hasContent?n("div",[t._t("content")],2):t._e()]):t._e(),t._v(" "),n("div",{staticClass:"annotate-point"},[t.isMounted?n("div",{staticClass:"popover-annotation"},[n("div",{style:t.pointPosition},[t.isMounted?n("v-popover",{attrs:{placement:t.placement,delay:0,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,distance:t.computeDistance,disabled:!t.hasPopover,skidding:t.computeSkidding,"arrow-padding":t.computeArrowPadding,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[t.hasContent||t.hasHeader?n("div",{staticClass:"popover-container"},[t.hasHeader?n("h3",{staticClass:"popover-header"},[t._t("header")],2):t._e(),t._v(" "),t.hasContent?n("div",{staticClass:"popover-body"},[t._t("content")],2):t._e()]):t._e()]},proxy:!0}],null,!0)},[n("div",{staticClass:"hover-wrapper"},[t._t("default",(function(){return[n("button",{staticClass:"hover-point",style:t.pointStyle})]})),t._v(" "),n("div",{staticClass:"hover-label",style:t.labelStyle},[t._t("label")],2)],2)]):t._e()],1)]):t._e()])])};qn._withStripped=!0;const Wn=qe({props:{content:{type:String,default:""},header:{type:String,default:""},placement:{type:String,default:"top"},x:{type:String,default:null},y:{type:String,default:null},color:{type:String,default:"green"},textColor:{type:String,default:"black"},fontSize:{type:String,default:"14"},opacity:{type:String,default:"0.3"},size:{type:String,default:"40"},label:{type:String,default:""},legend:{type:String,default:"popover"},trigger:{type:String,default:"click"}},data:function(){return{targetEl:{},isMounted:!1,width:this.width,height:this.height,src:this.src}},inject:["width","height","src"],computed:{pointPosition:function(){var t=this;this.computeImage((function(){t.width=t.parentEl.offsetWidth,t.height=t.parentEl.offsetHeight}));var e=100*(this.toDecimal(this.x)-this.size/2/this.width),n=100*(this.toDecimal(this.y)-this.size/2/this.height);return{left:"".concat(e,"%"),top:"".concat(n,"%"),position:"absolute",pointerEvents:"all"}},pointStyle:function(){var t=this.hasPopover?"pointer":"default";return{backgroundColor:this.color,opacity:this.opacity,width:"".concat(this.size,"px"),height:"".concat(this.size,"px"),cursor:t}},labelStyle:function(){return{fontSize:"".concat(Math.min(this.fontSize,this.size),"px"),color:this.textColor}},triggers:function(){return this.trigger.split(" ")},computeDistance:function(){return"top"===this.placement?je(this.size*(2/3)):je(this.size/10)},computeSkidding:function(){return"left"===this.placement||"right"===this.placement?-je(this.size/4):0},computeArrowPadding:function(){return"left"===this.placement||"right"===this.placement?je(this.size/2):0},hasHeader:function(){return!!this.$scopedSlots.header},hasContent:function(){return!!this.$scopedSlots.content},hasWidth:function(){return""!==this.width},hasHeight:function(){return""!==this.height},hasLabel:function(){return!!this.$scopedSlots.label},hasBottomText:function(){return"bottom"===this.legend||"both"===this.legend},hasPopover:function(){return(this.hasContent||this.hasHeader)&&("popover"===this.legend||"both"===this.legend)},computedBottomHeader:function(){return""!==this.label&&""===this.header?this.label:""===this.label&&""!==this.header?this.header:"".concat(this.label,": ").concat(this.header)}},methods:{computeImage:function(t){var e=new Image;e.onload=function(){t()},e.src=this.src},toDecimal:function(t){return parseFloat(t)/100}},mounted:function(){this.targetEl=this.$el,this.isMounted=!0,this.parentEl=this.$el.parentElement.parentElement.querySelector(".annotate-image")}},qn,[],!1,null,null,null).exports;var Fn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:["image-wrapper",t.addClass]},[n("img",{ref:"pic",staticClass:"img-fluid rounded",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{"~load":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(" "),n("span",{staticClass:"image-caption"},[t._t("default")],2)])};Fn._withStripped=!0;const Vn=qe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:""},width:{type:String,default:""},lazy:{type:Boolean,default:!1},addClass:{type:String,default:""}},computed:{hasWidth:function(){return""!==this.width},hasHeight:function(){return""!==this.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?"lazy":"eager"}},data:function(){return{widthFromHeight:"",heightFromWidth:""}},methods:{computeWidthAndHeight:function(){var t=this.$refs.pic,e=t.naturalHeight,n=t.naturalWidth/e;this.hasWidth?this.heightFromWidth=Math.round(je(this.width)/n).toString():this.hasHeight&&(this.widthFromHeight=Math.round(je(this.height)*n).toString(),this.heightFromWidth=this.height)}}},Fn,[],!1,null,null,null).exports;var Un=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["quiz-container",t.addClass]},[n("transition",{attrs:{name:"intro-outro-card"},on:{"after-leave":t.showFirstQuestion}},[3===t.state?n("div",{staticClass:"card intro-outro-card"},[n("div",{staticClass:"card-body"},[t._t("intro",(function(){return[n("h4",[t._v("\n Click start to begin\n ")])]})),t._v(" "),n("h5",[t._v(t._s(t.questions.length)+" questions")]),t._v(" "),n("hr"),t._v(" "),n("button",{staticClass:"btn btn-primary d-inline-block",attrs:{type:"button"},on:{click:t.begin}},[t._v("\n Start\n ")])],2)]):t._e()]),t._v(" "),n("transition",{attrs:{name:"intro-outro-card"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:4===t.state,expression:"state === 4"}],staticClass:"progress intro-outro-card",staticStyle:{height:"1px"}},[n("div",{staticClass:"progress-bar progress-bar-z",style:{width:t.currentQuestion/t.questions.length*100+"%"},attrs:{role:"progressbar","aria-valuemin":"0","aria-valuemax":t.questions.length,"aria-valuenow":t.currentQuestion}})])]),t._v(" "),t._t("default"),t._v(" "),n("transition",{attrs:{name:"intro-outro-card"},on:{"after-enter":t.setScoreCircleStyles,"after-leave":t.showFirstQuestion}},[5===t.state?n("div",{staticClass:"card intro-outro-card"},[n("div",{staticClass:"card-body"},[n("h4",{staticClass:"mb-3"},[t._v("\n "+t._s(t.scoreText)+"\n ")]),t._v(" "),n("svg",{attrs:{viewBox:"0 0 100 100",width:"120px",height:"120px"}},[n("circle",{staticClass:"score-background-circle",attrs:{cx:"50",cy:"50",r:"42"}}),t._v(" "),n("circle",{ref:"score",staticClass:"score-circle",attrs:{cx:"50",cy:"50",r:"42",transform:"rotate(-90, 50, 50)","stroke-dashoffset":"264"}}),t._v(" "),n("text",{staticClass:"score",attrs:{x:"22",y:"57",textLength:"56"}},[t._v(t._s(t.score)+" / "+t._s(t.questions.length))])]),t._v(" "),n("hr"),t._v(" "),n("button",{staticClass:"btn btn-outline-primary",attrs:{type:"button"},on:{click:t.begin}},[t._v("\n Retry\n ")])])]):t._e()])],2)};Un._withStripped=!0;const Qn=qe({name:"Quiz",props:{addClass:{type:String,default:null}},data:function(){return{currentQuestion:0,questions:[],score:0,state:3}},provide:function(){return{questions:this.questions,gotoNextQuestion:this.gotoNextQuestion,showNextQuestion:this.showNextQuestion}},computed:{scoreText:function(){return this.score/this.questions.length>.5?"Well done!":"Try again?"}},methods:{gotoNextQuestion:function(){this.questions[this.currentQuestion-1].hide(),this.currentQuestion+=1},showNextQuestion:function(){this.currentQuestion<=this.questions.length?this.questions[this.currentQuestion-1].show():this.complete()},begin:function(){this.currentQuestion=1,this.score=0,this.state=4},showFirstQuestion:function(){this.questions.length&&this.questions[0].show()},reset:function(){this.questions.forEach((function(t){return t.reset()}))},complete:function(){this.score=this.questions.filter((function(t){return 2===t.qState.state})).length,this.state=5,this.reset()},setScoreCircleStyles:function(){var t=this.score/this.questions.length;this.$refs.score.style.strokeDashoffset=264*(1-t),this.$refs.score.style.stroke="#51c2f8"}}},Un,[],!1,null,"2b2275c0",null).exports;var Xn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{name:t.questions?"question":null},on:{"after-leave":t.showNextQuestion}},[t.active?n("div",{class:["card","question",t.shakeClass,t.addClass]},[t.$scopedSlots.header?n("div",{staticClass:"card-header alert-light border-bottom border-light text-dark"},[t._t("header")],2):t._e(),t._v(" "),n("div",{staticClass:"card-body"},[t._t("default"),t._v(" "),t.isTextQuestion()?n("div",{staticClass:"mb-2"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.textareaText,expression:"textareaText"}],staticClass:"form-control",attrs:{disabled:t.qState.answered},domProps:{value:t.textareaText},on:{input:function(e){e.target.composing||(t.textareaText=e.target.value)}}}),t._v(" "),t.qState.answered?n("div",[n("hr"),t._v(" "),t.keywordsSplitTrimmed().length?n("strong",[t._v("\n Keywords: \n "),t._l(t.keywordsSplitTrimmed(),(function(e){return n("span",{key:e,staticClass:"badge rounded-pill bg-light text-dark fw-normal"},[t._v("\n "+t._s(e)+"\n ")])}))],2):t._e()]):t._e()]):t._e(),t._v(" "),t.qState.answered&&t.isTextQuestion()?n("div",{staticClass:"answer"},[t._t("answer")],2):t._e(),t._v(" "),t.showHint?n("box",{staticClass:"mb-0 mt-3",attrs:{type:"tip"}},[t._t("hint")],2):t._e()],2),t._v(" "),t.showCardFooter?n("div",{staticClass:"card-footer alert-light border-top border-light text-dark"},[1===t.qState.state?n("i",{staticClass:"fa fa-times text-danger border-danger result-icon"}):2===t.qState.state?n("i",{staticClass:"fa fa-check text-success border-success result-icon"}):t._e(),t._v(" "),n("transition-group",{staticClass:"float-end",attrs:{name:"q-btn",tag:"div"}},[t.$scopedSlots.hint&&!t.showHint?n("button",{key:"hint",staticClass:"btn btn-success q-btn ms-1",attrs:{type:"button"},on:{click:function(e){t.showHint=!0}}},[t._v("\n Hint\n ")]):t._e(),t._v(" "),0!==t.qState.state||t.isTextWithoutKeywords()&&!t.$scopedSlots.answer?t._e():n("button",{key:"check",staticClass:"btn btn-primary q-btn ms-1",attrs:{type:"button"},on:{click:function(e){return t.checkAnswer(!!t.questions)}}},[t._v("\n Check\n ")]),t._v(" "),0!==t.qState.state&&t.questions?n("button",{key:"active",staticClass:"btn btn-primary q-btn ms-1",attrs:{type:"button"},on:{"~click":function(e){return t.gotoNextQuestion.apply(null,arguments)}}},[t._v("\n Next\n ")]):t._e(),t._v(" "),t.retryState?n("button",{key:"show",staticClass:"btn btn-info q-btn ms-1",attrs:{type:"button"},on:{click:function(e){return t.checkAnswer(!0)}}},[t._v("\n Show\n ")]):t._e(),t._v(" "),t.retryState?n("button",{key:"retry",staticClass:"btn btn-primary q-btn ms-1",attrs:{type:"button"},on:{click:function(e){return t.checkAnswer(!1)}}},[t._v("\n Retry\n ")]):t._e()])],1):t._e()]):t._e()])};Xn._withStripped=!0;function Yn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Gn(t){for(var e=1;e=this.threshold?this.markAsCorrect():this.markAsWrong(t)},checkTextAnswer:function(t){for(var e=this.textareaText.toLowerCase(),n=this.keywordsSplitTrimmed(),i=0,o=0;o=this.threshold?this.markAsCorrect():this.markAsWrong(t)},checkAnswer:function(t){"mcq"===this.type?this.checkMcqAnswer(t):"checkbox"===this.type?this.checkCheckboxAnswer(t):"blanks"===this.type?this.checkBlanksAnswer(t):this.isTextQuestion()?this.checkTextAnswer(t):this.markAsCorrect()}}},Xn,[],!1,null,"ae369d74",null).exports;var Zn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return"mcq"===t.qOptionType?n("div",{class:["form-control",t.hintClass],on:{click:t.toggleRadioOn,mouseover:function(e){t.hover=!0},mouseleave:function(e){t.hover=!1}}},[n("div",{class:["row",{disabled:t.qState.answered}]},[n("div",{staticClass:"col-auto p-0"},[n("svg",{staticClass:"radio-svg",attrs:{viewBox:"0 0 100 100"}},[n("circle",{attrs:{cx:"50",cy:"50",r:"47",fill:"none",stroke:"black","stroke-width":"4"}}),t._v(" "),n("circle",{directives:[{name:"show",rawName:"v-show",value:t.selected,expression:"selected"}],attrs:{cx:"50",cy:"50",r:"25",fill:"dodgerblue"}})])]),t._v(" "),n("div",{staticClass:"col content"},[t._t("default")],2),t._v(" "),n("div",{staticClass:"col-1"},[t.qState.answered?n("div",[t.correct?n("i",{staticClass:"fa fa-check text-success",class:{"align-bottom":t.$scopedSlots.reason}}):n("i",{staticClass:"fa fa-times text-danger",class:{"align-bottom":t.$scopedSlots.reason}})]):t._e()])]),t._v(" "),t.qState.answered&&t.$scopedSlots.reason?n("div",[n("hr"),t._v(" "),n("div",{staticClass:"reason"},[t._t("reason")],2)]):t._e()]):"checkbox"===t.qOptionType?n("div",{class:["form-control",t.hintClass],on:{click:t.toggleCheckbox,mouseover:function(e){t.hover=!0},mouseleave:function(e){t.hover=!1}}},[n("label",{class:["row","checkbox-label","m-0",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.selected,expression:"selected"}],staticClass:"checkbox",attrs:{disabled:t.qState.answered,type:"checkbox",onclick:"event.stopPropagation()"},domProps:{checked:Array.isArray(t.selected)?t._i(t.selected,null)>-1:t.selected},on:{change:function(e){var n=t.selected,i=e.target,o=!!i.checked;if(Array.isArray(n)){var r=t._i(n,null);i.checked?r<0&&(t.selected=n.concat([null])):r>-1&&(t.selected=n.slice(0,r).concat(n.slice(r+1)))}else t.selected=o}}}),t._v(" "),n("div",{staticClass:"col content"},[t._t("default")],2),t._v(" "),n("div",{staticClass:"col-auto"},[t.qState.answered?n("div",[t.correct?n("i",{staticClass:"fa fa-check text-success",class:{"align-bottom":t.$scopedSlots.reason}}):n("i",{staticClass:"fa fa-times text-danger",class:{"align-bottom":t.$scopedSlots.reason}})]):t._e()])]),t._v(" "),t.qState.answered&&t.$scopedSlots.reason?n("div",[n("hr"),t._v(" "),n("div",{staticClass:"reason"},[t._t("reason")],2)]):t._e()]):"blanks"===t.qOptionType?n("div",{class:["form-control","blanks-form-control",t.hintClass]},[n("label",{class:["row","m-0",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.inputText,expression:"inputText"}],staticClass:"form-control",attrs:{disabled:t.qState.answered},domProps:{value:t.inputText},on:{input:function(e){e.target.composing||(t.inputText=e.target.value)}}}),t._v(" "),n("div",{staticClass:"col-auto"},[t.qState.answered?n("div",[t.ansIsCorrect?n("i",{staticClass:"fa fa-check text-success"}):n("i",{staticClass:"fa fa-times text-danger blanks-cross"})]):t._e(),t._v(" "),t.isIntermediateResult()?n("div",[t.ansIsCorrect?n("i",{staticClass:"fa fa-check text-success"}):n("i",{staticClass:"fa fa-times text-danger blanks-cross"})]):t._e()]),t._v(" "),t.qState.answered?n("div",{staticClass:"col-auto blanks-keywords"},[t.keywordsSplitTrimmed().length?n("strong",[t._v("\n Keywords: \n "),t._l(t.keywordsSplitTrimmed(),(function(e){return n("span",{key:e,staticClass:"badge rounded-pill bg-light text-dark fw-normal"},[t._v("\n "+t._s(e)+"\n ")])}))],2):n("strong",[t._v("No answer checking keywords provided")])]):t._e()]),t._v(" "),t.qState.answered&&t.$scopedSlots.reason?n("div",[n("div",{staticClass:"reason blanks-reason"},[t._t("reason")],2)]):t._e()]):t._e()};Zn._withStripped=!0;const Jn=qe({name:"McqOption",props:{correct:{type:Boolean,default:!1},keywords:{type:String,default:""}},data:function(){return{selected:!1,hover:!1,inputText:"",ansIsCorrect:!1}},inject:{answers:{default:void 0},qOptionType:{default:void 0},qState:{default:void 0},noIntermediateResult:{default:void 0}},computed:{hintClass:function(){return this.qState.answered?this.correct?"success":"danger":this.selected||this.hover?"alert-light text-dark border border-secondary":""},answeredCorrectly:function(){return this.correct&&this.selected||!this.correct&&!this.selected}},methods:{checkAnswer:function(){var t=!1,e=this.inputText.toLowerCase().trim(),n=this.keywords.toLowerCase().split(",").filter((function(t){return""!==t.trim()}));this.keywords.length||(t=!0);for(var i=0;i=0;r-=1)o="".concat(o.slice(0,i[r].start),"")+"".concat(o.slice(i[r].start,i[r].end),"")+"".concat(o.slice(i[r].end));return o}}},ni,[],!1,null,"98afe086",null).exports;const oi=qe({created:function(){this.items=this.primitiveData},props:{data:{type:Array,default:function(){return[]}},limit:{type:Number,default:8},async:{type:String,default:""},keyProp:{type:String,default:null},onHit:{type:Function,default:function(t){this.reset(),this.value=t}},placeholder:{type:String,default:"Search"},delay:{type:Number,default:200},menuAlignRight:{type:Boolean,default:!1},algolia:{type:Boolean,default:!1}},data:function(){return{value:"",showDropdown:!1,noResults:!0,current:0,items:[]}},computed:{primitiveData:function(){function t(t,e){var n=t.join(" ");return e.reduce((function(t,e){var i=n.match(e);return t+(i?i.length:0)}),0)}if(this.value.length<2||!this.data)return[];var e=[],n=this.value.split(" ").filter((function(t){return""!==t})).map((function(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})).map((function(t){return new RegExp(t,"ig")}));return this.data.forEach((function(i){var o=i.headings,r=i.src,s=i.title,a=i.headingKeywords,l=i.frontmatterKeywords||"",c=s||r.substring(0,r.lastIndexOf(".")),u=t([c,l].concat(_n(Object.values(o)),_n(Object.values(a))),n);if(u>0){var d=[];Object.entries(o).forEach((function(e,i){var o=ei(e,2),s=o[0],u=o[1],h=n.some((function(t){return t.test(u)})),p=a[s]&&a[s].some((function(t){return n.some((function(e){return e.test(t)}))}));if(h||p){var f=t([u].concat(_n(a[s]||[])),n);(0!==i||u!==c||l.length)&&d.push({heading:{id:s,text:u},keywords:a[s],src:r,totalMatches:f})}})),d.sort((function(t,e){return e.totalMatches-t.totalMatches})),e.push({headings:d,keywords:l,src:r,title:c,totalMatches:u})}})),e.sort((function(t,e){return e.totalMatches-t.totalMatches})).flatMap((function(t){return t.headings?[t].concat(_n(t.headings)):t}))},dropdownMenuClasses:function(){return["dropdown-menu","search-dropdown-menu",{show:this.showDropdown},{"d-none":!this.showDropdown},{"dropdown-menu-end":this.menuAlignRight}]}},methods:{update:function(){return this.value?(this.data&&(this.items=this.primitiveData,this.showDropdown=this.items.length>0),this.async&&this.query(),!0):(this.reset(),!1)},query:function(t,e){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100;function o(t){return/^[0-9]+$/.test(t)?Number(t)||1:null}return function(){for(var r=this,s=arguments.length,a=new Array(s),l=0;l0&&(this.current-=1,this.scrollListView())},scrollListView:function(){var t=this.$refs.dropdown,e=t.children[this.current],n=t.scrollTop,i=n+t.clientHeight,o=e.offsetTop+e.offsetHeight;e.offsetTopi&&(t.scrollTop=o-t.clientHeight)}},components:{searchbarPageItem:ii}},ti,[],!1,null,"cea1a814",null).exports;var ri=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"tab-pane active printable-tab-pane",class:{"tab-pane-hide":!this.show},attrs:{role:"tabpanel"}},[e("div",{staticClass:"nav-tabs printable-tab-header"},[e("div",{ref:"header",staticClass:"nav-link active"},[this._t("header")],2)]),this._v(" "),this._t("default"),this._v(" "),e("hr")],2)};ri._withStripped=!0;const si=qe({props:{header:{type:String,default:""},disabled:{type:[Boolean,String],default:!1}},computed:{headerRendered:function(){return this.$refs.header.innerHTML},active:function(){return this._tabset.show===this},index:function(){return this._tabset.tabs.indexOf(this)},show:function(){return this._tabset&&this._tabset.show===this},disabledBool:function(){return Re(this.disabled)}},created:function(){this._ingroup=this.$parent&&this.$parent._tabgroup;for(var t=this;t&&!0!==t._tabset&&t.$parent;)t=t.$parent;t._tabset?(t.tabs.push(this),this._ingroup?~t.headers.indexOf(this.$parent)||t.headers.push(this.$parent):t.headers.push(this),this._tabset=t):this._tabset={},this._ingroup&&this.$parent.tabs.push(this)},beforeDestroy:function(){if(this._tabset.activeNumber===this.index&&(this._tabset.activeNumber=0),this._ingroup){var t=this.$parent.tabs.indexOf(this);this.$parent.tabs.splice(t,1)}this._tabset.tabs.splice(this.index,1)}},ri,[],!1,null,"661c1b61",null).exports;var ai=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"printable-tab-group"},[e("div",{ref:"header",staticClass:"printable-tab-group-header"},[this._t("header")],2),this._v(" "),this._t("default")],2)};ai._withStripped=!0;const li=qe({props:{disabled:{type:[Boolean,String],default:!1},header:{type:String,default:""}},data:function(){return{tabs:[],show:!1}},computed:{active:function(){return~this.tabs.indexOf(this._tabset.show)},headerRendered:function(){return this.$refs.header.innerHTML},disabledBool:function(){return De(this.disabled)}},created:function(){this._tabgroup=!0;for(var t=this.$parent&&!0===this.$parent._tabset?this.$parent:{};t&&!t._tabset&&t.$parent;)t=t.$parent;t._tabset?this._tabset=t:(this._tabset={},this.show=!0)},methods:{blur:function(){this.show=!1},toggle:function(){this.show=!this.show}}},ai,[],!1,null,"a785351c",null).exports;var ci=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:[t.addClass,"printable-tabs"]},[n("ul",{staticClass:"nav nav-tabs d-print-none",class:t.getNavStyleClass,attrs:{role:"tablist"}},[t._l(t.headers,(function(e,i){return[e._tabgroup?n("dropdown",{key:i,staticClass:"nav-item",class:{active:e.active},attrs:{"tab-group-header":e.headerRendered,disabled:e.disabled}},t._l(e.tabs,(function(e,i){return n("li",{key:i},[n("a",{staticClass:"nav-link",class:{disabled:e.disabled},attrs:{href:"#"},domProps:{innerHTML:t._s(e.headerRendered)},on:{click:function(n){return n.preventDefault(),t.select(e)}}})])})),0):n("li",{key:i,staticClass:"nav-item",on:{click:function(n){return n.preventDefault(),t.select(e)}}},[n("a",{staticClass:"nav-link",class:{active:e.active,disabled:e.disabledBool},attrs:{href:"#"}},[n("span",{domProps:{innerHTML:t._s(e.headerRendered)}})])])]}))],2),t._v(" "),n("div",{ref:"tab-content",staticClass:"tab-content"},[t._t("default")],2)])};ci._withStripped=!0;const ui=qe({components:{dropdown:gn},props:{navStyle:{type:String,default:"tabs"},active:{type:String,default:"0"},addClass:{type:String,default:""}},data:function(){return{show:null,headers:[],activeNumber:je(this.active),tabs:[]}},created:function(){this._tabset=!0},computed:{getNavStyleClass:function(){return"nav-".concat(this.navStyle)}},watch:{activeNumber:function(t){this.show=this.tabs[t]}},mounted:function(){this.show=this.tabs[this.activeNumber]},methods:{select:function(t){t.disabled||(this.activeNumber=t.index)}}},ci,[],!1,null,"05434e42",null).exports;var di=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:["thumb-wrapper",{"thumb-circle":t.circle},t.addClass],style:[t.getBorder,t.getFontSize,t.getFontColor,t.getBgColor]},[t.hasSrc?n("img",{ref:"pic",staticClass:"thumb-image",attrs:{src:t.src,width:t.computedWidth,height:t.computedHeight,alt:t.alt},on:{"~load":function(e){return t.computeImgSize.apply(null,arguments)}}}):t._e(),t._v(" "),t._t("default")],2)};di._withStripped=!0;const hi=qe({props:{circle:{type:Boolean,default:!1},addClass:{type:String,default:""},alt:{type:String,default:""},background:{type:String,default:""},border:{type:String,default:""},fontColor:{type:String,default:""},fontSize:{type:String,default:""},size:{type:String,default:""},src:{type:String,default:null},text:{type:String,default:""}},computed:{getBorder:function(){return""===this.border?{}:{border:this.border}},getFontSize:function(){var t=this.imageSize/2,e=this.fontSize;return{"font-size":"".concat(void 0===e||""===e?t:e,"px")}},getFontColor:function(){return""===this.fontColor?{}:{color:this.fontColor}},getBgColor:function(){return""===this.background?{}:{background:this.background}},hasSrc:function(){return void 0!==this.src&&""!==this.src},imageSize:function(){return this.size||100}},data:function(){return{computedWidth:"",computedHeight:""}},mounted:function(){var t=this.$el;t.style.width="".concat(this.imageSize,"px"),t.style.height="".concat(this.imageSize,"px"),t.style.lineHeight="".concat(this.imageSize,"px")},methods:{computeImgSize:function(){var t=this.$refs.pic,e=t.naturalHeight,n=t.naturalWidth,i=Math.min(e,n),o=this.imageSize/i;this.computedWidth=n*o,this.computedHeight=e*o}}},di,[],!1,null,null,null).exports;var pi=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:"click"===t.trigger?"trigger-click":"trigger",attrs:{tabindex:"0"},on:t._d({},[t.triggerEventType,function(e){return e.stopPropagation(),t.toggle()}])},["popover"===t.popoverOrTooltipType?n("v-popover",{attrs:{"auto-hide":!t.isInput,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,placement:t.placement,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[n("div",{staticClass:"popover-container"},[n("portal-target",{attrs:{name:"popover:"+t.target}})],1)]},proxy:!0}],null,!1,1583262462)},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):"tooltip"===t.popoverOrTooltipType?n("v-tooltip",{attrs:{"auto-hide":!t.isInput,placement:t.placement,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[n("portal-target",{attrs:{name:"tooltip:"+t.target}})]},proxy:!0}])},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):n("span",[t._t("default")],2)],1)};pi._withStripped=!0;var fi=i(383);function mi(t){return(mi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function vi(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,i=new Array(e);n1),Mi=[],Hi=!1,Di=0,Ri=-1,ji=function(t){return Mi.some((function(){return function(t,e){var n=!1;return function(t){for(var e=[];t;){if(e.push(t),t.classList.contains("vfm"))return e;t=t.parentElement}return e}(t).forEach((function(t){(function(t){if(!t||t.nodeType!==Node.ELEMENT_NODE)return!1;var e=window.getComputedStyle(t);return["auto","scroll"].includes(e.overflowY)&&t.scrollHeight>t.clientHeight})(t)&&function(t,e){return!(0===t.scrollTop&&e<0||t.scrollTop+t.clientHeight+e>=t.scrollHeight&&e>0)}(t,e)&&(n=!0)})),n}(t,-Di)}))},Ii=function(t){var e=t||window.event;return!!ji(e.target)||e.touches.length>1||(e.preventDefault&&e.preventDefault(),!1)},qi=function(t){t?(Mi=Mi.filter((function(e){return e.targetElement!==t})),zi?(t.ontouchstart=null,t.ontouchmove=null,Hi&&0===Mi.length&&(document.removeEventListener("touchmove",Ii,Bi?{passive:!1}:void 0),Hi=!1)):Mi.length||(void 0!==Ni&&(document.body.style.paddingRight=Ni,Ni=void 0),void 0!==Li&&(document.body.style.overflow=Li,Li=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},Wi=function(){},Fi="enter",Vi="entering",Ui="leave",Qi="leavng",Xi={type:[String,Object,Array],default:""},Yi={type:[Object,Array],default:function(){return{}}},Gi={t:"ns-resize",tr:"nesw-resize",r:"ew-resize",br:"nwse-resize",b:"ns-resize",bl:"nesw-resize",l:"ew-resize",tl:"nwse-resize"},Ki={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:Xi,overlayClass:Xi,contentClass:Xi,styles:Yi,overlayStyle:Yi,contentStyle:Yi,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var e=mi(t);return"boolean"===e||"string"===e||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:""},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return["t","tr","r","br","b","bl","l","tl"]},validator:function(t){return["t","tr","r","br","b","bl","l","tl"].filter((function(e){return-1!==t.indexOf(e)})).length===t.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:Wi,rejectToggle:Wi,state:null,lastMousedownEl:null}},computed:{isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===Ui)&&this.modalTransitionState===Ui},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return wi({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},bindContentStyle:function(){var t=[this.dragResizeStyle];return Array.isArray(this.contentStyle)?t.push.apply(t,bi(this.contentStyle)):t.push(this.contentStyle),t},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:wi({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:wi({},this.overlayTransition)}},watch:{value:function(t){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!t){if(this.emitEvent("before-close",!0))return void this.rejectToggle("hide");this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(t){this.value&&!t&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(t){t&&(this.visible=!1)},drag:function(t){this.visible&&(t?this.addDragDown():this.removeDragDown())},resize:function(t){this.visible&&(t?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(t){t||(this.dragResizeStyle={})}},mounted:function(){this.api.modals.push(this),this.$focusTrap=new xi,this.mounted()},beforeDestroy:function(){var t,e=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&qi(this.$refs.vfmContainer),null==this||null===(t=this.$el)||void 0===t||t.remove();var n=this.api.modals.findIndex((function(t){return t===e}));this.api.modals.splice(n,1)},methods:{mounted:function(){var t=this;if(this.value){if(this.emitEvent("before-open",!1))return void this.rejectToggle("show");var e=this.getAttachElement();if(e||!1===this.attach){!1!==this.attach&&e.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(e){return e===t}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(e){return e!==t})).forEach((function(t,n){t.getAttachElement()===e&&(t.modalStackIndex=n,t.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){t.startTransitionEnter()}))}else!1!==e&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var t=this,e=this.api.openedModals.findIndex((function(e){return e===t}));if(-1!==e&&this.api.openedModals.splice(e,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.drag&&this.removeDragDown(),this.resize&&this.removeResizeDown(),this.state=null,this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var t=this;this.value&&this.$nextTick((function(){t.lockScroll?function(t,e){if(t){if(!Mi.some((function(e){return e.targetElement===t}))){var n={targetElement:t,options:e||{}};Mi=[].concat(bi(Mi),[n]),zi?(t.ontouchstart=function(t){1===t.targetTouches.length&&(Ri=t.targetTouches[0].clientY)},t.ontouchmove=function(e){1===e.targetTouches.length&&function(t,e){Di=t.targetTouches[0].clientY-Ri,!ji(t.target)&&(e&&0===e.scrollTop&&Di>0||function(t){return!!t&&t.scrollHeight-t.scrollTop<=t.clientHeight}(e)&&Di<0?Ii(t):t.stopPropagation())}(e,t)},Hi||(document.addEventListener("touchmove",Ii,Bi?{passive:!1}:void 0),Hi=!0)):function(t){if(void 0===Ni){var e=!!t&&!0===t.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(e&&n>0){var i=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);Ni=document.body.style.paddingRight,document.body.style.paddingRight="".concat(i+n,"px")}}void 0===Li&&(Li=document.body.style.overflow,document.body.style.overflow="hidden")}(e)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")}(t.$refs.vfmContainer,{reserveScrollBarGap:!0}):qi(t.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=Vi},afterOverlayEnter:function(){this.overlayTransitionState=Fi},beforeOverlayLeave:function(){this.overlayTransitionState=Qi},afterOverlayLeave:function(){this.overlayTransitionState=Ui},beforeModalEnter:function(){this.modalTransitionState=Vi},afterModalEnter:function(){this.modalTransitionState=Fi,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.drag&&this.addDragDown(),this.resize&&this.addResizeDown(),this.$emit("opened",this.createModalEvent({type:"opened"})),this.resolveToggle("show")},beforeModalLeave:function(){this.modalTransitionState=Qi,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=Ui,this.modalStackIndex=null,this.lockScroll&&qi(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle={});var t=!1,e=this.createModalEvent({type:"closed",stop:function(){t=!0}});this.$emit("closed",e),this.resolveToggle("hide"),t||(this.params={})},onMousedown:function(t){this.lastMousedownEl=null==t?void 0:t.target},onMouseupContainer:function(){this.lastMousedownEl===this.$refs.vfmContainer&&"resize:move"!==this.state&&(this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1))},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return wi({ref:this},t)},emitEvent:function(t,e){var n=!1,i=this.createModalEvent({type:t,stop:function(){n=!0}});return this.$emit(t,i),!!n&&(this.stopEvent=!0,this.$emit("input",e),!0)},emitState:function(t,e,n){this.state="".concat(e,":").concat(n),this.$emit(this.state,t)},toggle:function(t,e){var n=arguments,i=this;return new Promise((function(o,r){i.resolveToggle=function(t){o(t),i.resolveToggle=Wi},i.rejectToggle=function(t){r(t),i.rejectToggle=Wi};var s="boolean"==typeof t?t:!i.value;s&&2===n.length&&(i.params=e),i.$emit("input",s)}))},pointerDown:function(t){var e=this;t.stopPropagation();var n,i="resize",o="drag",r=this.$refs,s=r.vfmContainer,a=r.vfmContent,l=t.target.getAttribute("direction");if(l)n=i;else{if(!function(t,e,n){return""===n||bi(e.querySelectorAll(n)).includes(t.target)}(t,a,this.dragSelector))return;n=o}this.emitState(t,n,"start");var c,u,d,h,p=Ci(t),f=s.getBoundingClientRect(),m=a.getBoundingClientRect(),v="absolute"===window.getComputedStyle(a).position,g=ki(this.dragResizeStyle.top),y=ki(this.dragResizeStyle.left),w=function(){if(e.fitParent){var t={absolute:function(){return{minTop:0,minLeft:0,maxTop:f.height-m.height,maxLeft:f.width-m.width}},relative:function(){return{minTop:g+f.top-m.top,minLeft:y+f.left-m.left,maxTop:g+f.bottom-m.bottom,maxLeft:y+f.right-m.right}}};return v?t.absolute():t.relative()}return{}}(),b=n===i&&(c=document.body,u="cursor",d=Gi[l],h=c.style[u],c.style[u]=d,function(){c.style[u]=h}),_=function(t){t.stopPropagation(),e.emitState(t,n,"move");var r,s,a=Ci(t),c={x:a.x-p.x,y:a.y-p.y};n===i&&(c=e.getResizeOffset(l,c,f,m,v)),v?(r=m.top-f.top+c.y,s=m.left-f.left+c.x):(r=g+c.y,s=y+c.x),n===o&&e.fitParent&&(r=$i(w.minTop,r,w.maxTop),s=$i(w.minLeft,s,w.maxLeft));var u=wi(wi(wi({position:"relative",top:r+"px",left:s+"px",margin:"unset",touchAction:"none"},v&&{position:"absolute",transform:"unset",width:m.width+"px",height:m.height+"px"}),c.width&&{width:c.width+"px"}),c.height&&{height:c.height+"px"});e.dragResizeStyle=wi(wi({},e.dragResizeStyle),u)};Ei("move",document,_),Ei("up",document,(function t(o){o.stopPropagation(),n===i&&b&&b(),setTimeout((function(){e.emitState(o,n,"end")})),Oi("move",document,_),Oi("up",document,t)}))},addDragDown:function(){Ei("down",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction="none"},removeDragDown:function(){Oi("down",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var t=this;this.visibility.resize=!0,this.$nextTick((function(){Ei("down",t.$refs.vfmResize,t.pointerDown)}))},removeResizeDown:function(){Oi("down",this.$refs.vfmResize,this.pointerDown),this.visibility.resize=!1},getResizeOffset:function(t,e,n,i,o){var r=this,s=function(t,e,o,s){var a,l=i[e],c=n[t]-i[t],u=(a=e).charAt(0).toUpperCase()+a.slice(1);return{axis:o,edgeName:e,min:s?c:-l,max:s?l:c,minEdge:r["min".concat(u)],maxEdge:r["max".concat(u)],getEdge:function(t){return i[e]-t*(s?1:-1)},getOffsetAxis:function(t,n){var o=i[e]-t;return n?s?o:0:(s?1:-1)*o/2}}},a={t:["top","height","y",!0],b:["bottom","height","y",!1],l:["left","width","x",!0],r:["right","width","x",!1]},l={x:0,y:0};return t.split("").forEach((function(t){var n=s.apply(void 0,bi(a[t]));l=wi(wi({},l),function(t){var n,i=e[t.axis];i=r.fitParent?$i(t.min,i,t.max):i;var s=$i(t.minEdge,t.getEdge(i),t.maxEdge);return i=t.getOffsetAxis(s,o),gi(n={},t.edgeName,s),gi(n,t.axis,i),n}(n))})),l}}},Zi=function(t,e,n,i,o,r,s,a,l,c){"boolean"!=typeof s&&(l=a,a=s,s=!1);var u,d="function"==typeof n?n.options:n;if(t&&t.render&&(d.render=t.render,d.staticRenderFns=t.staticRenderFns,d._compiled=!0,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(u=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,l(t)),t&&t._registeredComponents&&t._registeredComponents.add(r)},d._ssrRegister=u):e&&(u=s?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h=d.render;d.render=function(t,e){return u.call(e),h(t,e)}}else{var p=d.beforeCreate;d.beforeCreate=p?[].concat(p,u):[u]}return n},Ji="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase()),to={},eo=Zi({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.ssr||t.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!t.ssr||t.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===t.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":t.preventClick}],style:t.bindStyle,on:{keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"])?null:t.onEsc.apply(null,arguments)}}},[n("transition",t._b({ref:"vfmOverlayTransition",on:{"before-enter":t.beforeOverlayEnter,"after-enter":t.afterOverlayEnter,"before-leave":t.beforeOverlayLeave,"after-leave":t.afterOverlayLeave}},"transition",t.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!t.hideOverlay&&t.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:t.overlayClass,style:t.overlayStyle})]),t._v(" "),n("transition",t._b({ref:"vfmTransition",on:{"before-enter":t.beforeModalEnter,"after-enter":t.afterModalEnter,"before-leave":t.beforeModalLeave,"after-leave":t.afterModalLeave}},"transition",t.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:t.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:t.classes,style:t.styles,attrs:{"aria-expanded":t.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{mouseup:function(e){return e.target!==e.currentTarget?null:t.onMouseupContainer.apply(null,arguments)},mousedown:function(e){return e.target!==e.currentTarget?null:t.onMousedown.apply(null,arguments)}}},[n("div",{ref:"vfmContent",staticClass:"vfm__content",class:[t.contentClass,{"vfm--prevent-auto":t.preventClick}],style:t.bindContentStyle,on:{mousedown:function(e){return t.onMousedown(null)}}},[t._t("default",null,{params:t.params,close:function(){return t.$emit("input",!1)}}),t._v(" "),t.visibility.resize&&t.visibility.modal?n("div",{ref:"vfmResize",staticClass:"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none"},t._l(t.resizeDirections,(function(t){return n("div",{key:t,staticClass:"vfm--absolute vfm--prevent-auto",class:"vfm--resize-"+t,attrs:{direction:t}})})),0):t._e()],2)])])],1):t._e()},staticRenderFns:[]},(function(t){t&&t("data-v-1cd72822_0",{source:".vfm--fixed[data-v-1cd72822]{position:fixed}.vfm--absolute[data-v-1cd72822]{position:absolute}.vfm--inset[data-v-1cd72822]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-1cd72822]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-1cd72822]{pointer-events:none}.vfm--prevent-auto[data-v-1cd72822]{pointer-events:auto}.vfm--outline-none[data-v-1cd72822]:focus{outline:0}.vfm-enter-active[data-v-1cd72822],.vfm-leave-active[data-v-1cd72822]{transition:opacity .2s}.vfm-enter[data-v-1cd72822],.vfm-leave-to[data-v-1cd72822]{opacity:0}.vfm--touch-none[data-v-1cd72822]{touch-action:none}.vfm--select-none[data-v-1cd72822]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-1cd72822],.vfm--resize-br[data-v-1cd72822],.vfm--resize-tl[data-v-1cd72822],.vfm--resize-tr[data-v-1cd72822]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-1cd72822]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-1cd72822]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-1cd72822]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-1cd72822]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-1cd72822]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-1cd72822]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-1cd72822]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-1cd72822]{top:-6px;left:-6px;cursor:nwse-resize}",map:void 0,media:void 0})}),Ki,"data-v-1cd72822",!1,void 0,!1,(function(t){return function(t,e){return function(t,e){var n=Ji?e.media||"default":t,i=to[n]||(to[n]={ids:new Set,styles:[]});if(!i.ids.has(t)){i.ids.add(t);var o=e.source;if(e.map&&(o+="\n/*# sourceURL="+e.map.sources[0]+" */",o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(e.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",e.media&&i.element.setAttribute("media",e.media),void 0===Ai&&(Ai=document.head||document.getElementsByTagName("head")[0]),Ai.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(o),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var r=i.ids.size-1,s=document.createTextNode(o),a=i.element.childNodes;a[r]&&i.element.removeChild(a[r]),a.length?i.element.insertBefore(s,a[r]):i.element.appendChild(s)}}}(t,e)}}),void 0,void 0),no=Zi({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"modals-container"},t._l(t.api.dynamicModals,(function(e,i){return n(e.component,t._g(t._b({key:e.id,tag:"component",on:{closed:function(e){return t.slice(i)},"before-open":function(n){return t.beforeOpen(n,e,i)},opened:e.opened},scopedSlots:t._u([t._l(e.slots,(function(e,i){return{key:i,fn:function(){return[t.isString(e)?n("div",{key:i,domProps:{innerHTML:t._s(e)}}):n(e.component,t._g(t._b({key:i,tag:"component"},"component",e.bind,!1),e.on))]},proxy:!0}}))],null,!0),model:{value:e.value,callback:function(n){t.$set(e,"value",n)},expression:"modal.value"}},"component",e.bind,!1),e.on))})),1)},staticRenderFns:[]},void 0,{props:{},methods:{slice:function(t){this.api.dynamicModals.splice(t,1)},beforeOpen:function(t,e,n){var i=this;t.ref.params=e.params,this.$nextTick((function(){e.value||(i.slice(n),e.reject("show"))}))},isString:function(t){return"string"==typeof t}}},void 0,!1,void 0,!1,void 0,void 0,void 0);function io(t,e){var n=wi(wi({},t),{},{props:wi({},t.props)});return Object.assign(n.props,{api:{type:Object,default:function(){return e}}}),n}var oo=0,ro=function(){var t,e,n=(e=null,et().observable({show:function(t){for(var n=this,i=arguments.length,o=new Array(i>1?i-1:0),r=1;r1?e-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{},n=0===oo?so:ro(),i=n.$vfm,o=n.VueFinalModal,r=n.ModalsContainer;oo+=1;var s=e.key||"$vfm",a=e.componentName||"VueFinalModal",l=e.dynamicContainerName||"ModalsContainer";t.prototype[s]=i,t.component(a,o),t.component(l,r)}),uo=function(t){return{install:function(e,n){var i=Object.assign({},t,n);co(e,i)}}};uo.install=co;const ho=qe({name:"Trigger",components:{PortalTarget:fi.YC},props:{for:{type:String,default:""},trigger:{type:String,default:"hover focus"},placement:{type:String,default:"top"}},data:function(){return{popoverOrTooltipType:void 0,isInput:!1}},methods:{toggle:function(){this.for&&ao.show(this.for)}},computed:{triggerEventType:function(){return"click"===this.trigger||"focus"===this.trigger?this.trigger:"mouseenter"},triggers:function(){return this.trigger.split(" ")},target:function(){return this.for}},mounted:function(){if(this.isInput=this.$slots.default&&this.$slots.default.some((function(t){return"input"===t.tag})),this.for&&void 0===this.popoverOrTooltipType){var t=document.getElementById(this.for);if(!t)return;this.popoverOrTooltipType=t.dataset.mbComponentType}}},pi,[],!1,null,null,null).exports;var po=function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"site-nav-root"},[this._t("default")],2)};po._withStripped=!0;const fo=qe({name:"SiteNav",mounted:function(){var t=this,e=Sn(new URL(window.location.href).pathname);this.$el.querySelectorAll("a[href]").forEach((function(n){var i=Sn(n.getAttribute("href"));if(e===i){n.classList.add("current");for(var o=n.parentElement;o&&o!==t.$el;)"ul"===o.tagName.toLowerCase()&&o.classList.contains("site-nav-dropdown-container")&&o.classList.add("site-nav-dropdown-container-open"),o=o.parentElement}}))}},po,[],!1,null,null,null).exports;var mo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("span",{class:[{"nav-menu-close-icon":t.show}],on:{click:function(e){return t.toggleNavMenu(void 0)}}},[t._t("navMenuIcon")],2),t._v(" "),n("div",{ref:"navMenuContainer",class:["nav-menu",{"nav-menu-open":t.show}],style:t.navbarHeight,on:{click:t.toggleNavMenu}},[n("portal-target",{attrs:{name:t.portalName,multiple:""}})],1)])};mo._withStripped=!0;var vo={};const go=qe({components:{PortalTarget:fi.YC},props:{type:{type:String,default:null},portalName:{type:String,default:null}},inject:{toggleLowerNavbar:{default:void 0}},data:function(){return{show:!1,navbarHeight:""}},methods:{toggleNavMenu:function(t){var e,n=this;t&&"a"===t.target.tagName.toLowerCase()||!t&&this.show?(document.body.style.removeProperty("overflow"),this.show=!1):(vo[e="closeOverlay"]&&vo[e].forEach((function(t){return t()})),document.body.style.overflow="hidden",this.show=!0,this.$nextTick((function(){var t=n.$refs.navMenuContainer,e=window.innerHeight-t.getBoundingClientRect().top;n.navbarHeight="height: ".concat(e,"px")})))}},mounted:function(){var t,e,n=this;this.toggleLowerNavbar&&this.toggleLowerNavbar(),e=function(){n.show=!1},vo[t="closeOverlay"]||(vo[t]=[]),vo[t].push(e)}},mo,[],!1,null,"1a3e7aee",null).exports;var yo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(t.tagName,t._b({tag:"component"},"component",t.$attrs,!1),[t._t("default"),t._v(" "),t.enablePortal?n("portal",{attrs:{to:t.to}},[n(t.tagName,t._b({tag:"component",class:[t.$vnode.data.staticClass||"","mb-mobile-nav"],style:t.$vnode.data.staticStyle},"component",t.$attrs,!1),[t._t("default")],2)],1):t._e()],2)};yo._withStripped=!0;const wo=qe({name:"OverlaySource",components:{Portal:fi.h_},props:{to:{type:String,default:void 0},tagName:{type:String,default:void 0}},data:function(){return{enablePortal:!1}},mounted:function(){this.enablePortal=!0}},yo,[],!1,null,"e6005420",null).exports;var bo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:"click"===t.trigger?"trigger-click":"trigger",attrs:{"data-mb-component-type":"popover",tabindex:"0"}},[t.targetEl.id?n("portal",{attrs:{to:"popover:"+t.targetEl.id}},[t.hasHeader?n("h3",{staticClass:"popover-header"},[t._t("header")],2):t._e(),t._v(" "),n("div",{staticClass:"popover-body"},[t._t("content")],2)]):t._e(),t.isMounted?n("v-popover",{attrs:{"auto-hide":!t.isInput,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,placement:t.placement,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[n("div",{staticClass:"popover-container"},[t.hasHeader?n("h3",{staticClass:"popover-header"},[t._t("header")],2):t._e(),t._v(" "),n("div",{staticClass:"popover-body"},[t._t("content")],2)])]},proxy:!0}],null,!0)},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):t._e()],1)};bo._withStripped=!0;const _o=qe({name:"Popover",components:{Portal:fi.h_},props:{trigger:{type:String,default:"hover focus"},placement:{type:String,default:"top"}},data:function(){return{targetEl:{},isMounted:!1}},computed:{triggers:function(){return this.trigger.split(" ")},hasHeader:function(){return!!this.$slots.header}},mounted:function(){this.targetEl=this.$el,this.isInput=this.$slots.default&&this.$slots.default.some((function(t){return"input"===t.tag})),this.isMounted=!0}},bo,[],!1,null,null,null).exports;var So=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("span",{class:"click"===t.trigger?"trigger-click":"trigger",attrs:{"data-mb-component-type":"tooltip",tabindex:"0"}},[t.targetEl.id?n("portal",{attrs:{to:"tooltip:"+t.targetEl.id}},[t._t("content")],2):t._e(),t.isMounted?n("v-tooltip",{attrs:{"auto-hide":!t.isInput,triggers:t.triggers,"popper-triggers":t.triggers,"hide-triggers":t.triggers,placement:t.placement,delay:0,"shift-cross-axis":""},scopedSlots:t._u([{key:"popper",fn:function(){return[t._t("content")]},proxy:!0}],null,!0)},[t.isInput?t._t("default"):n("span",{on:{click:function(t){t.stopPropagation()}}},[t._t("default")],2)],2):t._e()],1)};So._withStripped=!0;const xo=qe({name:"Tooltip",components:{Portal:fi.h_},props:{trigger:{type:String,default:"hover focus"},placement:{type:String,default:"top"}},data:function(){return{targetEl:{},isInput:!1,isMounted:!1}},computed:{triggers:function(){return this.trigger.split(" ")}},mounted:function(){this.targetEl=this.$el,this.isInput=this.$slots.default&&this.$slots.default.some((function(t){return"input"===t.tag})),this.isMounted=!0}},So,[],!1,null,null,null).exports;var Co=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isMounted?n("vue-final-modal",{attrs:{ssr:"",name:t.id,classes:["modal"],"content-class":["modal-dialog","modal-dialog-scrollable",t.optionalModalSize,t.optionalCentering],"overlay-transition":"none",transition:t.effectClass,"click-to-close":"false"!==t.backdrop,"esc-to-close":"","z-index-base":"2000"},model:{value:t.show,callback:function(e){t.show=e},expression:"show"}},[n("div",{staticClass:"modal-content"},[t.hasHeader?n("div",{staticClass:"modal-header"},[n("h5",{staticClass:"modal-title"},[t._t("header")],2),t._v(" "),n("button",{staticClass:"btn-close",attrs:{type:"button","aria-label":"Close"},on:{click:function(e){return t.close()}}})]):t._e(),t._v(" "),n("div",{staticClass:"modal-body"},[t._t("default")],2),t._v(" "),t.hasFooter||t.hasOk?n("div",{staticClass:"modal-footer"},[t.hasFooter?t._t("footer"):n("button",{staticClass:"btn btn-primary",on:{click:function(e){return t.close()}}},[t._v("\n "+t._s(t.okText)+"\n ")])],2):t._e()])]):t._e()};Co._withStripped=!0;const $o=qe({name:"Modal",components:{VueFinalModal:lo},data:function(){return{show:!1,isMounted:!1,zoomEffect:{"enter-class":"modal-zoom","enter-to-class":"modal-zoom-show","leave-to-class":"modal-zoom","leave-class":"modal-zoom-show"}}},props:{okText:{type:String,default:""},effect:{type:String,default:"zoom"},id:{type:String,default:""},small:{type:Boolean,default:!1},large:{type:Boolean,default:!1},center:{type:Boolean,default:!1},backdrop:{type:String,default:""}},computed:{hasHeader:function(){return!!this.$slots.header},hasFooter:function(){return!!this.$slots.footer},hasOk:function(){return""!==this.okText},optionalModalSize:function(){return this.small||this.large?this.small?"modal-sm":"modal-lg":""},optionalCentering:function(){return this.center?"modal-dialog-centered":""},effectClass:function(){return"zoom"===this.effect?this.zoomEffect:"vfm"}},methods:{close:function(){this.show=!1}},mounted:function(){this.isMounted=!0}},Co,[],!1,null,null,null).exports;var ko=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:["scroll-top-button",t.getIconSize(),"d-print-none",{lighten:t.$data.isLighten}],style:t.iconStyle(),attrs:{"aria-hidden":"true"},on:{click:function(e){return t.handleScrollTop()}}},[t._t("icon",(function(){return[n("i",{class:["fas fa-arrow-circle-up"]})]}))],2)};ko._withStripped=!0;var To={box:We,breadcrumb:Ve,dropdown:gn,navbar:Tn,panel:Rn,annotate:In,aPoint:Wn,pic:Vn,quiz:Qn,question:Kn,qOption:Jn,retriever:zn,searchbar:oi,tab:si,tabGroup:li,tabs:ui,thumbnail:hi,trigger:ho,siteNav:fo,submenu:vn,siteNavButton:Cn,pageNavButton:kn,overlay:go,overlaySource:wo,popover:_o,tooltip:xo,modal:$o,VPopover:Ne,VTooltip:Ae,scrollTopButton:qe({name:"ScrollTopButton",props:{icon:{type:String,default:null},iconSize:{type:String,default:"lg"},iconColor:{type:String,default:null},bottom:{type:String,default:null},right:{type:String,default:null}},data:function(){return{isVisible:!1,isLighten:!1,timers:{showOrHideButtonTimer:0,lightenButtonTimer:0}}},methods:{initScrollTopButton:function(){window.addEventListener("scroll",this.promptScrollTopButton)},destroyScrollTopButton:function(){window.removeEventListener("scroll",this.promptScrollTopButton)},promptScrollTopButton:function(){this.resetScrollTopButton(),this.showOrHideScrollTopButton()},resetScrollTopButton:function(){clearTimeout(this.timers.showOrHideButtonTimer),clearTimeout(this.timers.lightenButtonTimer),this.isLighten=!1},showOrHideScrollTopButton:function(){var t=this;this.timers.showOrHideButtonTimer=setTimeout((function(){document.body.scrollTop>20||document.documentElement.scrollTop>20?(t.isVisible=!0,t.lightenScrollTopButton()):t.isVisible=!1}),100)},lightenScrollTopButton:function(){var t=this;this.timers.lightenButtonTimer=setTimeout((function(){t.isLighten||(t.isLighten=!0)}),1e3)},iconStyle:function(){var t={};return t.display=this.isVisible?"block":"none",this.iconColor&&(t.color=this.iconColor),t.bottom=this.bottom?this.bottom:"2%",t.right=this.right?this.right:"2%",t.position="fixed",t},handleScrollTop:function(){document.body.scrollIntoView({block:"start",behavior:"smooth"})},getIconSize:function(){return this.iconSize?"fa-".concat(this.iconSize):""}},mounted:function(){this.initScrollTopButton()},beforeDestroy:function(){this.destroyScrollTopButton()}},ko,[],!1,null,null,null).exports},Eo={closeable:Qe()};const Oo={MarkBindVue:{plugin:{install:function(t){Object.keys(Eo).forEach((function(e){t.directive(e,Eo[e])})),Object.keys(To).forEach((function(e){t.component(e,To[e])}))}},components:To,directives:Eo},appFactory:function(){return{data:function(){return{searchData:[]}},methods:{searchCallback:function(t){var e="".concat(baseUrl,"/").concat(t.src.replace(/.md$/,".html")),n=t.heading?"#".concat(t.heading.id):"";window.location="".concat(e).concat(n)}}}}};i(605);function Bo(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Po(t){for(var e=1;e767&&n&&l()})).observe(t);var i,o=0,r=window.location.hash,s=function(){if(!(window.innerWidth>767)){if(r!==window.location.hash)return r=window.location.hash,void l();r=window.location.hash;var i=window.pageYOffset;if(!(window.innerHeight+i>=document.body.offsetHeight)){if(i>o){t.style.position="static";var s=t.getBoundingClientRect().top+e;if(t.style.position="sticky",s>0)return;n=!0,t.style.overflow="hidden",t.classList.add("hide-header")}else l();o=i}}};window.addEventListener("scroll",(function(){i&&clearTimeout(i),i=setTimeout(s,20)}))}function a(){var e=window.getComputedStyle(t,null);return t.clientHeight-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom)}function l(){n=!1,t.classList.remove("hide-header")}}function zo(){document.querySelectorAll("script[style-bypass-vue-compilation]").forEach((function(t){var e=document.createElement("style");e.innerHTML=t.innerHTML,t.parentNode.replaceChild(e,t)})),Ao()}Vue.use(Lo.plugin),window.onload=function(){if(window.location.hash){var t=document.getElementById(window.location.hash.slice(1));t&&t.scrollIntoView({behavior:"smooth",block:"start",inline:"nearest"})}},window.handleSiteNavClick=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(e){var n=t.getElementsByTagName("a");if(n.length)return void(window.location.href=n[0].href)}var i=t.nextElementSibling,o=t.lastElementChild.lastElementChild;i.classList.toggle("site-nav-dropdown-container-open"),o.classList.toggle("site-nav-rotate-icon")};const Mo={setup:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo()}})).$mount("#app",!0)},setupWithSearch:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo(),function(t){fetch("".concat(baseUrl,"/siteData.json")).then((function(t){return t.json()})).then((function(e){t.searchData=e.pages}))}(this)}})).$mount("#app",!0)}}})(),o=o.default})()); \ No newline at end of file diff --git a/showcase.html b/showcase.html index 8eca092e..504449dd 100644 --- a/showcase.html +++ b/showcase.html @@ -14,7 +14,7 @@ +
    diff --git a/showcase.page-vue-render.js b/showcase.page-vue-render.js index 7f80a073..0059aec9 100644 --- a/showcase.page-vue-render.js +++ b/showcase.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"examples-of-markbind-websites"}},[_v("Examples of MarkBind Websites"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#examples-of-markbind-websites","onclick":"event.stopPropagation()"}})]),_v(" "),_c('h2',{attrs:{"id":"course-websites"}},[_v("Course Websites"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#course-websites","onclick":"event.stopPropagation()"}})]),_v(" "),_c('ul',[_c('li',[_c('a',{attrs:{"href":"https://www.comp.nus.edu.sg/~cs2103"}},[_c('strong',[_v("CS2103/T Software Engineering")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://www.comp.nus.edu.sg/~cs2113"}},[_c('strong',[_v("CS2113/T Software Engineering and OOP")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://nus-cs3281.github.io/website/"}},[_c('strong',[_v("CS3281&2 Thematic Systems Project")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://nus-tic2002-2019.github.io/website/"}},[_c('strong',[_v("TIC2002 Introduction to Software Engineering")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://nus-te3201.github.io/2020/"}},[_c('strong',[_v("TE3201 Software Engineering")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://nus-cs3203.github.io/course-website/"}},[_c('strong',[_v("CS3203 Software Engineering Project")])])])]),_v(" "),_c('h2',{attrs:{"id":"online-books"}},[_v("Online Books"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#online-books","onclick":"event.stopPropagation()"}})]),_v(" "),_c('ul',[_c('li',[_c('a',{attrs:{"href":"https://se-education.org/se-book/"}},[_c('strong',[_v("Software Engineering for Self-Directed Learners")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://se-education.org/learningresources/"}},[_c('strong',[_v("A Student's Guide to Software Engineering Tools & Techniques")])])])]),_v(" "),_c('h2',{attrs:{"id":"product-project-websites"}},[_v("Product/Project Websites"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#product-project-websites","onclick":"event.stopPropagation()"}})]),_v(" "),_c('ul',[_c('li',[_v("This website "),_c('span',{staticClass:"dimmed"},[_v("(i.e., MarkBind website)")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://reposense.org"}},[_c('strong',[_v("reposense.org")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://se-education.org"}},[_c('strong',[_v("se-education.org")])])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://damithc.github.io/ab3-markbind/index.html"}},[_c('strong',[_v("AddressBook Level-3")])])])])])} },function anonymous( ) { -with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Sat, 13 Jul 2024, 11:26:46 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} +with(this){return _c('div',[_c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("[Generated by "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.2")]),_v(" on Tue, 23 Jul 2024, 9:53:29 UTC]")]),_c('br'),_v(" "),_c('small',[_v("This site is powered by "),_c('a',{attrs:{"href":"https://www.netlify.com/"}},[_v("Netlify")]),_v(".")])])])])} }]; \ No newline at end of file