"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3751,0],{9688:function(e,t,r){r.r(t);var a=r(7294),l=r(2051),n=r(5653),c=r(7978);t.default=function(e){var t=e.tags,r=(0,n.MA)();return a.createElement(l.Z,{title:r,wrapperClassName:n.kM.wrapper.docPages,pageClassName:n.kM.page.docsTagsListPage,searchMetadatas:{tag:"doc_tags_list"}},a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement("main",{className:"col col--8 col--offset-2"},a.createElement("h1",null,r),a.createElement(c.Z,{tags:t})))))}},2724:function(e,t,r){r.d(t,{Z:function(){return m}});var a=r(7294),l=r(6010),n=r(2511),c="tag_1Okp",s="tagRegular_3MiF",o="tagWithCount_1HU1";var m=function(e){var t,r=e.permalink,m=e.name,i=e.count;return a.createElement(n.Z,{href:r,className:(0,l.Z)(c,(t={},t[s]=!i,t[o]=i,t))},m,i&&a.createElement("span",null,i))}},7978:function(e,t,r){r.d(t,{Z:function(){return o}});var a=r(7294),l=r(2724),n=r(5653),c="tag_21yA";function s(e){var t=e.letterEntry;return a.createElement("article",null,a.createElement("h2",null,t.letter),a.createElement("ul",{className:"padding--none"},t.tags.map((function(e){return a.createElement("li",{key:e.permalink,className:c},a.createElement(l.Z,e))}))),a.createElement("hr",null))}var o=function(e){var t=e.tags,r=(0,n.PZ)(t);return a.createElement("section",{className:"margin-vert--lg"},r.map((function(e){return a.createElement(s,{key:e.letter,letterEntry:e})})))}},283:function(e,t,r){r.d(t,{Z:function(){return d}});var a=r(7462),l=r(3366),n=r(7294),c=r(6010),s=r(2511),o=r(5653),m=r(9524),i="footerLogoLink_qW4Z",u="footerCopyright_2yvt",f=r(4087),E=["to","href","label","prependBaseUrlToHref"];function g(e){var t=e.to,r=e.href,c=e.label,o=e.prependBaseUrlToHref,i=(0,l.Z)(e,E),u=(0,m.Z)(t),f=(0,m.Z)(r,{forcePrependBaseUrl:!0});return n.createElement(s.Z,(0,a.Z)({className:"footer__link-item"},r?{href:o?f:r}:{to:u},i),c)}var _=function(e){var t=e.sources,r=e.alt;return n.createElement(f.Z,{className:"footer__logo",alt:r,sources:t})};var d=function(){var e=(0,o.LU)().footer,t=e||{},r=t.copyright,a=t.links,l=void 0===a?[]:a,f=t.logo,E=void 0===f?{}:f,d={light:(0,m.Z)(E.src),dark:(0,m.Z)(E.srcDark||E.src)};return e?n.createElement("footer",{className:(0,c.Z)("footer",{"footer--dark":"dark"===e.style})},n.createElement("div",{className:"container"},l&&l.length>0&&n.createElement("div",{className:"row footer__links"},l.map((function(e,t){return n.createElement("div",{key:t,className:"col footer__col"},null!=e.title?n.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?n.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?n.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):n.createElement("li",{key:e.href||e.to,className:"footer__item"},n.createElement(g,e))}))):null)}))),(E||r)&&n.createElement("div",{className:"footer__bottom text--center"},E&&(E.src||E.srcDark)&&n.createElement("div",{className:"margin-bottom--sm"},E.href?n.createElement(s.Z,{href:E.href,className:i},n.createElement(_,{alt:E.alt,sources:d})):n.createElement(_,{alt:E.alt,sources:d})),r?n.createElement("div",{className:u,dangerouslySetInnerHTML:{__html:r}}):null))):null}}}]);